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