diff --git a/src/main/kotlin/xyz/alexcrea/cuanvil/command/ReloadExecutor.kt b/src/main/kotlin/xyz/alexcrea/cuanvil/command/ReloadExecutor.kt index e49793d..38a98c0 100644 --- a/src/main/kotlin/xyz/alexcrea/cuanvil/command/ReloadExecutor.kt +++ b/src/main/kotlin/xyz/alexcrea/cuanvil/command/ReloadExecutor.kt @@ -51,8 +51,8 @@ class ReloadExecutor : CommandExecutor { // temporary: handle 1.21 update Update_1_21.handleUpdate() - // Register enchantment of compatible plugin and load configuration change. - DependencyManager.handleCompatibilityConfig() + // Handle dependency reload + DependencyManager.handleConfigReload() // Call event val configReadyEvent = CAConfigReadyEvent() diff --git a/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/DependencyManager.kt b/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/DependencyManager.kt index f3962d5..3512699 100644 --- a/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/DependencyManager.kt +++ b/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/DependencyManager.kt @@ -44,4 +44,13 @@ object DependencyManager { } + fun handleConfigReload(){ + // Register enchantment of compatible plugin and load configuration change. + handleCompatibilityConfig() + + // Then handle plugin reload + ecoEnchantCompatibility?.handleConfigReload() + + } + } diff --git a/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/EcoEnchantDependency.kt b/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/EcoEnchantDependency.kt index 713a03c..e7bad3e 100644 --- a/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/EcoEnchantDependency.kt +++ b/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/EcoEnchantDependency.kt @@ -1,5 +1,6 @@ package xyz.alexcrea.cuanvil.dependency +import com.willfp.ecoenchants.enchant.EcoEnchant import com.willfp.ecoenchants.enchant.EcoEnchants import io.delilaheve.CustomAnvil import org.bukkit.event.inventory.PrepareAnvilEvent @@ -17,15 +18,39 @@ class EcoEnchantDependency(private val ecoEnchantPlugin: Plugin) { PrepareAnvilEvent.getHandlerList().unregister(this.ecoEnchantPlugin) } + private var ecoEnchantOldEnchantments: MutableSet? = null fun registerEnchantments() { CustomAnvil.instance.logger.info("Preparing Eco Enchant compatibility...") - for (ecoEnchant in EcoEnchants.values()) { + val enchantments = EcoEnchants.values() + for (ecoEnchant in enchantments) { EnchantmentApi.unregisterEnchantment(ecoEnchant.enchantment) // As eco enchants is loaded before custom anvil and register enchantment to registry, we need to unregister old "vanilla" enchant. EnchantmentApi.registerEnchantment(CAEcoEnchant(ecoEnchant)) } + ecoEnchantOldEnchantments = HashSet(enchantments) + CustomAnvil.instance.logger.info("Eco Enchant should now work as expected !") } + fun handleConfigReload() { + // Should not happen in known case. + if(this.ecoEnchantOldEnchantments == null) return + + val newEnchantments = EcoEnchants.values() + + // Add new enchantments + for (ecoEnchant in newEnchantments) + if(!this.ecoEnchantOldEnchantments!!.contains(ecoEnchant)) + EnchantmentApi.registerEnchantment(CAEcoEnchant(ecoEnchant)) + + // Remove old enchantments that not now currently used + this.ecoEnchantOldEnchantments!!.removeAll(newEnchantments) + for (oldEnchantment in this.ecoEnchantOldEnchantments!!) { + EnchantmentApi.unregisterEnchantment(oldEnchantment.enchantment) + } + + this.ecoEnchantOldEnchantments = HashSet(newEnchantments) + } + }