package io.gitlab.jfronny.googlechat.mixin; import io.gitlab.jfronny.googlechat.GoogleChatConfig; import io.gitlab.jfronny.googlechat.api.GoogleService; import io.gitlab.jfronny.googlechat.api.Language; import net.minecraft.client.MinecraftClient; import net.minecraft.network.MessageType; import net.minecraft.network.PacketByteBuf; import net.minecraft.network.packet.s2c.play.GameMessageS2CPacket; import net.minecraft.text.LiteralText; import net.minecraft.text.Text; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mutable; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import java.util.UUID; @Mixin(GameMessageS2CPacket.class) public class GameMessageS2CPacketMixin { @Shadow @Final @Mutable private Text message; @Shadow @Final private UUID sender; @Inject(at = @At("RETURN"), method = "(Lnet/minecraft/network/PacketByteBuf;)V") private void init(PacketByteBuf buf, CallbackInfo ci) { if (!GoogleChatConfig.enabled) return; MinecraftClient mc = MinecraftClient.getInstance(); if (mc == null || mc.player == null || sender.equals(mc.player.getUuid())) return; Language client = Language.byValue(GoogleChatConfig.clientLanguage); if (client == Language.AUTO_DETECT) return; StringBuilder sb = new StringBuilder(); message.asOrderedText().accept((index, style, codePoint) -> { sb.append((char)codePoint); return true; }); message = new LiteralText(GoogleService.translate(sb.toString(), Language.byValue(GoogleChatConfig.serverLanguage), client)); } }