Add generic dependency handler

This commit is contained in:
alexcrea 2025-05-13 12:42:40 +02:00
parent 1296ebba38
commit 4fd3f153df
No known key found for this signature in database
GPG key ID: 027DD67D2D3280C5
3 changed files with 63 additions and 1 deletions

View file

@ -35,6 +35,8 @@ object DependencyManager {
var disenchantmentCompatibility: DisenchantmentDependency? = null var disenchantmentCompatibility: DisenchantmentDependency? = null
var havenBagsCompatibility: HavenBagsDependency? = null var havenBagsCompatibility: HavenBagsDependency? = null
val genericDependencies = ArrayList<GenericPluginDependency>()
fun loadDependency() { fun loadDependency() {
val pluginManager = Bukkit.getPluginManager() val pluginManager = Bukkit.getPluginManager()
@ -103,6 +105,7 @@ object DependencyManager {
// Then handle plugin reload // Then handle plugin reload
ecoEnchantCompatibility?.handleConfigReload() ecoEnchantCompatibility?.handleConfigReload()
} }
// Return true if should bypass (either by a dependency or error) // Return true if should bypass (either by a dependency or error)
// called before immutability test // called before immutability test
fun earlyTryEventPreAnvilBypass(event: PrepareAnvilEvent, player: HumanEntity): Boolean { fun earlyTryEventPreAnvilBypass(event: PrepareAnvilEvent, player: HumanEntity): Boolean {
@ -165,6 +168,10 @@ object DependencyManager {
// Test excellent enchantments used prepare anvil // Test excellent enchantments used prepare anvil
if (!bypass && (excellentEnchantsCompatibility?.testPrepareAnvil(event) == true)) bypass = true if (!bypass && (excellentEnchantsCompatibility?.testPrepareAnvil(event) == true)) bypass = true
for (genericDependency in genericDependencies) {
genericDependency.testPrepareAnvil(event)
}
return bypass return bypass
} }
@ -225,6 +232,10 @@ object DependencyManager {
// Test if disenchantment used event click // Test if disenchantment used event click
if (!bypass && (excellentEnchantsCompatibility?.testAnvilResult(event) == true)) bypass = true 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) // Test if the inventory is a gui(version specific)
if (!bypass && (externGuiTester?.testIfGui(event.view) == true)) bypass = true if (!bypass && (externGuiTester?.testIfGui(event.view) == true)) bypass = true

View file

@ -146,7 +146,7 @@ class ExcellentEnchantsDependency {
return event.inventory.getItem(2) == null return event.inventory.getItem(2) == null
} }
return false; return false
} }
private fun treatInput(item: ItemStack?): ItemStack { private fun treatInput(item: ItemStack?): ItemStack {

View file

@ -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<RegisteredListener>()
protected val postAnvil = ArrayList<RegisteredListener>()
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<RegisteredListener>
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
}
}