diff --git a/src/main/java/forge/game/GameAction.java b/src/main/java/forge/game/GameAction.java index e2b9b0c2763..ed1258132b6 100644 --- a/src/main/java/forge/game/GameAction.java +++ b/src/main/java/forge/game/GameAction.java @@ -169,6 +169,9 @@ public class GameAction { } if (!suppress) { + if(zoneFrom == null) + copied.getOwner().addInboundToken(copied); + HashMap repParams = new HashMap(); repParams.put("Event", "Moved"); repParams.put("Affected", copied); @@ -183,6 +186,8 @@ public class GameAction { return c; } } + + copied.getOwner().removeInboundToken(copied); if (c.wasSuspendCast()) { copied = GameAction.addSuspendTriggers(c); diff --git a/src/main/java/forge/game/player/Player.java b/src/main/java/forge/game/player/Player.java index ef2ca0d62f9..2acf030254a 100644 --- a/src/main/java/forge/game/player/Player.java +++ b/src/main/java/forge/game/player/Player.java @@ -135,6 +135,11 @@ public class Player extends GameEntity implements Comparable { /** The slowtrip list. */ private List slowtripList = new ArrayList(); + + /** A list of tokens not in play, but on their way. + * This list is kept in order to not break ETB-replacement + * on tokens. */ + private List inboundTokens = new ArrayList(); /** The keywords. */ private ArrayList keywords = new ArrayList(); @@ -1517,6 +1522,7 @@ public class Player extends GameEntity implements Comparable { public final List getAllCards() { List allExcStack = this.getCardsIn(Player.ALL_ZONES); allExcStack.addAll(getCardsIn(ZoneType.Stack)); + allExcStack.addAll(inboundTokens); return allExcStack; } @@ -3095,6 +3101,16 @@ public class Player extends GameEntity implements Comparable { return false; } + + public void addInboundToken(Card c) + { + inboundTokens.add(c); + } + + public void removeInboundToken(Card c) + { + inboundTokens.remove(c); + } /** * TODO: Write javadoc for this type.