diff --git a/Mage.Sets/src/mage/cards/a/AnzragTheQuakeMole.java b/Mage.Sets/src/mage/cards/a/AnzragTheQuakeMole.java index edd7d649bc3..6f60bc9ba4f 100644 --- a/Mage.Sets/src/mage/cards/a/AnzragTheQuakeMole.java +++ b/Mage.Sets/src/mage/cards/a/AnzragTheQuakeMole.java @@ -14,7 +14,8 @@ import mage.constants.CardType; import mage.constants.Duration; import mage.constants.SubType; import mage.constants.SuperType; -import mage.filter.StaticFilters; +import mage.filter.FilterPermanent; +import mage.filter.common.FilterControlledCreaturePermanent; import java.util.UUID; @@ -23,6 +24,9 @@ import java.util.UUID; */ public final class AnzragTheQuakeMole extends CardImpl { + private static final FilterPermanent filter + = new FilterControlledCreaturePermanent("each creature you control"); + public AnzragTheQuakeMole(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{R}{G}"); @@ -34,7 +38,7 @@ public final class AnzragTheQuakeMole extends CardImpl { // Whenever Anzrag, the Quake-Mole becomes blocked, untap each creature you control. After this combat phase, there is an additional combat phase. Ability ability = new BecomesBlockedSourceTriggeredAbility( - new UntapAllEffect(StaticFilters.FILTER_CONTROLLED_CREATURE), false + new UntapAllEffect(filter), false ); ability.addEffect(new AdditionalCombatPhaseEffect() .setText("After this combat phase, there is an additional combat phase")); diff --git a/Mage.Sets/src/mage/cards/b/BarbedServitor.java b/Mage.Sets/src/mage/cards/b/BarbedServitor.java index b76a06ed026..8ce5ad6978d 100644 --- a/Mage.Sets/src/mage/cards/b/BarbedServitor.java +++ b/Mage.Sets/src/mage/cards/b/BarbedServitor.java @@ -39,7 +39,7 @@ public final class BarbedServitor extends CardImpl { // Whenever Barbed Servitor deals combat damage to a player, you draw a card and you lose 1 life. Ability ability = new DealsCombatDamageToAPlayerTriggeredAbility( - new DrawCardSourceControllerEffect(1, "you"), true + new DrawCardSourceControllerEffect(1, "you"), false ); ability.addEffect(new LoseLifeSourceControllerEffect(1).concatBy("and")); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/cards/c/CauldronDance.java b/Mage.Sets/src/mage/cards/c/CauldronDance.java index 9b02118f86c..7f14a074b8d 100644 --- a/Mage.Sets/src/mage/cards/c/CauldronDance.java +++ b/Mage.Sets/src/mage/cards/c/CauldronDance.java @@ -39,7 +39,7 @@ public final class CauldronDance extends CardImpl { this.getSpellAbility().addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_CREATURE_YOUR_GRAVEYARD)); // You may put a creature card from your hand onto the battlefield. That creature gains haste. Its controller sacrifices it at the beginning of the next end step. - this.getSpellAbility().addEffect(new CauldronDancePutCreatureFromHandOntoBattlefieldEffect()); + this.getSpellAbility().addEffect(new CauldronDancePutCreatureFromHandOntoBattlefieldEffect().concatBy("
")); } private CauldronDance(final CauldronDance card) { diff --git a/Mage.Sets/src/mage/cards/c/ChancellorOfTheAnnex.java b/Mage.Sets/src/mage/cards/c/ChancellorOfTheAnnex.java index a7032fb1b60..ac269469712 100644 --- a/Mage.Sets/src/mage/cards/c/ChancellorOfTheAnnex.java +++ b/Mage.Sets/src/mage/cards/c/ChancellorOfTheAnnex.java @@ -43,7 +43,8 @@ public final class ChancellorOfTheAnnex extends CardImpl { this.addAbility(FlyingAbility.getInstance()); // Whenever an opponent casts a spell, counter it unless that player pays {1}. - this.addAbility(new SpellCastOpponentTriggeredAbility(Zone.BATTLEFIELD, new CounterUnlessPaysEffect(new GenericManaCost(1)), StaticFilters.FILTER_SPELL_A, false, SetTargetPointer.SPELL)); + this.addAbility(new SpellCastOpponentTriggeredAbility(Zone.BATTLEFIELD, new CounterUnlessPaysEffect(new GenericManaCost(1)) + .setText("counter it unless that player pays {1}"), StaticFilters.FILTER_SPELL_A, false, SetTargetPointer.SPELL)); } private ChancellorOfTheAnnex(final ChancellorOfTheAnnex card) { diff --git a/Mage.Sets/src/mage/cards/c/ClandestineMeddler.java b/Mage.Sets/src/mage/cards/c/ClandestineMeddler.java index a12c419eea4..f83866a8c75 100644 --- a/Mage.Sets/src/mage/cards/c/ClandestineMeddler.java +++ b/Mage.Sets/src/mage/cards/c/ClandestineMeddler.java @@ -11,8 +11,8 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; import mage.filter.FilterPermanent; -import mage.filter.StaticFilters; import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.predicate.mageobject.AnotherPredicate; import mage.filter.predicate.permanent.SuspectedPredicate; import mage.target.TargetPermanent; @@ -24,9 +24,11 @@ import java.util.UUID; public final class ClandestineMeddler extends CardImpl { private static final FilterPermanent filter = new FilterControlledCreaturePermanent(); + private static final FilterPermanent filterOther = new FilterControlledCreaturePermanent("other target creature you control"); static { filter.add(SuspectedPredicate.instance); + filterOther.add(AnotherPredicate.instance); } public ClandestineMeddler(UUID ownerId, CardSetInfo setInfo) { @@ -40,7 +42,7 @@ public final class ClandestineMeddler extends CardImpl { // When Clandestine Meddler enters the battlefield, suspect up to one other target creature you control. Ability ability = new EntersBattlefieldTriggeredAbility(new SuspectTargetEffect()); ability.addTarget(new TargetPermanent( - 0, 1, StaticFilters.FILTER_ANOTHER_TARGET_CREATURE_YOU_CONTROL + 0, 1, filterOther )); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/cards/f/Festerleech.java b/Mage.Sets/src/mage/cards/f/Festerleech.java index bbc2f8157cd..53a9849c11f 100644 --- a/Mage.Sets/src/mage/cards/f/Festerleech.java +++ b/Mage.Sets/src/mage/cards/f/Festerleech.java @@ -30,7 +30,7 @@ public final class Festerleech extends CardImpl { // Whenever Festerleech deals combat damage to a player, you mill two cards. this.addAbility(new DealsCombatDamageToAPlayerTriggeredAbility( - new MillCardsControllerEffect(2), false + new MillCardsControllerEffect(2).setText("you mill two cards"), false )); // {1}{B}: Festerleech gets +2/+2 until end of turn. Activate only once each turn. diff --git a/Mage.Sets/src/mage/cards/g/GlintWeaver.java b/Mage.Sets/src/mage/cards/g/GlintWeaver.java index 7ae0f9c009b..1a9ab59f620 100644 --- a/Mage.Sets/src/mage/cards/g/GlintWeaver.java +++ b/Mage.Sets/src/mage/cards/g/GlintWeaver.java @@ -35,7 +35,8 @@ public final class GlintWeaver extends CardImpl { Ability ability = new EntersBattlefieldTriggeredAbility(new DistributeCountersEffect( CounterType.P1P1, 3, "one, two, or three target creatures" )); - ability.addEffect(new GainLifeEffect(GreatestToughnessAmongControlledCreaturesValue.instance).concatBy(", then")); + ability.addEffect(new GainLifeEffect(GreatestToughnessAmongControlledCreaturesValue.instance) + .setText(", then you gain life equal to the greatest toughness among creatures you control")); ability.addTarget(new TargetCreaturePermanentAmount(3)); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/g/GriffnautTracker.java b/Mage.Sets/src/mage/cards/g/GriffnautTracker.java index 5fd5341d773..5153f6b058c 100644 --- a/Mage.Sets/src/mage/cards/g/GriffnautTracker.java +++ b/Mage.Sets/src/mage/cards/g/GriffnautTracker.java @@ -9,7 +9,7 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; -import mage.filter.FilterCard; +import mage.filter.StaticFilters; import mage.target.common.TargetCardInASingleGraveyard; import java.util.UUID; @@ -19,8 +19,6 @@ import java.util.UUID; */ public final class GriffnautTracker extends CardImpl { - private static final FilterCard filter = new FilterCard("cards from a single graveyard"); - public GriffnautTracker(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{W}"); @@ -34,7 +32,7 @@ public final class GriffnautTracker extends CardImpl { // When Griffnaut Tracker enters the battlefield, exile up to two target cards from a single graveyard. Ability ability = new EntersBattlefieldTriggeredAbility(new ExileTargetEffect()); - ability.addTarget(new TargetCardInASingleGraveyard(0, 2, filter)); + ability.addTarget(new TargetCardInASingleGraveyard(0, 2, StaticFilters.FILTER_CARD_CARDS)); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/h/HuntersAmbush.java b/Mage.Sets/src/mage/cards/h/HuntersAmbush.java index 5bc0d3e5085..efbaa5b5788 100644 --- a/Mage.Sets/src/mage/cards/h/HuntersAmbush.java +++ b/Mage.Sets/src/mage/cards/h/HuntersAmbush.java @@ -29,7 +29,8 @@ public final class HuntersAmbush extends CardImpl { // Prevent all combat damage that would be dealt by nongreen creatures this turn. - this.getSpellAbility().addEffect(new PreventAllDamageByAllPermanentsEffect(filter, Duration.EndOfTurn, true)); + this.getSpellAbility().addEffect(new PreventAllDamageByAllPermanentsEffect(filter, Duration.EndOfTurn, true) + .setText("prevent all combat damage that would be dealt by nongreen creatures this turn")); } private HuntersAmbush(final HuntersAmbush card) { diff --git a/Mage.Sets/src/mage/cards/i/IzoniCenterOfTheWeb.java b/Mage.Sets/src/mage/cards/i/IzoniCenterOfTheWeb.java index 87bf630d97c..5f5b904bfdf 100644 --- a/Mage.Sets/src/mage/cards/i/IzoniCenterOfTheWeb.java +++ b/Mage.Sets/src/mage/cards/i/IzoniCenterOfTheWeb.java @@ -17,7 +17,8 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; import mage.constants.SuperType; -import mage.filter.StaticFilters; +import mage.filter.FilterPermanent; +import mage.filter.predicate.permanent.TokenPredicate; import mage.game.permanent.token.IzoniSpiderToken; import java.util.UUID; @@ -27,6 +28,11 @@ import java.util.UUID; */ public final class IzoniCenterOfTheWeb extends CardImpl { + private static final FilterPermanent filter = new FilterPermanent("tokens"); + static { + filter.add(TokenPredicate.TRUE); + } + public IzoniCenterOfTheWeb(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{B}{G}"); @@ -48,7 +54,7 @@ public final class IzoniCenterOfTheWeb extends CardImpl { // Sacrifice four tokens: Surveil 2, then draw two cards. You gain 2 life. Ability ability = new SimpleActivatedAbility( new SurveilEffect(2, false), - new SacrificeTargetCost(4, StaticFilters.FILTER_PERMANENT_TOKEN) + new SacrificeTargetCost(4, filter) ); ability.addEffect(new DrawCardSourceControllerEffect(2).concatBy(", then")); ability.addEffect(new GainLifeEffect(2)); diff --git a/Mage.Sets/src/mage/cards/m/MizzixsMastery.java b/Mage.Sets/src/mage/cards/m/MizzixsMastery.java index b864a004003..68cb8a1a402 100644 --- a/Mage.Sets/src/mage/cards/m/MizzixsMastery.java +++ b/Mage.Sets/src/mage/cards/m/MizzixsMastery.java @@ -33,7 +33,7 @@ public final class MizzixsMastery extends CardImpl { // For each card exiled this way, copy it, and you may cast the copy // without paying its mana cost. Exile Mizzix's Mastery. this.getSpellAbility().addEffect(new ExileTargetCardCopyAndCastEffect(true).setText( - "Exile target card that's an instant or sorcery from your graveyard. For each card exiled this way, copy it, and you may cast the copy without paying its mana cost. Exile Mizzix's Mastery.")); + "Exile target card that's an instant or sorcery from your graveyard. For each card exiled this way, copy it, and you may cast the copy without paying its mana cost")); this.getSpellAbility().addTarget(new TargetCardInYourGraveyard( new FilterInstantOrSorceryCard("card that's an instant or sorcery from your graveyard"))); this.getSpellAbility().addEffect(new ExileSpellEffect()); @@ -61,7 +61,7 @@ class MizzixsMasteryOverloadEffect extends OneShotEffect { super(Outcome.PlayForFree); this.staticText = "Exile each card that's an instant or sorcery from " + "your graveyard. For each card exiled this way, copy it, " - + "and you may cast the copy without paying its mana cost. Exile {this}"; + + "and you may cast the copy without paying its mana cost"; } private MizzixsMasteryOverloadEffect(final MizzixsMasteryOverloadEffect effect) { diff --git a/Mage.Sets/src/mage/cards/p/PiratedCopy.java b/Mage.Sets/src/mage/cards/p/PiratedCopy.java index 83b8e8ee5fd..80184185fc6 100644 --- a/Mage.Sets/src/mage/cards/p/PiratedCopy.java +++ b/Mage.Sets/src/mage/cards/p/PiratedCopy.java @@ -40,7 +40,7 @@ public final class PiratedCopy extends CardImpl { blueprint.addSubType(SubType.PIRATE); blueprint.getAbilities().add(new DealsDamageToAPlayerAllTriggeredAbility( new DrawCardSourceControllerEffect(1), filter, - true, SetTargetPointer.NONE, true + false, SetTargetPointer.NONE, true )); return true; } @@ -48,7 +48,7 @@ public final class PiratedCopy extends CardImpl { @Override public String getText() { return ", except it's a Pirate in addition to its other types and it has \"Whenever this creature " + - "or another creature with the same name deals combat damage to a player, you may draw a card.\""; + "or another creature with the same name deals combat damage to a player, you draw a card.\""; } }; @@ -82,4 +82,4 @@ enum PiratedCopyPredicate implements ObjectSourcePlayerPredicate { return !AnotherPredicate.instance.apply(input, game) || (input.getObject().isCreature(game) && CardUtil.haveSameNames(input.getObject(), input.getSource().getSourcePermanentOrLKI(game))); } -} \ No newline at end of file +} diff --git a/Mage.Sets/src/mage/cards/u/UndercoverButler.java b/Mage.Sets/src/mage/cards/u/UndercoverButler.java index bf550923ec1..f6f9ccb00d0 100644 --- a/Mage.Sets/src/mage/cards/u/UndercoverButler.java +++ b/Mage.Sets/src/mage/cards/u/UndercoverButler.java @@ -51,7 +51,7 @@ class UndercoverButlerAbility extends TriggeredAbilityImpl { UndercoverButlerAbility() { super(Zone.BATTLEFIELD, new CantBeBlockedSourceEffect(Duration.EndOfTurn), false); - setTriggerPhrase("Whenever {this} attacks the player with the most life or tied for the most life, "); + setTriggerPhrase("Whenever {this} attacks the player with the most life or tied for most life, "); } private UndercoverButlerAbility(final UndercoverButlerAbility ability) { diff --git a/Mage/src/main/java/mage/abilities/common/PutCardIntoGraveFromAnywhereAllTriggeredAbility.java b/Mage/src/main/java/mage/abilities/common/PutCardIntoGraveFromAnywhereAllTriggeredAbility.java index a2b8c14df09..cf8a82e2e9c 100644 --- a/Mage/src/main/java/mage/abilities/common/PutCardIntoGraveFromAnywhereAllTriggeredAbility.java +++ b/Mage/src/main/java/mage/abilities/common/PutCardIntoGraveFromAnywhereAllTriggeredAbility.java @@ -38,7 +38,7 @@ public class PutCardIntoGraveFromAnywhereAllTriggeredAbility extends TriggeredAb this.filter = filter.copy(); this.setTargetPointer = setTargetPointer; this.filter.add(targetController.getOwnerPredicate()); - StringBuilder sb = new StringBuilder("Whenever "); + StringBuilder sb = new StringBuilder(getWhen()); sb.append(filter.getMessage()); sb.append(filter.getMessage().startsWith("one or more") ? " are" : " is"); sb.append(" put into "); diff --git a/Mage/src/main/java/mage/abilities/keyword/CollectEvidenceAbility.java b/Mage/src/main/java/mage/abilities/keyword/CollectEvidenceAbility.java index 13e9d5a29a2..a0883b671d1 100644 --- a/Mage/src/main/java/mage/abilities/keyword/CollectEvidenceAbility.java +++ b/Mage/src/main/java/mage/abilities/keyword/CollectEvidenceAbility.java @@ -43,7 +43,7 @@ public class CollectEvidenceAbility extends StaticAbility implements OptionalAdd public CollectEvidenceAbility(int amount) { super(Zone.STACK, null); this.additionalCost = makeCost(amount); - this.rule = additionalCost.getName() + ' ' + additionalCost.getReminderText(); + this.rule = additionalCost.getName() + ". " + additionalCost.getReminderText(); this.setRuleAtTheTop(true); this.addHint(hint); this.amount = amount;