aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/de
diff options
context:
space:
mode:
authorKevin <92656833+kevinthegreat1@users.noreply.github.com>2024-03-18 00:41:24 -0400
committerGitHub <noreply@github.com>2024-03-18 00:41:24 -0400
commit969fa4fbac7e769742c47d2fc3adacf2e212053a (patch)
tree5b41d94fd1a5684e51f4850c2c196b457e3d3561 /src/main/java/de
parent02a7ecc471c3a24a0ef4c9a58b70ebf2510ed55f (diff)
downloadSkyblocker-969fa4fbac7e769742c47d2fc3adacf2e212053a.tar.gz
Skyblocker-969fa4fbac7e769742c47d2fc3adacf2e212053a.tar.bz2
Skyblocker-969fa4fbac7e769742c47d2fc3adacf2e212053a.zip
Fix potential stack overflow with chat rules (#592)
Diffstat (limited to 'src/main/java/de')
-rw-r--r--src/main/java/de/hysky/skyblocker/mixin/accessor/BeaconBlockEntityRendererInvoker.java2
-rw-r--r--src/main/java/de/hysky/skyblocker/mixin/accessor/MessageHandlerAccessor.java14
-rw-r--r--src/main/java/de/hysky/skyblocker/mixin/accessor/PlayerListHudAccessor.java3
-rw-r--r--src/main/java/de/hysky/skyblocker/mixin/accessor/RecipeBookWidgetAccessor.java1
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/chat/ChatRulesHandler.java27
5 files changed, 32 insertions, 15 deletions
diff --git a/src/main/java/de/hysky/skyblocker/mixin/accessor/BeaconBlockEntityRendererInvoker.java b/src/main/java/de/hysky/skyblocker/mixin/accessor/BeaconBlockEntityRendererInvoker.java
index 0b607fce..e470cdae 100644
--- a/src/main/java/de/hysky/skyblocker/mixin/accessor/BeaconBlockEntityRendererInvoker.java
+++ b/src/main/java/de/hysky/skyblocker/mixin/accessor/BeaconBlockEntityRendererInvoker.java
@@ -11,6 +11,6 @@ public interface BeaconBlockEntityRendererInvoker {
@SuppressWarnings("unused")
@Invoker("renderBeam")
static void renderBeam(MatrixStack matrices, VertexConsumerProvider vertexConsumers, float tickDelta, long worldTime, int yOffset, int maxY, float[] color) {
- throw new IllegalStateException("Mixin invoker failed to apply.");
+ throw new UnsupportedOperationException();
}
}
diff --git a/src/main/java/de/hysky/skyblocker/mixin/accessor/MessageHandlerAccessor.java b/src/main/java/de/hysky/skyblocker/mixin/accessor/MessageHandlerAccessor.java
new file mode 100644
index 00000000..6e5793e3
--- /dev/null
+++ b/src/main/java/de/hysky/skyblocker/mixin/accessor/MessageHandlerAccessor.java
@@ -0,0 +1,14 @@
+package de.hysky.skyblocker.mixin.accessor;
+
+import net.minecraft.client.network.message.MessageHandler;
+import net.minecraft.text.Text;
+import org.spongepowered.asm.mixin.Mixin;
+import org.spongepowered.asm.mixin.gen.Invoker;
+
+import java.time.Instant;
+
+@Mixin(MessageHandler.class)
+public interface MessageHandlerAccessor {
+ @Invoker
+ void invokeAddToChatLog(Text message, Instant timestamp);
+}
diff --git a/src/main/java/de/hysky/skyblocker/mixin/accessor/PlayerListHudAccessor.java b/src/main/java/de/hysky/skyblocker/mixin/accessor/PlayerListHudAccessor.java
index d82c568f..c982249a 100644
--- a/src/main/java/de/hysky/skyblocker/mixin/accessor/PlayerListHudAccessor.java
+++ b/src/main/java/de/hysky/skyblocker/mixin/accessor/PlayerListHudAccessor.java
@@ -9,9 +9,8 @@ import java.util.Comparator;
@Mixin(PlayerListHud.class)
public interface PlayerListHudAccessor {
-
@Accessor("ENTRY_ORDERING")
static Comparator<PlayerListEntry> getOrdering() {
- throw new AssertionError();
+ throw new UnsupportedOperationException();
}
}
diff --git a/src/main/java/de/hysky/skyblocker/mixin/accessor/RecipeBookWidgetAccessor.java b/src/main/java/de/hysky/skyblocker/mixin/accessor/RecipeBookWidgetAccessor.java
index aecdf9b7..30aad00c 100644
--- a/src/main/java/de/hysky/skyblocker/mixin/accessor/RecipeBookWidgetAccessor.java
+++ b/src/main/java/de/hysky/skyblocker/mixin/accessor/RecipeBookWidgetAccessor.java
@@ -9,6 +9,7 @@ import org.spongepowered.asm.mixin.gen.Accessor;
public interface RecipeBookWidgetAccessor {
@Accessor
String getSearchText();
+
@Accessor
TextFieldWidget getSearchField();
}
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 13115bee..2a103d13 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/chat/ChatRulesHandler.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/chat/ChatRulesHandler.java
@@ -5,8 +5,8 @@ import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import com.mojang.serialization.Codec;
import com.mojang.serialization.JsonOps;
-
import de.hysky.skyblocker.SkyblockerMod;
+import de.hysky.skyblocker.mixin.accessor.MessageHandlerAccessor;
import de.hysky.skyblocker.utils.Http;
import de.hysky.skyblocker.utils.Utils;
import net.fabricmc.fabric.api.client.message.v1.ClientReceiveMessageEvents;
@@ -21,10 +21,10 @@ import org.slf4j.LoggerFactory;
import java.io.BufferedReader;
import java.io.BufferedWriter;
-import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.NoSuchFileException;
import java.nio.file.Path;
+import java.time.Instant;
import java.util.*;
import java.util.concurrent.CompletableFuture;
@@ -53,16 +53,16 @@ public class ChatRulesHandler {
private static void loadChatRules() {
try (BufferedReader reader = Files.newBufferedReader(CHAT_RULE_FILE)) {
Map<String, List<ChatRule>> chatRules = MAP_CODEC.parse(JsonOps.INSTANCE, JsonParser.parseReader(reader)).result().orElseThrow();
- LOGGER.info("[Sky: " + chatRules.toString());
-
+ LOGGER.info("[Skyblocker Chat Rules]: {}", chatRules);
+
chatRuleList.addAll(chatRules.get("rules"));
- LOGGER.info("[Skyblocker] Loaded chat rules");
+ LOGGER.info("[Skyblocker Chat Rules] Loaded chat rules");
} catch (NoSuchFileException e) {
registerDefaultChatRules();
- LOGGER.warn("[Skyblocker] chat rule file not found, using default rules. This is normal when using for the first time.");
+ LOGGER.warn("[Skyblocker Chat Rules] chat rules file not found, using default rules. This is normal when using for the first time.");
} catch (Exception e) {
- LOGGER.error("[Skyblocker] Failed to load shortcuts file", e);
+ LOGGER.error("[Skyblocker Chat Rules] Failed to load chat rules file", e);
}
}
@@ -92,7 +92,7 @@ public class ChatRulesHandler {
locations.put(entry.getValue().getAsString().replace(" ", "").toLowerCase(), entry.getKey());
}
} catch (Exception e) {
- LOGGER.error("[Skyblocker] Failed to load locations!", e);
+ LOGGER.error("[Skyblocker Chat Rules] Failed to load locations!", e);
}
}
@@ -101,9 +101,9 @@ public class ChatRulesHandler {
chatRuleJson.add("rules", ChatRule.LIST_CODEC.encodeStart(JsonOps.INSTANCE, chatRuleList).result().orElseThrow());
try (BufferedWriter writer = Files.newBufferedWriter(CHAT_RULE_FILE)) {
SkyblockerMod.GSON.toJson(chatRuleJson, writer);
- LOGGER.info("[Skyblocker] Saved chat rules file");
+ LOGGER.info("[Skyblocker Chat Rules] Saved chat rules file");
} catch (Exception e) {
- LOGGER.error("[Skyblocker] Failed to save chat rules file", e);
+ LOGGER.error("[Skyblocker Chat Rules] Failed to save chat rules file", e);
}
}
@@ -136,9 +136,12 @@ public class ChatRulesHandler {
CLIENT.player.sendMessage(newMessage, true);
}
- //hide message
+ //show replacement message in chat
+ //bypass MessageHandler#onGameMessage to avoid activating chat rules again
if (!rule.getHideMessage() && CLIENT.player != null) {
- CLIENT.player.sendMessage(newMessage, false);
+ CLIENT.inGameHud.getChatHud().addMessage(newMessage);
+ ((MessageHandlerAccessor) CLIENT.getMessageHandler()).invokeAddToChatLog(newMessage, Instant.now());
+ CLIENT.getNarratorManager().narrateSystemMessage(newMessage);
}
//play sound