diff --git a/src/client/java/nl/devpieter/utilize/client/events/chat/ChatMessageAddEvent.java b/src/client/java/nl/devpieter/utilize/client/events/chat/ChatMessageAddEvent.java new file mode 100644 index 0000000..35e9cfc --- /dev/null +++ b/src/client/java/nl/devpieter/utilize/client/events/chat/ChatMessageAddEvent.java @@ -0,0 +1,28 @@ +package nl.devpieter.utilize.client.events.chat; + +import net.minecraft.network.chat.Component; +import nl.devpieter.sees.event.SCancelableEventBase; +import nl.devpieter.sees.event.SReturnableEvent; + +public class ChatMessageAddEvent extends SCancelableEventBase implements SReturnableEvent { + + private Component message; + + public ChatMessageAddEvent(Component message) { + this.message = message; + } + + @Override + public Component getResult() { + return this.message; + } + + @Override + public void setResult(Component message) { + this.message = message; + } + + public Component message() { + return this.message; + } +} diff --git a/src/client/java/nl/devpieter/utilize/client/mixin/ChatHudMixin.java b/src/client/java/nl/devpieter/utilize/client/mixin/ChatHudMixin.java new file mode 100644 index 0000000..1804346 --- /dev/null +++ b/src/client/java/nl/devpieter/utilize/client/mixin/ChatHudMixin.java @@ -0,0 +1,30 @@ +package nl.devpieter.utilize.client.mixin; + +import net.minecraft.client.gui.components.ChatComponent; +import net.minecraft.network.chat.Component; +import nl.devpieter.sees.Sees; +import nl.devpieter.utilize.client.events.chat.ChatMessageAddEvent; +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.ModifyVariable; + +@Mixin(ChatComponent.class) +public abstract class ChatHudMixin { + + @Unique + private final Sees sees = Sees.getSharedInstance(); + + @ModifyVariable( + method = "addMessage(Lnet/minecraft/network/chat/Component;Lnet/minecraft/network/chat/MessageSignature;Lnet/minecraft/client/multiplayer/chat/GuiMessageSource;Lnet/minecraft/client/multiplayer/chat/GuiMessageTag;)V", + at = @At("HEAD"), + argsOnly = true, + name = "contents" + ) + private Component onAddMessage(Component contents) { + ChatMessageAddEvent event = new ChatMessageAddEvent(contents); + Component result = sees.dispatchWithResult(event); + + return event.isCancelled() ? contents : result; + } +} diff --git a/src/client/resources/utilize.client.mixins.json b/src/client/resources/utilize.client.mixins.json index 8838def..b93b624 100644 --- a/src/client/resources/utilize.client.mixins.json +++ b/src/client/resources/utilize.client.mixins.json @@ -13,6 +13,7 @@ }, "mixins": [ "KeyMappingMixin", + "ChatHudMixin", "LocalPlayerMixin", "MinecraftMixin" ]