diff options
| author | Rime <81419447+Emirlol@users.noreply.github.com> | 2025-06-24 08:48:54 +0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-06-24 01:48:54 -0400 |
| commit | 7c30a52417adff0666b54b9e9cc7e9c793558230 (patch) | |
| tree | 91de7fd79fe1b7ab92e90eb0e3736bba115819d0 /src/main/java/de/hysky | |
| parent | d7fc100691152fb56ac09757603e62a3855fb372 (diff) | |
| download | Skyblocker-7c30a52417adff0666b54b9e9cc7e9c793558230.tar.gz Skyblocker-7c30a52417adff0666b54b9e9cc7e9c793558230.tar.bz2 Skyblocker-7c30a52417adff0666b54b9e9cc7e9c793558230.zip | |
Add hunting box helper (#1394)
Diffstat (limited to 'src/main/java/de/hysky')
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; |
