44 lines
2.7 KiB
Java
44 lines
2.7 KiB
Java
package io.gitlab.jfronny.googlechat.mixin;
|
|
|
|
import com.mojang.authlib.GameProfile;
|
|
import io.gitlab.jfronny.googlechat.GoogleChat;
|
|
import net.minecraft.client.MinecraftClient;
|
|
import net.minecraft.client.network.message.MessageHandler;
|
|
import net.minecraft.network.message.MessageType;
|
|
import net.minecraft.network.message.SignedMessage;
|
|
import net.minecraft.text.Text;
|
|
import org.spongepowered.asm.mixin.Mixin;
|
|
import org.spongepowered.asm.mixin.injection.*;
|
|
|
|
@Mixin(MessageHandler.class)
|
|
public class MessageHandlerMixin {
|
|
@Redirect(method = "onChatMessage(Lnet/minecraft/network/message/SignedMessage;Lcom/mojang/authlib/GameProfile;Lnet/minecraft/network/message/MessageType$Parameters;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/message/MessageType$Parameters;applyChatDecoration(Lnet/minecraft/text/Text;)Lnet/minecraft/text/Text;"))
|
|
Text googlechat$applyDecoration(MessageType.Parameters instance, Text content, SignedMessage args$signed, GameProfile args$sender) {
|
|
return instance.applyChatDecoration(googlechat$shouldTranslate(args$sender) ? googlechat$translate(content) : content);
|
|
}
|
|
|
|
@Redirect(method = "processChatMessageInternal(Lnet/minecraft/network/message/MessageType$Parameters;Lnet/minecraft/network/message/SignedMessage;Lnet/minecraft/text/Text;Lcom/mojang/authlib/GameProfile;ZLjava/time/Instant;)Z", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/message/MessageType$Parameters;applyChatDecoration(Lnet/minecraft/text/Text;)Lnet/minecraft/text/Text;"))
|
|
Text googlechat$applyDecoration2(MessageType.Parameters instance, Text content, MessageType.Parameters args$params, SignedMessage args$message, Text args$decorated, GameProfile args$sender) {
|
|
return instance.applyChatDecoration(googlechat$shouldTranslate(args$sender) ? googlechat$translate(content) : content);
|
|
}
|
|
|
|
@ModifyVariable(method = "onProfilelessMessage(Lnet/minecraft/text/Text;Lnet/minecraft/network/message/MessageType$Parameters;)V", at = @At(value = "HEAD"), argsOnly = true, ordinal = 0)
|
|
Text googlechat$applyTranslation(Text origin) {
|
|
return googlechat$translate(origin);
|
|
}
|
|
|
|
@ModifyVariable(method = "onGameMessage(Lnet/minecraft/text/Text;Z)V", at = @At(value = "HEAD"), argsOnly = true, ordinal = 0)
|
|
Text googlechat$applyTranslation2(Text origin) {
|
|
return googlechat$translate(origin);
|
|
}
|
|
|
|
private Text googlechat$translate(Text message) {
|
|
return GoogleChat.translateIfNeeded(message, GoogleChat.Direction.S2C, true);
|
|
}
|
|
|
|
private boolean googlechat$shouldTranslate(GameProfile sender) {
|
|
MinecraftClient mc = MinecraftClient.getInstance();
|
|
return mc != null && mc.player != null && sender != null && !sender.getId().equals(mc.player.getUuid());
|
|
}
|
|
}
|