From eafbd5a95c32fa7011d918e5bf7fb49c7833ffec Mon Sep 17 00:00:00 2001 From: jmlundeen Date: Tue, 22 Apr 2025 18:41:18 -0500 Subject: [PATCH] Fix Ketramose not seeing itself get exiled --- .../src/mage/cards/k/KetramoseTheNewDawn.java | 18 ++++----- .../single/dft/KetramoseTheNewDawnTest.java | 39 +++++++++++++++++++ 2 files changed, 46 insertions(+), 11 deletions(-) create mode 100644 Mage.Tests/src/test/java/org/mage/test/cards/single/dft/KetramoseTheNewDawnTest.java diff --git a/Mage.Sets/src/mage/cards/k/KetramoseTheNewDawn.java b/Mage.Sets/src/mage/cards/k/KetramoseTheNewDawn.java index a319d936d67..cfcfc15c3ce 100644 --- a/Mage.Sets/src/mage/cards/k/KetramoseTheNewDawn.java +++ b/Mage.Sets/src/mage/cards/k/KetramoseTheNewDawn.java @@ -13,6 +13,7 @@ import mage.abilities.effects.common.combat.CantAttackBlockUnlessConditionSource import mage.abilities.keyword.IndestructibleAbility; import mage.abilities.keyword.LifelinkAbility; import mage.abilities.keyword.MenaceAbility; +import mage.cards.Card; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; @@ -24,7 +25,9 @@ import mage.game.Game; import mage.game.events.GameEvent; import mage.game.events.ZoneChangeBatchEvent; import mage.game.events.ZoneChangeEvent; +import mage.game.events.ZoneChangeGroupEvent; +import java.util.Objects; import java.util.UUID; /** @@ -69,7 +72,7 @@ public final class KetramoseTheNewDawn extends CardImpl { } } -class KetramoseTriggeredAbility extends TriggeredAbilityImpl implements BatchTriggeredAbility { +class KetramoseTriggeredAbility extends TriggeredAbilityImpl { KetramoseTriggeredAbility() { super(Zone.BATTLEFIELD, new DrawCardSourceControllerEffect(1), false); this.addEffect(new LoseLifeSourceControllerEffect(1)); @@ -81,21 +84,14 @@ class KetramoseTriggeredAbility extends TriggeredAbilityImpl implements BatchTri @Override public boolean checkEventType(GameEvent event, Game game) { - return event.getType() == GameEvent.EventType.ZONE_CHANGE_BATCH; - } - - @Override - public boolean checkEvent(ZoneChangeEvent event, Game game) { - if (event.getToZone() != Zone.EXILED) { - return false; - } - return event.getFromZone() == Zone.GRAVEYARD || event.getFromZone() == Zone.BATTLEFIELD; + return event.getType() == GameEvent.EventType.ZONE_CHANGE_GROUP; } @Override public boolean checkTrigger(GameEvent event, Game game) { + ZoneChangeEvent zEvent = (ZoneChangeEvent) event; return game.getActivePlayerId().equals(getControllerId()) - && !getFilteredEvents((ZoneChangeBatchEvent) event, game).isEmpty(); + && zEvent.getFromZone() == Zone.GRAVEYARD || zEvent.getFromZone() == Zone.BATTLEFIELD; } @Override diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/single/dft/KetramoseTheNewDawnTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/single/dft/KetramoseTheNewDawnTest.java new file mode 100644 index 00000000000..0b2f9e09be3 --- /dev/null +++ b/Mage.Tests/src/test/java/org/mage/test/cards/single/dft/KetramoseTheNewDawnTest.java @@ -0,0 +1,39 @@ +package org.mage.test.cards.single.dft; + +import mage.constants.PhaseStep; +import mage.constants.Zone; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +import static org.junit.jupiter.api.Assertions.*; + +public class KetramoseTheNewDawnTest extends CardTestPlayerBase { + + private final String ketramose = "Ketramose, the New Dawn"; + private final String relic = "Relic of Progenitus"; + private final String ephemerate = "Ephemerate"; + + @Test + public void testExile() { + setStrictChooseMode(true); + addCard(Zone.BATTLEFIELD, playerA, ketramose); + addCard(Zone.BATTLEFIELD, playerA, relic); + addCard(Zone.HAND, playerA, ephemerate); + addCard(Zone.BATTLEFIELD, playerA, "Plains", 2); + addCard(Zone.GRAVEYARD, playerA, "Forest", 10); + addCard(Zone.GRAVEYARD, playerB, "Forest", 10); + + activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{T}:"); + addTarget(playerA, playerB); + addTarget(playerB, "Forest"); + activateAbility(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "{1}, Exile {this}"); + waitStackResolved(1, PhaseStep.POSTCOMBAT_MAIN); + castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerA, ephemerate, ketramose, true); + + setStopAt(1, PhaseStep.END_TURN); + execute(); + + assertHandCount(playerA, 4); + assertLife(playerA, 20 - 3); + } +} \ No newline at end of file