Skip to content

Commit

Permalink
Merge pull request #690 from olim88/mining-features
Browse files Browse the repository at this point in the history
add waypoints for commissions in dwarven mines and glacite.
  • Loading branch information
kevinthegreat1 authored May 14, 2024
2 parents aa24661 + 6cf8e7e commit 9f09dbe
Show file tree
Hide file tree
Showing 9 changed files with 368 additions and 9 deletions.
6 changes: 2 additions & 4 deletions src/main/java/de/hysky/skyblocker/SkyblockerMod.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,7 @@
import de.hysky.skyblocker.skyblock.dungeon.puzzle.waterboard.Waterboard;
import de.hysky.skyblocker.skyblock.dungeon.secrets.DungeonManager;
import de.hysky.skyblocker.skyblock.dungeon.secrets.SecretsTracker;
import de.hysky.skyblocker.skyblock.dwarven.CrystalsHud;
import de.hysky.skyblocker.skyblock.dwarven.CrystalsLocationsManager;
import de.hysky.skyblocker.skyblock.dwarven.DwarvenHud;
import de.hysky.skyblocker.skyblock.dwarven.MetalDetector;
import de.hysky.skyblocker.skyblock.dwarven.*;
import de.hysky.skyblocker.skyblock.end.BeaconHighlighter;
import de.hysky.skyblocker.skyblock.end.EnderNodes;
import de.hysky.skyblocker.skyblock.end.TheEnd;
Expand Down Expand Up @@ -125,6 +122,7 @@ public void onInitializeClient() {
ItemCooldowns.init();
TabHud.init();
DwarvenHud.init();
CommissionLabels.init();
CrystalsHud.init();
FarmingHud.init();
LowerSensitivity.init();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -160,6 +160,56 @@ public static ConfigCategory create(SkyblockerConfig defaults, SkyblockerConfig
.build())

.build())

//commission waypoints
.group(OptionGroup.createBuilder()
.name(Text.translatable("skyblocker.config.mining.commissionWaypoints"))
.collapsed(false)
.option(Option.<MiningConfig.CommissionWaypointMode>createBuilder()
.name(Text.translatable("skyblocker.config.mining.commissionWaypoints.mode"))
.description(OptionDescription.of(Text.translatable("skyblocker.config.mining.commissionWaypoints.mode.@Tooltip[0]"),
Text.translatable("skyblocker.config.mining.commissionWaypoints.mode.@Tooltip[1]"),
Text.translatable("skyblocker.config.mining.commissionWaypoints.mode.@Tooltip[2]"),
Text.translatable("skyblocker.config.mining.commissionWaypoints.mode.@Tooltip[3]"),
Text.translatable("skyblocker.config.mining.commissionWaypoints.mode.@Tooltip[4]")))
.binding(defaults.mining.commissionWaypoints.mode,
() -> config.mining.commissionWaypoints.mode,
newValue -> config.mining.commissionWaypoints.mode = newValue)
.controller(ConfigUtils::createEnumCyclingListController)
.build())
.option(Option.<Boolean>createBuilder()
.name(Text.translatable("skyblocker.config.mining.commissionWaypoints.useColor"))
.description(OptionDescription.of(Text.translatable("skyblocker.config.mining.commissionWaypoints.useColor.@Tooltip")))
.binding(defaults.mining.commissionWaypoints.useColor,
() -> config.mining.commissionWaypoints.useColor,
newValue -> config.mining.commissionWaypoints.useColor = newValue)
.controller(ConfigUtils::createBooleanController)
.build())
.option(Option.<Float>createBuilder()
.name(Text.translatable("skyblocker.config.mining.commissionWaypoints.textScale"))
.description(OptionDescription.of(Text.translatable("skyblocker.config.mining.commissionWaypoints.textScale.@Tooltip")))
.binding(defaults.mining.commissionWaypoints.textScale,
() -> config.mining.commissionWaypoints.textScale,
newValue -> config.mining.commissionWaypoints.textScale = newValue)
.controller(FloatFieldControllerBuilder::create)
.build())
.option(Option.<Boolean>createBuilder()
.name(Text.translatable("skyblocker.config.mining.commissionWaypoints.showBaseCamp"))
.description(OptionDescription.of(Text.translatable("skyblocker.config.mining.commissionWaypoints.showBaseCamp.@Tooltip")))
.binding(defaults.mining.commissionWaypoints.showBaseCamp,
() -> config.mining.commissionWaypoints.showBaseCamp,
newValue -> config.mining.commissionWaypoints.showBaseCamp = newValue)
.controller(ConfigUtils::createBooleanController)
.build())
.option(Option.<Boolean>createBuilder()
.name(Text.translatable("skyblocker.config.mining.commissionWaypoints.showEmissary"))
.description(OptionDescription.of(Text.translatable("skyblocker.config.mining.commissionWaypoints.showEmissary.@Tooltip")))
.binding(defaults.mining.commissionWaypoints.showEmissary,
() -> config.mining.commissionWaypoints.showEmissary,
newValue -> config.mining.commissionWaypoints.showEmissary = newValue)
.controller(ConfigUtils::createBooleanController)
.build())
.build())
.build();
}
}
34 changes: 34 additions & 0 deletions src/main/java/de/hysky/skyblocker/config/configs/MiningConfig.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,9 @@ public class MiningConfig {
@SerialEntry
public CrystalsWaypoints crystalsWaypoints = new CrystalsWaypoints();

@SerialEntry
public CommissionWaypoints commissionWaypoints = new CommissionWaypoints();

public static class DwarvenMines {
@SerialEntry
public boolean solveFetchur = true;
Expand Down Expand Up @@ -85,6 +88,37 @@ public static class CrystalsWaypoints {
public boolean findInChat = true;
}

public static class CommissionWaypoints {
@SerialEntry
public CommissionWaypointMode mode = CommissionWaypointMode.BOTH;

@SerialEntry
public boolean useColor = true;

@SerialEntry
public float textScale = 1;

@SerialEntry
public boolean showBaseCamp = false;

@SerialEntry
public boolean showEmissary = true;
}

public enum CommissionWaypointMode {
OFF, DWARVEN, GLACITE, BOTH;

@Override
public String toString() {
return switch (this) {
case OFF -> "Off";
case DWARVEN -> "Dwarven";
case GLACITE -> "Glacite";
case BOTH -> "Both";
};
}
}

public enum DwarvenHudStyle {
SIMPLE, FANCY, CLASSIC;

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
package de.hysky.skyblocker.skyblock.dwarven;

import de.hysky.skyblocker.config.SkyblockerConfigManager;
import de.hysky.skyblocker.config.configs.MiningConfig;
import de.hysky.skyblocker.utils.Utils;
import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderContext;
import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderEvents;
import net.minecraft.util.math.BlockPos;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;

public class CommissionLabels {

private static final Map<String, MiningLocationLabel.DwarvenCategory> DWARVEN_LOCATIONS = Arrays.stream(MiningLocationLabel.DwarvenCategory.values()).collect(Collectors.toMap(MiningLocationLabel.DwarvenCategory::toString, Function.identity()));
private static final List<MiningLocationLabel.DwarvenEmissaries> DWARVEN_EMISSARIES = Arrays.stream(MiningLocationLabel.DwarvenEmissaries.values()).toList();
private static final Map<String, MiningLocationLabel.GlaciteCategory> GLACITE_LOCATIONS = Arrays.stream(MiningLocationLabel.GlaciteCategory.values()).collect(Collectors.toMap(MiningLocationLabel.GlaciteCategory::toString, Function.identity()));

protected static List<MiningLocationLabel> activeWaypoints = new ArrayList<>();

public static void init() {
WorldRenderEvents.AFTER_TRANSLUCENT.register(CommissionLabels::render);
}

/**
* update the activeWaypoints when there is a change in commissions
*
* @param newCommissions the new commissions to get the waypoints from
* @param completed if there is a commission completed
*/
protected static void update(List<String> newCommissions, boolean completed) {
MiningConfig.CommissionWaypointMode currentMode = SkyblockerConfigManager.get().mining.commissionWaypoints.mode;
if (currentMode == MiningConfig.CommissionWaypointMode.OFF) {
return;
}
activeWaypoints.clear();
String location = Utils.getIslandArea().substring(2);
//find commission locations in glacite
if (location.equals("Dwarven Base Camp") || location.equals("Glacite Tunnels") || location.equals("Glacite Mineshafts") || location.equals("Glacite Lake")) {
if (currentMode != MiningConfig.CommissionWaypointMode.BOTH && currentMode != MiningConfig.CommissionWaypointMode.GLACITE) {
return;
}

for (String commission : newCommissions) {
for (Map.Entry<String, MiningLocationLabel.GlaciteCategory> glaciteLocation : GLACITE_LOCATIONS.entrySet()) {
if (commission.contains(glaciteLocation.getKey())) {
MiningLocationLabel.GlaciteCategory category = glaciteLocation.getValue();
for (BlockPos gemstoneLocation : category.getLocations()) {
activeWaypoints.add(new MiningLocationLabel(category, gemstoneLocation));
}
}
}
}
//add base waypoint if enabled
if (SkyblockerConfigManager.get().mining.commissionWaypoints.showBaseCamp) {
activeWaypoints.add(new MiningLocationLabel(MiningLocationLabel.GlaciteCategory.CAMPFIRE, MiningLocationLabel.GlaciteCategory.CAMPFIRE.getLocations()[0]));
}
return;
}
//find commission locations in dwarven mines
if (currentMode != MiningConfig.CommissionWaypointMode.BOTH && currentMode != MiningConfig.CommissionWaypointMode.DWARVEN) {
return;
}

for (String commission : newCommissions) {
for (Map.Entry<String, MiningLocationLabel.DwarvenCategory> dwarvenLocation : DWARVEN_LOCATIONS.entrySet()) {
if (commission.contains(dwarvenLocation.getKey())) {
MiningLocationLabel.DwarvenCategory category = dwarvenLocation.getValue();
category.isTitanium = commission.contains("Titanium");
activeWaypoints.add(new MiningLocationLabel(category, category.getLocation()));
}
}
}
//if there is a commission completed and enabled show emissary
if (SkyblockerConfigManager.get().mining.commissionWaypoints.showEmissary && completed) {
for (MiningLocationLabel.DwarvenEmissaries emissaries : DWARVEN_EMISSARIES) {
activeWaypoints.add(new MiningLocationLabel(emissaries, emissaries.getLocation()));
}
}
}

/**
* render all the active waypoints
*
* @param context render context
*/
private static void render(WorldRenderContext context) {
if (!Utils.isInDwarvenMines() || SkyblockerConfigManager.get().mining.commissionWaypoints.mode == MiningConfig.CommissionWaypointMode.OFF) {
return;
}
for (MiningLocationLabel MiningLocationLabel : activeWaypoints) {
MiningLocationLabel.render(context);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@

public class CrystalsHud {
private static final MinecraftClient CLIENT = MinecraftClient.getInstance();
protected static final Identifier MAP_TEXTURE = new Identifier(SkyblockerMod.NAMESPACE, "textures/gui/crystals_map.png");
protected static final Identifier MAP_TEXTURE = new Identifier(SkyblockerMod.NAMESPACE, "textures/gui/crystals_map.png");
private static final Identifier MAP_ICON = new Identifier("textures/map/decorations/player.png");
private static final List<String> SMALL_LOCATIONS = List.of("Fairy Grotto", "King Yolkar", "Corleone", "Odawa", "Key Guardian");

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ static Predicate<CrystalsWaypoint> getRangePredicate(Entity entity) {

@Override
public boolean shouldRender() {
return super.shouldRender() ;
return super.shouldRender();
}

@Override
Expand Down Expand Up @@ -84,7 +84,7 @@ enum Category {
private final String name;
private final float[] colorComponents;

Category(String name,Color color) {
Category(String name, Color color) {
this.name = name;
this.color = color;
this.colorComponents = color.getColorComponents(null);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -168,9 +168,9 @@ public static void update() {
|| !Utils.isInCrystalHollows() && !Utils.isInDwarvenMines()) {
return;
}

List<String> oldCommissionNames = commissionList.stream().map(Commission::commission).toList();
boolean oldCompleted = commissionList.stream().anyMatch(commission -> commission.progression.equals("DONE"));
commissionList = new ArrayList<>();

for (PlayerListEntry playerListEntry : CLIENT.getNetworkHandler().getPlayerList().stream().sorted(PlayerListHudAccessor.getOrdering()).toList()) {
if (playerListEntry.getDisplayName() == null) {
continue;
Expand All @@ -197,6 +197,11 @@ public static void update() {
glacitePowder = glaciteMatcher.group(0).split(": ")[1];
}
}
List<String> newCommissionNames = commissionList.stream().map(Commission::commission).toList();
boolean newCompleted = commissionList.stream().anyMatch(commission -> commission.progression.equals("DONE"));
if (!oldCommissionNames.equals(newCommissionNames) || oldCompleted != newCompleted) {
CommissionLabels.update(newCommissionNames, newCompleted);
}
}

// steamroller tactics to get visibility from outside classes (HudCommsWidget)
Expand Down
Loading

0 comments on commit 9f09dbe

Please sign in to comment.