diff --git a/src/main/java/net/minecraftforge/common/ForgeConfigSpec.java b/src/main/java/net/minecraftforge/common/ForgeConfigSpec.java index 071747d05..37204aa81 100644 --- a/src/main/java/net/minecraftforge/common/ForgeConfigSpec.java +++ b/src/main/java/net/minecraftforge/common/ForgeConfigSpec.java @@ -69,6 +69,8 @@ public class ForgeConfigSpec extends UnmodifiableConfigWrapper private Config childConfig; + private boolean isCorrecting = false; + private ForgeConfigSpec(Config storage, Map, String> levelComments) { super(storage); this.levelComments = levelComments; @@ -87,6 +89,10 @@ public class ForgeConfigSpec extends UnmodifiableConfigWrapper } } + public boolean isCorrecting() { + return isCorrecting; + } + public void save() { Preconditions.checkNotNull(childConfig, "Cannot save config value without assigned Config object present"); @@ -95,18 +101,25 @@ public class ForgeConfigSpec extends UnmodifiableConfigWrapper } } - public boolean isCorrect(CommentedConfig config) { + public synchronized boolean isCorrect(CommentedConfig config) { LinkedList parentPath = new LinkedList<>(); - return correct(this.config, config, parentPath, Collections.unmodifiableList( parentPath ), null, true) == 0; + return correct(this.config, config, parentPath, Collections.unmodifiableList( parentPath ), (a, b, c, d) -> {}, true) == 0; } public int correct(CommentedConfig config) { return correct(config, (action, path, incorrectValue, correctedValue) -> {}); } - public int correct(CommentedConfig config, CorrectionListener listener) { + public synchronized int correct(CommentedConfig config, CorrectionListener listener) { LinkedList parentPath = new LinkedList<>(); //Linked list for fast add/removes - return correct(this.config, config, parentPath, Collections.unmodifiableList(parentPath), listener, false); + int ret = -1; + try { + isCorrecting = true; + ret = correct(this.config, config, parentPath, Collections.unmodifiableList(parentPath), listener, false); + } finally { + isCorrecting = false; + } + return ret; } private int correct(Config spec, CommentedConfig config, LinkedList parentPath, List parentPathUnmodifiable, CorrectionListener listener, boolean dryRun) diff --git a/src/main/java/net/minecraftforge/fml/config/ConfigFileTypeHandler.java b/src/main/java/net/minecraftforge/fml/config/ConfigFileTypeHandler.java index 3cc3cefd7..0d8427e79 100644 --- a/src/main/java/net/minecraftforge/fml/config/ConfigFileTypeHandler.java +++ b/src/main/java/net/minecraftforge/fml/config/ConfigFileTypeHandler.java @@ -21,7 +21,6 @@ package net.minecraftforge.fml.config; import com.electronwill.nightconfig.core.ConfigFormat; import com.electronwill.nightconfig.core.file.CommentedFileConfig; -import com.electronwill.nightconfig.core.file.FileNotFoundAction; import com.electronwill.nightconfig.core.file.FileWatcher; import com.electronwill.nightconfig.core.io.WritingMode; import net.minecraftforge.fml.loading.FMLConfig; @@ -90,9 +89,11 @@ public class ConfigFileTypeHandler { public void run() { // Force the regular classloader onto the special thread Thread.currentThread().setContextClassLoader(realClassLoader); - this.commentedFileConfig.load(); - LOGGER.debug(CONFIG, "Config file {} changed, sending notifies", this.modConfig.getFileName()); - this.modConfig.fireEvent(new ModConfig.ConfigReloading(this.modConfig)); + if (!this.modConfig.getSpec().isCorrecting()) { + this.commentedFileConfig.load(); + LOGGER.debug(CONFIG, "Config file {} changed, sending notifies", this.modConfig.getFileName()); + this.modConfig.fireEvent(new ModConfig.ConfigReloading(this.modConfig)); + } } } } diff --git a/src/main/java/net/minecraftforge/fml/config/ModConfig.java b/src/main/java/net/minecraftforge/fml/config/ModConfig.java index 2e90cdd7e..f538c3bb7 100644 --- a/src/main/java/net/minecraftforge/fml/config/ModConfig.java +++ b/src/main/java/net/minecraftforge/fml/config/ModConfig.java @@ -28,9 +28,6 @@ import net.minecraftforge.fml.loading.StringUtils; import java.nio.file.Path; import java.util.concurrent.Callable; -import java.util.function.Consumer; - -import static cpw.mods.modlauncher.api.LamdbaExceptionUtils.uncheck; public class ModConfig {