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..be8b39c4e38 --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/skyblock/dwarven/fossil/FossilMuncher.java @@ -0,0 +1,47 @@ +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.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 = 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, \\-]*)$"); + } + + @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; + } +} 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..1a0a77cec10 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", 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"); + } +}