Fix Ketramose not seeing itself get exiled

This commit is contained in:
jmlundeen 2025-04-22 18:41:18 -05:00
parent e34ebe740e
commit eafbd5a95c
2 changed files with 46 additions and 11 deletions

View file

@ -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<ZoneChangeEvent> {
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

View file

@ -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);
}
}