summaryrefslogtreecommitdiff
path: root/src/main/java/moe/nea/ultranotifier
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/moe/nea/ultranotifier')
-rw-r--r--src/main/java/moe/nea/ultranotifier/mixin/AccessorChatHudImpl.java23
-rw-r--r--src/main/java/moe/nea/ultranotifier/mixin/AccessorCommandHandler.java18
-rw-r--r--src/main/java/moe/nea/ultranotifier/mixin/ChatHudCategoryTracker.java49
-rw-r--r--src/main/java/moe/nea/ultranotifier/mixin/ChatHudMessageAdded.java23
-rw-r--r--src/main/java/moe/nea/ultranotifier/mixin/ChatScreenTabRenderer.java77
-rw-r--r--src/main/java/moe/nea/ultranotifier/mixin/FilterVisibleMessagePatch.java72
6 files changed, 251 insertions, 11 deletions
diff --git a/src/main/java/moe/nea/ultranotifier/mixin/AccessorChatHudImpl.java b/src/main/java/moe/nea/ultranotifier/mixin/AccessorChatHudImpl.java
new file mode 100644
index 0000000..ec30dcf
--- /dev/null
+++ b/src/main/java/moe/nea/ultranotifier/mixin/AccessorChatHudImpl.java
@@ -0,0 +1,23 @@
+package moe.nea.ultranotifier.mixin;
+
+import moe.nea.ultranotifier.util.minecrat.AccessorChatHud;
+import net.minecraft.client.gui.hud.ChatHud;
+import org.spongepowered.asm.mixin.Mixin;
+import org.spongepowered.asm.mixin.Shadow;
+
+@Mixin(ChatHud.class)
+public abstract class AccessorChatHudImpl implements AccessorChatHud {
+
+ //#if MC>1.17
+ @Shadow
+ protected abstract int getLineHeight();
+ //#endif
+ @Override
+ public int getLineHeight_ultranotifier() {
+ //#if MC>1.17
+ return getLineHeight();
+ //#else
+ //$$return 9; // TODO: better typing here
+ //#endif
+ }
+}
diff --git a/src/main/java/moe/nea/ultranotifier/mixin/AccessorCommandHandler.java b/src/main/java/moe/nea/ultranotifier/mixin/AccessorCommandHandler.java
new file mode 100644
index 0000000..9218421
--- /dev/null
+++ b/src/main/java/moe/nea/ultranotifier/mixin/AccessorCommandHandler.java
@@ -0,0 +1,18 @@
+package moe.nea.ultranotifier.mixin;
+
+//#if FORGE
+//$$import net.minecraft.command.CommandHandler;
+//$$import net.minecraft.command.ICommand;
+//$$import org.jetbrains.annotations.NotNull;
+//$$import org.spongepowered.asm.mixin.Mixin;
+//$$import org.spongepowered.asm.mixin.gen.Accessor;
+//$$
+//$$import java.util.Set;
+//$$
+//$$@Mixin(CommandHandler.class)
+//$$public interface AccessorCommandHandler {
+//$$ @Accessor("commandSet")
+//$$ @NotNull
+//$$ Set<@NotNull ICommand> getCommandSet_ultraNotifier();
+//$$}
+//#endif \ No newline at end of file
diff --git a/src/main/java/moe/nea/ultranotifier/mixin/ChatHudCategoryTracker.java b/src/main/java/moe/nea/ultranotifier/mixin/ChatHudCategoryTracker.java
new file mode 100644
index 0000000..6205506
--- /dev/null
+++ b/src/main/java/moe/nea/ultranotifier/mixin/ChatHudCategoryTracker.java
@@ -0,0 +1,49 @@
+package moe.nea.ultranotifier.mixin;
+
+import moe.nea.ultranotifier.datamodel.CategorizedChatLine;
+import moe.nea.ultranotifier.datamodel.ChatCategoryArbiter;
+import moe.nea.ultranotifier.datamodel.HasCategorizedChatLine;
+import net.minecraft.client.gui.hud.ChatHudLine;
+import net.minecraft.text.Text;
+import org.jetbrains.annotations.NotNull;
+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.callback.CallbackInfo;
+
+//#if MC> 1.20
+import net.minecraft.client.gui.hud.MessageIndicator;
+import net.minecraft.network.message.MessageSignatureData;
+//#endif
+
+@Mixin(ChatHudLine.class)
+public class ChatHudCategoryTracker<T> implements HasCategorizedChatLine {
+ @Unique
+ CategorizedChatLine categorizedSelf;
+
+ @Inject(method = "<init>", at = @At("RETURN"))
+ private void onInit(
+ int creationTick,
+ //#if MC>1.20
+ Text content,
+ //#elseif MC<1.16
+ //$$net.minecraft.util.text.ITextComponent content,
+ //$$int weird,
+ //#else
+ //$$T content,
+ //$$int weird,
+ //#endif
+ //#if MC>1.20
+ MessageSignatureData signature, MessageIndicator tag,
+ //#endif
+ CallbackInfo ci
+ ) {
+ categorizedSelf = ChatCategoryArbiter.INSTANCE.categorize((Text)content);
+ }
+
+ @Override
+ public @NotNull CategorizedChatLine getCategorizedChatLine_ultraNotifier() {
+ return categorizedSelf;
+ }
+}
diff --git a/src/main/java/moe/nea/ultranotifier/mixin/ChatHudMessageAdded.java b/src/main/java/moe/nea/ultranotifier/mixin/ChatHudMessageAdded.java
index 2b65282..d7ed298 100644
--- a/src/main/java/moe/nea/ultranotifier/mixin/ChatHudMessageAdded.java
+++ b/src/main/java/moe/nea/ultranotifier/mixin/ChatHudMessageAdded.java
@@ -3,7 +3,7 @@ package moe.nea.ultranotifier.mixin;
import moe.nea.ultranotifier.event.ChatGuiLineEvent;
import moe.nea.ultranotifier.event.UltraNotifierEvents;
import net.minecraft.client.gui.hud.ChatHud;
-//#if MC > 11404
+//#if MC >= 1.20
import net.minecraft.client.gui.hud.MessageIndicator;
import net.minecraft.network.message.MessageSignatureData;
//#endif
@@ -18,25 +18,26 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
)
public class ChatHudMessageAdded {
@Inject(
-//#if MC <= 11404
-//#if FORGE
-//$$ method = "printChatMessageWithOptionalDeletion",
-//#else
-//$$ method = "addMessage(Lnet/minecraft/text/Text;I)V",
-//#endif
-//#else
+//#if MC >= 1.20
method = "addMessage(Lnet/minecraft/text/Text;Lnet/minecraft/network/message/MessageSignatureData;Lnet/minecraft/client/gui/hud/MessageIndicator;)V",
+//#elseif MC >= 1.16
+//$$ method = "addMessage(Lnet/minecraft/text/Text;IIZ)V",
+//#else
+//$$ method = "printChatMessageWithOptionalDeletion",
//#endif
at = @At("HEAD"), cancellable = true)
private void onAddMessage(
Text message,
-//#if MC <= 11404
-//$$ int chatLineId,
-//#else
+//#if MC >= 1.20
MessageSignatureData signatureData, MessageIndicator indicator,
+//#elseif MC >= 1.16
+//$$ int chatLineId, int timestamp, boolean bl,
+//#else
+//$$ int chatLineId,
//#endif
CallbackInfo ci
) {
+ // TODO: in this method prevent messages from being flushed (to preserve more history)
if (UltraNotifierEvents.post(new ChatGuiLineEvent(message)).isCancelled()) {
ci.cancel();
}
diff --git a/src/main/java/moe/nea/ultranotifier/mixin/ChatScreenTabRenderer.java b/src/main/java/moe/nea/ultranotifier/mixin/ChatScreenTabRenderer.java
new file mode 100644
index 0000000..972e40c
--- /dev/null
+++ b/src/main/java/moe/nea/ultranotifier/mixin/ChatScreenTabRenderer.java
@@ -0,0 +1,77 @@
+package moe.nea.ultranotifier.mixin;
+
+import moe.nea.ultranotifier.gui.ChatUi;
+import moe.nea.ultranotifier.util.render.ScreenRenderUtils;
+import net.minecraft.client.gui.screen.ChatScreen;
+import org.objectweb.asm.Opcodes;
+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.callback.CallbackInfo;
+import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
+//#if MC>1.16
+import net.minecraft.client.gui.DrawContext;
+import net.minecraft.client.util.math.MatrixStack;
+//#endif
+
+@Mixin(ChatScreen.class)
+public abstract class ChatScreenTabRenderer {
+
+ private ChatUi chatUi_ultraNotifier = new ChatUi((ChatScreen) (Object) this);
+
+ @Unique
+ ChatUi chatUi() {return chatUi_ultraNotifier;}
+
+ @Inject(
+//#if MC > 1.16
+ method = "render",
+//#else
+//$$ method="drawScreen",
+//#endif
+ at = @At("HEAD"))
+ private void onRender(
+//#if MC >1.20
+ DrawContext context,
+//#elseif MC > 1.16
+//$$ MatrixStack context,
+//#endif
+ int mouseX, int mouseY,
+ float delta,
+ CallbackInfo ci) {
+ chatUi().renderButtons(
+ ScreenRenderUtils.umatrix(
+ //#if MC > 1.16
+ context
+ //#endif
+ ),
+ mouseX, mouseY
+ );
+ }
+
+ @Inject(
+ method = "mouseClicked",
+ at = @At(value = "INVOKE",
+ //#if MC > 1.16
+ target = "Lnet/minecraft/client/gui/screen/Screen;mouseClicked(DDI)Z",
+ //#else
+ //$$target = "Lnet/minecraft/client/gui/GuiScreen;mouseClicked(III)V",
+ //#endif
+ opcode = Opcodes.INVOKESPECIAL)
+ )
+ private void onMouseClick(
+ //#if MC > 1.16
+ double mouseX, double mouseY,
+ //#else
+ //$$int mouseX, int mouseY,
+ //#endif
+ int button,
+ //#if MC > 1.16
+ CallbackInfoReturnable<Boolean> cir
+ //#else
+ //$$CallbackInfo cir
+ //#endif
+ ) {
+ chatUi().clickMouse(mouseX, mouseY, button);
+ }
+}
diff --git a/src/main/java/moe/nea/ultranotifier/mixin/FilterVisibleMessagePatch.java b/src/main/java/moe/nea/ultranotifier/mixin/FilterVisibleMessagePatch.java
new file mode 100644
index 0000000..22e06b5
--- /dev/null
+++ b/src/main/java/moe/nea/ultranotifier/mixin/FilterVisibleMessagePatch.java
@@ -0,0 +1,72 @@
+package moe.nea.ultranotifier.mixin;
+
+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"),
+ cancellable = true
+ )
+ private void onAddVisibleMessage(ChatHudLine message, CallbackInfo ci) {
+ if (UltraNotifierEvents.post(new VisibleChatMessageAddedEvent(message)).isCancelled()) {
+ 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
+}