diff --git a/forge-ai/src/main/java/forge/ai/GameState.java b/forge-ai/src/main/java/forge/ai/GameState.java index bc31f46fb98..40ea465041a 100644 --- a/forge-ai/src/main/java/forge/ai/GameState.java +++ b/forge-ai/src/main/java/forge/ai/GameState.java @@ -1215,8 +1215,7 @@ public abstract class GameState { boolean tapped = c.isTapped(); boolean sickness = c.hasSickness(); Map counters = c.getCounters(); - // Note: Not clearCounters() since we want to keep the counters - // var as-is. + // Note: Not clearCounters() since we want to keep the counters var as-is. c.setCounters(Maps.newHashMap()); if (c.isAura()) { // dummy "enchanting" to indicate that the card will be force-attached elsewhere diff --git a/forge-game/src/main/java/forge/game/GameAction.java b/forge-game/src/main/java/forge/game/GameAction.java index 6aaefde06a2..ad8d0db2669 100644 --- a/forge-game/src/main/java/forge/game/GameAction.java +++ b/forge-game/src/main/java/forge/game/GameAction.java @@ -146,8 +146,8 @@ public class GameAction { boolean fromBattlefield = zoneFrom != null && zoneFrom.is(ZoneType.Battlefield); boolean wasFacedown = c.isFaceDown(); - //Rule 110.5g: A token that has left the battlefield can't move to another zone - if (c.isToken() && zoneFrom != null && !fromBattlefield && !zoneFrom.is(ZoneType.Stack)) { + // Rule 111.8: A token that has left the battlefield can't move to another zone + if (!c.isSpell() && c.isToken() && zoneFrom != null && !fromBattlefield && !zoneFrom.is(ZoneType.Stack)) { return c; } @@ -243,7 +243,7 @@ public class GameAction { copied = CardFactory.copyCard(c, false); if (zoneTo.is(ZoneType.Stack)) { - // when moving to stack, copy changed card infomation + // when moving to stack, copy changed card information copied.setChangedCardColors(c.getChangedCardColors()); copied.setChangedCardKeywords(c.getChangedCardKeywords()); copied.setChangedCardTypes(c.getChangedCardTypesMap()); @@ -441,7 +441,7 @@ public class GameAction { } if (mergedCards != null) { - // Move components of merged permanet here + // Move components of merged permanent here // Also handle 721.3e and 903.9a boolean wasToken = c.isToken(); if (commanderEffect != null) { diff --git a/forge-game/src/main/java/forge/game/trigger/TriggerSpellAbilityCastOrCopy.java b/forge-game/src/main/java/forge/game/trigger/TriggerSpellAbilityCastOrCopy.java index 48f416cb778..ca3b10d4a12 100644 --- a/forge-game/src/main/java/forge/game/trigger/TriggerSpellAbilityCastOrCopy.java +++ b/forge-game/src/main/java/forge/game/trigger/TriggerSpellAbilityCastOrCopy.java @@ -87,7 +87,6 @@ public class TriggerSpellAbilityCastOrCopy extends Trigger { } } - if (!matchesValidParam("ValidPlayer", runParams.get(AbilityKey.Player))) { return false; } 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 b1be6b2ff3e..febf1fc4f9d 100644 --- a/forge-game/src/main/java/forge/game/zone/MagicStack.java +++ b/forge-game/src/main/java/forge/game/zone/MagicStack.java @@ -299,6 +299,7 @@ public class MagicStack /* extends MyObservable */ implements Iterable { c.setTapped(false); } - // Do not add Tokens to other zones than the battlefield. + // Do not add Tokens to other zones than the battlefield. (unless it's a copy of a card 706.12) // But Effects/Emblems count as Tokens too, so allow Command too. - if (zoneType == ZoneType.Battlefield || !c.isToken()) { + if ((zoneType == ZoneType.Battlefield || !c.isToken()) || (zoneType == ZoneType.Stack && c.getCopiedPermanent() != null)) { c.setZone(this); if (index == null) {