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);
+ }
+ }
+ }
}