From 8fc0155df8f142f1ab115c6b84a14b6dc2969b73 Mon Sep 17 00:00:00 2001 From: Vidal Date: Tue, 3 Feb 2026 06:22:24 -0300 Subject: [PATCH] Attempt at damage reduction --- .../data/ability/type/AbilityGuard.java | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityGuard.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityGuard.java index 60f5caf88..829a51c8f 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityGuard.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityGuard.java @@ -20,6 +20,7 @@ import kamkeel.npcs.controllers.data.ability.gui.AbilityFieldDefs; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import noppes.npcs.util.ValueUtil; import java.util.Arrays; import java.util.List; @@ -117,12 +118,19 @@ public class AbilityGuard extends Ability implements IAbilityGuard { } public void onDamageTaken(EntityLivingBase caster, EntityLivingBase attacker, DamageSource source, float damage) { - if (!isGuarding()) return; - if (!canCounter || attacker == null || !counterEligible) return; - if (!isDirectHit(source)) return; + if (!isGuarding() || attacker == null) return; lastAttacker = attacker; lastDamageTaken = damage; + + float reduction = ValueUtil.clamp(getDamageReductionFactor(), 0, damage); + float newHealth = ValueUtil.clamp(caster.getHealth() + reduction, 0, caster.getMaxHealth()); + + caster.setHealth(newHealth); + + if (!canCounter || !counterEligible || counterTriggered) return; + if (!isDirectHit(source)) return; + counterTriggered = true; // Counter will be performed in onActiveTick - don't self-interrupt }