diff --git a/Mage.Sets/src/mage/cards/a/AetherMeltdown.java b/Mage.Sets/src/mage/cards/a/AetherMeltdown.java
index cd738baba4a..5fe1e7abe7b 100644
--- a/Mage.Sets/src/mage/cards/a/AetherMeltdown.java
+++ b/Mage.Sets/src/mage/cards/a/AetherMeltdown.java
@@ -24,7 +24,7 @@ import mage.target.TargetPermanent;
*/
public final class AetherMeltdown extends CardImpl {
- private static final FilterPermanent filter = new FilterPermanent("creature or vehicle");
+ private static final FilterPermanent filter = new FilterPermanent("creature or Vehicle");
static {
filter.add(Predicates.or(CardType.CREATURE.getPredicate(), SubType.VEHICLE.getPredicate()));
@@ -47,7 +47,6 @@ public final class AetherMeltdown extends CardImpl {
this.addAbility(new EntersBattlefieldTriggeredAbility(new GetEnergyCountersControllerEffect(2)));
// Enchanted permanent gets -4/-0.
Effect effect = new BoostEnchantedEffect(-4, 0, Duration.WhileOnBattlefield);
- effect.setText("Enchanted permanent gets -4/-0");
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, effect));
}
diff --git a/Mage.Sets/src/mage/cards/a/ArchangelOfTithes.java b/Mage.Sets/src/mage/cards/a/ArchangelOfTithes.java
index bd98a677cd4..82f961cb8d2 100644
--- a/Mage.Sets/src/mage/cards/a/ArchangelOfTithes.java
+++ b/Mage.Sets/src/mage/cards/a/ArchangelOfTithes.java
@@ -54,7 +54,7 @@ class ArchangelOfTithesPayManaToAttackAllEffect extends CantAttackYouUnlessPayMa
ArchangelOfTithesPayManaToAttackAllEffect() {
super(new ManaCostsImpl<>("{1}"), true);
- staticText = "As long as {this} is untapped, creatures can't attack you or a planeswalker you control unless their controller pays {1} for each of those creatures.";
+ staticText = "As long as {this} is untapped, creatures can't attack you or planeswalkers you control unless their controller pays {1} for each of those creatures.";
}
ArchangelOfTithesPayManaToAttackAllEffect(ArchangelOfTithesPayManaToAttackAllEffect effect) {
diff --git a/Mage.Sets/src/mage/cards/a/ArchmageAscension.java b/Mage.Sets/src/mage/cards/a/ArchmageAscension.java
index 8cd6ecedf44..ef2a99e7652 100644
--- a/Mage.Sets/src/mage/cards/a/ArchmageAscension.java
+++ b/Mage.Sets/src/mage/cards/a/ArchmageAscension.java
@@ -35,7 +35,7 @@ public final class ArchmageAscension extends CardImpl {
new AddCountersSourceEffect(CounterType.QUEST.createInstance(1)),
TargetController.EACH_PLAYER, true
), ArchmageAscensionCondition.instance, "At the beginning of each end step, " +
- "if you drew two or more cards this turn, you may put a quest counter on {this}"
+ "if you drew two or more cards this turn, you may put a quest counter on {this}."
), new CardsAmountDrawnThisTurnWatcher());
// As long as Archmage Ascension has six or more quest counters on it, if you would draw a card,
diff --git a/Mage.Sets/src/mage/cards/a/AuriokSalvagers.java b/Mage.Sets/src/mage/cards/a/AuriokSalvagers.java
index 640982c66de..396921324de 100644
--- a/Mage.Sets/src/mage/cards/a/AuriokSalvagers.java
+++ b/Mage.Sets/src/mage/cards/a/AuriokSalvagers.java
@@ -6,6 +6,7 @@ import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.mana.ManaCostsImpl;
+import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect;
import mage.abilities.effects.common.ReturnToHandTargetEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
@@ -37,7 +38,7 @@ public final class AuriokSalvagers extends CardImpl {
this.toughness = new MageInt(4);
// {1}{W}: Return target artifact card with converted mana cost 1 or less from your graveyard to your hand.
- Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new ReturnToHandTargetEffect(),new ManaCostsImpl("{1}{W}"));
+ Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new ReturnFromGraveyardToHandTargetEffect(),new ManaCostsImpl("{1}{W}"));
ability.addTarget(new TargetCardInYourGraveyard(filter));
this.addAbility(ability);
diff --git a/Mage.Sets/src/mage/cards/b/Bifurcate.java b/Mage.Sets/src/mage/cards/b/Bifurcate.java
index a3f56f69785..23ecae9a437 100644
--- a/Mage.Sets/src/mage/cards/b/Bifurcate.java
+++ b/Mage.Sets/src/mage/cards/b/Bifurcate.java
@@ -54,7 +54,7 @@ class BifurcateEffect extends OneShotEffect {
public BifurcateEffect() {
super(Outcome.Benefit);
- this.staticText = "Search your library for a permanent card with the same name as target nontoken creature and put that card onto the battlefield. Then shuffle";
+ this.staticText = "search your library for a permanent card with the same name as target nontoken creature, put that card onto the battlefield, then shuffle";
}
public BifurcateEffect(final BifurcateEffect effect) {
diff --git a/Mage.Sets/src/mage/cards/b/BloodshotTrainee.java b/Mage.Sets/src/mage/cards/b/BloodshotTrainee.java
index b17c4d7223e..a46fbb0e55e 100644
--- a/Mage.Sets/src/mage/cards/b/BloodshotTrainee.java
+++ b/Mage.Sets/src/mage/cards/b/BloodshotTrainee.java
@@ -1,12 +1,9 @@
-
package mage.cards.b;
-import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
-import mage.abilities.common.SimpleActivatedAbility;
-import mage.abilities.costs.Cost;
-import mage.abilities.costs.CostImpl;
+import mage.abilities.common.ActivateIfConditionActivatedAbility;
+import mage.abilities.condition.Condition;
import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.effects.common.DamageTargetEffect;
import mage.cards.CardImpl;
@@ -18,23 +15,26 @@ import mage.game.Game;
import mage.game.permanent.Permanent;
import mage.target.common.TargetCreaturePermanent;
+import java.util.UUID;
+
/**
- *
* @author North
*/
public final class BloodshotTrainee extends CardImpl {
public BloodshotTrainee(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{R}");
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{R}");
this.subtype.add(SubType.GOBLIN);
this.subtype.add(SubType.WARRIOR);
this.power = new MageInt(2);
this.toughness = new MageInt(3);
- SimpleActivatedAbility ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(4), new TapSourceCost());
+ Ability ability = new ActivateIfConditionActivatedAbility(
+ Zone.BATTLEFIELD, new DamageTargetEffect(4),
+ new TapSourceCost(), BloodshotTraineeCondition.instance
+ );
ability.addTarget(new TargetCreaturePermanent());
- ability.addCost(new BloodshotTraineeCost());
this.addAbility(ability);
}
@@ -48,35 +48,17 @@ public final class BloodshotTrainee extends CardImpl {
}
}
-class BloodshotTraineeCost extends CostImpl {
+enum BloodshotTraineeCondition implements Condition {
+ instance;
- public BloodshotTraineeCost() {
- this.text = "Activate only if Bloodshot Trainee's power is 4 or greater";
- }
-
- public BloodshotTraineeCost(final BloodshotTraineeCost cost) {
- super(cost);
+ @Override
+ public boolean apply(Game game, Ability source) {
+ Permanent permanent = source.getSourcePermanentIfItStillExists(game);
+ return permanent != null && permanent.getPower().getValue() >= 4;
}
@Override
- public BloodshotTraineeCost copy() {
- return new BloodshotTraineeCost(this);
- }
-
- @Override
- public boolean canPay(Ability ability, Ability source, UUID controllerId, Game game) {
- Permanent permanent = game.getPermanent(source.getSourceId());
- if (permanent != null) {
- if (permanent.getPower().getValue() >= 4) {
- return true;
- }
- }
- return false;
- }
-
- @Override
- public boolean pay(Ability ability, Game game, Ability source, UUID controllerId, boolean noMana, Cost costToPay) {
- this.paid = true;
- return paid;
+ public String toString() {
+ return "{this}'s power is 4 or greater";
}
}
diff --git a/Mage.Sets/src/mage/cards/b/BoldwyrHeavyweights.java b/Mage.Sets/src/mage/cards/b/BoldwyrHeavyweights.java
index 2b1dc76a349..403f69d1fef 100644
--- a/Mage.Sets/src/mage/cards/b/BoldwyrHeavyweights.java
+++ b/Mage.Sets/src/mage/cards/b/BoldwyrHeavyweights.java
@@ -53,7 +53,7 @@ class BoldwyrHeavyweightsEffect extends OneShotEffect {
BoldwyrHeavyweightsEffect() {
super(Outcome.Detriment);
- this.staticText = "each opponent may search their library for a creature card and put it onto the battlefield. Then each player who searched their library this way shuffles it";
+ this.staticText = "each opponent may search their library for a creature card and put it onto the battlefield. Then each player who searched their library this way shuffles";
}
BoldwyrHeavyweightsEffect(final BoldwyrHeavyweightsEffect effect) {
diff --git a/Mage.Sets/src/mage/cards/b/BoundlessRealms.java b/Mage.Sets/src/mage/cards/b/BoundlessRealms.java
index 15d0d512333..326224da074 100644
--- a/Mage.Sets/src/mage/cards/b/BoundlessRealms.java
+++ b/Mage.Sets/src/mage/cards/b/BoundlessRealms.java
@@ -46,7 +46,8 @@ class BoundlessRealmsEffect extends OneShotEffect {
public BoundlessRealmsEffect() {
super(Outcome.Benefit);
- this.staticText = "Search your library for up to X basic land cards, where X is the number of lands you control, and put them onto the battlefield tapped. Then shuffle.";
+ this.staticText = "search your library for up to X basic land cards, where X is the number of " +
+ "lands you control, put them onto the battlefield tapped, then shuffle";
}
public BoundlessRealmsEffect(final BoundlessRealmsEffect effect) {
diff --git a/Mage.Sets/src/mage/cards/d/DeathsOasis.java b/Mage.Sets/src/mage/cards/d/DeathsOasis.java
index 4a9e3572229..4e5d95e5021 100644
--- a/Mage.Sets/src/mage/cards/d/DeathsOasis.java
+++ b/Mage.Sets/src/mage/cards/d/DeathsOasis.java
@@ -47,7 +47,7 @@ public final class DeathsOasis extends CardImpl {
// {1}, Sacrifice Death's Oasis: You gain life equal to the greatest converted mana cost among creatures you control.
Ability ability = new SimpleActivatedAbility(
new GainLifeEffect(DeathsOasisValue.instance)
- .setText("you gain life equal to the greatest mana value among creatures you control"),
+ .setText("you gain life equal to the highest mana value among creatures you control"),
new GenericManaCost(1)
);
ability.addCost(new SacrificeSourceCost());
diff --git a/Mage.Sets/src/mage/cards/d/DescendantsPath.java b/Mage.Sets/src/mage/cards/d/DescendantsPath.java
index 6bf349776a5..a7ed285fd5e 100644
--- a/Mage.Sets/src/mage/cards/d/DescendantsPath.java
+++ b/Mage.Sets/src/mage/cards/d/DescendantsPath.java
@@ -51,8 +51,8 @@ class DescendantsPathEffect extends OneShotEffect {
super(Outcome.Discard);
this.staticText = "reveal the top card of your library. If it's a creature "
+ "card that shares a creature type with a creature you control, "
- + "you may cast that card without paying its mana cost. Otherwise, "
- + "put that card on the bottom of your library";
+ + "you may cast it without paying its mana cost. If you don't cast it, " +
+ "put it on the bottom of your library";
}
public DescendantsPathEffect(final DescendantsPathEffect effect) {
diff --git a/Mage.Sets/src/mage/cards/e/EverbarkShaman.java b/Mage.Sets/src/mage/cards/e/EverbarkShaman.java
index 7760992bc71..8a1533f8cf5 100644
--- a/Mage.Sets/src/mage/cards/e/EverbarkShaman.java
+++ b/Mage.Sets/src/mage/cards/e/EverbarkShaman.java
@@ -25,7 +25,7 @@ import mage.target.common.TargetCardInYourGraveyard;
public final class EverbarkShaman extends CardImpl {
private static final FilterCard filterForest = new FilterCard("Forest");
- private static final FilterCard filterTreefolk = new FilterCard("Treefolk from your graveyard");
+ private static final FilterCard filterTreefolk = new FilterCard("Treefolk card from your graveyard");
static {
filterForest.add(SubType.FOREST.getPredicate());
diff --git a/Mage.Sets/src/mage/cards/f/FireBowman.java b/Mage.Sets/src/mage/cards/f/FireBowman.java
index 18712393fef..7b98f5f4d38 100644
--- a/Mage.Sets/src/mage/cards/f/FireBowman.java
+++ b/Mage.Sets/src/mage/cards/f/FireBowman.java
@@ -1,7 +1,5 @@
-
package mage.cards.f;
-import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.ActivateIfConditionActivatedAbility;
@@ -15,14 +13,15 @@ import mage.constants.SubType;
import mage.constants.Zone;
import mage.target.common.TargetAnyTarget;
+import java.util.UUID;
+
/**
- *
* @author fireshoes
*/
public final class FireBowman extends CardImpl {
public FireBowman(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{R}");
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{R}");
this.subtype.add(SubType.HUMAN);
this.subtype.add(SubType.SOLDIER);
this.subtype.add(SubType.ARCHER);
@@ -30,8 +29,10 @@ public final class FireBowman extends CardImpl {
this.toughness = new MageInt(1);
// Sacrifice Fire Bowman: Fire Bowman deals 1 damage to any target. Activate this ability only during your turn, before attackers are declared.
- Ability ability = new ActivateIfConditionActivatedAbility(Zone.BATTLEFIELD,
- new DamageTargetEffect(1), new SacrificeSourceCost(), MyTurnBeforeAttackersDeclaredCondition.instance);
+ Ability ability = new ActivateIfConditionActivatedAbility(
+ Zone.BATTLEFIELD, new DamageTargetEffect(1, "it"),
+ new SacrificeSourceCost(), MyTurnBeforeAttackersDeclaredCondition.instance
+ );
ability.addTarget(new TargetAnyTarget());
this.addAbility(ability);
}
diff --git a/Mage.Sets/src/mage/cards/f/FireJuggler.java b/Mage.Sets/src/mage/cards/f/FireJuggler.java
index e2fdf018e77..e68eb240e1c 100644
--- a/Mage.Sets/src/mage/cards/f/FireJuggler.java
+++ b/Mage.Sets/src/mage/cards/f/FireJuggler.java
@@ -28,7 +28,7 @@ public final class FireJuggler extends CardImpl {
this.toughness = new MageInt(2);
// Whenever Fire Juggler becomes blocked, clash with an opponent. If you win, Fire Juggler deals 4 damage to each creature blocking it.
- FilterPermanent filter = new FilterPermanent("each creature blocking it");
+ FilterPermanent filter = new FilterPermanent("creature blocking it");
filter.add(new BlockingAttackerIdPredicate(this.getId()));
this.addAbility(new BecomesBlockedSourceTriggeredAbility(new DoIfClashWonEffect(new DamageAllEffect(4,filter)),false));
}
diff --git a/Mage.Sets/src/mage/cards/f/ForgeArmor.java b/Mage.Sets/src/mage/cards/f/ForgeArmor.java
index 2cd4dec3ac1..172af389491 100644
--- a/Mage.Sets/src/mage/cards/f/ForgeArmor.java
+++ b/Mage.Sets/src/mage/cards/f/ForgeArmor.java
@@ -9,7 +9,8 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.counters.CounterType;
-import mage.filter.common.FilterControlledArtifactPermanent;
+import mage.filter.StaticFilters;
+import mage.filter.common.FilterControlledPermanent;
import mage.target.common.TargetControlledPermanent;
import mage.target.common.TargetCreaturePermanent;
@@ -23,7 +24,7 @@ public final class ForgeArmor extends CardImpl {
super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{4}{R}");
// As an additional cost to cast Forge Armor, sacrifice an artifact.
- this.getSpellAbility().addCost(new SacrificeTargetCost(new TargetControlledPermanent(new FilterControlledArtifactPermanent())));
+ this.getSpellAbility().addCost(new SacrificeTargetCost(new TargetControlledPermanent(new FilterControlledPermanent(StaticFilters.FILTER_CONTROLLED_PERMANENT_ARTIFACT_AN))));
// Put X +1/+1 counters on target creature, where X is the sacrificed artifact's converted mana cost.
this.getSpellAbility().addEffect(new AddCountersTargetEffect(new AddCountersTargetEffect(
CounterType.P1P1.createInstance(), new SacrificeCostConvertedMana("artifact"))));
diff --git a/Mage.Sets/src/mage/cards/f/FromTheAshes.java b/Mage.Sets/src/mage/cards/f/FromTheAshes.java
index 99ed9db9cd1..90c4edbc620 100644
--- a/Mage.Sets/src/mage/cards/f/FromTheAshes.java
+++ b/Mage.Sets/src/mage/cards/f/FromTheAshes.java
@@ -48,7 +48,7 @@ class FromTheAshesEffect extends OneShotEffect {
public FromTheAshesEffect() {
super(Outcome.Benefit);
- this.staticText = "Destroy all nonbasic lands. For each land destroyed this way, its controller may search their library for a basic land card and put it onto the battlefield. Then each player who searched their library this way shuffles it";
+ this.staticText = "Destroy all nonbasic lands. For each land destroyed this way, its controller may search their library for a basic land card and put it onto the battlefield. Then each player who searched their library this way shuffles";
}
public FromTheAshesEffect(final FromTheAshesEffect effect) {
diff --git a/Mage.Sets/src/mage/cards/g/GemOfBecoming.java b/Mage.Sets/src/mage/cards/g/GemOfBecoming.java
index 9ccd85ccc2d..9873bfba026 100644
--- a/Mage.Sets/src/mage/cards/g/GemOfBecoming.java
+++ b/Mage.Sets/src/mage/cards/g/GemOfBecoming.java
@@ -30,7 +30,8 @@ public final class GemOfBecoming extends CardImpl {
Ability ability = new SimpleActivatedAbility(
new SearchLibraryPutInHandEffect(
new GemOfBecomingTarget(), true
- ), new GenericManaCost(3)
+ ).setText("search your library for an Island card, a Swamp card, and a Mountain card. " +
+ "Reveal those cards, put them into your hand, then shuffle"), new GenericManaCost(3)
);
ability.addCost(new TapSourceCost());
ability.addCost(new SacrificeSourceCost());
diff --git a/Mage.Sets/src/mage/cards/g/Gigantiform.java b/Mage.Sets/src/mage/cards/g/Gigantiform.java
index 535f5876b85..9aa5aa4f76a 100644
--- a/Mage.Sets/src/mage/cards/g/Gigantiform.java
+++ b/Mage.Sets/src/mage/cards/g/Gigantiform.java
@@ -84,7 +84,7 @@ class GigantiformAbility extends StaticAbility {
@Override
public String getRule() {
- return "Enchanted creature has base power and toughness 8/8 and has trample";
+ return "Enchanted creature has base power and toughness 8/8 and has trample.";
}
}
diff --git a/Mage.Sets/src/mage/cards/g/GraspingCurrent.java b/Mage.Sets/src/mage/cards/g/GraspingCurrent.java
index 24777c90703..2433de4b933 100644
--- a/Mage.Sets/src/mage/cards/g/GraspingCurrent.java
+++ b/Mage.Sets/src/mage/cards/g/GraspingCurrent.java
@@ -31,7 +31,7 @@ public final class GraspingCurrent extends CardImpl {
this.getSpellAbility().addTarget(new TargetCreaturePermanent(0, 2));
// Search your library and/or graveyard for a card named Jace, Ingenious Mind-Mage, reveal it, then put it into your hand. If you searched your library this way, shuffle it.
- this.getSpellAbility().addEffect(new SearchLibraryGraveyardPutInHandEffect(filter));
+ this.getSpellAbility().addEffect(new SearchLibraryGraveyardPutInHandEffect(filter).concatBy("
"));
}
private GraspingCurrent(final GraspingCurrent card) {
diff --git a/Mage.Sets/src/mage/cards/g/GreenhiltTrainee.java b/Mage.Sets/src/mage/cards/g/GreenhiltTrainee.java
index cd869157822..74c544c5aef 100644
--- a/Mage.Sets/src/mage/cards/g/GreenhiltTrainee.java
+++ b/Mage.Sets/src/mage/cards/g/GreenhiltTrainee.java
@@ -1,45 +1,44 @@
-
-
package mage.cards.g;
-import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
-import mage.abilities.common.SimpleActivatedAbility;
-import mage.abilities.costs.Cost;
-import mage.abilities.costs.CostImpl;
+import mage.abilities.common.ActivateIfConditionActivatedAbility;
+import mage.abilities.condition.Condition;
import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.effects.common.continuous.BoostTargetEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
-import mage.constants.SubType;
import mage.constants.Duration;
+import mage.constants.SubType;
import mage.constants.Zone;
import mage.game.Game;
import mage.game.permanent.Permanent;
import mage.target.common.TargetCreaturePermanent;
+import java.util.UUID;
+
/**
- *
* @author Loki
*/
public final class GreenhiltTrainee extends CardImpl {
- public GreenhiltTrainee (UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{G}");
+ public GreenhiltTrainee(UUID ownerId, CardSetInfo setInfo) {
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{G}");
this.subtype.add(SubType.ELF);
this.subtype.add(SubType.WARRIOR);
this.power = new MageInt(2);
this.toughness = new MageInt(3);
- Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostTargetEffect(4, 4, Duration.EndOfTurn), new TapSourceCost());
+ Ability ability = new ActivateIfConditionActivatedAbility(
+ Zone.BATTLEFIELD, new BoostTargetEffect(4, 4, Duration.EndOfTurn),
+ new TapSourceCost(), GreenhiltTraineeCondition.instance
+ );
ability.addTarget(new TargetCreaturePermanent());
- ability.addCost(new GreenhiltTraineeCost());
this.addAbility(ability);
}
- public GreenhiltTrainee (final GreenhiltTrainee card) {
+ public GreenhiltTrainee(final GreenhiltTrainee card) {
super(card);
}
@@ -49,35 +48,17 @@ public final class GreenhiltTrainee extends CardImpl {
}
}
-class GreenhiltTraineeCost extends CostImpl {
+enum GreenhiltTraineeCondition implements Condition {
+ instance;
- public GreenhiltTraineeCost() {
- this.text = "Activate only if Greenhilt Trainee's power is 4 or greater";
- }
-
- public GreenhiltTraineeCost(final GreenhiltTraineeCost cost) {
- super(cost);
+ @Override
+ public boolean apply(Game game, Ability source) {
+ Permanent permanent = source.getSourcePermanentIfItStillExists(game);
+ return permanent != null && permanent.getPower().getValue() >= 4;
}
@Override
- public GreenhiltTraineeCost copy() {
- return new GreenhiltTraineeCost(this);
- }
-
- @Override
- public boolean canPay(Ability ability, Ability source, UUID controllerId, Game game) {
- Permanent permanent = game.getPermanent(source.getSourceId());
- if (permanent != null) {
- if (permanent.getPower().getValue() >= 4) {
- return true;
- }
- }
- return false;
- }
-
- @Override
- public boolean pay(Ability ability, Game game, Ability source, UUID controllerId, boolean noMana, Cost costToPay) {
- this.paid = true;
- return paid;
+ public String toString() {
+ return "{this}'s power is 4 or greater";
}
}
diff --git a/Mage.Sets/src/mage/cards/g/GuiseOfFire.java b/Mage.Sets/src/mage/cards/g/GuiseOfFire.java
index 067d2a9f998..2f543c31b3c 100644
--- a/Mage.Sets/src/mage/cards/g/GuiseOfFire.java
+++ b/Mage.Sets/src/mage/cards/g/GuiseOfFire.java
@@ -34,7 +34,7 @@ public final class GuiseOfFire extends CardImpl {
// Enchanted creature gets +1/-1 and attacks each turn if able.
ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEnchantedEffect(1, -1, Duration.WhileOnBattlefield));
Effect effect = new AttacksIfAbleAttachedEffect(Duration.WhileOnBattlefield, AttachmentType.AURA);
- effect.setText("and attacks each turn if able");
+ effect.setText("and attacks each combat if able");
ability.addEffect(effect);
this.addAbility(ability);
diff --git a/Mage.Sets/src/mage/cards/h/HauntedPlateMail.java b/Mage.Sets/src/mage/cards/h/HauntedPlateMail.java
index d26a3fd03e4..f614277e4c2 100644
--- a/Mage.Sets/src/mage/cards/h/HauntedPlateMail.java
+++ b/Mage.Sets/src/mage/cards/h/HauntedPlateMail.java
@@ -9,7 +9,7 @@ import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.decorator.ConditionalActivatedAbility;
import mage.abilities.effects.common.continuous.BecomesCreatureSourceEffect;
-import mage.abilities.effects.common.continuous.BoostEnchantedEffect;
+import mage.abilities.effects.common.continuous.BoostEquippedEffect;
import mage.abilities.keyword.EquipAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
@@ -33,7 +33,7 @@ public final class HauntedPlateMail extends CardImpl {
this.subtype.add(SubType.EQUIPMENT);
// Equipped creature gets +4/+4.
- this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEnchantedEffect(4, 4)));
+ this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEquippedEffect(4, 4)));
// {0}: Until end of turn, Haunted Plate Mail becomes a 4/4 Spirit artifact creature that's no longer an Equipment. Activate this ability only if you control no creatures.
Ability ability = new ConditionalActivatedAbility(
Zone.BATTLEFIELD,
diff --git a/Mage.Sets/src/mage/cards/h/HiredGiant.java b/Mage.Sets/src/mage/cards/h/HiredGiant.java
index 291a3eae180..050baa46717 100644
--- a/Mage.Sets/src/mage/cards/h/HiredGiant.java
+++ b/Mage.Sets/src/mage/cards/h/HiredGiant.java
@@ -50,7 +50,7 @@ class HiredGiantEffect extends OneShotEffect {
HiredGiantEffect() {
super(Outcome.Detriment);
- this.staticText = "each other player may search their library for a land card and put that card onto the battlefield. Then each player who searched their library this way shuffles it";
+ this.staticText = "each other player may search their library for a land card and put that card onto the battlefield. Then each player who searched their library this way shuffles";
}
HiredGiantEffect(final HiredGiantEffect effect) {
diff --git a/Mage.Sets/src/mage/cards/i/InfectiousBloodlust.java b/Mage.Sets/src/mage/cards/i/InfectiousBloodlust.java
index 2ab452544fb..edf4b74d744 100644
--- a/Mage.Sets/src/mage/cards/i/InfectiousBloodlust.java
+++ b/Mage.Sets/src/mage/cards/i/InfectiousBloodlust.java
@@ -1,11 +1,8 @@
-
package mage.cards.i;
-import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.common.DiesAttachedTriggeredAbility;
import mage.abilities.common.SimpleStaticAbility;
-import mage.abilities.effects.Effect;
import mage.abilities.effects.common.AttachEffect;
import mage.abilities.effects.common.combat.AttacksIfAbleAttachedEffect;
import mage.abilities.effects.common.continuous.BoostEnchantedEffect;
@@ -15,20 +12,16 @@ import mage.abilities.keyword.EnchantAbility;
import mage.abilities.keyword.HasteAbility;
import mage.cards.CardImpl;
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.constants.*;
import mage.filter.FilterCard;
import mage.filter.predicate.mageobject.NamePredicate;
import mage.target.TargetPermanent;
import mage.target.common.TargetCardInLibrary;
import mage.target.common.TargetCreaturePermanent;
+import java.util.UUID;
+
/**
- *
* @author fireshoes
*/
public final class InfectiousBloodlust extends CardImpl {
@@ -40,7 +33,7 @@ public final class InfectiousBloodlust extends CardImpl {
}
public InfectiousBloodlust(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{1}{R}");
+ super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{R}");
this.subtype.add(SubType.AURA);
// Enchant creature
@@ -51,20 +44,19 @@ public final class InfectiousBloodlust extends CardImpl {
this.addAbility(ability);
// Enchanted creature gets +2/+1, has haste, and attacks each turn if able.
- Effect effect = new BoostEnchantedEffect(2, 1);
- effect.setText("Enchanted creature gets +2/+1");
- ability = new SimpleStaticAbility(Zone.BATTLEFIELD, effect);
- effect = new GainAbilityAttachedEffect(HasteAbility.getInstance(), AttachmentType.AURA);
- effect.setText("has haste");
- ability.addEffect(effect);
- effect = new AttacksIfAbleAttachedEffect(Duration.WhileOnBattlefield, AttachmentType.AURA);
- effect.setText("and attacks each turn if able");
- ability.addEffect(effect);
+ ability = new SimpleStaticAbility(new BoostEnchantedEffect(2, 1));
+ ability.addEffect(new GainAbilityAttachedEffect(
+ HasteAbility.getInstance(), AttachmentType.AURA
+ ).setText(", has haste"));
+ ability.addEffect(new AttacksIfAbleAttachedEffect(
+ Duration.WhileOnBattlefield, AttachmentType.AURA
+ ).setText(", and attacks each combat if able"));
this.addAbility(ability);
// When enchanted creature dies, you may search your library for a card named Infectious Bloodlust, reveal it, put it into your hand, then shuffle your library.
- TargetCardInLibrary target = new TargetCardInLibrary(0, 1, filter);
- this.addAbility(new DiesAttachedTriggeredAbility(new SearchLibraryPutInHandEffect(target, true, true), "enchanted creature", true));
+ this.addAbility(new DiesAttachedTriggeredAbility(new SearchLibraryPutInHandEffect(
+ new TargetCardInLibrary(filter), true, true
+ ), "enchanted creature", true));
}
private InfectiousBloodlust(final InfectiousBloodlust card) {
diff --git a/Mage.Sets/src/mage/cards/i/InfiniteObliteration.java b/Mage.Sets/src/mage/cards/i/InfiniteObliteration.java
index 39e8a31d795..eae9bd6c430 100644
--- a/Mage.Sets/src/mage/cards/i/InfiniteObliteration.java
+++ b/Mage.Sets/src/mage/cards/i/InfiniteObliteration.java
@@ -84,7 +84,7 @@ class InfiniteObliterationEffect extends SearchTargetGraveyardHandLibraryForCard
@Override
public String getText(Mode mode) {
- return "Name a creature card. " + super.getText(mode);
+ return "Choose a creature card name. " + super.getText(mode);
}
}
diff --git a/Mage.Sets/src/mage/cards/j/JourneyOfDiscovery.java b/Mage.Sets/src/mage/cards/j/JourneyOfDiscovery.java
index abb12e83601..cb24153a7e1 100644
--- a/Mage.Sets/src/mage/cards/j/JourneyOfDiscovery.java
+++ b/Mage.Sets/src/mage/cards/j/JourneyOfDiscovery.java
@@ -24,7 +24,7 @@ public final class JourneyOfDiscovery extends CardImpl {
super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{2}{G}");
// Choose one - Search your library for up to two basic land cards, reveal them, put them into your hand, then shuffle your library;
- this.getSpellAbility().addEffect(new SearchLibraryPutInHandEffect(new TargetCardInLibrary(0, 2, StaticFilters.FILTER_CARD_BASIC_LAND), true));
+ this.getSpellAbility().addEffect(new SearchLibraryPutInHandEffect(new TargetCardInLibrary(0, 2, StaticFilters.FILTER_CARD_BASIC_LANDS), true));
// or you may play up to two additional lands this turn.
Mode mode = new Mode();
diff --git a/Mage.Sets/src/mage/cards/l/LanternOfInsight.java b/Mage.Sets/src/mage/cards/l/LanternOfInsight.java
index f5f32b054d9..828e535770a 100644
--- a/Mage.Sets/src/mage/cards/l/LanternOfInsight.java
+++ b/Mage.Sets/src/mage/cards/l/LanternOfInsight.java
@@ -1,7 +1,5 @@
-
package mage.cards.l;
-import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.common.SimpleStaticAbility;
@@ -12,23 +10,23 @@ import mage.abilities.effects.common.continuous.PlayWithTheTopCardRevealedEffect
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
-import mage.constants.Zone;
import mage.target.TargetPlayer;
+import java.util.UUID;
+
/**
- *
* @author emerald000
*/
public final class LanternOfInsight extends CardImpl {
public LanternOfInsight(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT},"{1}");
+ super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{1}");
// Each player plays with the top card of their library revealed.
- this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new PlayWithTheTopCardRevealedEffect(true)));
-
+ this.addAbility(new SimpleStaticAbility(new PlayWithTheTopCardRevealedEffect(true)));
+
// {tap}, Sacrifice Lantern of Insight: Target player shuffles their library.
- Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new ShuffleLibraryTargetEffect(), new TapSourceCost());
+ Ability ability = new SimpleActivatedAbility(new ShuffleLibraryTargetEffect().setText("target player shuffles"), new TapSourceCost());
ability.addCost(new SacrificeSourceCost());
ability.addTarget(new TargetPlayer());
this.addAbility(ability);
diff --git a/Mage.Sets/src/mage/cards/l/LilianasShade.java b/Mage.Sets/src/mage/cards/l/LilianasShade.java
index 23bcdbf3745..7b612d17bbb 100644
--- a/Mage.Sets/src/mage/cards/l/LilianasShade.java
+++ b/Mage.Sets/src/mage/cards/l/LilianasShade.java
@@ -23,7 +23,7 @@ import mage.target.common.TargetCardInLibrary;
*/
public final class LilianasShade extends CardImpl {
- private static final FilterLandCard filter = new FilterLandCard("Swamp");
+ private static final FilterLandCard filter = new FilterLandCard("Swamp card");
static {
filter.add(SubType.SWAMP.getPredicate());
@@ -37,7 +37,7 @@ public final class LilianasShade extends CardImpl {
this.toughness = new MageInt(1);
// When Liliana's Shade enters the battlefield, you may search your library for a Swamp card, reveal it, put it into your hand, then shuffle your library.
- this.addAbility(new EntersBattlefieldTriggeredAbility(new SearchLibraryPutInHandEffect(new TargetCardInLibrary(filter), true, true)));
+ this.addAbility(new EntersBattlefieldTriggeredAbility(new SearchLibraryPutInHandEffect(new TargetCardInLibrary(filter), true, true), true));
// {B}: Liliana's Shade gets +1/+1 until end of turn.
this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostSourceEffect(1, 1, Duration.EndOfTurn), new ManaCostsImpl("{B}")));
}
diff --git a/Mage.Sets/src/mage/cards/m/MwonvuliBeastTracker.java b/Mage.Sets/src/mage/cards/m/MwonvuliBeastTracker.java
index 40fdbe0d19e..1d799a1e8bf 100644
--- a/Mage.Sets/src/mage/cards/m/MwonvuliBeastTracker.java
+++ b/Mage.Sets/src/mage/cards/m/MwonvuliBeastTracker.java
@@ -24,7 +24,7 @@ import mage.target.common.TargetCardInLibrary;
*/
public final class MwonvuliBeastTracker extends CardImpl {
- private static final FilterCard filter = new FilterCard("creature card with deathtouch, hexproof, reach, or trample in your library");
+ private static final FilterCard filter = new FilterCard("creature card with deathtouch, hexproof, reach, or trample");
static {
filter.add(CardType.CREATURE.getPredicate());
diff --git a/Mage.Sets/src/mage/cards/m/MythosOfBrokkos.java b/Mage.Sets/src/mage/cards/m/MythosOfBrokkos.java
index d95bd8503af..21a313547c5 100644
--- a/Mage.Sets/src/mage/cards/m/MythosOfBrokkos.java
+++ b/Mage.Sets/src/mage/cards/m/MythosOfBrokkos.java
@@ -55,7 +55,7 @@ class MythosOfBrokkosEffect extends OneShotEffect {
MythosOfBrokkosEffect() {
super(Outcome.Benefit);
- staticText = "If {U}{B} was spent to cast Mythos of Brokkos, search your library for a card, " +
+ staticText = "If {U}{B} was spent to cast this spell, search your library for a card, " +
"put that card into your graveyard, then shuffle.
" +
"Return up to two permanent cards from your graveyard to your hand.";
}
diff --git a/Mage.Sets/src/mage/cards/n/NaturalBalance.java b/Mage.Sets/src/mage/cards/n/NaturalBalance.java
index a3fead804d2..93617912995 100644
--- a/Mage.Sets/src/mage/cards/n/NaturalBalance.java
+++ b/Mage.Sets/src/mage/cards/n/NaturalBalance.java
@@ -47,7 +47,7 @@ public final class NaturalBalance extends CardImpl {
public NaturalBalanceEffect() {
super(Outcome.PutCardInPlay);
- this.staticText = "Each player who controls six or more lands chooses five lands they control and sacrifices the rest. Each player who controls four or fewer lands may search their library for up to X basic land cards and put them onto the battlefield, where X is five minus the number of lands they control. Then each player who searched their library this way shuffles it.";
+ this.staticText = "Each player who controls six or more lands chooses five lands they control and sacrifices the rest. Each player who controls four or fewer lands may search their library for up to X basic land cards and put them onto the battlefield, where X is five minus the number of lands they control. Then each player who searched their library this way shuffles.";
}
public NaturalBalanceEffect(final NaturalBalanceEffect effect) {
diff --git a/Mage.Sets/src/mage/cards/n/NewFrontiers.java b/Mage.Sets/src/mage/cards/n/NewFrontiers.java
index dce943e682c..042ac488f55 100644
--- a/Mage.Sets/src/mage/cards/n/NewFrontiers.java
+++ b/Mage.Sets/src/mage/cards/n/NewFrontiers.java
@@ -43,7 +43,7 @@ class NewFrontiersEffect extends OneShotEffect {
public NewFrontiersEffect() {
super(Outcome.Detriment);
- this.staticText = "Each player may search their library for up to X basic land cards and put them onto the battlefield tapped. Then each player who searched their library this way shuffles it";
+ this.staticText = "Each player may search their library for up to X basic land cards and put them onto the battlefield tapped. Then each player who searched their library this way shuffles";
}
public NewFrontiersEffect(final NewFrontiersEffect effect) {
diff --git a/Mage.Sets/src/mage/cards/n/NobleBenefactor.java b/Mage.Sets/src/mage/cards/n/NobleBenefactor.java
index ecf3ec74ce5..cfad9182412 100644
--- a/Mage.Sets/src/mage/cards/n/NobleBenefactor.java
+++ b/Mage.Sets/src/mage/cards/n/NobleBenefactor.java
@@ -50,7 +50,7 @@ class NobleBenefactorEffect extends OneShotEffect {
public NobleBenefactorEffect() {
super(Outcome.Benefit);
- this.staticText = "each player may search their library for a card and put that card into their hand. Then each player who searched their library this way shuffles it";
+ this.staticText = "each player may search their library for a card and put that card into their hand. Then each player who searched their library this way shuffles";
}
public NobleBenefactorEffect(final NobleBenefactorEffect effect) {
diff --git a/Mage.Sets/src/mage/cards/p/PullingTeeth.java b/Mage.Sets/src/mage/cards/p/PullingTeeth.java
index d5280ff4696..e0248713045 100644
--- a/Mage.Sets/src/mage/cards/p/PullingTeeth.java
+++ b/Mage.Sets/src/mage/cards/p/PullingTeeth.java
@@ -42,7 +42,7 @@ class PullingTeethEffect extends OneShotEffect {
public PullingTeethEffect() {
super(Outcome.Discard);
- this.staticText = "Clash with an opponent. If you win, target player discards two cards. Otherwise that player discards a card";
+ this.staticText = "Clash with an opponent. If you win, target player discards two cards. Otherwise, that player discards a card";
}
public PullingTeethEffect(final PullingTeethEffect effect) {
diff --git a/Mage.Sets/src/mage/cards/q/QuestForTheHolyRelic.java b/Mage.Sets/src/mage/cards/q/QuestForTheHolyRelic.java
index 5e8538e6535..7b4ec91c3b2 100644
--- a/Mage.Sets/src/mage/cards/q/QuestForTheHolyRelic.java
+++ b/Mage.Sets/src/mage/cards/q/QuestForTheHolyRelic.java
@@ -66,7 +66,7 @@ class QuestForTheHolyRelicEffect extends OneShotEffect {
QuestForTheHolyRelicEffect() {
super(Outcome.PutCardInPlay);
- this.staticText = "Search your library for an Equipment card, put it onto the battlefield, and attach it to a creature you control. Then shuffle";
+ this.staticText = "Search your library for an Equipment card, put it onto the battlefield, attach it to a creature you control, then shuffle";
}
private QuestForTheHolyRelicEffect(final QuestForTheHolyRelicEffect effect) {
diff --git a/Mage.Sets/src/mage/cards/r/RageExtractor.java b/Mage.Sets/src/mage/cards/r/RageExtractor.java
index bf6432c59e3..9c4d203be7d 100644
--- a/Mage.Sets/src/mage/cards/r/RageExtractor.java
+++ b/Mage.Sets/src/mage/cards/r/RageExtractor.java
@@ -76,6 +76,6 @@ class RageExtractorTriggeredAbility extends TriggeredAbilityImpl {
@Override
public String getRule() {
- return "Whenever you cast a spell with p in its mana cost, {this} deals damage equal to that spell's mana value to any target.";
+ return "Whenever you cast a spell with {P} in its mana cost, {this} deals damage equal to that spell's mana value to any target.";
}
}
diff --git a/Mage.Sets/src/mage/cards/r/RedeemTheLost.java b/Mage.Sets/src/mage/cards/r/RedeemTheLost.java
index 7ccd344db14..16b5a15516e 100644
--- a/Mage.Sets/src/mage/cards/r/RedeemTheLost.java
+++ b/Mage.Sets/src/mage/cards/r/RedeemTheLost.java
@@ -8,6 +8,7 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
+import mage.target.common.TargetControlledCreaturePermanent;
import mage.target.common.TargetCreaturePermanent;
/**
@@ -21,7 +22,7 @@ public final class RedeemTheLost extends CardImpl {
// Target creature you control gains protection from the color of your choice until end of turn.
this.getSpellAbility().addEffect(new GainProtectionFromColorTargetEffect(Duration.EndOfTurn));
- this.getSpellAbility().addTarget(new TargetCreaturePermanent());
+ this.getSpellAbility().addTarget(new TargetControlledCreaturePermanent());
// Clash with an opponent. If you win, return Redeem the Lost to its owner's hand.
this.getSpellAbility().addEffect(ClashWinReturnToHandSpellEffect.getInstance());
}
diff --git a/Mage.Sets/src/mage/cards/r/ReviveTheFallen.java b/Mage.Sets/src/mage/cards/r/ReviveTheFallen.java
index 3fff388aedc..3e90df00711 100644
--- a/Mage.Sets/src/mage/cards/r/ReviveTheFallen.java
+++ b/Mage.Sets/src/mage/cards/r/ReviveTheFallen.java
@@ -21,7 +21,7 @@ public final class ReviveTheFallen extends CardImpl {
// Return target creature card from a graveyard to its owner's hand.
this.getSpellAbility().addEffect(new ReturnToHandTargetEffect());
- this.getSpellAbility().addTarget(new TargetCardInGraveyard(new FilterCreatureCard("creature card in a graveyard")));
+ this.getSpellAbility().addTarget(new TargetCardInGraveyard(new FilterCreatureCard("creature card from a graveyard")));
// Clash with an opponent. If you win, return Revive the Fallen to its owner's hand.
this.getSpellAbility().addEffect(ClashWinReturnToHandSpellEffect.getInstance());
}
diff --git a/Mage.Sets/src/mage/cards/r/RootweaverDruid.java b/Mage.Sets/src/mage/cards/r/RootweaverDruid.java
index 909615f8219..21a7a62aa76 100644
--- a/Mage.Sets/src/mage/cards/r/RootweaverDruid.java
+++ b/Mage.Sets/src/mage/cards/r/RootweaverDruid.java
@@ -53,7 +53,7 @@ class RootweaverDruidEffect extends OneShotEffect {
staticText = "each opponent may search their library for up to three basic land cards. " +
"They each put one of those cards onto the battlefield tapped under your control " +
"and the rest onto the battlefield tapped under their control. " +
- "Then each player who searched their library this way shuffles it";
+ "Then each player who searched their library this way shuffles";
}
private RootweaverDruidEffect(final RootweaverDruidEffect effect) {
diff --git a/Mage.Sets/src/mage/cards/s/SadisticSacrament.java b/Mage.Sets/src/mage/cards/s/SadisticSacrament.java
index 3ea6708b3e9..7861c852283 100644
--- a/Mage.Sets/src/mage/cards/s/SadisticSacrament.java
+++ b/Mage.Sets/src/mage/cards/s/SadisticSacrament.java
@@ -25,7 +25,7 @@ import mage.target.common.TargetCardInLibrary;
*/
public final class SadisticSacrament extends CardImpl {
- private static final String ruleText = "Search target player's library for up to three cards, exile them, then that player shuffles. if this spell was kicked, instead search that player's library for up to fifteen cards, exile them, then that player shuffles";
+ private static final String ruleText = "Search target player's library for up to three cards, exile them, then that player shuffles. If this spell was kicked, instead search that player's library for up to fifteen cards, exile them, then that player shuffles";
public SadisticSacrament(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{B}{B}{B}");
diff --git a/Mage.Sets/src/mage/cards/s/ShadowbornApostle.java b/Mage.Sets/src/mage/cards/s/ShadowbornApostle.java
index 5a02ea1c61b..8ab705985f2 100644
--- a/Mage.Sets/src/mage/cards/s/ShadowbornApostle.java
+++ b/Mage.Sets/src/mage/cards/s/ShadowbornApostle.java
@@ -27,8 +27,8 @@ import mage.target.common.TargetControlledCreaturePermanent;
*/
public final class ShadowbornApostle extends CardImpl {
- private static final FilterCreatureCard filter = new FilterCreatureCard("a Demon creature");
- private static final FilterControlledCreaturePermanent filterApostle = new FilterControlledCreaturePermanent("six creatures named Shadowborn Apostle");
+ private static final FilterCreatureCard filter = new FilterCreatureCard("a Demon creature card");
+ private static final FilterControlledCreaturePermanent filterApostle = new FilterControlledCreaturePermanent("creatures named Shadowborn Apostle");
static {
filter.add(SubType.DEMON.getPredicate());
filterApostle.add(new NamePredicate("Shadowborn Apostle"));
diff --git a/Mage.Sets/src/mage/cards/s/ShadowsOfThePast.java b/Mage.Sets/src/mage/cards/s/ShadowsOfThePast.java
index 70b93c514a7..6d87bf22b93 100644
--- a/Mage.Sets/src/mage/cards/s/ShadowsOfThePast.java
+++ b/Mage.Sets/src/mage/cards/s/ShadowsOfThePast.java
@@ -30,7 +30,7 @@ public final class ShadowsOfThePast extends CardImpl {
// {4}{B}: Each opponent loses 2 life and you gain 2 life. Activate this ability only if there are four or more creature cards in your graveyard.
Ability ability = new ConditionalActivatedAbility(Zone.BATTLEFIELD,
- new LoseLifeOpponentsEffect(2), new ManaCostsImpl<>("{4}{B}"), new CardsInControllerGraveyardCondition(4, StaticFilters.FILTER_CARD_CREATURE));
+ new LoseLifeOpponentsEffect(2), new ManaCostsImpl<>("{4}{B}"), new CardsInControllerGraveyardCondition(4, StaticFilters.FILTER_CARD_CREATURES));
Effect effect = new GainLifeEffect(2);
effect.setText("and you gain 2 life");
ability.addEffect(effect);
diff --git a/Mage.Sets/src/mage/cards/s/SilvergladePathfinder.java b/Mage.Sets/src/mage/cards/s/SilvergladePathfinder.java
index 4d045e0b482..c88e7f55ce7 100644
--- a/Mage.Sets/src/mage/cards/s/SilvergladePathfinder.java
+++ b/Mage.Sets/src/mage/cards/s/SilvergladePathfinder.java
@@ -33,7 +33,7 @@ public final class SilvergladePathfinder extends CardImpl {
// {1}{G}, {tap}, Discard a card: Search your library for a basic land card and put that card onto the battlefield tapped. Then shuffle your library.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD,
- new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(0, 1, StaticFilters.FILTER_CARD_BASIC_LAND), true, true),
+ new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(StaticFilters.FILTER_CARD_BASIC_LAND), true, true),
new ManaCostsImpl("{1}{G}"));
ability.addCost(new TapSourceCost());
ability.addCost(new DiscardCardCost());
diff --git a/Mage.Sets/src/mage/cards/s/Skinshifter.java b/Mage.Sets/src/mage/cards/s/Skinshifter.java
index a873598290b..8019094272a 100644
--- a/Mage.Sets/src/mage/cards/s/Skinshifter.java
+++ b/Mage.Sets/src/mage/cards/s/Skinshifter.java
@@ -1,11 +1,9 @@
-
package mage.cards.s;
-import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.Mode;
-import mage.abilities.common.LimitedTimesPerTurnActivatedAbility;
+import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.common.continuous.BecomesCreatureSourceEffect;
import mage.abilities.keyword.FlyingAbility;
@@ -13,28 +11,29 @@ import mage.abilities.keyword.TrampleAbility;
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.game.permanent.token.TokenImpl;
+import java.util.UUID;
+
/**
- *
* @author North
*/
public final class Skinshifter extends CardImpl {
public Skinshifter(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{G}");
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{G}");
this.subtype.add(SubType.HUMAN);
this.subtype.add(SubType.SHAMAN);
this.power = new MageInt(1);
this.toughness = new MageInt(1);
- Ability ability = new LimitedTimesPerTurnActivatedAbility(Zone.BATTLEFIELD,
+ Ability ability = new SimpleActivatedAbility(
new BecomesCreatureSourceEffect(new RhinoToken(), "", Duration.EndOfTurn),
- new ManaCostsImpl("{G}"));
+ new ManaCostsImpl<>("{G}"));
+ ability.getModes().setChooseText("Choose one. Activate only once each turn.");
Mode mode = new Mode();
mode.addEffect(new BecomesCreatureSourceEffect(new BirdToken(), "", Duration.EndOfTurn));
@@ -56,7 +55,7 @@ public final class Skinshifter extends CardImpl {
return new Skinshifter(this);
}
- private class RhinoToken extends TokenImpl {
+ private static final class RhinoToken extends TokenImpl {
public RhinoToken() {
super("Rhino", "Rhino with base power and toughness 4/4 and gains trample");
@@ -68,6 +67,7 @@ public final class Skinshifter extends CardImpl {
this.toughness = new MageInt(4);
this.addAbility(TrampleAbility.getInstance());
}
+
public RhinoToken(final RhinoToken token) {
super(token);
}
@@ -77,7 +77,7 @@ public final class Skinshifter extends CardImpl {
}
}
- private class BirdToken extends TokenImpl {
+ private static final class BirdToken extends TokenImpl {
public BirdToken() {
super("Bird", "Bird with base power and toughness 2/2 and gains flying");
@@ -89,6 +89,7 @@ public final class Skinshifter extends CardImpl {
this.toughness = new MageInt(2);
this.addAbility(FlyingAbility.getInstance());
}
+
public BirdToken(final BirdToken token) {
super(token);
}
@@ -98,7 +99,7 @@ public final class Skinshifter extends CardImpl {
}
}
- private class PlantToken extends TokenImpl {
+ private static final class PlantToken extends TokenImpl {
public PlantToken() {
super("Plant", "Plant with base power and toughness 0/8");
@@ -109,6 +110,7 @@ public final class Skinshifter extends CardImpl {
this.power = new MageInt(0);
this.toughness = new MageInt(8);
}
+
public PlantToken(final PlantToken token) {
super(token);
}
diff --git a/Mage.Sets/src/mage/cards/s/SparkOfCreativity.java b/Mage.Sets/src/mage/cards/s/SparkOfCreativity.java
index fff863fea9f..17f83d65c2a 100644
--- a/Mage.Sets/src/mage/cards/s/SparkOfCreativity.java
+++ b/Mage.Sets/src/mage/cards/s/SparkOfCreativity.java
@@ -48,7 +48,7 @@ class SparkOfCreativityEffect extends OneShotEffect {
public SparkOfCreativityEffect() {
super(Outcome.Benefit);
- this.staticText = "Choose target creature. Exile the top card of your library. You may have Spark of Creativity deal damage to that creature equal to the mana value of the exiled card. If you don't, you may play that card until end of turn";
+ this.staticText = "Choose target creature. Exile the top card of your library. You may have {this} deal damage to that creature equal to the exiled card's mana value. If you don't, you may play that card until end of turn";
}
public SparkOfCreativityEffect(final SparkOfCreativityEffect effect) {
diff --git a/Mage.Sets/src/mage/cards/s/SpeakerOfTheHeavens.java b/Mage.Sets/src/mage/cards/s/SpeakerOfTheHeavens.java
index 94f369ee2c6..fc43ccaae9d 100644
--- a/Mage.Sets/src/mage/cards/s/SpeakerOfTheHeavens.java
+++ b/Mage.Sets/src/mage/cards/s/SpeakerOfTheHeavens.java
@@ -74,6 +74,6 @@ enum SpeakerOfTheHeavensCondition implements Condition {
@Override
public String toString() {
- return "you have at least 7 life more than your starting life total and only any time you could cast a sorcery";
+ return "you have at least 7 life more than your starting life total and only as a sorcery";
}
}
diff --git a/Mage.Sets/src/mage/cards/s/SphinxAmbassador.java b/Mage.Sets/src/mage/cards/s/SphinxAmbassador.java
index 1032a41c658..90c2ee27727 100644
--- a/Mage.Sets/src/mage/cards/s/SphinxAmbassador.java
+++ b/Mage.Sets/src/mage/cards/s/SphinxAmbassador.java
@@ -55,7 +55,7 @@ class SphinxAmbassadorEffect extends OneShotEffect {
public SphinxAmbassadorEffect() {
super(Outcome.PutCreatureInPlay);
- this.staticText = "search that player's library for a card, then that player names a card. If you searched for a creature card that isn't the named card, you may put it onto the battlefield under your control. Then that player shuffles";
+ this.staticText = "search that player's library for a card, then that player chooses a card name. If you searched for a creature card that doesn't have that name, you may put it onto the battlefield under your control. Then that player shuffles";
}
public SphinxAmbassadorEffect(final SphinxAmbassadorEffect effect) {
diff --git a/Mage.Sets/src/mage/cards/s/StonehewerGiant.java b/Mage.Sets/src/mage/cards/s/StonehewerGiant.java
index 907a5bd31f4..47cf1c89c32 100644
--- a/Mage.Sets/src/mage/cards/s/StonehewerGiant.java
+++ b/Mage.Sets/src/mage/cards/s/StonehewerGiant.java
@@ -65,7 +65,7 @@ class StonehewerGiantEffect extends OneShotEffect {
public StonehewerGiantEffect() {
super(Outcome.PutCardInPlay);
- this.staticText = "Search your library for an Equipment card and put it onto the battlefield. Attach it to a creature you control. Then shuffle";
+ this.staticText = "search your library for an Equipment card, put it onto the battlefield, attach it to a creature you control, then shuffle";
}
public StonehewerGiantEffect(final StonehewerGiantEffect effect) {
diff --git a/Mage.Sets/src/mage/cards/t/TemptWithDiscovery.java b/Mage.Sets/src/mage/cards/t/TemptWithDiscovery.java
index f7ef5ae1b58..cb2538f5cb9 100644
--- a/Mage.Sets/src/mage/cards/t/TemptWithDiscovery.java
+++ b/Mage.Sets/src/mage/cards/t/TemptWithDiscovery.java
@@ -47,7 +47,7 @@ class TemptWithDiscoveryEffect extends OneShotEffect {
public TemptWithDiscoveryEffect() {
super(Outcome.PutLandInPlay);
- this.staticText = "Tempting offer — Search your library for a land card and put it onto the battlefield. Each opponent may search their library for a land card and put it onto the battlefield. For each opponent who searches a library this way, search your library for a land card and put it onto the battlefield. Then each player who searched a library this way shuffles it";
+ this.staticText = "Tempting offer — Search your library for a land card and put it onto the battlefield. Each opponent may search their library for a land card and put it onto the battlefield. For each opponent who searches a library this way, search your library for a land card and put it onto the battlefield. Then each player who searched a library this way shuffles";
}
public TemptWithDiscoveryEffect(final TemptWithDiscoveryEffect effect) {
diff --git a/Mage.Sets/src/mage/cards/t/TerentatekCub.java b/Mage.Sets/src/mage/cards/t/TerentatekCub.java
index 8615990666e..56814d27279 100644
--- a/Mage.Sets/src/mage/cards/t/TerentatekCub.java
+++ b/Mage.Sets/src/mage/cards/t/TerentatekCub.java
@@ -43,7 +43,7 @@ public final class TerentatekCub extends CardImpl {
new OpponentControlsPermanentCondition(filter),
"As long as an opponent controls a Jedi or Sith, {this} gets +1/+1"));
Effect effect = new ConditionalRequirementEffect(new AttacksIfAbleSourceEffect(Duration.Custom), new OpponentControlsPermanentCondition(filter));
- effect.setText("and attacks each turn if able");
+ effect.setText("and attacks each combat if able");
ability.addEffect(effect);
this.addAbility(ability);
}
diff --git a/Mage.Sets/src/mage/cards/t/Timesifter.java b/Mage.Sets/src/mage/cards/t/Timesifter.java
index 58b45fc7e66..d084aa2eb4b 100644
--- a/Mage.Sets/src/mage/cards/t/Timesifter.java
+++ b/Mage.Sets/src/mage/cards/t/Timesifter.java
@@ -46,7 +46,7 @@ class TimesifterEffect extends OneShotEffect {
TimesifterEffect() {
super(Outcome.ExtraTurn);
- this.staticText = "each player exiles the top card of their library. The player who exiled the card with the highest mana value takes an extra turn after this one. If two or more players' cards are tied for highest cost, the tied players repeat this process until the tie is broken";
+ this.staticText = "each player exiles the top card of their library. The player who exiled the card with the highest mana value takes an extra turn after this one. If two or more players' cards are tied for highest, the tied players repeat this process until the tie is broken";
}
TimesifterEffect(final TimesifterEffect effect) {
diff --git a/Mage.Sets/src/mage/cards/t/ToothAndNail.java b/Mage.Sets/src/mage/cards/t/ToothAndNail.java
index 663ad56c183..cd1ef626fe6 100644
--- a/Mage.Sets/src/mage/cards/t/ToothAndNail.java
+++ b/Mage.Sets/src/mage/cards/t/ToothAndNail.java
@@ -30,7 +30,7 @@ public final class ToothAndNail extends CardImpl {
// Choose one -
// Search your library for up to two creature cards, reveal them, put them into your hand, then shuffle your library;
- this.getSpellAbility().addEffect(new SearchLibraryPutInHandEffect(new TargetCardInLibrary(0, 2, StaticFilters.FILTER_CARD_CREATURE), true));
+ this.getSpellAbility().addEffect(new SearchLibraryPutInHandEffect(new TargetCardInLibrary(0, 2, StaticFilters.FILTER_CARD_CREATURES), true));
// or put up to two creature cards from your hand onto the battlefield.
Mode mode = new Mode();
mode.addEffect(new ToothAndNailPutCreatureOnBattlefieldEffect());
diff --git a/Mage.Sets/src/mage/cards/t/TormentorsTrident.java b/Mage.Sets/src/mage/cards/t/TormentorsTrident.java
index 5f4be14b162..9b1eb3a285d 100644
--- a/Mage.Sets/src/mage/cards/t/TormentorsTrident.java
+++ b/Mage.Sets/src/mage/cards/t/TormentorsTrident.java
@@ -32,7 +32,7 @@ public final class TormentorsTrident extends CardImpl {
// Equipped creature gets +3/+0 and attacks each turn if able.
Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEquippedEffect(3, 0));
Effect effect = new AttacksIfAbleAttachedEffect(Duration.WhileOnBattlefield, AttachmentType.EQUIPMENT);
- effect.setText("and attacks each turn if able");
+ effect.setText("and attacks each combat if able");
ability.addEffect(effect);
this.addAbility(ability);
diff --git a/Mage.Sets/src/mage/cards/u/UncontrollableAnger.java b/Mage.Sets/src/mage/cards/u/UncontrollableAnger.java
index c967d562ab7..02b7de1005f 100644
--- a/Mage.Sets/src/mage/cards/u/UncontrollableAnger.java
+++ b/Mage.Sets/src/mage/cards/u/UncontrollableAnger.java
@@ -44,7 +44,7 @@ public final class UncontrollableAnger extends CardImpl {
// Enchanted creature gets +2/+2 and attacks each turn if able.
ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEnchantedEffect(2, 2, Duration.WhileOnBattlefield));
Effect effect = new AttacksIfAbleAttachedEffect(Duration.WhileOnBattlefield, AttachmentType.AURA);
- effect.setText("and attacks each turn if able");
+ effect.setText("and attacks each combat if able");
ability.addEffect(effect);
this.addAbility(ability);
}
diff --git a/Mage.Sets/src/mage/cards/v/VarragothBloodskySire.java b/Mage.Sets/src/mage/cards/v/VarragothBloodskySire.java
index 7b981195fc0..587e80fa5ea 100644
--- a/Mage.Sets/src/mage/cards/v/VarragothBloodskySire.java
+++ b/Mage.Sets/src/mage/cards/v/VarragothBloodskySire.java
@@ -57,7 +57,7 @@ class VarragothBloodskySireEffect extends SearchEffect {
public VarragothBloodskySireEffect() {
super(new TargetCardInLibrary(), Outcome.DrawCard);
- this.staticText = "Target player searches their library for a card, then shuffles and puts that card on top of it";
+ this.staticText = "Target player searches their library for a card, then shuffles and puts that card on top";
}
private VarragothBloodskySireEffect(final VarragothBloodskySireEffect effect) {
diff --git a/Mage.Sets/src/mage/cards/v/ViviensJaguar.java b/Mage.Sets/src/mage/cards/v/ViviensJaguar.java
index 9f83feb3ddb..d045a89aec7 100644
--- a/Mage.Sets/src/mage/cards/v/ViviensJaguar.java
+++ b/Mage.Sets/src/mage/cards/v/ViviensJaguar.java
@@ -44,7 +44,7 @@ public final class ViviensJaguar extends CardImpl {
new ManaCostsImpl("{2}{G}"),
new PermanentsOnTheBattlefieldCondition(filter),
"{2}{G}: Return {this} from your graveyard to your hand. "
- + "Activate only if you control a Vivien planeswalker"
+ + "Activate only if you control a Vivien planeswalker."
));
}
diff --git a/Mage.Sets/src/mage/cards/w/WaveOfVitriol.java b/Mage.Sets/src/mage/cards/w/WaveOfVitriol.java
index e756da84f0c..6c681600ef1 100644
--- a/Mage.Sets/src/mage/cards/w/WaveOfVitriol.java
+++ b/Mage.Sets/src/mage/cards/w/WaveOfVitriol.java
@@ -61,7 +61,7 @@ class WaveOfVitriolEffect extends OneShotEffect {
public WaveOfVitriolEffect() {
super(Outcome.Benefit);
- this.staticText = "Each player sacrifices all artifacts, enchantments, and nonbasic lands they control. For each land sacrificed this way, its controller may search their library for a basic land card and put it onto the battlefield tapped. Then each player who searched their library this way shuffles it";
+ this.staticText = "Each player sacrifices all artifacts, enchantments, and nonbasic lands they control. For each land sacrificed this way, its controller may search their library for a basic land card and put it onto the battlefield tapped. Then each player who searched their library this way shuffles";
}
public WaveOfVitriolEffect(final WaveOfVitriolEffect effect) {
diff --git a/Mage.Sets/src/mage/cards/w/WeirdHarvest.java b/Mage.Sets/src/mage/cards/w/WeirdHarvest.java
index 730dff432a6..d77c0e7170b 100644
--- a/Mage.Sets/src/mage/cards/w/WeirdHarvest.java
+++ b/Mage.Sets/src/mage/cards/w/WeirdHarvest.java
@@ -45,7 +45,7 @@ class WeirdHarvestEffect extends OneShotEffect {
public WeirdHarvestEffect() {
super(Outcome.Detriment);
- this.staticText = "Each player may search their library for up to X creature cards, reveal those cards, and put them into their hand. Then each player who searched their library this way shuffles it";
+ this.staticText = "each player may search their library for up to X creature cards, reveal those cards, put them into their hand, then shuffle";
}
public WeirdHarvestEffect(final WeirdHarvestEffect effect) {
diff --git a/Mage.Sets/src/mage/cards/w/WildWanderer.java b/Mage.Sets/src/mage/cards/w/WildWanderer.java
index 33e2ca90ed7..a63db7564ea 100644
--- a/Mage.Sets/src/mage/cards/w/WildWanderer.java
+++ b/Mage.Sets/src/mage/cards/w/WildWanderer.java
@@ -27,7 +27,7 @@ public final class WildWanderer extends CardImpl {
this.toughness = new MageInt(2);
// When Wild Wanderer enters the battlefield, you may search your library for a basic land card, put it onto the battlefield tapped, then shuffle your library.
- this.addAbility(new EntersBattlefieldTriggeredAbility(new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(StaticFilters.FILTER_CARD_BASIC_LAND), true, true)));
+ this.addAbility(new EntersBattlefieldTriggeredAbility(new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(StaticFilters.FILTER_CARD_BASIC_LAND), true, true), true));
}
private WildWanderer(final WildWanderer card) {
diff --git a/Mage.Sets/src/mage/cards/w/WoodlandBellower.java b/Mage.Sets/src/mage/cards/w/WoodlandBellower.java
index 22743023c8d..eeea27be6cb 100644
--- a/Mage.Sets/src/mage/cards/w/WoodlandBellower.java
+++ b/Mage.Sets/src/mage/cards/w/WoodlandBellower.java
@@ -1,43 +1,47 @@
-
package mage.cards.w;
-import java.util.UUID;
import mage.MageInt;
import mage.ObjectColor;
-import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
-import mage.abilities.effects.OneShotEffect;
-import mage.cards.Card;
+import mage.abilities.effects.common.search.SearchLibraryPutInPlayEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
-import mage.constants.SubType;
import mage.constants.ComparisonType;
-import mage.constants.Outcome;
+import mage.constants.SubType;
import mage.constants.SuperType;
-import mage.constants.Zone;
import mage.filter.FilterCard;
import mage.filter.predicate.Predicates;
import mage.filter.predicate.mageobject.ColorPredicate;
import mage.filter.predicate.mageobject.ManaValuePredicate;
-import mage.game.Game;
-import mage.players.Player;
import mage.target.common.TargetCardInLibrary;
+import java.util.UUID;
+
/**
- *
* @author fireshoes
*/
public final class WoodlandBellower extends CardImpl {
+ private static final FilterCard filter = new FilterCard("nonlegendary green creature card with mana value 3 or less");
+
+ static {
+ filter.add(new ColorPredicate(ObjectColor.GREEN));
+ filter.add(CardType.CREATURE.getPredicate());
+ filter.add(Predicates.not(SuperType.LEGENDARY.getPredicate()));
+ filter.add(new ManaValuePredicate(ComparisonType.FEWER_THAN, 4));
+ }
+
public WoodlandBellower(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{4}{G}{G}");
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{G}{G}");
this.subtype.add(SubType.BEAST);
this.power = new MageInt(6);
this.toughness = new MageInt(5);
// When Woodland Bellower enters the battlefield, you may search your library for a nonlegendary green creature card with converted mana cost 3 or less, put it onto the battlefield, then shuffle your library.
- this.addAbility(new EntersBattlefieldTriggeredAbility(new WoodlandBellowerEffect(), true));
+ this.addAbility(new EntersBattlefieldTriggeredAbility(
+ new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(filter)), true
+ ));
}
private WoodlandBellower(final WoodlandBellower card) {
@@ -49,45 +53,3 @@ public final class WoodlandBellower extends CardImpl {
return new WoodlandBellower(this);
}
}
-
-class WoodlandBellowerEffect extends OneShotEffect {
-
- WoodlandBellowerEffect() {
- super(Outcome.PutCreatureInPlay);
- staticText = "Search your library for a nonlegendary green creature card with mana value 3 or less, put it onto the battlefield, then shuffle";
- }
-
- WoodlandBellowerEffect(final WoodlandBellowerEffect effect) {
- super(effect);
- }
-
- @Override
- public boolean apply(Game game, Ability source) {
- Player controller = game.getPlayer(source.getControllerId());
- if (controller == null) {
- return false;
- }
- FilterCard filter = new FilterCard("nonlegendary green creature card with mana value 3 or less");
- filter.add(new ColorPredicate(ObjectColor.GREEN));
- filter.add(CardType.CREATURE.getPredicate());
- filter.add(Predicates.not(SuperType.LEGENDARY.getPredicate()));
- filter.add(new ManaValuePredicate(ComparisonType.FEWER_THAN, 4));
- TargetCardInLibrary target = new TargetCardInLibrary(filter);
- if (controller.searchLibrary(target, source, game)) {
- if (!target.getTargets().isEmpty()) {
- Card card = controller.getLibrary().getCard(target.getFirstTarget(), game);
- controller.moveCards(card, Zone.BATTLEFIELD, source, game);
- }
- controller.shuffleLibrary(source, game);
- return true;
- }
- controller.shuffleLibrary(source, game);
- return false;
- }
-
- @Override
- public WoodlandBellowerEffect copy() {
- return new WoodlandBellowerEffect(this);
- }
-
-}
diff --git a/Mage/src/main/java/mage/abilities/common/LimitedTimesPerTurnActivatedAbility.java b/Mage/src/main/java/mage/abilities/common/LimitedTimesPerTurnActivatedAbility.java
index 8f43b20284c..893fccdf690 100644
--- a/Mage/src/main/java/mage/abilities/common/LimitedTimesPerTurnActivatedAbility.java
+++ b/Mage/src/main/java/mage/abilities/common/LimitedTimesPerTurnActivatedAbility.java
@@ -44,7 +44,8 @@ public class LimitedTimesPerTurnActivatedAbility extends ActivatedAbilityImpl {
public String getRule() {
StringBuilder sb = new StringBuilder(super.getRule()).append(" Activate ");
if (condition != null) {
- sb.append("only ").append(condition.toString()).append(" and ");
+ String message = condition.toString();
+ sb.append("only ").append(message.startsWith("if ") || message.startsWith("during") ? message : "if " + message).append(" and ");
}
if (getTiming() == TimingRule.SORCERY) {
sb.append("only as a sorcery and ");
diff --git a/Mage/src/main/java/mage/abilities/effects/common/UntapAllLandsControllerEffect.java b/Mage/src/main/java/mage/abilities/effects/common/UntapAllLandsControllerEffect.java
index 595fed8dc69..f99eee146fa 100644
--- a/Mage/src/main/java/mage/abilities/effects/common/UntapAllLandsControllerEffect.java
+++ b/Mage/src/main/java/mage/abilities/effects/common/UntapAllLandsControllerEffect.java
@@ -30,7 +30,7 @@ public class UntapAllLandsControllerEffect extends OneShotEffect {
public UntapAllLandsControllerEffect(FilterLandPermanent filter) {
super(Outcome.Untap);
- staticText = "Untap all " + filter.getMessage() + " you control";
+ staticText = "untap all " + filter.getMessage() + " you control";
this.filter = filter;
}
diff --git a/Mage/src/main/java/mage/abilities/effects/common/combat/AttacksIfAbleAttachedEffect.java b/Mage/src/main/java/mage/abilities/effects/common/combat/AttacksIfAbleAttachedEffect.java
index f13ad0cc484..329f0f83537 100644
--- a/Mage/src/main/java/mage/abilities/effects/common/combat/AttacksIfAbleAttachedEffect.java
+++ b/Mage/src/main/java/mage/abilities/effects/common/combat/AttacksIfAbleAttachedEffect.java
@@ -18,7 +18,7 @@ public class AttacksIfAbleAttachedEffect extends RequirementEffect {
public AttacksIfAbleAttachedEffect(Duration duration, AttachmentType attachmentType) {
super(duration);
- this.staticText = attachmentType.verb() + " creature attacks each turn if able";
+ this.staticText = attachmentType.verb() + " creature attacks each combat if able";
}
public AttacksIfAbleAttachedEffect(final AttacksIfAbleAttachedEffect effect) {
diff --git a/Mage/src/main/java/mage/abilities/effects/common/combat/AttacksIfAbleTargetEffect.java b/Mage/src/main/java/mage/abilities/effects/common/combat/AttacksIfAbleTargetEffect.java
index c545cd2488f..848619ecd84 100644
--- a/Mage/src/main/java/mage/abilities/effects/common/combat/AttacksIfAbleTargetEffect.java
+++ b/Mage/src/main/java/mage/abilities/effects/common/combat/AttacksIfAbleTargetEffect.java
@@ -50,7 +50,7 @@ public class AttacksIfAbleTargetEffect extends RequirementEffect {
if (this.duration == Duration.EndOfTurn) {
return "target " + mode.getTargets().get(0).getTargetName() + " attacks this turn if able";
} else {
- return "target " + mode.getTargets().get(0).getTargetName() + " attacks each turn if able";
+ return "target " + mode.getTargets().get(0).getTargetName() + " attacks each combat if able";
}
}
diff --git a/Mage/src/main/java/mage/abilities/effects/common/continuous/BecomesCreatureSourceEffect.java b/Mage/src/main/java/mage/abilities/effects/common/continuous/BecomesCreatureSourceEffect.java
index b9c3f839a09..07962c4ec18 100644
--- a/Mage/src/main/java/mage/abilities/effects/common/continuous/BecomesCreatureSourceEffect.java
+++ b/Mage/src/main/java/mage/abilities/effects/common/continuous/BecomesCreatureSourceEffect.java
@@ -146,9 +146,9 @@ public class BecomesCreatureSourceEffect extends ContinuousEffectImpl implements
private void setText() {
if (theyAreStillType != null && !theyAreStillType.isEmpty()) {
- staticText = duration.toString() + " {this} becomes a " + token.getDescription() + " that's still a " + this.theyAreStillType;
+ staticText = duration.toString() + ", {this} becomes a " + token.getDescription() + " that's still a " + this.theyAreStillType;
} else {
- staticText = duration.toString() + " {this} becomes a " + token.getDescription();
+ staticText = duration.toString() + ", {this} becomes a " + token.getDescription();
}
}
diff --git a/Mage/src/main/java/mage/abilities/effects/common/continuous/PlayAdditionalLandsControllerEffect.java b/Mage/src/main/java/mage/abilities/effects/common/continuous/PlayAdditionalLandsControllerEffect.java
index 83663222cd1..8005dd8f593 100644
--- a/Mage/src/main/java/mage/abilities/effects/common/continuous/PlayAdditionalLandsControllerEffect.java
+++ b/Mage/src/main/java/mage/abilities/effects/common/continuous/PlayAdditionalLandsControllerEffect.java
@@ -54,6 +54,9 @@ public class PlayAdditionalLandsControllerEffect extends ContinuousEffectImpl {
if (additionalCards == Integer.MAX_VALUE) {
sb.append("any number of");
} else {
+ if (additionalCards > 1 && duration == Duration.EndOfTurn) {
+ sb.append("up to ");
+ }
sb.append(CardUtil.numberToText(additionalCards, "an"));
}
sb.append(" additional land").append((additionalCards == 1 ? "" : "s"))
diff --git a/Mage/src/main/java/mage/abilities/effects/common/search/SearchLibraryGraveyardPutInHandEffect.java b/Mage/src/main/java/mage/abilities/effects/common/search/SearchLibraryGraveyardPutInHandEffect.java
index 94449d5c196..21cd0a54688 100644
--- a/Mage/src/main/java/mage/abilities/effects/common/search/SearchLibraryGraveyardPutInHandEffect.java
+++ b/Mage/src/main/java/mage/abilities/effects/common/search/SearchLibraryGraveyardPutInHandEffect.java
@@ -35,7 +35,7 @@ public class SearchLibraryGraveyardPutInHandEffect extends OneShotEffect {
this.filter = filter;
this.forceToSearchBoth = forceToSearchBoth;
staticText = (youMay ? "you may " : "") + "search your library and" + (forceToSearchBoth ? "" : "/or") + " graveyard for a card named " + filter.getMessage()
- + ", reveal it, then put it into your hand. " + (forceToSearchBoth ? "Then shuffle" : "If you search your library this way, shuffle");
+ + ", reveal it, and put it into your hand. " + (forceToSearchBoth ? "Then shuffle" : "If you search your library this way, shuffle");
}
public SearchLibraryGraveyardPutInHandEffect(final SearchLibraryGraveyardPutInHandEffect effect) {