diff --git a/libs/toolstats-1.9.6-stripped.jar b/libs/toolstats-1.9.6-stripped.jar new file mode 100644 index 0000000..eb17393 Binary files /dev/null and b/libs/toolstats-1.9.6-stripped.jar differ diff --git a/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/DependencyManager.kt b/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/DependencyManager.kt index ef1e328..5fc28a5 100644 --- a/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/DependencyManager.kt +++ b/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/DependencyManager.kt @@ -84,11 +84,12 @@ object DependencyManager { } // "Generic" dependencies + if (pluginManager.isPluginEnabled("ToolStats")) + genericDependencies.add(ToolStatsDependency(pluginManager.getPlugin("ToolStats")!!)) - - for (dependency in genericDependencies) { + for (dependency in genericDependencies) dependency.redirectListeners() - } + } fun handleCompatibilityConfig() { diff --git a/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/plugins/ToolStatsDependency.kt b/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/plugins/ToolStatsDependency.kt new file mode 100644 index 0000000..4179827 --- /dev/null +++ b/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/plugins/ToolStatsDependency.kt @@ -0,0 +1,35 @@ +package xyz.alexcrea.cuanvil.dependency.plugins + +import lol.hyper.toolstats.tools.ItemChecker +import org.bukkit.event.inventory.InventoryClickEvent +import org.bukkit.inventory.ItemStack +import org.bukkit.plugin.Plugin +import org.bukkit.plugin.RegisteredListener +import xyz.alexcrea.cuanvil.listener.PrepareAnvilListener +import java.lang.reflect.Method + +class ToolStatsDependency(plugin: Plugin) : GenericPluginDependency(plugin) { + + // Sadly, getTokens function is private, so I need to do that + private val getTokenMethod: Method = + ItemChecker::class.java.getDeclaredMethod("getTokens", ItemStack::class.java); + + init { + getTokenMethod.trySetAccessible() + } + + override fun postAnvilEvents(): Collection { + return listOf() + } + + override fun testAnvilResult(event: InventoryClickEvent): Boolean { + // Check if token changes from left with result + val left = event.inventory.getItem(PrepareAnvilListener.ANVIL_INPUT_LEFT) + val result = event.inventory.getItem(PrepareAnvilListener.ANVIL_OUTPUT_SLOT) + + val leftTokens = getTokenMethod.invoke(left) as Array + val resultToken = getTokenMethod.invoke(result) as Array + + return !leftTokens.contentDeepEquals(resultToken); + } +}