diff --git a/forge-game/src/main/java/forge/game/ability/effects/DamageAllEffect.java b/forge-game/src/main/java/forge/game/ability/effects/DamageAllEffect.java index 1c7b7e2b..64e60a49 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/DamageAllEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/DamageAllEffect.java @@ -111,7 +111,7 @@ public class DamageAllEffect extends DamageBaseEffect { } preventMap.triggerPreventDamage(false); - damageMap.dealLifelinkDamage(); + damageMap.triggerDamageDoneOnce(false); replaceDying(sa); } diff --git a/forge-game/src/main/java/forge/game/ability/effects/DamageDealEffect.java b/forge-game/src/main/java/forge/game/ability/effects/DamageDealEffect.java index 304eb84c..c7071614 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/DamageDealEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/DamageDealEffect.java @@ -159,7 +159,7 @@ public class DamageDealEffect extends DamageBaseEffect { } else { preventMap.triggerPreventDamage(false); // non combat damage cause lifegain there - damageMap.dealLifelinkDamage(); + damageMap.triggerDamageDoneOnce(false); replaceDying(sa); } return; diff --git a/forge-game/src/main/java/forge/game/ability/effects/DamageEachEffect.java b/forge-game/src/main/java/forge/game/ability/effects/DamageEachEffect.java index f97cd9f9..e54953c5 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/DamageEachEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/DamageEachEffect.java @@ -121,7 +121,7 @@ public class DamageEachEffect extends DamageBaseEffect { } preventMap.triggerPreventDamage(false); - damageMap.dealLifelinkDamage(); + damageMap.triggerDamageDoneOnce(false); replaceDying(sa); } diff --git a/forge-game/src/main/java/forge/game/ability/effects/FightEffect.java b/forge-game/src/main/java/forge/game/ability/effects/FightEffect.java index b722bea9..1a9bdb5e 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/FightEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/FightEffect.java @@ -67,7 +67,7 @@ public class FightEffect extends DamageBaseEffect { dealDamage(fighters.get(1), fighters.get(0), dmg2, damageMap, preventMap); preventMap.triggerPreventDamage(false); - damageMap.dealLifelinkDamage(); + damageMap.triggerDamageDoneOnce(false); replaceDying(sa); diff --git a/forge-game/src/main/java/forge/game/card/CardDamageMap.java b/forge-game/src/main/java/forge/game/card/CardDamageMap.java index 701a85f7..10460db5 100644 --- a/forge-game/src/main/java/forge/game/card/CardDamageMap.java +++ b/forge-game/src/main/java/forge/game/card/CardDamageMap.java @@ -16,20 +16,6 @@ import forge.game.trigger.TriggerType; public class CardDamageMap extends ForwardingTable { private Table dataMap = HashBasedTable.create(); - - // common function to gain life for lifelink - public void dealLifelinkDamage() { - for (Map.Entry> e : this.rowMap().entrySet()) { - final Card sourceLKI = e.getKey(); - int damageSum = 0; - for (final Integer i : e.getValue().values()) { - damageSum += i; - } - if (damageSum > 0 && sourceLKI.hasKeyword("Lifelink")) { - sourceLKI.getController().gainLife(damageSum, sourceLKI); - } - } - } public void triggerPreventDamage(boolean isCombat) { for (Map.Entry> e : this.columnMap().entrySet()) { @@ -52,19 +38,23 @@ public class CardDamageMap extends ForwardingTable { public void triggerDamageDoneOnce(boolean isCombat) { // Source -> Targets for (Map.Entry> e : this.rowMap().entrySet()) { + final Card sourceLKI = e.getKey(); int sum = 0; for (final Integer i : e.getValue().values()) { sum += i; } if (sum > 0) { - final GameEntity ge = e.getKey(); final Map runParams = Maps.newHashMap(); - runParams.put("DamageSource", ge); + runParams.put("DamageSource", sourceLKI); runParams.put("DamageTargets", Sets.newHashSet(e.getValue().keySet())); runParams.put("DamageAmount", sum); runParams.put("IsCombatDamage", isCombat); - ge.getGame().getTriggerHandler().runTrigger(TriggerType.DamageDealtOnce, runParams, false); + sourceLKI.getGame().getTriggerHandler().runTrigger(TriggerType.DamageDealtOnce, runParams, false); + + if (sourceLKI.hasKeyword("Lifelink")) { + sourceLKI.getController().gainLife(sum, sourceLKI); + } } } // Targets -> Source diff --git a/forge-game/src/main/java/forge/game/combat/Combat.java b/forge-game/src/main/java/forge/game/combat/Combat.java index bf121169..275f6892 100644 --- a/forge-game/src/main/java/forge/game/combat/Combat.java +++ b/forge-game/src/main/java/forge/game/combat/Combat.java @@ -830,7 +830,7 @@ public class Combat { // This was deeper before, but that resulted in the stack entry acting like before. // LifeLink for Combat Damage at this place - dealtDamageTo.dealLifelinkDamage(); + dealtDamageTo.triggerDamageDoneOnce(true); // when ... deals combat damage to one or more for (final Card damageSource : dealtDamageTo.rowKeySet()) { diff --git a/forge-game/src/main/java/forge/game/cost/CostDamage.java b/forge-game/src/main/java/forge/game/cost/CostDamage.java index 279f1e71..4b7a8c62 100644 --- a/forge-game/src/main/java/forge/game/cost/CostDamage.java +++ b/forge-game/src/main/java/forge/game/cost/CostDamage.java @@ -67,7 +67,7 @@ public class CostDamage extends CostPart { payer.addDamage(decision.c, source, damageMap, preventMap); preventMap.triggerPreventDamage(false); - damageMap.dealLifelinkDamage(); + damageMap.triggerDamageDoneOnce(false); return decision.c > 0; } diff --git a/forge-gui/src/main/java/forge/player/HumanPlay.java b/forge-gui/src/main/java/forge/player/HumanPlay.java index 060727f1..cf8c9711 100644 --- a/forge-gui/src/main/java/forge/player/HumanPlay.java +++ b/forge-gui/src/main/java/forge/player/HumanPlay.java @@ -427,7 +427,7 @@ public class HumanPlay { p.addDamage(amount, source, damageMap, preventMap); preventMap.triggerPreventDamage(false); - damageMap.dealLifelinkDamage(); + damageMap.triggerDamageDoneOnce(false); } else if (part instanceof CostPutCounter) { CounterType counterType = ((CostPutCounter) part).getCounter();