mirror of
https://github.com/alexcrea/CustomAnvil.git
synced 2026-06-24 00:26:16 +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 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
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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 {
|
||||||
|
|
|
||||||
|
|
@ -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