[AER] various text fixes

This commit is contained in:
Evan Kranzler 2022-02-19 22:21:02 -05:00
parent 6d02a902b7
commit 014a4b6941
48 changed files with 205 additions and 236 deletions

View file

@ -24,7 +24,7 @@ import mage.target.TargetPermanent;
*/ */
public final class AerialModification extends CardImpl { public final class AerialModification extends CardImpl {
private static final FilterPermanent filter = new FilterPermanent("creature or vehicle"); private static final FilterPermanent filter = new FilterPermanent("creature or Vehicle");
static { static {
filter.add(Predicates.or(CardType.CREATURE.getPredicate(), filter.add(Predicates.or(CardType.CREATURE.getPredicate(),

View file

@ -36,8 +36,7 @@ public final class AetherChaser extends CardImpl {
this.addAbility(new EntersBattlefieldTriggeredAbility(new GetEnergyCountersControllerEffect(2))); this.addAbility(new EntersBattlefieldTriggeredAbility(new GetEnergyCountersControllerEffect(2)));
// Whenever Aether Chaser attacks, you may pay {E}{E}. If you do, create a 1/1 colorless Servo artifact creature token. // Whenever Aether Chaser attacks, you may pay {E}{E}. If you do, create a 1/1 colorless Servo artifact creature token.
this.addAbility(new AttacksTriggeredAbility(new DoIfCostPaid(new CreateTokenEffect(new ServoToken()), new PayEnergyCost(2)), false, this.addAbility(new AttacksTriggeredAbility(new DoIfCostPaid(new CreateTokenEffect(new ServoToken()), new PayEnergyCost(2))));
"Whenever {this} attacks you may pay {E}{E}. If you do, create a 1/1 colorless Servo artifact creature token."));
} }
private AetherChaser(final AetherChaser card) { private AetherChaser(final AetherChaser card) {

View file

@ -34,8 +34,7 @@ public final class AetherHerder extends CardImpl {
this.addAbility(new EntersBattlefieldTriggeredAbility(new GetEnergyCountersControllerEffect(2))); this.addAbility(new EntersBattlefieldTriggeredAbility(new GetEnergyCountersControllerEffect(2)));
// Whenever Aether Herder attacks, you may pay {E}{E}. If you do, create a 1/1 colorless Servo artifact creature token. // Whenever Aether Herder attacks, you may pay {E}{E}. If you do, create a 1/1 colorless Servo artifact creature token.
this.addAbility(new AttacksTriggeredAbility(new DoIfCostPaid(new CreateTokenEffect(new ServoToken()), new PayEnergyCost(2)), false, this.addAbility(new AttacksTriggeredAbility(new DoIfCostPaid(new CreateTokenEffect(new ServoToken()), new PayEnergyCost(2))));
"Whenever {this} attacks you may pay {E}{E}. If you do, create a 1/1 colorless Servo artifact creature token."));
} }
private AetherHerder(final AetherHerder card) { private AetherHerder(final AetherHerder card) {

View file

@ -36,8 +36,7 @@ public final class AetherInspector extends CardImpl {
this.addAbility(new EntersBattlefieldTriggeredAbility(new GetEnergyCountersControllerEffect(2))); this.addAbility(new EntersBattlefieldTriggeredAbility(new GetEnergyCountersControllerEffect(2)));
// Whenever Aether Inspector attacks, you may pay {E}{E}. If you do, create a 1/1 colorless Servo artifact creature token. // Whenever Aether Inspector attacks, you may pay {E}{E}. If you do, create a 1/1 colorless Servo artifact creature token.
this.addAbility(new AttacksTriggeredAbility(new DoIfCostPaid(new CreateTokenEffect(new ServoToken()), new PayEnergyCost(2)), false, this.addAbility(new AttacksTriggeredAbility(new DoIfCostPaid(new CreateTokenEffect(new ServoToken()), new PayEnergyCost(2))));
"Whenever {this} attacks you may pay {E}{E}. If you do, create a 1/1 colorless Servo artifact creature token."));
} }
private AetherInspector(final AetherInspector card) { private AetherInspector(final AetherInspector card) {

View file

@ -37,8 +37,7 @@ public final class AetherSwooper extends CardImpl {
this.addAbility(new EntersBattlefieldTriggeredAbility(new GetEnergyCountersControllerEffect(2))); this.addAbility(new EntersBattlefieldTriggeredAbility(new GetEnergyCountersControllerEffect(2)));
// Whenever Aether Swooper attacks, you may pay {E}{E}. If you do, create a 1/1 colorless Servo artifact creature token. // Whenever Aether Swooper attacks, you may pay {E}{E}. If you do, create a 1/1 colorless Servo artifact creature token.
this.addAbility(new AttacksTriggeredAbility(new DoIfCostPaid(new CreateTokenEffect(new ServoToken()), new PayEnergyCost(2)), false, this.addAbility(new AttacksTriggeredAbility(new DoIfCostPaid(new CreateTokenEffect(new ServoToken()), new PayEnergyCost(2))));
"Whenever {this} attacks you may pay {E}{E}. If you do, create a 1/1 colorless Servo artifact creature token."));
} }
private AetherSwooper(final AetherSwooper card) { private AetherSwooper(final AetherSwooper card) {

View file

@ -1,7 +1,5 @@
package mage.cards.a; package mage.cards.a;
import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.common.AttacksTriggeredAbility; import mage.abilities.common.AttacksTriggeredAbility;
import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.common.EntersBattlefieldTriggeredAbility;
@ -16,8 +14,9 @@ import mage.constants.CardType;
import mage.constants.Duration; import mage.constants.Duration;
import mage.constants.SubType; import mage.constants.SubType;
import java.util.UUID;
/** /**
*
* @author fireshoes * @author fireshoes
*/ */
public final class AetherstreamLeopard extends CardImpl { public final class AetherstreamLeopard extends CardImpl {
@ -36,8 +35,9 @@ public final class AetherstreamLeopard extends CardImpl {
this.addAbility(new EntersBattlefieldTriggeredAbility(new GetEnergyCountersControllerEffect(1))); this.addAbility(new EntersBattlefieldTriggeredAbility(new GetEnergyCountersControllerEffect(1)));
// Whenever Aetherstream Leopard attacks, you may pay {E}. If you do, it gets +2/+0 until end of turn. // Whenever Aetherstream Leopard attacks, you may pay {E}. If you do, it gets +2/+0 until end of turn.
this.addAbility(new AttacksTriggeredAbility(new DoIfCostPaid(new BoostSourceEffect(2, 0, Duration.EndOfTurn), new PayEnergyCost(1)), false, this.addAbility(new AttacksTriggeredAbility(new DoIfCostPaid(new BoostSourceEffect(
"Whenever {this} attacks you may pay {E}. If you do, it gets +2/+0 until end of turn.")); 2, 0, Duration.EndOfTurn
).setText("it gets +2/+0 until end of turn"), new PayEnergyCost(1))));
} }
private AetherstreamLeopard(final AetherstreamLeopard card) { private AetherstreamLeopard(final AetherstreamLeopard card) {

View file

@ -25,7 +25,7 @@ import mage.watchers.common.RevoltWatcher;
public final class AidFromTheCowl extends CardImpl { public final class AidFromTheCowl extends CardImpl {
private static final String ruleText = "<i>Revolt</i> &mdash; At the beginning of your end step, if a permanent you controlled left the battlefield this turn, " private static final String ruleText = "<i>Revolt</i> &mdash; At the beginning of your end step, if a permanent you controlled left the battlefield this turn, "
+ "reveal the top card of your library. If it's a permanent card, you may put it onto the battlefield. Otherwise, put it on the bottom of your library."; + "reveal the top card of your library. If it's a permanent card, you may put it onto the battlefield. Otherwise, you may put it on the bottom of your library.";
public AidFromTheCowl(UUID ownerId, CardSetInfo setInfo) { public AidFromTheCowl(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{3}{G}{G}"); super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{3}{G}{G}");

View file

@ -1,7 +1,5 @@
package mage.cards.a; package mage.cards.a;
import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.common.EntersBattlefieldTriggeredAbility;
@ -16,8 +14,9 @@ import mage.constants.CardType;
import mage.constants.SubType; import mage.constants.SubType;
import mage.watchers.common.RevoltWatcher; import mage.watchers.common.RevoltWatcher;
import java.util.UUID;
/** /**
*
* @author Styxo * @author Styxo
*/ */
public final class AirdropAeronauts extends CardImpl { public final class AirdropAeronauts extends CardImpl {
@ -34,10 +33,10 @@ public final class AirdropAeronauts extends CardImpl {
this.addAbility(FlyingAbility.getInstance()); this.addAbility(FlyingAbility.getInstance());
// <i>Revolt</i> &mdash; When Airdrop Aeronauts enters the battlefield, if a permanent you controlled left the battlefield this turn, you gain 5 life. // <i>Revolt</i> &mdash; When Airdrop Aeronauts enters the battlefield, if a permanent you controlled left the battlefield this turn, you gain 5 life.
Ability ability = new ConditionalInterveningIfTriggeredAbility(new EntersBattlefieldTriggeredAbility( Ability ability = new ConditionalInterveningIfTriggeredAbility(
new GainLifeEffect(5), false), RevoltCondition.instance, new EntersBattlefieldTriggeredAbility(new GainLifeEffect(5), false),
"<i>Revolt</i> &mdash; When {this} enters the battlefield, if a permanent you controlled left" RevoltCondition.instance, "When {this} enters the battlefield, " +
+ " the battlefield this turn, you gain 5 life." "if a permanent you controlled left the battlefield this turn, you gain 5 life."
); );
ability.setAbilityWord(AbilityWord.REVOLT); ability.setAbilityWord(AbilityWord.REVOLT);
this.addAbility(ability, new RevoltWatcher()); this.addAbility(ability, new RevoltWatcher());

View file

@ -52,7 +52,7 @@ public final class AjaniUnyielding extends CardImpl {
// -9: Put five +1/+1 counters on each creature you control and five loyalty counters on each other planeswalker you control. // -9: Put five +1/+1 counters on each creature you control and five loyalty counters on each other planeswalker you control.
LoyaltyAbility ajaniAbility3 = new LoyaltyAbility(new AddCountersAllEffect(CounterType.P1P1.createInstance(5), new FilterControlledCreaturePermanent()), -9); LoyaltyAbility ajaniAbility3 = new LoyaltyAbility(new AddCountersAllEffect(CounterType.P1P1.createInstance(5), new FilterControlledCreaturePermanent()), -9);
ajaniAbility3.addEffect(new AddCountersAllEffect(CounterType.LOYALTY.createInstance(5), planeswalkerFilter)); ajaniAbility3.addEffect(new AddCountersAllEffect(CounterType.LOYALTY.createInstance(5), planeswalkerFilter).setText("and five loyalty counters on each other planeswalker you control"));
this.addAbility(ajaniAbility3); this.addAbility(ajaniAbility3);
} }

View file

@ -44,7 +44,7 @@ public final class CaughtInTheBrights extends CardImpl {
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new CantAttackBlockAttachedEffect(AttachmentType.AURA))); this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new CantAttackBlockAttachedEffect(AttachmentType.AURA)));
// When a Vehicle you control attacks, exile enchanted creature. // When a Vehicle you control attacks, exile enchanted creature.
this.addAbility(new AttacksAllTriggeredAbility(new ExileAttachedEffect(), false, filter, SetTargetPointer.NONE, false)); this.addAbility(new AttacksAllTriggeredAbility(new ExileAttachedEffect(), false, filter, SetTargetPointer.NONE, false).setTriggerPhrase("When a Vehicle you control attacks, "));
} }
private CaughtInTheBrights(final CaughtInTheBrights card) { private CaughtInTheBrights(final CaughtInTheBrights card) {

View file

@ -1,7 +1,5 @@
package mage.cards.c; package mage.cards.c;
import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.common.EntersBattlefieldTriggeredAbility;
@ -16,6 +14,8 @@ import mage.constants.SubType;
import mage.game.permanent.token.ServoToken; import mage.game.permanent.token.ServoToken;
import mage.watchers.common.RevoltWatcher; import mage.watchers.common.RevoltWatcher;
import java.util.UUID;
/** /**
* @author JRHerlehy * @author JRHerlehy
*/ */
@ -31,13 +31,13 @@ public final class CountlessGearsRenegade extends CardImpl {
// <i>Revolt</i> &mdash; When Countless Gears Renegade enters the battlefield, if a permanent you controlled // <i>Revolt</i> &mdash; When Countless Gears Renegade enters the battlefield, if a permanent you controlled
// left the battlefield this turn, create a 1/1 colorless Servo artifact creature token. // left the battlefield this turn, create a 1/1 colorless Servo artifact creature token.
Ability ability = new ConditionalInterveningIfTriggeredAbility(new EntersBattlefieldTriggeredAbility( Ability ability = new ConditionalInterveningIfTriggeredAbility(
new CreateTokenEffect(new ServoToken(), 1), false), RevoltCondition.instance, new EntersBattlefieldTriggeredAbility(new CreateTokenEffect(new ServoToken()), false),
"<i>Revolt</i> &mdash; When {this} enters the battlefield, if a permanent you controlled left" RevoltCondition.instance, "When {this} enters the battlefield, if a permanent you controlled " +
+ " the battlefield this turn, create a 1/1 colorless Servo artifact creature token."); "left the battlefield this turn, create a 1/1 colorless Servo artifact creature token."
);
ability.setAbilityWord(AbilityWord.REVOLT); ability.setAbilityWord(AbilityWord.REVOLT);
ability.addWatcher(new RevoltWatcher()); this.addAbility(ability, new RevoltWatcher());
this.addAbility(ability);
} }
private CountlessGearsRenegade(final CountlessGearsRenegade card) { private CountlessGearsRenegade(final CountlessGearsRenegade card) {

View file

@ -48,7 +48,7 @@ public final class DarkIntimations extends CardImpl {
this.getSpellAbility().addEffect(new DarkIntimationsEffect()); this.getSpellAbility().addEffect(new DarkIntimationsEffect());
// When you cast a Bolas planeswalker spell, exile Dark Intimations from your graveyard. That planeswalker enters the battlefield with an additional loyalty counter on it. // When you cast a Bolas planeswalker spell, exile Dark Intimations from your graveyard. That planeswalker enters the battlefield with an additional loyalty counter on it.
this.addAbility(new SpellCastControllerTriggeredAbility(Zone.GRAVEYARD, new DarkIntimationsGraveyardEffect(), filter, false, true)); this.addAbility(new SpellCastControllerTriggeredAbility(Zone.GRAVEYARD, new DarkIntimationsGraveyardEffect(), filter, false, true).setTriggerPhrase("When you cast a Bolas planeswalker spell, "));
} }
private DarkIntimations(final DarkIntimations card) { private DarkIntimations(final DarkIntimations card) {

View file

@ -1,7 +1,5 @@
package mage.cards.d; package mage.cards.d;
import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.common.EntersBattlefieldTriggeredAbility;
@ -13,18 +11,21 @@ import mage.cards.CardSetInfo;
import mage.constants.AbilityWord; import mage.constants.AbilityWord;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SubType; import mage.constants.SubType;
import mage.filter.FilterPermanent;
import mage.filter.common.FilterOpponentsCreaturePermanent; import mage.filter.common.FilterOpponentsCreaturePermanent;
import mage.filter.predicate.permanent.TappedPredicate; import mage.filter.predicate.permanent.TappedPredicate;
import mage.target.common.TargetOpponentsCreaturePermanent; import mage.target.TargetPermanent;
import mage.watchers.common.RevoltWatcher; import mage.watchers.common.RevoltWatcher;
import java.util.UUID;
/** /**
*
* @author Styxo * @author Styxo
*/ */
public final class DeadeyeHarpooner extends CardImpl { public final class DeadeyeHarpooner extends CardImpl {
private static final FilterOpponentsCreaturePermanent filter = new FilterOpponentsCreaturePermanent("tapped creature an opponent controls"); private static final FilterPermanent filter
= new FilterOpponentsCreaturePermanent("tapped creature an opponent controls");
static { static {
filter.add(TappedPredicate.TAPPED); filter.add(TappedPredicate.TAPPED);
@ -39,15 +40,14 @@ public final class DeadeyeHarpooner extends CardImpl {
this.toughness = new MageInt(2); this.toughness = new MageInt(2);
// <i>Revolt</i> &mdash; When Deadeye Harpooner enters the battlefield, if a permanent you controlled left the battlefield this turn, destroy target tapped creature an opponent controls. // <i>Revolt</i> &mdash; When Deadeye Harpooner enters the battlefield, if a permanent you controlled left the battlefield this turn, destroy target tapped creature an opponent controls.
Ability ability = new ConditionalInterveningIfTriggeredAbility(new EntersBattlefieldTriggeredAbility( Ability ability = new ConditionalInterveningIfTriggeredAbility(
new DestroyTargetEffect(), false), RevoltCondition.instance, new EntersBattlefieldTriggeredAbility(new DestroyTargetEffect(), false),
"<i>Revolt</i> &mdash; When {this} enters the battlefield, if a permanent you controlled left" RevoltCondition.instance, "When {this} enters the battlefield, if a permanent you controlled " +
+ " the battlefield this turn, destroy target tapped creature an opponent controls." "left the battlefield this turn, destroy target tapped creature an opponent controls."
); );
ability.setAbilityWord(AbilityWord.REVOLT); ability.setAbilityWord(AbilityWord.REVOLT);
ability.addTarget(new TargetOpponentsCreaturePermanent(filter)); ability.addTarget(new TargetPermanent(filter));
ability.addWatcher(new RevoltWatcher()); this.addAbility(ability, new RevoltWatcher());
this.addAbility(ability);
} }
private DeadeyeHarpooner(final DeadeyeHarpooner card) { private DeadeyeHarpooner(final DeadeyeHarpooner card) {

View file

@ -36,7 +36,7 @@ public final class FelidarGuardian extends CardImpl {
// When Felidar Guardian enters the battlefield, you may exile another target permanent you control, then return that card to the battlefield under its owner's control. // When Felidar Guardian enters the battlefield, you may exile another target permanent you control, then return that card to the battlefield under its owner's control.
Ability ability = new EntersBattlefieldTriggeredAbility(new ExileTargetForSourceEffect(), true); Ability ability = new EntersBattlefieldTriggeredAbility(new ExileTargetForSourceEffect(), true);
ability.addEffect(new ReturnToBattlefieldUnderOwnerControlTargetEffect(false, false)); ability.addEffect(new ReturnToBattlefieldUnderOwnerControlTargetEffect(false, false).concatBy(","));
ability.addTarget(new TargetControlledPermanent(filter)); ability.addTarget(new TargetControlledPermanent(filter));
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -1,21 +1,18 @@
package mage.cards.f; package mage.cards.f;
import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.common.EntersBattlefieldTriggeredAbility;
import mage.abilities.effects.Effect;
import mage.abilities.effects.common.continuous.BoostTargetEffect; import mage.abilities.effects.common.continuous.BoostTargetEffect;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SubType; import mage.constants.SubType;
import mage.constants.Duration;
import mage.target.common.TargetCreaturePermanent; import mage.target.common.TargetCreaturePermanent;
import java.util.UUID;
/** /**
*
* @author LevelX2 * @author LevelX2
*/ */
public final class FourthBridgeProwler extends CardImpl { public final class FourthBridgeProwler extends CardImpl {
@ -29,9 +26,8 @@ public final class FourthBridgeProwler extends CardImpl {
this.toughness = new MageInt(1); this.toughness = new MageInt(1);
// When Fourth Bridge Prowler enters the battlefield, you may have target creature get -1/-1 until end of turn. // When Fourth Bridge Prowler enters the battlefield, you may have target creature get -1/-1 until end of turn.
Effect effect = new BoostTargetEffect(-1, -1, Duration.EndOfTurn); Ability ability = new EntersBattlefieldTriggeredAbility(new BoostTargetEffect(-1, -1)
effect.setText("have target creature get -1/-1 until end of turn"); .setText("you may have target creature get -1/-1 until end of turn"), true);
Ability ability = new EntersBattlefieldTriggeredAbility(effect, true);
ability.addTarget(new TargetCreaturePermanent()); ability.addTarget(new TargetCreaturePermanent());
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -4,7 +4,6 @@ import mage.MageInt;
import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; import mage.abilities.common.BeginningOfUpkeepTriggeredAbility;
import mage.abilities.common.EntersBattlefieldOrAttacksSourceTriggeredAbility; import mage.abilities.common.EntersBattlefieldOrAttacksSourceTriggeredAbility;
import mage.abilities.costs.common.PayEnergyCost; import mage.abilities.costs.common.PayEnergyCost;
import mage.abilities.effects.Effect;
import mage.abilities.effects.common.DoIfCostPaid; import mage.abilities.effects.common.DoIfCostPaid;
import mage.abilities.effects.common.DrawCardSourceControllerEffect; import mage.abilities.effects.common.DrawCardSourceControllerEffect;
import mage.abilities.effects.common.LoseLifeSourceControllerEffect; import mage.abilities.effects.common.LoseLifeSourceControllerEffect;
@ -15,7 +14,6 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SubType; import mage.constants.SubType;
import mage.constants.TargetController; import mage.constants.TargetController;
import mage.constants.Zone;
import java.util.UUID; import java.util.UUID;
@ -39,11 +37,9 @@ public final class GlintSleeveSiphoner extends CardImpl {
this.addAbility(new EntersBattlefieldOrAttacksSourceTriggeredAbility(new GetEnergyCountersControllerEffect(1))); this.addAbility(new EntersBattlefieldOrAttacksSourceTriggeredAbility(new GetEnergyCountersControllerEffect(1)));
// At the beginning of your upkeep, you may pay {E}{E}. If you do, draw a card and you lose 1 life. // At the beginning of your upkeep, you may pay {E}{E}. If you do, draw a card and you lose 1 life.
DoIfCostPaid doIfCostPaidEffect = new DoIfCostPaid(new DrawCardSourceControllerEffect(1), new PayEnergyCost(2)); this.addAbility(new BeginningOfUpkeepTriggeredAbility(new DoIfCostPaid(
Effect effect = new LoseLifeSourceControllerEffect(1); new DrawCardSourceControllerEffect(1).setText("you draw a card"), new PayEnergyCost(2)
doIfCostPaidEffect.addEffect(effect.concatBy("and")); ).addEffect(new LoseLifeSourceControllerEffect(1).concatBy("and")), TargetController.YOU, false));
this.addAbility(new BeginningOfUpkeepTriggeredAbility(Zone.BATTLEFIELD, doIfCostPaidEffect, TargetController.YOU, false, false,
"At the beginning of your upkeep, "));
} }
private GlintSleeveSiphoner(final GlintSleeveSiphoner card) { private GlintSleeveSiphoner(final GlintSleeveSiphoner card) {

View file

@ -39,9 +39,7 @@ public final class GremlinInfestation extends CardImpl {
this.addAbility(ability); this.addAbility(ability);
// At the beginning of your end step, Gremlin Infestation deals 2 damage to enchanted artifact's controller. // At the beginning of your end step, Gremlin Infestation deals 2 damage to enchanted artifact's controller.
Effect effect = new DamageAttachedControllerEffect(2); this.addAbility(new BeginningOfEndStepTriggeredAbility(new DamageAttachedControllerEffect(2).setText("{this} deals 2 damage to enchanted artifact's controller"), TargetController.YOU, false));
effect.setText("{this} deals 2 damage to enchanted artifact's controller");
this.addAbility(new BeginningOfEndStepTriggeredAbility(new DamageAttachedControllerEffect(2), TargetController.YOU, false));
// When enchanted artifact is put into a graveyard, create a 2/2 red Gremlin creature token. // When enchanted artifact is put into a graveyard, create a 2/2 red Gremlin creature token.
this.addAbility(new DiesAttachedTriggeredAbility(new CreateTokenEffect(new GremlinToken()), "enchanted artifact", false, false)); this.addAbility(new DiesAttachedTriggeredAbility(new CreateTokenEffect(new GremlinToken()), "enchanted artifact", false, false));

View file

@ -1,7 +1,5 @@
package mage.cards.h; package mage.cards.h;
import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.BeginningOfYourEndStepTriggeredAbility; import mage.abilities.common.BeginningOfYourEndStepTriggeredAbility;
@ -14,17 +12,14 @@ import mage.abilities.keyword.FlyingAbility;
import mage.abilities.keyword.ImproviseAbility; import mage.abilities.keyword.ImproviseAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.*;
import mage.constants.SubType; import mage.filter.StaticFilters;
import mage.constants.Duration;
import mage.constants.TargetController;
import mage.constants.Zone;
import mage.filter.common.FilterControlledArtifactPermanent;
import mage.target.common.TargetControlledPermanent; import mage.target.common.TargetControlledPermanent;
import mage.target.common.TargetCreaturePermanent; import mage.target.common.TargetCreaturePermanent;
import java.util.UUID;
/** /**
*
* @author fireshoes * @author fireshoes
*/ */
public final class HeraldOfAnguish extends CardImpl { public final class HeraldOfAnguish extends CardImpl {
@ -47,7 +42,7 @@ public final class HeraldOfAnguish extends CardImpl {
// {1}{B}, Sacrifice an artifact: Target creature gets -2/-2 until end of turn. // {1}{B}, Sacrifice an artifact: Target creature gets -2/-2 until end of turn.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostTargetEffect(-2, -2, Duration.EndOfTurn), new ManaCostsImpl("{1}{B}")); Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostTargetEffect(-2, -2, Duration.EndOfTurn), new ManaCostsImpl("{1}{B}"));
ability.addCost(new SacrificeTargetCost(new TargetControlledPermanent(new FilterControlledArtifactPermanent()))); ability.addCost(new SacrificeTargetCost(new TargetControlledPermanent(StaticFilters.FILTER_CONTROLLED_PERMANENT_ARTIFACT_AN)));
ability.addTarget(new TargetCreaturePermanent()); ability.addTarget(new TargetCreaturePermanent());
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -1,7 +1,5 @@
package mage.cards.h; package mage.cards.h;
import java.util.UUID;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.BeginningOfYourEndStepTriggeredAbility; import mage.abilities.common.BeginningOfYourEndStepTriggeredAbility;
import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SimpleActivatedAbility;
@ -15,14 +13,15 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.AbilityWord; import mage.constants.AbilityWord;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.Zone;
import static mage.filter.StaticFilters.FILTER_CONTROLLED_CREATURE_SHORT_TEXT;
import mage.game.permanent.token.ServoToken; import mage.game.permanent.token.ServoToken;
import mage.target.common.TargetControlledCreaturePermanent; import mage.target.common.TargetControlledCreaturePermanent;
import mage.watchers.common.RevoltWatcher; import mage.watchers.common.RevoltWatcher;
import java.util.UUID;
import static mage.filter.StaticFilters.FILTER_CONTROLLED_CREATURE_SHORT_TEXT;
/** /**
*
* @author LevelX2 * @author LevelX2
*/ */
public final class HiddenStockpile extends CardImpl { public final class HiddenStockpile extends CardImpl {
@ -31,14 +30,14 @@ public final class HiddenStockpile extends CardImpl {
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{W}{B}"); super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{W}{B}");
// <i>Revolt</i> &mdash; At the beginning of your end step, if a permanent you controlled left the battlefield this turn, create a 1/1 colorless Servo artifact creature token. // <i>Revolt</i> &mdash; At the beginning of your end step, if a permanent you controlled left the battlefield this turn, create a 1/1 colorless Servo artifact creature token.
Ability ability = new ConditionalInterveningIfTriggeredAbility(new BeginningOfYourEndStepTriggeredAbility(new CreateTokenEffect(new ServoToken()), false), RevoltCondition.instance, this.addAbility(new ConditionalInterveningIfTriggeredAbility(
"<i>Revolt</i> &mdash; At the beginning of your end step, if a permanent you controlled left the battlefield this turn, create a 1/1 colorless Servo artifact creature token."); new BeginningOfYourEndStepTriggeredAbility(new CreateTokenEffect(new ServoToken()), false),
ability.setAbilityWord(AbilityWord.REVOLT); RevoltCondition.instance, "At the beginning of your end step, if a permanent you controlled " +
ability.addWatcher(new RevoltWatcher()); "left the battlefield this turn, create a 1/1 colorless Servo artifact creature token."
this.addAbility(ability); ).setAbilityWord(AbilityWord.REVOLT), new RevoltWatcher());
// {1}, Sacrifice a creature: Scry 1. // {1}, Sacrifice a creature: Scry 1.
ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new ScryEffect(1, false), new GenericManaCost(1)); Ability ability = new SimpleActivatedAbility(new ScryEffect(1, false), new GenericManaCost(1));
ability.addCost(new SacrificeTargetCost(new TargetControlledCreaturePermanent(FILTER_CONTROLLED_CREATURE_SHORT_TEXT))); ability.addCost(new SacrificeTargetCost(new TargetControlledCreaturePermanent(FILTER_CONTROLLED_CREATURE_SHORT_TEXT)));
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -32,7 +32,7 @@ public final class HinterlandDrake extends CardImpl {
// Hinterland Drake can't block artifact creatures. // Hinterland Drake can't block artifact creatures.
Effect effect = new CantBlockCreaturesSourceEffect(StaticFilters.FILTER_PERMANENT_ARTIFACT_CREATURE); Effect effect = new CantBlockCreaturesSourceEffect(StaticFilters.FILTER_PERMANENT_ARTIFACT_CREATURE);
effect.setText("{this} can't block artifact creatures"); effect.setText("{this} can't block artifact creatures");
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, effect)); this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, effect));
} }

View file

@ -27,7 +27,7 @@ public final class IllusionistsStratagem extends CardImpl {
StaticFilters.FILTER_CONTROLLED_CREATURES, false)); StaticFilters.FILTER_CONTROLLED_CREATURES, false));
// Draw a card. // Draw a card.
this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1)); this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1).concatBy("<br>"));
} }
private IllusionistsStratagem(final IllusionistsStratagem card) { private IllusionistsStratagem(final IllusionistsStratagem card) {

View file

@ -71,7 +71,7 @@ class IndomitableCreativityEffect extends OneShotEffect {
"For each permanent destroyed this way, " + "For each permanent destroyed this way, " +
"its controller reveals cards from the top of their library" + "its controller reveals cards from the top of their library" +
" until an artifact or creature card is revealed and exiles that card. " + " until an artifact or creature card is revealed and exiles that card. " +
"Those players put the exiled card onto the battlefield, then shuffle"; "Those players put the exiled cards onto the battlefield, then shuffle";
} }
public IndomitableCreativityEffect(final IndomitableCreativityEffect effect) { public IndomitableCreativityEffect(final IndomitableCreativityEffect effect) {

View file

@ -17,7 +17,7 @@ import java.util.UUID;
*/ */
public final class InspiringStatuary extends CardImpl { public final class InspiringStatuary extends CardImpl {
private static final FilterCard filter = new FilterCard("non-artifact spells you cast"); private static final FilterCard filter = new FilterCard("nonartifact spells");
static { static {
filter.add(Predicates.not(CardType.ARTIFACT.getPredicate())); filter.add(Predicates.not(CardType.ARTIFACT.getPredicate()));

View file

@ -58,7 +58,7 @@ class KariZevSkyshipRaiderEffect extends OneShotEffect {
KariZevSkyshipRaiderEffect() { KariZevSkyshipRaiderEffect() {
super(Outcome.PutCreatureInPlay); super(Outcome.PutCreatureInPlay);
staticText = "create Ragaven, a legendary 2/1 red Monkey creature token. Ragavan enters the battlefied tapped and attacking. Exile that token at end of combat"; staticText = "create Ragavan, a legendary 2/1 red Monkey creature token. Ragavan enters the battlefield tapped and attacking. Exile that token at end of combat";
} }
KariZevSkyshipRaiderEffect(final KariZevSkyshipRaiderEffect effect) { KariZevSkyshipRaiderEffect(final KariZevSkyshipRaiderEffect effect) {

View file

@ -23,7 +23,7 @@ public final class LeaveInTheDust extends CardImpl {
this.getSpellAbility().addTarget(new TargetNonlandPermanent()); this.getSpellAbility().addTarget(new TargetNonlandPermanent());
// Draw a card. // Draw a card.
this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1)); this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1).concatBy("<br>"));
} }

View file

@ -37,8 +37,9 @@ public final class LifecraftAwakening extends CardImpl {
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{X}{G}"); super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{X}{G}");
// Put X +1/+1 counters on target artifact you control. If it isn't a creature or Vehicle, it becomes a 0/0 Construct artifact creature. // Put X +1/+1 counters on target artifact you control. If it isn't a creature or Vehicle, it becomes a 0/0 Construct artifact creature.
ManacostVariableValue manaX = ManacostVariableValue.REGULAR; getSpellAbility().addEffect(new AddCountersTargetEffect(
getSpellAbility().addEffect(new AddCountersTargetEffect(CounterType.P1P1.createInstance(), manaX)); CounterType.P1P1.createInstance(), ManacostVariableValue.REGULAR
).setText("put X +1/+1 counters on target artifact you control"));
getSpellAbility().addTarget(new TargetArtifactPermanent(filter)); getSpellAbility().addTarget(new TargetArtifactPermanent(filter));
getSpellAbility().addEffect(new LifecraftAwakeningEffect()); getSpellAbility().addEffect(new LifecraftAwakeningEffect());
} }

View file

@ -62,8 +62,8 @@ class LightningRunnerEffect extends OneShotEffect {
LightningRunnerEffect() { LightningRunnerEffect() {
super(Outcome.Benefit); super(Outcome.Benefit);
staticText = "you get {E}{E}, then you may pay {E}{E}{E}{E}{E}{E}{E}{E}. If you do, " staticText = "you get {E}{E}, then you may pay {E}{E}{E}{E}{E}{E}{E}{E}. If you pay, "
+ "untap all creatures you control and after this phase, there is an additional combat phase"; + "untap all creatures you control, and after this phase, there is an additional combat phase";
} }
LightningRunnerEffect(final LightningRunnerEffect effect) { LightningRunnerEffect(final LightningRunnerEffect effect) {

View file

@ -1,7 +1,5 @@
package mage.cards.n; package mage.cards.n;
import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.common.EntersBattlefieldAbility;
import mage.abilities.condition.common.RevoltCondition; import mage.abilities.condition.common.RevoltCondition;
@ -14,8 +12,9 @@ import mage.constants.SubType;
import mage.counters.CounterType; import mage.counters.CounterType;
import mage.watchers.common.RevoltWatcher; import mage.watchers.common.RevoltWatcher;
import java.util.UUID;
/** /**
*
* @author fireshoes * @author fireshoes
*/ */
public final class NarnamRenegade extends CardImpl { public final class NarnamRenegade extends CardImpl {
@ -32,13 +31,11 @@ public final class NarnamRenegade extends CardImpl {
this.addAbility(DeathtouchAbility.getInstance()); this.addAbility(DeathtouchAbility.getInstance());
// <i>Revolt</i> &mdash; Narnam Renegade enters the battlefield with a +1/+1 counter on it if a permanent you controlled left this battlefield this turn. // <i>Revolt</i> &mdash; Narnam Renegade enters the battlefield with a +1/+1 counter on it if a permanent you controlled left this battlefield this turn.
this.addAbility( this.addAbility(new EntersBattlefieldAbility(
new EntersBattlefieldAbility( new AddCountersSourceEffect(CounterType.P1P1.createInstance()), false,
new AddCountersSourceEffect(CounterType.P1P1.createInstance()), RevoltCondition.instance, "<i>Revolt</i> &mdash; {this} enters the battlefield with " +
false, RevoltCondition.instance, "a +1/+1 counter on it if a permanent you controlled left the battlefield this turn.", null
"<i>Revolt</i> &mdash; {this} enters the battlefield with a +1/+1 counter on it if a permanent you controlled left the battlefield this turn", null), ), new RevoltWatcher());
new RevoltWatcher()
);
} }
private NarnamRenegade(final NarnamRenegade card) { private NarnamRenegade(final NarnamRenegade card) {

View file

@ -1,10 +1,6 @@
package mage.cards.n; package mage.cards.n;
import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.common.EntersBattlefieldAbility;
import mage.abilities.condition.common.RevoltCondition; import mage.abilities.condition.common.RevoltCondition;
import mage.abilities.effects.common.counter.AddCountersSourceEffect; import mage.abilities.effects.common.counter.AddCountersSourceEffect;
@ -16,6 +12,8 @@ import mage.constants.SubType;
import mage.counters.CounterType; import mage.counters.CounterType;
import mage.watchers.common.RevoltWatcher; import mage.watchers.common.RevoltWatcher;
import java.util.UUID;
/** /**
* @author JRHerlehy * @author JRHerlehy
*/ */
@ -34,11 +32,11 @@ public final class NightMarketAeronaut extends CardImpl {
// <i>Revolt</i> &mdash; Night Market Aeronaut enters the battlefield with a +1/+1 counter on it if // <i>Revolt</i> &mdash; Night Market Aeronaut enters the battlefield with a +1/+1 counter on it if
// a permanent you controlled left the battlefield this turn. // a permanent you controlled left the battlefield this turn.
Ability ability = new EntersBattlefieldAbility( this.addAbility(new EntersBattlefieldAbility(
new AddCountersSourceEffect(CounterType.P1P1.createInstance()), false, RevoltCondition.instance, new AddCountersSourceEffect(CounterType.P1P1.createInstance()), false,
"<i>Revolt</i> &mdash; {this} enters the battlefield with a +1/+1 counter on it if a permanent you controlled left the battlefield this turn", null); RevoltCondition.instance, "<i>Revolt</i> &mdash; {this} enters the battlefield with " +
ability.addWatcher(new RevoltWatcher()); "a +1/+1 counter on it if a permanent you controlled left the battlefield this turn.", null
this.addAbility(ability); ), new RevoltWatcher());
} }
private NightMarketAeronaut(final NightMarketAeronaut card) { private NightMarketAeronaut(final NightMarketAeronaut card) {

View file

@ -1,28 +1,31 @@
package mage.cards.p; package mage.cards.p;
import java.util.UUID;
import mage.abilities.common.SpellCastControllerTriggeredAbility; import mage.abilities.common.SpellCastControllerTriggeredAbility;
import mage.abilities.effects.common.UntapAllControllerEffect; import mage.abilities.effects.common.UntapAllControllerEffect;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SuperType; import mage.constants.SuperType;
import mage.filter.FilterPermanent;
import mage.filter.common.FilterNonlandPermanent; import mage.filter.common.FilterNonlandPermanent;
import java.util.UUID;
/** /**
*
* @author fireshoes * @author fireshoes
*/ */
public final class ParadoxEngine extends CardImpl { public final class ParadoxEngine extends CardImpl {
private static final FilterPermanent filter = new FilterNonlandPermanent("nonland permanents");
public ParadoxEngine(UUID ownerId, CardSetInfo setInfo) { public ParadoxEngine(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{5}"); super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{5}");
this.addSuperType(SuperType.LEGENDARY); this.addSuperType(SuperType.LEGENDARY);
// Whenever you cast a spell, untap all nonland permanents you control. // Whenever you cast a spell, untap all nonland permanents you control.
this.addAbility(new SpellCastControllerTriggeredAbility(new UntapAllControllerEffect(new FilterNonlandPermanent()), false)); this.addAbility(new SpellCastControllerTriggeredAbility(new UntapAllControllerEffect(filter), false));
} }
private ParadoxEngine(final ParadoxEngine card) { private ParadoxEngine(final ParadoxEngine card) {

View file

@ -1,7 +1,5 @@
package mage.cards.r; package mage.cards.r;
import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.common.EntersBattlefieldTriggeredAbility;
@ -12,15 +10,16 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.AbilityWord; import mage.constants.AbilityWord;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.ComparisonType; import mage.constants.ComparisonType;
import mage.constants.SubType;
import mage.filter.common.FilterPermanentCard; import mage.filter.common.FilterPermanentCard;
import mage.filter.predicate.mageobject.ManaValuePredicate; import mage.filter.predicate.mageobject.ManaValuePredicate;
import mage.target.common.TargetCardInYourGraveyard; import mage.target.common.TargetCardInYourGraveyard;
import mage.watchers.common.RevoltWatcher; import mage.watchers.common.RevoltWatcher;
import java.util.UUID;
/** /**
*
* @author fireshoes * @author fireshoes
*/ */
public final class RenegadeRallier extends CardImpl { public final class RenegadeRallier extends CardImpl {
@ -41,14 +40,13 @@ public final class RenegadeRallier extends CardImpl {
// <i>Revolt</i> &mdash; When Renegade Rallier enters the battlefield, if a permanent you controlled left the battlefield this turn, // <i>Revolt</i> &mdash; When Renegade Rallier enters the battlefield, if a permanent you controlled left the battlefield this turn,
// return target permanent card with converted mana cost 2 or less from your graveyard to your battlefield. // return target permanent card with converted mana cost 2 or less from your graveyard to your battlefield.
Ability ability = new ConditionalInterveningIfTriggeredAbility(new EntersBattlefieldTriggeredAbility( Ability ability = new ConditionalInterveningIfTriggeredAbility(
new ReturnFromGraveyardToBattlefieldTargetEffect(), false), RevoltCondition.instance, new EntersBattlefieldTriggeredAbility(new ReturnFromGraveyardToBattlefieldTargetEffect(), false),
"<i>Revolt</i> &mdash; When {this} enters the battlefield, if a permanent you controlled left" RevoltCondition.instance, "When {this} enters the battlefield, if a permanent you controlled " +
+ " the battlefield this turn, return target permanent card with mana value 2 or less from your graveyard to the battlefield."); "left the battlefield this turn, return target permanent card with mana value 2 or less from your graveyard to the battlefield."
ability.setAbilityWord(AbilityWord.REVOLT); ).setAbilityWord(AbilityWord.REVOLT);
ability.addTarget(new TargetCardInYourGraveyard(filter)); ability.addTarget(new TargetCardInYourGraveyard(filter));
ability.addWatcher(new RevoltWatcher()); this.addAbility(ability, new RevoltWatcher());
this.addAbility(ability);
} }
private RenegadeRallier(final RenegadeRallier card) { private RenegadeRallier(final RenegadeRallier card) {

View file

@ -5,6 +5,7 @@ import java.util.UUID;
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition; import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
import mage.abilities.decorator.ConditionalOneShotEffect; import mage.abilities.decorator.ConditionalOneShotEffect;
import mage.abilities.effects.common.DrawCardSourceControllerEffect; import mage.abilities.effects.common.DrawCardSourceControllerEffect;
import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect;
import mage.abilities.effects.common.ReturnToHandTargetEffect; import mage.abilities.effects.common.ReturnToHandTargetEffect;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
@ -23,7 +24,7 @@ public final class ResourcefulReturn extends CardImpl {
// Return target creature card from your graveyard to your hand. If you control an artifact, draw a card. // Return target creature card from your graveyard to your hand. If you control an artifact, draw a card.
this.getSpellAbility().addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_CREATURE_YOUR_GRAVEYARD)); this.getSpellAbility().addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_CREATURE_YOUR_GRAVEYARD));
this.getSpellAbility().addEffect(new ReturnToHandTargetEffect()); this.getSpellAbility().addEffect(new ReturnFromGraveyardToHandTargetEffect());
this.getSpellAbility().addEffect(new ConditionalOneShotEffect(new DrawCardSourceControllerEffect(1), this.getSpellAbility().addEffect(new ConditionalOneShotEffect(new DrawCardSourceControllerEffect(1),
new PermanentsOnTheBattlefieldCondition(StaticFilters.FILTER_CONTROLLED_PERMANENT_ARTIFACT), new PermanentsOnTheBattlefieldCondition(StaticFilters.FILTER_CONTROLLED_PERMANENT_ARTIFACT),
"If you control an artifact, draw a card")); "If you control an artifact, draw a card"));

View file

@ -1,20 +1,17 @@
package mage.cards.s; package mage.cards.s;
import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.AttacksTriggeredAbility; import mage.abilities.common.AttacksTriggeredAbility;
import mage.abilities.effects.common.ReturnToHandTargetEffect; import mage.abilities.effects.common.ReturnToHandChosenControlledPermanentEffect;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SubType; import mage.constants.SubType;
import mage.filter.common.FilterControlledArtifactPermanent; import mage.filter.StaticFilters;
import mage.target.common.TargetControlledPermanent;
import java.util.UUID;
/** /**
*
* @author fireshoes * @author fireshoes
*/ */
public final class SalvageScuttler extends CardImpl { public final class SalvageScuttler extends CardImpl {
@ -27,9 +24,9 @@ public final class SalvageScuttler extends CardImpl {
this.toughness = new MageInt(4); this.toughness = new MageInt(4);
// Whenever Salvage Scuttler attacks, return an artifact you control to its owner's hand. // Whenever Salvage Scuttler attacks, return an artifact you control to its owner's hand.
Ability ability = new AttacksTriggeredAbility(new ReturnToHandTargetEffect(), false); this.addAbility(new AttacksTriggeredAbility(
ability.addTarget(new TargetControlledPermanent(new FilterControlledArtifactPermanent("an artifact you control"))); new ReturnToHandChosenControlledPermanentEffect(StaticFilters.FILTER_CONTROLLED_PERMANENT_ARTIFACT)
this.addAbility(ability); ));
} }
private SalvageScuttler(final SalvageScuttler card) { private SalvageScuttler(final SalvageScuttler card) {

View file

@ -65,7 +65,7 @@ class ScroungingBandarEffect extends OneShotEffect {
public ScroungingBandarEffect() { public ScroungingBandarEffect() {
super(Outcome.Benefit); super(Outcome.Benefit);
this.staticText = "move any number of +1/+1 counters from Scrounging Bandar onto another target creature"; this.staticText = "you may move any number of +1/+1 counters from Scrounging Bandar onto another target creature";
} }
public ScroungingBandarEffect(final ScroungingBandarEffect effect) { public ScroungingBandarEffect(final ScroungingBandarEffect effect) {

View file

@ -47,7 +47,7 @@ class SecretSalvageEffect extends OneShotEffect {
public SecretSalvageEffect() { public SecretSalvageEffect() {
super(Outcome.DrawCard); super(Outcome.DrawCard);
staticText = "Exile target nonland card from your graveyard. Search your library for any number of cards with the same name as that card, " staticText = "Exile target nonland card from your graveyard. Search your library for any number of cards with the same name as that card, "
+ "reveal them, and put them into your hand. Then shuffle"; + "reveal them, put them into your hand, then shuffle";
} }
public SecretSalvageEffect(final SecretSalvageEffect effect) { public SecretSalvageEffect(final SecretSalvageEffect effect) {

View file

@ -35,7 +35,7 @@ public final class ShieldedAetherThief extends CardImpl {
this.addAbility(FlashAbility.getInstance()); this.addAbility(FlashAbility.getInstance());
// Whenever Shield Aether Thief blocks, you get {E}. // Whenever Shield Aether Thief blocks, you get {E}.
this.addAbility(new BlocksSourceTriggeredAbility(new GetEnergyCountersControllerEffect(1), false, true)); this.addAbility(new BlocksSourceTriggeredAbility(new GetEnergyCountersControllerEffect(1), false));
// {T}, Pay {E}{E}{E}: Draw a card. // {T}, Pay {E}{E}{E}: Draw a card.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DrawCardSourceControllerEffect(1), new TapSourceCost()); Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DrawCardSourceControllerEffect(1), new TapSourceCost());

View file

@ -23,7 +23,7 @@ import mage.target.TargetPermanent;
*/ */
public final class SiegeModification extends CardImpl { public final class SiegeModification extends CardImpl {
private static final FilterPermanent filter = new FilterPermanent("creature or vehicle"); private static final FilterPermanent filter = new FilterPermanent("creature or Vehicle");
static { static {
filter.add(Predicates.or(CardType.CREATURE.getPredicate(), filter.add(Predicates.or(CardType.CREATURE.getPredicate(),

View file

@ -1,9 +1,6 @@
package mage.cards.s; package mage.cards.s;
import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.common.EntersBattlefieldTriggeredAbility;
import mage.abilities.condition.common.RevoltCondition; import mage.abilities.condition.common.RevoltCondition;
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility; import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
@ -16,6 +13,8 @@ import mage.constants.CardType;
import mage.constants.SubType; import mage.constants.SubType;
import mage.watchers.common.RevoltWatcher; import mage.watchers.common.RevoltWatcher;
import java.util.UUID;
/** /**
* @author JRHerlehy * @author JRHerlehy
*/ */
@ -33,14 +32,11 @@ public final class SilkweaverElite extends CardImpl {
this.addAbility(ReachAbility.getInstance()); this.addAbility(ReachAbility.getInstance());
// <i>Revolt</i> &mdash; When Silkweaver Elite enters the battlefield, if a permanent you controlled left the battlefield this turn, draw a card. // <i>Revolt</i> &mdash; When Silkweaver Elite enters the battlefield, if a permanent you controlled left the battlefield this turn, draw a card.
Ability ability = new ConditionalInterveningIfTriggeredAbility(new EntersBattlefieldTriggeredAbility( this.addAbility(new ConditionalInterveningIfTriggeredAbility(
new DrawCardSourceControllerEffect(1), false), RevoltCondition.instance, new EntersBattlefieldTriggeredAbility(new DrawCardSourceControllerEffect(1), false),
"<i>Revolt</i> &mdash; When {this} enters the battlefield, if a permanent you controlled left" RevoltCondition.instance, "When {this} enters the battlefield, " +
+ " the battlefield this turn, draw a card."); "if a permanent you controlled left the battlefield this turn, draw a card."
ability.setAbilityWord(AbilityWord.REVOLT); ).setAbilityWord(AbilityWord.REVOLT), new RevoltWatcher());
ability.addWatcher(new RevoltWatcher());
this.addAbility(ability);
} }
private SilkweaverElite(final SilkweaverElite card) { private SilkweaverElite(final SilkweaverElite card) {

View file

@ -2,20 +2,18 @@ package mage.cards.t;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.LoyaltyAbility; import mage.abilities.LoyaltyAbility;
import mage.abilities.dynamicvalue.DynamicValue; import mage.abilities.dynamicvalue.common.ArtifactYouControlCount;
import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount;
import mage.abilities.effects.ContinuousEffect; import mage.abilities.effects.ContinuousEffect;
import mage.abilities.effects.ContinuousEffectImpl; import mage.abilities.effects.ContinuousEffectImpl;
import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.LoseLifeTargetEffect; import mage.abilities.effects.common.LoseLifeTargetEffect;
import mage.abilities.effects.common.RevealCardsFromLibraryUntilEffect; import mage.abilities.effects.common.RevealCardsFromLibraryUntilEffect;
import mage.abilities.hint.ValueHint; import mage.abilities.hint.common.ArtifactYouControlHint;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.*; import mage.constants.*;
import mage.filter.FilterPermanent; import mage.filter.FilterPermanent;
import mage.filter.common.FilterArtifactCard; import mage.filter.StaticFilters;
import mage.filter.common.FilterControlledArtifactPermanent;
import mage.filter.predicate.Predicates; import mage.filter.predicate.Predicates;
import mage.game.Game; import mage.game.Game;
import mage.game.permanent.Permanent; import mage.game.permanent.Permanent;
@ -38,13 +36,12 @@ public final class TezzeretMasterOfMetal extends CardImpl {
this.setStartingLoyalty(5); this.setStartingLoyalty(5);
// +1: Reveal cards from the top of your library until you reveal an artifact card. Put that card into your hand and the rest on the bottom of your library in a random order. // +1: Reveal cards from the top of your library until you reveal an artifact card. Put that card into your hand and the rest on the bottom of your library in a random order.
this.addAbility(new LoyaltyAbility(new RevealCardsFromLibraryUntilEffect(new FilterArtifactCard(), Zone.HAND, Zone.LIBRARY), 1)); this.addAbility(new LoyaltyAbility(new RevealCardsFromLibraryUntilEffect(StaticFilters.FILTER_CARD_ARTIFACT, Zone.HAND, Zone.LIBRARY), 1));
// -3: Target opponent loses life equal to the number of artifacts you control. // -3: Target opponent loses life equal to the number of artifacts you control.
DynamicValue xValue = new PermanentsOnBattlefieldCount(new FilterControlledArtifactPermanent()); Ability ability = new LoyaltyAbility(new LoseLifeTargetEffect(ArtifactYouControlCount.instance).setText("target opponent loses life equal to the number of artifacts you control"), -3);
Ability ability = new LoyaltyAbility(new LoseLifeTargetEffect(xValue), -3);
ability.addTarget(new TargetOpponent()); ability.addTarget(new TargetOpponent());
ability.addHint(new ValueHint("Artifacts you control", xValue)); ability.addHint(ArtifactYouControlHint.instance);
this.addAbility(ability); this.addAbility(ability);
// -8: Gain control of all artifacts and creatures target opponent controls. // -8: Gain control of all artifacts and creatures target opponent controls.

View file

@ -1,7 +1,6 @@
package mage.cards.t; package mage.cards.t;
import java.util.UUID;
import mage.abilities.effects.common.DestroyTargetEffect; import mage.abilities.effects.common.DestroyTargetEffect;
import mage.abilities.effects.common.search.SearchLibraryGraveyardPutInHandEffect; import mage.abilities.effects.common.search.SearchLibraryGraveyardPutInHandEffect;
import mage.cards.CardImpl; import mage.cards.CardImpl;
@ -11,8 +10,9 @@ import mage.filter.FilterCard;
import mage.filter.predicate.mageobject.NamePredicate; import mage.filter.predicate.mageobject.NamePredicate;
import mage.target.common.TargetCreaturePermanent; import mage.target.common.TargetCreaturePermanent;
import java.util.UUID;
/** /**
*
* @author fireshoes * @author fireshoes
*/ */
public final class TezzeretsBetrayal extends CardImpl { public final class TezzeretsBetrayal extends CardImpl {
@ -32,7 +32,7 @@ public final class TezzeretsBetrayal extends CardImpl {
// You may search your library and/or graveyard for a card named Tezzeret, Master of Metal, reveal it, and put it into your hand. // You may search your library and/or graveyard for a card named Tezzeret, Master of Metal, reveal it, and put it into your hand.
// If you search your library this way, shuffle it. // If you search your library this way, shuffle it.
getSpellAbility().addEffect(new SearchLibraryGraveyardPutInHandEffect(filter)); getSpellAbility().addEffect(new SearchLibraryGraveyardPutInHandEffect(filter, false, true));
} }
private TezzeretsBetrayal(final TezzeretsBetrayal card) { private TezzeretsBetrayal(final TezzeretsBetrayal card) {

View file

@ -1,21 +1,20 @@
package mage.cards.t; package mage.cards.t;
import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.common.EntersBattlefieldTriggeredAbility;
import mage.abilities.effects.common.search.SearchLibraryPutInHandEffect; import mage.abilities.effects.common.search.SearchLibraryPutInHandEffect;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.ComparisonType; import mage.constants.ComparisonType;
import mage.constants.SubType;
import mage.filter.FilterCard; import mage.filter.FilterCard;
import mage.filter.predicate.mageobject.ManaValuePredicate; import mage.filter.predicate.mageobject.ManaValuePredicate;
import mage.target.common.TargetCardInLibrary; import mage.target.common.TargetCardInLibrary;
import java.util.UUID;
/** /**
*
* @author Styxo * @author Styxo
*/ */
public final class TrophyMage extends CardImpl { public final class TrophyMage extends CardImpl {
@ -36,7 +35,9 @@ public final class TrophyMage extends CardImpl {
this.toughness = new MageInt(2); this.toughness = new MageInt(2);
// When Trophy Mage enters the battlefield, you may search your library for an artifact card with converted mana cost 3, reveal it, put it into your hand, then shuffle your library. // When Trophy Mage enters the battlefield, you may search your library for an artifact card with converted mana cost 3, reveal it, put it into your hand, then shuffle your library.
this.addAbility(new EntersBattlefieldTriggeredAbility(new SearchLibraryPutInHandEffect(new TargetCardInLibrary(0, 1, filter), true, true), true)); this.addAbility(new EntersBattlefieldTriggeredAbility(new SearchLibraryPutInHandEffect(
new TargetCardInLibrary(filter), true, true
), true));
} }
private TrophyMage(final TrophyMage card) { private TrophyMage(final TrophyMage card) {

View file

@ -30,7 +30,7 @@ public final class UntetheredExpress extends CardImpl {
this.addAbility(TrampleAbility.getInstance()); this.addAbility(TrampleAbility.getInstance());
// Whenever Untethered Express attacks, put a +1/+1 counter on it. // Whenever Untethered Express attacks, put a +1/+1 counter on it.
this.addAbility(new AttacksTriggeredAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance()), false)); this.addAbility(new AttacksTriggeredAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance()).setText("put a +1/+1 counter on it"), false));
// Crew 1 // Crew 1
this.addAbility(new CrewAbility(1)); this.addAbility(new CrewAbility(1));

View file

@ -1,7 +1,5 @@
package mage.cards.y; package mage.cards.y;
import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.common.DiesCreatureTriggeredAbility; import mage.abilities.common.DiesCreatureTriggeredAbility;
import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SimpleActivatedAbility;
@ -13,17 +11,16 @@ import mage.abilities.keyword.IndestructibleAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.Duration; import mage.constants.Duration;
import mage.constants.SubType;
import mage.constants.SuperType; import mage.constants.SuperType;
import mage.constants.Zone;
import mage.counters.CounterType; import mage.counters.CounterType;
import mage.filter.StaticFilters; import mage.filter.StaticFilters;
import mage.filter.common.FilterOpponentsCreaturePermanent;
import mage.target.common.TargetControlledPermanent; import mage.target.common.TargetControlledPermanent;
import java.util.UUID;
/** /**
*
* @author fireshoes * @author fireshoes
*/ */
public final class YahenniUndyingPartisan extends CardImpl { public final class YahenniUndyingPartisan extends CardImpl {
@ -41,14 +38,16 @@ public final class YahenniUndyingPartisan extends CardImpl {
this.addAbility(HasteAbility.getInstance()); this.addAbility(HasteAbility.getInstance());
// Whenever a creature an opponent controls dies, put a +1/+1 counter on Yahenni, Undying Partisan. // Whenever a creature an opponent controls dies, put a +1/+1 counter on Yahenni, Undying Partisan.
this.addAbility(new DiesCreatureTriggeredAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance()), false, new FilterOpponentsCreaturePermanent())); this.addAbility(new DiesCreatureTriggeredAbility(
new AddCountersSourceEffect(CounterType.P1P1.createInstance()),
false, StaticFilters.FILTER_OPPONENTS_PERMANENT_A_CREATURE
));
// Sacrifice another creature: Yahenni gains indestructible until end of turn. // Sacrifice another creature: Yahenni gains indestructible until end of turn.
this.addAbility(new SimpleActivatedAbility( this.addAbility(new SimpleActivatedAbility(
Zone.BATTLEFIELD,
new GainAbilitySourceEffect(IndestructibleAbility.getInstance(), Duration.EndOfTurn), new GainAbilitySourceEffect(IndestructibleAbility.getInstance(), Duration.EndOfTurn),
new SacrificeTargetCost(new TargetControlledPermanent(StaticFilters.FILTER_CONTROLLED_ANOTHER_CREATURE))) new SacrificeTargetCost(new TargetControlledPermanent(StaticFilters.FILTER_CONTROLLED_ANOTHER_CREATURE))
); ));
} }
private YahenniUndyingPartisan(final YahenniUndyingPartisan card) { private YahenniUndyingPartisan(final YahenniUndyingPartisan card) {

View file

@ -62,7 +62,7 @@ public class VerifyCardDataTest {
private static final Logger logger = Logger.getLogger(VerifyCardDataTest.class); private static final Logger logger = Logger.getLogger(VerifyCardDataTest.class);
private static final String FULL_ABILITIES_CHECK_SET_CODE = "SLD"; // check all abilities and output cards with wrong abilities texts; private static final String FULL_ABILITIES_CHECK_SET_CODE = "AER"; // check all abilities and output cards with wrong abilities texts;
private static final boolean AUTO_FIX_SAMPLE_DECKS = false; // debug only: auto-fix sample decks by test_checkSampleDecks test run private static final boolean AUTO_FIX_SAMPLE_DECKS = false; // debug only: auto-fix sample decks by test_checkSampleDecks test run
private static final boolean ONLY_TEXT = false; // use when checking text locally, suppresses unnecessary checks and output messages private static final boolean ONLY_TEXT = false; // use when checking text locally, suppresses unnecessary checks and output messages

View file

@ -138,7 +138,7 @@ public class DiesAttachedTriggeredAbility extends TriggeredAbilityImpl {
if (diesRuleText) { if (diesRuleText) {
sb.append(" dies, "); sb.append(" dies, ");
} else { } else {
sb.append(" is put into graveyard, "); sb.append(" is put into a graveyard, ");
} }
return sb.toString(); return sb.toString();
} }

View file

@ -49,7 +49,7 @@ public class PayEnergyCost extends CostImpl {
} }
private void setText() { private void setText() {
StringBuilder sb = new StringBuilder("Pay "); StringBuilder sb = new StringBuilder("pay ");
for (int i = 0; i < amount; i++) { for (int i = 0; i < amount; i++) {
sb.append("{E}"); sb.append("{E}");
} }

View file

@ -1,8 +1,8 @@
package mage.abilities.effects.common; package mage.abilities.effects.common;
import mage.MageObject; import mage.MageObject;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.Mode;
import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.OneShotEffect;
import mage.cards.Card; import mage.cards.Card;
import mage.cards.Cards; import mage.cards.Cards;
@ -13,18 +13,18 @@ import mage.filter.FilterCard;
import mage.game.Game; import mage.game.Game;
import mage.players.Library; import mage.players.Library;
import mage.players.Player; import mage.players.Player;
import mage.util.CardUtil;
/** /**
*
* @author Styxo * @author Styxo
*/ */
public class RevealCardsFromLibraryUntilEffect extends OneShotEffect { public class RevealCardsFromLibraryUntilEffect extends OneShotEffect {
private FilterCard filter; private final FilterCard filter;
private Zone zoneToPutRest; private final Zone zoneToPutRest;
private Zone zoneToPutCard; private final Zone zoneToPutCard;
private boolean shuffleRestInto; private final boolean shuffleRestInto;
private boolean anyOrder; private final boolean anyOrder;
public RevealCardsFromLibraryUntilEffect(FilterCard filter, Zone zoneToPutCard, Zone zoneToPutRest) { public RevealCardsFromLibraryUntilEffect(FilterCard filter, Zone zoneToPutCard, Zone zoneToPutRest) {
this(filter, zoneToPutCard, zoneToPutRest, false, false); this(filter, zoneToPutCard, zoneToPutRest, false, false);
@ -41,17 +41,15 @@ public class RevealCardsFromLibraryUntilEffect extends OneShotEffect {
this.zoneToPutRest = zoneToPutRest; this.zoneToPutRest = zoneToPutRest;
this.shuffleRestInto = shuffleRestInto; this.shuffleRestInto = shuffleRestInto;
this.anyOrder = anyOrder; this.anyOrder = anyOrder;
setText();
} }
public RevealCardsFromLibraryUntilEffect(final RevealCardsFromLibraryUntilEffect effect) { private RevealCardsFromLibraryUntilEffect(final RevealCardsFromLibraryUntilEffect effect) {
super(effect); super(effect);
this.filter = effect.filter; this.filter = effect.filter;
this.zoneToPutCard = effect.zoneToPutCard; this.zoneToPutCard = effect.zoneToPutCard;
this.zoneToPutRest = effect.zoneToPutRest; this.zoneToPutRest = effect.zoneToPutRest;
this.shuffleRestInto = effect.shuffleRestInto; this.shuffleRestInto = effect.shuffleRestInto;
this.anyOrder = effect.anyOrder; this.anyOrder = effect.anyOrder;
setText();
} }
@Override @Override
@ -63,50 +61,54 @@ public class RevealCardsFromLibraryUntilEffect extends OneShotEffect {
public boolean apply(Game game, Ability source) { public boolean apply(Game game, Ability source) {
Player controller = game.getPlayer(source.getControllerId()); Player controller = game.getPlayer(source.getControllerId());
MageObject sourceObject = game.getObject(source.getSourceId()); MageObject sourceObject = game.getObject(source.getSourceId());
if (controller != null && controller.getLibrary().hasCards()) { if (controller == null || !controller.getLibrary().hasCards()) {
Cards cards = new CardsImpl(); return false;
Library library = controller.getLibrary(); }
Card card = null; Cards cards = new CardsImpl();
do { Library library = controller.getLibrary();
card = library.removeFromTop(game); Card card = null;
if (card != null) { do {
cards.add(card); card = library.removeFromTop(game);
} if (card != null) {
} while (library.hasCards() && !filter.match(card, game)); cards.add(card);
// reveal cards
if (!cards.isEmpty()) {
controller.revealCards(sourceObject.getIdName(), cards, game);
if (filter.match(card, game)) {
// put card in correct zone
controller.moveCards(card, zoneToPutCard, source, game);
// remove it from revealed card list
cards.remove(card);
}
// Put the rest in correct zone
switch (zoneToPutRest) {
case LIBRARY: {
if (!cards.isEmpty()) {
if (shuffleRestInto) {
library.addAll(cards.getCards(game), game);
} else {
controller.putCardsOnBottomOfLibrary(cards, game, source, anyOrder);
}
}
break;
}
default:
if (!cards.isEmpty()) {
controller.moveCards(cards, zoneToPutRest, source, game);
}
}
} }
} while (library.hasCards() && !filter.match(card, game));
// reveal cards
if (cards.isEmpty()) {
return true; return true;
} }
return false; controller.revealCards(sourceObject.getIdName(), cards, game);
if (filter.match(card, game)) {
// put card in correct zone
controller.moveCards(card, zoneToPutCard, source, game);
// remove it from revealed card list
cards.remove(card);
}
// Put the rest in correct zone
if (zoneToPutRest == Zone.LIBRARY) {
if (!cards.isEmpty()) {
if (shuffleRestInto) {
library.addAll(cards.getCards(game), game);
} else {
controller.putCardsOnBottomOfLibrary(cards, game, source, anyOrder);
}
}
} else {
if (!cards.isEmpty()) {
controller.moveCards(cards, zoneToPutRest, source, game);
}
}
return true;
} }
private void setText() { @Override
StringBuilder sb = new StringBuilder("reveal cards from the top of your library until you reveal a " + filter.getMessage() + ". Put that card "); public String getText(Mode mode) {
if (staticText != null && !staticText.isEmpty()) {
return staticText;
}
StringBuilder sb = new StringBuilder("reveal cards from the top of your library until you reveal ");
sb.append(CardUtil.addArticle(filter.getMessage()));
sb.append(". Put that card ");
switch (zoneToPutCard) { switch (zoneToPutCard) {
case HAND: { case HAND: {
@ -144,6 +146,6 @@ public class RevealCardsFromLibraryUntilEffect extends OneShotEffect {
break; break;
} }
} }
staticText = sb.toString(); return sb.toString();
} }
} }

View file

@ -16,7 +16,7 @@ import mage.constants.Zone;
public final class EtheriumCellToken extends TokenImpl { public final class EtheriumCellToken extends TokenImpl {
public EtheriumCellToken() { public EtheriumCellToken() {
super("Etherium Cell", "colorless artifact token named Etherium Cell which has \"{T}, Sacrifice this artifact: Add one mana of any color.\""); super("Etherium Cell", "colorless artifact token named Etherium Cell with \"{T}, Sacrifice this artifact: Add one mana of any color.\"");
this.setOriginalExpansionSetCode("AER"); this.setOriginalExpansionSetCode("AER");
cardType.add(CardType.ARTIFACT); cardType.add(CardType.ARTIFACT);