mirror of
https://github.com/alexcrea/CustomAnvil.git
synced 2026-06-24 00:26:16 +02:00
Fix some issue with ExcellentEnchants:
Fix charge not working. Fix fatigue curse probably not working.
This commit is contained in:
parent
ffb9b4d756
commit
2dac556989
3 changed files with 93 additions and 5 deletions
|
|
@ -57,7 +57,8 @@ object DependencyManager {
|
|||
|
||||
// Excellent Enchants dependency
|
||||
if(pluginManager.isPluginEnabled("ExcellentEnchants")){
|
||||
excellentEnchantsCompatibility = ExcellentEnchantsDependency(pluginManager.getPlugin("ExcellentEnchants")!!)
|
||||
excellentEnchantsCompatibility = ExcellentEnchantsDependency()
|
||||
excellentEnchantsCompatibility!!.redirectListeners()
|
||||
}
|
||||
|
||||
// Disenchantment dependency
|
||||
|
|
@ -92,8 +93,11 @@ object DependencyManager {
|
|||
fun tryEventPreAnvilBypass(event: PrepareAnvilEvent): Boolean {
|
||||
var bypass = false
|
||||
|
||||
// Test if disenchantment used special prepare anvil
|
||||
if(disenchantmentCompatibility?.testPrepareAnvil(event) == true) bypass = true
|
||||
|
||||
// Test excellent enchantments used special prepare anvil
|
||||
if(!bypass && (excellentEnchantsCompatibility?.testPrepareAnvil(event) == true)) bypass = true
|
||||
|
||||
// Test if the inventory is a gui(version specific)
|
||||
if(!bypass && (externGuiTester?.testIfGui(event.view) == true)) bypass = true
|
||||
|
|
@ -104,8 +108,12 @@ object DependencyManager {
|
|||
fun tryClickAnvilResultBypass(event: InventoryClickEvent, inventory: AnvilInventory): Boolean {
|
||||
var bypass = false
|
||||
|
||||
// Test if disenchantment used special event click
|
||||
if(disenchantmentCompatibility?.testAnvilResult(event, inventory) == true) bypass = true
|
||||
|
||||
// Test if disenchantment used special event click
|
||||
if(!bypass && (excellentEnchantsCompatibility?.testAnvilResult(event) == true)) bypass = true
|
||||
|
||||
// Test if the inventory is a gui(version specific)
|
||||
if(!bypass && (externGuiTester?.testIfGui(event.view) == true)) bypass = true
|
||||
|
||||
|
|
|
|||
|
|
@ -26,7 +26,6 @@ class DisenchantmentDependency {
|
|||
private lateinit var itemClickEvent: DisenchantClickEvent
|
||||
|
||||
fun redirectListeners() {
|
||||
|
||||
val toUnregister = ArrayList<RegisteredListener>()
|
||||
// get required PrepareAnvilEvent listener
|
||||
for (registeredListener in PrepareAnvilEvent.getHandlerList().registeredListeners) {
|
||||
|
|
|
|||
|
|
@ -1,12 +1,19 @@
|
|||
package xyz.alexcrea.cuanvil.dependency
|
||||
|
||||
import io.delilaheve.CustomAnvil
|
||||
import org.bukkit.plugin.Plugin
|
||||
import org.bukkit.Material
|
||||
import org.bukkit.event.inventory.InventoryClickEvent
|
||||
import org.bukkit.event.inventory.PrepareAnvilEvent
|
||||
import org.bukkit.inventory.ItemStack
|
||||
import org.bukkit.plugin.RegisteredListener
|
||||
import su.nightexpress.excellentenchants.enchantment.impl.universal.CurseOfFragilityEnchant
|
||||
import su.nightexpress.excellentenchants.enchantment.listener.AnvilListener
|
||||
import su.nightexpress.excellentenchants.registry.EnchantRegistry
|
||||
import xyz.alexcrea.cuanvil.api.EnchantmentApi
|
||||
import xyz.alexcrea.cuanvil.enchant.wrapped.CAEEEnchantment
|
||||
import java.lang.reflect.Method
|
||||
|
||||
class ExcellentEnchantsDependency(private val excellentEnchantsPlugin: Plugin){
|
||||
class ExcellentEnchantsDependency {
|
||||
|
||||
init {
|
||||
CustomAnvil.instance.logger.info("Excellent Enchants Detected !")
|
||||
|
|
@ -20,7 +27,81 @@ class ExcellentEnchantsDependency(private val excellentEnchantsPlugin: Plugin){
|
|||
EnchantmentApi.registerEnchantment(CAEEEnchantment(enchantment))
|
||||
}
|
||||
|
||||
CustomAnvil.instance.logger.info("\"Excellent Enchants should now work as expected !")
|
||||
CustomAnvil.instance.logger.info("Excellent Enchants should now work as expected !")
|
||||
}
|
||||
|
||||
private lateinit var fragilityCurse: CurseOfFragilityEnchant
|
||||
|
||||
private lateinit var anvilListener: AnvilListener
|
||||
private lateinit var handleRechargeMethod: Method
|
||||
private lateinit var handleCombineMethod: Method
|
||||
|
||||
fun redirectListeners() {
|
||||
val toUnregister = ArrayList<RegisteredListener>()
|
||||
// get required PrepareAnvilEvent listener
|
||||
for (registeredListener in PrepareAnvilEvent.getHandlerList().registeredListeners) {
|
||||
val listener = registeredListener.listener
|
||||
|
||||
if(listener is CurseOfFragilityEnchant){
|
||||
this.fragilityCurse = listener
|
||||
toUnregister.add(registeredListener)
|
||||
}
|
||||
|
||||
if(listener is AnvilListener){
|
||||
this.anvilListener = listener;
|
||||
toUnregister.add(registeredListener)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
for (listener in toUnregister) {
|
||||
PrepareAnvilEvent.getHandlerList().unregister(listener)
|
||||
|
||||
}
|
||||
|
||||
// Unregister inventory click event
|
||||
InventoryClickEvent.getHandlerList().unregister(this.anvilListener)
|
||||
|
||||
findAnvilFunctions()
|
||||
}
|
||||
|
||||
private fun findAnvilFunctions() {
|
||||
this.handleRechargeMethod = AnvilListener::class.java.getDeclaredMethod("handleRecharge",
|
||||
PrepareAnvilEvent::class.java, ItemStack::class.java, ItemStack::class.java)
|
||||
this.handleRechargeMethod.setAccessible(true)
|
||||
|
||||
this.handleCombineMethod = AnvilListener::class.java.getDeclaredMethod("handleCombine",
|
||||
PrepareAnvilEvent::class.java, ItemStack::class.java, ItemStack::class.java, ItemStack::class.java)
|
||||
this.handleCombineMethod.setAccessible(true)
|
||||
|
||||
}
|
||||
|
||||
fun testPrepareAnvil(event: PrepareAnvilEvent): Boolean {
|
||||
if(event.result != null){
|
||||
this.fragilityCurse.onItemAnvil(event)
|
||||
if(event.result == null) return true
|
||||
}
|
||||
|
||||
var first: ItemStack? = event.inventory.getItem(0)
|
||||
var second: ItemStack? = event.inventory.getItem(1)
|
||||
var result = event.result
|
||||
|
||||
if (first == null) first = ItemStack(Material.AIR)
|
||||
if (second == null) second = ItemStack(Material.AIR)
|
||||
if (result == null) result = ItemStack(Material.AIR)
|
||||
|
||||
if(handleRechargeMethod.invoke(this.anvilListener, event, first, second) as Boolean) return true
|
||||
return handleCombineMethod.invoke(this.anvilListener, event, first, second, result) as Boolean
|
||||
}
|
||||
|
||||
fun testAnvilResult(event: InventoryClickEvent): Any {
|
||||
if(event.inventory.getItem(2) != null){
|
||||
this.anvilListener.onClickAnvil(event)
|
||||
return event.inventory.getItem(2) == null
|
||||
}
|
||||
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue