diff options
| author | Kevin <92656833+kevinthegreat1@users.noreply.github.com> | 2024-10-21 00:59:15 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-10-21 00:59:15 -0400 |
| commit | 47d0444f05e6392dca8585cd5200bbb6f5dc618f (patch) | |
| tree | af3c07c406155c2181bb992c41e4a891f17310f4 /src/main/java | |
| parent | 2e827728fdf5b390c695348d6aee90aadaf18230 (diff) | |
| download | Skyblocker-47d0444f05e6392dca8585cd5200bbb6f5dc618f.tar.gz Skyblocker-47d0444f05e6392dca8585cd5200bbb6f5dc618f.tar.bz2 Skyblocker-47d0444f05e6392dca8585cd5200bbb6f5dc618f.zip | |
Add SalvageHelper (#999)
Diffstat (limited to 'src/main/java')
4 files changed, 68 insertions, 3 deletions
diff --git a/src/main/java/de/hysky/skyblocker/config/categories/DungeonsCategory.java b/src/main/java/de/hysky/skyblocker/config/categories/DungeonsCategory.java index 3365cf4e..1597cffc 100644 --- a/src/main/java/de/hysky/skyblocker/config/categories/DungeonsCategory.java +++ b/src/main/java/de/hysky/skyblocker/config/categories/DungeonsCategory.java @@ -35,6 +35,14 @@ public class DungeonsCategory { newValue -> config.dungeons.croesusHelper = newValue) .controller(ConfigUtils::createBooleanController) .build()) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.dungeons.salvageHelper")) + .description(OptionDescription.of(Text.translatable("skyblocker.config.dungeons.salvageHelper.@Tooltip"))) + .binding(defaults.dungeons.salvageHelper, + () -> config.dungeons.salvageHelper, + newValue -> config.dungeons.salvageHelper = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) .option(Option.<Boolean>createBuilder() .name(Text.translatable("skyblocker.config.dungeons.playerSecretsTracker")) .description(OptionDescription.of(Text.translatable("skyblocker.config.dungeons.playerSecretsTracker.@Tooltip"))) diff --git a/src/main/java/de/hysky/skyblocker/config/configs/DungeonsConfig.java b/src/main/java/de/hysky/skyblocker/config/configs/DungeonsConfig.java index 2bd8f12c..43fe866d 100644 --- a/src/main/java/de/hysky/skyblocker/config/configs/DungeonsConfig.java +++ b/src/main/java/de/hysky/skyblocker/config/configs/DungeonsConfig.java @@ -12,6 +12,9 @@ public class DungeonsConfig { @SerialEntry public boolean croesusHelper = true; + @SerialEntry + public boolean salvageHelper = true; + @SerialEntry public boolean playerSecretsTracker = false; diff --git a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/SalvageHelper.java b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/SalvageHelper.java new file mode 100644 index 00000000..0d945d5d --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/SalvageHelper.java @@ -0,0 +1,52 @@ +package de.hysky.skyblocker.skyblock.dungeon; + +import de.hysky.skyblocker.config.SkyblockerConfigManager; +import de.hysky.skyblocker.utils.ItemUtils; +import de.hysky.skyblocker.utils.container.ContainerSolverManager; +import de.hysky.skyblocker.utils.container.SimpleContainerSolver; +import de.hysky.skyblocker.utils.networth.NetworthCalculator; +import de.hysky.skyblocker.utils.render.gui.ColorHighlight; +import it.unimi.dsi.fastutil.ints.Int2ObjectMap; +import net.azureaaron.networth.NetworthResult; +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.gui.screen.Screen; +import net.minecraft.client.gui.screen.ingame.GenericContainerScreen; +import net.minecraft.item.ItemStack; + +import java.util.List; +import java.util.regex.Pattern; + +public class SalvageHelper extends SimpleContainerSolver { + /** + * Pattern to match dungeon items that are salvageable, using a negative lookahead to exclude dungeon items. + */ + private static final Pattern DUNGEON_SALVAGABLE = Pattern.compile("DUNGEON(?! ITEM)"); + + public SalvageHelper() { + super("^Salvage Items"); + } + + @Override + public List<ColorHighlight> getColors(Int2ObjectMap<ItemStack> slots) { + Screen currentScreen = MinecraftClient.getInstance().currentScreen; + if (!(currentScreen instanceof GenericContainerScreen genericContainerScreen)) return List.of(); + return ContainerSolverManager.slotMap(genericContainerScreen.getScreenHandler().slots.subList(genericContainerScreen.getScreenHandler().getRows() * 9, genericContainerScreen.getScreenHandler().slots.size())).int2ObjectEntrySet().stream() + .filter(entry -> ItemUtils.getLoreLineIfContainsMatch(entry.getValue(), DUNGEON_SALVAGABLE) != null) + .filter(entry -> isPriceWithinRange(entry.getValue())) + .map(entry -> ColorHighlight.green(entry.getIntKey() + genericContainerScreen.getScreenHandler().getRows() * 9)) + .toList(); + } + + /** + * Checks if the price of the item is within the range of 0 to 100,000 coins, which should be safe to salvage. + */ + private boolean isPriceWithinRange(ItemStack stack) { + NetworthResult result = NetworthCalculator.getItemNetworth(stack); + return result.price() > 0 && result.price() < 100_000; + } + + @Override + public boolean isEnabled() { + return SkyblockerConfigManager.get().dungeons.salvageHelper; + } +} diff --git a/src/main/java/de/hysky/skyblocker/utils/container/ContainerSolverManager.java b/src/main/java/de/hysky/skyblocker/utils/container/ContainerSolverManager.java index d59e240e..923fb6cc 100644 --- a/src/main/java/de/hysky/skyblocker/utils/container/ContainerSolverManager.java +++ b/src/main/java/de/hysky/skyblocker/utils/container/ContainerSolverManager.java @@ -9,6 +9,7 @@ import de.hysky.skyblocker.skyblock.bazaar.ReorderHelper; import de.hysky.skyblocker.skyblock.chocolatefactory.ChocolateFactorySolver; import de.hysky.skyblocker.skyblock.dungeon.CroesusHelper; import de.hysky.skyblocker.skyblock.dungeon.CroesusProfit; +import de.hysky.skyblocker.skyblock.dungeon.SalvageHelper; import de.hysky.skyblocker.skyblock.dungeon.terminal.ColorTerminal; import de.hysky.skyblocker.skyblock.dungeon.terminal.LightsOnTerminal; import de.hysky.skyblocker.skyblock.dungeon.terminal.OrderTerminal; @@ -42,6 +43,7 @@ public class ContainerSolverManager { new LightsOnTerminal(), new CroesusHelper(), new CroesusProfit(), + new SalvageHelper(), new ChronomatronSolver(), new CommissionHighlight(), new SuperpairsSolver(), @@ -72,7 +74,7 @@ public class ContainerSolverManager { MatrixStack matrices = context.getMatrices(); matrices.push(); matrices.translate(((HandledScreenAccessor) genericContainerScreen).getX(), ((HandledScreenAccessor) genericContainerScreen).getY(), 300); - onDraw(context, genericContainerScreen.getScreenHandler().slots.subList(0, genericContainerScreen.getScreenHandler().getRows() * 9)); + onDraw(context, genericContainerScreen, genericContainerScreen.getScreenHandler().slots); matrices.pop(); }); ScreenEvents.remove(screen).register(screen1 -> clearScreen()); @@ -126,9 +128,9 @@ public class ContainerSolverManager { return currentSolver != null && currentSolver.onClickSlot(slot, stack, screenId); } - public static void onDraw(DrawContext context, List<Slot> slots) { + public static void onDraw(DrawContext context, GenericContainerScreen genericContainerScreen, List<Slot> slots) { if (currentSolver == null) return; - if (highlights == null) highlights = currentSolver.getColors(slotMap(slots)); + if (highlights == null) highlights = currentSolver.getColors(slotMap(slots.subList(0, genericContainerScreen.getScreenHandler().getRows() * 9))); RenderSystem.enableDepthTest(); RenderSystem.colorMask(true, true, true, false); for (ColorHighlight highlight : highlights) { |
