mirror of
https://github.com/alexcrea/CustomAnvil.git
synced 2026-06-23 16:16:17 +02:00
fix disenchantment gui being broken
This commit is contained in:
parent
54801a07e6
commit
aa86030f01
1 changed files with 27 additions and 5 deletions
|
|
@ -5,14 +5,18 @@ import com.jankominek.disenchantment.events.DisenchantClickEvent
|
||||||
import com.jankominek.disenchantment.events.DisenchantEvent
|
import com.jankominek.disenchantment.events.DisenchantEvent
|
||||||
import com.jankominek.disenchantment.events.ShatterClickEvent
|
import com.jankominek.disenchantment.events.ShatterClickEvent
|
||||||
import com.jankominek.disenchantment.events.ShatterEvent
|
import com.jankominek.disenchantment.events.ShatterEvent
|
||||||
|
import com.jankominek.disenchantment.listeners.ShatterClickListener
|
||||||
import io.delilaheve.CustomAnvil
|
import io.delilaheve.CustomAnvil
|
||||||
import org.bukkit.entity.HumanEntity
|
import org.bukkit.entity.HumanEntity
|
||||||
|
import org.bukkit.event.Listener
|
||||||
import org.bukkit.event.inventory.InventoryClickEvent
|
import org.bukkit.event.inventory.InventoryClickEvent
|
||||||
import org.bukkit.event.inventory.PrepareAnvilEvent
|
import org.bukkit.event.inventory.PrepareAnvilEvent
|
||||||
import org.bukkit.inventory.AnvilInventory
|
import org.bukkit.inventory.AnvilInventory
|
||||||
import org.bukkit.inventory.ItemStack
|
import org.bukkit.inventory.ItemStack
|
||||||
import xyz.alexcrea.cuanvil.listener.PrepareAnvilListener
|
import xyz.alexcrea.cuanvil.listener.PrepareAnvilListener
|
||||||
import xyz.alexcrea.cuanvil.util.AnvilXpUtil
|
import xyz.alexcrea.cuanvil.util.AnvilXpUtil
|
||||||
|
import java.util.logging.Level
|
||||||
|
import kotlin.reflect.KClass
|
||||||
|
|
||||||
class DisenchantmentDependency {
|
class DisenchantmentDependency {
|
||||||
|
|
||||||
|
|
@ -22,7 +26,25 @@ class DisenchantmentDependency {
|
||||||
|
|
||||||
fun redirectListeners() {
|
fun redirectListeners() {
|
||||||
PrepareAnvilEvent.getHandlerList().unregister(Disenchantment.plugin)
|
PrepareAnvilEvent.getHandlerList().unregister(Disenchantment.plugin)
|
||||||
InventoryClickEvent.getHandlerList().unregister(Disenchantment.plugin)
|
|
||||||
|
// unregister only the feature click event and not all
|
||||||
|
// This is to avoid the disenchantment gui breaking
|
||||||
|
try {
|
||||||
|
unregisterStaticDisenchantmentListener(ShatterClickListener::class)
|
||||||
|
unregisterStaticDisenchantmentListener(InventoryClickEvent::class)
|
||||||
|
} catch (e: Exception) {
|
||||||
|
CustomAnvil.instance.logger.log(
|
||||||
|
Level.SEVERE, "Could not initialize disenchantment support" +
|
||||||
|
"please report this bug to the developer", e
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun unregisterStaticDisenchantmentListener(clazz: KClass<*>) {
|
||||||
|
val field = clazz.java.getDeclaredField("listener")
|
||||||
|
field.isAccessible = true
|
||||||
|
val listener: Listener = field.get(null) as Listener
|
||||||
|
InventoryClickEvent.getHandlerList().unregister(listener)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun testPrepareAnvil(event: PrepareAnvilEvent, player: HumanEntity): Boolean {
|
fun testPrepareAnvil(event: PrepareAnvilEvent, player: HumanEntity): Boolean {
|
||||||
|
|
@ -31,14 +53,14 @@ class DisenchantmentDependency {
|
||||||
|
|
||||||
// Test if event change the result
|
// Test if event change the result
|
||||||
DisenchantEvent.onEvent(event)
|
DisenchantEvent.onEvent(event)
|
||||||
if(event.result != null) {
|
if (event.result != null) {
|
||||||
CustomAnvil.log("Detected pre anvil item extract bypass.")
|
CustomAnvil.log("Detected pre anvil item extract bypass.")
|
||||||
AnvilXpUtil.setAnvilInvXp(event.inventory, event.view, player, event.inventory.repairCost)
|
AnvilXpUtil.setAnvilInvXp(event.inventory, event.view, player, event.inventory.repairCost)
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
ShatterEvent.onEvent(event)
|
ShatterEvent.onEvent(event)
|
||||||
if(event.result != null) {
|
if (event.result != null) {
|
||||||
CustomAnvil.log("Detected pre anvil split enchant bypass.")
|
CustomAnvil.log("Detected pre anvil split enchant bypass.")
|
||||||
AnvilXpUtil.setAnvilInvXp(event.inventory, event.view, player, event.inventory.repairCost)
|
AnvilXpUtil.setAnvilInvXp(event.inventory, event.view, player, event.inventory.repairCost)
|
||||||
return true
|
return true
|
||||||
|
|
@ -53,13 +75,13 @@ class DisenchantmentDependency {
|
||||||
|
|
||||||
// Test event if change the result
|
// Test event if change the result
|
||||||
DisenchantClickEvent.onEvent(event)
|
DisenchantClickEvent.onEvent(event)
|
||||||
if(!testAnvilInventoryChange(inventory, previousResultSlot) || event.isCancelled) {
|
if (!testAnvilInventoryChange(inventory, previousResultSlot) || event.isCancelled) {
|
||||||
CustomAnvil.log("Detected anvil click item extract bypass.")
|
CustomAnvil.log("Detected anvil click item extract bypass.")
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
ShatterClickEvent.onEvent(event)
|
ShatterClickEvent.onEvent(event)
|
||||||
if(!testAnvilInventoryChange(inventory, previousResultSlot) || event.isCancelled) {
|
if (!testAnvilInventoryChange(inventory, previousResultSlot) || event.isCancelled) {
|
||||||
CustomAnvil.log("Detected anvil click split enchant bypass.")
|
CustomAnvil.log("Detected anvil click split enchant bypass.")
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue