made early bypass

This commit is contained in:
alexcrea 2025-05-02 12:46:19 +02:00
parent 8f408438dc
commit 368b4b2c84
No known key found for this signature in database
GPG key ID: 027DD67D2D3280C5
2 changed files with 32 additions and 4 deletions

View file

@ -102,6 +102,35 @@ object DependencyManager {
// Then handle plugin reload // Then handle plugin reload
ecoEnchantCompatibility?.handleConfigReload() ecoEnchantCompatibility?.handleConfigReload()
} }
// Return true if should bypass (either by a dependency or error)
// called before immutability test
fun earlyTryEventPreAnvilBypass(event: PrepareAnvilEvent, player: HumanEntity): Boolean {
try {
return earlyUnsafeTryEventPreAnvilBypass(event, player)
} catch (e: Exception) {
CustomAnvil.instance.logger.log(
Level.SEVERE,
"Error while trying to handle custom anvil supported plugin: ",
e
)
// Just in case to avoid illegal items
event.inventory.setItem(ANVIL_OUTPUT_SLOT, null)
// Finally, warn the player, maybe a lot of time but better warn than do nothing
event.view.player.sendMessage(ChatColor.RED.toString() + "Error while handling the anvil.")
return true
}
}
private fun earlyUnsafeTryEventPreAnvilBypass(event: PrepareAnvilEvent, player: HumanEntity): Boolean {
var bypass = false
// Test if the inventory is a gui(version specific)
if (externGuiTester?.testIfGui(event.view) == true) bypass = true
return bypass
}
// Return true if should bypass (either by a dependency or error) // Return true if should bypass (either by a dependency or error)
fun tryEventPreAnvilBypass(event: PrepareAnvilEvent, player: HumanEntity): Boolean { fun tryEventPreAnvilBypass(event: PrepareAnvilEvent, player: HumanEntity): Boolean {
@ -135,10 +164,6 @@ object DependencyManager {
// Test excellent enchantments used prepare anvil // Test excellent enchantments used prepare anvil
if (!bypass && (excellentEnchantsCompatibility?.testPrepareAnvil(event) == true)) bypass = true 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
return bypass return bypass
} }

View file

@ -47,6 +47,9 @@ class PrepareAnvilListener : Listener {
// Should find player // Should find player
val player: HumanEntity = InventoryViewUtil.getInstance().getPlayer(event.view) val player: HumanEntity = InventoryViewUtil.getInstance().getPlayer(event.view)
// Test if custom anvil is bypassed before immutability test
if (DependencyManager.earlyTryEventPreAnvilBypass(event, player)) return
val inventory = event.inventory val inventory = event.inventory
val first = inventory.getItem(ANVIL_INPUT_LEFT) ?: return val first = inventory.getItem(ANVIL_INPUT_LEFT) ?: return
val second = inventory.getItem(ANVIL_INPUT_RIGHT) val second = inventory.getItem(ANVIL_INPUT_RIGHT)