diff --git a/Mage.Sets/src/mage/cards/a/AerialModification.java b/Mage.Sets/src/mage/cards/a/AerialModification.java
index f31af209783..83aacbb8bf2 100644
--- a/Mage.Sets/src/mage/cards/a/AerialModification.java
+++ b/Mage.Sets/src/mage/cards/a/AerialModification.java
@@ -24,7 +24,7 @@ import mage.target.TargetPermanent;
*/
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 {
filter.add(Predicates.or(CardType.CREATURE.getPredicate(),
diff --git a/Mage.Sets/src/mage/cards/a/AetherChaser.java b/Mage.Sets/src/mage/cards/a/AetherChaser.java
index b6fa2065f94..7e13cf0556a 100644
--- a/Mage.Sets/src/mage/cards/a/AetherChaser.java
+++ b/Mage.Sets/src/mage/cards/a/AetherChaser.java
@@ -36,8 +36,7 @@ public final class AetherChaser extends CardImpl {
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.
- this.addAbility(new AttacksTriggeredAbility(new DoIfCostPaid(new CreateTokenEffect(new ServoToken()), new PayEnergyCost(2)), false,
- "Whenever {this} 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))));
}
private AetherChaser(final AetherChaser card) {
diff --git a/Mage.Sets/src/mage/cards/a/AetherHerder.java b/Mage.Sets/src/mage/cards/a/AetherHerder.java
index dfb7b51e861..63653549124 100644
--- a/Mage.Sets/src/mage/cards/a/AetherHerder.java
+++ b/Mage.Sets/src/mage/cards/a/AetherHerder.java
@@ -34,8 +34,7 @@ public final class AetherHerder extends CardImpl {
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.
- this.addAbility(new AttacksTriggeredAbility(new DoIfCostPaid(new CreateTokenEffect(new ServoToken()), new PayEnergyCost(2)), false,
- "Whenever {this} 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))));
}
private AetherHerder(final AetherHerder card) {
diff --git a/Mage.Sets/src/mage/cards/a/AetherInspector.java b/Mage.Sets/src/mage/cards/a/AetherInspector.java
index 6ba31ee9731..6ea57c07011 100644
--- a/Mage.Sets/src/mage/cards/a/AetherInspector.java
+++ b/Mage.Sets/src/mage/cards/a/AetherInspector.java
@@ -36,8 +36,7 @@ public final class AetherInspector extends CardImpl {
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.
- this.addAbility(new AttacksTriggeredAbility(new DoIfCostPaid(new CreateTokenEffect(new ServoToken()), new PayEnergyCost(2)), false,
- "Whenever {this} 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))));
}
private AetherInspector(final AetherInspector card) {
diff --git a/Mage.Sets/src/mage/cards/a/AetherSwooper.java b/Mage.Sets/src/mage/cards/a/AetherSwooper.java
index ad7cf1aab47..5aa40c707dd 100644
--- a/Mage.Sets/src/mage/cards/a/AetherSwooper.java
+++ b/Mage.Sets/src/mage/cards/a/AetherSwooper.java
@@ -37,8 +37,7 @@ public final class AetherSwooper extends CardImpl {
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.
- this.addAbility(new AttacksTriggeredAbility(new DoIfCostPaid(new CreateTokenEffect(new ServoToken()), new PayEnergyCost(2)), false,
- "Whenever {this} 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))));
}
private AetherSwooper(final AetherSwooper card) {
diff --git a/Mage.Sets/src/mage/cards/a/AetherstreamLeopard.java b/Mage.Sets/src/mage/cards/a/AetherstreamLeopard.java
index e10a8848419..7c63853017f 100644
--- a/Mage.Sets/src/mage/cards/a/AetherstreamLeopard.java
+++ b/Mage.Sets/src/mage/cards/a/AetherstreamLeopard.java
@@ -1,7 +1,5 @@
-
package mage.cards.a;
-import java.util.UUID;
import mage.MageInt;
import mage.abilities.common.AttacksTriggeredAbility;
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
@@ -16,8 +14,9 @@ import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.SubType;
+import java.util.UUID;
+
/**
- *
* @author fireshoes
*/
public final class AetherstreamLeopard extends CardImpl {
@@ -36,8 +35,9 @@ public final class AetherstreamLeopard extends CardImpl {
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.
- this.addAbility(new AttacksTriggeredAbility(new DoIfCostPaid(new BoostSourceEffect(2, 0, Duration.EndOfTurn), new PayEnergyCost(1)), false,
- "Whenever {this} 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
+ ).setText("it gets +2/+0 until end of turn"), new PayEnergyCost(1))));
}
private AetherstreamLeopard(final AetherstreamLeopard card) {
diff --git a/Mage.Sets/src/mage/cards/a/AidFromTheCowl.java b/Mage.Sets/src/mage/cards/a/AidFromTheCowl.java
index adfcd640ca9..5794ef89141 100644
--- a/Mage.Sets/src/mage/cards/a/AidFromTheCowl.java
+++ b/Mage.Sets/src/mage/cards/a/AidFromTheCowl.java
@@ -25,7 +25,7 @@ import mage.watchers.common.RevoltWatcher;
public final class AidFromTheCowl extends CardImpl {
private static final String ruleText = "Revolt — 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) {
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{3}{G}{G}");
diff --git a/Mage.Sets/src/mage/cards/a/AirdropAeronauts.java b/Mage.Sets/src/mage/cards/a/AirdropAeronauts.java
index a60bbe3aef9..d62249d4086 100644
--- a/Mage.Sets/src/mage/cards/a/AirdropAeronauts.java
+++ b/Mage.Sets/src/mage/cards/a/AirdropAeronauts.java
@@ -1,7 +1,5 @@
-
package mage.cards.a;
-import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
@@ -16,8 +14,9 @@ import mage.constants.CardType;
import mage.constants.SubType;
import mage.watchers.common.RevoltWatcher;
+import java.util.UUID;
+
/**
- *
* @author Styxo
*/
public final class AirdropAeronauts extends CardImpl {
@@ -34,10 +33,10 @@ public final class AirdropAeronauts extends CardImpl {
this.addAbility(FlyingAbility.getInstance());
// Revolt — 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(
- new GainLifeEffect(5), false), RevoltCondition.instance,
- "Revolt — When {this} enters the battlefield, if a permanent you controlled left"
- + " the battlefield this turn, you gain 5 life."
+ Ability ability = new ConditionalInterveningIfTriggeredAbility(
+ new EntersBattlefieldTriggeredAbility(new GainLifeEffect(5), false),
+ RevoltCondition.instance, "When {this} enters the battlefield, " +
+ "if a permanent you controlled left the battlefield this turn, you gain 5 life."
);
ability.setAbilityWord(AbilityWord.REVOLT);
this.addAbility(ability, new RevoltWatcher());
diff --git a/Mage.Sets/src/mage/cards/a/AjaniUnyielding.java b/Mage.Sets/src/mage/cards/a/AjaniUnyielding.java
index a6c189f003f..786318a9df8 100644
--- a/Mage.Sets/src/mage/cards/a/AjaniUnyielding.java
+++ b/Mage.Sets/src/mage/cards/a/AjaniUnyielding.java
@@ -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.
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);
}
diff --git a/Mage.Sets/src/mage/cards/c/CaughtInTheBrights.java b/Mage.Sets/src/mage/cards/c/CaughtInTheBrights.java
index 8a5e6d559d9..cb593ab1d96 100644
--- a/Mage.Sets/src/mage/cards/c/CaughtInTheBrights.java
+++ b/Mage.Sets/src/mage/cards/c/CaughtInTheBrights.java
@@ -44,7 +44,7 @@ public final class CaughtInTheBrights extends CardImpl {
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new CantAttackBlockAttachedEffect(AttachmentType.AURA)));
// 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) {
diff --git a/Mage.Sets/src/mage/cards/c/CountlessGearsRenegade.java b/Mage.Sets/src/mage/cards/c/CountlessGearsRenegade.java
index 374e9212c7a..96974b33217 100644
--- a/Mage.Sets/src/mage/cards/c/CountlessGearsRenegade.java
+++ b/Mage.Sets/src/mage/cards/c/CountlessGearsRenegade.java
@@ -1,7 +1,5 @@
-
package mage.cards.c;
-import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
@@ -16,6 +14,8 @@ import mage.constants.SubType;
import mage.game.permanent.token.ServoToken;
import mage.watchers.common.RevoltWatcher;
+import java.util.UUID;
+
/**
* @author JRHerlehy
*/
@@ -31,13 +31,13 @@ public final class CountlessGearsRenegade extends CardImpl {
// Revolt — 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.
- Ability ability = new ConditionalInterveningIfTriggeredAbility(new EntersBattlefieldTriggeredAbility(
- new CreateTokenEffect(new ServoToken(), 1), false), RevoltCondition.instance,
- "Revolt — When {this} enters the battlefield, if a permanent you controlled left"
- + " the battlefield this turn, create a 1/1 colorless Servo artifact creature token.");
+ Ability ability = new ConditionalInterveningIfTriggeredAbility(
+ new EntersBattlefieldTriggeredAbility(new CreateTokenEffect(new ServoToken()), false),
+ RevoltCondition.instance, "When {this} enters the battlefield, if a permanent you controlled " +
+ "left the battlefield this turn, create a 1/1 colorless Servo artifact creature token."
+ );
ability.setAbilityWord(AbilityWord.REVOLT);
- ability.addWatcher(new RevoltWatcher());
- this.addAbility(ability);
+ this.addAbility(ability, new RevoltWatcher());
}
private CountlessGearsRenegade(final CountlessGearsRenegade card) {
diff --git a/Mage.Sets/src/mage/cards/d/DarkIntimations.java b/Mage.Sets/src/mage/cards/d/DarkIntimations.java
index 2397f33cafa..947dff69c8b 100644
--- a/Mage.Sets/src/mage/cards/d/DarkIntimations.java
+++ b/Mage.Sets/src/mage/cards/d/DarkIntimations.java
@@ -48,7 +48,7 @@ public final class DarkIntimations extends CardImpl {
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.
- 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) {
diff --git a/Mage.Sets/src/mage/cards/d/DeadeyeHarpooner.java b/Mage.Sets/src/mage/cards/d/DeadeyeHarpooner.java
index 05ea3661bb7..f6912f11f9d 100644
--- a/Mage.Sets/src/mage/cards/d/DeadeyeHarpooner.java
+++ b/Mage.Sets/src/mage/cards/d/DeadeyeHarpooner.java
@@ -1,7 +1,5 @@
-
package mage.cards.d;
-import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
@@ -13,18 +11,21 @@ import mage.cards.CardSetInfo;
import mage.constants.AbilityWord;
import mage.constants.CardType;
import mage.constants.SubType;
+import mage.filter.FilterPermanent;
import mage.filter.common.FilterOpponentsCreaturePermanent;
import mage.filter.predicate.permanent.TappedPredicate;
-import mage.target.common.TargetOpponentsCreaturePermanent;
+import mage.target.TargetPermanent;
import mage.watchers.common.RevoltWatcher;
+import java.util.UUID;
+
/**
- *
* @author Styxo
*/
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 {
filter.add(TappedPredicate.TAPPED);
@@ -39,15 +40,14 @@ public final class DeadeyeHarpooner extends CardImpl {
this.toughness = new MageInt(2);
// Revolt — 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(
- new DestroyTargetEffect(), false), RevoltCondition.instance,
- "Revolt — When {this} 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(new DestroyTargetEffect(), false),
+ RevoltCondition.instance, "When {this} enters the battlefield, if a permanent you controlled " +
+ "left the battlefield this turn, destroy target tapped creature an opponent controls."
);
ability.setAbilityWord(AbilityWord.REVOLT);
- ability.addTarget(new TargetOpponentsCreaturePermanent(filter));
- ability.addWatcher(new RevoltWatcher());
- this.addAbility(ability);
+ ability.addTarget(new TargetPermanent(filter));
+ this.addAbility(ability, new RevoltWatcher());
}
private DeadeyeHarpooner(final DeadeyeHarpooner card) {
diff --git a/Mage.Sets/src/mage/cards/f/FelidarGuardian.java b/Mage.Sets/src/mage/cards/f/FelidarGuardian.java
index 155d6d53fa7..5bb596028b0 100644
--- a/Mage.Sets/src/mage/cards/f/FelidarGuardian.java
+++ b/Mage.Sets/src/mage/cards/f/FelidarGuardian.java
@@ -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.
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));
this.addAbility(ability);
}
diff --git a/Mage.Sets/src/mage/cards/f/FourthBridgeProwler.java b/Mage.Sets/src/mage/cards/f/FourthBridgeProwler.java
index 12f1e809726..8c7ea0c9779 100644
--- a/Mage.Sets/src/mage/cards/f/FourthBridgeProwler.java
+++ b/Mage.Sets/src/mage/cards/f/FourthBridgeProwler.java
@@ -1,21 +1,18 @@
-
package mage.cards.f;
-import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
-import mage.abilities.effects.Effect;
import mage.abilities.effects.common.continuous.BoostTargetEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
-import mage.constants.Duration;
import mage.target.common.TargetCreaturePermanent;
+import java.util.UUID;
+
/**
- *
* @author LevelX2
*/
public final class FourthBridgeProwler extends CardImpl {
@@ -29,9 +26,8 @@ public final class FourthBridgeProwler extends CardImpl {
this.toughness = new MageInt(1);
// 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);
- effect.setText("have target creature get -1/-1 until end of turn");
- Ability ability = new EntersBattlefieldTriggeredAbility(effect, true);
+ Ability ability = new EntersBattlefieldTriggeredAbility(new BoostTargetEffect(-1, -1)
+ .setText("you may have target creature get -1/-1 until end of turn"), true);
ability.addTarget(new TargetCreaturePermanent());
this.addAbility(ability);
}
diff --git a/Mage.Sets/src/mage/cards/g/GlintSleeveSiphoner.java b/Mage.Sets/src/mage/cards/g/GlintSleeveSiphoner.java
index dad8c4c9ba7..fb07399e7bc 100644
--- a/Mage.Sets/src/mage/cards/g/GlintSleeveSiphoner.java
+++ b/Mage.Sets/src/mage/cards/g/GlintSleeveSiphoner.java
@@ -4,7 +4,6 @@ import mage.MageInt;
import mage.abilities.common.BeginningOfUpkeepTriggeredAbility;
import mage.abilities.common.EntersBattlefieldOrAttacksSourceTriggeredAbility;
import mage.abilities.costs.common.PayEnergyCost;
-import mage.abilities.effects.Effect;
import mage.abilities.effects.common.DoIfCostPaid;
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
import mage.abilities.effects.common.LoseLifeSourceControllerEffect;
@@ -15,7 +14,6 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.TargetController;
-import mage.constants.Zone;
import java.util.UUID;
@@ -39,11 +37,9 @@ public final class GlintSleeveSiphoner extends CardImpl {
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.
- DoIfCostPaid doIfCostPaidEffect = new DoIfCostPaid(new DrawCardSourceControllerEffect(1), new PayEnergyCost(2));
- Effect effect = new LoseLifeSourceControllerEffect(1);
- doIfCostPaidEffect.addEffect(effect.concatBy("and"));
- this.addAbility(new BeginningOfUpkeepTriggeredAbility(Zone.BATTLEFIELD, doIfCostPaidEffect, TargetController.YOU, false, false,
- "At the beginning of your upkeep, "));
+ this.addAbility(new BeginningOfUpkeepTriggeredAbility(new DoIfCostPaid(
+ new DrawCardSourceControllerEffect(1).setText("you draw a card"), new PayEnergyCost(2)
+ ).addEffect(new LoseLifeSourceControllerEffect(1).concatBy("and")), TargetController.YOU, false));
}
private GlintSleeveSiphoner(final GlintSleeveSiphoner card) {
diff --git a/Mage.Sets/src/mage/cards/g/GremlinInfestation.java b/Mage.Sets/src/mage/cards/g/GremlinInfestation.java
index c99b79595aa..d0b7af76ebb 100644
--- a/Mage.Sets/src/mage/cards/g/GremlinInfestation.java
+++ b/Mage.Sets/src/mage/cards/g/GremlinInfestation.java
@@ -39,9 +39,7 @@ public final class GremlinInfestation extends CardImpl {
this.addAbility(ability);
// At the beginning of your end step, Gremlin Infestation deals 2 damage to enchanted artifact's controller.
- Effect effect = new DamageAttachedControllerEffect(2);
- effect.setText("{this} deals 2 damage to enchanted artifact's controller");
- this.addAbility(new BeginningOfEndStepTriggeredAbility(new DamageAttachedControllerEffect(2), TargetController.YOU, false));
+ this.addAbility(new BeginningOfEndStepTriggeredAbility(new DamageAttachedControllerEffect(2).setText("{this} deals 2 damage to enchanted artifact's controller"), TargetController.YOU, false));
// 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));
diff --git a/Mage.Sets/src/mage/cards/h/HeraldOfAnguish.java b/Mage.Sets/src/mage/cards/h/HeraldOfAnguish.java
index ca30a58bf73..ebd207e12fb 100644
--- a/Mage.Sets/src/mage/cards/h/HeraldOfAnguish.java
+++ b/Mage.Sets/src/mage/cards/h/HeraldOfAnguish.java
@@ -1,7 +1,5 @@
-
package mage.cards.h;
-import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.BeginningOfYourEndStepTriggeredAbility;
@@ -14,17 +12,14 @@ import mage.abilities.keyword.FlyingAbility;
import mage.abilities.keyword.ImproviseAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
-import mage.constants.CardType;
-import mage.constants.SubType;
-import mage.constants.Duration;
-import mage.constants.TargetController;
-import mage.constants.Zone;
-import mage.filter.common.FilterControlledArtifactPermanent;
+import mage.constants.*;
+import mage.filter.StaticFilters;
import mage.target.common.TargetControlledPermanent;
import mage.target.common.TargetCreaturePermanent;
+import java.util.UUID;
+
/**
- *
* @author fireshoes
*/
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.
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());
this.addAbility(ability);
}
diff --git a/Mage.Sets/src/mage/cards/h/HiddenStockpile.java b/Mage.Sets/src/mage/cards/h/HiddenStockpile.java
index a7e9e6ade66..5708f76fab6 100644
--- a/Mage.Sets/src/mage/cards/h/HiddenStockpile.java
+++ b/Mage.Sets/src/mage/cards/h/HiddenStockpile.java
@@ -1,7 +1,5 @@
-
package mage.cards.h;
-import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.common.BeginningOfYourEndStepTriggeredAbility;
import mage.abilities.common.SimpleActivatedAbility;
@@ -15,14 +13,15 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.AbilityWord;
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.target.common.TargetControlledCreaturePermanent;
import mage.watchers.common.RevoltWatcher;
+import java.util.UUID;
+
+import static mage.filter.StaticFilters.FILTER_CONTROLLED_CREATURE_SHORT_TEXT;
+
/**
- *
* @author LevelX2
*/
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}");
// Revolt — 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,
- "Revolt — 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.setAbilityWord(AbilityWord.REVOLT);
- ability.addWatcher(new RevoltWatcher());
- this.addAbility(ability);
+ this.addAbility(new ConditionalInterveningIfTriggeredAbility(
+ new BeginningOfYourEndStepTriggeredAbility(new CreateTokenEffect(new ServoToken()), false),
+ RevoltCondition.instance, "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."
+ ).setAbilityWord(AbilityWord.REVOLT), new RevoltWatcher());
// {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)));
this.addAbility(ability);
}
diff --git a/Mage.Sets/src/mage/cards/h/HinterlandDrake.java b/Mage.Sets/src/mage/cards/h/HinterlandDrake.java
index df9ac61ec05..dc136208efc 100644
--- a/Mage.Sets/src/mage/cards/h/HinterlandDrake.java
+++ b/Mage.Sets/src/mage/cards/h/HinterlandDrake.java
@@ -32,7 +32,7 @@ public final class HinterlandDrake extends CardImpl {
// Hinterland Drake can't block artifact creatures.
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));
}
diff --git a/Mage.Sets/src/mage/cards/i/IllusionistsStratagem.java b/Mage.Sets/src/mage/cards/i/IllusionistsStratagem.java
index 9b2de6deafd..179ced6e00a 100644
--- a/Mage.Sets/src/mage/cards/i/IllusionistsStratagem.java
+++ b/Mage.Sets/src/mage/cards/i/IllusionistsStratagem.java
@@ -27,7 +27,7 @@ public final class IllusionistsStratagem extends CardImpl {
StaticFilters.FILTER_CONTROLLED_CREATURES, false));
// Draw a card.
- this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1));
+ this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1).concatBy("
"));
}
private IllusionistsStratagem(final IllusionistsStratagem card) {
diff --git a/Mage.Sets/src/mage/cards/i/IndomitableCreativity.java b/Mage.Sets/src/mage/cards/i/IndomitableCreativity.java
index 679e186ad3d..b0c9866c237 100644
--- a/Mage.Sets/src/mage/cards/i/IndomitableCreativity.java
+++ b/Mage.Sets/src/mage/cards/i/IndomitableCreativity.java
@@ -71,7 +71,7 @@ class IndomitableCreativityEffect extends OneShotEffect {
"For each permanent destroyed this way, " +
"its controller reveals cards from the top of their library" +
" 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) {
diff --git a/Mage.Sets/src/mage/cards/i/InspiringStatuary.java b/Mage.Sets/src/mage/cards/i/InspiringStatuary.java
index 12e8bcda085..33270464a97 100644
--- a/Mage.Sets/src/mage/cards/i/InspiringStatuary.java
+++ b/Mage.Sets/src/mage/cards/i/InspiringStatuary.java
@@ -17,7 +17,7 @@ import java.util.UUID;
*/
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 {
filter.add(Predicates.not(CardType.ARTIFACT.getPredicate()));
diff --git a/Mage.Sets/src/mage/cards/k/KariZevSkyshipRaider.java b/Mage.Sets/src/mage/cards/k/KariZevSkyshipRaider.java
index da85aef699a..d028250a9f7 100644
--- a/Mage.Sets/src/mage/cards/k/KariZevSkyshipRaider.java
+++ b/Mage.Sets/src/mage/cards/k/KariZevSkyshipRaider.java
@@ -58,7 +58,7 @@ class KariZevSkyshipRaiderEffect extends OneShotEffect {
KariZevSkyshipRaiderEffect() {
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) {
diff --git a/Mage.Sets/src/mage/cards/l/LeaveInTheDust.java b/Mage.Sets/src/mage/cards/l/LeaveInTheDust.java
index 8647ad4a527..fdaf2059c2a 100644
--- a/Mage.Sets/src/mage/cards/l/LeaveInTheDust.java
+++ b/Mage.Sets/src/mage/cards/l/LeaveInTheDust.java
@@ -23,7 +23,7 @@ public final class LeaveInTheDust extends CardImpl {
this.getSpellAbility().addTarget(new TargetNonlandPermanent());
// Draw a card.
- this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1));
+ this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1).concatBy("
"));
}
diff --git a/Mage.Sets/src/mage/cards/l/LifecraftAwakening.java b/Mage.Sets/src/mage/cards/l/LifecraftAwakening.java
index 9c08e51a19b..8a539a44f70 100644
--- a/Mage.Sets/src/mage/cards/l/LifecraftAwakening.java
+++ b/Mage.Sets/src/mage/cards/l/LifecraftAwakening.java
@@ -37,8 +37,9 @@ public final class LifecraftAwakening extends CardImpl {
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.
- ManacostVariableValue manaX = ManacostVariableValue.REGULAR;
- getSpellAbility().addEffect(new AddCountersTargetEffect(CounterType.P1P1.createInstance(), manaX));
+ getSpellAbility().addEffect(new AddCountersTargetEffect(
+ CounterType.P1P1.createInstance(), ManacostVariableValue.REGULAR
+ ).setText("put X +1/+1 counters on target artifact you control"));
getSpellAbility().addTarget(new TargetArtifactPermanent(filter));
getSpellAbility().addEffect(new LifecraftAwakeningEffect());
}
diff --git a/Mage.Sets/src/mage/cards/l/LightningRunner.java b/Mage.Sets/src/mage/cards/l/LightningRunner.java
index c22a3a5e397..2a1aa9ee4b0 100644
--- a/Mage.Sets/src/mage/cards/l/LightningRunner.java
+++ b/Mage.Sets/src/mage/cards/l/LightningRunner.java
@@ -62,8 +62,8 @@ class LightningRunnerEffect extends OneShotEffect {
LightningRunnerEffect() {
super(Outcome.Benefit);
- staticText = "you get {E}{E}, then you may pay {E}{E}{E}{E}{E}{E}{E}{E}. If you do, "
- + "untap all creatures you control and after this phase, there is an additional combat phase";
+ 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";
}
LightningRunnerEffect(final LightningRunnerEffect effect) {
diff --git a/Mage.Sets/src/mage/cards/n/NarnamRenegade.java b/Mage.Sets/src/mage/cards/n/NarnamRenegade.java
index a105199e1a5..1a7f53b57af 100644
--- a/Mage.Sets/src/mage/cards/n/NarnamRenegade.java
+++ b/Mage.Sets/src/mage/cards/n/NarnamRenegade.java
@@ -1,7 +1,5 @@
-
package mage.cards.n;
-import java.util.UUID;
import mage.MageInt;
import mage.abilities.common.EntersBattlefieldAbility;
import mage.abilities.condition.common.RevoltCondition;
@@ -14,8 +12,9 @@ import mage.constants.SubType;
import mage.counters.CounterType;
import mage.watchers.common.RevoltWatcher;
+import java.util.UUID;
+
/**
- *
* @author fireshoes
*/
public final class NarnamRenegade extends CardImpl {
@@ -32,13 +31,11 @@ public final class NarnamRenegade extends CardImpl {
this.addAbility(DeathtouchAbility.getInstance());
// Revolt — Narnam Renegade enters the battlefield with a +1/+1 counter on it if a permanent you controlled left this battlefield this turn.
- this.addAbility(
- new EntersBattlefieldAbility(
- new AddCountersSourceEffect(CounterType.P1P1.createInstance()),
- false, RevoltCondition.instance,
- "Revolt — {this} enters the battlefield with a +1/+1 counter on it if a permanent you controlled left the battlefield this turn", null),
- new RevoltWatcher()
- );
+ this.addAbility(new EntersBattlefieldAbility(
+ new AddCountersSourceEffect(CounterType.P1P1.createInstance()), false,
+ RevoltCondition.instance, "Revolt — {this} enters the battlefield with " +
+ "a +1/+1 counter on it if a permanent you controlled left the battlefield this turn.", null
+ ), new RevoltWatcher());
}
private NarnamRenegade(final NarnamRenegade card) {
diff --git a/Mage.Sets/src/mage/cards/n/NightMarketAeronaut.java b/Mage.Sets/src/mage/cards/n/NightMarketAeronaut.java
index 9c0819d902f..7a2a91fd8d8 100644
--- a/Mage.Sets/src/mage/cards/n/NightMarketAeronaut.java
+++ b/Mage.Sets/src/mage/cards/n/NightMarketAeronaut.java
@@ -1,10 +1,6 @@
-
-
package mage.cards.n;
-import java.util.UUID;
import mage.MageInt;
-import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldAbility;
import mage.abilities.condition.common.RevoltCondition;
import mage.abilities.effects.common.counter.AddCountersSourceEffect;
@@ -16,6 +12,8 @@ import mage.constants.SubType;
import mage.counters.CounterType;
import mage.watchers.common.RevoltWatcher;
+import java.util.UUID;
+
/**
* @author JRHerlehy
*/
@@ -34,11 +32,11 @@ public final class NightMarketAeronaut extends CardImpl {
// Revolt — Night Market Aeronaut enters the battlefield with a +1/+1 counter on it if
// a permanent you controlled left the battlefield this turn.
- Ability ability = new EntersBattlefieldAbility(
- new AddCountersSourceEffect(CounterType.P1P1.createInstance()), false, RevoltCondition.instance,
- "Revolt — {this} enters the battlefield with a +1/+1 counter on it if a permanent you controlled left the battlefield this turn", null);
- ability.addWatcher(new RevoltWatcher());
- this.addAbility(ability);
+ this.addAbility(new EntersBattlefieldAbility(
+ new AddCountersSourceEffect(CounterType.P1P1.createInstance()), false,
+ RevoltCondition.instance, "Revolt — {this} enters the battlefield with " +
+ "a +1/+1 counter on it if a permanent you controlled left the battlefield this turn.", null
+ ), new RevoltWatcher());
}
private NightMarketAeronaut(final NightMarketAeronaut card) {
diff --git a/Mage.Sets/src/mage/cards/p/ParadoxEngine.java b/Mage.Sets/src/mage/cards/p/ParadoxEngine.java
index 7f0757b8684..f93b153a515 100644
--- a/Mage.Sets/src/mage/cards/p/ParadoxEngine.java
+++ b/Mage.Sets/src/mage/cards/p/ParadoxEngine.java
@@ -1,28 +1,31 @@
package mage.cards.p;
-import java.util.UUID;
import mage.abilities.common.SpellCastControllerTriggeredAbility;
import mage.abilities.effects.common.UntapAllControllerEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SuperType;
+import mage.filter.FilterPermanent;
import mage.filter.common.FilterNonlandPermanent;
+import java.util.UUID;
+
/**
- *
* @author fireshoes
*/
public final class ParadoxEngine extends CardImpl {
+ private static final FilterPermanent filter = new FilterNonlandPermanent("nonland permanents");
+
public ParadoxEngine(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{5}");
this.addSuperType(SuperType.LEGENDARY);
// 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) {
diff --git a/Mage.Sets/src/mage/cards/r/RenegadeRallier.java b/Mage.Sets/src/mage/cards/r/RenegadeRallier.java
index f3a0bfc3595..8b99f7d8665 100644
--- a/Mage.Sets/src/mage/cards/r/RenegadeRallier.java
+++ b/Mage.Sets/src/mage/cards/r/RenegadeRallier.java
@@ -1,7 +1,5 @@
-
package mage.cards.r;
-import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
@@ -12,15 +10,16 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.AbilityWord;
import mage.constants.CardType;
-import mage.constants.SubType;
import mage.constants.ComparisonType;
+import mage.constants.SubType;
import mage.filter.common.FilterPermanentCard;
import mage.filter.predicate.mageobject.ManaValuePredicate;
import mage.target.common.TargetCardInYourGraveyard;
import mage.watchers.common.RevoltWatcher;
+import java.util.UUID;
+
/**
- *
* @author fireshoes
*/
public final class RenegadeRallier extends CardImpl {
@@ -41,14 +40,13 @@ public final class RenegadeRallier extends CardImpl {
// Revolt — 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.
- Ability ability = new ConditionalInterveningIfTriggeredAbility(new EntersBattlefieldTriggeredAbility(
- new ReturnFromGraveyardToBattlefieldTargetEffect(), false), RevoltCondition.instance,
- "Revolt — When {this} enters the battlefield, if a permanent you controlled 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);
+ Ability ability = new ConditionalInterveningIfTriggeredAbility(
+ new EntersBattlefieldTriggeredAbility(new ReturnFromGraveyardToBattlefieldTargetEffect(), false),
+ RevoltCondition.instance, "When {this} enters the battlefield, if a permanent you controlled " +
+ "left the battlefield this turn, return target permanent card with mana value 2 or less from your graveyard to the battlefield."
+ ).setAbilityWord(AbilityWord.REVOLT);
ability.addTarget(new TargetCardInYourGraveyard(filter));
- ability.addWatcher(new RevoltWatcher());
- this.addAbility(ability);
+ this.addAbility(ability, new RevoltWatcher());
}
private RenegadeRallier(final RenegadeRallier card) {
diff --git a/Mage.Sets/src/mage/cards/r/ResourcefulReturn.java b/Mage.Sets/src/mage/cards/r/ResourcefulReturn.java
index 8bf98ff0a0f..2b9e985c4c5 100644
--- a/Mage.Sets/src/mage/cards/r/ResourcefulReturn.java
+++ b/Mage.Sets/src/mage/cards/r/ResourcefulReturn.java
@@ -5,6 +5,7 @@ import java.util.UUID;
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
import mage.abilities.decorator.ConditionalOneShotEffect;
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
+import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect;
import mage.abilities.effects.common.ReturnToHandTargetEffect;
import mage.cards.CardImpl;
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.
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),
new PermanentsOnTheBattlefieldCondition(StaticFilters.FILTER_CONTROLLED_PERMANENT_ARTIFACT),
"If you control an artifact, draw a card"));
diff --git a/Mage.Sets/src/mage/cards/s/SalvageScuttler.java b/Mage.Sets/src/mage/cards/s/SalvageScuttler.java
index 4e2c6b0b1f5..02d336c2703 100644
--- a/Mage.Sets/src/mage/cards/s/SalvageScuttler.java
+++ b/Mage.Sets/src/mage/cards/s/SalvageScuttler.java
@@ -1,20 +1,17 @@
-
package mage.cards.s;
-import java.util.UUID;
import mage.MageInt;
-import mage.abilities.Ability;
import mage.abilities.common.AttacksTriggeredAbility;
-import mage.abilities.effects.common.ReturnToHandTargetEffect;
+import mage.abilities.effects.common.ReturnToHandChosenControlledPermanentEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
-import mage.filter.common.FilterControlledArtifactPermanent;
-import mage.target.common.TargetControlledPermanent;
+import mage.filter.StaticFilters;
+
+import java.util.UUID;
/**
- *
* @author fireshoes
*/
public final class SalvageScuttler extends CardImpl {
@@ -27,9 +24,9 @@ public final class SalvageScuttler extends CardImpl {
this.toughness = new MageInt(4);
// Whenever Salvage Scuttler attacks, return an artifact you control to its owner's hand.
- Ability ability = new AttacksTriggeredAbility(new ReturnToHandTargetEffect(), false);
- ability.addTarget(new TargetControlledPermanent(new FilterControlledArtifactPermanent("an artifact you control")));
- this.addAbility(ability);
+ this.addAbility(new AttacksTriggeredAbility(
+ new ReturnToHandChosenControlledPermanentEffect(StaticFilters.FILTER_CONTROLLED_PERMANENT_ARTIFACT)
+ ));
}
private SalvageScuttler(final SalvageScuttler card) {
diff --git a/Mage.Sets/src/mage/cards/s/ScroungingBandar.java b/Mage.Sets/src/mage/cards/s/ScroungingBandar.java
index c4b96834e73..e56ee36c4b4 100644
--- a/Mage.Sets/src/mage/cards/s/ScroungingBandar.java
+++ b/Mage.Sets/src/mage/cards/s/ScroungingBandar.java
@@ -65,7 +65,7 @@ class ScroungingBandarEffect extends OneShotEffect {
public ScroungingBandarEffect() {
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) {
diff --git a/Mage.Sets/src/mage/cards/s/SecretSalvage.java b/Mage.Sets/src/mage/cards/s/SecretSalvage.java
index b348f065587..21c94daad82 100644
--- a/Mage.Sets/src/mage/cards/s/SecretSalvage.java
+++ b/Mage.Sets/src/mage/cards/s/SecretSalvage.java
@@ -47,7 +47,7 @@ class SecretSalvageEffect extends OneShotEffect {
public SecretSalvageEffect() {
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, "
- + "reveal them, and put them into your hand. Then shuffle";
+ + "reveal them, put them into your hand, then shuffle";
}
public SecretSalvageEffect(final SecretSalvageEffect effect) {
diff --git a/Mage.Sets/src/mage/cards/s/ShieldedAetherThief.java b/Mage.Sets/src/mage/cards/s/ShieldedAetherThief.java
index abebd970341..43546ff001d 100644
--- a/Mage.Sets/src/mage/cards/s/ShieldedAetherThief.java
+++ b/Mage.Sets/src/mage/cards/s/ShieldedAetherThief.java
@@ -35,7 +35,7 @@ public final class ShieldedAetherThief extends CardImpl {
this.addAbility(FlashAbility.getInstance());
// 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.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DrawCardSourceControllerEffect(1), new TapSourceCost());
diff --git a/Mage.Sets/src/mage/cards/s/SiegeModification.java b/Mage.Sets/src/mage/cards/s/SiegeModification.java
index 14cf7531d19..89add34aa5e 100644
--- a/Mage.Sets/src/mage/cards/s/SiegeModification.java
+++ b/Mage.Sets/src/mage/cards/s/SiegeModification.java
@@ -23,7 +23,7 @@ import mage.target.TargetPermanent;
*/
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 {
filter.add(Predicates.or(CardType.CREATURE.getPredicate(),
diff --git a/Mage.Sets/src/mage/cards/s/SilkweaverElite.java b/Mage.Sets/src/mage/cards/s/SilkweaverElite.java
index 6995058b501..df1a5fa6aad 100644
--- a/Mage.Sets/src/mage/cards/s/SilkweaverElite.java
+++ b/Mage.Sets/src/mage/cards/s/SilkweaverElite.java
@@ -1,9 +1,6 @@
-
package mage.cards.s;
-import java.util.UUID;
import mage.MageInt;
-import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
import mage.abilities.condition.common.RevoltCondition;
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
@@ -16,6 +13,8 @@ import mage.constants.CardType;
import mage.constants.SubType;
import mage.watchers.common.RevoltWatcher;
+import java.util.UUID;
+
/**
* @author JRHerlehy
*/
@@ -33,14 +32,11 @@ public final class SilkweaverElite extends CardImpl {
this.addAbility(ReachAbility.getInstance());
// Revolt — 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(
- new DrawCardSourceControllerEffect(1), false), RevoltCondition.instance,
- "Revolt — When {this} enters the battlefield, if a permanent you controlled left"
- + " the battlefield this turn, draw a card.");
- ability.setAbilityWord(AbilityWord.REVOLT);
- ability.addWatcher(new RevoltWatcher());
- this.addAbility(ability);
-
+ this.addAbility(new ConditionalInterveningIfTriggeredAbility(
+ new EntersBattlefieldTriggeredAbility(new DrawCardSourceControllerEffect(1), false),
+ RevoltCondition.instance, "When {this} enters the battlefield, " +
+ "if a permanent you controlled left the battlefield this turn, draw a card."
+ ).setAbilityWord(AbilityWord.REVOLT), new RevoltWatcher());
}
private SilkweaverElite(final SilkweaverElite card) {
diff --git a/Mage.Sets/src/mage/cards/t/TezzeretMasterOfMetal.java b/Mage.Sets/src/mage/cards/t/TezzeretMasterOfMetal.java
index d05b96e43b0..c9a4fd6ecb8 100644
--- a/Mage.Sets/src/mage/cards/t/TezzeretMasterOfMetal.java
+++ b/Mage.Sets/src/mage/cards/t/TezzeretMasterOfMetal.java
@@ -2,20 +2,18 @@ package mage.cards.t;
import mage.abilities.Ability;
import mage.abilities.LoyaltyAbility;
-import mage.abilities.dynamicvalue.DynamicValue;
-import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount;
+import mage.abilities.dynamicvalue.common.ArtifactYouControlCount;
import mage.abilities.effects.ContinuousEffect;
import mage.abilities.effects.ContinuousEffectImpl;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.LoseLifeTargetEffect;
import mage.abilities.effects.common.RevealCardsFromLibraryUntilEffect;
-import mage.abilities.hint.ValueHint;
+import mage.abilities.hint.common.ArtifactYouControlHint;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.*;
import mage.filter.FilterPermanent;
-import mage.filter.common.FilterArtifactCard;
-import mage.filter.common.FilterControlledArtifactPermanent;
+import mage.filter.StaticFilters;
import mage.filter.predicate.Predicates;
import mage.game.Game;
import mage.game.permanent.Permanent;
@@ -38,13 +36,12 @@ public final class TezzeretMasterOfMetal extends CardImpl {
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.
- 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.
- DynamicValue xValue = new PermanentsOnBattlefieldCount(new FilterControlledArtifactPermanent());
- Ability ability = new LoyaltyAbility(new LoseLifeTargetEffect(xValue), -3);
+ Ability ability = new LoyaltyAbility(new LoseLifeTargetEffect(ArtifactYouControlCount.instance).setText("target opponent loses life equal to the number of artifacts you control"), -3);
ability.addTarget(new TargetOpponent());
- ability.addHint(new ValueHint("Artifacts you control", xValue));
+ ability.addHint(ArtifactYouControlHint.instance);
this.addAbility(ability);
// -8: Gain control of all artifacts and creatures target opponent controls.
diff --git a/Mage.Sets/src/mage/cards/t/TezzeretsBetrayal.java b/Mage.Sets/src/mage/cards/t/TezzeretsBetrayal.java
index 02aa259eb37..da6499ea4f2 100644
--- a/Mage.Sets/src/mage/cards/t/TezzeretsBetrayal.java
+++ b/Mage.Sets/src/mage/cards/t/TezzeretsBetrayal.java
@@ -1,7 +1,6 @@
package mage.cards.t;
-import java.util.UUID;
import mage.abilities.effects.common.DestroyTargetEffect;
import mage.abilities.effects.common.search.SearchLibraryGraveyardPutInHandEffect;
import mage.cards.CardImpl;
@@ -11,8 +10,9 @@ import mage.filter.FilterCard;
import mage.filter.predicate.mageobject.NamePredicate;
import mage.target.common.TargetCreaturePermanent;
+import java.util.UUID;
+
/**
- *
* @author fireshoes
*/
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.
// 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) {
diff --git a/Mage.Sets/src/mage/cards/t/TrophyMage.java b/Mage.Sets/src/mage/cards/t/TrophyMage.java
index ef63fefacd9..83931678c9b 100644
--- a/Mage.Sets/src/mage/cards/t/TrophyMage.java
+++ b/Mage.Sets/src/mage/cards/t/TrophyMage.java
@@ -1,21 +1,20 @@
-
package mage.cards.t;
-import java.util.UUID;
import mage.MageInt;
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
import mage.abilities.effects.common.search.SearchLibraryPutInHandEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
-import mage.constants.SubType;
import mage.constants.ComparisonType;
+import mage.constants.SubType;
import mage.filter.FilterCard;
import mage.filter.predicate.mageobject.ManaValuePredicate;
import mage.target.common.TargetCardInLibrary;
+import java.util.UUID;
+
/**
- *
* @author Styxo
*/
public final class TrophyMage extends CardImpl {
@@ -36,7 +35,9 @@ public final class TrophyMage extends CardImpl {
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.
- 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) {
diff --git a/Mage.Sets/src/mage/cards/u/UntetheredExpress.java b/Mage.Sets/src/mage/cards/u/UntetheredExpress.java
index 6ac63afece8..4c097b1ab7a 100644
--- a/Mage.Sets/src/mage/cards/u/UntetheredExpress.java
+++ b/Mage.Sets/src/mage/cards/u/UntetheredExpress.java
@@ -30,7 +30,7 @@ public final class UntetheredExpress extends CardImpl {
this.addAbility(TrampleAbility.getInstance());
// 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
this.addAbility(new CrewAbility(1));
diff --git a/Mage.Sets/src/mage/cards/y/YahenniUndyingPartisan.java b/Mage.Sets/src/mage/cards/y/YahenniUndyingPartisan.java
index 11fb28c7604..d92b8d2815f 100644
--- a/Mage.Sets/src/mage/cards/y/YahenniUndyingPartisan.java
+++ b/Mage.Sets/src/mage/cards/y/YahenniUndyingPartisan.java
@@ -1,7 +1,5 @@
-
package mage.cards.y;
-import java.util.UUID;
import mage.MageInt;
import mage.abilities.common.DiesCreatureTriggeredAbility;
import mage.abilities.common.SimpleActivatedAbility;
@@ -13,17 +11,16 @@ import mage.abilities.keyword.IndestructibleAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
-import mage.constants.SubType;
import mage.constants.Duration;
+import mage.constants.SubType;
import mage.constants.SuperType;
-import mage.constants.Zone;
import mage.counters.CounterType;
import mage.filter.StaticFilters;
-import mage.filter.common.FilterOpponentsCreaturePermanent;
import mage.target.common.TargetControlledPermanent;
+import java.util.UUID;
+
/**
- *
* @author fireshoes
*/
public final class YahenniUndyingPartisan extends CardImpl {
@@ -41,14 +38,16 @@ public final class YahenniUndyingPartisan extends CardImpl {
this.addAbility(HasteAbility.getInstance());
// 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.
this.addAbility(new SimpleActivatedAbility(
- Zone.BATTLEFIELD,
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) {
diff --git a/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java b/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java
index c26b7564026..ed4942ce718 100644
--- a/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java
+++ b/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java
@@ -62,7 +62,7 @@ public class VerifyCardDataTest {
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 ONLY_TEXT = false; // use when checking text locally, suppresses unnecessary checks and output messages
diff --git a/Mage/src/main/java/mage/abilities/common/DiesAttachedTriggeredAbility.java b/Mage/src/main/java/mage/abilities/common/DiesAttachedTriggeredAbility.java
index cbea3651f81..3b94b15b382 100644
--- a/Mage/src/main/java/mage/abilities/common/DiesAttachedTriggeredAbility.java
+++ b/Mage/src/main/java/mage/abilities/common/DiesAttachedTriggeredAbility.java
@@ -138,7 +138,7 @@ public class DiesAttachedTriggeredAbility extends TriggeredAbilityImpl {
if (diesRuleText) {
sb.append(" dies, ");
} else {
- sb.append(" is put into graveyard, ");
+ sb.append(" is put into a graveyard, ");
}
return sb.toString();
}
diff --git a/Mage/src/main/java/mage/abilities/costs/common/PayEnergyCost.java b/Mage/src/main/java/mage/abilities/costs/common/PayEnergyCost.java
index e2462f3a25f..75e11fa4214 100644
--- a/Mage/src/main/java/mage/abilities/costs/common/PayEnergyCost.java
+++ b/Mage/src/main/java/mage/abilities/costs/common/PayEnergyCost.java
@@ -49,7 +49,7 @@ public class PayEnergyCost extends CostImpl {
}
private void setText() {
- StringBuilder sb = new StringBuilder("Pay ");
+ StringBuilder sb = new StringBuilder("pay ");
for (int i = 0; i < amount; i++) {
sb.append("{E}");
}
diff --git a/Mage/src/main/java/mage/abilities/effects/common/RevealCardsFromLibraryUntilEffect.java b/Mage/src/main/java/mage/abilities/effects/common/RevealCardsFromLibraryUntilEffect.java
index dddb343176c..65043712988 100644
--- a/Mage/src/main/java/mage/abilities/effects/common/RevealCardsFromLibraryUntilEffect.java
+++ b/Mage/src/main/java/mage/abilities/effects/common/RevealCardsFromLibraryUntilEffect.java
@@ -1,8 +1,8 @@
-
package mage.abilities.effects.common;
import mage.MageObject;
import mage.abilities.Ability;
+import mage.abilities.Mode;
import mage.abilities.effects.OneShotEffect;
import mage.cards.Card;
import mage.cards.Cards;
@@ -13,18 +13,18 @@ import mage.filter.FilterCard;
import mage.game.Game;
import mage.players.Library;
import mage.players.Player;
+import mage.util.CardUtil;
/**
- *
* @author Styxo
*/
public class RevealCardsFromLibraryUntilEffect extends OneShotEffect {
- private FilterCard filter;
- private Zone zoneToPutRest;
- private Zone zoneToPutCard;
- private boolean shuffleRestInto;
- private boolean anyOrder;
+ private final FilterCard filter;
+ private final Zone zoneToPutRest;
+ private final Zone zoneToPutCard;
+ private final boolean shuffleRestInto;
+ private final boolean anyOrder;
public RevealCardsFromLibraryUntilEffect(FilterCard filter, Zone zoneToPutCard, Zone zoneToPutRest) {
this(filter, zoneToPutCard, zoneToPutRest, false, false);
@@ -41,17 +41,15 @@ public class RevealCardsFromLibraryUntilEffect extends OneShotEffect {
this.zoneToPutRest = zoneToPutRest;
this.shuffleRestInto = shuffleRestInto;
this.anyOrder = anyOrder;
- setText();
}
- public RevealCardsFromLibraryUntilEffect(final RevealCardsFromLibraryUntilEffect effect) {
+ private RevealCardsFromLibraryUntilEffect(final RevealCardsFromLibraryUntilEffect effect) {
super(effect);
this.filter = effect.filter;
this.zoneToPutCard = effect.zoneToPutCard;
this.zoneToPutRest = effect.zoneToPutRest;
this.shuffleRestInto = effect.shuffleRestInto;
this.anyOrder = effect.anyOrder;
- setText();
}
@Override
@@ -63,50 +61,54 @@ public class RevealCardsFromLibraryUntilEffect extends OneShotEffect {
public boolean apply(Game game, Ability source) {
Player controller = game.getPlayer(source.getControllerId());
MageObject sourceObject = game.getObject(source.getSourceId());
- if (controller != null && controller.getLibrary().hasCards()) {
- Cards cards = new CardsImpl();
- Library library = controller.getLibrary();
- Card card = null;
- do {
- card = library.removeFromTop(game);
- if (card != null) {
- cards.add(card);
- }
- } while (library.hasCards() && !filter.match(card, game));
- // 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);
- }
- }
+ if (controller == null || !controller.getLibrary().hasCards()) {
+ return false;
+ }
+ Cards cards = new CardsImpl();
+ Library library = controller.getLibrary();
+ Card card = null;
+ do {
+ card = library.removeFromTop(game);
+ if (card != null) {
+ cards.add(card);
}
+ } while (library.hasCards() && !filter.match(card, game));
+ // reveal cards
+ if (cards.isEmpty()) {
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() {
- StringBuilder sb = new StringBuilder("reveal cards from the top of your library until you reveal a " + filter.getMessage() + ". Put that card ");
+ @Override
+ 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) {
case HAND: {
@@ -144,6 +146,6 @@ public class RevealCardsFromLibraryUntilEffect extends OneShotEffect {
break;
}
}
- staticText = sb.toString();
+ return sb.toString();
}
}
diff --git a/Mage/src/main/java/mage/game/permanent/token/EtheriumCellToken.java b/Mage/src/main/java/mage/game/permanent/token/EtheriumCellToken.java
index ff472627b30..a1bc68568af 100644
--- a/Mage/src/main/java/mage/game/permanent/token/EtheriumCellToken.java
+++ b/Mage/src/main/java/mage/game/permanent/token/EtheriumCellToken.java
@@ -16,7 +16,7 @@ import mage.constants.Zone;
public final class EtheriumCellToken extends TokenImpl {
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");
cardType.add(CardType.ARTIFACT);