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 new file mode 100644 index 0000000..b3ce0ff --- /dev/null +++ b/nms/v1_20R4/src/main/kotlin/xyz/alexcrea/cuanvil/util/MaxDamageCheckerUtil.kt @@ -0,0 +1,18 @@ +package xyz.alexcrea.cuanvil.util + +import org.bukkit.inventory.meta.Damageable + +// I LOVE support of old versions and needing to do modules like that +// That truly is my favorite activity +// TODO clean this one of legacy removal branch +object MaxDamageCheckerUtil { + + /** + * @return max damage or int max if not set + */ + fun getMaxDamage(meta: Damageable): Int { + if(!meta.hasMaxDamage()) return Integer.MAX_VALUE + return meta.maxDamage + } + +} \ No newline at end of file diff --git a/src/main/kotlin/io/delilaheve/util/ItemUtil.kt b/src/main/kotlin/io/delilaheve/util/ItemUtil.kt index 414d37e..25698ad 100644 --- a/src/main/kotlin/io/delilaheve/util/ItemUtil.kt +++ b/src/main/kotlin/io/delilaheve/util/ItemUtil.kt @@ -4,7 +4,9 @@ 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 import kotlin.math.ceil import kotlin.math.max import kotlin.math.min @@ -36,6 +38,13 @@ object ItemUtil { } + private fun maxDamage(damageable: Damageable): Int { + val ver = UpdateUtils.currentMinecraftVersion() + if(ver.major <= 1 && ver.minor <= 20 && ver.patch < 5) return Integer.MAX_VALUE + + return MaxDamageCheckerUtil.getMaxDamage(damageable) + } + /** * Set this [ItemStack]s durability from a combination of the * [first] and [second] item's durability values @@ -55,7 +64,9 @@ object ItemUtil { val secondDurability = durability - secondDamage val combinedDurability = firstDurability + secondDurability val newDurability = min(combinedDurability, durability) - it.damage = durability - newDurability + + val maxDamage = maxDamage(it) + it.damage = min(durability - newDurability, maxDamage) itemMeta = it return true }