diff --git a/src/main/kotlin/co/statu/parsek/api/config/PluginConfigManager.kt b/src/main/kotlin/co/statu/parsek/api/config/PluginConfigManager.kt index 9c9c853..523d864 100644 --- a/src/main/kotlin/co/statu/parsek/api/config/PluginConfigManager.kt +++ b/src/main/kotlin/co/statu/parsek/api/config/PluginConfigManager.kt @@ -11,7 +11,8 @@ class PluginConfigManager( plugin: ParsekPlugin, private val pluginConfigClass: Class, private val logger: Logger, - private val migrations: List = listOf() + private val migrations: List = listOf(), + private val exPluginIds: List = listOf() ) { companion object { private val gson = Gson() @@ -50,10 +51,48 @@ class PluginConfigManager( .getJsonObject("plugins") .getJsonObject(pluginId) == null ) { - logger.warn("Couldn't find config for \"${pluginId}\". Saving default config") + val pluginConfigs = configManager.getConfig().getJsonObject("plugins") val config = JsonObject(gson.toJson(config)) + if (exPluginIds.isNotEmpty()) { + val foundExId = exPluginIds.reversed().firstOrNull { + pluginConfigs.getJsonObject(it) != null + } + + if (foundExId != null) { + val currentConfigVersion = if (migrations.isNotEmpty()) { + migrations.maxBy { it.VERSION }.VERSION + } else { + 1 + } + + val exConfig = pluginConfigs.getJsonObject(foundExId) + + var shouldMigrate = false + + if (exConfig.getInteger("version") == currentConfigVersion) { + val keysAreSame = config.map.keys.none { !exConfig.map.containsKey(it) } + + if (keysAreSame) { + shouldMigrate = true + } + } else { + shouldMigrate = true + } + + if (shouldMigrate) { + pluginConfigs.remove(foundExId) + + saveConfig(exConfig) + } + + return + } + } + + logger.warn("Couldn't find config for \"${pluginId}\". Saving default config") + if (migrations.isNotEmpty()) { val highestVersion = migrations.maxBy { it.VERSION }.VERSION