Update disenchantment

also version up
This commit is contained in:
alexcrea 2025-03-10 23:17:37 +01:00
parent 335bca0335
commit 393653bac6
No known key found for this signature in database
GPG key ID: 43FD265DB0DBF91F
5 changed files with 10 additions and 57 deletions

View file

@ -64,7 +64,7 @@ Officially supported but still experimental. use ExcellentEnchants item type.
Here is a list of supported anvil mechanic plugins with support status: Here is a list of supported anvil mechanic plugins with support status:
- [Disenchantment](https://www.spigotmc.org/resources/disenchantment-1-21-1-1-20-6-new-book-splitting-mechanics.110741/) - [Disenchantment](https://www.spigotmc.org/resources/disenchantment-1-21-1-1-20-6-new-book-splitting-mechanics.110741/)
Officially supported by Custom Anvil but still experimental. Mostly use Custom Anvil basic XP settings. (version >= 6.1.0) Officially supported by Custom Anvil but still experimental. Mostly use Custom Anvil basic XP settings. (version >= 6.1.5)
- [HavenBags](https://www.spigotmc.org/resources/havenbags-shulker-like-player-bound-bags-1-17-1-21-4.110420/) - [HavenBags](https://www.spigotmc.org/resources/havenbags-shulker-like-player-bound-bags-1-17-1-21-4.110420/)
Officially supported by Custom Anvil. Not really enchantment related but CustomAnvil should not impact bag upgrade and skin via anvil. (version >= 1.31.0) Officially supported by Custom Anvil. Not really enchantment related but CustomAnvil should not impact bag upgrade and skin via anvil. (version >= 1.31.0)

View file

@ -16,7 +16,7 @@ plugins {
} }
group = "xyz.alexcrea" group = "xyz.alexcrea"
version = "1.8.3" version = "1.9.0"
repositories { repositories {
// EcoEnchants // EcoEnchants
@ -47,7 +47,7 @@ dependencies {
compileOnly(files("libs/ExcellentEnchants 4.1.0-striped.jar")) // For legacy excellent enchants compileOnly(files("libs/ExcellentEnchants 4.1.0-striped.jar")) // For legacy excellent enchants
// Disenchantment // Disenchantment
compileOnly(files("libs/Disenchantment-6.1.0.jar")) compileOnly(files("libs/Disenchantment-6.1.5.jar"))
// HavenBags // HavenBags
compileOnly(files("libs/HavenBags-1.31.0.1760.jar")) compileOnly(files("libs/HavenBags-1.31.0.1760.jar"))

Binary file not shown.

Binary file not shown.

View file

@ -1,5 +1,6 @@
package xyz.alexcrea.cuanvil.dependency package xyz.alexcrea.cuanvil.dependency
import com.jankominek.disenchantment.Disenchantment
import com.jankominek.disenchantment.events.DisenchantClickEvent 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
@ -10,7 +11,6 @@ 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 org.bukkit.plugin.RegisteredListener
import xyz.alexcrea.cuanvil.listener.PrepareAnvilListener import xyz.alexcrea.cuanvil.listener.PrepareAnvilListener
import xyz.alexcrea.cuanvil.util.AnvilXpUtil import xyz.alexcrea.cuanvil.util.AnvilXpUtil
@ -20,55 +20,9 @@ class DisenchantmentDependency {
CustomAnvil.instance.logger.info("Disenchantment Detected !") CustomAnvil.instance.logger.info("Disenchantment Detected !")
} }
private lateinit var splitEvent: ShatterEvent
private lateinit var itemEvent: DisenchantEvent
private lateinit var splitBookClickEvent: ShatterClickEvent
private lateinit var itemClickEvent: DisenchantClickEvent
fun redirectListeners() { fun redirectListeners() {
val toUnregister = ArrayList<RegisteredListener>() PrepareAnvilEvent.getHandlerList().unregister(Disenchantment.plugin)
// get required PrepareAnvilEvent listener InventoryClickEvent.getHandlerList().unregister(Disenchantment.plugin)
for (registeredListener in PrepareAnvilEvent.getHandlerList().registeredListeners) {
val listener = registeredListener.listener
if(listener is ShatterEvent){
this.splitEvent = listener
toUnregister.add(registeredListener)
}
if(listener is DisenchantEvent){
itemEvent = listener
toUnregister.add(registeredListener)
}
}
for (listener in toUnregister) {
PrepareAnvilEvent.getHandlerList().unregister(listener)
}
toUnregister.clear()
// get required InventoryClickEvent listener
for (registeredListener in InventoryClickEvent.getHandlerList().registeredListeners) {
val listener = registeredListener.listener
if(listener is ShatterClickEvent){
splitBookClickEvent = listener
toUnregister.add(registeredListener)
}
if(listener is DisenchantClickEvent){
itemClickEvent = listener
toUnregister.add(registeredListener)
}
}
for (listener in toUnregister) {
InventoryClickEvent.getHandlerList().unregister(listener)
}
} }
fun testPrepareAnvil(event: PrepareAnvilEvent, player: HumanEntity): Boolean { fun testPrepareAnvil(event: PrepareAnvilEvent, player: HumanEntity): Boolean {
@ -76,15 +30,14 @@ class DisenchantmentDependency {
event.result = null event.result = null
// Test if event change the result // Test if event change the result
itemEvent.onDisenchantmentEvent(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
} }
splitEvent.onDisenchantmentEvent(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)
@ -99,13 +52,13 @@ class DisenchantmentDependency {
val previousResultSlot = inventory.getItem(PrepareAnvilListener.ANVIL_OUTPUT_SLOT)?.clone() val previousResultSlot = inventory.getItem(PrepareAnvilListener.ANVIL_OUTPUT_SLOT)?.clone()
// Test event if change the result // Test event if change the result
itemClickEvent.onDisenchantmentClickEvent(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
} }
splitBookClickEvent.onDisenchantmentClickEvent(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