From 86a0b522ae718cf28119c8564ff9319cb74bfe21 Mon Sep 17 00:00:00 2001 From: dima_dencep Date: Mon, 20 Nov 2023 02:11:01 +0700 Subject: [PATCH 01/13] Cleanup --- .../fml/config/ConfigFileTypeHandler.java | 21 ++++++++++--------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/core/src/main/java/net/neoforged/fml/config/ConfigFileTypeHandler.java b/core/src/main/java/net/neoforged/fml/config/ConfigFileTypeHandler.java index 63c897ab..0dfdbf37 100644 --- a/core/src/main/java/net/neoforged/fml/config/ConfigFileTypeHandler.java +++ b/core/src/main/java/net/neoforged/fml/config/ConfigFileTypeHandler.java @@ -31,13 +31,14 @@ public class ConfigFileTypeHandler { public Function reader(Path configBasePath) { return (c) -> { final Path configPath = configBasePath.resolve(c.getFileName()); - final CommentedFileConfig configData = CommentedFileConfig.builder(configPath).sync(). - preserveInsertionOrder(). - autosave(). - onFileNotFound((newfile, configFormat)-> setupConfigFile(c, newfile, configFormat)). - writingMode(WritingMode.REPLACE). - build(); - LOGGER.debug(CONFIG, "Built TOML config for {}", configPath.toString()); + final CommentedFileConfig configData = CommentedFileConfig.builder(configPath) + .sync() + .preserveInsertionOrder() + .autosave() + .onFileNotFound((newfile, configFormat) -> setupConfigFile(c, newfile, configFormat)) + .writingMode(WritingMode.REPLACE) + .build(); + LOGGER.debug(CONFIG, "Built TOML config for {}", configPath); try { configData.load(); @@ -46,10 +47,10 @@ public Function reader(Path configBasePath) { { throw new ConfigLoadingException(c, ex); } - LOGGER.debug(CONFIG, "Loaded TOML config file {}", configPath.toString()); + LOGGER.debug(CONFIG, "Loaded TOML config file {}", configPath); try { FileWatcher.defaultInstance().addWatch(configPath, new ConfigWatcher(c, configData, Thread.currentThread().getContextClassLoader())); - LOGGER.debug(CONFIG, "Watching TOML config file {} for changes", configPath.toString()); + LOGGER.debug(CONFIG, "Watching TOML config file {} for changes", configPath); } catch (IOException e) { throw new RuntimeException("Couldn't watch config file", e); } @@ -62,7 +63,7 @@ public void unload(Path configBasePath, ModConfig config) { try { FileWatcher.defaultInstance().removeWatch(configBasePath.resolve(config.getFileName())); } catch (RuntimeException e) { - LOGGER.error("Failed to remove config {} from tracker!", configPath.toString(), e); + LOGGER.error("Failed to remove config {} from tracker!", configPath, e); } } From ec6624465468dd2c73814d5e994cb5ca93775206 Mon Sep 17 00:00:00 2001 From: dima_dencep Date: Mon, 20 Nov 2023 02:30:58 +0700 Subject: [PATCH 02/13] Allow disabling config watcher Who edits the config via a file when minecraft is already running? --- .../fml/config/ConfigFileTypeHandler.java | 16 ++++++++++------ .../net/neoforged/fml/loading/FMLConfig.java | 1 + 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/core/src/main/java/net/neoforged/fml/config/ConfigFileTypeHandler.java b/core/src/main/java/net/neoforged/fml/config/ConfigFileTypeHandler.java index 0dfdbf37..45352495 100644 --- a/core/src/main/java/net/neoforged/fml/config/ConfigFileTypeHandler.java +++ b/core/src/main/java/net/neoforged/fml/config/ConfigFileTypeHandler.java @@ -48,20 +48,24 @@ public Function reader(Path configBasePath) { throw new ConfigLoadingException(c, ex); } LOGGER.debug(CONFIG, "Loaded TOML config file {}", configPath); - try { - FileWatcher.defaultInstance().addWatch(configPath, new ConfigWatcher(c, configData, Thread.currentThread().getContextClassLoader())); - LOGGER.debug(CONFIG, "Watching TOML config file {} for changes", configPath); - } catch (IOException e) { - throw new RuntimeException("Couldn't watch config file", e); + if (!FMLConfig.getBoolConfigValue(FMLConfig.ConfigValue.DISABLE_CONFIG_WATCHER)) { + try { + FileWatcher.defaultInstance().addWatch(configPath, new ConfigWatcher(c, configData, Thread.currentThread().getContextClassLoader())); + LOGGER.debug(CONFIG, "Watching TOML config file {} for changes", configPath); + } catch (IOException e) { + throw new RuntimeException("Couldn't watch config file", e); + } } return configData; }; } public void unload(Path configBasePath, ModConfig config) { + if (FMLConfig.getBoolConfigValue(FMLConfig.ConfigValue.DISABLE_CONFIG_WATCHER)) + return; Path configPath = configBasePath.resolve(config.getFileName()); try { - FileWatcher.defaultInstance().removeWatch(configBasePath.resolve(config.getFileName())); + FileWatcher.defaultInstance().removeWatch(configPath); } catch (RuntimeException e) { LOGGER.error("Failed to remove config {} from tracker!", configPath, e); } diff --git a/loader/src/main/java/net/neoforged/fml/loading/FMLConfig.java b/loader/src/main/java/net/neoforged/fml/loading/FMLConfig.java index d567fecb..d360c583 100644 --- a/loader/src/main/java/net/neoforged/fml/loading/FMLConfig.java +++ b/loader/src/main/java/net/neoforged/fml/loading/FMLConfig.java @@ -23,6 +23,7 @@ public class FMLConfig { public enum ConfigValue { + DISABLE_CONFIG_WATCHER("disableConfigWatcher", Boolean.FALSE, "Disables File Watcher. Used to automatically update config if its file has been modified."), EARLY_WINDOW_CONTROL("earlyWindowControl", Boolean.TRUE, "Should we control the window. Disabling this disables new GL features and can be bad for mods that rely on them."), MAX_THREADS("maxThreads", -1, "Max threads for early initialization parallelism, -1 is based on processor count", FMLConfig::maxThreads), VERSION_CHECK("versionCheck", Boolean.TRUE, "Enable NeoForge global version checking"), From 27a4dba1164c8a9b4147184bc49183d3a47ca3d5 Mon Sep 17 00:00:00 2001 From: dima_dencep Date: Mon, 20 Nov 2023 02:31:15 +0700 Subject: [PATCH 03/13] Allow seting of a custom config handler Since `ConfigFileTypeHandler` is extensible and `ModConfig` already has everything ready for it --- .../main/java/net/neoforged/fml/config/ModConfig.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/core/src/main/java/net/neoforged/fml/config/ModConfig.java b/core/src/main/java/net/neoforged/fml/config/ModConfig.java index d1d971a5..4565f682 100644 --- a/core/src/main/java/net/neoforged/fml/config/ModConfig.java +++ b/core/src/main/java/net/neoforged/fml/config/ModConfig.java @@ -14,7 +14,6 @@ import java.io.ByteArrayInputStream; import java.nio.file.Path; import java.util.Locale; -import java.util.concurrent.Callable; public class ModConfig { @@ -24,17 +23,20 @@ public class ModConfig private final ModContainer container; private final ConfigFileTypeHandler configHandler; private CommentedConfig configData; - private Callable saveHandler; - public ModConfig(final Type type, final IConfigSpec spec, final ModContainer container, final String fileName) { + public ModConfig(final Type type, final IConfigSpec spec, final ModContainer container, final String fileName, ConfigFileTypeHandler configHandler) { this.type = type; this.spec = spec; this.fileName = fileName; this.container = container; - this.configHandler = ConfigFileTypeHandler.TOML; + this.configHandler = configHandler; ConfigTracker.INSTANCE.trackConfig(this); } + public ModConfig(final Type type, final IConfigSpec spec, final ModContainer container, final String fileName) { + this(type, spec, container, fileName, ConfigFileTypeHandler.TOML); + } + public ModConfig(final Type type, final IConfigSpec spec, final ModContainer activeContainer) { this(type, spec, activeContainer, defaultConfigName(type, activeContainer.getModId())); } From 8f43edf25d439b15990c9e0b7bfbd7e8dcf24534 Mon Sep 17 00:00:00 2001 From: dima_dencep Date: Mon, 20 Nov 2023 02:36:42 +0700 Subject: [PATCH 04/13] Allow events to be fired from ModConfig Some mods add screens to edit configs and they should fire an event via this method --- core/src/main/java/net/neoforged/fml/config/ModConfig.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/main/java/net/neoforged/fml/config/ModConfig.java b/core/src/main/java/net/neoforged/fml/config/ModConfig.java index 4565f682..8738ae5a 100644 --- a/core/src/main/java/net/neoforged/fml/config/ModConfig.java +++ b/core/src/main/java/net/neoforged/fml/config/ModConfig.java @@ -75,7 +75,7 @@ void setConfigData(final CommentedConfig configData) { this.spec.acceptConfig(this.configData); } - void fireEvent(final IConfigEvent configEvent) { + public void fireEvent(final IConfigEvent configEvent) { this.container.dispatchConfigEvent(configEvent); } From a983ef1f0bbb0eb03b8a42d7484cde8785286063 Mon Sep 17 00:00:00 2001 From: dima_dencep Date: Mon, 20 Nov 2023 02:54:12 +0700 Subject: [PATCH 05/13] Try fix ParsingException --- .../fml/config/ConfigFileTypeHandler.java | 30 +++++++++++++++---- 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/core/src/main/java/net/neoforged/fml/config/ConfigFileTypeHandler.java b/core/src/main/java/net/neoforged/fml/config/ConfigFileTypeHandler.java index 45352495..d119fb59 100644 --- a/core/src/main/java/net/neoforged/fml/config/ConfigFileTypeHandler.java +++ b/core/src/main/java/net/neoforged/fml/config/ConfigFileTypeHandler.java @@ -45,7 +45,20 @@ public Function reader(Path configBasePath) { } catch (ParsingException ex) { - throw new ConfigLoadingException(c, ex); + LOGGER.warn(CONFIG, "Attempting to recreate {}", configPath); + try + { + backUpConfig(configData.getNioPath(), 5); + Files.delete(configData.getNioPath()); + + configData.load(); + } + catch (Throwable t) + { + ex.addSuppressed(t); + + throw new ConfigLoadingException(c, ex); + } } LOGGER.debug(CONFIG, "Loaded TOML config file {}", configPath); if (!FMLConfig.getBoolConfigValue(FMLConfig.ConfigValue.DISABLE_CONFIG_WATCHER)) { @@ -91,9 +104,14 @@ public static void backUpConfig(final CommentedFileConfig commentedFileConfig) public static void backUpConfig(final CommentedFileConfig commentedFileConfig, final int maxBackups) { - Path bakFileLocation = commentedFileConfig.getNioPath().getParent(); - String bakFileName = FilenameUtils.removeExtension(commentedFileConfig.getFile().getName()); - String bakFileExtension = FilenameUtils.getExtension(commentedFileConfig.getFile().getName()) + ".bak"; + backUpConfig(commentedFileConfig.getNioPath(), maxBackups); + } + + public static void backUpConfig(final Path commentedFileConfig, final int maxBackups) + { + Path bakFileLocation = commentedFileConfig.getParent(); + String bakFileName = FilenameUtils.removeExtension(commentedFileConfig.getFileName().toString()); + String bakFileExtension = FilenameUtils.getExtension(commentedFileConfig.getFileName().toString()) + ".bak"; Path bakFile = bakFileLocation.resolve(bakFileName + "-1" + "." + bakFileExtension); try { @@ -108,11 +126,11 @@ public static void backUpConfig(final CommentedFileConfig commentedFileConfig, f Files.move(oldBak, bakFileLocation.resolve(bakFileName + "-" + (i + 1) + "." + bakFileExtension)); } } - Files.copy(commentedFileConfig.getNioPath(), bakFile); + Files.copy(commentedFileConfig, bakFile); } catch (IOException exception) { - LOGGER.warn(CONFIG, "Failed to back up config file {}", commentedFileConfig.getNioPath(), exception); + LOGGER.warn(CONFIG, "Failed to back up config file {}", commentedFileConfig, exception); } } From 7757869b26162fd632a0b766125981ec95697ed7 Mon Sep 17 00:00:00 2001 From: dima_dencep Date: Mon, 20 Nov 2023 02:59:36 +0700 Subject: [PATCH 06/13] Allows to set a custom number of backups Resolves todo --- .../java/net/neoforged/fml/config/ConfigFileTypeHandler.java | 4 ++-- loader/src/main/java/net/neoforged/fml/loading/FMLConfig.java | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/core/src/main/java/net/neoforged/fml/config/ConfigFileTypeHandler.java b/core/src/main/java/net/neoforged/fml/config/ConfigFileTypeHandler.java index d119fb59..41ff0cdf 100644 --- a/core/src/main/java/net/neoforged/fml/config/ConfigFileTypeHandler.java +++ b/core/src/main/java/net/neoforged/fml/config/ConfigFileTypeHandler.java @@ -48,7 +48,7 @@ public Function reader(Path configBasePath) { LOGGER.warn(CONFIG, "Attempting to recreate {}", configPath); try { - backUpConfig(configData.getNioPath(), 5); + backUpConfig(configData.getNioPath(), FMLConfig.getIntConfigValue(FMLConfig.ConfigValue.CONFIG_BACKUPS_COUNT)); Files.delete(configData.getNioPath()); configData.load(); @@ -99,7 +99,7 @@ private boolean setupConfigFile(final ModConfig modConfig, final Path file, fina public static void backUpConfig(final CommentedFileConfig commentedFileConfig) { - backUpConfig(commentedFileConfig, 5); //TODO: Think of a way for mods to set their own preference (include a sanity check as well, no disk stuffing) + backUpConfig(commentedFileConfig, FMLConfig.getIntConfigValue(FMLConfig.ConfigValue.CONFIG_BACKUPS_COUNT)); } public static void backUpConfig(final CommentedFileConfig commentedFileConfig, final int maxBackups) diff --git a/loader/src/main/java/net/neoforged/fml/loading/FMLConfig.java b/loader/src/main/java/net/neoforged/fml/loading/FMLConfig.java index d360c583..4a1d65ec 100644 --- a/loader/src/main/java/net/neoforged/fml/loading/FMLConfig.java +++ b/loader/src/main/java/net/neoforged/fml/loading/FMLConfig.java @@ -28,6 +28,7 @@ public enum ConfigValue { MAX_THREADS("maxThreads", -1, "Max threads for early initialization parallelism, -1 is based on processor count", FMLConfig::maxThreads), VERSION_CHECK("versionCheck", Boolean.TRUE, "Enable NeoForge global version checking"), DEFAULT_CONFIG_PATH("defaultConfigPath", "defaultconfigs", "Default config path for servers"), + CONFIG_BACKUPS_COUNT("configBackupsCount", 5, "Sets the number of backups for configs."), DISABLE_OPTIMIZED_DFU("disableOptimizedDFU", Boolean.TRUE, "Disables Optimized DFU client-side - already disabled on servers"), EARLY_WINDOW_PROVIDER("earlyWindowProvider", "fmlearlywindow", "Early window provider"), EARLY_WINDOW_WIDTH("earlyWindowWidth", 854, "Early window width"), From 21d58e48bc49aa69bb4f0a1d542c0d9ddd0e27bc Mon Sep 17 00:00:00 2001 From: dima_dencep Date: Thu, 23 Nov 2023 15:26:27 +0700 Subject: [PATCH 07/13] Revert "Allows to set a custom number of backups" This reverts commit 7757869b26162fd632a0b766125981ec95697ed7. --- .../java/net/neoforged/fml/config/ConfigFileTypeHandler.java | 4 ++-- loader/src/main/java/net/neoforged/fml/loading/FMLConfig.java | 1 - 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/core/src/main/java/net/neoforged/fml/config/ConfigFileTypeHandler.java b/core/src/main/java/net/neoforged/fml/config/ConfigFileTypeHandler.java index 41ff0cdf..d119fb59 100644 --- a/core/src/main/java/net/neoforged/fml/config/ConfigFileTypeHandler.java +++ b/core/src/main/java/net/neoforged/fml/config/ConfigFileTypeHandler.java @@ -48,7 +48,7 @@ public Function reader(Path configBasePath) { LOGGER.warn(CONFIG, "Attempting to recreate {}", configPath); try { - backUpConfig(configData.getNioPath(), FMLConfig.getIntConfigValue(FMLConfig.ConfigValue.CONFIG_BACKUPS_COUNT)); + backUpConfig(configData.getNioPath(), 5); Files.delete(configData.getNioPath()); configData.load(); @@ -99,7 +99,7 @@ private boolean setupConfigFile(final ModConfig modConfig, final Path file, fina public static void backUpConfig(final CommentedFileConfig commentedFileConfig) { - backUpConfig(commentedFileConfig, FMLConfig.getIntConfigValue(FMLConfig.ConfigValue.CONFIG_BACKUPS_COUNT)); + backUpConfig(commentedFileConfig, 5); //TODO: Think of a way for mods to set their own preference (include a sanity check as well, no disk stuffing) } public static void backUpConfig(final CommentedFileConfig commentedFileConfig, final int maxBackups) diff --git a/loader/src/main/java/net/neoforged/fml/loading/FMLConfig.java b/loader/src/main/java/net/neoforged/fml/loading/FMLConfig.java index 4a1d65ec..d360c583 100644 --- a/loader/src/main/java/net/neoforged/fml/loading/FMLConfig.java +++ b/loader/src/main/java/net/neoforged/fml/loading/FMLConfig.java @@ -28,7 +28,6 @@ public enum ConfigValue { MAX_THREADS("maxThreads", -1, "Max threads for early initialization parallelism, -1 is based on processor count", FMLConfig::maxThreads), VERSION_CHECK("versionCheck", Boolean.TRUE, "Enable NeoForge global version checking"), DEFAULT_CONFIG_PATH("defaultConfigPath", "defaultconfigs", "Default config path for servers"), - CONFIG_BACKUPS_COUNT("configBackupsCount", 5, "Sets the number of backups for configs."), DISABLE_OPTIMIZED_DFU("disableOptimizedDFU", Boolean.TRUE, "Disables Optimized DFU client-side - already disabled on servers"), EARLY_WINDOW_PROVIDER("earlyWindowProvider", "fmlearlywindow", "Early window provider"), EARLY_WINDOW_WIDTH("earlyWindowWidth", 854, "Early window width"), From ae5316b99b085a6fcdb852fb7720fe0e33cc90bd Mon Sep 17 00:00:00 2001 From: dima_dencep Date: Thu, 23 Nov 2023 15:38:47 +0700 Subject: [PATCH 08/13] Remove `configHandler` --- .../net/neoforged/fml/config/ConfigTracker.java | 4 ++-- .../java/net/neoforged/fml/config/ModConfig.java | 13 ++----------- 2 files changed, 4 insertions(+), 13 deletions(-) diff --git a/core/src/main/java/net/neoforged/fml/config/ConfigTracker.java b/core/src/main/java/net/neoforged/fml/config/ConfigTracker.java index 0d4b70cb..129b3a63 100644 --- a/core/src/main/java/net/neoforged/fml/config/ConfigTracker.java +++ b/core/src/main/java/net/neoforged/fml/config/ConfigTracker.java @@ -57,7 +57,7 @@ public void unloadConfigs(ModConfig.Type type, Path configBasePath) { private void openConfig(final ModConfig config, final Path configBasePath) { LOGGER.trace(CONFIG, "Loading config file type {} at {} for {}", config.getType(), config.getFileName(), config.getModId()); - final CommentedFileConfig configData = config.getHandler().reader(configBasePath).apply(config); + final CommentedFileConfig configData = ConfigFileTypeHandler.TOML.reader(configBasePath).apply(config); config.setConfigData(configData); config.fireEvent(IConfigEvent.loading(config)); config.save(); @@ -67,7 +67,7 @@ private void closeConfig(final ModConfig config, final Path configBasePath) { if (config.getConfigData() != null) { LOGGER.trace(CONFIG, "Closing config file type {} at {} for {}", config.getType(), config.getFileName(), config.getModId()); // stop the filewatcher before we save the file and close it, so reload doesn't fire - config.getHandler().unload(configBasePath, config); + ConfigFileTypeHandler.TOML.unload(configBasePath, config); var unloading = IConfigEvent.unloading(config); if (unloading != null) config.fireEvent(unloading); diff --git a/core/src/main/java/net/neoforged/fml/config/ModConfig.java b/core/src/main/java/net/neoforged/fml/config/ModConfig.java index 8738ae5a..5b73da45 100644 --- a/core/src/main/java/net/neoforged/fml/config/ModConfig.java +++ b/core/src/main/java/net/neoforged/fml/config/ModConfig.java @@ -21,22 +21,16 @@ public class ModConfig private final IConfigSpec spec; private final String fileName; private final ModContainer container; - private final ConfigFileTypeHandler configHandler; private CommentedConfig configData; - public ModConfig(final Type type, final IConfigSpec spec, final ModContainer container, final String fileName, ConfigFileTypeHandler configHandler) { + public ModConfig(final Type type, final IConfigSpec spec, final ModContainer container, final String fileName) { this.type = type; this.spec = spec; this.fileName = fileName; this.container = container; - this.configHandler = configHandler; ConfigTracker.INSTANCE.trackConfig(this); } - public ModConfig(final Type type, final IConfigSpec spec, final ModContainer container, final String fileName) { - this(type, spec, container, fileName, ConfigFileTypeHandler.TOML); - } - public ModConfig(final Type type, final IConfigSpec spec, final ModContainer activeContainer) { this(type, spec, activeContainer, defaultConfigName(type, activeContainer.getModId())); } @@ -45,6 +39,7 @@ private static String defaultConfigName(Type type, String modId) { // config file name would be "forge-client.toml" and "forge-server.toml" return String.format(Locale.ROOT, "%s-%s.toml", modId, type.extension()); } + public Type getType() { return type; } @@ -53,10 +48,6 @@ public String getFileName() { return fileName; } - public ConfigFileTypeHandler getHandler() { - return configHandler; - } - @SuppressWarnings("unchecked") public > IConfigSpec getSpec() { return (IConfigSpec) spec; From 005dbec43d6e17785792b5392e0d3b88b5adc51e Mon Sep 17 00:00:00 2001 From: dima_dencep Date: Thu, 23 Nov 2023 15:40:09 +0700 Subject: [PATCH 09/13] Revert "Allow events to be fired from ModConfig" This reverts commit 8f43edf25d439b15990c9e0b7bfbd7e8dcf24534. --- core/src/main/java/net/neoforged/fml/config/ModConfig.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/main/java/net/neoforged/fml/config/ModConfig.java b/core/src/main/java/net/neoforged/fml/config/ModConfig.java index 5b73da45..e857062d 100644 --- a/core/src/main/java/net/neoforged/fml/config/ModConfig.java +++ b/core/src/main/java/net/neoforged/fml/config/ModConfig.java @@ -66,7 +66,7 @@ void setConfigData(final CommentedConfig configData) { this.spec.acceptConfig(this.configData); } - public void fireEvent(final IConfigEvent configEvent) { + void fireEvent(final IConfigEvent configEvent) { this.container.dispatchConfigEvent(configEvent); } From 5bd10be3ae6e274c2ed0aab22f884bcd9a7ba956 Mon Sep 17 00:00:00 2001 From: dima_dencep Date: Thu, 23 Nov 2023 15:54:48 +0700 Subject: [PATCH 10/13] Cast to FileConfig instead of CommentedFileConfig --- .../net/neoforged/fml/config/ConfigFileTypeHandler.java | 2 +- core/src/main/java/net/neoforged/fml/config/ModConfig.java | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/core/src/main/java/net/neoforged/fml/config/ConfigFileTypeHandler.java b/core/src/main/java/net/neoforged/fml/config/ConfigFileTypeHandler.java index d119fb59..dbabfb8d 100644 --- a/core/src/main/java/net/neoforged/fml/config/ConfigFileTypeHandler.java +++ b/core/src/main/java/net/neoforged/fml/config/ConfigFileTypeHandler.java @@ -25,7 +25,7 @@ public class ConfigFileTypeHandler { private static final Logger LOGGER = LogUtils.getLogger(); - static ConfigFileTypeHandler TOML = new ConfigFileTypeHandler(); + public static ConfigFileTypeHandler TOML = new ConfigFileTypeHandler(); private static final Path defaultConfigPath = FMLPaths.GAMEDIR.get().resolve(FMLConfig.getConfigValue(FMLConfig.ConfigValue.DEFAULT_CONFIG_PATH)); public Function reader(Path configBasePath) { diff --git a/core/src/main/java/net/neoforged/fml/config/ModConfig.java b/core/src/main/java/net/neoforged/fml/config/ModConfig.java index e857062d..4afb1246 100644 --- a/core/src/main/java/net/neoforged/fml/config/ModConfig.java +++ b/core/src/main/java/net/neoforged/fml/config/ModConfig.java @@ -6,7 +6,7 @@ package net.neoforged.fml.config; import com.electronwill.nightconfig.core.CommentedConfig; -import com.electronwill.nightconfig.core.file.CommentedFileConfig; +import com.electronwill.nightconfig.core.file.FileConfig; import com.electronwill.nightconfig.toml.TomlFormat; import net.neoforged.fml.ModContainer; import net.neoforged.fml.loading.StringUtils; @@ -71,11 +71,11 @@ void fireEvent(final IConfigEvent configEvent) { } public void save() { - ((CommentedFileConfig)this.configData).save(); + ((FileConfig)this.configData).save(); } public Path getFullPath() { - return ((CommentedFileConfig)this.configData).getNioPath(); + return ((FileConfig)this.configData).getNioPath(); } public void acceptSyncedConfig(byte[] bytes) { From 3dd9a83f801e9bb9f6a46161c63b22c4ee162c16 Mon Sep 17 00:00:00 2001 From: dima_dencep Date: Thu, 23 Nov 2023 15:56:53 +0700 Subject: [PATCH 11/13] Make `TOML` final --- .../java/net/neoforged/fml/config/ConfigFileTypeHandler.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/main/java/net/neoforged/fml/config/ConfigFileTypeHandler.java b/core/src/main/java/net/neoforged/fml/config/ConfigFileTypeHandler.java index dbabfb8d..e8c8865c 100644 --- a/core/src/main/java/net/neoforged/fml/config/ConfigFileTypeHandler.java +++ b/core/src/main/java/net/neoforged/fml/config/ConfigFileTypeHandler.java @@ -25,7 +25,7 @@ public class ConfigFileTypeHandler { private static final Logger LOGGER = LogUtils.getLogger(); - public static ConfigFileTypeHandler TOML = new ConfigFileTypeHandler(); + public final static ConfigFileTypeHandler TOML = new ConfigFileTypeHandler(); private static final Path defaultConfigPath = FMLPaths.GAMEDIR.get().resolve(FMLConfig.getConfigValue(FMLConfig.ConfigValue.DEFAULT_CONFIG_PATH)); public Function reader(Path configBasePath) { From efc0bf600726fec54abe4846518e05c64b239201 Mon Sep 17 00:00:00 2001 From: dima_dencep Date: Thu, 23 Nov 2023 21:14:12 +0700 Subject: [PATCH 12/13] Remove `configHandler` from ModContainer --- core/src/main/java/net/neoforged/fml/ModContainer.java | 7 ------- core/src/main/java/net/neoforged/fml/config/ModConfig.java | 2 +- .../java/net/neoforged/fml/javafmlmod/FMLModContainer.java | 1 - 3 files changed, 1 insertion(+), 9 deletions(-) diff --git a/core/src/main/java/net/neoforged/fml/ModContainer.java b/core/src/main/java/net/neoforged/fml/ModContainer.java index dfaef7ed..d2d497c2 100644 --- a/core/src/main/java/net/neoforged/fml/ModContainer.java +++ b/core/src/main/java/net/neoforged/fml/ModContainer.java @@ -9,7 +9,6 @@ import net.neoforged.bus.api.Event; import net.neoforged.bus.api.EventPriority; import net.neoforged.bus.api.IEventBus; -import net.neoforged.fml.config.IConfigEvent; import net.neoforged.fml.config.ModConfig; import net.neoforged.fml.event.IModBusEvent; import net.neoforged.fml.loading.progress.ProgressMeter; @@ -57,8 +56,6 @@ public abstract class ModContainer protected final Map activityMap = new HashMap<>(); protected final Map>, Supplier> extensionPoints = new IdentityHashMap<>(); protected final EnumMap configs = new EnumMap<>(ModConfig.Type.class); - @SuppressWarnings("OptionalUsedAsFieldOrParameterType") - protected Optional> configHandler = Optional.empty(); public ModContainer(IModInfo info) { @@ -159,10 +156,6 @@ public void addConfig(final ModConfig modConfig) { configs.put(modConfig.getType(), modConfig); } - public void dispatchConfigEvent(IConfigEvent event) { - configHandler.ifPresent(configHandler->configHandler.accept(event)); - } - /** * Does this mod match the supplied mod? * diff --git a/core/src/main/java/net/neoforged/fml/config/ModConfig.java b/core/src/main/java/net/neoforged/fml/config/ModConfig.java index 4afb1246..4dd58690 100644 --- a/core/src/main/java/net/neoforged/fml/config/ModConfig.java +++ b/core/src/main/java/net/neoforged/fml/config/ModConfig.java @@ -67,7 +67,7 @@ void setConfigData(final CommentedConfig configData) { } void fireEvent(final IConfigEvent configEvent) { - this.container.dispatchConfigEvent(configEvent); + this.container.getEventBus().post(configEvent.self()); } public void save() { diff --git a/languages/java/src/main/java/net/neoforged/fml/javafmlmod/FMLModContainer.java b/languages/java/src/main/java/net/neoforged/fml/javafmlmod/FMLModContainer.java index 1c20bc74..e0f40c7c 100644 --- a/languages/java/src/main/java/net/neoforged/fml/javafmlmod/FMLModContainer.java +++ b/languages/java/src/main/java/net/neoforged/fml/javafmlmod/FMLModContainer.java @@ -50,7 +50,6 @@ public FMLModContainer(IModInfo info, String className, ModFileScanData modFileS .markerType(IModBusEvent.class) .allowPerPhasePost() .build(); - this.configHandler = Optional.of(ce->this.eventBus.post(ce.self())); final FMLJavaModLoadingContext contextExtension = new FMLJavaModLoadingContext(this); this.contextExtension = () -> contextExtension; try From cae2ac0507aa1c06bb406ffa596d7f4bf511f3dd Mon Sep 17 00:00:00 2001 From: dima_dencep Date: Thu, 23 Nov 2023 21:32:28 +0700 Subject: [PATCH 13/13] Remove `fireEvent` --- .../net/neoforged/fml/config/ConfigFileTypeHandler.java | 2 +- .../java/net/neoforged/fml/config/ConfigTracker.java | 6 +++--- .../main/java/net/neoforged/fml/config/IConfigEvent.java | 9 +++++++++ .../main/java/net/neoforged/fml/config/ModConfig.java | 8 ++------ 4 files changed, 15 insertions(+), 10 deletions(-) diff --git a/core/src/main/java/net/neoforged/fml/config/ConfigFileTypeHandler.java b/core/src/main/java/net/neoforged/fml/config/ConfigFileTypeHandler.java index e8c8865c..c110a5c3 100644 --- a/core/src/main/java/net/neoforged/fml/config/ConfigFileTypeHandler.java +++ b/core/src/main/java/net/neoforged/fml/config/ConfigFileTypeHandler.java @@ -167,7 +167,7 @@ public void run() { } LOGGER.debug(CONFIG, "Config file {} changed, sending notifies", this.modConfig.getFileName()); this.modConfig.getSpec().afterReload(); - this.modConfig.fireEvent(IConfigEvent.reloading(this.modConfig)); + IConfigEvent.reloading(this.modConfig).post(); } } } diff --git a/core/src/main/java/net/neoforged/fml/config/ConfigTracker.java b/core/src/main/java/net/neoforged/fml/config/ConfigTracker.java index 129b3a63..345e585c 100644 --- a/core/src/main/java/net/neoforged/fml/config/ConfigTracker.java +++ b/core/src/main/java/net/neoforged/fml/config/ConfigTracker.java @@ -59,7 +59,7 @@ private void openConfig(final ModConfig config, final Path configBasePath) { LOGGER.trace(CONFIG, "Loading config file type {} at {} for {}", config.getType(), config.getFileName(), config.getModId()); final CommentedFileConfig configData = ConfigFileTypeHandler.TOML.reader(configBasePath).apply(config); config.setConfigData(configData); - config.fireEvent(IConfigEvent.loading(config)); + IConfigEvent.loading(config).post(); config.save(); } @@ -70,7 +70,7 @@ private void closeConfig(final ModConfig config, final Path configBasePath) { ConfigFileTypeHandler.TOML.unload(configBasePath, config); var unloading = IConfigEvent.unloading(config); if (unloading != null) - config.fireEvent(unloading); + unloading.post(); config.save(); config.setConfigData(null); } @@ -81,7 +81,7 @@ public void loadDefaultServerConfigs() { final CommentedConfig commentedConfig = CommentedConfig.inMemory(); modConfig.getSpec().correct(commentedConfig); modConfig.setConfigData(commentedConfig); - modConfig.fireEvent(IConfigEvent.loading(modConfig)); + IConfigEvent.loading(modConfig).post(); }); } diff --git a/core/src/main/java/net/neoforged/fml/config/IConfigEvent.java b/core/src/main/java/net/neoforged/fml/config/IConfigEvent.java index a2900bc8..b264914a 100644 --- a/core/src/main/java/net/neoforged/fml/config/IConfigEvent.java +++ b/core/src/main/java/net/neoforged/fml/config/IConfigEvent.java @@ -6,6 +6,7 @@ package net.neoforged.fml.config; import net.neoforged.bus.api.Event; +import net.neoforged.bus.api.IEventBus; import net.neoforged.fml.Bindings; import java.util.function.Function; @@ -28,6 +29,14 @@ static IConfigEvent loading(ModConfig modConfig) { } ModConfig getConfig(); + default void post() { + IEventBus bus = getConfig().container.getEventBus(); + + if (bus != null) { + bus.post(self()); + } + } + @SuppressWarnings("unchecked") default T self() { return (T) this; diff --git a/core/src/main/java/net/neoforged/fml/config/ModConfig.java b/core/src/main/java/net/neoforged/fml/config/ModConfig.java index 4dd58690..7aea0dc3 100644 --- a/core/src/main/java/net/neoforged/fml/config/ModConfig.java +++ b/core/src/main/java/net/neoforged/fml/config/ModConfig.java @@ -20,7 +20,7 @@ public class ModConfig private final Type type; private final IConfigSpec spec; private final String fileName; - private final ModContainer container; + protected final ModContainer container; private CommentedConfig configData; public ModConfig(final Type type, final IConfigSpec spec, final ModContainer container, final String fileName) { @@ -66,10 +66,6 @@ void setConfigData(final CommentedConfig configData) { this.spec.acceptConfig(this.configData); } - void fireEvent(final IConfigEvent configEvent) { - this.container.getEventBus().post(configEvent.self()); - } - public void save() { ((FileConfig)this.configData).save(); } @@ -80,7 +76,7 @@ public Path getFullPath() { public void acceptSyncedConfig(byte[] bytes) { setConfigData(TomlFormat.instance().createParser().parse(new ByteArrayInputStream(bytes))); - fireEvent(IConfigEvent.reloading(this)); + IConfigEvent.reloading(this).post(); } public enum Type {