From 792a6c5c4ae1e9ee945fae13c04d416083a886bd Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Thu, 2 May 2024 20:21:05 -0400 Subject: Fix Quiz Solver Crash --- .../de/hysky/skyblocker/skyblock/barn/HungryHiker.java | 3 ++- .../hysky/skyblocker/skyblock/chat/ChatRulesHandler.java | 4 +--- .../hysky/skyblocker/skyblock/dungeon/puzzle/Trivia.java | 3 ++- src/main/java/de/hysky/skyblocker/utils/Utils.java | 15 +++++++++++++++ .../hysky/skyblocker/utils/chat/ChatMessageListener.java | 2 -- 5 files changed, 20 insertions(+), 7 deletions(-) (limited to 'src/main/java/de/hysky') diff --git a/src/main/java/de/hysky/skyblocker/skyblock/barn/HungryHiker.java b/src/main/java/de/hysky/skyblocker/skyblock/barn/HungryHiker.java index f0f75600..4a0213c1 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/barn/HungryHiker.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/barn/HungryHiker.java @@ -1,6 +1,7 @@ package de.hysky.skyblocker.skyblock.barn; import de.hysky.skyblocker.config.SkyblockerConfigManager; +import de.hysky.skyblocker.utils.Utils; import de.hysky.skyblocker.utils.chat.ChatFilterResult; import de.hysky.skyblocker.utils.chat.ChatPatternListener; import net.minecraft.client.MinecraftClient; @@ -29,7 +30,7 @@ public class HungryHiker extends ChatPatternListener { String food = foods.get(foodDescription); if (food == null) return false; String middlePartOfTheMessageToSend = matcher.group(2) != null ? matcher.group(2) : matcher.group(1); - client.player.sendMessage(Text.of("§e[NPC] Hungry Hiker§f: " + middlePartOfTheMessageToSend + " " + food + "."), false); + Utils.sendMessageToBypassEvents(Text.of("§e[NPC] Hungry Hiker§f: " + middlePartOfTheMessageToSend + " " + food + ".")); return true; } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/chat/ChatRulesHandler.java b/src/main/java/de/hysky/skyblocker/skyblock/chat/ChatRulesHandler.java index e4fea9ec..d1c7f4fd 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/chat/ChatRulesHandler.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/chat/ChatRulesHandler.java @@ -139,9 +139,7 @@ public class ChatRulesHandler { //show replacement message in chat //bypass MessageHandler#onGameMessage to avoid activating chat rules again if (!rule.getHideMessage() && CLIENT.player != null) { - CLIENT.inGameHud.getChatHud().addMessage(newMessage); - ((MessageHandlerAccessor) CLIENT.getMessageHandler()).invokeAddToChatLog(newMessage, Instant.now()); - CLIENT.getNarratorManager().narrateSystemMessage(newMessage); + Utils.sendMessageToBypassEvents(newMessage); } //play sound diff --git a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/puzzle/Trivia.java b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/puzzle/Trivia.java index fb418c24..eb09cf6e 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/puzzle/Trivia.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/puzzle/Trivia.java @@ -2,6 +2,7 @@ package de.hysky.skyblocker.skyblock.dungeon.puzzle; import de.hysky.skyblocker.config.SkyblockerConfigManager; import de.hysky.skyblocker.skyblock.waypoint.FairySouls; +import de.hysky.skyblocker.utils.Utils; import de.hysky.skyblocker.utils.chat.ChatFilterResult; import de.hysky.skyblocker.utils.chat.ChatPatternListener; import net.minecraft.client.MinecraftClient; @@ -38,7 +39,7 @@ public class Trivia extends ChatPatternListener { if (!solutions.contains(riddle)) { ClientPlayerEntity player = MinecraftClient.getInstance().player; if (player != null) - MinecraftClient.getInstance().player.sendMessage(Text.of(" " + Formatting.GOLD + matcher.group(2) + Formatting.RED + " " + riddle), false); + Utils.sendMessageToBypassEvents(Text.of(" " + Formatting.GOLD + matcher.group(2) + Formatting.RED + " " + riddle)); return player != null; } } else updateSolutions(matcher.group(0)); diff --git a/src/main/java/de/hysky/skyblocker/utils/Utils.java b/src/main/java/de/hysky/skyblocker/utils/Utils.java index 89495fcb..dc13b61d 100644 --- a/src/main/java/de/hysky/skyblocker/utils/Utils.java +++ b/src/main/java/de/hysky/skyblocker/utils/Utils.java @@ -3,6 +3,7 @@ package de.hysky.skyblocker.utils; import com.google.gson.JsonObject; import com.google.gson.JsonParser; import de.hysky.skyblocker.events.SkyblockEvents; +import de.hysky.skyblocker.mixins.accessors.MessageHandlerAccessor; import de.hysky.skyblocker.skyblock.item.MuseumItemCache; import de.hysky.skyblocker.skyblock.item.tooltip.ItemTooltip; import de.hysky.skyblocker.utils.scheduler.MessageScheduler; @@ -25,6 +26,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.IOException; +import java.time.Instant; import java.util.Collections; import java.util.List; import java.util.concurrent.CompletableFuture; @@ -465,4 +467,17 @@ public class Utils { }); } + + /** + * Used to avoid triggering things like chat rules or chat listeners infinitely, do not use otherwise. + * + * Bypasses MessageHandler#onGameMessage + */ + public static void sendMessageToBypassEvents(Text message) { + MinecraftClient client = MinecraftClient.getInstance(); + + client.inGameHud.getChatHud().addMessage(message); + ((MessageHandlerAccessor) client.getMessageHandler()).invokeAddToChatLog(message, Instant.now()); + client.getNarratorManager().narrateSystemMessage(message); + } } 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 3aea459e..1f0caff5 100644 --- a/src/main/java/de/hysky/skyblocker/utils/chat/ChatMessageListener.java +++ b/src/main/java/de/hysky/skyblocker/utils/chat/ChatMessageListener.java @@ -1,7 +1,5 @@ package de.hysky.skyblocker.utils.chat; -import java.util.Objects; - import de.hysky.skyblocker.skyblock.barn.HungryHiker; import de.hysky.skyblocker.skyblock.barn.TreasureHunter; import de.hysky.skyblocker.skyblock.dungeon.Reparty; -- cgit