Merge branch 'v1.x.x' into feature/1.21.9

This commit is contained in:
alexcrea 2025-09-25 20:39:11 +02:00 committed by GitHub
commit e508f3fdf5
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 23 additions and 18 deletions

View file

@ -101,6 +101,9 @@ object DependencyManager {
if (pluginManager.isPluginEnabled("ToolStats")) if (pluginManager.isPluginEnabled("ToolStats"))
genericDependencies.add(ToolStatsDependency(pluginManager.getPlugin("ToolStats")!!)) genericDependencies.add(ToolStatsDependency(pluginManager.getPlugin("ToolStats")!!))
if (pluginManager.isPluginEnabled("ItemsAdder"))
genericDependencies.add(GenericPluginDependency(pluginManager.getPlugin("ItemsAdder")!!))
for (dependency in genericDependencies) for (dependency in genericDependencies)
dependency.redirectListeners() dependency.redirectListeners()

View file

@ -5,20 +5,14 @@ import org.bukkit.event.inventory.PrepareAnvilEvent
import org.bukkit.plugin.Plugin import org.bukkit.plugin.Plugin
import org.bukkit.plugin.RegisteredListener import org.bukkit.plugin.RegisteredListener
abstract class GenericPluginDependency(protected val plugin: Plugin) { open class GenericPluginDependency(protected val plugin: Plugin) {
protected val preAnvil = ArrayList<RegisteredListener>() private val preAnvil = ArrayList<RegisteredListener>()
protected val postAnvil = ArrayList<RegisteredListener>() private val postAnvil = ArrayList<RegisteredListener>()
open fun redirectListeners() { open fun redirectListeners() {
// get PreAnvil and PostAnvil listeners fillPreAnvil(preAnvil)
for (registeredListener in PrepareAnvilEvent.getHandlerList().registeredListeners) { fillPostAnvil(postAnvil, preAnvil)
if (registeredListener.plugin != plugin) continue
preAnvil.add(registeredListener)
}
postAnvil.addAll(postAnvilEvents())
// get required PrepareAnvilEvent listener // get required PrepareAnvilEvent listener
for (listener in preAnvil) { for (listener in preAnvil) {
@ -28,10 +22,22 @@ abstract class GenericPluginDependency(protected val plugin: Plugin) {
for (listener in postAnvil) { for (listener in postAnvil) {
InventoryClickEvent.getHandlerList().unregister(listener) InventoryClickEvent.getHandlerList().unregister(listener)
} }
} }
protected abstract fun postAnvilEvents(): Collection<RegisteredListener> open fun fillPreAnvil(preAnvil: ArrayList<RegisteredListener>){
// get PreAnvil and PostAnvil listeners
for (registeredListener in PrepareAnvilEvent.getHandlerList().registeredListeners) {
if (registeredListener.plugin != plugin) continue
preAnvil.add(registeredListener)
}
}
protected open fun fillPostAnvil(
postAnvil: ArrayList<RegisteredListener>,
preAnvil: ArrayList<RegisteredListener>) {
}
open fun testPrepareAnvil(event: PrepareAnvilEvent): Boolean { open fun testPrepareAnvil(event: PrepareAnvilEvent): Boolean {
val previousResult = event.result val previousResult = event.result

View file

@ -11,7 +11,7 @@ import java.lang.reflect.Method
class ToolStatsDependency(plugin: Plugin) : GenericPluginDependency(plugin) { class ToolStatsDependency(plugin: Plugin) : GenericPluginDependency(plugin) {
// Sadly, getTokens function is private, so I need to do that // Sadly, getTokens function is private, so I need to do some reflectino
private val getTokenMethod: Method = private val getTokenMethod: Method =
ItemChecker::class.java.getDeclaredMethod("getTokens", ItemStack::class.java); ItemChecker::class.java.getDeclaredMethod("getTokens", ItemStack::class.java);
@ -19,10 +19,6 @@ class ToolStatsDependency(plugin: Plugin) : GenericPluginDependency(plugin) {
getTokenMethod.trySetAccessible() getTokenMethod.trySetAccessible()
} }
override fun postAnvilEvents(): Collection<RegisteredListener> {
return listOf()
}
private fun ItemChecker.getTokenSafe(item: ItemStack?): Array<String> { private fun ItemChecker.getTokenSafe(item: ItemStack?): Array<String> {
if (item == null) return arrayOf() if (item == null) return arrayOf()
return getTokenMethod.invoke(this, item) as Array<String> return getTokenMethod.invoke(this, item) as Array<String>