diff --git a/Mage.Sets/src/mage/cards/a/AetherWeb.java b/Mage.Sets/src/mage/cards/a/AetherWeb.java
index ab7aef2393..e635c846f5 100644
--- a/Mage.Sets/src/mage/cards/a/AetherWeb.java
+++ b/Mage.Sets/src/mage/cards/a/AetherWeb.java
@@ -1,34 +1,32 @@
package mage.cards.a;
+import mage.abilities.Ability;
+import mage.abilities.common.SimpleStaticAbility;
+import mage.abilities.effects.AsThoughEffectImpl;
+import mage.abilities.effects.common.AttachEffect;
+import mage.abilities.effects.common.continuous.BoostEnchantedEffect;
+import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect;
+import mage.abilities.keyword.EnchantAbility;
+import mage.abilities.keyword.FlashAbility;
+import mage.abilities.keyword.ReachAbility;
+import mage.cards.CardImpl;
+import mage.cards.CardSetInfo;
+import mage.constants.*;
+import mage.game.Game;
+import mage.game.permanent.Permanent;
+import mage.target.TargetPermanent;
+import mage.target.common.TargetCreaturePermanent;
+
import java.util.UUID;
-import mage.abilities.StaticAbility;
-import mage.abilities.common.SimpleStaticAbility;
-import mage.abilities.effects.AsThoughEffectImpl;
-import mage.abilities.effects.common.continuous.BoostEnchantedEffect;
-import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect;
-import mage.abilities.keyword.ReachAbility;
-import mage.constants.*;
-import mage.abilities.keyword.FlashAbility;
-import mage.game.Game;
-import mage.game.permanent.Permanent;
-import mage.target.common.TargetCreaturePermanent;
-import mage.abilities.Ability;
-import mage.abilities.effects.common.AttachEffect;
-import mage.target.TargetPermanent;
-import mage.abilities.keyword.EnchantAbility;
-import mage.cards.CardImpl;
-import mage.cards.CardSetInfo;
-
/**
- *
* @author noahg
*/
public final class AetherWeb extends CardImpl {
public AetherWeb(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{G}");
-
+
this.subtype.add(SubType.AURA);
// Flash
@@ -38,15 +36,15 @@ public final class AetherWeb extends CardImpl {
TargetPermanent auraTarget = new TargetCreaturePermanent();
this.getSpellAbility().addTarget(auraTarget);
this.getSpellAbility().addEffect(new AttachEffect(Outcome.BoostCreature));
- Ability ability = new EnchantAbility(auraTarget.getTargetName());
- this.addAbility(ability);
+ this.addAbility(new EnchantAbility(auraTarget.getTargetName()));
// Enchanted creature gets +1/+1, has reach, and can block creatures with shadow as though they didn't have shadow.
- StaticAbility staticAbility = new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEnchantedEffect(1, 1)
- .setText("Enchanted creature gets +1/+1, has reach, and can block creatures with shadow as though they didn't have shadow."));
- staticAbility.addEffect(new GainAbilityAttachedEffect(ReachAbility.getInstance(), AttachmentType.AURA).setText(""));
- staticAbility.addEffect(new AetherWebEffect());
- this.addAbility(staticAbility);
+ Ability ability = new SimpleStaticAbility(new BoostEnchantedEffect(1, 1));
+ ability.addEffect(new GainAbilityAttachedEffect(
+ ReachAbility.getInstance(), AttachmentType.AURA
+ ).setText(", has reach"));
+ ability.addEffect(new AetherWebEffect());
+ this.addAbility(ability);
}
private AetherWeb(final AetherWeb card) {
@@ -63,7 +61,7 @@ class AetherWebEffect extends AsThoughEffectImpl {
public AetherWebEffect() {
super(AsThoughEffectType.BLOCK_SHADOW, Duration.WhileOnBattlefield, Outcome.Benefit);
- staticText = "";
+ staticText = ", and can block creatures with shadow as though they didn't have shadow";
}
public AetherWebEffect(final AetherWebEffect effect) {
@@ -85,4 +83,4 @@ class AetherWebEffect extends AsThoughEffectImpl {
Permanent sourcePermanent = source.getSourcePermanentIfItStillExists(game);
return sourcePermanent != null && sourceId.equals(sourcePermanent.getAttachedTo());
}
-}
\ No newline at end of file
+}
diff --git a/Mage.Sets/src/mage/cards/a/AetherflameWall.java b/Mage.Sets/src/mage/cards/a/AetherflameWall.java
index d9ab65b70c..8ae22cb482 100644
--- a/Mage.Sets/src/mage/cards/a/AetherflameWall.java
+++ b/Mage.Sets/src/mage/cards/a/AetherflameWall.java
@@ -12,19 +12,17 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.SubType;
-import mage.constants.Zone;
import java.util.UUID;
/**
- *
* @author noahg
*/
public final class AetherflameWall extends CardImpl {
public AetherflameWall(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{R}");
-
+
this.subtype.add(SubType.WALL);
this.power = new MageInt(0);
this.toughness = new MageInt(4);
@@ -33,10 +31,13 @@ public final class AetherflameWall extends CardImpl {
this.addAbility(DefenderAbility.getInstance());
// Aetherflame Wall can block creatures with shadow as though they didn’t have shadow.
- this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new CanBlockAsThoughtItHadShadowEffect(Duration.WhileOnBattlefield)));
+ this.addAbility(new SimpleStaticAbility(new CanBlockAsThoughtItHadShadowEffect(Duration.WhileOnBattlefield)
+ .setText("{this} can block creatures with shadow as though they didn't have shadow")));
// {R}: Aetherflame Wall gets +1/+0 until end of turn.
- this.addAbility(new SimpleActivatedAbility(new BoostSourceEffect(1, 0, Duration.EndOfTurn), new ManaCostsImpl("{R}")));
+ this.addAbility(new SimpleActivatedAbility(
+ new BoostSourceEffect(1, 0, Duration.EndOfTurn), new ManaCostsImpl<>("{R}")
+ ));
}
private AetherflameWall(final AetherflameWall card) {
diff --git a/Mage.Sets/src/mage/cards/b/BarbedShocker.java b/Mage.Sets/src/mage/cards/b/BarbedShocker.java
index 97406cf666..c921f095ef 100644
--- a/Mage.Sets/src/mage/cards/b/BarbedShocker.java
+++ b/Mage.Sets/src/mage/cards/b/BarbedShocker.java
@@ -31,8 +31,11 @@ public final class BarbedShocker extends CardImpl {
this.addAbility(TrampleAbility.getInstance());
// Haste
this.addAbility(HasteAbility.getInstance());
+
// Whenever Barbed Shocker deals damage to a player, that player discards all the cards in their hand, then draws that many cards.
- this.addAbility(new DealsDamageToAPlayerTriggeredAbility(new BarbedShockerEffect(), false, true));
+ this.addAbility(new DealsDamageToAPlayerTriggeredAbility(
+ new BarbedShockerEffect(), false, true
+ ));
}
private BarbedShocker(final BarbedShocker card) {
@@ -49,7 +52,7 @@ class BarbedShockerEffect extends OneShotEffect {
BarbedShockerEffect() {
super(Outcome.Discard);
- this.staticText = " that player discards all the cards in their hand, then draws that many cards";
+ this.staticText = "that player discards all the cards in their hand, then draws that many cards";
}
private BarbedShockerEffect(final BarbedShockerEffect effect) {
@@ -64,11 +67,12 @@ class BarbedShockerEffect extends OneShotEffect {
@Override
public boolean apply(Game game, Ability source) {
Player targetPlayer = game.getPlayer(targetPointer.getFirst(game, source));
- if (targetPlayer == null) {
+ if (targetPlayer == null || targetPlayer.getHand().isEmpty()) {
return false;
}
- int count = targetPlayer.discard(targetPlayer.getHand(), false, source, game).size();
- targetPlayer.drawCards(count, source, game);
+ targetPlayer.drawCards(targetPlayer.discard(
+ targetPlayer.getHand(), false, source, game
+ ).size(), source, game);
return true;
}
}
\ No newline at end of file
diff --git a/Mage.Sets/src/mage/cards/b/Bewilder.java b/Mage.Sets/src/mage/cards/b/Bewilder.java
index 10ddaddde5..4d13dcb307 100644
--- a/Mage.Sets/src/mage/cards/b/Bewilder.java
+++ b/Mage.Sets/src/mage/cards/b/Bewilder.java
@@ -1,7 +1,5 @@
-
package mage.cards.b;
-import java.util.UUID;
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
import mage.abilities.effects.common.continuous.BoostTargetEffect;
import mage.cards.CardImpl;
@@ -10,21 +8,22 @@ import mage.constants.CardType;
import mage.constants.Duration;
import mage.target.common.TargetCreaturePermanent;
+import java.util.UUID;
+
/**
- *
* @author Loki
*/
public final class Bewilder extends CardImpl {
public Bewilder(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{2}{U}");
-
+ super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{2}{U}");
// Target creature gets -3/-0 until end of turn.
this.getSpellAbility().addEffect(new BoostTargetEffect(-3, 0, Duration.EndOfTurn));
this.getSpellAbility().addTarget(new TargetCreaturePermanent());
+
// Draw a card.
- this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1));
+ this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1).concatBy("
"));
}
private Bewilder(final Bewilder card) {
diff --git a/Mage.Sets/src/mage/cards/c/CurseOfTheCabal.java b/Mage.Sets/src/mage/cards/c/CurseOfTheCabal.java
index 48a77cf2ba..2f12b0b3d5 100644
--- a/Mage.Sets/src/mage/cards/c/CurseOfTheCabal.java
+++ b/Mage.Sets/src/mage/cards/c/CurseOfTheCabal.java
@@ -111,7 +111,7 @@ class CurseOfTheCabalInterveningIfTriggeredAbility extends ConditionalIntervenin
),
SuspendedCondition.instance,
"At the beginning of each player's upkeep, if {this} is suspended, "
- + "that player may sacrifice a permanent. If they do, "
+ + "that player may sacrifice a permanent. If the player does, "
+ "put two time counters on {this}."
);
// controller has to sac a permanent
diff --git a/Mage.Sets/src/mage/cards/d/DAvenantHealer.java b/Mage.Sets/src/mage/cards/d/DAvenantHealer.java
index 01193c4a88..9c9fa46236 100644
--- a/Mage.Sets/src/mage/cards/d/DAvenantHealer.java
+++ b/Mage.Sets/src/mage/cards/d/DAvenantHealer.java
@@ -1,7 +1,5 @@
-
package mage.cards.d;
-import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility;
@@ -11,14 +9,14 @@ import mage.abilities.effects.common.PreventDamageToTargetEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
-import mage.constants.SubType;
import mage.constants.Duration;
-import mage.constants.Zone;
+import mage.constants.SubType;
+import mage.target.common.TargetAnyTarget;
import mage.target.common.TargetAttackingOrBlockingCreature;
-import mage.target.common.TargetCreatureOrPlayer;
+
+import java.util.UUID;
/**
- *
* @author LoneFox
*/
public final class DAvenantHealer extends CardImpl {
@@ -32,12 +30,15 @@ public final class DAvenantHealer extends CardImpl {
this.toughness = new MageInt(2);
// {T}: D'Avenant Healer deals 1 damage to target attacking or blocking creature.
- Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(1), new TapSourceCost());
+ Ability ability = new SimpleActivatedAbility(new DamageTargetEffect(1), new TapSourceCost());
ability.addTarget(new TargetAttackingOrBlockingCreature());
this.addAbility(ability);
+
// {T}: Prevent the next 1 damage that would be dealt to any target this turn.
- ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new PreventDamageToTargetEffect(Duration.EndOfTurn, 1), new TapSourceCost());
- ability.addTarget(new TargetCreatureOrPlayer());
+ ability = new SimpleActivatedAbility(
+ new PreventDamageToTargetEffect(Duration.EndOfTurn, 1), new TapSourceCost()
+ );
+ ability.addTarget(new TargetAnyTarget());
this.addAbility(ability);
}
diff --git a/Mage.Sets/src/mage/cards/f/FallenIdeal.java b/Mage.Sets/src/mage/cards/f/FallenIdeal.java
index 5ef67ce153..e181745d61 100644
--- a/Mage.Sets/src/mage/cards/f/FallenIdeal.java
+++ b/Mage.Sets/src/mage/cards/f/FallenIdeal.java
@@ -1,13 +1,10 @@
-
package mage.cards.f;
-import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.common.PutIntoGraveFromBattlefieldSourceTriggeredAbility;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.costs.common.SacrificeTargetCost;
-import mage.abilities.effects.Effect;
import mage.abilities.effects.common.AttachEffect;
import mage.abilities.effects.common.ReturnToHandSourceEffect;
import mage.abilities.effects.common.continuous.BoostSourceEffect;
@@ -17,13 +14,15 @@ import mage.abilities.keyword.FlyingAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.*;
-import static mage.filter.StaticFilters.FILTER_CONTROLLED_CREATURE_SHORT_TEXT;
import mage.target.TargetPermanent;
-import mage.target.common.TargetControlledCreaturePermanent;
+import mage.target.common.TargetControlledPermanent;
import mage.target.common.TargetCreaturePermanent;
+import java.util.UUID;
+
+import static mage.filter.StaticFilters.FILTER_CONTROLLED_CREATURE_SHORT_TEXT;
+
/**
- *
* @author fireshoes
*/
public final class FallenIdeal extends CardImpl {
@@ -36,18 +35,19 @@ public final class FallenIdeal extends CardImpl {
TargetPermanent auraTarget = new TargetCreaturePermanent();
this.getSpellAbility().addTarget(auraTarget);
this.getSpellAbility().addEffect(new AttachEffect(Outcome.AddAbility));
- Ability ability = new EnchantAbility(auraTarget.getTargetName());
- this.addAbility(ability);
+ this.addAbility(new EnchantAbility(auraTarget.getTargetName()));
// Enchanted creature has flying and "Sacrifice a creature: This creature gets +2/+1 until end of turn."
- Effect effect = new GainAbilityAttachedEffect(FlyingAbility.getInstance(), AttachmentType.AURA, Duration.WhileOnBattlefield);
- Ability gainedAbility = new SimpleStaticAbility(Zone.BATTLEFIELD, effect);
- this.addAbility(gainedAbility);
- gainedAbility = new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostSourceEffect(2, 1, Duration.EndOfTurn),
- new SacrificeTargetCost(new TargetControlledCreaturePermanent(FILTER_CONTROLLED_CREATURE_SHORT_TEXT)));
- effect = new GainAbilityAttachedEffect(gainedAbility, AttachmentType.AURA, Duration.WhileOnBattlefield);
- effect.setText("Enchanted creature has \"Sacrifice a creature: This creature gets +2/+1 until end of turn.\"");
- this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, effect));
+ Ability ability = new SimpleStaticAbility(new GainAbilityAttachedEffect(
+ FlyingAbility.getInstance(), AttachmentType.AURA, Duration.WhileOnBattlefield
+ ));
+ ability.addEffect(new GainAbilityAttachedEffect(
+ new SimpleActivatedAbility(
+ new BoostSourceEffect(2, 1, Duration.EndOfTurn),
+ new SacrificeTargetCost(new TargetControlledPermanent(FILTER_CONTROLLED_CREATURE_SHORT_TEXT))
+ ), AttachmentType.AURA, Duration.WhileOnBattlefield
+ ).setText("and \"Sacrifice a creature: This creature gets +2/+1 until end of turn.\""));
+ this.addAbility(ability);
// When Fallen Ideal is put into a graveyard from the battlefield, return Fallen Ideal to its owner's hand.
this.addAbility(new PutIntoGraveFromBattlefieldSourceTriggeredAbility(new ReturnToHandSourceEffect()));
diff --git a/Mage.Sets/src/mage/cards/f/FlagstonesOfTrokair.java b/Mage.Sets/src/mage/cards/f/FlagstonesOfTrokair.java
index 677916b820..39b4365e94 100644
--- a/Mage.Sets/src/mage/cards/f/FlagstonesOfTrokair.java
+++ b/Mage.Sets/src/mage/cards/f/FlagstonesOfTrokair.java
@@ -32,7 +32,7 @@ public final class FlagstonesOfTrokair extends CardImpl {
this.addAbility(new WhiteManaAbility());
// When Flagstones of Trokair is put into a graveyard from the battlefield, you may search your library for a Plains card and put it onto the battlefield tapped. If you do, shuffle your library.
- this.addAbility(new PutIntoGraveFromBattlefieldSourceTriggeredAbility(new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(FILTER), true, false), true, false));
+ this.addAbility(new PutIntoGraveFromBattlefieldSourceTriggeredAbility(new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(FILTER), true, true), true, false));
}
private FlagstonesOfTrokair(final FlagstonesOfTrokair card) {
diff --git a/Mage.Sets/src/mage/cards/g/GemstoneCaverns.java b/Mage.Sets/src/mage/cards/g/GemstoneCaverns.java
index d04721cd29..9164ea6c02 100644
--- a/Mage.Sets/src/mage/cards/g/GemstoneCaverns.java
+++ b/Mage.Sets/src/mage/cards/g/GemstoneCaverns.java
@@ -82,7 +82,7 @@ class GemstoneCavernsAbility extends StaticAbility implements OpeningHandAction
@Override
public String getRule() {
- return "If {this} is in your opening hand and you're not playing first, you may begin the game with {this} on the battlefield with a luck counter on it. If you do, exile a card from your hand.";
+ return "If {this} is in your opening hand and you're not the starting player, you may begin the game with {this} on the battlefield with a luck counter on it. If you do, exile a card from your hand.";
}
@Override
diff --git a/Mage.Sets/src/mage/cards/g/GlassAsp.java b/Mage.Sets/src/mage/cards/g/GlassAsp.java
index e8802e0d93..4ac368e349 100644
--- a/Mage.Sets/src/mage/cards/g/GlassAsp.java
+++ b/Mage.Sets/src/mage/cards/g/GlassAsp.java
@@ -28,7 +28,7 @@ public final class GlassAsp extends CardImpl {
// Whenever Glass Asp deals combat damage to a player, that player loses 2 life at the beginning of their next draw step unless they pay {2} before that step.
this.addAbility(new DealsCombatDamageToAPlayerTriggeredAbility(new UnlessPaysDelayedEffect(
new ManaCostsImpl("{2}"), new LoseLifeTargetEffect(2), PhaseStep.DRAW, true,
- "that player loses 2 life at the beginning of their next draw step unless they pay {2} before that draw step."),
+ "that player loses 2 life at the beginning of their next draw step unless they pay {2} before that step."),
false, true));
}
diff --git a/Mage.Sets/src/mage/cards/g/GoblinSkycutter.java b/Mage.Sets/src/mage/cards/g/GoblinSkycutter.java
index 1342125e7f..b06a7ee85f 100644
--- a/Mage.Sets/src/mage/cards/g/GoblinSkycutter.java
+++ b/Mage.Sets/src/mage/cards/g/GoblinSkycutter.java
@@ -40,7 +40,7 @@ public final class GoblinSkycutter extends CardImpl {
this.toughness = new MageInt(1);
// Sacrifice Goblin Skycutter: Goblin Skycutter deals 2 damage to target creature with flying. That creature loses flying until end of turn.
- Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(2), new SacrificeSourceCost());
+ Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(2, "it"), new SacrificeSourceCost());
ability.addEffect(new LoseAbilityTargetEffect(FlyingAbility.getInstance(), Duration.EndOfTurn).setText("that creature loses flying until end of turn"));
ability.addTarget(new TargetCreaturePermanent(filter));
this.addAbility(ability);
diff --git a/Mage.Sets/src/mage/cards/i/IbHalfheartGoblinTactician.java b/Mage.Sets/src/mage/cards/i/IbHalfheartGoblinTactician.java
index 6f8cb02d7b..f69f72839a 100644
--- a/Mage.Sets/src/mage/cards/i/IbHalfheartGoblinTactician.java
+++ b/Mage.Sets/src/mage/cards/i/IbHalfheartGoblinTactician.java
@@ -29,7 +29,7 @@ import mage.target.common.TargetControlledPermanent;
*/
public final class IbHalfheartGoblinTactician extends CardImpl {
- private static final FilterControlledPermanent filter = new FilterControlledPermanent("two Mountains");
+ private static final FilterControlledPermanent filter = new FilterControlledPermanent("Mountains");
private static final FilterCreaturePermanent filterGoblin = new FilterCreaturePermanent("another Goblin you control");
static {
diff --git a/Mage.Sets/src/mage/cards/i/Ixidron.java b/Mage.Sets/src/mage/cards/i/Ixidron.java
index 59698198cc..276024aaff 100644
--- a/Mage.Sets/src/mage/cards/i/Ixidron.java
+++ b/Mage.Sets/src/mage/cards/i/Ixidron.java
@@ -3,6 +3,7 @@ package mage.cards.i;
import java.util.UUID;
import mage.MageInt;
+import mage.abilities.common.AsEntersBattlefieldAbility;
import mage.abilities.common.EntersBattlefieldAbility;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount;
@@ -43,7 +44,7 @@ public final class Ixidron extends CardImpl {
this.toughness = new MageInt(0);
// As Ixidron enters the battlefield, turn all other nontoken creatures face down.
- this.addAbility(new EntersBattlefieldAbility(new BecomesFaceDownCreatureAllEffect(filterTurnFaceDown)));
+ this.addAbility(new AsEntersBattlefieldAbility(new BecomesFaceDownCreatureAllEffect(filterTurnFaceDown)));
// Ixidron's power and toughness are each equal to the number of face-down creatures on the battlefield.
this.addAbility(new SimpleStaticAbility(Zone.ALL, new SetPowerToughnessSourceEffect(new PermanentsOnBattlefieldCount(filter), Duration.EndOfGame)));
diff --git a/Mage.Sets/src/mage/cards/k/KaervekTheMerciless.java b/Mage.Sets/src/mage/cards/k/KaervekTheMerciless.java
index 22f1c22853..dbbc452823 100644
--- a/Mage.Sets/src/mage/cards/k/KaervekTheMerciless.java
+++ b/Mage.Sets/src/mage/cards/k/KaervekTheMerciless.java
@@ -51,7 +51,7 @@ class KaervekTheMercilessEffect extends OneShotEffect {
public KaervekTheMercilessEffect() {
super(Outcome.Benefit);
- this.staticText = "{this} deals damage to any target equal to that spell's mana value";
+ this.staticText = "{this} deals damage equal to that spell's mana value to any target";
}
public KaervekTheMercilessEffect(final KaervekTheMercilessEffect effect) {
diff --git a/Mage.Sets/src/mage/cards/l/LiegeOfThePit.java b/Mage.Sets/src/mage/cards/l/LiegeOfThePit.java
index a42774758a..50b0a4b1be 100644
--- a/Mage.Sets/src/mage/cards/l/LiegeOfThePit.java
+++ b/Mage.Sets/src/mage/cards/l/LiegeOfThePit.java
@@ -57,7 +57,7 @@ class LiegeOfThePitEffect extends OneShotEffect {
public LiegeOfThePitEffect() {
super(Outcome.Damage);
- this.staticText = "Sacrifice a creature other than {this}. If you can't {this} deals 7 damage to you.";
+ this.staticText = "sacrifice a creature other than {this}. If you can't, {this} deals 7 damage to you.";
}
public LiegeOfThePitEffect(final LiegeOfThePitEffect effect) {
diff --git a/Mage.Sets/src/mage/cards/m/Molder.java b/Mage.Sets/src/mage/cards/m/Molder.java
index a4f80e6031..0a41990d80 100644
--- a/Mage.Sets/src/mage/cards/m/Molder.java
+++ b/Mage.Sets/src/mage/cards/m/Molder.java
@@ -27,7 +27,7 @@ public final class Molder extends CardImpl {
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{X}{G}");
// Destroy target artifact or enchantment with converted mana cost X. It can't be regenerated. You gain X life.
- this.getSpellAbility().addEffect(new DestroyTargetEffect("Destroy target artifact or enchantment with mana value X", true));
+ this.getSpellAbility().addEffect(new DestroyTargetEffect("Destroy target artifact or enchantment with mana value X. It can't be regenerated", true));
this.getSpellAbility().addEffect(new GainLifeEffect(ManacostVariableValue.REGULAR));
this.getSpellAbility().setTargetAdjuster(MolderAdjuster.instance);
}
diff --git a/Mage.Sets/src/mage/cards/o/OrcishCannonade.java b/Mage.Sets/src/mage/cards/o/OrcishCannonade.java
index f83d0fe652..fe965ea919 100644
--- a/Mage.Sets/src/mage/cards/o/OrcishCannonade.java
+++ b/Mage.Sets/src/mage/cards/o/OrcishCannonade.java
@@ -27,7 +27,7 @@ public final class OrcishCannonade extends CardImpl {
effect.setText("and 3 damage to you");
this.getSpellAbility().addEffect(effect);
// Draw a card.
- this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1));
+ this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1).concatBy("
"));
}
private OrcishCannonade(final OrcishCannonade card) {
diff --git a/Mage.Sets/src/mage/cards/s/SaffiEriksdotter.java b/Mage.Sets/src/mage/cards/s/SaffiEriksdotter.java
index 48b69f2c1c..a0168a02bc 100644
--- a/Mage.Sets/src/mage/cards/s/SaffiEriksdotter.java
+++ b/Mage.Sets/src/mage/cards/s/SaffiEriksdotter.java
@@ -57,7 +57,7 @@ class SaffiEriksdotterEffect extends OneShotEffect {
public SaffiEriksdotterEffect() {
super(Outcome.PutCreatureInPlay);
- this.staticText = "When target creature is put into your graveyard from the battlefield this turn, return that card to the battlefield";
+ this.staticText = "When target creature is put into your graveyard this turn, return that card to the battlefield";
}
public SaffiEriksdotterEffect(final SaffiEriksdotterEffect effect) {
diff --git a/Mage.Sets/src/mage/cards/s/SkulkingKnight.java b/Mage.Sets/src/mage/cards/s/SkulkingKnight.java
index 38c4408389..8a6c0ededa 100644
--- a/Mage.Sets/src/mage/cards/s/SkulkingKnight.java
+++ b/Mage.Sets/src/mage/cards/s/SkulkingKnight.java
@@ -28,7 +28,7 @@ public final class SkulkingKnight extends CardImpl {
// Flanking
this.addAbility(new FlankingAbility());
// When Skulking Knight becomes the target of a spell or ability, sacrifice it.
- this.addAbility(new BecomesTargetTriggeredAbility(new SacrificeSourceEffect()));
+ this.addAbility(new BecomesTargetTriggeredAbility(new SacrificeSourceEffect().setText("sacrifice it")));
}
private SkulkingKnight(final SkulkingKnight card) {
diff --git a/Mage.Sets/src/mage/cards/s/SpikeTiller.java b/Mage.Sets/src/mage/cards/s/SpikeTiller.java
index c280ad938e..489dc31835 100644
--- a/Mage.Sets/src/mage/cards/s/SpikeTiller.java
+++ b/Mage.Sets/src/mage/cards/s/SpikeTiller.java
@@ -45,7 +45,7 @@ public final class SpikeTiller extends CardImpl {
this.addAbility(ability);
// {2}, Remove a +1/+1 counter from Spike Tiller: Target land becomes a 2/2 creature that's still a land. Put a +1/+1 counter on it.
- Ability ability2 = new SimpleActivatedAbility(Zone.BATTLEFIELD, new BecomesCreatureTargetEffect(new CreatureToken(2, 2), false, true, Duration.EndOfGame).setText("Target land becomes a 2/2 creature that's still a land. "), new GenericManaCost(2));
+ Ability ability2 = new SimpleActivatedAbility(Zone.BATTLEFIELD, new BecomesCreatureTargetEffect(new CreatureToken(2, 2), false, true, Duration.EndOfGame).setText("Target land becomes a 2/2 creature that's still a land"), new GenericManaCost(2));
ability2.addCost(new RemoveCountersSourceCost(CounterType.P1P1.createInstance()));
ability2.addEffect(new AddCountersTargetEffect(CounterType.P1P1.createInstance()).setText("Put a +1/+1 counter on it."));
ability2.addTarget(new TargetLandPermanent());
diff --git a/Mage.Sets/src/mage/cards/s/SpriteNoble.java b/Mage.Sets/src/mage/cards/s/SpriteNoble.java
index eb527b73de..5baa3d98b8 100644
--- a/Mage.Sets/src/mage/cards/s/SpriteNoble.java
+++ b/Mage.Sets/src/mage/cards/s/SpriteNoble.java
@@ -4,14 +4,14 @@ import mage.MageInt;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.costs.common.TapSourceCost;
-import mage.abilities.effects.common.continuous.BoostControlledEffect;
+import mage.abilities.effects.common.continuous.BoostAllEffect;
import mage.abilities.keyword.FlyingAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.SubType;
-import mage.constants.Zone;
+import mage.constants.TargetController;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.mageobject.AbilityPredicate;
@@ -22,9 +22,11 @@ import java.util.UUID;
*/
public final class SpriteNoble extends CardImpl {
- private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Creatures you control with flying");
+ private static final FilterCreaturePermanent filter
+ = new FilterCreaturePermanent("creatures you control with flying");
static {
+ filter.add(TargetController.YOU.getControllerPredicate());
filter.add(new AbilityPredicate(FlyingAbility.class));
}
@@ -36,11 +38,16 @@ public final class SpriteNoble extends CardImpl {
// Flying
this.addAbility(FlyingAbility.getInstance());
+
// Other creatures you control with flying get +0/+1.
- this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostControlledEffect(0, 1, Duration.WhileOnBattlefield, filter, true)));
+ this.addAbility(new SimpleStaticAbility(new BoostAllEffect(
+ 0, 1, Duration.WhileOnBattlefield, filter, true
+ )));
+
// {tap}: Other creatures you control with flying get +1/+0 until end of turn.
- this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostControlledEffect(1, 0, Duration.EndOfTurn, filter, true),
- new TapSourceCost()));
+ this.addAbility(new SimpleActivatedAbility(new BoostAllEffect(
+ 1, 0, Duration.EndOfTurn, filter, true
+ ), new TapSourceCost()));
}
private SpriteNoble(final SpriteNoble card) {
diff --git a/Mage.Sets/src/mage/cards/s/StonebrowKrosanHero.java b/Mage.Sets/src/mage/cards/s/StonebrowKrosanHero.java
index 9743ebadd6..8d82b17212 100644
--- a/Mage.Sets/src/mage/cards/s/StonebrowKrosanHero.java
+++ b/Mage.Sets/src/mage/cards/s/StonebrowKrosanHero.java
@@ -23,7 +23,7 @@ import java.util.UUID;
*/
public final class StonebrowKrosanHero extends CardImpl {
- private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent(" creature you control with trample");
+ private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("creature you control with trample");
static {
filter.add(new AbilityPredicate(TrampleAbility.class));
}
diff --git a/Mage.Sets/src/mage/cards/t/TraitorsClutch.java b/Mage.Sets/src/mage/cards/t/TraitorsClutch.java
index 50b5d830ef..28e7f43796 100644
--- a/Mage.Sets/src/mage/cards/t/TraitorsClutch.java
+++ b/Mage.Sets/src/mage/cards/t/TraitorsClutch.java
@@ -1,10 +1,7 @@
-
package mage.cards.t;
-import java.util.UUID;
import mage.ObjectColor;
import mage.abilities.costs.mana.ManaCostsImpl;
-import mage.abilities.effects.Effect;
import mage.abilities.effects.common.continuous.BecomesColorTargetEffect;
import mage.abilities.effects.common.continuous.BoostTargetEffect;
import mage.abilities.effects.common.continuous.GainAbilityTargetEffect;
@@ -14,31 +11,32 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
-import mage.constants.TimingRule;
import mage.target.common.TargetCreaturePermanent;
+import java.util.UUID;
+
/**
- *
* @author LevelX2
*/
public final class TraitorsClutch extends CardImpl {
public TraitorsClutch(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{4}{B}");
-
+ super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{4}{B}");
// Target creature gets +1/+0, becomes black, and gains shadow until end of turn.
- this.getSpellAbility().addEffect(new BoostTargetEffect(1,0, Duration.EndOfTurn));
- Effect effect = new BecomesColorTargetEffect(ObjectColor.BLACK, Duration.EndOfTurn);
- effect.setText(", becomes black");
- this.getSpellAbility().addEffect(effect);
- effect = new GainAbilityTargetEffect(ShadowAbility.getInstance(), Duration.EndOfTurn);
- effect.setText(", and gains shadow until end of turn");
- this.getSpellAbility().addEffect(effect);
+ this.getSpellAbility().addEffect(new BoostTargetEffect(
+ 1, 0, Duration.EndOfTurn
+ ).setText("target creature gets +1/+0"));
+ this.getSpellAbility().addEffect(new BecomesColorTargetEffect(
+ ObjectColor.BLACK, Duration.EndOfTurn
+ ).setText(", becomes black"));
+ this.getSpellAbility().addEffect(new GainAbilityTargetEffect(
+ ShadowAbility.getInstance(), Duration.EndOfTurn
+ ).setText(", and gains shadow until end of turn"));
this.getSpellAbility().addTarget(new TargetCreaturePermanent());
// Flashback {1}{B}
- this.addAbility(new FlashbackAbility(this, new ManaCostsImpl("{1}{B}")));
+ this.addAbility(new FlashbackAbility(this, new ManaCostsImpl<>("{1}{B}")));
}
private TraitorsClutch(final TraitorsClutch card) {
diff --git a/Mage.Sets/src/mage/cards/u/UnyaroBees.java b/Mage.Sets/src/mage/cards/u/UnyaroBees.java
index 05c9a14042..d797d3087f 100644
--- a/Mage.Sets/src/mage/cards/u/UnyaroBees.java
+++ b/Mage.Sets/src/mage/cards/u/UnyaroBees.java
@@ -35,7 +35,7 @@ public final class UnyaroBees extends CardImpl {
// {G}: Unyaro Bees gets +1/+1 until end of turn.
this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostSourceEffect(1, 1, Duration.EndOfTurn), new ManaCostsImpl("{G}")));
// {3}{G}, Sacrifice Unyaro Bees: Unyaro Bees deals 2 damage to any target.
- Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(2), new ManaCostsImpl("{3}{G}"));
+ Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(2, "it"), new ManaCostsImpl("{3}{G}"));
ability.addCost(new SacrificeSourceCost());
ability.addTarget(new TargetAnyTarget());
this.addAbility(ability);
diff --git a/Mage.Sets/src/mage/cards/y/YavimayaDryad.java b/Mage.Sets/src/mage/cards/y/YavimayaDryad.java
index e125c1975c..427b2bbf30 100644
--- a/Mage.Sets/src/mage/cards/y/YavimayaDryad.java
+++ b/Mage.Sets/src/mage/cards/y/YavimayaDryad.java
@@ -60,7 +60,7 @@ class YavimayaDryadEffect extends SearchEffect {
public YavimayaDryadEffect(TargetCardInLibrary target) {
super(target, Outcome.PutLandInPlay);
- staticText = "you may search your library for a Forest card and put it onto the battlefield tapped under target player's control. If you do, shuffle";
+ staticText = "you may search your library for a Forest card, put it onto the battlefield tapped under target player's control, then shuffle";
}
public YavimayaDryadEffect(final YavimayaDryadEffect effect) {
diff --git a/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java b/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java
index 550511d423..04c4d9b44a 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 = "AFC"; // check all abilities and output cards with wrong abilities texts;
+ private static final String FULL_ABILITIES_CHECK_SET_CODE = "TSP"; // 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/ActivateOnlyByOpponentActivatedAbility.java b/Mage/src/main/java/mage/abilities/common/ActivateOnlyByOpponentActivatedAbility.java
index 62c78b6791..99cb57d335 100644
--- a/Mage/src/main/java/mage/abilities/common/ActivateOnlyByOpponentActivatedAbility.java
+++ b/Mage/src/main/java/mage/abilities/common/ActivateOnlyByOpponentActivatedAbility.java
@@ -29,6 +29,6 @@ public class ActivateOnlyByOpponentActivatedAbility extends ActivatedAbilityImpl
@Override
public String getRule() {
- return super.getRule() + " Only any opponent may activate this ability.";
+ return super.getRule() + " Only your opponents may activate this ability.";
}
}
diff --git a/Mage/src/main/java/mage/abilities/effects/keyword/ProtectionChosenColorAttachedEffect.java b/Mage/src/main/java/mage/abilities/effects/keyword/ProtectionChosenColorAttachedEffect.java
index 8520d285d6..01bb7f25ab 100644
--- a/Mage/src/main/java/mage/abilities/effects/keyword/ProtectionChosenColorAttachedEffect.java
+++ b/Mage/src/main/java/mage/abilities/effects/keyword/ProtectionChosenColorAttachedEffect.java
@@ -27,7 +27,7 @@ public class ProtectionChosenColorAttachedEffect extends ContinuousEffectImpl {
public ProtectionChosenColorAttachedEffect(boolean notRemoveItself) {
super(Duration.WhileOnBattlefield, Layer.AbilityAddingRemovingEffects_6, SubLayer.NA, Outcome.AddAbility);
this.notRemoveItself = notRemoveItself;
- staticText = "{this} has protection from the chosen color" + (notRemoveItself ? ". This effect doesn't remove {this}" : "");
+ staticText = "enchanted creature has protection from the chosen color" + (notRemoveItself ? ". This effect doesn't remove {this}" : "");
}
public ProtectionChosenColorAttachedEffect(final ProtectionChosenColorAttachedEffect effect) {
diff --git a/Mage/src/main/java/mage/abilities/effects/mana/AddManaInAnyCombinationEffect.java b/Mage/src/main/java/mage/abilities/effects/mana/AddManaInAnyCombinationEffect.java
index 30490589f2..bad7e9da6c 100644
--- a/Mage/src/main/java/mage/abilities/effects/mana/AddManaInAnyCombinationEffect.java
+++ b/Mage/src/main/java/mage/abilities/effects/mana/AddManaInAnyCombinationEffect.java
@@ -169,7 +169,7 @@ public class AddManaInAnyCombinationEffect extends ManaEffect {
sb.append('{').append(coloredManaSymbol.toString()).append('}');
}
}
- if (amountString.equals("X")) {
+ if (amountString.equals("X") && !amount.getMessage().isEmpty()) {
sb.append(", where X is ");
sb.append(amount.getMessage());
}