mirror of
https://github.com/alexcrea/CustomAnvil.git
synced 2026-06-23 16:16:17 +02:00
Add generic dependency handler
This commit is contained in:
parent
1296ebba38
commit
4fd3f153df
3 changed files with 63 additions and 1 deletions
|
|
@ -35,6 +35,8 @@ object DependencyManager {
|
|||
var disenchantmentCompatibility: DisenchantmentDependency? = null
|
||||
var havenBagsCompatibility: HavenBagsDependency? = null
|
||||
|
||||
val genericDependencies = ArrayList<GenericPluginDependency>()
|
||||
|
||||
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
|
||||
|
||||
|
|
|
|||
|
|
@ -146,7 +146,7 @@ class ExcellentEnchantsDependency {
|
|||
return event.inventory.getItem(2) == null
|
||||
}
|
||||
|
||||
return false;
|
||||
return false
|
||||
}
|
||||
|
||||
private fun treatInput(item: ItemStack?): ItemStack {
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue