From 47e9429b81725377c438c52fa2b686d9cb21200f Mon Sep 17 00:00:00 2001 From: GrowlingGrizzly <52770460+GrowlingGrizzly@users.noreply.github.com> Date: Thu, 30 Apr 2026 14:49:15 -0400 Subject: [PATCH 1/4] add fossil muncher solver --- .../config/categories/MiningCategory.java | 7 +++ .../config/configs/MiningConfig.java | 2 + .../dwarven/fossil/FossilMuncher.java | 51 +++++++++++++++++++ .../utils/chat/ChatMessageListener.java | 2 + .../assets/skyblocker/lang/en_us.json | 1 + 5 files changed, 63 insertions(+) create mode 100644 src/main/java/de/hysky/skyblocker/skyblock/dwarven/fossil/FossilMuncher.java diff --git a/src/main/java/de/hysky/skyblocker/config/categories/MiningCategory.java b/src/main/java/de/hysky/skyblocker/config/categories/MiningCategory.java index 781885c62c5..d52f0b17d3e 100644 --- a/src/main/java/de/hysky/skyblocker/config/categories/MiningCategory.java +++ b/src/main/java/de/hysky/skyblocker/config/categories/MiningCategory.java @@ -347,6 +347,13 @@ public static ConfigCategory create(SkyblockerConfig defaults, SkyblockerConfig newValue -> config.mining.glacite.fossilSolver = newValue) .controller(ConfigUtils.createBooleanController()) .build()) + .option(Option.createBuilder() + .name(Component.translatable("skyblocker.config.mining.glacite.solveFossilMuncher")) + .binding(defaults.mining.glacite.solveFossilMuncher, + () -> config.mining.glacite.solveFossilMuncher, + newValue -> config.mining.glacite.solveFossilMuncher = newValue) + .controller(ConfigUtils.createBooleanController()) + .build()) .option(Option.createBuilder() .name(Component.translatable("skyblocker.config.mining.glacite.enableCorpseFinder")) .description(Component.translatable("skyblocker.config.mining.glacite.enableCorpseFinder.@Tooltip")) diff --git a/src/main/java/de/hysky/skyblocker/config/configs/MiningConfig.java b/src/main/java/de/hysky/skyblocker/config/configs/MiningConfig.java index 646f002b072..2a3d13da1e1 100644 --- a/src/main/java/de/hysky/skyblocker/config/configs/MiningConfig.java +++ b/src/main/java/de/hysky/skyblocker/config/configs/MiningConfig.java @@ -153,6 +153,8 @@ public static class Glacite { public boolean fossilSolver = true; + public boolean solveFossilMuncher = true; + public boolean enableCorpseFinder = true; public boolean enableParsingChatCorpseFinder = true; diff --git a/src/main/java/de/hysky/skyblocker/skyblock/dwarven/fossil/FossilMuncher.java b/src/main/java/de/hysky/skyblocker/skyblock/dwarven/fossil/FossilMuncher.java new file mode 100644 index 00000000000..a875c2c4915 --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/skyblock/dwarven/fossil/FossilMuncher.java @@ -0,0 +1,51 @@ +package de.hysky.skyblocker.skyblock.dwarven.fossil; + +import de.hysky.skyblocker.config.SkyblockerConfigManager; +import de.hysky.skyblocker.utils.chat.ChatFilterResult; +import de.hysky.skyblocker.utils.chat.ChatPatternListener; +import net.minecraft.client.Minecraft; +import net.minecraft.network.chat.Component; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.HashMap; +import java.util.Map; +import java.util.regex.Matcher; + +public class FossilMuncher extends ChatPatternListener { + private static final Logger LOGGER = LoggerFactory.getLogger(FossilMuncher.class); + + private static final Map answers; + + public FossilMuncher() { + super("^\\[NPC] Fossil Muncher: the fossil i want ([a-zA-Z, \\-]*)$"); + } + + @Override + public ChatFilterResult state() { + return SkyblockerConfigManager.get().mining.glacite.solveFossilMuncher ? ChatFilterResult.FILTER : ChatFilterResult.PASS; + } + + @Override + public boolean onMatch(Component message, Matcher matcher) { + Minecraft client = Minecraft.getInstance(); + if (client.player == null) return false; + LOGGER.info("Original Fossil Muncher message: {}", message.getString()); + String riddle = matcher.group(1); + String answer = answers.getOrDefault(riddle, riddle); + client.player.sendSystemMessage(Component.nullToEmpty("§e[NPC] §6Fossil Muncher§f: " + answer)); + return true; + } + + static { + answers = new HashMap<>(); + + answers.put("lived underground and dug tunnels", "Claw Fossil"); + answers.put("had a really fancy tail", "Clubbed Fossil"); + answers.put("lived underwater", "Helix Fossil"); + answers.put("was kinda spiny u know", "Spine Fossil"); + answers.put("lived in herds and was quite woolly", "Tusk Fossil"); + answers.put("is pretty rough to look at", "Ugly Fossil"); + answers.put("had a really pointy beak", "Webbed Fossil"); + } +} diff --git a/src/main/java/de/hysky/skyblocker/utils/chat/ChatMessageListener.java b/src/main/java/de/hysky/skyblocker/utils/chat/ChatMessageListener.java index c5eed5ea48f..277df24e1df 100644 --- a/src/main/java/de/hysky/skyblocker/utils/chat/ChatMessageListener.java +++ b/src/main/java/de/hysky/skyblocker/utils/chat/ChatMessageListener.java @@ -20,6 +20,7 @@ import de.hysky.skyblocker.skyblock.chat.filters.ShowOffFilter; import de.hysky.skyblocker.skyblock.chat.filters.SkyMallFilter; import de.hysky.skyblocker.skyblock.chat.filters.SpiritSceptreFilter; +import de.hysky.skyblocker.skyblock.dwarven.fossil.FossilMuncher; import de.hysky.skyblocker.skyblock.slayers.features.SlayerMinibossSpawnFilter; import de.hysky.skyblocker.skyblock.chat.filters.TeleportPadFilter; import de.hysky.skyblocker.skyblock.dungeon.Reparty; @@ -63,6 +64,7 @@ static void init() { // Features new Fetchur(), new Puzzler(), + new FossilMuncher(), new Reparty(), new TreasureHunter(), new HungryHiker(), diff --git a/src/main/resources/assets/skyblocker/lang/en_us.json b/src/main/resources/assets/skyblocker/lang/en_us.json index 08df5b5ea08..b9923792210 100644 --- a/src/main/resources/assets/skyblocker/lang/en_us.json +++ b/src/main/resources/assets/skyblocker/lang/en_us.json @@ -940,6 +940,7 @@ "skyblocker.config.mining.glacite.fossilSolver.toolTip.noFossilFound": "No fossil found", "skyblocker.config.mining.glacite.fossilSolver.toolTip.possiblePatterns": "Possible Patterns: ", "skyblocker.config.mining.glacite.fossilSolver.toolTip.probability": "Probability: ", + "skyblocker.config.mining.glacite.solveFossilMuncher": "Solve Fossil Muncher", "skyblocker.config.mining.pickobulusHelper": "Pickobulus Helper", "skyblocker.config.mining.pickobulusHelper.enable": "Enable Pickobulus Helper", From 04d1441207896f9a8af65a0d877293d410d15724 Mon Sep 17 00:00:00 2001 From: GrowlingGrizzly <52770460+GrowlingGrizzly@users.noreply.github.com> Date: Thu, 30 Apr 2026 15:00:28 -0400 Subject: [PATCH 2/4] fix lang + add test --- .../resources/assets/skyblocker/lang/en_us.json | 2 +- .../dwarven/fossil/FossilMuncherTest.java | 15 +++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 src/test/java/de/hysky/skyblocker/skyblock/dwarven/fossil/FossilMuncherTest.java diff --git a/src/main/resources/assets/skyblocker/lang/en_us.json b/src/main/resources/assets/skyblocker/lang/en_us.json index b9923792210..1a0a77cec10 100644 --- a/src/main/resources/assets/skyblocker/lang/en_us.json +++ b/src/main/resources/assets/skyblocker/lang/en_us.json @@ -940,7 +940,7 @@ "skyblocker.config.mining.glacite.fossilSolver.toolTip.noFossilFound": "No fossil found", "skyblocker.config.mining.glacite.fossilSolver.toolTip.possiblePatterns": "Possible Patterns: ", "skyblocker.config.mining.glacite.fossilSolver.toolTip.probability": "Probability: ", - "skyblocker.config.mining.glacite.solveFossilMuncher": "Solve Fossil Muncher", + "skyblocker.config.mining.glacite.solveFossilMuncher": "Solve Fossil Muncher", "skyblocker.config.mining.pickobulusHelper": "Pickobulus Helper", "skyblocker.config.mining.pickobulusHelper.enable": "Enable Pickobulus Helper", diff --git a/src/test/java/de/hysky/skyblocker/skyblock/dwarven/fossil/FossilMuncherTest.java b/src/test/java/de/hysky/skyblocker/skyblock/dwarven/fossil/FossilMuncherTest.java new file mode 100644 index 00000000000..ec6caa341b8 --- /dev/null +++ b/src/test/java/de/hysky/skyblocker/skyblock/dwarven/fossil/FossilMuncherTest.java @@ -0,0 +1,15 @@ +package de.hysky.skyblocker.skyblock.dwarven.fossil; + +import de.hysky.skyblocker.utils.chat.ChatPatternListenerTest; +import org.junit.jupiter.api.Test; + +class FossilMuncherTest extends ChatPatternListenerTest { + FossilMuncherTest() { + super(new FossilMuncher()); + } + + @Test + public void patternCaptures() { + assertGroup("[NPC] Fossil Muncher: the fossil i want is a hint", 1, "is a hint"); + } +} From 57cfd7887e63de71e23ceb30d5f4cbec30b71c93 Mon Sep 17 00:00:00 2001 From: GrowlingGrizzly <52770460+GrowlingGrizzly@users.noreply.github.com> Date: Fri, 8 May 2026 11:37:14 -0400 Subject: [PATCH 3/4] add missing fossil --- .../dwarven/fossil/FossilMuncher.java | 25 ++++++++----------- 1 file changed, 11 insertions(+), 14 deletions(-) diff --git a/src/main/java/de/hysky/skyblocker/skyblock/dwarven/fossil/FossilMuncher.java b/src/main/java/de/hysky/skyblocker/skyblock/dwarven/fossil/FossilMuncher.java index a875c2c4915..6a65b70a102 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/dwarven/fossil/FossilMuncher.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/dwarven/fossil/FossilMuncher.java @@ -15,7 +15,16 @@ public class FossilMuncher extends ChatPatternListener { private static final Logger LOGGER = LoggerFactory.getLogger(FossilMuncher.class); - private static final Map answers; + private static final Map ANSWERS = Map.of( + "lived underground and dug tunnels", "Claw Fossil", + "had a really fancy tail", "Clubbed Fossil", + "was the king of his kind", "Footprint Fossil", + "lived underwater", "Helix Fossil", + "was kinda spiny u know", "Spine Fossil", + "lived in herds and was quite woolly", "Tusk Fossil", + "is pretty rough to look at", "Ugly Fossil", + "had a really pointy beak", "Webbed Fossil" + ); public FossilMuncher() { super("^\\[NPC] Fossil Muncher: the fossil i want ([a-zA-Z, \\-]*)$"); @@ -32,20 +41,8 @@ public boolean onMatch(Component message, Matcher matcher) { if (client.player == null) return false; LOGGER.info("Original Fossil Muncher message: {}", message.getString()); String riddle = matcher.group(1); - String answer = answers.getOrDefault(riddle, riddle); + String answer = ANSWERS.getOrDefault(riddle, riddle); client.player.sendSystemMessage(Component.nullToEmpty("§e[NPC] §6Fossil Muncher§f: " + answer)); return true; } - - static { - answers = new HashMap<>(); - - answers.put("lived underground and dug tunnels", "Claw Fossil"); - answers.put("had a really fancy tail", "Clubbed Fossil"); - answers.put("lived underwater", "Helix Fossil"); - answers.put("was kinda spiny u know", "Spine Fossil"); - answers.put("lived in herds and was quite woolly", "Tusk Fossil"); - answers.put("is pretty rough to look at", "Ugly Fossil"); - answers.put("had a really pointy beak", "Webbed Fossil"); - } } From 584602085b51f467b69dcabbf7d15979f3831d36 Mon Sep 17 00:00:00 2001 From: GrowlingGrizzly <52770460+GrowlingGrizzly@users.noreply.github.com> Date: Fri, 8 May 2026 11:43:29 -0400 Subject: [PATCH 4/4] intellij optimize imports failed me :( --- .../hysky/skyblocker/skyblock/dwarven/fossil/FossilMuncher.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/de/hysky/skyblocker/skyblock/dwarven/fossil/FossilMuncher.java b/src/main/java/de/hysky/skyblocker/skyblock/dwarven/fossil/FossilMuncher.java index 6a65b70a102..be8b39c4e38 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/dwarven/fossil/FossilMuncher.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/dwarven/fossil/FossilMuncher.java @@ -8,7 +8,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.util.HashMap; import java.util.Map; import java.util.regex.Matcher;