diff --git a/src/main/java/io/gitlab/jfronny/googlechat/GoogleChatConfig.java b/src/main/java/io/gitlab/jfronny/googlechat/GoogleChatConfig.java index c9db257..302ba55 100644 --- a/src/main/java/io/gitlab/jfronny/googlechat/GoogleChatConfig.java +++ b/src/main/java/io/gitlab/jfronny/googlechat/GoogleChatConfig.java @@ -7,4 +7,5 @@ public class GoogleChatConfig implements JfConfig { @Entry public static Boolean enabled = true; @Entry public static String serverLanguage = "auto"; @Entry public static String clientLanguage = "en"; + @Entry public static Boolean translationTooltip = false; } diff --git a/src/main/java/io/gitlab/jfronny/googlechat/mixin/GameMessageS2CPacketMixin.java b/src/main/java/io/gitlab/jfronny/googlechat/mixin/GameMessageS2CPacketMixin.java index e689da9..49fbce3 100644 --- a/src/main/java/io/gitlab/jfronny/googlechat/mixin/GameMessageS2CPacketMixin.java +++ b/src/main/java/io/gitlab/jfronny/googlechat/mixin/GameMessageS2CPacketMixin.java @@ -10,9 +10,7 @@ import net.fabricmc.loader.api.FabricLoader; 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 net.minecraft.util.Util; +import net.minecraft.text.*; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mutable; @@ -21,6 +19,7 @@ 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.List; import java.util.UUID; @Mixin(GameMessageS2CPacket.class) @@ -51,9 +50,21 @@ public class GameMessageS2CPacketMixin { return true; }); try { - message = new LiteralText(TranslateService.translate(sb.toString(), Language.byId(GoogleChatConfig.serverLanguage), client)); + LiteralText translatedText = new LiteralText(TranslateService.translate(sb.toString(), Language.byId(GoogleChatConfig.serverLanguage), client)); + if (GoogleChatConfig.translationTooltip) + message = googlechat$concat(message.getWithStyle(Style.EMPTY.withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new LiteralText("Translated: ").append(translatedText))))); + else + message = translatedText.setStyle(Style.EMPTY.withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new LiteralText("Original: ").append(message)))); } catch (TranslateException e) { GoogleChat.LOGGER.error("Could not translate received message", e); } } + + private Text googlechat$concat(List texts) { + MutableText res = null; + for (Text text : texts) { + res = res == null ? (MutableText) text : res.append(text); + } + return res; + } } diff --git a/src/main/resources/assets/google-chat/lang/en_us.json b/src/main/resources/assets/google-chat/lang/en_us.json index 0888000..a08fd96 100644 --- a/src/main/resources/assets/google-chat/lang/en_us.json +++ b/src/main/resources/assets/google-chat/lang/en_us.json @@ -5,5 +5,7 @@ "google-chat.jfconfig.serverLanguage": "Server Language", "google-chat.jfconfig.serverLanguage.tooltip": "The language of the server used in translations. \"auto\" will disable translating your own messages", "google-chat.jfconfig.clientLanguage": "Client Language", - "google-chat.jfconfig.clientLanguage.tooltip": "Your own language used in translations. \"auto\" will disable translating messages by other server members" + "google-chat.jfconfig.clientLanguage.tooltip": "Your own language used in translations. \"auto\" will disable translating messages by other server members", + "google-chat.jfconfig.translationTooltip": "Translation Tooltip", + "google-chat.jfconfig.translationTooltip.tooltip": "Display translations as a tooltip (on hover) and keep the original message" } \ No newline at end of file