diff --git a/build.gradle.kts b/build.gradle.kts index 6eb36a4..4ce1d93 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -10,7 +10,7 @@ jfMod { minecraftVersion = "1.20.1" yarn("build.9") loaderVersion = "0.14.21" - libJfVersion = "3.10.1" + libJfVersion = "3.10.2" modrinth { projectId = "google-chat" diff --git a/src/main/java/io/gitlab/jfronny/googlechat/GoogleChat.java b/src/main/java/io/gitlab/jfronny/googlechat/GoogleChat.java index 14cdac7..056da04 100644 --- a/src/main/java/io/gitlab/jfronny/googlechat/GoogleChat.java +++ b/src/main/java/io/gitlab/jfronny/googlechat/GoogleChat.java @@ -27,7 +27,7 @@ public class GoogleChat implements ModInitializer { String sourceString = toString(source); if (respectRegex && failsRegex(sourceString, direction)) return source; MutableText translated; - if (GoogleChatConfig.desugar) { + if (GoogleChatConfig.Processing.desugar) { translated = Text.literal(translateIfNeeded(sourceString, direction, true)); } else { translated = MutableText.of(translateIfNeeded(source.getContent(), direction, false)) @@ -36,8 +36,8 @@ public class GoogleChat implements ModInitializer { translated.append(translateIfNeeded(sibling, direction, false)); } } - if (GoogleChatConfig.debugLogs) LOGGER.info("Translated " + sourceString + " to " + toString(translated)); - if (GoogleChatConfig.translationTooltip) { + if (GoogleChatConfig.Advanced.debugLogs) LOGGER.info("Translated " + sourceString + " to " + toString(translated)); + if (GoogleChatConfig.General.translationTooltip) { return source.copy().styled(style -> addHover(style, Text.literal("Translated: ").append(translated))); } else if (translated.getStyle().getHoverEvent() == null) { return translated.styled(style -> addHover(style, Text.literal("Original: ").append(source))); @@ -111,12 +111,12 @@ public class GoogleChat implements ModInitializer { private static boolean failsRegex(String text, Direction direction) { boolean isSender = (FabricLoader.getInstance().getEnvironmentType() == EnvType.CLIENT) == (direction == Direction.C2S); - if (isSender) return text.matches(GoogleChatConfig.sendingRegex) == GoogleChatConfig.sendingRegexIsBlacklist; - else return text.matches(GoogleChatConfig.receivingRegex) == GoogleChatConfig.receivingRegexIsBlacklist; + if (isSender) return text.matches(GoogleChatConfig.Processing.sendingRegex) == GoogleChatConfig.Processing.sendingRegexIsBlacklist; + else return text.matches(GoogleChatConfig.Processing.receivingRegex) == GoogleChatConfig.Processing.receivingRegexIsBlacklist; } private static boolean shouldSkipOutright(Direction direction) { - return !GoogleChatConfig.enabled || !hasTarget(direction); + return !GoogleChatConfig.General.enabled || !hasTarget(direction); } public static boolean hasTarget(Direction direction) { @@ -129,15 +129,15 @@ public class GoogleChat implements ModInitializer { public String source() { return switch (this) { - case C2S -> GoogleChatConfig.clientLanguage; - case S2C -> GoogleChatConfig.serverLanguage; + case C2S -> GoogleChatConfig.General.clientLanguage; + case S2C -> GoogleChatConfig.General.serverLanguage; }; } public String target() { return switch (this) { - case C2S -> GoogleChatConfig.serverLanguage; - case S2C -> GoogleChatConfig.clientLanguage; + case C2S -> GoogleChatConfig.General.serverLanguage; + case S2C -> GoogleChatConfig.General.clientLanguage; }; } } diff --git a/src/main/java/io/gitlab/jfronny/googlechat/GoogleChatCache.java b/src/main/java/io/gitlab/jfronny/googlechat/GoogleChatCache.java index 87a398a..14437b3 100644 --- a/src/main/java/io/gitlab/jfronny/googlechat/GoogleChatCache.java +++ b/src/main/java/io/gitlab/jfronny/googlechat/GoogleChatCache.java @@ -6,10 +6,10 @@ import net.minecraft.text.Text; import java.util.Map; public class GoogleChatCache { - private static Map s2ct = new FixedSizeMap<>(GoogleChatConfig.cacheSize); - private static Map c2st = new FixedSizeMap<>(GoogleChatConfig.cacheSize); - private static Map s2cs = new FixedSizeMap<>(GoogleChatConfig.cacheSize); - private static Map c2ss = new FixedSizeMap<>(GoogleChatConfig.cacheSize); + private static Map s2ct = new FixedSizeMap<>(GoogleChatConfig.Advanced.cacheSize); + private static Map c2st = new FixedSizeMap<>(GoogleChatConfig.Advanced.cacheSize); + private static Map s2cs = new FixedSizeMap<>(GoogleChatConfig.Advanced.cacheSize); + private static Map c2ss = new FixedSizeMap<>(GoogleChatConfig.Advanced.cacheSize); public static void clear() { s2ct.clear(); diff --git a/src/main/java/io/gitlab/jfronny/googlechat/GoogleChatConfig.java b/src/main/java/io/gitlab/jfronny/googlechat/GoogleChatConfig.java index e668a47..396d3d3 100644 --- a/src/main/java/io/gitlab/jfronny/googlechat/GoogleChatConfig.java +++ b/src/main/java/io/gitlab/jfronny/googlechat/GoogleChatConfig.java @@ -2,51 +2,57 @@ package io.gitlab.jfronny.googlechat; import io.gitlab.jfronny.commons.serialize.gson.api.v1.Ignore; import io.gitlab.jfronny.libjf.config.api.v1.*; +import io.gitlab.jfronny.libjf.config.api.v1.dsl.ConfigBuilder; import net.fabricmc.api.*; import net.fabricmc.loader.api.*; -@JfConfig(referencedConfigs = "libjf-translate-v1") +@JfConfig(tweaker = GoogleChatConfig.class) public class GoogleChatConfig { - @Entry public static boolean enabled = true; - @Entry public static String serverLanguage = "auto"; - @Entry public static String clientLanguage = "en"; - @Entry public static boolean translationTooltip = false; - @Entry public static boolean desugar = false; - @Entry public static String receivingRegex = ""; - @Entry public static boolean receivingRegexIsBlacklist = true; - @Entry public static String sendingRegex = ""; - @Entry public static boolean sendingRegexIsBlacklist = true; - @Entry(min = 1, max = 1024) public static int cacheSize = 256; - @Entry public static boolean debugLogs = FabricLoader.getInstance().isDevelopmentEnvironment(); + @Category(referencedConfigs = "libjf-translate-v1") + public static class General { + @Entry public static boolean enabled = true; + @Entry public static String serverLanguage = "auto"; + @Entry public static String clientLanguage = "en"; + @Entry public static boolean translationTooltip = false; - @Preset - public static void client() { - enabled = true; - if (!serverLanguage.equals("auto")) { - serverLanguage = "auto"; - clientLanguage = "en"; - String tmp = receivingRegex; - receivingRegex = sendingRegex; - sendingRegex = tmp; + @Preset + public static void client() { + enabled = true; + if (!serverLanguage.equals("auto")) { + serverLanguage = "auto"; + clientLanguage = "en"; + } + } + + @Preset + public static void server() { + enabled = true; + if (!clientLanguage.equals("auto")) { + clientLanguage = "auto"; + serverLanguage = "en"; + } } } - @Preset - public static void server() { - enabled = true; - if (!clientLanguage.equals("auto")) { - clientLanguage = "auto"; - serverLanguage = "en"; - String tmp = receivingRegex; - receivingRegex = sendingRegex; - sendingRegex = tmp; - } + @Category + public static class Processing { + @Entry public static boolean desugar = false; + @Entry public static String receivingRegex = ""; + @Entry public static boolean receivingRegexIsBlacklist = true; + @Entry public static String sendingRegex = ""; + @Entry public static boolean sendingRegexIsBlacklist = true; + } + + @Category + public static class Advanced { + @Entry(min = 1, max = 1024) public static int cacheSize = 256; + @Entry public static boolean debugLogs = FabricLoader.getInstance().isDevelopmentEnvironment(); } @Ignore private static boolean initial = true; @Verifier public static void verify() { - if (FabricLoader.getInstance().getEnvironmentType() == EnvType.SERVER && !clientLanguage.equals("auto")) { + if (FabricLoader.getInstance().getEnvironmentType() == EnvType.SERVER && !General.clientLanguage.equals("auto")) { System.err.println(""" Your client language is not set to "auto" and you are using a server. This setup is not recommended! Please set up GoogleChat according to its documentation!"""); @@ -55,6 +61,21 @@ public class GoogleChatConfig { initial = false; } + public static ConfigBuilder tweak(ConfigBuilder builder) { + return builder + .addMigration("enabled", reader -> General.enabled = reader.nextBoolean()) + .addMigration("serverLanguage", reader -> General.serverLanguage = reader.nextString()) + .addMigration("clientLanguage", reader -> General.clientLanguage = reader.nextString()) + .addMigration("translationTooltip", reader -> General.translationTooltip = reader.nextBoolean()) + .addMigration("desugar", reader -> Processing.desugar = reader.nextBoolean()) + .addMigration("receivingRegex", reader -> Processing.receivingRegex = reader.nextString()) + .addMigration("receivingRegexIsBlacklist", reader -> Processing.receivingRegexIsBlacklist = reader.nextBoolean()) + .addMigration("sendingRegex", reader -> Processing.sendingRegex = reader.nextString()) + .addMigration("sendingRegexIsBlacklist", reader -> Processing.sendingRegexIsBlacklist = reader.nextBoolean()) + .addMigration("cacheSize", reader -> Advanced.cacheSize = reader.nextInt()) + .addMigration("debugLogs", reader -> Advanced.debugLogs = reader.nextBoolean()); + } + static { JFC_GoogleChatConfig.ensureInitialized(); } diff --git a/src/main/java/io/gitlab/jfronny/googlechat/server/GoogleChatServer.java b/src/main/java/io/gitlab/jfronny/googlechat/server/GoogleChatServer.java index 2b0dfe8..7b0c582 100644 --- a/src/main/java/io/gitlab/jfronny/googlechat/server/GoogleChatServer.java +++ b/src/main/java/io/gitlab/jfronny/googlechat/server/GoogleChatServer.java @@ -28,12 +28,12 @@ public class GoogleChatServer implements DedicatedServerModInitializer { return CompletableFuture.completedFuture(message); original = message; message = GoogleChatCache.c2s(message); - if (GoogleChatConfig.debugLogs) LOGGER.info("Applied C2S translation from " + original + " to " + message); + if (GoogleChatConfig.Advanced.debugLogs) LOGGER.info("Applied C2S translation from " + original + " to " + message); } // All messages should be translated to the client language before sending original = message; message = GoogleChatCache.s2c(message); - if (GoogleChatConfig.debugLogs) LOGGER.info("Applied S2C translation from " + original + " to " + message); + if (GoogleChatConfig.Advanced.debugLogs) LOGGER.info("Applied S2C translation from " + original + " to " + message); return CompletableFuture.completedFuture(message); }); } 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 9a8147b..043c557 100644 --- a/src/main/resources/assets/google-chat/lang/en_us.json +++ b/src/main/resources/assets/google-chat/lang/en_us.json @@ -1,27 +1,30 @@ { "google-chat.jfconfig.title": "GoogleChat", - "google-chat.jfconfig.enabled": "Enabled", - "google-chat.jfconfig.enabled.tooltip": "Whether translations should be applied", - "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.translationTooltip": "Translation Tooltip", - "google-chat.jfconfig.translationTooltip.tooltip": "Display translations as a tooltip (on hover) and keep the original message. This will overwrite other tooltips", - "google-chat.jfconfig.desugar": "Desugar", - "google-chat.jfconfig.desugar.tooltip": "Translate all messages as plain strings. This will remove formatting but may be more accurate", - "google-chat.jfconfig.receivingRegex": "Receiving Regex", - "google-chat.jfconfig.receivingRegex.tooltip": "A Regex pattern to check whether a received message should be translated", - "google-chat.jfconfig.receivingRegexIsBlacklist": "Receiving Regex Is Blacklist", - "google-chat.jfconfig.receivingRegexIsBlacklist.tooltip": "Whether the relevant regex should blacklist messages from translation instead of whitelisting", - "google-chat.jfconfig.sendingRegex": "Sending Regex", - "google-chat.jfconfig.sendingRegex.tooltip": "A Regex pattern to check whether a sent message should be translated", - "google-chat.jfconfig.sendingRegexIsBlacklist": "Sending Regex Is Blacklist", - "google-chat.jfconfig.sendingRegexIsBlacklist.tooltip": "Whether the relevant regex should blacklist messages from translation instead of whitelisting", - "google-chat.jfconfig.cacheSize": "Cache Size", - "google-chat.jfconfig.cacheSize.tooltips": "The size of each message cache. Since there are four caches, the actual size will be four times this.", - "google-chat.jfconfig.debugLogs": "Debug Logs", - "google-chat.jfconfig.debugLogs.tooltips": "Log additional information about message processing. Useful for debugging", + "google-chat.jfconfig.general.title": "General", + "google-chat.jfconfig.general.enabled": "Enabled", + "google-chat.jfconfig.general.enabled.tooltip": "Whether translations should be applied", + "google-chat.jfconfig.general.serverLanguage": "Server Language", + "google-chat.jfconfig.general.serverLanguage.tooltip": "The language of the server used in translations. \"auto\" will disable translating your own messages", + "google-chat.jfconfig.general.clientLanguage": "Client Language", + "google-chat.jfconfig.general.clientLanguage.tooltip": "Your own language used in translations. \"auto\" will disable translating messages by other server members", + "google-chat.jfconfig.general.translationTooltip": "Translation Tooltip", + "google-chat.jfconfig.general.translationTooltip.tooltip": "Display translations as a tooltip (on hover) and keep the original message. This will overwrite other tooltips", + "google-chat.jfconfig.processing.title": "Processing", + "google-chat.jfconfig.processing.desugar": "Desugar", + "google-chat.jfconfig.processing.desugar.tooltip": "Translate all messages as plain strings. This improves translation quality but removes all message styling", + "google-chat.jfconfig.processing.receivingRegex": "Receiving Regex", + "google-chat.jfconfig.processing.receivingRegex.tooltip": "A Regex pattern to check whether a received message should be translated", + "google-chat.jfconfig.processing.receivingRegexIsBlacklist": "Receiving Regex Is Blacklist", + "google-chat.jfconfig.processing.receivingRegexIsBlacklist.tooltip": "Whether the relevant regex should blacklist messages from translation instead of whitelisting", + "google-chat.jfconfig.processing.sendingRegex": "Sending Regex", + "google-chat.jfconfig.processing.sendingRegex.tooltip": "A Regex pattern to check whether a sent message should be translated", + "google-chat.jfconfig.processing.sendingRegexIsBlacklist": "Sending Regex Is Blacklist", + "google-chat.jfconfig.processing.sendingRegexIsBlacklist.tooltip": "Whether the relevant regex should blacklist messages from translation instead of whitelisting", + "google-chat.jfconfig.advanced.title": "Advanced", + "google-chat.jfconfig.advanced.cacheSize": "Cache Size", + "google-chat.jfconfig.advanced.cacheSize.tooltips": "The size of each message cache. Since there are four caches, the actual size will be four times this.", + "google-chat.jfconfig.advanced.debugLogs": "Debug Logs", + "google-chat.jfconfig.advanced.debugLogs.tooltips": "Log additional information about message processing. Useful for debugging", "google-chat.jfconfig.client": "Client", "google-chat.jfconfig.server": "Server"