refactored exiletokensAtEndStep

This commit is contained in:
drmDev 2017-03-19 17:54:07 -04:00
parent dcd5c76bad
commit 311e41abd2
3 changed files with 66 additions and 13 deletions

View file

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

View file

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

View file

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