From 6dffb7a784342ad52518f91ee1c5a9a4f78a6b7b Mon Sep 17 00:00:00 2001 From: EpicKnarvik97 Date: Fri, 5 Sep 2025 21:51:28 +0200 Subject: [PATCH] Attempts to clean the migration code a bit --- .../config/StargateYamlConfiguration.java | 9 ++- .../knarcraft/knarlib/util/ConfigHelper.java | 64 +++++++++++-------- 2 files changed, 40 insertions(+), 33 deletions(-) diff --git a/src/main/java/net/knarcraft/knarlib/config/StargateYamlConfiguration.java b/src/main/java/net/knarcraft/knarlib/config/StargateYamlConfiguration.java index 03b1044..122e2b8 100644 --- a/src/main/java/net/knarcraft/knarlib/config/StargateYamlConfiguration.java +++ b/src/main/java/net/knarcraft/knarlib/config/StargateYamlConfiguration.java @@ -64,14 +64,14 @@ public class StargateYamlConfiguration extends YamlConfiguration { /** * Loads the configuration of the given plugin * - * @param plugin

The plugin to load the configuration from

+ * @param plugin

The plugin to load the configuration from

+ * @param copyDefaults

Whether to copy default values when loading

* @return

The loaded configuration, or null if unsuccessful

*/ - @SuppressWarnings("unused") @Nullable - public static StargateYamlConfiguration loadConfiguration(@NotNull Plugin plugin) { + public static StargateYamlConfiguration loadConfiguration(@NotNull Plugin plugin, boolean copyDefaults) { StargateYamlConfiguration configuration = new StargateYamlConfiguration(); - configuration.options().copyDefaults(true); + configuration.options().copyDefaults(copyDefaults); try { configuration.load(new File(plugin.getDataFolder(), ConfigHelper.getConfigFile())); return configuration; @@ -88,7 +88,6 @@ public class StargateYamlConfiguration extends YamlConfiguration { * @param configuration

The configuration to save

* @return

True if the configuration was successfully saved

*/ - @SuppressWarnings("unused") public static boolean saveConfiguration(@NotNull Plugin plugin, @NotNull FileConfiguration configuration) { try { configuration.save(new File(plugin.getDataFolder(), ConfigHelper.getConfigFile())); diff --git a/src/main/java/net/knarcraft/knarlib/util/ConfigHelper.java b/src/main/java/net/knarcraft/knarlib/util/ConfigHelper.java index d11b11d..c458c0a 100644 --- a/src/main/java/net/knarcraft/knarlib/util/ConfigHelper.java +++ b/src/main/java/net/knarcraft/knarlib/util/ConfigHelper.java @@ -3,12 +3,12 @@ package net.knarcraft.knarlib.util; import net.knarcraft.knarlib.config.StargateYamlConfiguration; import net.knarcraft.knarlib.property.ColorConversion; import org.bukkit.configuration.ConfigurationSection; -import org.bukkit.configuration.InvalidConfigurationException; import org.bukkit.configuration.MemorySection; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.plugin.Plugin; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import java.io.File; import java.io.IOException; @@ -64,32 +64,23 @@ public final class ConfigHelper { public static boolean migrateConfig(@NotNull Plugin plugin) { File dataFolder = plugin.getDataFolder(); File config = new File(dataFolder, CONFIG_FILE); - + + // Load the old configuration as a normal configuration to prevent old comments from being retained + FileConfiguration oldConfiguration = StargateYamlConfiguration.loadConfiguration(plugin, false); + if (oldConfiguration == null) { + return false; + } + //Save the old config just in case something goes wrong try { - StargateYamlConfiguration currentConfiguration = new StargateYamlConfiguration(); - currentConfiguration.load(config); - currentConfiguration.save(new File(dataFolder, BACKUP_CONFIG_FILE)); - } catch (IOException | InvalidConfigurationException exception) { + oldConfiguration.save(new File(dataFolder, BACKUP_CONFIG_FILE)); + } catch (IOException exception) { plugin.getLogger().log(Level.WARNING, "Unable to save old backup and do migration"); return false; } - //Load old and new configuration - plugin.reloadConfig(); - FileConfiguration oldConfiguration; - try { - oldConfiguration = new YamlConfiguration(); - oldConfiguration.load(config); - } catch (IOException | InvalidConfigurationException exception) { - plugin.getLogger().log(Level.WARNING, "Unable to load old configuration and do migration"); - return false; - } - - InputStream configStream = FileHelper.getInputStreamForInternalFile("/" + CONFIG_FILE); + InputStream configStream = loadInternalFile(plugin, CONFIG_FILE, "internal configuration"); if (configStream == null) { - plugin.getLogger().log(Level.SEVERE, "Could not migrate the configuration, as the internal " + - "configuration could not be read!"); return false; } YamlConfiguration newConfiguration = StargateYamlConfiguration.loadConfiguration( @@ -98,10 +89,8 @@ public final class ConfigHelper { //Read all available config migrations Map migrationFields; try { - InputStream migrationStream = FileHelper.getInputStreamForInternalFile("/" + MIGRATION_FILE); + InputStream migrationStream = loadInternalFile(plugin, MIGRATION_FILE, "internal migration paths"); if (migrationStream == null) { - plugin.getLogger().log(Level.SEVERE, "Could not migrate the configuration, as the internal " + - "migration paths could not be read!"); return false; } migrationFields = FileHelper.readKeyValuePairs(FileHelper.getBufferedReaderFromInputStream(migrationStream), @@ -111,7 +100,7 @@ public final class ConfigHelper { return false; } - //Replace old config names with the new ones + // Replace old config names with the new ones for (String key : migrationFields.keySet()) { if (oldConfiguration.contains(key)) { migrateProperty(migrationFields, key, oldConfiguration); @@ -126,10 +115,8 @@ public final class ConfigHelper { newConfiguration.set(key, oldConfiguration.get(key)); } - try { - newConfiguration.save(config); - } catch (IOException exception) { - plugin.getLogger().log(Level.WARNING, "Unable to save migrated config"); + // Save merged configuration + if (!StargateYamlConfiguration.saveConfiguration(plugin, newConfiguration)) { return false; } @@ -169,4 +156,25 @@ public final class ConfigHelper { oldConfiguration.set(key, null); } + /** + * Loads a file from the internal plugin .jar + * + * @param plugin

The plugin to load the file from

+ * @param fileName

The file to load

+ * @param fileDescription

The file description to use in error messages

+ * @return

An input stream for the file, or null if the file could not be read

+ */ + @Nullable + private static InputStream loadInternalFile(@NotNull Plugin plugin, @NotNull String fileName, + @NotNull String fileDescription) { + InputStream configStream = FileHelper.getInputStreamForInternalFile("/" + fileName); + if (configStream == null) { + plugin.getLogger().log(Level.SEVERE, "Could not migrate the configuration, as the " + fileDescription + + " could not be read!"); + return null; + } else { + return configStream; + } + } + }