diff --git a/src/main/java/forge/card/cardfactory/CardFactory.java b/src/main/java/forge/card/cardfactory/CardFactory.java index 4afea7cd8e0..dd26768ea65 100644 --- a/src/main/java/forge/card/cardfactory/CardFactory.java +++ b/src/main/java/forge/card/cardfactory/CardFactory.java @@ -112,6 +112,7 @@ public class CardFactory { out.setEnchantedBy(in.getEnchantedBy()); out.setEnchanting(in.getEnchanting()); out.setClones(in.getClones()); + out.setZone(in.getZone()); for (final Object o : in.getRemembered()) { out.addRemembered(o); } diff --git a/src/main/java/forge/game/GameAction.java b/src/main/java/forge/game/GameAction.java index cc95ef9506c..70683366afa 100644 --- a/src/main/java/forge/game/GameAction.java +++ b/src/main/java/forge/game/GameAction.java @@ -227,8 +227,7 @@ public class GameAction { } zoneFrom.remove(c); } - ZoneType fromZoneType = zoneFrom == null ? ZoneType.Stack : zoneFrom.getZoneType(); - zoneTo.getCardsAddedThisTurn().add(fromZoneType, c); + // "enter the battlefield as a copy" - apply code here // but how to query for input here and continue later while the callers assume synchronous result? zoneTo.add(copied, position); diff --git a/src/main/java/forge/game/zone/Zone.java b/src/main/java/forge/game/zone/Zone.java index ecfcff77224..c172cefcda6 100644 --- a/src/main/java/forge/game/zone/Zone.java +++ b/src/main/java/forge/game/zone/Zone.java @@ -79,6 +79,13 @@ public class Zone implements IZone, java.io.Serializable, Iterable { @Override public void add(final Card c, final Integer index) { + // Immutable cards are usually emblems and effects + if (!c.isImmutable()) { + final Zone oldZone = game.getZoneOf(c); + final ZoneType zt = oldZone == null ? ZoneType.Stack : oldZone.getZoneType(); + cardsAddedThisTurn.add(zt, c); + } + c.setTurnInZone(game.getPhaseHandler().getTurn()); if (zoneType != ZoneType.Battlefield) { c.setTapped(false);