diff --git a/forge-ai/src/main/java/forge/ai/simulation/GameCopier.java b/forge-ai/src/main/java/forge/ai/simulation/GameCopier.java index b7387592827..eda5f33823f 100644 --- a/forge-ai/src/main/java/forge/ai/simulation/GameCopier.java +++ b/forge-ai/src/main/java/forge/ai/simulation/GameCopier.java @@ -17,6 +17,7 @@ import forge.ai.LobbyPlayerAi; import forge.card.CardRarity; import forge.card.CardRules; import forge.game.*; +import forge.game.ability.effects.DetachedCardEffect; import forge.game.card.*; import forge.game.card.token.TokenInfo; import forge.game.combat.Combat; @@ -310,7 +311,11 @@ public class GameCopier { // The issue is that it requires parsing the original card from scratch from the paper card. We should // improve the copier to accurately copy the card from its actual state, so that the paper card shouldn't // be needed. Once the below code accurately copies the card, remove the USE_FROM_PAPER_CARD code path. - Card newCard = new Card(newGame.nextCardId(), c.getPaperCard(), newGame); + Card newCard; + if (c instanceof DetachedCardEffect) + newCard = new DetachedCardEffect((DetachedCardEffect) c, newGame, true); + else + newCard = new Card(newGame.nextCardId(), c.getPaperCard(), newGame); newCard.setOwner(newOwner); newCard.setName(c.getName()); newCard.setCommander(c.isCommander()); diff --git a/forge-game/src/main/java/forge/game/ability/effects/DetachedCardEffect.java b/forge-game/src/main/java/forge/game/ability/effects/DetachedCardEffect.java index 6ae13546320..ca9a1ccefcb 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/DetachedCardEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/DetachedCardEffect.java @@ -1,6 +1,7 @@ package forge.game.ability.effects; import forge.card.GamePieceType; +import forge.game.Game; import forge.game.card.Card; import forge.game.player.Player; @@ -30,7 +31,11 @@ public class DetachedCardEffect extends Card { } public DetachedCardEffect(DetachedCardEffect from, boolean assignNewId) { - super(assignNewId ? from.getGame().nextCardId() : from.id, from.getPaperCard(), from.getGame()); + this(from, from.getGame(), assignNewId); + } + + public DetachedCardEffect(DetachedCardEffect from, Game game, boolean assignNewId) { + super(assignNewId ? game.nextCardId() : from.id, from.getPaperCard(), from.getGame()); this.setName(from.getName()); this.setOwner(from.getOwner()); this.setGamePieceType(GamePieceType.EFFECT);