package io.gitlab.jfronny.googlechat.mixin; import io.gitlab.jfronny.googlechat.GoogleChat; import io.gitlab.jfronny.googlechat.GoogleChatConfig; import io.gitlab.jfronny.libjf.translate.Language; import io.gitlab.jfronny.libjf.translate.TranslateException; import io.gitlab.jfronny.libjf.translate.TranslateService; import net.minecraft.network.PacketByteBuf; import net.minecraft.network.packet.c2s.play.ChatMessageC2SPacket; 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; @Mixin(ChatMessageC2SPacket.class) public class ChatMessageC2SPacketMixin { @Mutable @Final @Shadow private String chatMessage; @Inject(at = @At("RETURN"), method = "(Ljava/lang/String;)V") public void init(String chatMessage, CallbackInfo info) { googlechat$translate(); } @Inject(at = @At("RETURN"), method = "(Lnet/minecraft/network/PacketByteBuf;)V") public void init(PacketByteBuf buf, CallbackInfo ci) { googlechat$translate(); } private void googlechat$translate() { if (!GoogleChatConfig.enabled) return; Language server = Language.byId(GoogleChatConfig.serverLanguage); if (server == Language.AUTO_DETECT || chatMessage.startsWith("/")) return; try { chatMessage = TranslateService.translate(chatMessage, Language.byId(GoogleChatConfig.clientLanguage), server); } catch (TranslateException e) { GoogleChat.LOGGER.error("Could not translate sent message", e); return; } if (chatMessage.length() > 256) chatMessage = chatMessage.substring(0, 256); } }