From cd937a812d38158903ab57055bf27769e462e193 Mon Sep 17 00:00:00 2001 From: emanondev <38587650+emanondev@users.noreply.github.com> Date: Tue, 10 Aug 2021 23:19:18 +0200 Subject: [PATCH] Fix for impact armor damage formula (#4425) * Update SkillUtils.java Add handleArmorDurabilityChange() to handle armor damage reduction correctly * Update AxesManager.java Changed method to handle impact damage calculation * Update SkillUtils.java --- .../nossr50/skills/axes/AxesManager.java | 2 +- .../gmail/nossr50/util/skills/SkillUtils.java | 24 +++++++++++++++++-- 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/gmail/nossr50/skills/axes/AxesManager.java b/src/main/java/com/gmail/nossr50/skills/axes/AxesManager.java index 6f2bbe08c..8f28f6ac8 100644 --- a/src/main/java/com/gmail/nossr50/skills/axes/AxesManager.java +++ b/src/main/java/com/gmail/nossr50/skills/axes/AxesManager.java @@ -120,7 +120,7 @@ public class AxesManager extends SkillManager { for (ItemStack armor : target.getEquipment().getArmorContents()) { if (armor != null && ItemUtils.isArmor(armor)) { if (RandomChanceUtil.isActivationSuccessful(SkillActivationType.RANDOM_STATIC_CHANCE, SubSkillType.AXES_ARMOR_IMPACT, getPlayer())) { - SkillUtils.handleDurabilityChange(armor, durabilityDamage, 1); + SkillUtils.handleArmorDurabilityChange(armor, durabilityDamage, 1); } } } diff --git a/src/main/java/com/gmail/nossr50/util/skills/SkillUtils.java b/src/main/java/com/gmail/nossr50/util/skills/SkillUtils.java index cdff05e8f..9c9e962c5 100644 --- a/src/main/java/com/gmail/nossr50/util/skills/SkillUtils.java +++ b/src/main/java/com/gmail/nossr50/util/skills/SkillUtils.java @@ -236,14 +236,14 @@ public final class SkillUtils { } /** - * Modify the durability of an ItemStack. + * Modify the durability of an ItemStack, using Tools specific formula for unbreaking enchant damage reduction * * @param itemStack The ItemStack which durability should be modified * @param durabilityModifier the amount to modify the durability by * @param maxDamageModifier the amount to adjust the max damage by */ public static void handleDurabilityChange(ItemStack itemStack, double durabilityModifier, double maxDamageModifier) { - if(itemStack.getItemMeta() != null && itemStack.getItemMeta().isUnbreakable()) { + if(itemStack.hasItemMeta() && itemStack.getItemMeta().isUnbreakable()) { return; } @@ -263,6 +263,26 @@ public final class SkillUtils { return false; } + + + /** + * Modify the durability of an ItemStack, using Armor specific formula for unbreaking enchant damage reduction + * + * @param itemStack The ItemStack which durability should be modified + * @param durabilityModifier the amount to modify the durability by + * @param maxDamageModifier the amount to adjust the max damage by + */ + public static void handleArmorDurabilityChange(ItemStack itemStack, double durabilityModifier, double maxDamageModifier) { + if(itemStack.hasItemMeta() && itemStack.getItemMeta().isUnbreakable()) { + return; + } + + Material type = itemStack.getType(); + short maxDurability = mcMMO.getRepairableManager().isRepairable(type) ? mcMMO.getRepairableManager().getRepairable(type).getMaximumDurability() : type.getMaxDurability(); + durabilityModifier = (int) Math.min(durabilityModifier * (0.6 + 0.4/ (itemStack.getEnchantmentLevel(Enchantment.DURABILITY) + 1)), maxDurability * maxDamageModifier); + + itemStack.setDurability((short) Math.min(itemStack.getDurability() + durabilityModifier, maxDurability)); + } @Nullable public static Material getRepairAndSalvageItem(@NotNull ItemStack inHand) {