diff --git a/forge-game/src/main/java/forge/game/GameAction.java b/forge-game/src/main/java/forge/game/GameAction.java index 0c6cdf01f9f..d49b450b040 100644 --- a/forge-game/src/main/java/forge/game/GameAction.java +++ b/forge-game/src/main/java/forge/game/GameAction.java @@ -136,7 +136,14 @@ public class GameAction { c.updateStateForView(); } - copied = CardFactory.copyCard(c, false); + copied = CardFactory.copyCard(c, false, false); + + // clear any leftover keyword replacements from the card leaving battlefield + copied.removeChangedCardKeywords(copied.getTimestamp()); + copied.removeChangedCardTypes(copied.getTimestamp()); + copied.removeChangedTextColorWord(copied.getTimestamp()); + copied.removeChangedTextTypeWord(copied.getTimestamp()); + copied.setUnearthed(c.isUnearthed()); copied.setTapped(false); for (final Trigger trigger : copied.getTriggers()) { diff --git a/forge-game/src/main/java/forge/game/card/CardFactory.java b/forge-game/src/main/java/forge/game/card/CardFactory.java index 2d889f6cfaa..2cd70cb87ea 100644 --- a/forge-game/src/main/java/forge/game/card/CardFactory.java +++ b/forge-game/src/main/java/forge/game/card/CardFactory.java @@ -78,6 +78,10 @@ public class CardFactory { * @return a {@link forge.game.card.Card} object. */ public final static Card copyCard(final Card in, boolean assignNewId) { + return copyCard(in, assignNewId, true); + } + + public final static Card copyCard(final Card in, boolean assignNewId, boolean copyAttachmentData) { Card out; if (!(in.isToken() || in.getCopiedPermanent() != null)) { out = assignNewId ? getCard(in.getPaperCard(), in.getOwner(), in.getGame()) @@ -99,6 +103,16 @@ public class CardFactory { } out.setState(in.getCurrentStateName(), true); + if (copyAttachmentData) { + // I'm not sure if we really should be copying enchant/equip stuff over. + out.setEquipping(in.getEquipping()); + out.setEquippedBy(in.getEquippedBy(false)); + out.setFortifying(in.getFortifying()); + out.setFortifiedBy(in.getFortifiedBy(false)); + out.setEnchantedBy(in.getEnchantedBy(false)); + out.setEnchanting(in.getEnchanting()); + } + out.setClones(in.getClones()); out.setZone(in.getZone()); for (final Object o : in.getRemembered()) {