aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/de/hysky
diff options
context:
space:
mode:
authorRime <81419447+Emirlol@users.noreply.github.com>2025-06-24 08:48:54 +0300
committerGitHub <noreply@github.com>2025-06-24 01:48:54 -0400
commit7c30a52417adff0666b54b9e9cc7e9c793558230 (patch)
tree91de7fd79fe1b7ab92e90eb0e3736bba115819d0 /src/main/java/de/hysky
parentd7fc100691152fb56ac09757603e62a3855fb372 (diff)
downloadSkyblocker-7c30a52417adff0666b54b9e9cc7e9c793558230.tar.gz
Skyblocker-7c30a52417adff0666b54b9e9cc7e9c793558230.tar.bz2
Skyblocker-7c30a52417adff0666b54b9e9cc7e9c793558230.zip
Add hunting box helper (#1394)
Diffstat (limited to 'src/main/java/de/hysky')
-rw-r--r--src/main/java/de/hysky/skyblocker/config/categories/HuntingCategory.java15
-rw-r--r--src/main/java/de/hysky/skyblocker/config/configs/HuntingConfig.java8
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/hunting/HuntingBoxHelper.java71
-rw-r--r--src/main/java/de/hysky/skyblocker/utils/container/ContainerSolverManager.java4
4 files changed, 95 insertions, 3 deletions
diff --git a/src/main/java/de/hysky/skyblocker/config/categories/HuntingCategory.java b/src/main/java/de/hysky/skyblocker/config/categories/HuntingCategory.java
index c62c9230..dbd45f12 100644
--- a/src/main/java/de/hysky/skyblocker/config/categories/HuntingCategory.java
+++ b/src/main/java/de/hysky/skyblocker/config/categories/HuntingCategory.java
@@ -1,14 +1,25 @@
package de.hysky.skyblocker.config.categories;
+import de.hysky.skyblocker.config.ConfigUtils;
import de.hysky.skyblocker.config.SkyblockerConfig;
import dev.isxander.yacl3.api.ConfigCategory;
+import dev.isxander.yacl3.api.Option;
+import dev.isxander.yacl3.api.OptionDescription;
import net.minecraft.text.Text;
public class HuntingCategory {
public static ConfigCategory create(SkyblockerConfig defaults, SkyblockerConfig config) {
return ConfigCategory.createBuilder()
- .name(Text.translatable("skyblocker.config.hunting"))
- .build();
+ .name(Text.translatable("skyblocker.config.hunting"))
+ .option(Option.<Boolean>createBuilder()
+ .name(Text.translatable("skyblocker.config.hunting.huntingBoxHelper"))
+ .binding(defaults.hunting.huntingBox.enabled,
+ () -> config.hunting.huntingBox.enabled,
+ value -> config.hunting.huntingBox.enabled = value)
+ .controller(ConfigUtils::createBooleanController)
+ .description(OptionDescription.of(Text.translatable("skyblocker.config.hunting.huntingBoxHelper.@Tooltip")))
+ .build())
+ .build();
}
}
diff --git a/src/main/java/de/hysky/skyblocker/config/configs/HuntingConfig.java b/src/main/java/de/hysky/skyblocker/config/configs/HuntingConfig.java
index e0540677..c152a057 100644
--- a/src/main/java/de/hysky/skyblocker/config/configs/HuntingConfig.java
+++ b/src/main/java/de/hysky/skyblocker/config/configs/HuntingConfig.java
@@ -1,5 +1,13 @@
package de.hysky.skyblocker.config.configs;
+import dev.isxander.yacl3.config.v2.api.SerialEntry;
+
public class HuntingConfig {
+ @SerialEntry
+ public HuntingBox huntingBox = new HuntingBox();
+ public static class HuntingBox {
+ @SerialEntry
+ public boolean enabled = true;
+ }
}
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/hunting/HuntingBoxHelper.java b/src/main/java/de/hysky/skyblocker/skyblock/hunting/HuntingBoxHelper.java
new file mode 100644
index 00000000..13aaa680
--- /dev/null
+++ b/src/main/java/de/hysky/skyblocker/skyblock/hunting/HuntingBoxHelper.java
@@ -0,0 +1,71 @@
+package de.hysky.skyblocker.skyblock.hunting;
+
+import de.hysky.skyblocker.config.SkyblockerConfigManager;
+import de.hysky.skyblocker.utils.ItemUtils;
+import de.hysky.skyblocker.utils.container.SimpleContainerSolver;
+import de.hysky.skyblocker.utils.render.gui.ColorHighlight;
+import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
+import net.minecraft.item.ItemStack;
+import net.minecraft.item.Items;
+import net.minecraft.text.Text;
+import org.apache.commons.lang3.math.NumberUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+public class HuntingBoxHelper extends SimpleContainerSolver {
+ private static final Pattern OWNED_PATTERN = Pattern.compile("Owned: (\\d+) Shards?");
+ private static final Pattern SYPHON_PATTERN = Pattern.compile("Syphon (\\d+) more to level up!");
+ private static final Logger LOGGER = LoggerFactory.getLogger(HuntingBoxHelper.class);
+
+ public HuntingBoxHelper() {
+ super("^Hunting Box$");
+ }
+
+ @Override
+ public List<ColorHighlight> getColors(Int2ObjectMap<ItemStack> slots) {
+ ArrayList<ColorHighlight> highlights = new ArrayList<>();
+ for (var entry : slots.int2ObjectEntrySet()) {
+ ItemStack stack = entry.getValue();
+ if (!stack.isOf(Items.PLAYER_HEAD)) continue;
+
+ List<Text> lore = ItemUtils.getLore(stack);
+ if (lore.isEmpty()) continue;
+
+ String owned = null, syphon = null;
+ for (Text line : lore) { // We iterate manually instead of the ItemUtils helper methods because the lines are adjacent, this way we only iterate once rather than twice.
+ String text = line.getString();
+ if (owned == null) {
+ Matcher matcher = OWNED_PATTERN.matcher(text);
+ if (matcher.matches()) owned = matcher.group(1);
+ } else {
+ Matcher matcher = SYPHON_PATTERN.matcher(text);
+ if (matcher.matches()) syphon = matcher.group(1);
+ break; // Somehow owned pattern matched but not syphon pattern
+ }
+ }
+ if (owned == null || syphon == null) continue;
+ int ownedCount = NumberUtils.toInt(owned, -1);
+ int syphonCount = NumberUtils.toInt(syphon, -1);
+ if (ownedCount < 0 || syphonCount < 0) {
+ LOGGER.warn("Invalid owned or syphon count in Hunting Box: owned={}, syphon={}.", owned, syphon);
+ continue;
+ }
+ if (ownedCount >= syphonCount) {
+ boolean enoughButNotUnlocked = lore.getLast().getString().startsWith("Requires");
+ highlights.add(enoughButNotUnlocked ? ColorHighlight.yellow(entry.getIntKey())
+ : ColorHighlight.green(entry.getIntKey()));
+ }
+ }
+ return highlights;
+ }
+
+ @Override
+ public boolean isEnabled() {
+ return SkyblockerConfigManager.get().hunting.huntingBox.enabled;
+ }
+}
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 5b7f999b..5e4970d5 100644
--- a/src/main/java/de/hysky/skyblocker/utils/container/ContainerSolverManager.java
+++ b/src/main/java/de/hysky/skyblocker/utils/container/ContainerSolverManager.java
@@ -19,6 +19,7 @@ import de.hysky.skyblocker.skyblock.dwarven.fossil.FossilSolver;
import de.hysky.skyblocker.skyblock.experiment.ChronomatronSolver;
import de.hysky.skyblocker.skyblock.experiment.SuperpairsSolver;
import de.hysky.skyblocker.skyblock.experiment.UltrasequencerSolver;
+import de.hysky.skyblocker.skyblock.hunting.HuntingBoxHelper;
import de.hysky.skyblocker.skyblock.item.tooltip.adders.BitsHelper;
import de.hysky.skyblocker.utils.Utils;
import de.hysky.skyblocker.utils.render.gui.ColorHighlight;
@@ -56,7 +57,8 @@ public class ContainerSolverManager {
new ReorderHelper(),
BitsHelper.INSTANCE,
new RaffleTaskHighlight(),
- new FossilSolver()
+ new FossilSolver(),
+ new HuntingBoxHelper()
};
private static ContainerSolver currentSolver = null;
private static List<ColorHighlight> highlights;