diff --git a/paper-api/src/main/java/org/bukkit/configuration/file/YamlConfiguration.java b/paper-api/src/main/java/org/bukkit/configuration/file/YamlConfiguration.java index be8d35f156..8f99f0e307 100644 --- a/paper-api/src/main/java/org/bukkit/configuration/file/YamlConfiguration.java +++ b/paper-api/src/main/java/org/bukkit/configuration/file/YamlConfiguration.java @@ -68,10 +68,13 @@ public class YamlConfiguration extends FileConfiguration { if (input != null) { convertMapsToSections(input, this); + } else { + this.map.clear(); } } protected void convertMapsToSections(@NotNull Map input, @NotNull ConfigurationSection section) { + this.map.clear(); for (Map.Entry entry : input.entrySet()) { String key = entry.getKey().toString(); Object value = entry.getValue(); diff --git a/paper-api/src/test/java/org/bukkit/configuration/file/FileConfigurationTest.java b/paper-api/src/test/java/org/bukkit/configuration/file/FileConfigurationTest.java index a996753b93..7dd31fd165 100644 --- a/paper-api/src/test/java/org/bukkit/configuration/file/FileConfigurationTest.java +++ b/paper-api/src/test/java/org/bukkit/configuration/file/FileConfigurationTest.java @@ -206,4 +206,44 @@ public abstract class FileConfigurationTest extends MemoryConfigurationTest { assertEquals("", config.saveToString()); } + + @Test + public void testReloadClear() throws Exception { + // Test for SPIGOT-6274 - load does not clear values + FileConfiguration config = getConfig(); + + assertFalse(config.contains("test")); + assertFalse(config.getBoolean("test")); + + config.set("test", true); + assertTrue(config.contains("test")); + assertTrue(config.getBoolean("test")); + + config.loadFromString(""); + assertFalse(config.contains("test")); + assertFalse(config.getBoolean("test")); + + assertFalse(config.contains("test")); + assertFalse(config.getBoolean("test")); + } + + @Test + public void testReloadClear2() throws Exception { + // Test for SPIGOT-6274 - load does not clear values + FileConfiguration config = getConfig(); + + assertFalse(config.contains("test")); + assertFalse(config.getBoolean("test")); + + config.set("test", true); + assertTrue(config.contains("test")); + assertTrue(config.getBoolean("test")); + + config.loadFromString("other: false"); // Test both null and non-null code paths + assertFalse(config.contains("test")); + assertFalse(config.getBoolean("test")); + + assertFalse(config.contains("test")); + assertFalse(config.getBoolean("test")); + } }