fix/disenchantment-gui (#87)

fix disenchantment gui not working
This commit is contained in:
alexcrea 2025-08-16 14:38:39 +02:00 committed by GitHub
commit e6ff0a5e5f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 28 additions and 6 deletions

View file

@ -18,7 +18,7 @@ plugins {
} }
group = "xyz.alexcrea" group = "xyz.alexcrea"
version = "1.14.0" version = "1.14.1"
val effectiveVersion = "$version" + val effectiveVersion = "$version" +
(if (System.getenv("SMALL_COMMIT_HASH") != null) "-dev-${System.getenv("SMALL_COMMIT_HASH")!!}" else "") (if (System.getenv("SMALL_COMMIT_HASH") != null) "-dev-${System.getenv("SMALL_COMMIT_HASH")!!}" else "")

View file

@ -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
} }