From 0b64ffb4c7386295b051ab54eddd11392361ae4c Mon Sep 17 00:00:00 2001 From: Hanmac Date: Tue, 13 Mar 2018 08:21:15 +0100 Subject: [PATCH] DamageMap: use cause for Lifelink part --- .../java/forge/game/ability/effects/DamageAllEffect.java | 2 +- .../java/forge/game/ability/effects/DamageDealEffect.java | 4 ++-- .../java/forge/game/ability/effects/DamageEachEffect.java | 2 +- .../forge/game/ability/effects/DamageResolveEffect.java | 2 +- .../main/java/forge/game/ability/effects/FightEffect.java | 2 +- .../java/forge/game/ability/effects/RepeatEachEffect.java | 2 +- forge-game/src/main/java/forge/game/card/CardDamageMap.java | 6 +++--- forge-game/src/main/java/forge/game/combat/Combat.java | 2 +- forge-game/src/main/java/forge/game/cost/CostDamage.java | 2 +- forge-gui/src/main/java/forge/player/HumanPlay.java | 2 +- 10 files changed, 13 insertions(+), 13 deletions(-) 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 d7ef3c3e07f..6fb66618055 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 @@ -120,7 +120,7 @@ public class DamageAllEffect extends DamageBaseEffect { if (!usedDamageMap) { preventMap.triggerPreventDamage(false); - damageMap.triggerDamageDoneOnce(false); + damageMap.triggerDamageDoneOnce(false, sa); } 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 9c7dc421749..a7ef697d62c 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 @@ -162,7 +162,7 @@ public class DamageDealEffect extends DamageBaseEffect { if (!usedDamageMap) { preventMap.triggerPreventDamage(false); // non combat damage cause lifegain there - damageMap.triggerDamageDoneOnce(false); + damageMap.triggerDamageDoneOnce(false, sa); } replaceDying(sa); return; @@ -201,7 +201,7 @@ public class DamageDealEffect extends DamageBaseEffect { if (!usedDamageMap) { preventMap.triggerPreventDamage(false); // non combat damage cause lifegain there - damageMap.triggerDamageDoneOnce(false); + damageMap.triggerDamageDoneOnce(false, sa); } replaceDying(sa); } 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 22a9fb9643b..86d78c41490 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 @@ -131,7 +131,7 @@ public class DamageEachEffect extends DamageBaseEffect { if (!usedDamageMap) { preventMap.triggerPreventDamage(false); - damageMap.triggerDamageDoneOnce(false); + damageMap.triggerDamageDoneOnce(false, sa); } replaceDying(sa); diff --git a/forge-game/src/main/java/forge/game/ability/effects/DamageResolveEffect.java b/forge-game/src/main/java/forge/game/ability/effects/DamageResolveEffect.java index e2f3e9c5403..bdf2f08d670 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/DamageResolveEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/DamageResolveEffect.java @@ -24,7 +24,7 @@ public class DamageResolveEffect extends SpellAbilityEffect { } // non combat damage cause lifegain there if (damageMap != null) { - damageMap.triggerDamageDoneOnce(false); + damageMap.triggerDamageDoneOnce(false, 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 a2ab96ac797..4bbaad2e21d 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, sa); preventMap.triggerPreventDamage(false); - damageMap.triggerDamageDoneOnce(false); + damageMap.triggerDamageDoneOnce(false, sa); replaceDying(sa); diff --git a/forge-game/src/main/java/forge/game/ability/effects/RepeatEachEffect.java b/forge-game/src/main/java/forge/game/ability/effects/RepeatEachEffect.java index b55534e3716..9bda21e0d06 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/RepeatEachEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/RepeatEachEffect.java @@ -213,7 +213,7 @@ public class RepeatEachEffect extends SpellAbilityEffect { sa.getPreventMap().triggerPreventDamage(false); sa.setPreventMap(null); // non combat damage cause lifegain there - sa.getDamageMap().triggerDamageDoneOnce(false); + sa.getDamageMap().triggerDamageDoneOnce(false, sa); sa.setDamageMap(null); } } 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 b9dc7d91617..e007f4725ae 100644 --- a/forge-game/src/main/java/forge/game/card/CardDamageMap.java +++ b/forge-game/src/main/java/forge/game/card/CardDamageMap.java @@ -12,6 +12,7 @@ import com.google.common.collect.Sets; import com.google.common.collect.Table; import forge.game.GameEntity; +import forge.game.spellability.SpellAbility; import forge.game.trigger.TriggerType; public class CardDamageMap extends ForwardingTable { @@ -35,7 +36,7 @@ public class CardDamageMap extends ForwardingTable { } } - public void triggerDamageDoneOnce(boolean isCombat) { + public void triggerDamageDoneOnce(boolean isCombat, final SpellAbility sa) { // Source -> Targets for (Map.Entry> e : this.rowMap().entrySet()) { final Card sourceLKI = e.getKey(); @@ -53,8 +54,7 @@ public class CardDamageMap extends ForwardingTable { sourceLKI.getGame().getTriggerHandler().runTrigger(TriggerType.DamageDealtOnce, runParams, false); if (sourceLKI.hasKeyword("Lifelink")) { - // FIXME: add sourceSA to fix Firesong and Sunspeaker - sourceLKI.getController().gainLife(sum, sourceLKI); + sourceLKI.getController().gainLife(sum, sourceLKI, sa); } } } 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 9d6bc729929..c3d8576a8bf 100644 --- a/forge-game/src/main/java/forge/game/combat/Combat.java +++ b/forge-game/src/main/java/forge/game/combat/Combat.java @@ -809,7 +809,7 @@ public class Combat { // Run the trigger to deal combat damage once // LifeLink for Combat Damage at this place - dealtDamageTo.triggerDamageDoneOnce(true); + dealtDamageTo.triggerDamageDoneOnce(true, null); dealtDamageTo.clear(); } 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 9e19d698a4d..ea88dfdae98 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, null); preventMap.triggerPreventDamage(false); - damageMap.triggerDamageDoneOnce(false); + damageMap.triggerDamageDoneOnce(false, null); 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 67d9522cb9a..78611cbb415 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, null); preventMap.triggerPreventDamage(false); - damageMap.triggerDamageDoneOnce(false); + damageMap.triggerDamageDoneOnce(false, null); } else if (part instanceof CostPutCounter) { CounterType counterType = ((CostPutCounter) part).getCounter();