From 311e41abd26b7a4155a7f0b26c40505d3b60fda7 Mon Sep 17 00:00:00 2001 From: drmDev Date: Sun, 19 Mar 2017 17:54:07 -0400 Subject: [PATCH] refactored exiletokensAtEndStep --- .../src/mage/cards/l/LightningCoils.java | 13 +---- .../cards/single/mir/LightningCoilsTest.java | 50 +++++++++++++++++++ .../effects/common/CreateTokenEffect.java | 16 +++++- 3 files changed, 66 insertions(+), 13 deletions(-) diff --git a/Mage.Sets/src/mage/cards/l/LightningCoils.java b/Mage.Sets/src/mage/cards/l/LightningCoils.java index d6b52be2a4..c0b56441fd 100644 --- a/Mage.Sets/src/mage/cards/l/LightningCoils.java +++ b/Mage.Sets/src/mage/cards/l/LightningCoils.java @@ -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; } } diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/single/mir/LightningCoilsTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/single/mir/LightningCoilsTest.java index 53289d2115..d98c8353f6 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/single/mir/LightningCoilsTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/single/mir/LightningCoilsTest.java @@ -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); + } } diff --git a/Mage/src/main/java/mage/abilities/effects/common/CreateTokenEffect.java b/Mage/src/main/java/mage/abilities/effects/common/CreateTokenEffect.java index 72d6841715..964fa5f99d 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/CreateTokenEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/CreateTokenEffect.java @@ -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 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(); } - }