aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorKevin <92656833+kevinthegreat1@users.noreply.github.com>2024-10-21 00:59:15 -0400
committerGitHub <noreply@github.com>2024-10-21 00:59:15 -0400
commit47d0444f05e6392dca8585cd5200bbb6f5dc618f (patch)
treeaf3c07c406155c2181bb992c41e4a891f17310f4 /src/main/java
parent2e827728fdf5b390c695348d6aee90aadaf18230 (diff)
downloadSkyblocker-47d0444f05e6392dca8585cd5200bbb6f5dc618f.tar.gz
Skyblocker-47d0444f05e6392dca8585cd5200bbb6f5dc618f.tar.bz2
Skyblocker-47d0444f05e6392dca8585cd5200bbb6f5dc618f.zip
Add SalvageHelper (#999)
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/de/hysky/skyblocker/config/categories/DungeonsCategory.java8
-rw-r--r--src/main/java/de/hysky/skyblocker/config/configs/DungeonsConfig.java3
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/dungeon/SalvageHelper.java52
-rw-r--r--src/main/java/de/hysky/skyblocker/utils/container/ContainerSolverManager.java8
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) {