diff options
author | Linnea Gräf <nea@nea.moe> | 2025-01-25 00:40:58 +0100 |
---|---|---|
committer | Linnea Gräf <nea@nea.moe> | 2025-01-25 00:40:58 +0100 |
commit | af991c28062e405a02c139d3d67c4f86a9043e35 (patch) | |
tree | 29bd1d1568b707be04915f47a1bf558e923cd3fe /src/main/java/moe | |
parent | e4f585c173ca0a5d09130ab97c18c48f91fe5ad7 (diff) | |
download | ultra-notifier-af991c28062e405a02c139d3d67c4f86a9043e35.tar.gz ultra-notifier-af991c28062e405a02c139d3d67c4f86a9043e35.tar.bz2 ultra-notifier-af991c28062e405a02c139d3d67c4f86a9043e35.zip |
.
Diffstat (limited to 'src/main/java/moe')
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); + } +} |