From 9db791d875edaac45002be60bf56eed5a71ebe2c Mon Sep 17 00:00:00 2001 From: tool4EvEr Date: Sat, 7 May 2022 10:18:19 +0200 Subject: [PATCH] Fix casting card copies not being added to stack correctly --- forge-game/src/main/java/forge/game/GameAction.java | 7 ++++++- .../java/forge/game/ability/effects/AbandonEffect.java | 2 +- .../java/forge/game/ability/effects/BalanceEffect.java | 6 +++--- .../java/forge/game/ability/effects/BidLifeEffect.java | 4 ++-- 4 files changed, 12 insertions(+), 7 deletions(-) diff --git a/forge-game/src/main/java/forge/game/GameAction.java b/forge-game/src/main/java/forge/game/GameAction.java index 06ca81ada10..591cd5f4082 100644 --- a/forge-game/src/main/java/forge/game/GameAction.java +++ b/forge-game/src/main/java/forge/game/GameAction.java @@ -275,7 +275,12 @@ public class GameAction { lastKnownInfo = CardUtil.getLKICopy(c); } - copied = CardFactory.copyCard(c, false); + // CR 707.12 casting of a card copy, don't copy it again + if (zoneTo.is(ZoneType.Stack) && c.isRealToken()) { + copied = c; + } else { + copied = CardFactory.copyCard(c, false); + } if (zoneTo.is(ZoneType.Stack)) { // when moving to stack, copy changed card information diff --git a/forge-game/src/main/java/forge/game/ability/effects/AbandonEffect.java b/forge-game/src/main/java/forge/game/ability/effects/AbandonEffect.java index 7eeffb6afec..72a88f752c5 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/AbandonEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/AbandonEffect.java @@ -34,7 +34,7 @@ public class AbandonEffect extends SpellAbilityEffect { if (sa.hasParam("RememberAbandoned")) { source.addRemembered(source); } - + game.getTriggerHandler().suppressMode(TriggerType.ChangesZone); controller.getZone(ZoneType.Command).remove(source); game.getTriggerHandler().clearSuppression(TriggerType.ChangesZone); diff --git a/forge-game/src/main/java/forge/game/ability/effects/BalanceEffect.java b/forge-game/src/main/java/forge/game/ability/effects/BalanceEffect.java index a726d0a47ee..a4d62e9f2a5 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/BalanceEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/BalanceEffect.java @@ -35,13 +35,13 @@ public class BalanceEffect extends SpellAbilityEffect { Game game = activator.getGame(); String valid = sa.getParamOrDefault("Valid", "Card"); ZoneType zone = sa.hasParam("Zone") ? ZoneType.smartValueOf(sa.getParam("Zone")) : ZoneType.Battlefield; - + int min = Integer.MAX_VALUE; - + final FCollectionView players = game.getPlayersInTurnOrder(); final List validCards = new ArrayList<>(players.size()); Map discardedMap = Maps.newHashMap(); - + for (int i = 0; i < players.size(); i++) { // Find the minimum of each Valid per player validCards.add(CardLists.getValidCards(players.get(i).getCardsIn(zone), valid, activator, source, sa)); diff --git a/forge-game/src/main/java/forge/game/ability/effects/BidLifeEffect.java b/forge-game/src/main/java/forge/game/ability/effects/BidLifeEffect.java index 99dc3eb9068..0eba85ba70f 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/BidLifeEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/BidLifeEffect.java @@ -33,7 +33,7 @@ public class BidLifeEffect extends SpellAbilityEffect { } else { startBidding = 0; } - + if (sa.hasParam("OtherBidder")) { bidPlayers.add(activator); bidPlayers.addAll(AbilityUtils.getDefinedPlayers(host, sa.getParam("OtherBidder"), sa)); @@ -62,7 +62,7 @@ public class BidLifeEffect extends SpellAbilityEffect { } } } - + host.setChosenNumber(bid); host.addRemembered(winner); final SpellAbility action = sa.getAdditionalAbility("BidSubAbility");