diff --git a/Mage.Sets/src/mage/cards/a/AccordersShield.java b/Mage.Sets/src/mage/cards/a/AccordersShield.java
index 7a2b344fdd9..48cb3bb6064 100644
--- a/Mage.Sets/src/mage/cards/a/AccordersShield.java
+++ b/Mage.Sets/src/mage/cards/a/AccordersShield.java
@@ -1,10 +1,9 @@
-
-
package mage.cards.a;
import java.util.UUID;
+
+import mage.abilities.Ability;
import mage.abilities.common.SimpleStaticAbility;
-import mage.abilities.costs.mana.GenericManaCost;
import mage.abilities.effects.common.continuous.BoostEquippedEffect;
import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect;
import mage.abilities.keyword.EquipAbility;
@@ -22,9 +21,13 @@ public final class AccordersShield extends CardImpl {
public AccordersShield (UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT},"{0}");
this.subtype.add(SubType.EQUIPMENT);
- this.addAbility(new EquipAbility(Outcome.AddAbility, new GenericManaCost(3)));
- this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAttachedEffect(VigilanceAbility.getInstance(), AttachmentType.EQUIPMENT)));
- this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEquippedEffect(0, 3)));
+
+ Ability ability = new SimpleStaticAbility(new BoostEquippedEffect(0, 3));
+ ability.addEffect(new GainAbilityAttachedEffect(VigilanceAbility.getInstance(), AttachmentType.EQUIPMENT).setText("and has vigilance"));
+ this.addAbility(ability);
+
+ this.addAbility(new EquipAbility(3));
+
}
public AccordersShield (final AccordersShield card) {
diff --git a/Mage.Sets/src/mage/cards/a/AjaniCallerOfThePride.java b/Mage.Sets/src/mage/cards/a/AjaniCallerOfThePride.java
index 86b31f88433..da496743f48 100644
--- a/Mage.Sets/src/mage/cards/a/AjaniCallerOfThePride.java
+++ b/Mage.Sets/src/mage/cards/a/AjaniCallerOfThePride.java
@@ -42,8 +42,8 @@ public final class AjaniCallerOfThePride extends CardImpl {
this.addAbility(ability);
// -3: Target creature gains flying and double strike until end of turn.
Effects effects = new Effects();
- effects.add(new GainAbilityTargetEffect(FlyingAbility.getInstance(), Duration.EndOfTurn));
- effects.add(new GainAbilityTargetEffect(DoubleStrikeAbility.getInstance(), Duration.EndOfTurn));
+ effects.add(new GainAbilityTargetEffect(FlyingAbility.getInstance(), Duration.EndOfTurn).setText("target creature gains flying"));
+ effects.add(new GainAbilityTargetEffect(DoubleStrikeAbility.getInstance(), Duration.EndOfTurn).setText("and double strike until end of turn"));
ability = new LoyaltyAbility(effects, -3);
ability.addTarget(new TargetCreaturePermanent());
this.addAbility(ability);
diff --git a/Mage.Sets/src/mage/cards/a/AjanisChosen.java b/Mage.Sets/src/mage/cards/a/AjanisChosen.java
index 11449b828a7..9d570428317 100644
--- a/Mage.Sets/src/mage/cards/a/AjanisChosen.java
+++ b/Mage.Sets/src/mage/cards/a/AjanisChosen.java
@@ -2,12 +2,12 @@ package mage.cards.a;
import mage.MageInt;
import mage.abilities.Ability;
-import mage.abilities.common.EntersBattlefieldAllTriggeredAbility;
+import mage.abilities.common.EntersBattlefieldControlledTriggeredAbility;
import mage.abilities.effects.OneShotEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.*;
-import mage.filter.common.FilterControlledEnchantmentPermanent;
+import mage.filter.common.FilterEnchantmentPermanent;
import mage.game.Game;
import mage.game.permanent.Permanent;
import mage.game.permanent.token.CatToken;
@@ -21,6 +21,8 @@ import java.util.UUID;
*/
public final class AjanisChosen extends CardImpl {
+ private static final FilterEnchantmentPermanent filter = new FilterEnchantmentPermanent("an enchantment");
+
public AjanisChosen(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{W}{W}");
this.subtype.add(SubType.CAT);
@@ -30,9 +32,9 @@ public final class AjanisChosen extends CardImpl {
this.toughness = new MageInt(3);
// Whenever an enchantment enters the battlefield under your control, create a 2/2 white Cat creature token. If that enchantment is an Aura, you may attach it to the token.
- this.addAbility(new EntersBattlefieldAllTriggeredAbility(
- Zone.BATTLEFIELD, new AjanisChosenEffect(), new FilterControlledEnchantmentPermanent(), false, SetTargetPointer.PERMANENT,
- "Whenever an enchantment enters the battlefield under your control, create a 2/2 white Cat creature token. If that enchantment is an Aura, you may attach it to the token"));
+ this.addAbility(new EntersBattlefieldControlledTriggeredAbility(
+ Zone.BATTLEFIELD, new AjanisChosenEffect(), filter,
+ false, SetTargetPointer.PERMANENT, null));
}
private AjanisChosen(final AjanisChosen card) {
@@ -90,4 +92,4 @@ class AjanisChosenEffect extends OneShotEffect {
}
return false;
}
-}
\ No newline at end of file
+}
diff --git a/Mage.Sets/src/mage/cards/a/AltacBloodseeker.java b/Mage.Sets/src/mage/cards/a/AltacBloodseeker.java
index dfb56e9a31e..7e087b2f74e 100644
--- a/Mage.Sets/src/mage/cards/a/AltacBloodseeker.java
+++ b/Mage.Sets/src/mage/cards/a/AltacBloodseeker.java
@@ -34,7 +34,7 @@ public final class AltacBloodseeker extends CardImpl {
// Whenever a creature an opponent controls dies, Altac Bloodseeker gets +2/+0 and gains first strike and haste until end of turn.
Effect effect = new BoostSourceEffect(2, 0, Duration.EndOfTurn);
effect.setText("{this} gets +2/+0");
- Ability ability = new DiesCreatureTriggeredAbility(effect, false, StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURE);
+ Ability ability = new DiesCreatureTriggeredAbility(effect, false, StaticFilters.FILTER_OPPONENTS_PERMANENT_A_CREATURE);
effect = new GainAbilitySourceEffect(FirstStrikeAbility.getInstance(), Duration.EndOfTurn);
effect.setText("and gains first strike");
diff --git a/Mage.Sets/src/mage/cards/a/AngelicArbiter.java b/Mage.Sets/src/mage/cards/a/AngelicArbiter.java
index 64b74a7824e..81f26520e8b 100644
--- a/Mage.Sets/src/mage/cards/a/AngelicArbiter.java
+++ b/Mage.Sets/src/mage/cards/a/AngelicArbiter.java
@@ -86,7 +86,7 @@ class AngelicArbiterEffect2 extends ContinuousRuleModifyingEffectImpl {
public AngelicArbiterEffect2() {
super(Duration.WhileOnBattlefield, Outcome.Benefit);
- staticText = "Each opponent who attacked this turn can't cast spells";
+ staticText = "Each opponent who attacked with a creature this turn can't cast spells";
}
public AngelicArbiterEffect2(final AngelicArbiterEffect2 effect) {
diff --git a/Mage.Sets/src/mage/cards/a/AnimistsAwakening.java b/Mage.Sets/src/mage/cards/a/AnimistsAwakening.java
index 5f0a53da478..442196e4f9c 100644
--- a/Mage.Sets/src/mage/cards/a/AnimistsAwakening.java
+++ b/Mage.Sets/src/mage/cards/a/AnimistsAwakening.java
@@ -45,7 +45,7 @@ class AnimistsAwakeningEffect extends OneShotEffect {
public AnimistsAwakeningEffect() {
super(Outcome.PutCardInPlay);
- staticText = "Reveal the top X cards of your library. Put all land cards from among them onto the battlefield tapped and the rest on the bottom of your library in any order."
+ staticText = "Reveal the top X cards of your library. Put all land cards from among them onto the battlefield tapped and the rest on the bottom of your library in a random order."
+ "
Spell mastery — If there are two or more instant and/or sorcery cards in your graveyard, untap those lands";
}
diff --git a/Mage.Sets/src/mage/cards/a/ArchangelOfThune.java b/Mage.Sets/src/mage/cards/a/ArchangelOfThune.java
index aca8171f558..48cf3df711f 100644
--- a/Mage.Sets/src/mage/cards/a/ArchangelOfThune.java
+++ b/Mage.Sets/src/mage/cards/a/ArchangelOfThune.java
@@ -36,7 +36,7 @@ public final class ArchangelOfThune extends CardImpl {
this.addAbility(new GainLifeControllerTriggeredAbility(
new AddCountersAllEffect(
CounterType.P1P1.createInstance(),
- StaticFilters.FILTER_CONTROLLED_CREATURES
+ StaticFilters.FILTER_CONTROLLED_CREATURE
), false
));
}
diff --git a/Mage.Sets/src/mage/cards/a/AutumnsVeil.java b/Mage.Sets/src/mage/cards/a/AutumnsVeil.java
index a23d07d4ade..081c8d5361a 100644
--- a/Mage.Sets/src/mage/cards/a/AutumnsVeil.java
+++ b/Mage.Sets/src/mage/cards/a/AutumnsVeil.java
@@ -1,5 +1,3 @@
-
-
package mage.cards.a;
import java.util.UUID;
@@ -11,7 +9,7 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.filter.FilterSpell;
-import mage.filter.common.FilterControlledCreaturePermanent;
+import mage.filter.StaticFilters;
import mage.filter.predicate.Predicates;
import mage.filter.predicate.mageobject.ColorPredicate;
@@ -22,7 +20,6 @@ import mage.filter.predicate.mageobject.ColorPredicate;
public final class AutumnsVeil extends CardImpl {
private static final FilterSpell filterTarget1 = new FilterSpell("spells you control");
- private static final FilterControlledCreaturePermanent filterTarget2 = new FilterControlledCreaturePermanent();
private static final FilterSpell filterSource = new FilterSpell("blue or black spells");
static {
@@ -38,7 +35,8 @@ public final class AutumnsVeil extends CardImpl {
this.getSpellAbility().addEffect(new CantBeCounteredControlledEffect(filterTarget1, filterSource, Duration.EndOfTurn));
// and creatures you control can't be the targets of blue or black spells this turn.
- this.getSpellAbility().addEffect(new CantBeTargetedAllEffect(filterTarget2, filterSource, Duration.EndOfTurn));
+ this.getSpellAbility().addEffect(new CantBeTargetedAllEffect(StaticFilters.FILTER_CONTROLLED_CREATURES, filterSource, Duration.EndOfTurn)
+ .concatBy(", and"));
}
private AutumnsVeil(final AutumnsVeil card) {
@@ -51,4 +49,3 @@ public final class AutumnsVeil extends CardImpl {
}
}
-
diff --git a/Mage.Sets/src/mage/cards/a/AvariciousDragon.java b/Mage.Sets/src/mage/cards/a/AvariciousDragon.java
index 56896b5e762..782dc2f9107 100644
--- a/Mage.Sets/src/mage/cards/a/AvariciousDragon.java
+++ b/Mage.Sets/src/mage/cards/a/AvariciousDragon.java
@@ -29,7 +29,8 @@ public final class AvariciousDragon extends CardImpl {
// Flying
this.addAbility(FlyingAbility.getInstance());
// At the beginning of your draw step, draw an additional card.
- this.addAbility(new BeginningOfDrawTriggeredAbility(new DrawCardSourceControllerEffect(1), TargetController.YOU, false));
+ this.addAbility(new BeginningOfDrawTriggeredAbility(new DrawCardSourceControllerEffect(1)
+ .setText("draw an additional card"), TargetController.YOU, false));
// At the beginning of your end step, discard your hand.
this.addAbility(new BeginningOfEndStepTriggeredAbility(new DiscardHandControllerEffect(), TargetController.YOU, false));
}
diff --git a/Mage.Sets/src/mage/cards/b/BloodhunterBat.java b/Mage.Sets/src/mage/cards/b/BloodhunterBat.java
index 9c421c045f7..8fe3a6ee759 100644
--- a/Mage.Sets/src/mage/cards/b/BloodhunterBat.java
+++ b/Mage.Sets/src/mage/cards/b/BloodhunterBat.java
@@ -31,7 +31,7 @@ public final class BloodhunterBat extends CardImpl {
this.addAbility(FlyingAbility.getInstance());
// When Bloodhunter Bat enters the battlefield, target player loses 2 life and you gain 2 life.
Ability ability = new EntersBattlefieldTriggeredAbility(new LoseLifeTargetEffect(2));
- ability.addEffect(new GainLifeEffect(2));
+ ability.addEffect(new GainLifeEffect(2).concatBy("and"));
ability.addTarget(new TargetPlayer());
this.addAbility(ability);
}
diff --git a/Mage.Sets/src/mage/cards/b/BoonweaverGiant.java b/Mage.Sets/src/mage/cards/b/BoonweaverGiant.java
index f9782089c14..8f2ef511dbc 100644
--- a/Mage.Sets/src/mage/cards/b/BoonweaverGiant.java
+++ b/Mage.Sets/src/mage/cards/b/BoonweaverGiant.java
@@ -55,7 +55,7 @@ class BoonweaverGiantEffect extends OneShotEffect {
public BoonweaverGiantEffect() {
super(Outcome.UnboostCreature);
- this.staticText = "you may search your graveyard, hand, and/or library for an Aura card and put it onto the battlefield attached to {this}." +
+ this.staticText = "you may search your graveyard, hand, and/or library for an Aura card and put it onto the battlefield attached to {this}. " +
"If you search your library this way, shuffle.";
}
diff --git a/Mage.Sets/src/mage/cards/c/CallToTheGrave.java b/Mage.Sets/src/mage/cards/c/CallToTheGrave.java
index ad8889a8fee..31b045c048d 100644
--- a/Mage.Sets/src/mage/cards/c/CallToTheGrave.java
+++ b/Mage.Sets/src/mage/cards/c/CallToTheGrave.java
@@ -37,7 +37,7 @@ public final class CallToTheGrave extends CardImpl {
super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{4}{B}");
// At the beginning of each player's upkeep, that player sacrifices a non-Zombie creature.
- Ability ability = new BeginningOfUpkeepTriggeredAbility(new SacrificeEffect(filter, 1, "that player "), TargetController.ANY, false);
+ Ability ability = new BeginningOfUpkeepTriggeredAbility(new SacrificeEffect(filter, 1, "that player"), TargetController.ANY, false);
this.addAbility(ability);
// At the beginning of the end step, if no creatures are on the battlefield, sacrifice Call to the Grave.
TriggeredAbility triggered = new OnEventTriggeredAbility(GameEvent.EventType.END_TURN_STEP_PRE, "beginning of the end step", true, new SacrificeSourceEffect());
diff --git a/Mage.Sets/src/mage/cards/c/ChandrasFury.java b/Mage.Sets/src/mage/cards/c/ChandrasFury.java
index f09106f4523..98e752ca138 100644
--- a/Mage.Sets/src/mage/cards/c/ChandrasFury.java
+++ b/Mage.Sets/src/mage/cards/c/ChandrasFury.java
@@ -7,7 +7,6 @@ import mage.abilities.effects.common.DamageTargetEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
-import mage.filter.common.FilterCreaturePermanent;
import mage.target.common.TargetPlayerOrPlaneswalker;
/**
@@ -21,8 +20,8 @@ public final class ChandrasFury extends CardImpl {
// Chandra's Fury deals 4 damage to target player and 1 damage to each creature that player controls.
this.getSpellAbility().addEffect(new DamageTargetEffect(4));
- this.getSpellAbility().addEffect(new DamageAllControlledTargetEffect(1, new FilterCreaturePermanent())
- .setText("and each creature that player or that planeswalker's controller controls")
+ this.getSpellAbility().addEffect(new DamageAllControlledTargetEffect(1)
+ .setText("and 1 damage to each creature that player or that planeswalker's controller controls")
);
this.getSpellAbility().addTarget(new TargetPlayerOrPlaneswalker());
}
diff --git a/Mage.Sets/src/mage/cards/c/CleaverRiot.java b/Mage.Sets/src/mage/cards/c/CleaverRiot.java
index 69168651edd..0d7a07776f3 100644
--- a/Mage.Sets/src/mage/cards/c/CleaverRiot.java
+++ b/Mage.Sets/src/mage/cards/c/CleaverRiot.java
@@ -20,7 +20,7 @@ public final class CleaverRiot extends CardImpl {
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{4}{R}");
// Creatures you control gain double strike until end of turn.
- this.getSpellAbility().addEffect(new GainAbilityControlledEffect(DoubleStrikeAbility.getInstance(), Duration.EndOfTurn, StaticFilters.FILTER_PERMANENT_CREATURE, false));
+ this.getSpellAbility().addEffect(new GainAbilityControlledEffect(DoubleStrikeAbility.getInstance(), Duration.EndOfTurn, StaticFilters.FILTER_PERMANENT_CREATURES, false));
}
private CleaverRiot(final CleaverRiot card) {
diff --git a/Mage.Sets/src/mage/cards/c/ClericOfTheForwardOrder.java b/Mage.Sets/src/mage/cards/c/ClericOfTheForwardOrder.java
index ca172def8dd..62d96a34d4b 100644
--- a/Mage.Sets/src/mage/cards/c/ClericOfTheForwardOrder.java
+++ b/Mage.Sets/src/mage/cards/c/ClericOfTheForwardOrder.java
@@ -20,7 +20,7 @@ import mage.filter.predicate.mageobject.NamePredicate;
*/
public final class ClericOfTheForwardOrder extends CardImpl {
- private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("each creature you control named Cleric of the Forward Order");
+ private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature you control named Cleric of the Forward Order");
static {
filter.add(new NamePredicate("Cleric of the Forward Order"));
@@ -46,4 +46,4 @@ public final class ClericOfTheForwardOrder extends CardImpl {
public ClericOfTheForwardOrder copy() {
return new ClericOfTheForwardOrder(this);
}
-}
\ No newline at end of file
+}
diff --git a/Mage.Sets/src/mage/cards/c/CripplingBlight.java b/Mage.Sets/src/mage/cards/c/CripplingBlight.java
index afb3375946e..85d80fa5275 100644
--- a/Mage.Sets/src/mage/cards/c/CripplingBlight.java
+++ b/Mage.Sets/src/mage/cards/c/CripplingBlight.java
@@ -2,6 +2,8 @@
package mage.cards.c;
import java.util.UUID;
+
+import mage.abilities.Ability;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.common.AttachEffect;
import mage.abilities.effects.common.combat.CantBlockAttachedEffect;
@@ -31,8 +33,9 @@ public final class CripplingBlight extends CardImpl {
this.addAbility(new EnchantAbility(auraTarget));
// Enchanted creature gets -1/-1 and can't block.
- this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEnchantedEffect(-1, -1, Duration.WhileOnBattlefield)));
- this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new CantBlockAttachedEffect(AttachmentType.AURA)));
+ Ability ability = new SimpleStaticAbility(new BoostEnchantedEffect(-1, -1));
+ ability.addEffect(new CantBlockAttachedEffect(AttachmentType.AURA).setText("and can't block"));
+ this.addAbility(ability);
}
private CripplingBlight(final CripplingBlight card) {
diff --git a/Mage.Sets/src/mage/cards/c/CrumblingColossus.java b/Mage.Sets/src/mage/cards/c/CrumblingColossus.java
index 04ad1df1dd1..da233545dbf 100644
--- a/Mage.Sets/src/mage/cards/c/CrumblingColossus.java
+++ b/Mage.Sets/src/mage/cards/c/CrumblingColossus.java
@@ -28,7 +28,8 @@ public final class CrumblingColossus extends CardImpl {
this.addAbility(TrampleAbility.getInstance());
- this.addAbility(new AttacksTriggeredAbility(new CreateDelayedTriggeredAbilityEffect(new AtTheEndOfCombatDelayedTriggeredAbility(new SacrificeSourceEffect())), false));
+ this.addAbility(new AttacksTriggeredAbility(new CreateDelayedTriggeredAbilityEffect(new AtTheEndOfCombatDelayedTriggeredAbility(new SacrificeSourceEffect()))
+ .setText("sacrifice it at end of combat"), false).setTriggerPhrase("When {this} attacks, "));
}
private CrumblingColossus(final CrumblingColossus card) {
diff --git a/Mage.Sets/src/mage/cards/d/DarksteelForge.java b/Mage.Sets/src/mage/cards/d/DarksteelForge.java
index 08d2cd2d7b6..8a661da14b3 100644
--- a/Mage.Sets/src/mage/cards/d/DarksteelForge.java
+++ b/Mage.Sets/src/mage/cards/d/DarksteelForge.java
@@ -1,38 +1,26 @@
-
-
package mage.cards.d;
import java.util.UUID;
import mage.abilities.common.SimpleStaticAbility;
-import mage.abilities.effects.Effect;
import mage.abilities.effects.common.continuous.GainAbilityAllEffect;
import mage.abilities.keyword.IndestructibleAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
-import mage.constants.Zone;
-import mage.filter.common.FilterControlledPermanent;
+import mage.filter.StaticFilters;
/**
* @author Loki
*/
public final class DarksteelForge extends CardImpl {
- private static final FilterControlledPermanent filter = new FilterControlledPermanent("Artifacts you control");
-
- static {
- filter.add(CardType.ARTIFACT.getPredicate());
- }
-
public DarksteelForge(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT},"{9}");
// Artifacts you control are indestructible.
- Effect effect = new GainAbilityAllEffect(IndestructibleAbility.getInstance(), Duration.WhileOnBattlefield, filter, false);
- effect.setText("Artifacts you control are indestructible");
- this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, effect));
-
+ this.addAbility(new SimpleStaticAbility(new GainAbilityAllEffect(IndestructibleAbility.getInstance(),
+ Duration.WhileOnBattlefield, StaticFilters.FILTER_CONTROLLED_PERMANENT_ARTIFACTS, false)));
}
private DarksteelForge(final DarksteelForge card) {
diff --git a/Mage.Sets/src/mage/cards/d/DemonOfDeathsGate.java b/Mage.Sets/src/mage/cards/d/DemonOfDeathsGate.java
index 1ac3d6d925a..9f9bdb4410b 100644
--- a/Mage.Sets/src/mage/cards/d/DemonOfDeathsGate.java
+++ b/Mage.Sets/src/mage/cards/d/DemonOfDeathsGate.java
@@ -24,7 +24,7 @@ import mage.target.common.TargetControlledPermanent;
*/
public final class DemonOfDeathsGate extends CardImpl {
- private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("black creature");
+ private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("black creatures");
static {
filter.add(new ColorPredicate(ObjectColor.BLACK));
@@ -39,7 +39,7 @@ public final class DemonOfDeathsGate extends CardImpl {
// You may pay 6 life and sacrifice three black creatures rather than pay Demon of Death's Gate's mana cost
AlternativeCostSourceAbility alternateCosts = new AlternativeCostSourceAbility(new PayLifeCost(6));
- alternateCosts.addCost(new SacrificeTargetCost(new TargetControlledPermanent(3, 3, filter, false)));
+ alternateCosts.addCost(new SacrificeTargetCost(new TargetControlledPermanent(3, filter)));
this.addAbility(alternateCosts);
this.addAbility(FlyingAbility.getInstance());
diff --git a/Mage.Sets/src/mage/cards/d/DespoilerOfSouls.java b/Mage.Sets/src/mage/cards/d/DespoilerOfSouls.java
index 581a37661db..03cf9bdc02d 100644
--- a/Mage.Sets/src/mage/cards/d/DespoilerOfSouls.java
+++ b/Mage.Sets/src/mage/cards/d/DespoilerOfSouls.java
@@ -42,7 +42,7 @@ public final class DespoilerOfSouls extends CardImpl {
// {B}{B}, Exile two other creature cards from your graveyard: Return Despoiler of Souls from your graveyard to the battlefield.
Ability ability = new SimpleActivatedAbility(
Zone.GRAVEYARD,
- new ReturnSourceFromGraveyardToBattlefieldEffect(false),
+ new ReturnSourceFromGraveyardToBattlefieldEffect(false, false),
new ManaCostsImpl<>("{B}{B}")
);
ability.addCost(new ExileFromGraveCost(new TargetCardInYourGraveyard(2, filter)));
diff --git a/Mage.Sets/src/mage/cards/d/DestructiveForce.java b/Mage.Sets/src/mage/cards/d/DestructiveForce.java
index 68fa44a23ce..df91072e7b0 100644
--- a/Mage.Sets/src/mage/cards/d/DestructiveForce.java
+++ b/Mage.Sets/src/mage/cards/d/DestructiveForce.java
@@ -19,7 +19,7 @@ import mage.filter.common.FilterCreaturePermanent;
*/
public final class DestructiveForce extends CardImpl {
- private static final FilterControlledPermanent filterLand = new FilterControlledLandPermanent();
+ private static final FilterControlledPermanent filterLand = new FilterControlledLandPermanent("lands");
private static final FilterPermanent filterCreature = new FilterCreaturePermanent();
diff --git a/Mage.Sets/src/mage/cards/d/DiabolicRevelation.java b/Mage.Sets/src/mage/cards/d/DiabolicRevelation.java
index 42bd43284fc..8e82a67d2b2 100644
--- a/Mage.Sets/src/mage/cards/d/DiabolicRevelation.java
+++ b/Mage.Sets/src/mage/cards/d/DiabolicRevelation.java
@@ -39,7 +39,7 @@ class DiabolicRevelationEffect extends OneShotEffect {
DiabolicRevelationEffect() {
super(Outcome.Benefit);
- this.staticText = "Search your library for up to X cards and put those cards into your hand. Then shuffle";
+ this.staticText = "Search your library for up to X cards, put those cards into your hand, then shuffle";
}
private DiabolicRevelationEffect(final DiabolicRevelationEffect effect) {
diff --git a/Mage.Sets/src/mage/cards/e/EnshroudingMist.java b/Mage.Sets/src/mage/cards/e/EnshroudingMist.java
index d861b0779df..c47e08dbd6d 100644
--- a/Mage.Sets/src/mage/cards/e/EnshroudingMist.java
+++ b/Mage.Sets/src/mage/cards/e/EnshroudingMist.java
@@ -27,7 +27,7 @@ public final class EnshroudingMist extends CardImpl {
// Target creature gets +1/+1 until end of turn. Prevent all damage that would dealt to it this turn. If it's renowned, untap it.
this.getSpellAbility().addEffect(new BoostTargetEffect(1, 1, Duration.EndOfTurn));
Effect effect = new PreventDamageToTargetEffect(Duration.EndOfTurn, Integer.MAX_VALUE);
- effect.setText("Prevent all damage that would dealt to it this turn");
+ effect.setText("Prevent all damage that would be dealt to it this turn");
this.getSpellAbility().addEffect(effect);
OneShotEffect effect2 = new UntapTargetEffect();
effect2.setText("untap it");
diff --git a/Mage.Sets/src/mage/cards/f/Fervor.java b/Mage.Sets/src/mage/cards/f/Fervor.java
index 07a7105c70f..bb9514e88fe 100644
--- a/Mage.Sets/src/mage/cards/f/Fervor.java
+++ b/Mage.Sets/src/mage/cards/f/Fervor.java
@@ -23,7 +23,7 @@ public final class Fervor extends CardImpl {
// Creatures you control have haste.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityControlledEffect(
- HasteAbility.getInstance(), Duration.WhileOnBattlefield, StaticFilters.FILTER_PERMANENT_CREATURE, false)));
+ HasteAbility.getInstance(), Duration.WhileOnBattlefield, StaticFilters.FILTER_PERMANENT_CREATURES, false)));
}
private Fervor(final Fervor card) {
diff --git a/Mage.Sets/src/mage/cards/f/FleshpulperGiant.java b/Mage.Sets/src/mage/cards/f/FleshpulperGiant.java
index 756716c6bf9..ae1354019a3 100644
--- a/Mage.Sets/src/mage/cards/f/FleshpulperGiant.java
+++ b/Mage.Sets/src/mage/cards/f/FleshpulperGiant.java
@@ -21,7 +21,7 @@ import mage.target.common.TargetCreaturePermanent;
*/
public final class FleshpulperGiant extends CardImpl {
- private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature with toughess 2 or less");
+ private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature with toughness 2 or less");
static {
filter.add(new ToughnessPredicate(ComparisonType.FEWER_THAN, 3));
diff --git a/Mage.Sets/src/mage/cards/g/GoblinKaboomist.java b/Mage.Sets/src/mage/cards/g/GoblinKaboomist.java
index bc54544f06d..4d204297d39 100644
--- a/Mage.Sets/src/mage/cards/g/GoblinKaboomist.java
+++ b/Mage.Sets/src/mage/cards/g/GoblinKaboomist.java
@@ -54,6 +54,7 @@ class GoblinKaboomistFlipCoinEffect extends OneShotEffect {
public GoblinKaboomistFlipCoinEffect() {
super(Outcome.Damage);
+ staticText = "Then flip a coin. If you lose the flip, {this} deals 2 damage to itself";
}
public GoblinKaboomistFlipCoinEffect(final GoblinKaboomistFlipCoinEffect effect) {
diff --git a/Mage.Sets/src/mage/cards/g/GriffinRider.java b/Mage.Sets/src/mage/cards/g/GriffinRider.java
index ae5e110c30e..7d19dd153ba 100644
--- a/Mage.Sets/src/mage/cards/g/GriffinRider.java
+++ b/Mage.Sets/src/mage/cards/g/GriffinRider.java
@@ -1,9 +1,10 @@
-
package mage.cards.g;
import java.util.UUID;
import mage.MageInt;
+import mage.abilities.Ability;
import mage.abilities.common.SimpleStaticAbility;
+import mage.abilities.condition.Condition;
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
import mage.abilities.decorator.ConditionalContinuousEffect;
import mage.abilities.effects.common.continuous.BoostSourceEffect;
@@ -14,9 +15,7 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.SubType;
-import mage.constants.Zone;
-import mage.filter.FilterPermanent;
-import mage.filter.common.FilterCreaturePermanent;
+import mage.filter.common.FilterControlledCreaturePermanent;
/**
*
@@ -24,13 +23,7 @@ import mage.filter.common.FilterCreaturePermanent;
*/
public final class GriffinRider extends CardImpl {
- private static final String rule1 = "As long as you control a Griffin creature, {this} gets +3/+3.";
- private static final String rule2 = "As long as you control a Griffin creature, {this} has flying.";
- private static final FilterPermanent filterGriffinCard = new FilterCreaturePermanent();
-
- static {
- filterGriffinCard.add(SubType.GRIFFIN.getPredicate());
- }
+ private static final Condition condition = new PermanentsOnTheBattlefieldCondition(new FilterControlledCreaturePermanent(SubType.GRIFFIN));
public GriffinRider(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{W}");
@@ -42,10 +35,11 @@ public final class GriffinRider extends CardImpl {
this.toughness = new MageInt(1);
// As long as you control a Griffin creature, Griffin Rider gets +3/+3 and has flying.
- ConditionalContinuousEffect effect1 = new ConditionalContinuousEffect(new BoostSourceEffect(3, 3, Duration.WhileOnBattlefield), new PermanentsOnTheBattlefieldCondition(filterGriffinCard), rule1);
- this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, effect1));
- ConditionalContinuousEffect effect2 = new ConditionalContinuousEffect(new GainAbilitySourceEffect(FlyingAbility.getInstance()), new PermanentsOnTheBattlefieldCondition(filterGriffinCard), rule2);
- this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, effect2));
+ Ability ability = new SimpleStaticAbility(new ConditionalContinuousEffect(new BoostSourceEffect(3, 3, Duration.WhileOnBattlefield),
+ condition, "as long as you control a Griffin creature, {this} gets +3/+3"));
+ ability.addEffect(new ConditionalContinuousEffect(new GainAbilitySourceEffect(FlyingAbility.getInstance()),
+ condition, "and has flying"));
+ this.addAbility(ability);
}
private GriffinRider(final GriffinRider card) {
diff --git a/Mage.Sets/src/mage/cards/g/Grindclock.java b/Mage.Sets/src/mage/cards/g/Grindclock.java
index 4dccac6bf8a..623f70bf8cf 100644
--- a/Mage.Sets/src/mage/cards/g/Grindclock.java
+++ b/Mage.Sets/src/mage/cards/g/Grindclock.java
@@ -48,7 +48,7 @@ class GrindclockEffect extends OneShotEffect {
public GrindclockEffect() {
super(Outcome.Detriment);
- staticText = "Target player puts the top X cards of their library into their graveyard, where X is the number of charge counters on {this}";
+ staticText = "Target player mills X cards, where X is the number of charge counters on {this}";
}
public GrindclockEffect(final GrindclockEffect effect) {
diff --git a/Mage.Sets/src/mage/cards/g/GuardianOfTheAges.java b/Mage.Sets/src/mage/cards/g/GuardianOfTheAges.java
index 08d836f4352..4e66463eadd 100644
--- a/Mage.Sets/src/mage/cards/g/GuardianOfTheAges.java
+++ b/Mage.Sets/src/mage/cards/g/GuardianOfTheAges.java
@@ -17,7 +17,6 @@ import mage.filter.FilterCard;
import mage.filter.predicate.Predicates;
import mage.game.Game;
import mage.game.events.GameEvent;
-import mage.game.events.GameEvent.EventType;
import mage.game.permanent.Permanent;
/**
@@ -69,17 +68,14 @@ class GuardianOfTheAgesTriggerAbility extends TriggeredAbilityImpl {
@Override
public boolean checkTrigger(GameEvent event, Game game){
Permanent creature = game.getPermanent(event.getSourceId());
- if (creature != null && filter.match(creature, game)
- && game.getOpponents(this.getControllerId()).contains(creature.getControllerId())
- && game.getPermanent(this.getSourceId()).getAbilities().contains(DefenderAbility.getInstance())) {
- return true;
- }
- return false;
+ return creature != null && filter.match(creature, game)
+ && game.getOpponents(this.getControllerId()).contains(creature.getControllerId())
+ && game.getPermanent(this.getSourceId()).getAbilities().contains(DefenderAbility.getInstance());
}
@Override
public String getRule(){
- return "Whenever a creature attacks you or a planeswalker you control, if {this} has defender, it loses defender and gains trample.";
+ return "When a creature attacks you or a planeswalker you control, if {this} has defender, it loses defender and gains trample.";
}
@Override
diff --git a/Mage.Sets/src/mage/cards/h/HonoredHierarch.java b/Mage.Sets/src/mage/cards/h/HonoredHierarch.java
index a48fdb1ce71..b142799529d 100644
--- a/Mage.Sets/src/mage/cards/h/HonoredHierarch.java
+++ b/Mage.Sets/src/mage/cards/h/HonoredHierarch.java
@@ -39,7 +39,7 @@ public final class HonoredHierarch extends CardImpl {
Effect effect = new ConditionalContinuousEffect(
new GainAbilitySourceEffect(VigilanceAbility.getInstance(), Duration.WhileOnBattlefield),
RenownedSourceCondition.instance,
- "As long as {this} is renown, it has vigilance");
+ "As long as {this} is renowned, it has vigilance");
Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, effect);
effect = new ConditionalContinuousEffect(
new GainAbilitySourceEffect(new AnyColorManaAbility(), Duration.WhileOnBattlefield),
diff --git a/Mage.Sets/src/mage/cards/i/Incite.java b/Mage.Sets/src/mage/cards/i/Incite.java
index 0c36ff9cfd4..f3da767313c 100644
--- a/Mage.Sets/src/mage/cards/i/Incite.java
+++ b/Mage.Sets/src/mage/cards/i/Incite.java
@@ -25,7 +25,7 @@ public final class Incite extends CardImpl {
// Target creature becomes red until end of turn and attacks this turn if able.
this.getSpellAbility().addTarget(new TargetCreaturePermanent());
this.getSpellAbility().addEffect(new BecomesColorTargetEffect(ObjectColor.RED, Duration.EndOfTurn, "Target creature becomes red until end of turn"));
- this.getSpellAbility().addEffect(new AttacksIfAbleTargetEffect(Duration.EndOfTurn));
+ this.getSpellAbility().addEffect(new AttacksIfAbleTargetEffect(Duration.EndOfTurn).setText("and attacks this turn if able"));
}
private Incite(final Incite card) {
diff --git a/Mage.Sets/src/mage/cards/j/JaceTelepathUnbound.java b/Mage.Sets/src/mage/cards/j/JaceTelepathUnbound.java
index 156b89e565c..9c53e6c80cd 100644
--- a/Mage.Sets/src/mage/cards/j/JaceTelepathUnbound.java
+++ b/Mage.Sets/src/mage/cards/j/JaceTelepathUnbound.java
@@ -42,7 +42,7 @@ public final class JaceTelepathUnbound extends CardImpl {
// -3: You may cast target instant or sorcery card from your graveyard this turn. If that card would be put into your graveyard this turn, exile it instead.
CastCardFromGraveyardThenExileItEffect minusEffect = new CastCardFromGraveyardThenExileItEffect();
- minusEffect.setText("You may cast target instant or sorcery card from your graveyard this turn. If that card would be put into your graveyard this turn, exile it instead");
+ minusEffect.setText("You may cast target instant or sorcery card from your graveyard this turn. If that spell would be put into your graveyard, exile it instead");
ability = new LoyaltyAbility(minusEffect, -3);
ability.addTarget(new TargetCardInYourGraveyard(new FilterInstantOrSorceryCard()));
this.addAbility(ability);
diff --git a/Mage.Sets/src/mage/cards/k/KurkeshOnakkeAncient.java b/Mage.Sets/src/mage/cards/k/KurkeshOnakkeAncient.java
index ecf45446243..d7a27da0d58 100644
--- a/Mage.Sets/src/mage/cards/k/KurkeshOnakkeAncient.java
+++ b/Mage.Sets/src/mage/cards/k/KurkeshOnakkeAncient.java
@@ -2,7 +2,7 @@ package mage.cards.k;
import mage.MageInt;
import mage.abilities.TriggeredAbilityImpl;
-import mage.abilities.costs.mana.GenericManaCost;
+import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.common.CopyStackObjectEffect;
import mage.abilities.effects.common.DoIfCostPaid;
import mage.abilities.mana.ActivatedManaAbilityImpl;
@@ -50,8 +50,8 @@ public final class KurkeshOnakkeAncient extends CardImpl {
class KurkeshOnakkeAncientTriggeredAbility extends TriggeredAbilityImpl {
KurkeshOnakkeAncientTriggeredAbility() {
- super(Zone.BATTLEFIELD, new DoIfCostPaid(new CopyStackObjectEffect(), new GenericManaCost(1)));
- setTriggerPhrase("Whenever you activate an ability of an artifact, if it isn't a mana ability");
+ super(Zone.BATTLEFIELD, new DoIfCostPaid(new CopyStackObjectEffect(), new ManaCostsImpl<>("{R}")));
+ setTriggerPhrase("Whenever you activate an ability of an artifact, if it isn't a mana ability, ");
}
KurkeshOnakkeAncientTriggeredAbility(final KurkeshOnakkeAncientTriggeredAbility ability) {
diff --git a/Mage.Sets/src/mage/cards/l/LilianasReaver.java b/Mage.Sets/src/mage/cards/l/LilianasReaver.java
index 969547bd0b6..6ed7a948921 100644
--- a/Mage.Sets/src/mage/cards/l/LilianasReaver.java
+++ b/Mage.Sets/src/mage/cards/l/LilianasReaver.java
@@ -32,7 +32,7 @@ public final class LilianasReaver extends CardImpl {
// Whenever Liliana's Reaver deals combat damage to a player, that player discards a card and you create a tapped 2/2 black Zombie creature token.
Ability ability = new DealsCombatDamageToAPlayerTriggeredAbility(new DiscardTargetEffect(1), false, true);
- ability.addEffect(new CreateTokenEffect(new ZombieToken(), 1, true, false));
+ ability.addEffect(new CreateTokenEffect(new ZombieToken(), 1, true, false).concatBy("and you"));
this.addAbility(ability);
}
diff --git a/Mage.Sets/src/mage/cards/l/LordOfTheUnreal.java b/Mage.Sets/src/mage/cards/l/LordOfTheUnreal.java
index 762c985a377..26a13fadd63 100644
--- a/Mage.Sets/src/mage/cards/l/LordOfTheUnreal.java
+++ b/Mage.Sets/src/mage/cards/l/LordOfTheUnreal.java
@@ -38,7 +38,8 @@ public final class LordOfTheUnreal extends CardImpl {
// Illusion creatures you control get +1/+1 and have hexproof
Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostControlledEffect(1, 1, Duration.WhileOnBattlefield, filter, false));
- ability.addEffect(new GainAbilityControlledEffect(HexproofAbility.getInstance(), Duration.WhileOnBattlefield, filter, false));
+ ability.addEffect(new GainAbilityControlledEffect(HexproofAbility.getInstance(), Duration.WhileOnBattlefield, filter, false)
+ .setText("and have hexproof"));
this.addAbility(ability);
}
diff --git a/Mage.Sets/src/mage/cards/m/MantleOfWebs.java b/Mage.Sets/src/mage/cards/m/MantleOfWebs.java
index e2e630128b7..4fdb4b74ff6 100644
--- a/Mage.Sets/src/mage/cards/m/MantleOfWebs.java
+++ b/Mage.Sets/src/mage/cards/m/MantleOfWebs.java
@@ -1,10 +1,8 @@
-
package mage.cards.m;
import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.common.SimpleStaticAbility;
-import mage.abilities.effects.Effect;
import mage.abilities.effects.common.AttachEffect;
import mage.abilities.effects.common.continuous.BoostEnchantedEffect;
import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect;
@@ -15,9 +13,7 @@ import mage.cards.CardSetInfo;
import mage.constants.AttachmentType;
import mage.constants.CardType;
import mage.constants.SubType;
-import mage.constants.Duration;
import mage.constants.Outcome;
-import mage.constants.Zone;
import mage.target.TargetPermanent;
import mage.target.common.TargetCreaturePermanent;
@@ -39,10 +35,9 @@ public final class MantleOfWebs extends CardImpl {
this.addAbility(ability);
// Enchanted creature gets +1/+3 and has reach.
- this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEnchantedEffect(1, 3, Duration.WhileOnBattlefield)));
- Effect effect = new GainAbilityAttachedEffect(ReachAbility.getInstance(), AttachmentType.AURA);
- effect.setText("and has reach");
- this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, effect));
+ Ability ability1 = new SimpleStaticAbility(new BoostEnchantedEffect(1, 3));
+ ability1.addEffect(new GainAbilityAttachedEffect(ReachAbility.getInstance(), AttachmentType.AURA).setText("and has reach"));
+ this.addAbility(ability1);
}
private MantleOfWebs(final MantleOfWebs card) {
diff --git a/Mage.Sets/src/mage/cards/m/MindUnbound.java b/Mage.Sets/src/mage/cards/m/MindUnbound.java
index 999262000e4..9d94eaaa922 100644
--- a/Mage.Sets/src/mage/cards/m/MindUnbound.java
+++ b/Mage.Sets/src/mage/cards/m/MindUnbound.java
@@ -25,7 +25,7 @@ public final class MindUnbound extends CardImpl {
// At the beginning of your upkeep, put a lore counter on Mind Unbound, then draw a card for each lore counter on Mind Unbound.
Ability ability = new BeginningOfUpkeepTriggeredAbility(new AddCountersSourceEffect(CounterType.LORE.createInstance()), TargetController.YOU, false);
- ability.addEffect(new DrawCardSourceControllerEffect(new CountersSourceCount(CounterType.LORE)));
+ ability.addEffect(new DrawCardSourceControllerEffect(new CountersSourceCount(CounterType.LORE)).concatBy(", then"));
this.addAbility(ability);
}
diff --git a/Mage.Sets/src/mage/cards/m/MindclawShaman.java b/Mage.Sets/src/mage/cards/m/MindclawShaman.java
index bed6d16c69e..55f0831312b 100644
--- a/Mage.Sets/src/mage/cards/m/MindclawShaman.java
+++ b/Mage.Sets/src/mage/cards/m/MindclawShaman.java
@@ -54,7 +54,7 @@ class MindclawShamanEffect extends OneShotEffect {
public MindclawShamanEffect() {
super(Outcome.PlayForFree);
this.staticText = "target opponent reveals their hand. You may cast "
- + "an instant or sorcery card from it without paying its mana cost";
+ + "an instant or sorcery spell from among those cards without paying its mana cost";
}
public MindclawShamanEffect(final MindclawShamanEffect effect) {
diff --git a/Mage.Sets/src/mage/cards/m/Mindsparker.java b/Mage.Sets/src/mage/cards/m/Mindsparker.java
index 8b1ac1751cc..46728f65c9e 100644
--- a/Mage.Sets/src/mage/cards/m/Mindsparker.java
+++ b/Mage.Sets/src/mage/cards/m/Mindsparker.java
@@ -22,7 +22,7 @@ import java.util.UUID;
*/
public final class Mindsparker extends CardImpl {
- private static final FilterSpell filter = new FilterSpell("white or blue instant or sorcery spell");
+ private static final FilterSpell filter = new FilterSpell("a white or blue instant or sorcery spell");
static {
filter.add(Predicates.or(
diff --git a/Mage.Sets/src/mage/cards/m/MoltenBirth.java b/Mage.Sets/src/mage/cards/m/MoltenBirth.java
index 3400c0b7edc..5bda7a6076b 100644
--- a/Mage.Sets/src/mage/cards/m/MoltenBirth.java
+++ b/Mage.Sets/src/mage/cards/m/MoltenBirth.java
@@ -26,7 +26,7 @@ public final class MoltenBirth extends CardImpl {
// Create two 1/1 red Elemental creature tokens. Then flip a coin. If you win the flip, return Molten Birth to its owner's hand.
this.getSpellAbility().addEffect(new CreateTokenEffect(new RedElementalToken(), 2));
- this.getSpellAbility().addEffect(new MoltenBirthEffect());
+ this.getSpellAbility().addEffect(new MoltenBirthEffect().concatBy(", then"));
}
private MoltenBirth(final MoltenBirth card) {
@@ -43,7 +43,7 @@ class MoltenBirthEffect extends OneShotEffect {
MoltenBirthEffect() {
super(Outcome.PutCreatureInPlay);
- staticText = "Then flip a coin. If you win the flip, return {this} to its owner's hand";
+ staticText = "flip a coin. If you win the flip, return {this} to its owner's hand";
}
private MoltenBirthEffect(final MoltenBirthEffect effect) {
diff --git a/Mage.Sets/src/mage/cards/n/Necrobite.java b/Mage.Sets/src/mage/cards/n/Necrobite.java
index 4c93201d33f..8ce70bb9abd 100644
--- a/Mage.Sets/src/mage/cards/n/Necrobite.java
+++ b/Mage.Sets/src/mage/cards/n/Necrobite.java
@@ -24,7 +24,7 @@ public final class Necrobite extends CardImpl {
// Target creature gains deathtouch until end of turn. Regenerate it.
this.getSpellAbility().addEffect(new GainAbilityTargetEffect(DeathtouchAbility.getInstance(), Duration.EndOfTurn));
- this.getSpellAbility().addEffect(new RegenerateTargetEffect());
+ this.getSpellAbility().addEffect(new RegenerateTargetEffect().setText("Regenerate it"));
this.getSpellAbility().addTarget(new TargetCreaturePermanent());
}
diff --git a/Mage.Sets/src/mage/cards/n/NissasPilgrimage.java b/Mage.Sets/src/mage/cards/n/NissasPilgrimage.java
index dd062015bd8..3158482b003 100644
--- a/Mage.Sets/src/mage/cards/n/NissasPilgrimage.java
+++ b/Mage.Sets/src/mage/cards/n/NissasPilgrimage.java
@@ -57,7 +57,7 @@ class NissasPilgrimageEffect extends OneShotEffect {
public NissasPilgrimageEffect() {
super(Outcome.Benefit);
this.staticText = "Search your library for up to two basic Forest cards, reveal those cards, and put one onto the battlefield tapped and the rest into your hand. Then shuffle."
- + "
Spell Mastery — If there are two or more instant and/or sorcery cards in your graveyard, search your library for up to three basic Forest cards instead of two.";
+ + "
Spell mastery — If there are two or more instant and/or sorcery cards in your graveyard, search your library for up to three basic Forest cards instead of two.";
}
public NissasPilgrimageEffect(final NissasPilgrimageEffect effect) {
diff --git a/Mage.Sets/src/mage/cards/p/ParagonOfNewDawns.java b/Mage.Sets/src/mage/cards/p/ParagonOfNewDawns.java
index 3e957fbbd97..29bad7770ee 100644
--- a/Mage.Sets/src/mage/cards/p/ParagonOfNewDawns.java
+++ b/Mage.Sets/src/mage/cards/p/ParagonOfNewDawns.java
@@ -31,7 +31,7 @@ import mage.target.common.TargetCreaturePermanent;
public final class ParagonOfNewDawns extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("white creatures");
- private static final FilterCreaturePermanent filter2 = new FilterCreaturePermanent("Another white creature you control");
+ private static final FilterCreaturePermanent filter2 = new FilterCreaturePermanent("another target white creature you control");
static {
filter.add(new ColorPredicate(ObjectColor.WHITE));
diff --git a/Mage.Sets/src/mage/cards/p/PrismRing.java b/Mage.Sets/src/mage/cards/p/PrismRing.java
index 63c1917967a..01d3b842035 100644
--- a/Mage.Sets/src/mage/cards/p/PrismRing.java
+++ b/Mage.Sets/src/mage/cards/p/PrismRing.java
@@ -1,10 +1,9 @@
-
package mage.cards.p;
import java.util.UUID;
import mage.ObjectColor;
import mage.abilities.TriggeredAbilityImpl;
-import mage.abilities.common.EntersBattlefieldAbility;
+import mage.abilities.common.AsEntersBattlefieldAbility;
import mage.abilities.effects.common.ChooseColorEffect;
import mage.abilities.effects.common.GainLifeEffect;
import mage.cards.CardImpl;
@@ -26,7 +25,7 @@ public final class PrismRing extends CardImpl {
super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT},"{1}");
// As Prism Ring enters the battlefield, choose a color.
- this.addAbility(new EntersBattlefieldAbility(new ChooseColorEffect(Outcome.Neutral)));
+ this.addAbility(new AsEntersBattlefieldAbility(new ChooseColorEffect(Outcome.Neutral)));
// Whenever you cast a spell of the chosen color, you gain 1 life.
this.addAbility(new PrismRingTriggeredAbility());
diff --git a/Mage.Sets/src/mage/cards/r/ReclusiveArtificer.java b/Mage.Sets/src/mage/cards/r/ReclusiveArtificer.java
index 9b9639d03bb..2d3be6af4a0 100644
--- a/Mage.Sets/src/mage/cards/r/ReclusiveArtificer.java
+++ b/Mage.Sets/src/mage/cards/r/ReclusiveArtificer.java
@@ -1,4 +1,3 @@
-
package mage.cards.r;
import java.util.UUID;
@@ -12,7 +11,7 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
-import mage.filter.common.FilterControlledPermanent;
+import mage.filter.StaticFilters;
import mage.target.common.TargetCreaturePermanent;
/**
@@ -20,12 +19,6 @@ import mage.target.common.TargetCreaturePermanent;
* @author fireshoes
*/
public final class ReclusiveArtificer extends CardImpl {
-
- private static final FilterControlledPermanent filter = new FilterControlledPermanent("artifacts you control");
-
- static {
- filter.add(CardType.ARTIFACT.getPredicate());
- }
public ReclusiveArtificer(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{U}{R}");
@@ -38,7 +31,8 @@ public final class ReclusiveArtificer extends CardImpl {
this.addAbility(HasteAbility.getInstance());
// When Reclusive Artificer enters the battlefield, you may have it deal damage to target creature equal to the number of artifacts you control.
- Ability ability = new EntersBattlefieldTriggeredAbility(new DamageTargetEffect(new PermanentsOnBattlefieldCount(filter)), true);
+ Ability ability = new EntersBattlefieldTriggeredAbility(new DamageTargetEffect(new PermanentsOnBattlefieldCount(StaticFilters.FILTER_CONTROLLED_PERMANENT_ARTIFACTS))
+ .setText("it deals damage to target creature equal to the number of artifacts you control"), true);
ability.addTarget(new TargetCreaturePermanent());
this.addAbility(ability);
}
diff --git a/Mage.Sets/src/mage/cards/r/ResoluteArchangel.java b/Mage.Sets/src/mage/cards/r/ResoluteArchangel.java
index a2f45ca67fb..96efd0ecee0 100644
--- a/Mage.Sets/src/mage/cards/r/ResoluteArchangel.java
+++ b/Mage.Sets/src/mage/cards/r/ResoluteArchangel.java
@@ -34,7 +34,7 @@ public final class ResoluteArchangel extends CardImpl {
this.addAbility(FlyingAbility.getInstance());
// When Resolute Angel enters the battlefield, if your life total is lower than your starting life total, it becomes equal to your starting life total.
this.addAbility(new EntersBattlefieldTriggeredAbility(new ConditionalOneShotEffect(new ResoluteArchangelEffect(), ControllerLifeLowerThanStrtingLife.instance,
- "if your life total is lower than your starting life total, it becomes equal to your starting life total")));
+ "if your life total is less than your starting life total, it becomes equal to your starting life total")));
}
private ResoluteArchangel(final ResoluteArchangel card) {
diff --git a/Mage.Sets/src/mage/cards/s/ScepterOfEmpires.java b/Mage.Sets/src/mage/cards/s/ScepterOfEmpires.java
index 2154756833f..dbbde1526dc 100644
--- a/Mage.Sets/src/mage/cards/s/ScepterOfEmpires.java
+++ b/Mage.Sets/src/mage/cards/s/ScepterOfEmpires.java
@@ -43,7 +43,7 @@ class ScepterOfEmpiresEffect extends OneShotEffect {
public ScepterOfEmpiresEffect() {
super(Outcome.PutCreatureInPlay);
- staticText = "Scepter of Empires deals 1 damage to target player or planeswalker. It deals 3 damage to that player or planeswalker instead if you control artifacts named Crown of Empires and Throne of Empires";
+ staticText = "Scepter of Empires deals 1 damage to target player or planeswalker. It deals 3 damage instead if you control artifacts named Crown of Empires and Throne of Empires";
}
public ScepterOfEmpiresEffect(ScepterOfEmpiresEffect effect) {
diff --git a/Mage.Sets/src/mage/cards/s/SorinsVengeance.java b/Mage.Sets/src/mage/cards/s/SorinsVengeance.java
index 9dbf716ae4d..0be34016b12 100644
--- a/Mage.Sets/src/mage/cards/s/SorinsVengeance.java
+++ b/Mage.Sets/src/mage/cards/s/SorinsVengeance.java
@@ -19,7 +19,7 @@ public final class SorinsVengeance extends CardImpl {
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{4}{B}{B}{B}");
this.getSpellAbility().addEffect(new DamageTargetEffect(10));
- this.getSpellAbility().addEffect(new GainLifeEffect(10));
+ this.getSpellAbility().addEffect(new GainLifeEffect(10).concatBy("and"));
this.getSpellAbility().addTarget(new TargetPlayerOrPlaneswalker());
}
diff --git a/Mage.Sets/src/mage/cards/s/SpectraWard.java b/Mage.Sets/src/mage/cards/s/SpectraWard.java
index 36afa3d2efe..6da03d53222 100644
--- a/Mage.Sets/src/mage/cards/s/SpectraWard.java
+++ b/Mage.Sets/src/mage/cards/s/SpectraWard.java
@@ -57,7 +57,8 @@ public final class SpectraWard extends CardImpl {
ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEnchantedEffect(2,2, Duration.WhileOnBattlefield));
ProtectionAbility protectionAbility = new ProtectionAbility(filter);
protectionAbility.setRemovesAuras(false);
- ability.addEffect(new GainAbilityAttachedEffect(protectionAbility, AttachmentType.AURA, Duration.WhileOnBattlefield));
+ ability.addEffect(new GainAbilityAttachedEffect(protectionAbility, AttachmentType.AURA, Duration.WhileOnBattlefield)
+ .setText("and has protection from all colors. This effect doesn't remove Auras"));
this.addAbility(ability);
}
diff --git a/Mage.Sets/src/mage/cards/s/SpiritBonds.java b/Mage.Sets/src/mage/cards/s/SpiritBonds.java
index 77440d7b325..98a17673e2d 100644
--- a/Mage.Sets/src/mage/cards/s/SpiritBonds.java
+++ b/Mage.Sets/src/mage/cards/s/SpiritBonds.java
@@ -16,13 +16,12 @@ import mage.constants.Duration;
import mage.constants.SubType;
import mage.constants.Zone;
import mage.filter.StaticFilters;
-import mage.filter.common.FilterControlledCreaturePermanent;
import mage.filter.common.FilterControlledPermanent;
+import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.Predicates;
-import mage.filter.predicate.permanent.TokenPredicate;
import mage.game.permanent.token.SpiritWhiteToken;
-import mage.target.common.TargetControlledCreaturePermanent;
import mage.target.common.TargetControlledPermanent;
+import mage.target.common.TargetCreaturePermanent;
import java.util.UUID;
@@ -31,7 +30,7 @@ import java.util.UUID;
*/
public final class SpiritBonds extends CardImpl {
- private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("non-Spirit creature you control");
+ private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("non-Spirit creature");
private static final FilterControlledPermanent filterSpirit = new FilterControlledPermanent("Spirit");
static {
@@ -46,11 +45,11 @@ public final class SpiritBonds extends CardImpl {
// Whenever a nontoken creature enters the battlefield under your control, you may pay {W}. If you do, but a 1/1 white Spirit creature token with flying into play.
this.addAbility(new EntersBattlefieldControlledTriggeredAbility(Zone.BATTLEFIELD, new DoIfCostPaid(new CreateTokenEffect(new SpiritWhiteToken()), new ManaCostsImpl<>("{W}")), StaticFilters.FILTER_CREATURE_NON_TOKEN, false));
- // {1}{W}, Sacrifice a Spirit: Target non-Spirit creature you control gains indestructible until end of turn.
+ // {1}{W}, Sacrifice a Spirit: Target non-Spirit creature gains indestructible until end of turn.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD,
new GainAbilityTargetEffect(IndestructibleAbility.getInstance(), Duration.EndOfTurn), new ManaCostsImpl<>("{1}{W}"));
ability.addCost(new SacrificeTargetCost(new TargetControlledPermanent(1, 1, filterSpirit, true)));
- ability.addTarget(new TargetControlledCreaturePermanent(filter));
+ ability.addTarget(new TargetCreaturePermanent(filter));
this.addAbility(ability);
}
diff --git a/Mage.Sets/src/mage/cards/s/StabbingPain.java b/Mage.Sets/src/mage/cards/s/StabbingPain.java
index e4977950373..c0ccf37be7d 100644
--- a/Mage.Sets/src/mage/cards/s/StabbingPain.java
+++ b/Mage.Sets/src/mage/cards/s/StabbingPain.java
@@ -22,7 +22,7 @@ public final class StabbingPain extends CardImpl {
this.getSpellAbility().addTarget(new TargetCreaturePermanent());
this.getSpellAbility().addEffect(new BoostTargetEffect(-1, -1, Duration.EndOfTurn));
- this.getSpellAbility().addEffect(new TapTargetEffect());
+ this.getSpellAbility().addEffect(new TapTargetEffect("tap that creature"));
}
private StabbingPain(final StabbingPain card) {
diff --git a/Mage.Sets/src/mage/cards/s/StaffOfTheDeathMagus.java b/Mage.Sets/src/mage/cards/s/StaffOfTheDeathMagus.java
index b6909ec750f..7c93b76fda3 100644
--- a/Mage.Sets/src/mage/cards/s/StaffOfTheDeathMagus.java
+++ b/Mage.Sets/src/mage/cards/s/StaffOfTheDeathMagus.java
@@ -6,6 +6,7 @@ import mage.ObjectColor;
import mage.abilities.common.EntersBattlefieldControlledTriggeredAbility;
import mage.abilities.common.SpellCastControllerTriggeredAbility;
import mage.abilities.effects.common.GainLifeEffect;
+import mage.abilities.meta.OrTriggeredAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
@@ -33,8 +34,11 @@ public final class StaffOfTheDeathMagus extends CardImpl {
super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT},"{3}");
// Whenever you cast a black spell or a Swamp enters the battlefield under your control, you gain 1 life.
- this.addAbility(new SpellCastControllerTriggeredAbility(new GainLifeEffect(1), filterSpell,false));
- this.addAbility(new EntersBattlefieldControlledTriggeredAbility(Zone.BATTLEFIELD, new GainLifeEffect(1), filterLand, false));
+ this.addAbility(new OrTriggeredAbility(Zone.BATTLEFIELD, new GainLifeEffect(1), false,
+ "Whenever you cast a black spell or a Swamp enters the battlefield under your control, ",
+ new SpellCastControllerTriggeredAbility(null, filterSpell,false),
+ new EntersBattlefieldControlledTriggeredAbility(null, filterLand)));
+
}
private StaffOfTheDeathMagus(final StaffOfTheDeathMagus card) {
diff --git a/Mage.Sets/src/mage/cards/s/StaffOfTheFlameMagus.java b/Mage.Sets/src/mage/cards/s/StaffOfTheFlameMagus.java
index f554bce4b56..520d5ed5a21 100644
--- a/Mage.Sets/src/mage/cards/s/StaffOfTheFlameMagus.java
+++ b/Mage.Sets/src/mage/cards/s/StaffOfTheFlameMagus.java
@@ -6,6 +6,7 @@ import mage.ObjectColor;
import mage.abilities.common.EntersBattlefieldControlledTriggeredAbility;
import mage.abilities.common.SpellCastControllerTriggeredAbility;
import mage.abilities.effects.common.GainLifeEffect;
+import mage.abilities.meta.OrTriggeredAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
@@ -33,8 +34,10 @@ public final class StaffOfTheFlameMagus extends CardImpl {
super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT},"{3}");
// Whenever you cast a red spell or a Mountain enters the battlefield under your control, you gain 1 life.
- this.addAbility(new SpellCastControllerTriggeredAbility(new GainLifeEffect(1), filterSpell,false));
- this.addAbility(new EntersBattlefieldControlledTriggeredAbility(Zone.BATTLEFIELD, new GainLifeEffect(1), filterLand, false));
+ this.addAbility(new OrTriggeredAbility(Zone.BATTLEFIELD, new GainLifeEffect(1), false,
+ "Whenever you cast a red spell or a Mountain enters the battlefield under your control, ",
+ new SpellCastControllerTriggeredAbility(null, filterSpell,false),
+ new EntersBattlefieldControlledTriggeredAbility(null, filterLand)));
}
private StaffOfTheFlameMagus(final StaffOfTheFlameMagus card) {
diff --git a/Mage.Sets/src/mage/cards/s/StaffOfTheMindMagus.java b/Mage.Sets/src/mage/cards/s/StaffOfTheMindMagus.java
index 1bd98537404..2adfd2f31c4 100644
--- a/Mage.Sets/src/mage/cards/s/StaffOfTheMindMagus.java
+++ b/Mage.Sets/src/mage/cards/s/StaffOfTheMindMagus.java
@@ -6,6 +6,7 @@ import mage.ObjectColor;
import mage.abilities.common.EntersBattlefieldControlledTriggeredAbility;
import mage.abilities.common.SpellCastControllerTriggeredAbility;
import mage.abilities.effects.common.GainLifeEffect;
+import mage.abilities.meta.OrTriggeredAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
@@ -33,8 +34,10 @@ public final class StaffOfTheMindMagus extends CardImpl {
super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT},"{3}");
// Whenever you cast a blue spell or an Island enters the battlefield under your control, you gain 1 life.
- this.addAbility(new SpellCastControllerTriggeredAbility(new GainLifeEffect(1), filterSpell,false));
- this.addAbility(new EntersBattlefieldControlledTriggeredAbility(Zone.BATTLEFIELD, new GainLifeEffect(1), filterLand, false));
+ this.addAbility(new OrTriggeredAbility(Zone.BATTLEFIELD, new GainLifeEffect(1), false,
+ "Whenever you cast a blue spell or an Island enters the battlefield under your control, ",
+ new SpellCastControllerTriggeredAbility(null, filterSpell,false),
+ new EntersBattlefieldControlledTriggeredAbility(null, filterLand)));
}
private StaffOfTheMindMagus(final StaffOfTheMindMagus card) {
diff --git a/Mage.Sets/src/mage/cards/s/StaffOfTheSunMagus.java b/Mage.Sets/src/mage/cards/s/StaffOfTheSunMagus.java
index 3be026158bf..98e1cf3ea44 100644
--- a/Mage.Sets/src/mage/cards/s/StaffOfTheSunMagus.java
+++ b/Mage.Sets/src/mage/cards/s/StaffOfTheSunMagus.java
@@ -6,6 +6,7 @@ import mage.ObjectColor;
import mage.abilities.common.EntersBattlefieldControlledTriggeredAbility;
import mage.abilities.common.SpellCastControllerTriggeredAbility;
import mage.abilities.effects.common.GainLifeEffect;
+import mage.abilities.meta.OrTriggeredAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
@@ -33,8 +34,10 @@ public final class StaffOfTheSunMagus extends CardImpl {
super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT},"{3}");
// Whenever you cast a white spell or a Plains enters the battlefield under your control, you gain 1 life.
- this.addAbility(new SpellCastControllerTriggeredAbility(new GainLifeEffect(1), filterSpell,false));
- this.addAbility(new EntersBattlefieldControlledTriggeredAbility(Zone.BATTLEFIELD, new GainLifeEffect(1), filterLand, false));
+ this.addAbility(new OrTriggeredAbility(Zone.BATTLEFIELD, new GainLifeEffect(1), false,
+ "Whenever you cast a white spell or a Plains enters the battlefield under your control, ",
+ new SpellCastControllerTriggeredAbility(null, filterSpell,false),
+ new EntersBattlefieldControlledTriggeredAbility(null, filterLand)));
}
private StaffOfTheSunMagus(final StaffOfTheSunMagus card) {
diff --git a/Mage.Sets/src/mage/cards/s/StaffOfTheWildMagus.java b/Mage.Sets/src/mage/cards/s/StaffOfTheWildMagus.java
index 7983f90f66a..0035e8f0369 100644
--- a/Mage.Sets/src/mage/cards/s/StaffOfTheWildMagus.java
+++ b/Mage.Sets/src/mage/cards/s/StaffOfTheWildMagus.java
@@ -6,6 +6,7 @@ import mage.ObjectColor;
import mage.abilities.common.EntersBattlefieldControlledTriggeredAbility;
import mage.abilities.common.SpellCastControllerTriggeredAbility;
import mage.abilities.effects.common.GainLifeEffect;
+import mage.abilities.meta.OrTriggeredAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
@@ -32,9 +33,11 @@ public final class StaffOfTheWildMagus extends CardImpl {
public StaffOfTheWildMagus(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT},"{3}");
- // Whenever you cast a green spell or a Forest enters the battlefield under your control, you may gain 1 life.
- this.addAbility(new SpellCastControllerTriggeredAbility(new GainLifeEffect(1), filterSpell,false));
- this.addAbility(new EntersBattlefieldControlledTriggeredAbility(Zone.BATTLEFIELD, new GainLifeEffect(1), filterLand, false));
+ // Whenever you cast a green spell or a Forest enters the battlefield under your control, you gain 1 life.
+ this.addAbility(new OrTriggeredAbility(Zone.BATTLEFIELD, new GainLifeEffect(1), false,
+ "Whenever you cast a green spell or a Forest enters the battlefield under your control, ",
+ new SpellCastControllerTriggeredAbility(null, filterSpell,false),
+ new EntersBattlefieldControlledTriggeredAbility(null, filterLand)));
}
private StaffOfTheWildMagus(final StaffOfTheWildMagus card) {
diff --git a/Mage.Sets/src/mage/cards/s/StonehornChanter.java b/Mage.Sets/src/mage/cards/s/StonehornChanter.java
index 065949b277b..7adcf9ae4ba 100644
--- a/Mage.Sets/src/mage/cards/s/StonehornChanter.java
+++ b/Mage.Sets/src/mage/cards/s/StonehornChanter.java
@@ -1,4 +1,3 @@
-
package mage.cards.s;
import java.util.UUID;
@@ -31,8 +30,10 @@ public final class StonehornChanter extends CardImpl {
this.toughness = new MageInt(4);
// {5}{W}: Stonehorn Chanter gains vigilance and lifelink until end of turn.
- Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new GainAbilitySourceEffect(VigilanceAbility.getInstance(), Duration.EndOfTurn), new ManaCostsImpl<>("{5}{W}"));
- ability.addEffect(new GainAbilitySourceEffect(LifelinkAbility.getInstance()));
+ Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new GainAbilitySourceEffect(VigilanceAbility.getInstance(), Duration.EndOfTurn)
+ .setText("{this} gains vigilance"), new ManaCostsImpl<>("{5}{W}"));
+ ability.addEffect(new GainAbilitySourceEffect(LifelinkAbility.getInstance(), Duration.EndOfTurn)
+ .setText("and lifelink until end of turn"));
this.addAbility(ability);
}
diff --git a/Mage.Sets/src/mage/cards/s/SunbladeElf.java b/Mage.Sets/src/mage/cards/s/SunbladeElf.java
index 939de6e681c..84a5cc447c4 100644
--- a/Mage.Sets/src/mage/cards/s/SunbladeElf.java
+++ b/Mage.Sets/src/mage/cards/s/SunbladeElf.java
@@ -13,7 +13,6 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.SubType;
-import mage.constants.Zone;
import mage.filter.FilterPermanent;
import mage.filter.StaticFilters;
@@ -38,9 +37,10 @@ public final class SunbladeElf extends CardImpl {
this.toughness = new MageInt(1);
// Sunblade Elf gets +1/+1 as long as you control a Plains.
- this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostSourceWhileControlsEffect(filter, 1, 1)));
+ this.addAbility(new SimpleStaticAbility(new BoostSourceWhileControlsEffect(filter, 1, 1)));
// {4}{W}: Creatures you control get +1/+1 until end of turn.
- this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostControlledEffect(1, 1, Duration.EndOfTurn, StaticFilters.FILTER_PERMANENT_CREATURE, false), new ManaCostsImpl<>("{4}{W}")));
+ this.addAbility(new SimpleActivatedAbility(new BoostControlledEffect(1, 1, Duration.EndOfTurn, StaticFilters.FILTER_PERMANENT_CREATURES, false),
+ new ManaCostsImpl<>("{4}{W}")));
}
diff --git a/Mage.Sets/src/mage/cards/s/SuppressionBonds.java b/Mage.Sets/src/mage/cards/s/SuppressionBonds.java
index 828ba9055cd..a05b2de7b65 100644
--- a/Mage.Sets/src/mage/cards/s/SuppressionBonds.java
+++ b/Mage.Sets/src/mage/cards/s/SuppressionBonds.java
@@ -1,10 +1,8 @@
-
package mage.cards.s;
import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.common.SimpleStaticAbility;
-import mage.abilities.effects.Effect;
import mage.abilities.effects.common.AttachEffect;
import mage.abilities.effects.common.combat.CantBlockAttackActivateAttachedEffect;
import mage.abilities.keyword.EnchantAbility;
@@ -13,7 +11,6 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.Outcome;
-import mage.constants.Zone;
import mage.target.TargetPermanent;
import mage.target.common.TargetNonlandPermanent;
@@ -35,9 +32,7 @@ public final class SuppressionBonds extends CardImpl {
this.addAbility(ability);
// Enchanted permanent can't attack or block, and its activated abilities can't be actiated.
- Effect effect = new CantBlockAttackActivateAttachedEffect();
- effect.setText("Enchanted permanent can't attack or block, and its activated abilities can't be actiated");
- this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new CantBlockAttackActivateAttachedEffect()));
+ this.addAbility(new SimpleStaticAbility(new CantBlockAttackActivateAttachedEffect("permanent")));
}
private SuppressionBonds(final SuppressionBonds card) {
diff --git a/Mage.Sets/src/mage/cards/t/TasteOfBlood.java b/Mage.Sets/src/mage/cards/t/TasteOfBlood.java
index 94b73393e59..6bc22f5b0cf 100644
--- a/Mage.Sets/src/mage/cards/t/TasteOfBlood.java
+++ b/Mage.Sets/src/mage/cards/t/TasteOfBlood.java
@@ -19,7 +19,7 @@ public final class TasteOfBlood extends CardImpl {
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{B}");
this.getSpellAbility().addEffect(new DamageTargetEffect(1));
- this.getSpellAbility().addEffect(new GainLifeEffect(1));
+ this.getSpellAbility().addEffect(new GainLifeEffect(1).concatBy("and"));
this.getSpellAbility().addTarget(new TargetPlayerOrPlaneswalker());
}
diff --git a/Mage.Sets/src/mage/cards/t/TenaciousDead.java b/Mage.Sets/src/mage/cards/t/TenaciousDead.java
index 449e31f9bc1..65b79d7cd06 100644
--- a/Mage.Sets/src/mage/cards/t/TenaciousDead.java
+++ b/Mage.Sets/src/mage/cards/t/TenaciousDead.java
@@ -28,7 +28,8 @@ public final class TenaciousDead extends CardImpl {
this.toughness = new MageInt(1);
// When Tenacious Dead dies, you may pay {1}{B}. If you do, return it to the battlefield tapped under its owner's control.
- Effect effect = new DoIfCostPaid(new ReturnToBattlefieldUnderOwnerControlSourceEffect(true), new ManaCostsImpl<>("{1}{B}"));
+ Effect effect = new DoIfCostPaid(new ReturnToBattlefieldUnderOwnerControlSourceEffect(true)
+ .setText("return it to the battlefield tapped under its owner's control"), new ManaCostsImpl<>("{1}{B}"));
this.addAbility(new DiesSourceTriggeredAbility(effect, false));
}
diff --git a/Mage.Sets/src/mage/cards/t/TheChainVeil.java b/Mage.Sets/src/mage/cards/t/TheChainVeil.java
index a6392c06155..e908f49b0ed 100644
--- a/Mage.Sets/src/mage/cards/t/TheChainVeil.java
+++ b/Mage.Sets/src/mage/cards/t/TheChainVeil.java
@@ -92,7 +92,7 @@ class TheChainVeilIncreaseLoyaltyUseEffect extends ContinuousEffectImpl {
public TheChainVeilIncreaseLoyaltyUseEffect() {
super(Duration.EndOfTurn, Layer.RulesEffects, SubLayer.NA, Outcome.Benefit);
- staticText = "For each planeswalker you control, you may activate one of its loyalty abilities once this turn as though none of its loyalty abilities had been activated this turn";
+ staticText = "For each planeswalker you control, you may activate one of its loyalty abilities once this turn as though none of its loyalty abilities have been activated this turn";
}
public TheChainVeilIncreaseLoyaltyUseEffect(final TheChainVeilIncreaseLoyaltyUseEffect effect) {
diff --git a/Mage.Sets/src/mage/cards/t/TouchOfMoonglove.java b/Mage.Sets/src/mage/cards/t/TouchOfMoonglove.java
index fdd0c7d2cd3..0df2157f924 100644
--- a/Mage.Sets/src/mage/cards/t/TouchOfMoonglove.java
+++ b/Mage.Sets/src/mage/cards/t/TouchOfMoonglove.java
@@ -58,7 +58,7 @@ class TouchOfMoongloveAddTriggerEffect extends OneShotEffect {
public TouchOfMoongloveAddTriggerEffect() {
super(Outcome.LoseLife);
- this.staticText = "Whenever a creature dealt damage by that creature this turn dies, its controller loses 2 life";
+ this.staticText = "Whenever a creature dealt damage by that creature dies this turn, its controller loses 2 life";
}
public TouchOfMoongloveAddTriggerEffect(final TouchOfMoongloveAddTriggerEffect effect) {
diff --git a/Mage.Sets/src/mage/cards/t/TricksOfTheTrade.java b/Mage.Sets/src/mage/cards/t/TricksOfTheTrade.java
index 5153bae3b98..b0980cc66f3 100644
--- a/Mage.Sets/src/mage/cards/t/TricksOfTheTrade.java
+++ b/Mage.Sets/src/mage/cards/t/TricksOfTheTrade.java
@@ -2,6 +2,8 @@
package mage.cards.t;
import java.util.UUID;
+
+import mage.abilities.Ability;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.common.AttachEffect;
import mage.abilities.effects.common.combat.CantBeBlockedAttachedEffect;
@@ -12,9 +14,7 @@ import mage.cards.CardSetInfo;
import mage.constants.AttachmentType;
import mage.constants.CardType;
import mage.constants.SubType;
-import mage.constants.Duration;
import mage.constants.Outcome;
-import mage.constants.Zone;
import mage.target.TargetPermanent;
import mage.target.common.TargetCreaturePermanent;
@@ -36,8 +36,9 @@ public final class TricksOfTheTrade extends CardImpl {
this.addAbility(new EnchantAbility(auraTarget));
// Enchanted creature gets +2/+0 and can't be blocked.
- this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEnchantedEffect(2, 0, Duration.WhileOnBattlefield)));
- this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new CantBeBlockedAttachedEffect(AttachmentType.AURA)));
+ Ability ability = new SimpleStaticAbility(new BoostEnchantedEffect(2, 0));
+ ability.addEffect(new CantBeBlockedAttachedEffect(AttachmentType.AURA).setText("and can't be blocked"));
+ this.addAbility(ability);
}
private TricksOfTheTrade(final TricksOfTheTrade card) {
diff --git a/Mage.Sets/src/mage/cards/v/VoraciousWurm.java b/Mage.Sets/src/mage/cards/v/VoraciousWurm.java
index 289a7ef2ed2..272f610b9a4 100644
--- a/Mage.Sets/src/mage/cards/v/VoraciousWurm.java
+++ b/Mage.Sets/src/mage/cards/v/VoraciousWurm.java
@@ -28,7 +28,8 @@ public final class VoraciousWurm extends CardImpl {
// Voracious Wurm enters the battlefield with X +1/+1 counters on it, where X is the amount of life you've gained this turn.
this.addAbility(new EntersBattlefieldAbility(new AddCountersSourceEffect(
CounterType.P1P1.createInstance(0), ControllerGotLifeCount.instance, true
- )).addHint(ControllerGotLifeCount.getHint()), new PlayerGainedLifeWatcher());
+ ), "with X +1/+1 counters on it, where X is the amount of life you've gained this turn")
+ .addHint(ControllerGotLifeCount.getHint()), new PlayerGainedLifeWatcher());
}
private VoraciousWurm(final VoraciousWurm card) {
diff --git a/Mage.Sets/src/mage/cards/w/WildEvocation.java b/Mage.Sets/src/mage/cards/w/WildEvocation.java
index 60ffae042c7..f774f0a2cb7 100644
--- a/Mage.Sets/src/mage/cards/w/WildEvocation.java
+++ b/Mage.Sets/src/mage/cards/w/WildEvocation.java
@@ -51,7 +51,7 @@ class WildEvocationEffect extends OneShotEffect {
public WildEvocationEffect() {
super(Outcome.PutCardInPlay);
staticText = "that player reveals a card at random from their hand. "
- + "If it's a land card, that player puts it onto the battlefield. "
+ + "If it's a land card, the player puts it onto the battlefield. "
+ "Otherwise, the player casts it without paying its mana cost if able";
}
diff --git a/Mage.Sets/src/mage/cards/w/Willbreaker.java b/Mage.Sets/src/mage/cards/w/Willbreaker.java
index 5a75ce72f4b..a8fda611681 100644
--- a/Mage.Sets/src/mage/cards/w/Willbreaker.java
+++ b/Mage.Sets/src/mage/cards/w/Willbreaker.java
@@ -78,7 +78,7 @@ class WillbreakerTriggeredAbility extends TriggeredAbilityImpl {
@Override
public String getRule() {
return "Whenever a creature an opponent controls becomes the target of a spell or ability you control, "
- + "gain control of that creature for as long as you control {this}";
+ + "gain control of that creature for as long as you control {this}.";
}
@Override
diff --git a/Mage.Sets/src/mage/cards/x/XathridGorgon.java b/Mage.Sets/src/mage/cards/x/XathridGorgon.java
index 33f6b264d65..1aaa2862d38 100644
--- a/Mage.Sets/src/mage/cards/x/XathridGorgon.java
+++ b/Mage.Sets/src/mage/cards/x/XathridGorgon.java
@@ -52,7 +52,7 @@ public final class XathridGorgon extends CardImpl {
effect = new AddCardTypeTargetEffect(Duration.Custom, CardType.ARTIFACT);
effect.setText("and becomes a colorless");
ability.addEffect(effect);
- ability.addEffect(new BecomesColorTargetEffect(ObjectColor.COLORLESS, Duration.Custom, "artifact in addition to its other types"));
+ ability.addEffect(new BecomesColorTargetEffect(ObjectColor.COLORLESS, Duration.Custom, " artifact in addition to its other types"));
ability.addEffect(new XathridGorgonCantActivateEffect());
this.addAbility(ability);
diff --git a/Mage/src/main/java/mage/abilities/common/BeginningOfCombatTriggeredAbility.java b/Mage/src/main/java/mage/abilities/common/BeginningOfCombatTriggeredAbility.java
index 68e9740781a..6483b1f437a 100644
--- a/Mage/src/main/java/mage/abilities/common/BeginningOfCombatTriggeredAbility.java
+++ b/Mage/src/main/java/mage/abilities/common/BeginningOfCombatTriggeredAbility.java
@@ -80,7 +80,7 @@ public class BeginningOfCombatTriggeredAbility extends TriggeredAbilityImpl {
case YOU:
return "At the beginning of combat on your turn, " + generateZoneString();
case OPPONENT:
- return "At the beginning of each opponent's combat step, " + generateZoneString();
+ return "At the beginning of combat on each opponent's turn, " + generateZoneString();
case EACH_PLAYER:
return "At the beginning of combat on each player's turn, " + generateZoneString();
case ANY:
diff --git a/Mage/src/main/java/mage/abilities/effects/common/CantBeCounteredControlledEffect.java b/Mage/src/main/java/mage/abilities/effects/common/CantBeCounteredControlledEffect.java
index 9b6023211c9..bd488c92215 100644
--- a/Mage/src/main/java/mage/abilities/effects/common/CantBeCounteredControlledEffect.java
+++ b/Mage/src/main/java/mage/abilities/effects/common/CantBeCounteredControlledEffect.java
@@ -82,6 +82,9 @@ public class CantBeCounteredControlledEffect extends ContinuousRuleModifyingEffe
if (filterSource != null) {
sb.append(" by ").append(filterSource.getMessage());
}
+ if (duration == Duration.EndOfTurn) {
+ sb.append(" this turn");
+ }
staticText = sb.toString();
}
diff --git a/Mage/src/main/java/mage/abilities/effects/common/CantBeTargetedAllEffect.java b/Mage/src/main/java/mage/abilities/effects/common/CantBeTargetedAllEffect.java
index c32aabf7c5b..92d6bc7afc1 100644
--- a/Mage/src/main/java/mage/abilities/effects/common/CantBeTargetedAllEffect.java
+++ b/Mage/src/main/java/mage/abilities/effects/common/CantBeTargetedAllEffect.java
@@ -90,7 +90,9 @@ public class CantBeTargetedAllEffect extends ContinuousRuleModifyingEffectImpl {
} else {
sb.append("spells");
}
- if (!duration.toString().isEmpty()) {
+ if (duration == Duration.EndOfTurn) {
+ sb.append(" this turn");
+ } else if (!duration.toString().isEmpty()) {
sb.append(' ').append(duration.toString());
}
staticText = sb.toString();
diff --git a/Mage/src/main/java/mage/abilities/effects/common/CantBeTargetedSourceEffect.java b/Mage/src/main/java/mage/abilities/effects/common/CantBeTargetedSourceEffect.java
index 69a35c9f438..916281e185d 100644
--- a/Mage/src/main/java/mage/abilities/effects/common/CantBeTargetedSourceEffect.java
+++ b/Mage/src/main/java/mage/abilities/effects/common/CantBeTargetedSourceEffect.java
@@ -68,7 +68,9 @@ public class CantBeTargetedSourceEffect extends ContinuousRuleModifyingEffectImp
StringBuilder sb = new StringBuilder();
sb.append("{this} can't be the target of ");
sb.append(filterSource.getMessage());
- sb.append(' ').append(duration.toString());
+ if (!duration.toString().isEmpty()) {
+ sb.append(' ').append(duration.toString());
+ }
staticText = sb.toString();
}
diff --git a/Mage/src/main/java/mage/abilities/effects/common/ChangeATargetOfTargetSpellAbilityToSourceEffect.java b/Mage/src/main/java/mage/abilities/effects/common/ChangeATargetOfTargetSpellAbilityToSourceEffect.java
index 9cfb2c7675b..86a628f6d13 100644
--- a/Mage/src/main/java/mage/abilities/effects/common/ChangeATargetOfTargetSpellAbilityToSourceEffect.java
+++ b/Mage/src/main/java/mage/abilities/effects/common/ChangeATargetOfTargetSpellAbilityToSourceEffect.java
@@ -22,7 +22,7 @@ public class ChangeATargetOfTargetSpellAbilityToSourceEffect extends OneShotEffe
public ChangeATargetOfTargetSpellAbilityToSourceEffect() {
super(Outcome.Neutral);
- staticText = "Change a target of target spell or ability to {this}";
+ staticText = "change a target of target spell or ability to {this}";
}
public ChangeATargetOfTargetSpellAbilityToSourceEffect(final ChangeATargetOfTargetSpellAbilityToSourceEffect effect) {
diff --git a/Mage/src/main/java/mage/abilities/effects/common/ExileAndReturnSourceEffect.java b/Mage/src/main/java/mage/abilities/effects/common/ExileAndReturnSourceEffect.java
index 4356b695b75..222f82c887a 100644
--- a/Mage/src/main/java/mage/abilities/effects/common/ExileAndReturnSourceEffect.java
+++ b/Mage/src/main/java/mage/abilities/effects/common/ExileAndReturnSourceEffect.java
@@ -92,6 +92,7 @@ public class ExileAndReturnSourceEffect extends OneShotEffect {
}
return "exile {this}, then return " + pronoun.getObjective() + ' ' +
putCards.getMessage(false, false).replace("onto", "to") + " under " +
- (this.returnUnderYourControl ? "your" : pronoun.getPossessive() + ' ' + "owner's") + " control";
+ (returnUnderYourControl ? "your" : pronoun.getPossessive() + " owner's") + " control"
+ + (additionalEffect == null ? "" : ". If you do, " + additionalEffect.getText(mode));
}
}
diff --git a/Mage/src/main/java/mage/abilities/keyword/ProtectionAbility.java b/Mage/src/main/java/mage/abilities/keyword/ProtectionAbility.java
index ecb7bd20ff6..856c2fa9bcc 100644
--- a/Mage/src/main/java/mage/abilities/keyword/ProtectionAbility.java
+++ b/Mage/src/main/java/mage/abilities/keyword/ProtectionAbility.java
@@ -11,7 +11,6 @@ import mage.filter.predicate.mageobject.ColorPredicate;
import mage.game.Game;
import mage.game.permanent.Permanent;
import mage.game.stack.Spell;
-import mage.game.stack.StackObject;
import mage.players.Player;
import mage.util.CardUtil;
@@ -74,7 +73,7 @@ public class ProtectionAbility extends StaticAbility {
@Override
public String getRule() {
- return "protection from " + filter.getMessage() + (removeAuras ? "" : ". This effect doesn't remove auras.");
+ return "protection from " + filter.getMessage() + (removeAuras ? "" : ". This effect doesn't remove Auras.");
}
public boolean canTarget(MageObject source, Game game) {
diff --git a/Mage/src/main/java/mage/filter/StaticFilters.java b/Mage/src/main/java/mage/filter/StaticFilters.java
index 6d002d114b2..155ba8575ad 100644
--- a/Mage/src/main/java/mage/filter/StaticFilters.java
+++ b/Mage/src/main/java/mage/filter/StaticFilters.java
@@ -26,6 +26,10 @@ import mage.filter.predicate.permanent.TokenPredicate;
*/
public final class StaticFilters {
+ // Hide constructor - not to be instantiated
+ private StaticFilters() {
+ }
+
public static final FilterSpiritOrArcaneCard FILTER_SPIRIT_OR_ARCANE_CARD = new FilterSpiritOrArcaneCard();
static {
@@ -261,7 +265,6 @@ public final class StaticFilters {
FILTER_PERMANENT_ENCHANTMENT.setLockedFilter(true);
}
-
public static final FilterEnchantmentPermanent FILTER_PERMANENT_ENCHANTMENTS = new FilterEnchantmentPermanent("enchantments");
static {
diff --git a/Mage/src/main/java/mage/game/command/emblems/GarrukApexPredatorEmblem.java b/Mage/src/main/java/mage/game/command/emblems/GarrukApexPredatorEmblem.java
index 87328b9c5f9..7b0aabbae2c 100644
--- a/Mage/src/main/java/mage/game/command/emblems/GarrukApexPredatorEmblem.java
+++ b/Mage/src/main/java/mage/game/command/emblems/GarrukApexPredatorEmblem.java
@@ -28,7 +28,7 @@ public final class GarrukApexPredatorEmblem extends Emblem {
effect.setText("it gets +5/+5");
Ability ability = new AttackedByCreatureTriggeredAbility(Zone.COMMAND, effect, false, SetTargetPointer.PERMANENT);
effect = new GainAbilityTargetEffect(TrampleAbility.getInstance(), Duration.EndOfTurn);
- ability.addEffect(effect.concatBy("and"));
+ ability.addEffect(effect.setText("and gains trample until end of turn"));
this.getAbilities().add(ability);
}
diff --git a/Mage/src/main/java/mage/game/permanent/token/SquidToken.java b/Mage/src/main/java/mage/game/permanent/token/SquidToken.java
index 5bd708f989c..af219490073 100644
--- a/Mage/src/main/java/mage/game/permanent/token/SquidToken.java
+++ b/Mage/src/main/java/mage/game/permanent/token/SquidToken.java
@@ -11,7 +11,7 @@ import mage.constants.SubType;
public final class SquidToken extends TokenImpl {
public SquidToken() {
- super("Squid Token", "1/1 blue Squid creature token with Islandwalk");
+ super("Squid Token", "1/1 blue Squid creature token with islandwalk");
cardType.add(CardType.CREATURE);
color.setBlue(true);
subtype.add(SubType.SQUID);