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
This commit is contained in:
emanondev 2021-08-10 23:19:18 +02:00 committed by GitHub
parent 264c0e2c78
commit cd937a812d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 23 additions and 3 deletions

View File

@ -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);
}
}
}

View File

@ -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;
}
@ -264,6 +264,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) {
if (ItemUtils.isDiamondTool(inHand) || ItemUtils.isDiamondArmor(inHand)) {