diff --git a/forge-game/src/main/java/forge/game/ability/SpellAbilityEffect.java b/forge-game/src/main/java/forge/game/ability/SpellAbilityEffect.java index c6fa06282c7..9a32c699239 100644 --- a/forge-game/src/main/java/forge/game/ability/SpellAbilityEffect.java +++ b/forge-game/src/main/java/forge/game/ability/SpellAbilityEffect.java @@ -326,6 +326,7 @@ public abstract class SpellAbilityEffect { final SpellAbility newSa = AbilityFactory.getAbility(trigSA, sa.getHostCard()); newSa.setIntrinsic(intrinsic); trig.setOverridingAbility(newSa); + trig.setSpawningAbility(sa.copy(sa.getHostCard(), sa.getActivatingPlayer(), true)); sa.getActivatingPlayer().getGame().getTriggerHandler().registerDelayedTrigger(trig); } @@ -641,10 +642,16 @@ public abstract class SpellAbilityEffect { final Card hostCard = sa.getHostCard(); final Game game = hostCard.getGame(); hostCard.addUntilLeavesBattlefield(triggerList.allCards()); - final TriggerHandler trigHandler = game.getTriggerHandler(); - final Card lki = CardUtil.getLKICopy(hostCard); - lki.clearControllers(); - lki.setOwner(sa.getActivatingPlayer()); + final TriggerHandler trigHandler = game.getTriggerHandler(); + + final Card lki; + if (sa.hasParam("ReturnAbility")) { + lki = CardUtil.getLKICopy(hostCard); + lki.clearControllers(); + lki.setOwner(sa.getActivatingPlayer()); + } else { + lki = null; + } return new GameCommand() { @@ -671,14 +678,13 @@ public abstract class SpellAbilityEffect { if (newCard == null || !newCard.equalsWithTimestamp(c)) { continue; } - Trigger trig = null; if (sa.hasAdditionalAbility("ReturnAbility")) { String valid = sa.getParamOrDefault("ReturnValid", "Card.IsTriggerRemembered"); String trigSA = "Mode$ ChangesZone | Origin$ " + cell.getColumnKey() + " | Destination$ " + cell.getRowKey() + " | ValidCard$ " + valid + " | TriggerDescription$ " + sa.getAdditionalAbility("ReturnAbility").getParam("SpellDescription"); - trig = TriggerHandler.parseTrigger(trigSA, hostCard, sa.isIntrinsic(), null); + Trigger trig = TriggerHandler.parseTrigger(trigSA, hostCard, sa.isIntrinsic(), null); trig.setSpawningAbility(sa.copy(lki, sa.getActivatingPlayer(), true)); trig.setActiveZone(null); trig.addRemembered(newCard); diff --git a/forge-game/src/main/java/forge/game/ability/effects/AddPhaseEffect.java b/forge-game/src/main/java/forge/game/ability/effects/AddPhaseEffect.java index 3ec8a944860..3857c670c7a 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/AddPhaseEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/AddPhaseEffect.java @@ -67,6 +67,7 @@ public class AddPhaseEffect extends SpellAbilityEffect { SpellAbility overridingSA = AbilityFactory.getAbility(sa.getSVar(sa.getParam("ExtraPhaseDelayedTriggerExcute")), sa.getHostCard()); overridingSA.setActivatingPlayer(sa.getActivatingPlayer()); delTrig.setOverridingAbility(overridingSA); + delTrig.setSpawningAbility(sa.copy(sa.getHostCard(), sa.getActivatingPlayer(), true)); extraPhase.addTrigger(delTrig); } } diff --git a/forge-game/src/main/java/forge/game/ability/effects/AddTurnEffect.java b/forge-game/src/main/java/forge/game/ability/effects/AddTurnEffect.java index 34861a8e750..45a6b70afa0 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/AddTurnEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/AddTurnEffect.java @@ -56,6 +56,7 @@ public class AddTurnEffect extends SpellAbilityEffect { SpellAbility overridingSA = AbilityFactory.getAbility(sa.getSVar(sa.getParam("ExtraTurnDelayedTriggerExcute")), sa.getHostCard()); overridingSA.setActivatingPlayer(sa.getActivatingPlayer()); delTrig.setOverridingAbility(overridingSA); + delTrig.setSpawningAbility(sa.copy(sa.getHostCard(), sa.getActivatingPlayer(), true)); extra.addTrigger(delTrig); } if (sa.hasParam("SkipUntap")) { diff --git a/forge-game/src/main/java/forge/game/ability/effects/CountersPutEffect.java b/forge-game/src/main/java/forge/game/ability/effects/CountersPutEffect.java index 1725a655fdc..fa835122984 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/CountersPutEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/CountersPutEffect.java @@ -665,6 +665,7 @@ public class CountersPutEffect extends SpellAbilityEffect { final SpellAbility newSa = AbilityFactory.getAbility(trigSA, host); newSa.setIntrinsic(intrinsic); trig.setOverridingAbility(newSa); + trig.setSpawningAbility(sa.copy(host, sa.getActivatingPlayer(), true)); sa.getActivatingPlayer().getGame().getTriggerHandler().registerDelayedTrigger(trig); } } diff --git a/forge-game/src/main/java/forge/game/trigger/Trigger.java b/forge-game/src/main/java/forge/game/trigger/Trigger.java index e3a5cb0ed0e..83b717b98d4 100644 --- a/forge-game/src/main/java/forge/game/trigger/Trigger.java +++ b/forge-game/src/main/java/forge/game/trigger/Trigger.java @@ -531,7 +531,6 @@ public abstract class Trigger extends TriggerReplacementBase { public SpellAbility getSpawningAbility() { return spawningAbility; } - public void setSpawningAbility(SpellAbility ability) { spawningAbility = ability; } diff --git a/forge-game/src/main/java/forge/game/trigger/TriggerHandler.java b/forge-game/src/main/java/forge/game/trigger/TriggerHandler.java index 3614e541825..5cb79ab4e2c 100644 --- a/forge-game/src/main/java/forge/game/trigger/TriggerHandler.java +++ b/forge-game/src/main/java/forge/game/trigger/TriggerHandler.java @@ -541,7 +541,7 @@ public class TriggerHandler { sa.changeText(); } } else { - Player controller = delayedTriggers.contains(regtrig) ? sa.getActivatingPlayer() : host.getController(); + Player controller = regtrig.getSpawningAbility() != null ? regtrig.getSpawningAbility().getActivatingPlayer() : host.getController(); // need to copy the SA because of TriggeringObjects sa = sa.copy(host, controller, false); }