From b2587367ee0fbbe47830133085ac67d10e1eff8a Mon Sep 17 00:00:00 2001 From: Lyfts <127234178+Lyfts@users.noreply.github.com> Date: Thu, 3 Oct 2024 17:37:27 +0200 Subject: [PATCH] add jvm flag to dump generated lang keys to file --- .../com/gtnewhorizon/gtnhlib/CommonProxy.java | 1 + .../gtnewhorizon/gtnhlib/config/Config.java | 3 +- .../gtnhlib/config/ConfigurationManager.java | 31 ++++++++++++++++++- 3 files changed, 33 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/gtnewhorizon/gtnhlib/CommonProxy.java b/src/main/java/com/gtnewhorizon/gtnhlib/CommonProxy.java index 2c8a746..5e6cd59 100644 --- a/src/main/java/com/gtnewhorizon/gtnhlib/CommonProxy.java +++ b/src/main/java/com/gtnewhorizon/gtnhlib/CommonProxy.java @@ -24,6 +24,7 @@ public void preInit(FMLPreInitializationEvent event) { public void init(FMLInitializationEvent event) { NetworkHandler.init(); + ConfigurationManager.onInit(); } public void postInit(FMLPostInitializationEvent event) {} diff --git a/src/main/java/com/gtnewhorizon/gtnhlib/config/Config.java b/src/main/java/com/gtnewhorizon/gtnhlib/config/Config.java index ae8fa08..09dd51d 100644 --- a/src/main/java/com/gtnewhorizon/gtnhlib/config/Config.java +++ b/src/main/java/com/gtnewhorizon/gtnhlib/config/Config.java @@ -50,7 +50,8 @@ *

* Default pattern: {@code %mod.%cat.%field}. Categories use the pattern without {@code %field}. Can be overridden * for fields with {@link Config.LangKey}.
- * The generated keys can be printed to log by setting the {@code -Dgtnhlib.printkeys=true} JVM flag. + * The generated keys can be printed to log by setting the {@code -Dgtnhlib.printkeys=true} JVM flag or dumped to a + * file in the base minecraft directory by setting the {@code -Dgtnhlib.dumpkeys=true} JVM flag. */ @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.TYPE) diff --git a/src/main/java/com/gtnewhorizon/gtnhlib/config/ConfigurationManager.java b/src/main/java/com/gtnewhorizon/gtnhlib/config/ConfigurationManager.java index 1ed0723..df98a85 100644 --- a/src/main/java/com/gtnewhorizon/gtnhlib/config/ConfigurationManager.java +++ b/src/main/java/com/gtnewhorizon/gtnhlib/config/ConfigurationManager.java @@ -1,6 +1,7 @@ package com.gtnewhorizon.gtnhlib.config; import java.io.File; +import java.io.IOException; import java.lang.annotation.Annotation; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; @@ -23,6 +24,7 @@ import net.minecraftforge.common.config.ConfigElement; import net.minecraftforge.common.config.Configuration; +import org.apache.commons.io.FileUtils; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.jetbrains.annotations.NotNull; @@ -43,6 +45,8 @@ public class ConfigurationManager { private static final Map>>> configToCategoryClassMap = new HashMap<>(); private static final String[] langKeyPlaceholders = new String[] { "%mod", "%file", "%cat", "%field" }; private static final Boolean PRINT_KEYS = Boolean.getBoolean("gtnhlib.printkeys"); + private static final Boolean DUMP_KEYS = Boolean.getBoolean("gtnhlib.dumpkeys"); + private static final Map> generatedLangKeys = new HashMap<>(); private static final ConfigurationManager instance = new ConfigurationManager(); @@ -51,7 +55,7 @@ public class ConfigurationManager { private static Path configDir; /** - * Registers a configuration class to be loaded. This should be done in preInit. + * Registers a configuration class to be loaded. This should be done before or during preInit. * * @param configClass The class to register. */ @@ -377,6 +381,10 @@ private static String getLangKey(Class configClass, @Nullable Config.LangKey LOGGER.info("Lang key for category {}: {}", category.getName(), key); } } + + if (DUMP_KEYS) { + generatedLangKeys.computeIfAbsent(cfg.modid(), k -> new ArrayList<>()).add(key + "="); + } return key; } @@ -439,4 +447,25 @@ private static void init() { configDir = minecraftHome().toPath().resolve("config"); initialized = true; } + + public static void onInit() { + if (DUMP_KEYS) { + writeLangKeysToFile(); + } + } + + private static void writeLangKeysToFile() { + for (Map.Entry> entry : generatedLangKeys.entrySet()) { + val langFile = new File("generated_keys_" + entry.getKey() + ".txt"); + try { + FileUtils.writeLines(langFile, entry.getValue()); + } catch (IOException e) { + LOGGER.error( + "Failed to write lang keys for {} to file {}", + entry.getKey(), + langFile.getAbsolutePath(), + e); + } + } + } }