mirror of
https://github.com/correl/mage.git
synced 2024-12-24 11:50:45 +00:00
refactored exiletokensAtEndStep
This commit is contained in:
parent
dcd5c76bad
commit
311e41abd2
3 changed files with 66 additions and 13 deletions
|
@ -31,17 +31,14 @@ import java.util.UUID;
|
|||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.BeginningOfUpkeepTriggeredAbility;
|
||||
import mage.abilities.common.DiesCreatureTriggeredAbility;
|
||||
import mage.abilities.common.delayed.AtTheBeginOfNextEndStepDelayedTriggeredAbility;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.effects.common.CreateTokenEffect;
|
||||
import mage.abilities.effects.common.ExileTargetEffect;
|
||||
import mage.abilities.effects.common.counter.AddCountersSourceEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Outcome;
|
||||
import mage.constants.TargetController;
|
||||
import mage.constants.Zone;
|
||||
import mage.counters.CounterType;
|
||||
import mage.filter.common.FilterCreaturePermanent;
|
||||
import mage.filter.predicate.Predicates;
|
||||
|
@ -51,7 +48,6 @@ import mage.game.Game;
|
|||
import mage.game.permanent.Permanent;
|
||||
import mage.game.permanent.token.ElementalToken;
|
||||
import mage.players.Player;
|
||||
import mage.target.targetpointer.FixedTarget;
|
||||
|
||||
/**
|
||||
*
|
||||
|
@ -114,14 +110,7 @@ class LightningCoilsEffect extends OneShotEffect {
|
|||
effect.apply(game, source);
|
||||
|
||||
// exile those tokens at next end step
|
||||
for (UUID tokenId : effect.getLastAddedTokenIds()) {
|
||||
Permanent tokenPermanent = game.getPermanent(tokenId);
|
||||
if (tokenPermanent != null) {
|
||||
ExileTargetEffect exileEffect = new ExileTargetEffect(null, "", Zone.BATTLEFIELD);
|
||||
exileEffect.setTargetPointer(new FixedTarget(tokenPermanent, game));
|
||||
game.addDelayedTriggeredAbility(new AtTheBeginOfNextEndStepDelayedTriggeredAbility(exileEffect), source);
|
||||
}
|
||||
}
|
||||
effect.exileTokensCreatedAtNextEndStep(game, source);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -46,4 +46,54 @@ public class LightningCoilsTest extends CardTestPlayerBase {
|
|||
assertCounterCount(playerA, lCoils, CounterType.CHARGE, 0);
|
||||
assertPermanentCount(playerA, "Elemental", gnomeCount);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void sacrificeSixCreaturesProducesSixElementalsExiledAtEnd() {
|
||||
|
||||
/*
|
||||
Lightning Coils {3}
|
||||
Artifact
|
||||
Whenever a nontoken creature you control dies, put a charge counter on Lightning Coils.
|
||||
At the beginning of your upkeep, if Lightning Coils has five or more charge counters on it, remove all of them from it
|
||||
and create that many 3/1 red Elemental creature tokens with haste. Exile them at the beginning of the next end step.
|
||||
*/
|
||||
String lCoils = "Lightning Coils";
|
||||
|
||||
/*
|
||||
Bottle Gnomes {3}
|
||||
Artifact Creature — Gnome
|
||||
Sacrifice Bottle Gnomes: You gain 3 life.
|
||||
*/
|
||||
String bGnomes = "Bottle Gnomes";
|
||||
|
||||
/*
|
||||
Grand Melee {3}{R}
|
||||
Enchantment
|
||||
All creatures attack each turn if able.
|
||||
All creatures block each turn if able.
|
||||
*/
|
||||
String gMelee = "Grand Melee";
|
||||
|
||||
int tokenCount = 5;
|
||||
|
||||
addCard(Zone.BATTLEFIELD, playerA, lCoils);
|
||||
addCard(Zone.BATTLEFIELD, playerA, bGnomes, tokenCount);
|
||||
addCard(Zone.BATTLEFIELD, playerA, "Mountain", 4);
|
||||
addCard(Zone.HAND, playerA, gMelee);
|
||||
|
||||
for (int i = 0; i < tokenCount; i++) // sac Gnomes 5 times
|
||||
activateAbility(2, PhaseStep.POSTCOMBAT_MAIN, playerA, "Sacrifice");
|
||||
|
||||
castSpell(3, PhaseStep.PRECOMBAT_MAIN, playerA, gMelee);
|
||||
setStopAt(3, PhaseStep.CLEANUP);
|
||||
execute();
|
||||
|
||||
assertPermanentCount(playerA, gMelee, 1);
|
||||
assertGraveyardCount(playerA, bGnomes, tokenCount);
|
||||
assertPermanentCount(playerA, lCoils, 1);
|
||||
assertCounterCount(playerA, lCoils, CounterType.CHARGE, 0);
|
||||
assertPermanentCount(playerA, "Elemental", 0);
|
||||
int remainingLife = 20 - (tokenCount * 3); // each elemental does 3 damage
|
||||
assertLife(playerB, remainingLife);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -30,12 +30,16 @@ package mage.abilities.effects.common;
|
|||
import java.util.ArrayList;
|
||||
import java.util.UUID;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.delayed.AtTheBeginOfNextEndStepDelayedTriggeredAbility;
|
||||
import mage.abilities.dynamicvalue.DynamicValue;
|
||||
import mage.abilities.dynamicvalue.common.StaticValue;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.constants.Outcome;
|
||||
import mage.constants.Zone;
|
||||
import mage.game.Game;
|
||||
import mage.game.permanent.Permanent;
|
||||
import mage.game.permanent.token.Token;
|
||||
import mage.target.targetpointer.FixedTarget;
|
||||
import mage.util.CardUtil;
|
||||
|
||||
/**
|
||||
|
@ -108,6 +112,17 @@ public class CreateTokenEffect extends OneShotEffect {
|
|||
public ArrayList<UUID> getLastAddedTokenIds() {
|
||||
return lastAddedTokenIds;
|
||||
}
|
||||
|
||||
public void exileTokensCreatedAtNextEndStep(Game game, Ability source) {
|
||||
for (UUID tokenId : this.getLastAddedTokenIds()) {
|
||||
Permanent tokenPermanent = game.getPermanent(tokenId);
|
||||
if (tokenPermanent != null) {
|
||||
ExileTargetEffect exileEffect = new ExileTargetEffect(null, "", Zone.BATTLEFIELD);
|
||||
exileEffect.setTargetPointer(new FixedTarget(tokenPermanent, game));
|
||||
game.addDelayedTriggeredAbility(new AtTheBeginOfNextEndStepDelayedTriggeredAbility(exileEffect), source);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void setText() {
|
||||
StringBuilder sb = new StringBuilder("create ");
|
||||
|
@ -144,5 +159,4 @@ public class CreateTokenEffect extends OneShotEffect {
|
|||
sb.append(message);
|
||||
staticText = sb.toString();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue