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

51 lines
2.0 KiB
Java

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.fabricmc.api.EnvType;
import net.fabricmc.loader.api.FabricLoader;
import net.minecraft.network.PacketByteBuf;
import net.minecraft.network.packet.c2s.play.ChatMessageC2SPacket;
import net.minecraft.util.Util;
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 = "<init>(Ljava/lang/String;)V")
public void init(String chatMessage, CallbackInfo info) {
googlechat$translate();
}
@Inject(at = @At("RETURN"), method = "<init>(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);
}
}