fix Stalwart Successor checking permanents entering

This commit is contained in:
jmlundeen 2025-08-17 12:26:23 -05:00
parent c16b3d6056
commit b0ee19d782
2 changed files with 59 additions and 1 deletions

View file

@ -78,14 +78,19 @@ class StalwartSuccessorTriggeredAbility extends TriggeredAbilityImpl {
@Override @Override
public boolean checkTrigger(GameEvent event, Game game) { public boolean checkTrigger(GameEvent event, Game game) {
int zccOffset = 0;
Permanent permanent = game.getPermanent(event.getTargetId()); Permanent permanent = game.getPermanent(event.getTargetId());
if (permanent == null) {
permanent = game.getPermanentEntering(event.getTargetId());
zccOffset = 1;
}
if (permanent == null if (permanent == null
|| !permanent.isCreature(game) || !permanent.isCreature(game)
|| !permanent.isControlledBy(getControllerId()) || !permanent.isControlledBy(getControllerId())
|| !StalwartSuccessorWatcher.checkCreature(permanent, event, game)) { || !StalwartSuccessorWatcher.checkCreature(permanent, event, game)) {
return false; return false;
} }
this.getEffects().setTargetPointer(new FixedTarget(permanent, game)); this.getEffects().setTargetPointer(new FixedTarget(permanent.getId(), permanent.getZoneChangeCounter(game) + zccOffset));
return true; return true;
} }
} }
@ -101,6 +106,11 @@ class StalwartSuccessorWatcher extends Watcher {
@Override @Override
public void watch(GameEvent event, Game game) { public void watch(GameEvent event, Game game) {
if (event.getType() == GameEvent.EventType.COUNTERS_ADDED) { if (event.getType() == GameEvent.EventType.COUNTERS_ADDED) {
if (game.getPermanent(event.getTargetId()) == null) {
// permanent entering
Permanent permanent = game.getPermanentEntering(event.getTargetId());
map.putIfAbsent(new MageObjectReference(event.getTargetId(), permanent.getZoneChangeCounter(game) + 1, game), event.getId());
}
map.putIfAbsent(new MageObjectReference(event.getTargetId(), game), event.getId()); map.putIfAbsent(new MageObjectReference(event.getTargetId(), game), event.getId());
} }
} }

View file

@ -0,0 +1,48 @@
package org.mage.test.cards.single.tdm;
import mage.constants.PhaseStep;
import mage.constants.Zone;
import mage.counters.CounterType;
import org.junit.Test;
import org.mage.test.serverside.base.CardTestPlayerBase;
public class StalwartSuccessorTest extends CardTestPlayerBase {
/*
Stalwart Successor
{1}{B}{G}
Creature Human Warrior
Menace (This creature cant be blocked except by two or more creatures.)
Whenever one or more counters are put on a creature you control, if its the first time counters have been put on that creature this turn, put a +1/+1 counter on that creature.
3/2
*/
private static final String stalwartSuccessor = "Stalwart Successor";
/*
Purestrain Genestealer
{2}{G}
Creature Tyranid
This creature enters with two +1/+1 counters on it.
Vanguard Species Whenever this creature attacks, you may remove a +1/+1 counter from it. If you do, search your library for a basic land card, put it onto the battlefield tapped, then shuffle.
1/1
*/
private static final String purestrainGenestealer = "Purestrain Genestealer";
@Test
public void testStalwartSuccessor() {
addCard(Zone.BATTLEFIELD, playerA, stalwartSuccessor);
addCard(Zone.BATTLEFIELD, playerA, "Forest", 3);
addCard(Zone.HAND, playerA, purestrainGenestealer);
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, purestrainGenestealer);
setStopAt(1, PhaseStep.END_TURN);
execute();
assertCounterCount(playerA, purestrainGenestealer, CounterType.P1P1, 2 + 1);
}
}