From 9af399eadbe6b0cbce95af3208cee53d90722b12 Mon Sep 17 00:00:00 2001 From: "Alex W. Jackson" Date: Mon, 14 Mar 2022 02:43:12 -0400 Subject: [PATCH] Better changeling token workaround; add additional test (fixes #8766) --- .../test/cards/continuous/ChangelingTest.java | 20 +++++++++++++++++++ .../mage/game/permanent/PermanentToken.java | 16 ++++----------- 2 files changed, 24 insertions(+), 12 deletions(-) diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/continuous/ChangelingTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/continuous/ChangelingTest.java index 6d09b71dfe..7073422156 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/continuous/ChangelingTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/continuous/ChangelingTest.java @@ -108,4 +108,24 @@ public class ChangelingTest extends CardTestPlayerBase { assertCounterCount(playerA, cohort, CounterType.P1P1, 1); assertCounterCount(playerA, "Shapeshifter", CounterType.P1P1, 1); } + + private static final String amoeboid = "Amoeboid Changeling"; + + @Test + public void testTokensCanLoseTypes() { + addCard(Zone.BATTLEFIELD, playerA, "Plains", 4); + addCard(Zone.BATTLEFIELD, playerA, "Wizened Cenn"); + addCard(Zone.BATTLEFIELD, playerA, amoeboid); + addCard(Zone.HAND, playerA, cohort); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, cohort); + activateAbility(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "{T}: Target creature loses", "Shapeshifter"); + + setStopAt(1, PhaseStep.END_TURN); + execute(); + assertAllCommandsUsed(); + + assertTapped(amoeboid, true); + assertPowerToughness(playerA, "Shapeshifter", 2, 2); + } } diff --git a/Mage/src/main/java/mage/game/permanent/PermanentToken.java b/Mage/src/main/java/mage/game/permanent/PermanentToken.java index a0dbe9a163..ae37d07208 100644 --- a/Mage/src/main/java/mage/game/permanent/PermanentToken.java +++ b/Mage/src/main/java/mage/game/permanent/PermanentToken.java @@ -6,8 +6,6 @@ import mage.abilities.costs.mana.ManaCost; import mage.abilities.keyword.ChangelingAbility; import mage.cards.Card; import mage.constants.EmptyNames; -import mage.constants.SubType; -import mage.constants.SubTypeSet; import mage.game.Game; import mage.game.events.ZoneChangeEvent; import mage.game.permanent.token.Token; @@ -90,6 +88,10 @@ public class PermanentToken extends PermanentImpl { this.subtype.copyFrom(token.getSubtype(game)); this.tokenDescriptor = token.getTokenDescriptor(); this.startingLoyalty = token.getStartingLoyalty(); + // workaround for entersTheBattlefield replacement effects + if (this.abilities.containsClass(ChangelingAbility.class)) { + this.subtype.setIsAllCreatureTypes(true); + } } @Override @@ -119,14 +121,4 @@ public class PermanentToken extends PermanentImpl { // token don't have game card, so return itself return this; } - - @Override - public boolean hasSubtype(SubType value, Game game) { - if (super.hasSubtype(value, game)) { - return true; - } - return this.isCreature(game) - && value.getSubTypeSet() == SubTypeSet.CreatureType - && this.getAbilities(game).containsClass(ChangelingAbility.class); - } }