From 9418e642ec1cd00a2d01ad3d8838b5c9460c68c3 Mon Sep 17 00:00:00 2001 From: Liam Thompson Date: Sat, 14 Mar 2026 18:03:11 +1000 Subject: [PATCH 1/4] Fixed Zanite tool buff and simplified buff calculations --- .../aetherii/item/equipment/ZaniteBuff.java | 7 +++-- .../equipment/tools/abilities/ZaniteTool.java | 20 ++----------- .../weapons/abilities/ZaniteWeapon.java | 29 +++---------------- .../weapons/zanite/ZaniteCrossbowItem.java | 2 +- 4 files changed, 13 insertions(+), 45 deletions(-) diff --git a/src/main/java/com/aetherteam/aetherii/item/equipment/ZaniteBuff.java b/src/main/java/com/aetherteam/aetherii/item/equipment/ZaniteBuff.java index a8953c4f63..6637c81933 100644 --- a/src/main/java/com/aetherteam/aetherii/item/equipment/ZaniteBuff.java +++ b/src/main/java/com/aetherteam/aetherii/item/equipment/ZaniteBuff.java @@ -3,7 +3,10 @@ import net.minecraft.world.item.ItemStack; public interface ZaniteBuff { - default double calculateZaniteBuff(ItemStack stack, double baseValue) { - return baseValue * (2.0 * ((double) stack.getDamageValue()) / ((double) stack.getMaxDamage()) + 0.5); + /// Added Multiplier buff (1 => + 100%, .5 => + 50%, etc.) + double buff = 1.0; + + default double calculateZaniteBuff(ItemStack stack) { + return buff * stack.getDamageValue() / (double) stack.getMaxDamage(); } } diff --git a/src/main/java/com/aetherteam/aetherii/item/equipment/tools/abilities/ZaniteTool.java b/src/main/java/com/aetherteam/aetherii/item/equipment/tools/abilities/ZaniteTool.java index 66ebc1ae9b..861c2aa20d 100644 --- a/src/main/java/com/aetherteam/aetherii/item/equipment/tools/abilities/ZaniteTool.java +++ b/src/main/java/com/aetherteam/aetherii/item/equipment/tools/abilities/ZaniteTool.java @@ -2,10 +2,8 @@ import com.aetherteam.aetherii.AetherII; import com.aetherteam.aetherii.item.equipment.ZaniteBuff; -import net.minecraft.core.Holder; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.entity.EquipmentSlotGroup; -import net.minecraft.world.entity.ai.attributes.Attribute; import net.minecraft.world.entity.ai.attributes.AttributeModifier; import net.minecraft.world.entity.ai.attributes.Attributes; import net.minecraft.world.item.ItemStack; @@ -13,19 +11,17 @@ import net.neoforged.neoforge.event.ItemAttributeModifierEvent; import java.util.List; -import java.util.concurrent.atomic.AtomicReference; public interface ZaniteTool extends ZaniteBuff { ResourceLocation MINING_EFFICIENCY_MODIFIER_ID = ResourceLocation.fromNamespaceAndPath(AetherII.MODID, "zanite_modified_mining_efficiency"); static void updateToolAttributes(ItemAttributeModifierEvent event) { ItemStack stack = event.getItemStack(); - ItemAttributeModifiers defaultModifiers = event.getDefaultModifiers(); List modifiers = event.getModifiers(); if (stack.getItem() instanceof ZaniteTool zaniteTool) { ItemAttributeModifiers.Entry updatedEntry = null; - ItemAttributeModifiers.Entry newEntry = zaniteTool.increaseSpeed(defaultModifiers, stack, 6.0F); + ItemAttributeModifiers.Entry newEntry = zaniteTool.increaseSpeed(stack); double newAmount = newEntry.modifier().amount(); boolean flag = true; for (ItemAttributeModifiers.Entry oldEntry : modifiers) { @@ -46,17 +42,7 @@ static void updateToolAttributes(ItemAttributeModifierEvent event) { } } - default ItemAttributeModifiers.Entry increaseSpeed(ItemAttributeModifiers modifiers, ItemStack stack, double baseValue) { - return new ItemAttributeModifiers.Entry(Attributes.MINING_EFFICIENCY, new AttributeModifier(MINING_EFFICIENCY_MODIFIER_ID, this.calculateSpeedIncrease(Attributes.MINING_EFFICIENCY, baseValue, MINING_EFFICIENCY_MODIFIER_ID, modifiers, stack), AttributeModifier.Operation.ADD_VALUE), EquipmentSlotGroup.MAINHAND); - } - - default double calculateSpeedIncrease(Holder base, double baseValue, ResourceLocation bonusModifier, ItemAttributeModifiers modifiers, ItemStack stack) { - AtomicReference baseStat = new AtomicReference<>(baseValue); - modifiers.forEach(EquipmentSlotGroup.MAINHAND, (attribute, modifier) -> { - if (attribute.value() == base.value() && !modifier.id().equals(bonusModifier)) { - baseStat.updateAndGet(v -> v + modifier.amount()); - } - }); - return this.calculateZaniteBuff(stack, baseStat.get()) - baseStat.get(); + default ItemAttributeModifiers.Entry increaseSpeed(ItemStack stack) { + return new ItemAttributeModifiers.Entry(Attributes.BLOCK_BREAK_SPEED, new AttributeModifier(MINING_EFFICIENCY_MODIFIER_ID, this.calculateZaniteBuff(stack), AttributeModifier.Operation.ADD_MULTIPLIED_TOTAL), EquipmentSlotGroup.MAINHAND); } } diff --git a/src/main/java/com/aetherteam/aetherii/item/equipment/weapons/abilities/ZaniteWeapon.java b/src/main/java/com/aetherteam/aetherii/item/equipment/weapons/abilities/ZaniteWeapon.java index 15c4eae406..6967ffbc43 100644 --- a/src/main/java/com/aetherteam/aetherii/item/equipment/weapons/abilities/ZaniteWeapon.java +++ b/src/main/java/com/aetherteam/aetherii/item/equipment/weapons/abilities/ZaniteWeapon.java @@ -14,7 +14,6 @@ import net.neoforged.neoforge.event.ItemAttributeModifierEvent; import java.util.*; -import java.util.concurrent.atomic.AtomicReference; public interface ZaniteWeapon extends ZaniteBuff { ResourceLocation DAMAGE_MODIFIER_ID = ResourceLocation.fromNamespaceAndPath(AetherII.MODID, "zanite_modified_attack_damage"); @@ -30,12 +29,11 @@ public interface ZaniteWeapon extends ZaniteBuff { static void updateWeaponAttributes(ItemAttributeModifierEvent event) { ItemStack stack = event.getItemStack(); - ItemAttributeModifiers defaultModifiers = event.getDefaultModifiers(); List modifiers = event.getModifiers(); if (stack.getItem() instanceof ZaniteWeapon zaniteWeapon) { Set updatedEntries = new HashSet<>(); - Set newEntries = new HashSet<>(zaniteWeapon.increaseDamage(zaniteWeapon.getDamageType(), defaultModifiers, stack)); + Set newEntries = new HashSet<>(zaniteWeapon.increaseDamage(zaniteWeapon.getDamageType(), stack)); for (ItemAttributeModifiers.Entry newEntry : newEntries) { boolean flag = true; for (ItemAttributeModifiers.Entry oldEntry : modifiers) { @@ -58,33 +56,14 @@ static void updateWeaponAttributes(ItemAttributeModifierEvent event) { } } - default List increaseDamage(Holder typeAttribute, ItemAttributeModifiers modifiers, ItemStack stack) { + default List increaseDamage(Holder typeAttribute, ItemStack stack) { List modifierEntryList = new ArrayList<>(); - modifierEntryList.add(new ItemAttributeModifiers.Entry(typeAttribute, new AttributeModifier(DAMAGE_TYPES.get(typeAttribute), this.calculateDamageIncrease(typeAttribute, DAMAGE_TYPES.get(typeAttribute), modifiers, stack), AttributeModifier.Operation.ADD_VALUE), EquipmentSlotGroup.MAINHAND)); - modifierEntryList.add(new ItemAttributeModifiers.Entry(Attributes.ATTACK_DAMAGE, new AttributeModifier(DAMAGE_MODIFIER_ID, this.calculateDamageIncrease(Attributes.ATTACK_DAMAGE, DAMAGE_MODIFIER_ID, modifiers, stack), AttributeModifier.Operation.ADD_VALUE), EquipmentSlotGroup.MAINHAND)); + modifierEntryList.add(new ItemAttributeModifiers.Entry(typeAttribute, new AttributeModifier(DAMAGE_TYPES.get(typeAttribute), this.calculateZaniteBuff(stack), AttributeModifier.Operation.ADD_MULTIPLIED_TOTAL), EquipmentSlotGroup.MAINHAND)); + modifierEntryList.add(new ItemAttributeModifiers.Entry(Attributes.ATTACK_DAMAGE, new AttributeModifier(DAMAGE_MODIFIER_ID, this.calculateZaniteBuff(stack), AttributeModifier.Operation.ADD_MULTIPLIED_TOTAL), EquipmentSlotGroup.MAINHAND)); return modifierEntryList; } - default int calculateDamageIncrease(Holder base, ResourceLocation bonusModifier, ItemAttributeModifiers modifiers, ItemStack stack) { - AtomicReference baseStat = new AtomicReference<>(0.0); - modifiers.forEach(EquipmentSlotGroup.MAINHAND, (attribute, modifier) -> { - if (attribute.value() == base.value() && !modifier.id().equals(bonusModifier)) { - baseStat.updateAndGet(v -> v + modifier.amount()); - } - }); - return this.calculateDamageIncrease(stack, baseStat.get()); - } - - default int calculateDamageIncrease(ItemStack stack, double baseDamage) { - double boostedDamage = this.calculateZaniteBuff(stack, baseDamage); - boostedDamage -= baseDamage; - if (boostedDamage < 0.0) { - boostedDamage = 0.0; - } - return (int) Math.round(boostedDamage); - } - Holder getDamageType(); } diff --git a/src/main/java/com/aetherteam/aetherii/item/equipment/weapons/zanite/ZaniteCrossbowItem.java b/src/main/java/com/aetherteam/aetherii/item/equipment/weapons/zanite/ZaniteCrossbowItem.java index ce997276f7..468cefb8b0 100644 --- a/src/main/java/com/aetherteam/aetherii/item/equipment/weapons/zanite/ZaniteCrossbowItem.java +++ b/src/main/java/com/aetherteam/aetherii/item/equipment/weapons/zanite/ZaniteCrossbowItem.java @@ -23,7 +23,7 @@ protected Projectile createProjectile(Level level, LivingEntity shooter, ItemSta Projectile projectile = super.createProjectile(level, shooter, weapon, ammo, isCrit); if (shooter.getData(AetherIIDataAttachments.ABILITY_BEHAVIOR).isCrossbowSpecial()) { if (projectile instanceof AbstractArrow arrow) { - arrow.setBaseDamage(this.calculateZaniteBuff(weapon, ((AbstractArrowAccessor) arrow).aether$getBaseDamage())); + arrow.setBaseDamage((this.calculateZaniteBuff(weapon) + 1) * ((AbstractArrowAccessor) arrow).aether$getBaseDamage()); } } return projectile; From dcc74803a069f97dcc44301f834cc41fcc1d1128 Mon Sep 17 00:00:00 2001 From: Liam Thompson Date: Sat, 14 Mar 2026 20:07:53 +1000 Subject: [PATCH 2/4] Updated ZanitePendantItem to use BLOCK_BREAK_SPEED --- .../aetherii/item/equipment/accessories/ZanitePendantItem.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/aetherteam/aetherii/item/equipment/accessories/ZanitePendantItem.java b/src/main/java/com/aetherteam/aetherii/item/equipment/accessories/ZanitePendantItem.java index e2d2d25d42..f7725f6763 100644 --- a/src/main/java/com/aetherteam/aetherii/item/equipment/accessories/ZanitePendantItem.java +++ b/src/main/java/com/aetherteam/aetherii/item/equipment/accessories/ZanitePendantItem.java @@ -31,7 +31,7 @@ public ZanitePendantItem(Properties properties) { @Override public Set gatherAttributes(Set attributes) { attributes = super.gatherAttributes(attributes); - attributes.add(new ConditionalAttribute(Attributes.MINING_EFFICIENCY, new ConditionalModifier(MINING_EFFICIENCY, (stack) -> 0.25 + (1.75 * stack.getDamageValue() / (stack.getMaxDamage() + 0.5)), AttributeModifier.Operation.ADD_VALUE), (stack, wearer) -> true)); + attributes.add(new ConditionalAttribute(Attributes.BLOCK_BREAK_SPEED, new ConditionalModifier(MINING_EFFICIENCY, (stack) -> 0.25 + (1.75 * stack.getDamageValue() / (stack.getMaxDamage() + 0.5)), AttributeModifier.Operation.ADD_VALUE), (stack, wearer) -> true)); return attributes; } From 5d2250f75195d537a384c23ec18bbca2bb2dd591 Mon Sep 17 00:00:00 2001 From: Liam Thompson Date: Sun, 15 Mar 2026 11:00:38 +1000 Subject: [PATCH 3/4] Adjust ZanitePendantItem block break speed scaling to +25% -> +75% --- .../aetherii/item/equipment/accessories/ZanitePendantItem.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/aetherteam/aetherii/item/equipment/accessories/ZanitePendantItem.java b/src/main/java/com/aetherteam/aetherii/item/equipment/accessories/ZanitePendantItem.java index f7725f6763..99f5e1d4f6 100644 --- a/src/main/java/com/aetherteam/aetherii/item/equipment/accessories/ZanitePendantItem.java +++ b/src/main/java/com/aetherteam/aetherii/item/equipment/accessories/ZanitePendantItem.java @@ -31,7 +31,7 @@ public ZanitePendantItem(Properties properties) { @Override public Set gatherAttributes(Set attributes) { attributes = super.gatherAttributes(attributes); - attributes.add(new ConditionalAttribute(Attributes.BLOCK_BREAK_SPEED, new ConditionalModifier(MINING_EFFICIENCY, (stack) -> 0.25 + (1.75 * stack.getDamageValue() / (stack.getMaxDamage() + 0.5)), AttributeModifier.Operation.ADD_VALUE), (stack, wearer) -> true)); + attributes.add(new ConditionalAttribute(Attributes.BLOCK_BREAK_SPEED, new ConditionalModifier(MINING_EFFICIENCY, (stack) -> 0.25 + .50 * stack.getDamageValue() / (stack.getMaxDamage()), AttributeModifier.Operation.ADD_MULTIPLIED_TOTAL), (stack, wearer) -> true)); return attributes; } From fc5048a656df4953fc8460ab3202e040d5921216 Mon Sep 17 00:00:00 2001 From: Liam Thompson Date: Sun, 15 Mar 2026 11:01:11 +1000 Subject: [PATCH 4/4] Added epsilon to ZaniteBuff calculation to ensure +0% at full durability --- .../java/com/aetherteam/aetherii/item/equipment/ZaniteBuff.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/aetherteam/aetherii/item/equipment/ZaniteBuff.java b/src/main/java/com/aetherteam/aetherii/item/equipment/ZaniteBuff.java index 6637c81933..3854a3cddc 100644 --- a/src/main/java/com/aetherteam/aetherii/item/equipment/ZaniteBuff.java +++ b/src/main/java/com/aetherteam/aetherii/item/equipment/ZaniteBuff.java @@ -7,6 +7,6 @@ public interface ZaniteBuff { double buff = 1.0; default double calculateZaniteBuff(ItemStack stack) { - return buff * stack.getDamageValue() / (double) stack.getMaxDamage(); + return 1.0e-10 + buff * stack.getDamageValue() / (double) stack.getMaxDamage(); } }