GoogleChat/src/main/java/io/gitlab/jfronny/googlechat/mixin/GameMessageS2CPacketMixin.java

42 lines
1.8 KiB
Java

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 = "<init>(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));
}
}