From 16e4f0a9239585d23e21479513c57d62495c8e32 Mon Sep 17 00:00:00 2001 From: alexcrea Date: Wed, 8 Jul 2026 04:22:59 +0200 Subject: [PATCH] fix using durability for max damage --- .../cuanvil/util/MaxDamageCheckerUtil.kt | 5 ++- .../kotlin/io/delilaheve/util/ItemUtil.kt | 37 +++++++++---------- 2 files changed, 21 insertions(+), 21 deletions(-) diff --git a/nms/v1_20R4/src/main/kotlin/xyz/alexcrea/cuanvil/util/MaxDamageCheckerUtil.kt b/nms/v1_20R4/src/main/kotlin/xyz/alexcrea/cuanvil/util/MaxDamageCheckerUtil.kt index b3ce0ff6..a05d9425 100644 --- a/nms/v1_20R4/src/main/kotlin/xyz/alexcrea/cuanvil/util/MaxDamageCheckerUtil.kt +++ b/nms/v1_20R4/src/main/kotlin/xyz/alexcrea/cuanvil/util/MaxDamageCheckerUtil.kt @@ -1,5 +1,6 @@ package xyz.alexcrea.cuanvil.util +import org.bukkit.Material import org.bukkit.inventory.meta.Damageable // I LOVE support of old versions and needing to do modules like that @@ -10,8 +11,8 @@ object MaxDamageCheckerUtil { /** * @return max damage or int max if not set */ - fun getMaxDamage(meta: Damageable): Int { - if(!meta.hasMaxDamage()) return Integer.MAX_VALUE + fun getMaxDamage(type: Material, meta: Damageable): Int { + if(!meta.hasMaxDamage()) return type.maxDurability.toInt() return meta.maxDamage } diff --git a/src/main/kotlin/io/delilaheve/util/ItemUtil.kt b/src/main/kotlin/io/delilaheve/util/ItemUtil.kt index bf075231..02c8475e 100644 --- a/src/main/kotlin/io/delilaheve/util/ItemUtil.kt +++ b/src/main/kotlin/io/delilaheve/util/ItemUtil.kt @@ -1,9 +1,9 @@ package io.delilaheve.util +import org.bukkit.Material import org.bukkit.Material.ENCHANTED_BOOK import org.bukkit.inventory.ItemStack import org.bukkit.inventory.meta.Damageable -import xyz.alexcrea.cuanvil.enchant.CAEnchantment import xyz.alexcrea.cuanvil.update.UpdateUtils import xyz.alexcrea.cuanvil.util.MaterialUtil.customType import xyz.alexcrea.cuanvil.util.MaxDamageCheckerUtil @@ -21,11 +21,11 @@ object ItemUtil { */ fun ItemStack.isEnchantedBook() = type == ENCHANTED_BOOK - private fun maxDamage(damageable: Damageable): Int { + private fun maxDamage(type: Material, damageable: Damageable): Int { val ver = UpdateUtils.currentMinecraftVersion() - if(ver.major <= 1 && ver.minor <= 20 && ver.patch < 5) return Integer.MAX_VALUE + if(ver.major <= 1 && ver.minor <= 20 && ver.patch < 5) return type.maxDurability.toInt() - return MaxDamageCheckerUtil.getMaxDamage(damageable) + return MaxDamageCheckerUtil.getMaxDamage(type, damageable) } /** @@ -37,23 +37,22 @@ object ItemUtil { first: ItemStack, second: ItemStack ): Boolean { - (itemMeta as? Damageable)?.let { - val durability = type.maxDurability.toInt() - val firstDamage = (first.itemMeta as? Damageable)?.damage ?: 0 - if (firstDamage == 0) return false + val meta = itemMeta + if(meta !is Damageable) return false - val firstDurability = durability - firstDamage - val secondDamage = (second.itemMeta as? Damageable)?.damage ?: 0 - val secondDurability = durability - secondDamage - val combinedDurability = firstDurability + secondDurability - val newDurability = min(combinedDurability, durability) + val maxDamage = maxDamage(type, meta) + val damage = (first.itemMeta as? Damageable)?.damage ?: 0 + if (damage == 0) return false - val maxDamage = maxDamage(it) - it.damage = min(durability - newDurability, maxDamage) - itemMeta = it - return true - } - return false + val firstDurability = maxDamage - damage + val secondDamage = (second.itemMeta as? Damageable)?.damage ?: 0 + val secondDurability = maxDamage - secondDamage + val combinedDurability = firstDurability + secondDurability + val newDurability = min(combinedDurability, maxDamage) + + meta.damage = min(maxDamage - newDurability, maxDamage) + this.itemMeta = meta + return true } fun ItemStack.unitRepair(