diff options
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() |