diff --git a/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/DependencyManager.kt b/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/DependencyManager.kt index 34096e7..1894c8e 100644 --- a/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/DependencyManager.kt +++ b/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/DependencyManager.kt @@ -35,6 +35,8 @@ object DependencyManager { var disenchantmentCompatibility: DisenchantmentDependency? = null var havenBagsCompatibility: HavenBagsDependency? = null + val genericDependencies = ArrayList() + fun loadDependency() { val pluginManager = Bukkit.getPluginManager() @@ -103,6 +105,7 @@ object DependencyManager { // Then handle plugin reload ecoEnchantCompatibility?.handleConfigReload() } + // Return true if should bypass (either by a dependency or error) // called before immutability test fun earlyTryEventPreAnvilBypass(event: PrepareAnvilEvent, player: HumanEntity): Boolean { @@ -165,6 +168,10 @@ object DependencyManager { // Test excellent enchantments used prepare anvil if (!bypass && (excellentEnchantsCompatibility?.testPrepareAnvil(event) == true)) bypass = true + for (genericDependency in genericDependencies) { + genericDependency.testPrepareAnvil(event) + } + return bypass } @@ -225,6 +232,10 @@ object DependencyManager { // Test if disenchantment used event click if (!bypass && (excellentEnchantsCompatibility?.testAnvilResult(event) == true)) bypass = true + for (genericDependency in genericDependencies) { + if (!bypass && genericDependency.testAnvilResult(event)) bypass = true + } + // Test if the inventory is a gui(version specific) if (!bypass && (externGuiTester?.testIfGui(event.view) == true)) bypass = true diff --git a/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/plugins/ExcellentEnchantsDependency.kt b/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/plugins/ExcellentEnchantsDependency.kt index 4188aad..e5aa8be 100644 --- a/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/plugins/ExcellentEnchantsDependency.kt +++ b/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/plugins/ExcellentEnchantsDependency.kt @@ -146,7 +146,7 @@ class ExcellentEnchantsDependency { return event.inventory.getItem(2) == null } - return false; + return false } private fun treatInput(item: ItemStack?): ItemStack { diff --git a/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/plugins/GenericPluginDependency.kt b/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/plugins/GenericPluginDependency.kt new file mode 100644 index 0000000..4ef8bce --- /dev/null +++ b/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/plugins/GenericPluginDependency.kt @@ -0,0 +1,51 @@ +package xyz.alexcrea.cuanvil.dependency.plugins + +import org.bukkit.event.inventory.InventoryClickEvent +import org.bukkit.event.inventory.PrepareAnvilEvent +import org.bukkit.plugin.Plugin +import org.bukkit.plugin.RegisteredListener + +abstract class GenericPluginDependency(private val plugin: Plugin) { + + protected val preAnvil = ArrayList() + protected val postAnvil = ArrayList() + + fun redirectListeners() { + // get PreAnvil and PostAnvil listeners + for (registeredListener in PrepareAnvilEvent.getHandlerList().registeredListeners) { + + if (registeredListener.plugin != plugin) continue + preAnvil.add(registeredListener) + } + + postAnvil.addAll(postAnvilEvents()) + + // get required PrepareAnvilEvent listener + for (listener in preAnvil) { + PrepareAnvilEvent.getHandlerList().unregister(listener) + } + + for (listener in postAnvil) { + InventoryClickEvent.getHandlerList().unregister(listener) + } + + } + + protected abstract fun postAnvilEvents(): Collection + + fun testPrepareAnvil(event: PrepareAnvilEvent) { + for (registeredListener in preAnvil) { + registeredListener.callEvent(event) + } + } + + fun testAnvilResult(event: InventoryClickEvent): Boolean { + for (registeredListener in postAnvil) { + registeredListener.callEvent(event) + } + + return event.inventory.getItem(2) == null + } + + +}