All source projects

MrUltimateLibrary Source

Standalone source project / 68 files

MrUltimateLibrary is the backbone of all my plugins; it offers features that facilitate plugin creation, maintenance, and updates.

java

MrUltimateLibrary/src/main/java/eu/mrneznamy/mrultimatelibrary/config/MrLibConfigMigrator.java

JAVA · Read-only source

package eu.mrneznamy.mrultimatelibrary.config;

import eu.mrneznamy.mrultimatelibrary.utils.MrLibColors;
import eu.mrneznamy.mrultimatelibrary.utils.MrLibConsoleSayer;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.plugin.java.JavaPlugin;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * Automatic configuration migration system for MrUltimateLibrary plugins
 * Handles versioning and migration of config.yml and messages.yml files
 */
public class MrLibConfigMigrator {
    
    private final JavaPlugin plugin;
    private final Map<String, Integer> configVersions = new HashMap<>();
    private final Map<String, List<MigrationStep>> migrations = new HashMap<>();
    
    public MrLibConfigMigrator(JavaPlugin plugin) {
        this.plugin = plugin;
        setupMigrations();
    }
    
    /**
     * Migrates configuration files to latest version
     * @param configType Type of config (config, messages)
     * @param currentVersion Current version of the config
     * @param targetVersion Target version to migrate to
     */
    public void migrateConfig(String configType, int currentVersion, int targetVersion) {
        if (currentVersion >= targetVersion) {
            return; 
        }
        
        String fileName = configType.equals("config") ? "config.yml" : "messages.yml";
        File configFile = new File(plugin.getDataFolder(), fileName);
        
        if (!configFile.exists()) {
            return; 
        }
        
        MrLibConsoleSayer.MrSay_Info("[" + plugin.getName() + "] Migrating " + fileName + " from v" + currentVersion + " to v" + targetVersion);
        
        try {
            
            FileConfiguration config = YamlConfiguration.loadConfiguration(configFile);
            
            
            for (int version = currentVersion + 1; version <= targetVersion; version++) {
                List<MigrationStep> steps = migrations.get(configType + "_v" + version);
                if (steps != null) {
                    for (MigrationStep step : steps) {
                        step.apply(config);
                    }
                }
            }
            
            
            config.save(configFile);
            MrLibConsoleSayer.MrSay_Success("[" + plugin.getName() + "] Successfully migrated " + fileName + " to v" + targetVersion);
            
        } catch (IOException e) {
            MrLibConsoleSayer.MrSay_Error("[" + plugin.getName() + "] Failed to migrate " + fileName + ": " + e.getMessage());
        }
    }
    
    /**
     * Checks and migrates all configuration files
     */
    public void checkAndMigrate() {
        
        File configFile = new File(plugin.getDataFolder(), "config.yml");
        if (configFile.exists()) {
            FileConfiguration config = YamlConfiguration.loadConfiguration(configFile);
            int currentVersion = config.getInt("config-version", 1);
            int targetVersion = configVersions.getOrDefault("config", 1);
            migrateConfig("config", currentVersion, targetVersion);
        }
        
        
        File messagesFile = new File(plugin.getDataFolder(), "messages.yml");
        if (messagesFile.exists()) {
            FileConfiguration messages = YamlConfiguration.loadConfiguration(messagesFile);
            int currentVersion = messages.getInt("messages-version", 1);
            int targetVersion = configVersions.getOrDefault("messages", 1);
            migrateConfig("messages", currentVersion, targetVersion);
        }
    }
    
    /**
     * Sets up migration steps for different plugins
     */
    private void setupMigrations() {
        
        if (plugin.getName().equals("MrSellChests")) {
            setupMrSellChestsMigrations();
        }
        
        else if (plugin.getName().equals("MrUltimateFishing")) {
            setupMrUltimateFishingMigrations();
        }
        
        else if (plugin.getName().equals("MrUltimateShop")) {
            setupMrUltimateShopMigrations();
        }
        
    }
    
    private void setupMrSellChestsMigrations() {
        configVersions.put("config", 2);
        configVersions.put("messages", 2);
        
        
        List<MigrationStep> configV2 = new ArrayList<>();
        configV2.add(config -> {
            if (!config.contains("MrSellChests.Database")) {
                config.set("MrSellChests.Database.Type", "yml");
                config.set("MrSellChests.Database.Host", "localhost");
                config.set("MrSellChests.Database.Port", 3306);
                config.set("MrSellChests.Database.Database", "minecraft");
                config.set("MrSellChests.Database.Username", "root");
                config.set("MrSellChests.Database.Password", "password");
            }
            config.set("config-version", 2);
        });
        migrations.put("config_v2", configV2);
        
        
        List<MigrationStep> messagesV2 = new ArrayList<>();
        messagesV2.add(config -> {
            if (!config.contains("database_connection_failed")) {
                config.set("database_connection_failed", "&cDatabase connection failed! Using YAML storage.");
            }
            if (!config.contains("database_connected")) {
                config.set("database_connected", "&aConnected to database successfully!");
            }
            config.set("messages-version", 2);
        });
        migrations.put("messages_v2", messagesV2);
    }
    
    private void setupMrUltimateFishingMigrations() {
        configVersions.put("config", 2);
        configVersions.put("messages", 2);
        
        
        List<MigrationStep> configV2 = new ArrayList<>();
        configV2.add(config -> {
            if (!config.contains("Database")) {
                config.set("Database.Type", "yml");
                config.set("Database.Host", "localhost");
                config.set("Database.Port", 3306);
                config.set("Database.Database", "minecraft");
                config.set("Database.Username", "root");
                config.set("Database.Password", "password");
            }
            config.set("config-version", 2);
        });
        migrations.put("config_v2", configV2);
        
        
        List<MigrationStep> messagesV2 = new ArrayList<>();
        messagesV2.add(config -> {
            if (!config.contains("database_connection_failed")) {
                config.set("database_connection_failed", "&cDatabase connection failed! Using YAML storage.");
            }
            if (!config.contains("database_connected")) {
                config.set("database_connected", "&aConnected to database successfully!");
            }
            config.set("messages-version", 2);
        });
        migrations.put("messages_v2", messagesV2);
    }
    
    private void setupMrUltimateShopMigrations() {
        configVersions.put("config", 2);
        configVersions.put("messages", 2);
        
        
        List<MigrationStep> configV2 = new ArrayList<>();
        configV2.add(config -> {
            if (!config.contains("Database")) {
                config.set("Database.Type", "yml");
                config.set("Database.Host", "localhost");
                config.set("Database.Port", 3306);
                config.set("Database.Database", "minecraft");
                config.set("Database.Username", "root");
                config.set("Database.Password", "password");
            }
            config.set("config-version", 2);
        });
        migrations.put("config_v2", configV2);
        
        
        List<MigrationStep> messagesV2 = new ArrayList<>();
        messagesV2.add(config -> {
            if (!config.contains("database_connection_failed")) {
                config.set("database_connection_failed", "&cDatabase connection failed! Using YAML storage.");
            }
            if (!config.contains("database_connected")) {
                config.set("database_connected", "&aConnected to database successfully!");
            }
            config.set("messages-version", 2);
        });
        migrations.put("messages_v2", messagesV2);
    }
    
    /**
     * Interface for migration steps
     */
    @FunctionalInterface
    public interface MigrationStep {
        void apply(FileConfiguration config);
    }
}
223 linesGNU GENERAL PUBLIC LICENSE · Version 3, 29 June 2007 · UTF-8 · Read only