From d13a0e6e6b213f826d5272e9a16468de96c20cc8 Mon Sep 17 00:00:00 2001 From: jmlundeen Date: Fri, 29 Aug 2025 15:54:31 -0500 Subject: [PATCH] create token copy checks for copyfrom * Esoteric Duplicator test demonstrates fix. Sculpting steel token was not coming back as an Esoteric Duplicator --- .../cards/single/big/EsotericDuplicatorTest.java | 2 -- .../effects/common/CreateTokenCopyTargetEffect.java | 12 ++++++++++-- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/single/big/EsotericDuplicatorTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/single/big/EsotericDuplicatorTest.java index 13f8ee3c2a8..319a5c9414d 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/single/big/EsotericDuplicatorTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/single/big/EsotericDuplicatorTest.java @@ -2,7 +2,6 @@ package org.mage.test.cards.single.big; import mage.constants.PhaseStep; import mage.constants.Zone; -import org.junit.Ignore; import org.junit.Test; import org.mage.test.serverside.base.CardTestPlayerBase; @@ -21,7 +20,6 @@ public class EsotericDuplicatorTest extends CardTestPlayerBase { private static final String esotericDuplicator = "Esoteric Duplicator"; @Test - @Ignore("Sculpting steel doesn't retain copy on entering battlefield") public void testEsotericDuplicator() { setStrictChooseMode(true); diff --git a/Mage/src/main/java/mage/abilities/effects/common/CreateTokenCopyTargetEffect.java b/Mage/src/main/java/mage/abilities/effects/common/CreateTokenCopyTargetEffect.java index 204befa2900..ca0a32efa39 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/CreateTokenCopyTargetEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/CreateTokenCopyTargetEffect.java @@ -176,8 +176,8 @@ public class CreateTokenCopyTargetEffect extends OneShotEffect { } // can target card or permanent - Card copyFrom; - CopyApplier applier = new EmptyCopyApplier(); + Card copyFrom = null; + CopyApplier applier = null; if (permanent != null) { // handle copies of copies Permanent copyFromPermanent = permanent; @@ -196,9 +196,17 @@ public class CreateTokenCopyTargetEffect extends OneShotEffect { } } } + // check if permanent was copying, but copy effect is no longer active + if (applier == null) { + if (permanent.isCopy() && permanent.getCopyFrom() instanceof Permanent) { + copyFromPermanent = (Permanent) permanent.getCopyFrom(); + } + applier = new EmptyCopyApplier(); + } copyFrom = copyFromPermanent; } else { copyFrom = game.getCard(getTargetPointer().getFirst(game, source)); + applier = new EmptyCopyApplier(); } if (copyFrom == null) {