47 lines
1.9 KiB
Java
47 lines
1.9 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.api.TranslateException;
|
|
import io.gitlab.jfronny.libjf.translate.api.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 = "<init>(Ljava/lang/String;)V")
|
|
public void init(String chatMessage, CallbackInfo info) {
|
|
googlechat$translate(GoogleChat.TRANSLATE_SERVICE);
|
|
}
|
|
|
|
@Inject(at = @At("RETURN"), method = "<init>(Lnet/minecraft/network/PacketByteBuf;)V")
|
|
public void init(PacketByteBuf buf, CallbackInfo ci) {
|
|
googlechat$translate(GoogleChat.TRANSLATE_SERVICE);
|
|
}
|
|
|
|
private <T> void googlechat$translate(TranslateService<T> ts) {
|
|
if (!GoogleChatConfig.enabled) return;
|
|
T server = ts.parseLang(GoogleChatConfig.serverLanguage);
|
|
if (server == ts.parseLang("auto") || chatMessage.startsWith("/")) return;
|
|
try {
|
|
chatMessage = ts.translate(chatMessage, ts.parseLang(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);
|
|
}
|
|
}
|