From cd69b2da2a1363ff9c65b585a2663033f6d495ba Mon Sep 17 00:00:00 2001 From: Hans Mackowiak Date: Wed, 2 Dec 2020 16:51:04 +0100 Subject: [PATCH] SpellAbility: set LastStateBattlefield only into CastSA lki copy --- forge-game/src/main/java/forge/game/GameAction.java | 3 --- .../java/forge/game/ability/effects/CloneEffect.java | 11 +++++++---- .../src/main/java/forge/game/zone/MagicStack.java | 7 ++++++- 3 files changed, 13 insertions(+), 8 deletions(-) diff --git a/forge-game/src/main/java/forge/game/GameAction.java b/forge-game/src/main/java/forge/game/GameAction.java index 1748a61c41a..eeadc293ebb 100644 --- a/forge-game/src/main/java/forge/game/GameAction.java +++ b/forge-game/src/main/java/forge/game/GameAction.java @@ -533,9 +533,6 @@ public class GameAction { } else if (zoneTo.is(ZoneType.Stack)) { c.setCastFrom(zoneFrom.getZoneType()); if (cause != null && cause.isSpell() && c.equals(cause.getHostCard()) && !c.isCopiedSpell()) { - cause.setLastStateBattlefield(game.getLastStateBattlefield()); - cause.setLastStateGraveyard(game.getLastStateGraveyard()); - c.setCastSA(cause); } else { c.setCastSA(null); diff --git a/forge-game/src/main/java/forge/game/ability/effects/CloneEffect.java b/forge-game/src/main/java/forge/game/ability/effects/CloneEffect.java index 4f160b5727d..fd33dc41397 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/CloneEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/CloneEffect.java @@ -72,10 +72,13 @@ public class CloneEffect extends SpellAbilityEffect { // choices need to be filtered by LastState Battlefield or Graveyard // if a Clone enters the field as other cards it could clone, // the clone should not be able to clone them - if (choiceZone.equals(ZoneType.Battlefield)) { - choices.retainAll(sa.getLastStateBattlefield()); - } else if (choiceZone.equals(ZoneType.Graveyard)) { - choices.retainAll(sa.getLastStateGraveyard()); + // but do that only for Replacement Effects + if (sa.getRootAbility().isReplacementAbility()) { + if (choiceZone.equals(ZoneType.Battlefield)) { + choices.retainAll(sa.getLastStateBattlefield()); + } else if (choiceZone.equals(ZoneType.Graveyard)) { + choices.retainAll(sa.getLastStateGraveyard()); + } } choices = CardLists.getValidCards(choices, sa.getParam("Choices"), activator, host); diff --git a/forge-game/src/main/java/forge/game/zone/MagicStack.java b/forge-game/src/main/java/forge/game/zone/MagicStack.java index f19df171ea5..ba22a8349e7 100644 --- a/forge-game/src/main/java/forge/game/zone/MagicStack.java +++ b/forge-game/src/main/java/forge/game/zone/MagicStack.java @@ -140,7 +140,12 @@ public class MagicStack /* extends MyObservable */ implements Iterable