summaryrefslogtreecommitdiff
path: root/src/main/java/moe/nea
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/moe/nea')
-rw-r--r--src/main/java/moe/nea/ultranotifier/mixin/AccessorChatHud.java11
-rw-r--r--src/main/java/moe/nea/ultranotifier/mixin/ChatHudCategoryTracker.java42
-rw-r--r--src/main/java/moe/nea/ultranotifier/mixin/ChatScreenTabRenderer.java61
3 files changed, 114 insertions, 0 deletions
diff --git a/src/main/java/moe/nea/ultranotifier/mixin/AccessorChatHud.java b/src/main/java/moe/nea/ultranotifier/mixin/AccessorChatHud.java
new file mode 100644
index 0000000..25efbfe
--- /dev/null
+++ b/src/main/java/moe/nea/ultranotifier/mixin/AccessorChatHud.java
@@ -0,0 +1,11 @@
+package moe.nea.ultranotifier.mixin;
+
+import net.minecraft.client.gui.hud.ChatHud;
+import org.spongepowered.asm.mixin.Mixin;
+import org.spongepowered.asm.mixin.gen.Invoker;
+
+@Mixin(ChatHud.class)
+public interface AccessorChatHud {
+ @Invoker("getLineHeight")
+ int getLineHeight_ultranotifier();
+}
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..4d31bde
--- /dev/null
+++ b/src/main/java/moe/nea/ultranotifier/mixin/ChatHudCategoryTracker.java
@@ -0,0 +1,42 @@
+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.client.gui.hud.MessageIndicator;
+import net.minecraft.network.message.MessageSignatureData;
+import net.minecraft.text.Text;
+import org.jetbrains.annotations.NotNull;
+import org.spongepowered.asm.mixin.Final;
+import org.spongepowered.asm.mixin.Mixin;
+import org.spongepowered.asm.mixin.Shadow;
+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;
+
+@Mixin(ChatHudLine.class)
+public class ChatHudCategoryTracker implements HasCategorizedChatLine {
+ @Shadow
+ @Final
+ private Text content;
+
+ @Unique
+ CategorizedChatLine categorizedSelf;
+
+ @Inject(method = "<init>", at = @At("TAIL"))
+ private void onInit(
+ int creationTick,
+ Text content,
+ MessageSignatureData signature, MessageIndicator tag,
+ CallbackInfo ci
+ ) {
+ categorizedSelf = ChatCategoryArbiter.INSTANCE.categorize(content);
+ }
+
+ @Override
+ public @NotNull CategorizedChatLine getCategorizedChatLine_ultraNotifier() {
+ return categorizedSelf;
+ }
+}
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..7a5a127
--- /dev/null
+++ b/src/main/java/moe/nea/ultranotifier/mixin/ChatScreenTabRenderer.java
@@ -0,0 +1,61 @@
+package moe.nea.ultranotifier.mixin;
+
+import moe.nea.ultranotifier.gui.ChatUi;
+import moe.nea.ultranotifier.util.render.ScreenRenderUtils;
+import net.minecraft.client.gui.DrawContext;
+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;
+//#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", target = "Lnet/minecraft/client/gui/screen/Screen;mouseClicked(DDI)Z", opcode = Opcodes.INVOKESPECIAL)
+ )
+ private void onMouseClick(
+ double mouseX, double mouseY,
+ int button,
+ CallbackInfoReturnable<Boolean> cir
+ ) {
+ chatUi().clickMouse(mouseX, mouseY, button);
+ }
+}