summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/main/java/moe/nea/ultranotifier/mixin/ChatHudCategoryTracker.java2
-rw-r--r--src/main/java/moe/nea/ultranotifier/mixin/FilterVisibleMessagePatch.java48
-rw-r--r--src/main/kotlin/event/VisibleChatMessageAddedEvent.kt11
-rw-r--r--src/main/kotlin/util/minecrat/infer.kt4
-rw-r--r--versions/mapping-1.16.2-forge-1.12.2.txt5
5 files changed, 65 insertions, 5 deletions
diff --git a/src/main/java/moe/nea/ultranotifier/mixin/ChatHudCategoryTracker.java b/src/main/java/moe/nea/ultranotifier/mixin/ChatHudCategoryTracker.java
index ac187d9..6205506 100644
--- a/src/main/java/moe/nea/ultranotifier/mixin/ChatHudCategoryTracker.java
+++ b/src/main/java/moe/nea/ultranotifier/mixin/ChatHudCategoryTracker.java
@@ -22,7 +22,7 @@ public class ChatHudCategoryTracker<T> implements HasCategorizedChatLine {
@Unique
CategorizedChatLine categorizedSelf;
- @Inject(method = "<init>", at = @At("TAIL"))
+ @Inject(method = "<init>", at = @At("RETURN"))
private void onInit(
int creationTick,
//#if MC>1.20
diff --git a/src/main/java/moe/nea/ultranotifier/mixin/FilterVisibleMessagePatch.java b/src/main/java/moe/nea/ultranotifier/mixin/FilterVisibleMessagePatch.java
index 13ef7cc..22e06b5 100644
--- a/src/main/java/moe/nea/ultranotifier/mixin/FilterVisibleMessagePatch.java
+++ b/src/main/java/moe/nea/ultranotifier/mixin/FilterVisibleMessagePatch.java
@@ -4,13 +4,21 @@ import moe.nea.ultranotifier.event.UltraNotifierEvents;
import moe.nea.ultranotifier.event.VisibleChatMessageAddedEvent;
import net.minecraft.client.gui.hud.ChatHud;
import net.minecraft.client.gui.hud.ChatHudLine;
+import net.minecraft.text.Text;
import org.spongepowered.asm.mixin.Mixin;
+import org.spongepowered.asm.mixin.Unique;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
+import org.spongepowered.asm.mixin.injection.ModifyVariable;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
+import org.spongepowered.asm.mixin.injection.callback.LocalCapture;
+
+import java.util.Collections;
+import java.util.List;
@Mixin(ChatHud.class)
public class FilterVisibleMessagePatch {
+//#if MC > 1.18
@Inject(
method = "addVisibleMessage",
at = @At("HEAD"),
@@ -21,4 +29,44 @@ public class FilterVisibleMessagePatch {
ci.cancel();
}
}
+//#else
+//$$ @Unique
+//$$ ChatHudLine lastAddedChatLine;
+//$$
+//$$ @Inject(method = "reset()V",
+//$$ at = @At(value = "INVOKE",
+//$$ target = "Lnet/minecraft/client/gui/hud/ChatHud;addMessage(Lnet/minecraft/text/Text;IIZ)V"),
+//$$ locals = LocalCapture.CAPTURE_FAILHARD)
+//$$ private void saveMessageAboutToBeRefreshed(CallbackInfo ci, int i, ChatHudLine chatLine) {
+//$$ lastAddedChatLine = chatLine;
+//$$ }
+//$$
+//$$ @Inject(method = "addMessage(Lnet/minecraft/text/Text;IIZ)V", at = @At(value = "INVOKE",
+//#if MC > 1.16
+//$$ target = "Lnet/minecraft/client/util/ChatMessages;breakRenderedChatMessageLines(Lnet/minecraft/text/StringVisitable;ILnet/minecraft/client/font/TextRenderer;)Ljava/util/List;"
+//#else
+//$$ target = "Lnet/minecraft/client/gui/GuiUtilRenderComponents;splitText(Lnet/minecraft/util/text/ITextComponent;ILnet/minecraft/client/gui/FontRenderer;ZZ)Ljava/util/List;"
+//#endif
+//$$ ))
+//$$ private void saveMessage(Text chatComponent, int chatLineId, int updateCounter, boolean displayOnly, CallbackInfo ci) {
+//$$ if (lastAddedChatLine != null && lastAddedChatLine.getText() != chatComponent) {
+//$$ throw new RuntimeException("Out of order message received");
+//$$ }
+//$$ if (lastAddedChatLine == null)
+//$$ lastAddedChatLine = new ChatHudLine(chatLineId, chatComponent, updateCounter);
+//$$ }
+//$$
+//$$ @ModifyVariable(
+//$$ method = "addMessage(Lnet/minecraft/text/Text;IIZ)V",
+//$$ at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/hud/ChatHud;isChatFocused()Z")
+//$$ )
+//$$ private List onAddVisibleMessage(List value) {
+//$$ VisibleChatMessageAddedEvent event = new VisibleChatMessageAddedEvent(lastAddedChatLine);
+//$$ lastAddedChatLine = null;
+//$$ if (UltraNotifierEvents.post(event).isCancelled()) {
+//$$ return Collections.emptyList();
+//$$ }
+//$$ return value;
+//$$ }
+//#endif
}
diff --git a/src/main/kotlin/event/VisibleChatMessageAddedEvent.kt b/src/main/kotlin/event/VisibleChatMessageAddedEvent.kt
index 5d37451..97d919b 100644
--- a/src/main/kotlin/event/VisibleChatMessageAddedEvent.kt
+++ b/src/main/kotlin/event/VisibleChatMessageAddedEvent.kt
@@ -1,8 +1,17 @@
package moe.nea.ultranotifier.event
import net.minecraft.client.gui.hud.ChatHudLine
+import net.minecraft.text.Text
+
+typealias ChattyHudLine =
+ ChatHudLine
+//#if MC < 1.20
+//#if MC > 1.16
+//$$ <Text>
+//#endif
+//#endif
data class VisibleChatMessageAddedEvent(
- val chatLine: ChatHudLine,
+ val chatLine: ChattyHudLine,
) : UltraEvent()
diff --git a/src/main/kotlin/util/minecrat/infer.kt b/src/main/kotlin/util/minecrat/infer.kt
index 479b186..dc89392 100644
--- a/src/main/kotlin/util/minecrat/infer.kt
+++ b/src/main/kotlin/util/minecrat/infer.kt
@@ -3,8 +3,8 @@
package moe.nea.ultranotifier.util.minecrat
import moe.nea.ultranotifier.datamodel.HasCategorizedChatLine
+import moe.nea.ultranotifier.event.ChattyHudLine
import net.minecraft.client.gui.hud.ChatHud
-import net.minecraft.client.gui.hud.ChatHudLine
import kotlin.contracts.ExperimentalContracts
import kotlin.contracts.contract
@@ -19,4 +19,4 @@ fun ChatHud.accessor(): AccessorChatHud {
return this as AccessorChatHud
}
-val ChatHudLine.category get() = (this as HasCategorizedChatLine).categorizedChatLine_ultraNotifier
+val ChattyHudLine.category get() = (this as HasCategorizedChatLine).categorizedChatLine_ultraNotifier
diff --git a/versions/mapping-1.16.2-forge-1.12.2.txt b/versions/mapping-1.16.2-forge-1.12.2.txt
index 841adc9..08243e4 100644
--- a/versions/mapping-1.16.2-forge-1.12.2.txt
+++ b/versions/mapping-1.16.2-forge-1.12.2.txt
@@ -9,5 +9,8 @@ net.minecraftforge.event.TickEvent$ClientTickEvent net.minecraftforge.fml.common
net.minecraft.client.Options textBackgroundOpacity chatOpacity
net.minecraft.client.gui.components.ChatComponent getScale() getChatScale()
net.minecraft.client.gui.components.ChatComponent getLinesPerPage() getLineCount()
+net.minecraft.client.gui.components.ChatComponent addMessage(Lnet/minecraft/network/chat/Component;IIZ)V setChatLine()
net.minecraft.client.gui.components.ChatComponent net.minecraft.client.gui.GuiNewChat
-
+net.minecraft.client.gui.components.ComponentRenderUtils net.minecraft.client.gui.GuiUtilRenderComponents
+net.minecraft.client.GuiMessage net.minecraft.client.gui.ChatLine
+net.minecraft.client.GuiMessage getMessage() getChatComponent()