Skip to content

Commit

Permalink
Merge pull request #294 from Riftlight/1.21ChatReceiveFix
Browse files Browse the repository at this point in the history
fix chat_receive_message being called twice
  • Loading branch information
UnlikePaladin authored Jan 15, 2025
2 parents dce01da + 126bd7f commit bf9adcc
Showing 1 changed file with 10 additions and 8 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,9 @@
import org.spongepowered.asm.mixin.injection.ModifyArg;
import org.spongepowered.asm.mixin.injection.ModifyVariable;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import org.spongepowered.asm.mixin.injection.callback.LocalCapture;
import com.llamalad7.mixinextras.sugar.Local;
import com.llamalad7.mixinextras.sugar.ref.LocalRef;

import java.util.Locale;
import java.util.Map;
Expand All @@ -41,15 +44,14 @@ public class ChatComponentMixin {
@Unique private Integer color;
@Unique private int currColor;

@Inject(method = "addMessage(Lnet/minecraft/network/chat/Component;Lnet/minecraft/network/chat/MessageSignature;Lnet/minecraft/client/GuiMessageTag;)V", at = @At("HEAD"), cancellable = true)
private void cancelMessage(Component message, MessageSignature signature, GuiMessageTag tag, CallbackInfo ci) {
if (modifyMessage(message) == null)
@Inject(method = "addMessage(Lnet/minecraft/network/chat/Component;Lnet/minecraft/network/chat/MessageSignature;Lnet/minecraft/client/GuiMessageTag;)V", at = @At(value = "HEAD"), locals = LocalCapture.CAPTURE_FAILSOFT, cancellable = true)
private void injectAddMessage(Component message, MessageSignature signature, GuiMessageTag tag, CallbackInfo ci, @Local(argsOnly = true) LocalRef<Component> localMessageRef) {
Component modifiedMessage = modifyMessage(message);
if (modifiedMessage == null) {
ci.cancel();
}

@ModifyVariable(argsOnly = true, method = "addMessage(Lnet/minecraft/network/chat/Component;Lnet/minecraft/network/chat/MessageSignature;Lnet/minecraft/client/GuiMessageTag;)V", at = @At("HEAD"), index = 1)
private Component modifyQueue(Component message) {
return modifyMessage(message); // If it's null, it's already cancelled.
return;
}
localMessageRef.set(modifiedMessage);
}

private Component modifyMessage(Component message) {
Expand Down

0 comments on commit bf9adcc

Please sign in to comment.