diff --git a/Mage.Sets/src/mage/cards/a/Aggression.java b/Mage.Sets/src/mage/cards/a/Aggression.java index ff49c5be3b5..ba2014b4b56 100644 --- a/Mage.Sets/src/mage/cards/a/Aggression.java +++ b/Mage.Sets/src/mage/cards/a/Aggression.java @@ -31,7 +31,7 @@ import mage.watchers.common.AttackedThisTurnWatcher; */ public final class Aggression extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent(); + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("non-Wall creature"); static { filter.add(Predicates.not(SubType.WALL.getPredicate())); diff --git a/Mage.Sets/src/mage/cards/a/ArchwingDragon.java b/Mage.Sets/src/mage/cards/a/ArchwingDragon.java index 06b05f4bce8..f012837afb2 100644 --- a/Mage.Sets/src/mage/cards/a/ArchwingDragon.java +++ b/Mage.Sets/src/mage/cards/a/ArchwingDragon.java @@ -30,7 +30,7 @@ public final class ArchwingDragon extends CardImpl { this.addAbility(HasteAbility.getInstance()); // At the beginning of the end step, return Archwing Dragon to its owner's hand. - this.addAbility(new BeginningOfEndStepTriggeredAbility(new ReturnToHandSourceEffect(true), TargetController.ANY, false)); + this.addAbility(new BeginningOfEndStepTriggeredAbility(new ReturnToHandSourceEffect(true), TargetController.NEXT, false)); } diff --git a/Mage.Sets/src/mage/cards/b/BaneclawMarauder.java b/Mage.Sets/src/mage/cards/b/BaneclawMarauder.java index e158a3c738f..668dd16535e 100644 --- a/Mage.Sets/src/mage/cards/b/BaneclawMarauder.java +++ b/Mage.Sets/src/mage/cards/b/BaneclawMarauder.java @@ -21,7 +21,7 @@ import java.util.UUID; */ public final class BaneclawMarauder extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent(); + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("a creature blocking {this}"); static { filter.add(BlockingOrBlockedBySourcePredicate.BLOCKING); diff --git a/Mage.Sets/src/mage/cards/b/Bargain.java b/Mage.Sets/src/mage/cards/b/Bargain.java index a93ab26dd40..fa6bfb7a838 100644 --- a/Mage.Sets/src/mage/cards/b/Bargain.java +++ b/Mage.Sets/src/mage/cards/b/Bargain.java @@ -23,7 +23,7 @@ public final class Bargain extends CardImpl { this.getSpellAbility().addTarget(new TargetOpponent()); // You gain 7 life. - this.getSpellAbility().addEffect(new GainLifeEffect(7)); + this.getSpellAbility().addEffect(new GainLifeEffect(7).concatBy("
")); } private Bargain(final Bargain card) { diff --git a/Mage.Sets/src/mage/cards/b/BasaltGolem.java b/Mage.Sets/src/mage/cards/b/BasaltGolem.java index 92b3fbd754b..ece46148a57 100644 --- a/Mage.Sets/src/mage/cards/b/BasaltGolem.java +++ b/Mage.Sets/src/mage/cards/b/BasaltGolem.java @@ -41,7 +41,7 @@ public final class BasaltGolem extends CardImpl { // Whenever Basalt Golem becomes blocked by a creature, that creature's controller sacrifices it at end of combat. If the player does, they put a 0/2 colorless Wall artifact creature token with defender onto the battlefield. Effect effect = new CreateDelayedTriggeredAbilityEffect(new AtTheEndOfCombatDelayedTriggeredAbility(new BasaltGolemEffect()), true); - effect.setText("that creature's controller sacrifices it at end of combat. If the player does, they put a 0/2 colorless Wall artifact creature token with defender onto the battlefield."); + effect.setText("that creature's controller sacrifices it at end of combat. If the player does, they create a 0/2 colorless Wall artifact creature token with defender"); this.addAbility(new BecomesBlockedByCreatureTriggeredAbility(effect, false)); } @@ -58,7 +58,7 @@ public final class BasaltGolem extends CardImpl { class BasaltGolemEffect extends OneShotEffect { BasaltGolemEffect() { super(Outcome.DestroyPermanent); - staticText = "that creature's controller sacrifices it. If the player does, they create a 0/2 colorless Wall artifact creature token with defender."; + staticText = "that creature's controller sacrifices it. If the player does, they create a 0/2 colorless Wall artifact creature token with defender"; } private BasaltGolemEffect(final BasaltGolemEffect effect) { diff --git a/Mage.Sets/src/mage/cards/b/BlistercoilWeird.java b/Mage.Sets/src/mage/cards/b/BlistercoilWeird.java index 2681be3303c..647697c6deb 100644 --- a/Mage.Sets/src/mage/cards/b/BlistercoilWeird.java +++ b/Mage.Sets/src/mage/cards/b/BlistercoilWeird.java @@ -29,7 +29,7 @@ public final class BlistercoilWeird extends CardImpl { // Whenever you cast an instant or sorcery spell, Blistercoil Weird gets +1/+1 until end of turn. Untap it. Ability ability = new SpellCastControllerTriggeredAbility(new BoostSourceEffect(1, 1, Duration.EndOfTurn), StaticFilters.FILTER_SPELL_AN_INSTANT_OR_SORCERY, false); - ability.addEffect(new UntapSourceEffect()); + ability.addEffect(new UntapSourceEffect().setText("Untap it")); this.addAbility(ability); } @@ -43,4 +43,3 @@ public final class BlistercoilWeird extends CardImpl { return new BlistercoilWeird(this); } } - diff --git a/Mage.Sets/src/mage/cards/b/BloodstokeHowler.java b/Mage.Sets/src/mage/cards/b/BloodstokeHowler.java index 8631afaede9..748d0b75137 100644 --- a/Mage.Sets/src/mage/cards/b/BloodstokeHowler.java +++ b/Mage.Sets/src/mage/cards/b/BloodstokeHowler.java @@ -20,11 +20,7 @@ import mage.filter.common.FilterCreaturePermanent; */ public final class BloodstokeHowler extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Beast creatures you control"); - - static { - filter.add(SubType.BEAST.getPredicate()); - } + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent(SubType.BEAST, "Beast creatures"); public BloodstokeHowler(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{5}{R}"); diff --git a/Mage.Sets/src/mage/cards/b/BurningProphet.java b/Mage.Sets/src/mage/cards/b/BurningProphet.java index 6d7d53e2263..067e6170648 100644 --- a/Mage.Sets/src/mage/cards/b/BurningProphet.java +++ b/Mage.Sets/src/mage/cards/b/BurningProphet.java @@ -28,12 +28,10 @@ public final class BurningProphet extends CardImpl { // Whenever you cast a noncreature spell, Burning Prophet gets +1/+0 until end of turn, then scry 1. Ability ability = new SpellCastControllerTriggeredAbility( - new BoostSourceEffect( - 1, 0, Duration.EndOfTurn - ).setText("{this} gets +1/+0 until end of turn, then"), + new BoostSourceEffect(1, 0, Duration.EndOfTurn), StaticFilters.FILTER_SPELL_A_NON_CREATURE, false ); - ability.addEffect(new ScryEffect(1, false)); + ability.addEffect(new ScryEffect(1, false).concatBy(", then")); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/c/CeremonialGuard.java b/Mage.Sets/src/mage/cards/c/CeremonialGuard.java index ae4132f3d0f..2f8478792c5 100644 --- a/Mage.Sets/src/mage/cards/c/CeremonialGuard.java +++ b/Mage.Sets/src/mage/cards/c/CeremonialGuard.java @@ -29,7 +29,8 @@ public final class CeremonialGuard extends CardImpl { // When Ceremonial Guard attacks or blocks, destroy it at end of combat. this.addAbility(new AttacksOrBlocksTriggeredAbility( new CreateDelayedTriggeredAbilityEffect( - new AtTheEndOfCombatDelayedTriggeredAbility(new DestroySourceEffect())), + new AtTheEndOfCombatDelayedTriggeredAbility(new DestroySourceEffect().setText("destroy it at end of combat")) + .setTriggerPhrase("")), false)); } diff --git a/Mage.Sets/src/mage/cards/c/ChainOfPlasma.java b/Mage.Sets/src/mage/cards/c/ChainOfPlasma.java index 34145dcfb39..cd76c9ce32a 100644 --- a/Mage.Sets/src/mage/cards/c/ChainOfPlasma.java +++ b/Mage.Sets/src/mage/cards/c/ChainOfPlasma.java @@ -43,7 +43,7 @@ class ChainOfPlasmaEffect extends OneShotEffect { ChainOfPlasmaEffect() { super(Outcome.Damage); - this.staticText = "{this} deals 3 damage to any target. Then that player or that creature's controller may discard a card. If the player does, they may copy this spell and may choose a new target for that copy."; + this.staticText = "{this} deals 3 damage to any target. Then that player or that permanent's controller may discard a card. If the player does, they may copy this spell and may choose a new target for that copy."; } ChainOfPlasmaEffect(final ChainOfPlasmaEffect effect) { diff --git a/Mage.Sets/src/mage/cards/c/ChariotOfTheSun.java b/Mage.Sets/src/mage/cards/c/ChariotOfTheSun.java index 07f256a81ae..6f5d699dc7f 100644 --- a/Mage.Sets/src/mage/cards/c/ChariotOfTheSun.java +++ b/Mage.Sets/src/mage/cards/c/ChariotOfTheSun.java @@ -57,7 +57,7 @@ class ChariotOfTheSunEffect extends ContinuousEffectImpl { public ChariotOfTheSunEffect() { super(Duration.EndOfTurn, Layer.PTChangingEffects_7, SubLayer.SetPT_7b, Outcome.UnboostCreature); - staticText = "and its toughness becomes 1"; + staticText = "and has base toughness 1"; } public ChariotOfTheSunEffect(final ChariotOfTheSunEffect effect) { diff --git a/Mage.Sets/src/mage/cards/c/CloakOfInvisibility.java b/Mage.Sets/src/mage/cards/c/CloakOfInvisibility.java index 3107cedbe01..e40e4c76208 100644 --- a/Mage.Sets/src/mage/cards/c/CloakOfInvisibility.java +++ b/Mage.Sets/src/mage/cards/c/CloakOfInvisibility.java @@ -39,7 +39,7 @@ public final class CloakOfInvisibility extends CardImpl { this.addAbility(ability); // Enchanted creature has phasing and can't be blocked except by Walls. - ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAttachedEffect(PhasingAbility.getInstance(), AttachmentType.AURA).setText("Enchanted creature has phasing ")); + ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAttachedEffect(PhasingAbility.getInstance(), AttachmentType.AURA).setText("Enchanted creature has phasing")); ability.addEffect(new CantBeBlockedByCreaturesAttachedEffect(Duration.WhileOnBattlefield, filter, AttachmentType.AURA) .setText("and can't be blocked except by Walls. " + "(It phases in or out before its controller untaps during each of their untap steps. " + diff --git a/Mage.Sets/src/mage/cards/c/CoastalPiracy.java b/Mage.Sets/src/mage/cards/c/CoastalPiracy.java index eb0c2aaf5d0..ca402ee2357 100644 --- a/Mage.Sets/src/mage/cards/c/CoastalPiracy.java +++ b/Mage.Sets/src/mage/cards/c/CoastalPiracy.java @@ -23,7 +23,7 @@ public final class CoastalPiracy extends CardImpl { // Whenever a creature you control deals combat damage to an opponent, you may draw a card. this.addAbility(new DealsDamageToAPlayerAllTriggeredAbility( Zone.BATTLEFIELD, new DrawCardSourceControllerEffect(1), - StaticFilters.FILTER_CONTROLLED_CREATURE, true, SetTargetPointer.PLAYER, + StaticFilters.FILTER_CONTROLLED_A_CREATURE, true, SetTargetPointer.PLAYER, true, true, TargetController.OPPONENT )); } diff --git a/Mage.Sets/src/mage/cards/c/Contempt.java b/Mage.Sets/src/mage/cards/c/Contempt.java index 68047604b89..f88da26b440 100644 --- a/Mage.Sets/src/mage/cards/c/Contempt.java +++ b/Mage.Sets/src/mage/cards/c/Contempt.java @@ -42,7 +42,8 @@ public final class Contempt extends CardImpl { this.addAbility(ability); // Whenever enchanted creature attacks, return it and Contempt to their owners' hands at end of combat. - this.addAbility(new AttacksAttachedTriggeredAbility(new ContemptEffect(), AttachmentType.AURA, false)); + this.addAbility(new AttacksAttachedTriggeredAbility(new ContemptEffect(), AttachmentType.AURA, false) + .setTriggerPhrase("When enchanted creature attacks, ")); } diff --git a/Mage.Sets/src/mage/cards/c/ControlOfTheCourt.java b/Mage.Sets/src/mage/cards/c/ControlOfTheCourt.java index 7daec3df965..a409a7d7e3d 100644 --- a/Mage.Sets/src/mage/cards/c/ControlOfTheCourt.java +++ b/Mage.Sets/src/mage/cards/c/ControlOfTheCourt.java @@ -21,7 +21,7 @@ public final class ControlOfTheCourt extends CardImpl { // Draw four cards, then discard three cards at random. this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(4)); Effect effect = new DiscardControllerEffect(3, true); - effect.setText("then discard three cards at random"); + effect.concatBy(", then"); this.getSpellAbility().addEffect(effect); } @@ -33,4 +33,4 @@ public final class ControlOfTheCourt extends CardImpl { public ControlOfTheCourt copy() { return new ControlOfTheCourt(this); } -} \ No newline at end of file +} diff --git a/Mage.Sets/src/mage/cards/c/Cowardice.java b/Mage.Sets/src/mage/cards/c/Cowardice.java index aa7a552438f..c5e6f9dfc9f 100644 --- a/Mage.Sets/src/mage/cards/c/Cowardice.java +++ b/Mage.Sets/src/mage/cards/c/Cowardice.java @@ -63,11 +63,11 @@ class CowardiceTriggeredAbility extends TriggeredAbilityImpl { @Override public String getRule() { - return "Whenever a creature becomes the target of a spell or ability, return that creature to its owner's hand"; + return "Whenever a creature becomes the target of a spell or ability, return that creature to its owner's hand."; } @Override public CowardiceTriggeredAbility copy() { return new CowardiceTriggeredAbility(this); } -} \ No newline at end of file +} diff --git a/Mage.Sets/src/mage/cards/c/Cunning.java b/Mage.Sets/src/mage/cards/c/Cunning.java index 2d66c35423d..668f803b1b6 100644 --- a/Mage.Sets/src/mage/cards/c/Cunning.java +++ b/Mage.Sets/src/mage/cards/c/Cunning.java @@ -43,7 +43,8 @@ public final class Cunning extends CardImpl { // When enchanted creature attacks or blocks, sacrifice Cunning at the beginning of the next cleanup step. this.addAbility(new AttacksOrBlocksAttachedTriggeredAbility( - new SacrificeSourceBeginningCleanupStepEffect(), AttachmentType.AURA)); + new SacrificeSourceBeginningCleanupStepEffect(), AttachmentType.AURA) + .setTriggerPhrase("When enchanted creature attacks or blocks, ")); } private Cunning(final Cunning card) { diff --git a/Mage.Sets/src/mage/cards/d/DarkSupplicant.java b/Mage.Sets/src/mage/cards/d/DarkSupplicant.java index 9a5c149e6d8..f8d320efe60 100644 --- a/Mage.Sets/src/mage/cards/d/DarkSupplicant.java +++ b/Mage.Sets/src/mage/cards/d/DarkSupplicant.java @@ -31,11 +31,7 @@ import mage.target.common.TargetControlledPermanent; */ public final class DarkSupplicant extends CardImpl { - private static final FilterControlledPermanent filter = new FilterControlledPermanent("Clerics you control"); - - static { - filter.add(SubType.CLERIC.getPredicate()); - } + private static final FilterControlledPermanent filter = new FilterControlledPermanent(SubType.CLERIC, "Clerics"); public DarkSupplicant(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{B}"); diff --git a/Mage.Sets/src/mage/cards/d/DeathMatch.java b/Mage.Sets/src/mage/cards/d/DeathMatch.java index 27cdd2b7d2c..6ec60eaa1eb 100644 --- a/Mage.Sets/src/mage/cards/d/DeathMatch.java +++ b/Mage.Sets/src/mage/cards/d/DeathMatch.java @@ -27,7 +27,7 @@ public final class DeathMatch extends CardImpl { // Whenever a creature enters the battlefield, that creature's controller may have target creature of their choice get -3/-3 until end of turn. // NOTE: The ability being optional is implemented in the subclass to give the choice to correct player. Ability ability = new EntersBattlefieldAllTriggeredAbility(Zone.BATTLEFIELD, new DeathMatchEffect(), - StaticFilters.FILTER_PERMANENT_CREATURE, false, SetTargetPointer.PLAYER, ""); + StaticFilters.FILTER_PERMANENT_A_CREATURE, false, SetTargetPointer.PLAYER, ""); ability.addTarget(new TargetCreaturePermanent()); ability.setTargetAdjuster(DeathMatchAdjuster.instance); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/cards/d/Delraich.java b/Mage.Sets/src/mage/cards/d/Delraich.java index 135de65e670..701576cf6d2 100644 --- a/Mage.Sets/src/mage/cards/d/Delraich.java +++ b/Mage.Sets/src/mage/cards/d/Delraich.java @@ -22,7 +22,7 @@ import java.util.UUID; public final class Delraich extends CardImpl { private static final FilterControlledCreaturePermanent filter - = new FilterControlledCreaturePermanent("black creature"); + = new FilterControlledCreaturePermanent("black creatures"); static { filter.add(new ColorPredicate(ObjectColor.BLACK)); diff --git a/Mage.Sets/src/mage/cards/d/DispersingOrb.java b/Mage.Sets/src/mage/cards/d/DispersingOrb.java index 4e0c16c56eb..c573d11371f 100644 --- a/Mage.Sets/src/mage/cards/d/DispersingOrb.java +++ b/Mage.Sets/src/mage/cards/d/DispersingOrb.java @@ -9,6 +9,7 @@ import mage.abilities.effects.common.ReturnToHandTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; +import mage.filter.StaticFilters; import mage.target.TargetPermanent; import mage.target.common.TargetControlledPermanent; @@ -23,7 +24,7 @@ public final class DispersingOrb extends CardImpl { // {3}{U}, Sacrifice a permanent: Return target permanent to its owner's hand. Ability ability = new SimpleActivatedAbility(new ReturnToHandTargetEffect(), new ManaCostsImpl<>("{3}{U}")); - ability.addCost(new SacrificeTargetCost(new TargetControlledPermanent())); + ability.addCost(new SacrificeTargetCost(new TargetControlledPermanent(StaticFilters.FILTER_CONTROLLED_PERMANENT_SHORT_TEXT))); ability.addTarget(new TargetPermanent().withChooseHint("return to hand")); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/e/Embargo.java b/Mage.Sets/src/mage/cards/e/Embargo.java index 3a845aa6f5f..05356a7a657 100644 --- a/Mage.Sets/src/mage/cards/e/Embargo.java +++ b/Mage.Sets/src/mage/cards/e/Embargo.java @@ -1,4 +1,3 @@ - package mage.cards.e; import java.util.UUID; @@ -11,23 +10,19 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Duration; import mage.constants.TargetController; -import mage.constants.Zone; -import mage.filter.FilterPermanent; -import mage.filter.common.FilterNonlandPermanent; +import mage.filter.StaticFilters; /** * * @author fireshoes */ public final class Embargo extends CardImpl { - - private static final FilterPermanent filter = new FilterNonlandPermanent(); public Embargo(UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{3}{U}"); // Nonland permanents don't untap during their controllers' untap steps. - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new DontUntapInControllersUntapStepAllEffect(Duration.WhileOnBattlefield, TargetController.ANY, filter))); + this.addAbility(new SimpleStaticAbility(new DontUntapInControllersUntapStepAllEffect(Duration.WhileOnBattlefield, TargetController.ANY, StaticFilters.FILTER_PERMANENTS_NON_LAND))); // At the beginning of your upkeep, you lose 2 life. this.addAbility(new BeginningOfUpkeepTriggeredAbility(new LoseLifeSourceControllerEffect(2), TargetController.YOU, false)); diff --git a/Mage.Sets/src/mage/cards/e/EnchantedBeing.java b/Mage.Sets/src/mage/cards/e/EnchantedBeing.java index 24b6f39e453..d2021a3ebf7 100644 --- a/Mage.Sets/src/mage/cards/e/EnchantedBeing.java +++ b/Mage.Sets/src/mage/cards/e/EnchantedBeing.java @@ -29,8 +29,8 @@ public final class EnchantedBeing extends CardImpl { this.power = new MageInt(2); this.toughness = new MageInt(2); - // Prevent all damage that would be dealt to Enchanted Being by enchanted creatures. - this.addAbility(new SimpleStaticAbility(new PreventAllDamageToSourceByPermanentsEffect(filter))); + // Prevent all combat damage that would be dealt to Enchanted Being by enchanted creatures. + this.addAbility(new SimpleStaticAbility(new PreventAllDamageToSourceByPermanentsEffect(filter, true))); } private EnchantedBeing(final EnchantedBeing card) { diff --git a/Mage.Sets/src/mage/cards/e/EzuriStalkerOfSpheres.java b/Mage.Sets/src/mage/cards/e/EzuriStalkerOfSpheres.java index c9febcf5b7d..70b7376679f 100644 --- a/Mage.Sets/src/mage/cards/e/EzuriStalkerOfSpheres.java +++ b/Mage.Sets/src/mage/cards/e/EzuriStalkerOfSpheres.java @@ -33,7 +33,7 @@ public final class EzuriStalkerOfSpheres extends CardImpl { // When Ezuri, Stalker of Spheres enters the battlefield, you may pay {3}. If you do, proliferate twice. this.addAbility(new EntersBattlefieldTriggeredAbility(new DoIfCostPaid( new ProliferateEffect(false), new GenericManaCost(3) - ).addEffect(new ProliferateEffect().setText("twice")))); + ).addEffect(new ProliferateEffect().setText(" twice")))); // Whenever you proliferate, draw a card. this.addAbility(new ProliferatedControllerTriggeredAbility(new DrawCardSourceControllerEffect(1))); diff --git a/Mage.Sets/src/mage/cards/f/Feint.java b/Mage.Sets/src/mage/cards/f/Feint.java index 4ffa7c667d8..a8e011ba355 100644 --- a/Mage.Sets/src/mage/cards/f/Feint.java +++ b/Mage.Sets/src/mage/cards/f/Feint.java @@ -27,8 +27,9 @@ public final class Feint extends CardImpl { super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{R}"); // Tap all creatures blocking target attacking creature. Prevent all combat damage that would be dealt this turn by that creature and each creature blocking it. - this.getSpellAbility().addEffect(new PreventDamageByTargetEffect(Duration.EndOfTurn, true).setText("")); this.getSpellAbility().addEffect(new FeintEffect()); + this.getSpellAbility().addEffect(new PreventDamageByTargetEffect(Duration.EndOfTurn, true) + .setText("Prevent all combat damage that would be dealt this turn by that creature and each creature blocking it")); this.getSpellAbility().addTarget(new TargetAttackingCreature()); } @@ -47,7 +48,7 @@ class FeintEffect extends OneShotEffect { public FeintEffect() { super(Outcome.ReturnToHand); - this.staticText = "Tap all creatures blocking target attacking creature. Prevent all combat damage that would be dealt this turn by that creature and each creature blocking it"; + this.staticText = "tap all creatures blocking target attacking creature"; } public FeintEffect(final FeintEffect effect) { diff --git a/Mage.Sets/src/mage/cards/f/FlametongueYearling.java b/Mage.Sets/src/mage/cards/f/FlametongueYearling.java index c04aacddc04..e351dafe366 100644 --- a/Mage.Sets/src/mage/cards/f/FlametongueYearling.java +++ b/Mage.Sets/src/mage/cards/f/FlametongueYearling.java @@ -35,7 +35,7 @@ public final class FlametongueYearling extends CardImpl { this.toughness = new MageInt(1); // Multikicker {2} - this.addAbility(new MultikickerAbility(new GenericManaCost(2))); + this.addAbility(new MultikickerAbility("{2}")); // Flametongue Yearling enters the battlefield with a +1/+1 counter on it for each time it was kicked. this.addAbility(new EntersBattlefieldAbility(new AddCountersSourceEffect( diff --git a/Mage.Sets/src/mage/cards/f/FleetFootedMonk.java b/Mage.Sets/src/mage/cards/f/FleetFootedMonk.java index c2d842ab207..f9cb7a06b22 100644 --- a/Mage.Sets/src/mage/cards/f/FleetFootedMonk.java +++ b/Mage.Sets/src/mage/cards/f/FleetFootedMonk.java @@ -1,11 +1,16 @@ package mage.cards.f; import mage.MageInt; -import mage.abilities.keyword.DauntAbility; +import mage.abilities.common.SimpleEvasionAbility; +import mage.abilities.effects.common.combat.CantBeBlockedByCreaturesSourceEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; +import mage.constants.ComparisonType; +import mage.constants.Duration; import mage.constants.SubType; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.mageobject.PowerPredicate; import java.util.UUID; @@ -14,6 +19,13 @@ import java.util.UUID; */ public final class FleetFootedMonk extends CardImpl { + private static final FilterCreaturePermanent filter + = new FilterCreaturePermanent("creatures with power 2 or greater"); + + static { + filter.add(new PowerPredicate(ComparisonType.OR_GREATER, 2)); + } + public FleetFootedMonk(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{W}"); this.subtype.add(SubType.HUMAN); @@ -22,7 +34,7 @@ public final class FleetFootedMonk extends CardImpl { this.toughness = new MageInt(1); // Fleet-Footed Monk can't be blocked by creatures with power 2 or greater. - this.addAbility(new DauntAbility()); + this.addAbility(new SimpleEvasionAbility(new CantBeBlockedByCreaturesSourceEffect(filter, Duration.WhileOnBattlefield))); } private FleetFootedMonk(final FleetFootedMonk card) { diff --git a/Mage.Sets/src/mage/cards/f/FluxChanneler.java b/Mage.Sets/src/mage/cards/f/FluxChanneler.java index db14684b2f0..f4698be1dce 100644 --- a/Mage.Sets/src/mage/cards/f/FluxChanneler.java +++ b/Mage.Sets/src/mage/cards/f/FluxChanneler.java @@ -26,7 +26,7 @@ public final class FluxChanneler extends CardImpl { // Whenever you cast a noncreature spell, proliferate. (Choose any number of permanents and/or players, then give each another counter of each kind already there.) this.addAbility(new SpellCastControllerTriggeredAbility( - new ProliferateEffect(), StaticFilters.FILTER_SPELL_NON_CREATURE, false + new ProliferateEffect(), StaticFilters.FILTER_SPELL_A_NON_CREATURE, false )); } diff --git a/Mage.Sets/src/mage/cards/f/FreyalisesCharm.java b/Mage.Sets/src/mage/cards/f/FreyalisesCharm.java index e0a9d236cd3..93850d5cf93 100644 --- a/Mage.Sets/src/mage/cards/f/FreyalisesCharm.java +++ b/Mage.Sets/src/mage/cards/f/FreyalisesCharm.java @@ -20,7 +20,7 @@ import java.util.UUID; */ public final class FreyalisesCharm extends CardImpl { - private static final FilterSpell filter = new FilterSpell("black spell"); + private static final FilterSpell filter = new FilterSpell("a black spell"); static { filter.add(new ColorPredicate(ObjectColor.BLACK)); diff --git a/Mage.Sets/src/mage/cards/g/GallowsAtWillowHill.java b/Mage.Sets/src/mage/cards/g/GallowsAtWillowHill.java index d11f49e7743..e290d9637fd 100644 --- a/Mage.Sets/src/mage/cards/g/GallowsAtWillowHill.java +++ b/Mage.Sets/src/mage/cards/g/GallowsAtWillowHill.java @@ -30,7 +30,7 @@ import mage.target.targetpointer.FixedTarget; */ public final class GallowsAtWillowHill extends CardImpl { - private static final FilterControlledPermanent humanFilter = new FilterControlledPermanent("untapped Human you control"); + private static final FilterControlledPermanent humanFilter = new FilterControlledPermanent("untapped Humans you control"); static { humanFilter.add(TappedPredicate.UNTAPPED); diff --git a/Mage.Sets/src/mage/cards/g/GangrenousGoliath.java b/Mage.Sets/src/mage/cards/g/GangrenousGoliath.java index 7467c839ce0..f938a316f34 100644 --- a/Mage.Sets/src/mage/cards/g/GangrenousGoliath.java +++ b/Mage.Sets/src/mage/cards/g/GangrenousGoliath.java @@ -20,11 +20,7 @@ import mage.target.common.TargetControlledCreaturePermanent; */ public final class GangrenousGoliath extends CardImpl { - private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("untapped Clerics"); - - static { - filter.add(SubType.CLERIC.getPredicate()); - } + private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent(SubType.CLERIC,"untapped Clerics you control"); public GangrenousGoliath(UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{B}{B}"); diff --git a/Mage.Sets/src/mage/cards/g/GhastlyRemains.java b/Mage.Sets/src/mage/cards/g/GhastlyRemains.java index 458c2a708b2..ba52266dd9a 100644 --- a/Mage.Sets/src/mage/cards/g/GhastlyRemains.java +++ b/Mage.Sets/src/mage/cards/g/GhastlyRemains.java @@ -75,7 +75,7 @@ class GhastlyRemainsTriggeredAbility extends BeginningOfUpkeepTriggeredAbility { @Override public String getRule() { - return "At the beginning of your upkeep, if {this} is in your graveyard, you may pay {B}{B}{B}. If you do, return {this} to your hand"; + return "At the beginning of your upkeep, if {this} is in your graveyard, you may pay {B}{B}{B}. If you do, return {this} to your hand."; } } diff --git a/Mage.Sets/src/mage/cards/g/GixsCommand.java b/Mage.Sets/src/mage/cards/g/GixsCommand.java index 1303ca53f8a..118e274a72d 100644 --- a/Mage.Sets/src/mage/cards/g/GixsCommand.java +++ b/Mage.Sets/src/mage/cards/g/GixsCommand.java @@ -79,7 +79,7 @@ class GixsCommandCounterEffect extends OneShotEffect { public GixsCommandCounterEffect() { super(Outcome.BoostCreature); - this.staticText = "Put two +1/+1 counter on up to one creature. It gains lifelink until end of turn."; + this.staticText = "Put two +1/+1 counters on up to one creature. It gains lifelink until end of turn."; } private GixsCommandCounterEffect(final GixsCommandCounterEffect effect) { diff --git a/Mage.Sets/src/mage/cards/g/GlissasScorn.java b/Mage.Sets/src/mage/cards/g/GlissasScorn.java index 7d30c11901f..7b6ad0403f6 100644 --- a/Mage.Sets/src/mage/cards/g/GlissasScorn.java +++ b/Mage.Sets/src/mage/cards/g/GlissasScorn.java @@ -20,7 +20,7 @@ public final class GlissasScorn extends CardImpl { // Destroy target artifact. Its controller loses 1 life. this.getSpellAbility().addTarget(new TargetArtifactPermanent()); - this.getSpellAbility().addEffect(new DestroyTargetEffect(true)); + this.getSpellAbility().addEffect(new DestroyTargetEffect()); this.getSpellAbility().addEffect(new LoseLifeTargetControllerEffect(1)); } diff --git a/Mage.Sets/src/mage/cards/g/GoblinClearcutter.java b/Mage.Sets/src/mage/cards/g/GoblinClearcutter.java index c6a93f9c25a..d49e63491d6 100644 --- a/Mage.Sets/src/mage/cards/g/GoblinClearcutter.java +++ b/Mage.Sets/src/mage/cards/g/GoblinClearcutter.java @@ -62,7 +62,7 @@ class GoblinClearCutterManaEffect extends ManaEffect { public GoblinClearCutterManaEffect() { super(); - this.staticText = "Add 3 mana in any combination of {R} and/or {G}"; + this.staticText = "Add three mana in any combination of {R} and/or {G}"; netMana.add(new Mana(0, 0, 0, 0, 3, 0, 0, 0)); netMana.add(new Mana(0, 0, 0, 1, 2, 0, 0, 0)); netMana.add(new Mana(0, 0, 0, 2, 1, 0, 0, 0)); diff --git a/Mage.Sets/src/mage/cards/g/GoblinPyromancer.java b/Mage.Sets/src/mage/cards/g/GoblinPyromancer.java index eb1050c609f..66c48f2a028 100644 --- a/Mage.Sets/src/mage/cards/g/GoblinPyromancer.java +++ b/Mage.Sets/src/mage/cards/g/GoblinPyromancer.java @@ -40,7 +40,7 @@ public final class GoblinPyromancer extends CardImpl { this.addAbility(new EntersBattlefieldTriggeredAbility(new BoostAllEffect(3, 0, Duration.EndOfTurn, StaticFilters.FILTER_PERMANENT_CREATURE_GOBLINS, false))); // At the beginning of the end step, destroy all Goblins. - this.addAbility(new BeginningOfEndStepTriggeredAbility(new DestroyAllEffect(filterPermanent, false), TargetController.ANY, false)); + this.addAbility(new BeginningOfEndStepTriggeredAbility(new DestroyAllEffect(filterPermanent, false), TargetController.NEXT, false)); } private GoblinPyromancer(final GoblinPyromancer card) { diff --git a/Mage.Sets/src/mage/cards/g/GoblinSoothsayer.java b/Mage.Sets/src/mage/cards/g/GoblinSoothsayer.java index 36e6474cfdd..b29111b05f5 100644 --- a/Mage.Sets/src/mage/cards/g/GoblinSoothsayer.java +++ b/Mage.Sets/src/mage/cards/g/GoblinSoothsayer.java @@ -28,11 +28,10 @@ import mage.target.common.TargetControlledPermanent; public final class GoblinSoothsayer extends CardImpl { private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("red creatures"); - private static final FilterControlledPermanent filter2 = new FilterControlledPermanent("goblin"); + private static final FilterControlledPermanent filter2 = new FilterControlledPermanent(SubType.GOBLIN, "Goblin"); - static { + static { filter.add(new ColorPredicate(ObjectColor.RED)); - filter2.add(SubType.GOBLIN.getPredicate()); } public GoblinSoothsayer(UUID ownerId, CardSetInfo setInfo) { @@ -58,4 +57,4 @@ public final class GoblinSoothsayer extends CardImpl { public GoblinSoothsayer copy() { return new GoblinSoothsayer(this); } -} \ No newline at end of file +} diff --git a/Mage.Sets/src/mage/cards/g/GrangerGuildmage.java b/Mage.Sets/src/mage/cards/g/GrangerGuildmage.java index 86c82df1b70..2592c683377 100644 --- a/Mage.Sets/src/mage/cards/g/GrangerGuildmage.java +++ b/Mage.Sets/src/mage/cards/g/GrangerGuildmage.java @@ -36,7 +36,7 @@ public final class GrangerGuildmage extends CardImpl { // {R}, {tap}: Granger Guildmage deals 1 damage to any target and 1 damage to you. Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(1), new ManaCostsImpl<>("{R}")); ability.addCost(new TapSourceCost()); - ability.addEffect(new DamageControllerEffect(1)); + ability.addEffect(new DamageControllerEffect(1).setText("and 1 damage to you")); ability.addTarget(new TargetAnyTarget()); this.addAbility(ability); @@ -55,4 +55,4 @@ public final class GrangerGuildmage extends CardImpl { public GrangerGuildmage copy() { return new GrangerGuildmage(this); } -} \ No newline at end of file +} diff --git a/Mage.Sets/src/mage/cards/h/HakimLoreweaver.java b/Mage.Sets/src/mage/cards/h/HakimLoreweaver.java index fcd76760522..92334d10ae2 100644 --- a/Mage.Sets/src/mage/cards/h/HakimLoreweaver.java +++ b/Mage.Sets/src/mage/cards/h/HakimLoreweaver.java @@ -63,7 +63,7 @@ public final class HakimLoreweaver extends CardImpl { this.addAbility(ability); // {U}{U}, {tap}: Destroy all Auras attached to Hakim. - Ability ability2 = new SimpleActivatedAbility(new HakimLoreweaverEffect(), new ManaCostsImpl<>("{U}{U}")); + Ability ability2 = new SimpleActivatedAbility(new HakimLoreweaverDestroyEffect(), new ManaCostsImpl<>("{U}{U}")); ability2.addCost(new TapSourceCost()); this.addAbility(ability2); } @@ -186,4 +186,4 @@ class HakimLoreweaverPredicate implements Predicate { public boolean apply(Permanent input, Game game) { return input.isAttachedTo(permanent.getId()); } -} \ No newline at end of file +} diff --git a/Mage.Sets/src/mage/cards/h/Hesitation.java b/Mage.Sets/src/mage/cards/h/Hesitation.java index 8bda0f71317..d42e4f03808 100644 --- a/Mage.Sets/src/mage/cards/h/Hesitation.java +++ b/Mage.Sets/src/mage/cards/h/Hesitation.java @@ -24,7 +24,8 @@ public final class Hesitation extends CardImpl { super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{1}{U}"); // When a player casts a spell, sacrifice Hesitation and counter that spell. - Ability ability = new SpellCastAllTriggeredAbility(new SacrificeSourceEffect(), StaticFilters.FILTER_SPELL_A, false, SetTargetPointer.SPELL); + Ability ability = new SpellCastAllTriggeredAbility(new SacrificeSourceEffect(), StaticFilters.FILTER_SPELL_A, false, SetTargetPointer.SPELL) + .setTriggerPhrase("When a player casts a spell, "); Effect effect = new CounterTargetEffect(); effect.setText("and counter that spell"); ability.addEffect(effect); diff --git a/Mage.Sets/src/mage/cards/h/HornOfPlenty.java b/Mage.Sets/src/mage/cards/h/HornOfPlenty.java index c0196b97204..052c397f488 100644 --- a/Mage.Sets/src/mage/cards/h/HornOfPlenty.java +++ b/Mage.Sets/src/mage/cards/h/HornOfPlenty.java @@ -48,7 +48,7 @@ class HornOfPlentyEffect extends OneShotEffect { public HornOfPlentyEffect() { super(Outcome.Detriment); - this.staticText = "they may pay {1}. If that player does, they draw a card at the beginning of the next end step"; + this.staticText = "they may pay {1}. If the player does, they draw a card at the beginning of the next end step"; } public HornOfPlentyEffect(final HornOfPlentyEffect effect) { diff --git a/Mage.Sets/src/mage/cards/i/InfiniteAuthority.java b/Mage.Sets/src/mage/cards/i/InfiniteAuthority.java index ac66c1c9418..d87bcb432eb 100644 --- a/Mage.Sets/src/mage/cards/i/InfiniteAuthority.java +++ b/Mage.Sets/src/mage/cards/i/InfiniteAuthority.java @@ -60,7 +60,8 @@ public final class InfiniteAuthority extends CardImpl { class InfiniteAuthorityTriggeredAbility extends TriggeredAbilityImpl { InfiniteAuthorityTriggeredAbility() { - super(Zone.BATTLEFIELD, new CreateDelayedTriggeredAbilityEffect(new AtTheEndOfCombatDelayedTriggeredAbility(new InfiniteAuthorityEffect()))); + super(Zone.BATTLEFIELD, new CreateDelayedTriggeredAbilityEffect(new AtTheEndOfCombatDelayedTriggeredAbility( + new InfiniteAuthorityEffect()).setTriggerPhrase(""))); setTriggerPhrase("Whenever enchanted creature blocks or becomes blocked by a creature with toughness 3 or less, "); } diff --git a/Mage.Sets/src/mage/cards/i/InquisitorExarch.java b/Mage.Sets/src/mage/cards/i/InquisitorExarch.java index b484c0aac50..62ade83b50a 100644 --- a/Mage.Sets/src/mage/cards/i/InquisitorExarch.java +++ b/Mage.Sets/src/mage/cards/i/InquisitorExarch.java @@ -1,4 +1,3 @@ - package mage.cards.i; import java.util.UUID; @@ -12,7 +11,7 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; -import mage.target.TargetPlayer; +import mage.target.common.TargetOpponent; /** * @@ -30,7 +29,7 @@ public final class InquisitorExarch extends CardImpl { Ability ability = new EntersBattlefieldTriggeredAbility(new GainLifeEffect(2)); Mode mode = new Mode(new LoseLifeTargetEffect(2)); - mode.addTarget(new TargetPlayer()); + mode.addTarget(new TargetOpponent()); ability.addMode(mode); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/i/InvaderParasite.java b/Mage.Sets/src/mage/cards/i/InvaderParasite.java index afce56d2f0c..a21f197805e 100644 --- a/Mage.Sets/src/mage/cards/i/InvaderParasite.java +++ b/Mage.Sets/src/mage/cards/i/InvaderParasite.java @@ -125,6 +125,6 @@ class InvaderParasiteTriggeredAbility extends TriggeredAbilityImpl { @Override public String getRule() { - return "Whenever a land with the same name as the exiled card enters the battlefield under an opponent's control, {this} deals 2 damage to that player"; + return "Whenever a land with the same name as the exiled card enters the battlefield under an opponent's control, {this} deals 2 damage to that player."; } } diff --git a/Mage.Sets/src/mage/cards/j/JackalopeHerd.java b/Mage.Sets/src/mage/cards/j/JackalopeHerd.java index aca52e91b85..fc263d5dfe0 100644 --- a/Mage.Sets/src/mage/cards/j/JackalopeHerd.java +++ b/Mage.Sets/src/mage/cards/j/JackalopeHerd.java @@ -26,7 +26,8 @@ public final class JackalopeHerd extends CardImpl { this.toughness = new MageInt(5); // When you cast a spell, return Jackalope Herd to its owner's hand. - this.addAbility(new SpellCastControllerTriggeredAbility(new ReturnToHandSourceEffect(true), StaticFilters.FILTER_SPELL_A, false)); + this.addAbility(new SpellCastControllerTriggeredAbility(new ReturnToHandSourceEffect(true), StaticFilters.FILTER_SPELL_A, false) + .setTriggerPhrase("When you cast a spell, ")); } private JackalopeHerd(final JackalopeHerd card) { diff --git a/Mage.Sets/src/mage/cards/j/JorKadeenFirstGoldwarden.java b/Mage.Sets/src/mage/cards/j/JorKadeenFirstGoldwarden.java index e406cf6d585..050210bdf93 100644 --- a/Mage.Sets/src/mage/cards/j/JorKadeenFirstGoldwarden.java +++ b/Mage.Sets/src/mage/cards/j/JorKadeenFirstGoldwarden.java @@ -58,7 +58,7 @@ public final class JorKadeenFirstGoldwarden extends CardImpl { )); ability.addEffect(new ConditionalOneShotEffect( new DrawCardSourceControllerEffect(1), - condition, "Then if {this}'s power is 4 or greater" + condition, "Then if {this}'s power is 4 or greater, draw a card" )); this.addAbility(ability.addHint(hint)); } diff --git a/Mage.Sets/src/mage/cards/k/KinzuOfTheBleakCoven.java b/Mage.Sets/src/mage/cards/k/KinzuOfTheBleakCoven.java index 7c1c9e65c9a..5d7a8417a3a 100644 --- a/Mage.Sets/src/mage/cards/k/KinzuOfTheBleakCoven.java +++ b/Mage.Sets/src/mage/cards/k/KinzuOfTheBleakCoven.java @@ -69,7 +69,7 @@ class KinzuOfTheBleakCovenEffect extends OneShotEffect { KinzuOfTheBleakCovenEffect() { super(Outcome.Benefit); - staticText = "you may pay 2 Life and exile it. If you do, " + + staticText = "you may pay 2 life and exile it. If you do, " + "create a token that's a copy of that creature" + ", except it's 1/1 and has toxic 1."; } diff --git a/Mage.Sets/src/mage/cards/l/LairDelve.java b/Mage.Sets/src/mage/cards/l/LairDelve.java index 610a1a2647b..438fac79f2a 100644 --- a/Mage.Sets/src/mage/cards/l/LairDelve.java +++ b/Mage.Sets/src/mage/cards/l/LairDelve.java @@ -16,7 +16,7 @@ import mage.filter.predicate.Predicates; */ public final class LairDelve extends CardImpl { - private static final FilterCard filter = new FilterCard("all creature and land cards"); + private static final FilterCard filter = new FilterCard("creature and land cards"); static { filter.add(Predicates.or(CardType.LAND.getPredicate(), CardType.CREATURE.getPredicate())); diff --git a/Mage.Sets/src/mage/cards/l/LifeMatrix.java b/Mage.Sets/src/mage/cards/l/LifeMatrix.java index f1f6d57d3fe..52aa1806074 100644 --- a/Mage.Sets/src/mage/cards/l/LifeMatrix.java +++ b/Mage.Sets/src/mage/cards/l/LifeMatrix.java @@ -36,7 +36,7 @@ public final class LifeMatrix extends CardImpl { Zone.BATTLEFIELD, new AddCountersTargetEffect(CounterType.MATRIX.createInstance()), new GenericManaCost(4), - new IsStepCondition(PhaseStep.UPKEEP), "Put a matrix counter on target creature and " + new IsStepCondition(PhaseStep.UPKEEP), "{4}, {T}: Put a matrix counter on target creature and " + "that creature gains \"Remove a matrix counter from this creature: " + "Regenerate this creature.\" Activate only during your upkeep."); Ability ability2 = new SimpleActivatedAbility(Zone.BATTLEFIELD, diff --git a/Mage.Sets/src/mage/cards/l/Lunge.java b/Mage.Sets/src/mage/cards/l/Lunge.java index 8d8154a340b..b3bb6efb96f 100644 --- a/Mage.Sets/src/mage/cards/l/Lunge.java +++ b/Mage.Sets/src/mage/cards/l/Lunge.java @@ -26,7 +26,7 @@ public final class Lunge extends CardImpl { Effect effect = new DamageTargetEffect(2).setUseOnlyTargetPointer(true); effect.setTargetPointer(new SecondTargetPointer()); - effect.setText("and 2 damage to target player"); + effect.setText("and 2 damage to target player or planeswalker"); this.getSpellAbility().addEffect(effect); this.getSpellAbility().addTarget(new TargetPlayerOrPlaneswalker()); } diff --git a/Mage.Sets/src/mage/cards/m/MagdaBrazenOutlaw.java b/Mage.Sets/src/mage/cards/m/MagdaBrazenOutlaw.java index 4eaa77ac0f7..4bf4651f7c4 100644 --- a/Mage.Sets/src/mage/cards/m/MagdaBrazenOutlaw.java +++ b/Mage.Sets/src/mage/cards/m/MagdaBrazenOutlaw.java @@ -32,7 +32,7 @@ public final class MagdaBrazenOutlaw extends CardImpl { private static final FilterCreaturePermanent filter = new FilterCreaturePermanent(SubType.DWARF, "Dwarves"); private static final FilterControlledPermanent filter2 = new FilterControlledPermanent(SubType.DWARF, "a Dwarf you control"); private static final FilterCard filter3 = new FilterCard("an artifact or Dragon card"); - private static final FilterControlledPermanent filter4 = new FilterControlledPermanent(SubType.TREASURE, "treasures"); + private static final FilterControlledPermanent filter4 = new FilterControlledPermanent(SubType.TREASURE, "Treasures"); static { filter3.add(Predicates.or(CardType.ARTIFACT.getPredicate(), SubType.DRAGON.getPredicate())); } diff --git a/Mage.Sets/src/mage/cards/m/MaskOfTheMimic.java b/Mage.Sets/src/mage/cards/m/MaskOfTheMimic.java index a9d50591ad2..b8ba300456e 100644 --- a/Mage.Sets/src/mage/cards/m/MaskOfTheMimic.java +++ b/Mage.Sets/src/mage/cards/m/MaskOfTheMimic.java @@ -58,8 +58,8 @@ class MaskOfTheMimicEffect extends OneShotEffect { MaskOfTheMimicEffect() { super(Outcome.Benefit); - this.staticText = "Search your library for a 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 card with the same name as target nontoken creature," + + " put that card onto the battlefield, then shuffle."; } MaskOfTheMimicEffect(final MaskOfTheMimicEffect effect) { diff --git a/Mage.Sets/src/mage/cards/m/MeliraTheLivingCure.java b/Mage.Sets/src/mage/cards/m/MeliraTheLivingCure.java index c3c22fda213..78958f11747 100644 --- a/Mage.Sets/src/mage/cards/m/MeliraTheLivingCure.java +++ b/Mage.Sets/src/mage/cards/m/MeliraTheLivingCure.java @@ -47,7 +47,7 @@ public final class MeliraTheLivingCure extends CardImpl { this.toughness = new MageInt(3); // If you would get one or more poison counters, instead you get one poison counter and you can't get additional poison counters this turn. - this.addAbility(new SimpleStaticAbility(new MeliraTheLivingCurePreventionEffect())); + this.addAbility(new SimpleStaticAbility(new MeliraTheLivingCureReplacementEffect())); // Exile Melira, the Living Cure: Choose another target creature or artifact. When it's put into a graveyard this turn, return that card to the battlefield under its owner's control. Ability ability = new SimpleActivatedAbility(new CreateDelayedTriggeredAbilityEffect( @@ -72,15 +72,15 @@ public final class MeliraTheLivingCure extends CardImpl { } } -class MeliraTheLivingCureReplacmentEffect extends ReplacementEffectImpl { +class MeliraTheLivingCureReplacementEffect extends ReplacementEffectImpl { - MeliraTheLivingCureReplacmentEffect() { + MeliraTheLivingCureReplacementEffect() { super(Duration.WhileOnBattlefield, Outcome.Benefit); staticText = "if you would get one or more poison counters, instead you get " + "one poison counter and you can't get additional poison counters this turn"; } - private MeliraTheLivingCureReplacmentEffect(final MeliraTheLivingCureReplacmentEffect effect) { + private MeliraTheLivingCureReplacementEffect(final MeliraTheLivingCureReplacementEffect effect) { super(effect); } @@ -104,8 +104,8 @@ class MeliraTheLivingCureReplacmentEffect extends ReplacementEffectImpl { } @Override - public MeliraTheLivingCureReplacmentEffect copy() { - return new MeliraTheLivingCureReplacmentEffect(this); + public MeliraTheLivingCureReplacementEffect copy() { + return new MeliraTheLivingCureReplacementEffect(this); } } diff --git a/Mage.Sets/src/mage/cards/m/MentalAgony.java b/Mage.Sets/src/mage/cards/m/MentalAgony.java index 6c8d61d49c7..2c94446cf2d 100644 --- a/Mage.Sets/src/mage/cards/m/MentalAgony.java +++ b/Mage.Sets/src/mage/cards/m/MentalAgony.java @@ -21,7 +21,7 @@ public final class MentalAgony extends CardImpl { // Target player discards two cards and loses 2 life. this.getSpellAbility().addEffect(new DiscardTargetEffect(2)); - this.getSpellAbility().addEffect(new LoseLifeTargetEffect(2)); + this.getSpellAbility().addEffect(new LoseLifeTargetEffect(2).setText("and loses 2 life")); this.getSpellAbility().addTarget(new TargetPlayer()); } diff --git a/Mage.Sets/src/mage/cards/m/Mindculling.java b/Mage.Sets/src/mage/cards/m/Mindculling.java index 699a7231bca..1daf5d3e7cf 100644 --- a/Mage.Sets/src/mage/cards/m/Mindculling.java +++ b/Mage.Sets/src/mage/cards/m/Mindculling.java @@ -19,9 +19,9 @@ public final class Mindculling extends CardImpl { super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{5}{U}"); - this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(2)); + this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(2, "you")); this.getSpellAbility().addTarget(new TargetOpponent()); - this.getSpellAbility().addEffect(new DiscardTargetEffect(2)); + this.getSpellAbility().addEffect(new DiscardTargetEffect(2).concatBy("and")); } private Mindculling(final Mindculling card) { diff --git a/Mage.Sets/src/mage/cards/m/MisersCage.java b/Mage.Sets/src/mage/cards/m/MisersCage.java index 4c0efe59e95..fc317f79eb8 100644 --- a/Mage.Sets/src/mage/cards/m/MisersCage.java +++ b/Mage.Sets/src/mage/cards/m/MisersCage.java @@ -78,6 +78,6 @@ class MisersCageTriggeredAbility extends TriggeredAbilityImpl { @Override public String getRule() { - return "at the beginning of each opponent's upkeep, if that player has five or more cards in hand, {this} deals 2 damage to that player"; + return "at the beginning of each opponent's upkeep, if that player has five or more cards in hand, {this} deals 2 damage to that player."; } } diff --git a/Mage.Sets/src/mage/cards/m/MoggBombers.java b/Mage.Sets/src/mage/cards/m/MoggBombers.java index fb36dae7ed8..a19631b9414 100644 --- a/Mage.Sets/src/mage/cards/m/MoggBombers.java +++ b/Mage.Sets/src/mage/cards/m/MoggBombers.java @@ -14,6 +14,7 @@ import mage.constants.SubType; import mage.constants.Zone; import mage.filter.StaticFilters; import mage.target.TargetPlayer; +import mage.target.common.TargetPlayerOrPlaneswalker; /** * @@ -21,7 +22,7 @@ import mage.target.TargetPlayer; */ public final class MoggBombers extends CardImpl { - private static final String rule = "When another creature enters the battlefield, sacrifice {this} and it deals 3 damage to target player."; + private static final String rule = "When another creature enters the battlefield, sacrifice {this} and it deals 3 damage to target player or planeswalker."; public MoggBombers(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{R}"); @@ -40,7 +41,7 @@ public final class MoggBombers extends CardImpl { false, rule); ability.addEffect(damageTargetPlayer); - ability.addTarget(new TargetPlayer()); + ability.addTarget(new TargetPlayerOrPlaneswalker()); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/m/MomentOfSilence.java b/Mage.Sets/src/mage/cards/m/MomentOfSilence.java index 1f51484654a..f01a7e62ec4 100644 --- a/Mage.Sets/src/mage/cards/m/MomentOfSilence.java +++ b/Mage.Sets/src/mage/cards/m/MomentOfSilence.java @@ -18,7 +18,7 @@ public final class MomentOfSilence extends CardImpl { super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{W}"); // Target player skips their next combat phase this turn. - this.getSpellAbility().addEffect(new SkipCombatStepEffect(Duration.EndOfTurn).setText("Target player skips their next combat this turn")); + this.getSpellAbility().addEffect(new SkipCombatStepEffect(Duration.EndOfTurn).setText("Target player skips their next combat phase this turn")); this.getSpellAbility().addTarget(new TargetPlayer()); } diff --git a/Mage.Sets/src/mage/cards/m/Mortuary.java b/Mage.Sets/src/mage/cards/m/Mortuary.java index a2d125a5359..821ddb45d30 100644 --- a/Mage.Sets/src/mage/cards/m/Mortuary.java +++ b/Mage.Sets/src/mage/cards/m/Mortuary.java @@ -20,7 +20,7 @@ public final class Mortuary extends CardImpl { super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{3}{B}"); // Whenever a creature is put into your graveyard from the battlefield, put that card on top of your library. - Ability ability = new PutIntoGraveFromBattlefieldAllTriggeredAbility(new PutOnLibraryTargetEffect(true, "put that card on top of your library."), false, StaticFilters.FILTER_PERMANENT_CREATURE, true, true); + Ability ability = new PutIntoGraveFromBattlefieldAllTriggeredAbility(new PutOnLibraryTargetEffect(true, "put that card on top of your library."), false, StaticFilters.FILTER_PERMANENT_A_CREATURE, true, true); this.addAbility(ability); } @@ -32,4 +32,4 @@ public final class Mortuary extends CardImpl { public Mortuary copy() { return new Mortuary(this); } -} \ No newline at end of file +} diff --git a/Mage.Sets/src/mage/cards/m/MyrelShieldOfArgive.java b/Mage.Sets/src/mage/cards/m/MyrelShieldOfArgive.java index 5611e6204aa..c30ea008c91 100644 --- a/Mage.Sets/src/mage/cards/m/MyrelShieldOfArgive.java +++ b/Mage.Sets/src/mage/cards/m/MyrelShieldOfArgive.java @@ -25,7 +25,7 @@ import java.util.UUID; public final class MyrelShieldOfArgive extends CardImpl { private static final DynamicValue xValue = new PermanentsOnBattlefieldCount( - new FilterControlledPermanent(SubType.SOLDIER), null + new FilterControlledPermanent(SubType.SOLDIER, "Soldiers you control"), null ); private static final Hint hint = new ValueHint("Soldiers you control", xValue); diff --git a/Mage.Sets/src/mage/cards/n/NecrogenRotpriest.java b/Mage.Sets/src/mage/cards/n/NecrogenRotpriest.java index c2b9da60d25..1408839be36 100644 --- a/Mage.Sets/src/mage/cards/n/NecrogenRotpriest.java +++ b/Mage.Sets/src/mage/cards/n/NecrogenRotpriest.java @@ -27,7 +27,7 @@ import java.util.UUID; public final class NecrogenRotpriest extends CardImpl { private static final FilterPermanent filter - = new FilterControlledCreaturePermanent("creature you control with toxic"); + = new FilterControlledCreaturePermanent("a creature you control with toxic"); static { filter.add(new AbilityPredicate(ToxicAbility.class)); diff --git a/Mage.Sets/src/mage/cards/n/NewPrahvGuildmage.java b/Mage.Sets/src/mage/cards/n/NewPrahvGuildmage.java index 720ecb26a28..842b94f119a 100644 --- a/Mage.Sets/src/mage/cards/n/NewPrahvGuildmage.java +++ b/Mage.Sets/src/mage/cards/n/NewPrahvGuildmage.java @@ -26,7 +26,7 @@ import mage.target.common.TargetNonlandPermanent; */ public final class NewPrahvGuildmage extends CardImpl { - private static final FilterNonlandPermanent filter = new FilterNonlandPermanent("nonland permanent an opponent control"); + private static final FilterNonlandPermanent filter = new FilterNonlandPermanent("nonland permanent an opponent controls"); static { filter.add(TargetController.OPPONENT.getControllerPredicate()); diff --git a/Mage.Sets/src/mage/cards/n/NosyGoblin.java b/Mage.Sets/src/mage/cards/n/NosyGoblin.java index e535e7dbd93..d045eea88b5 100644 --- a/Mage.Sets/src/mage/cards/n/NosyGoblin.java +++ b/Mage.Sets/src/mage/cards/n/NosyGoblin.java @@ -23,7 +23,7 @@ import mage.target.common.TargetCreaturePermanent; */ public final class NosyGoblin extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("face down creature"); + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("face-down creature"); static { filter.add(FaceDownPredicate.instance); diff --git a/Mage.Sets/src/mage/cards/o/OrimsCure.java b/Mage.Sets/src/mage/cards/o/OrimsCure.java index f80db4d4042..c35d0b03b70 100644 --- a/Mage.Sets/src/mage/cards/o/OrimsCure.java +++ b/Mage.Sets/src/mage/cards/o/OrimsCure.java @@ -37,7 +37,7 @@ public final class OrimsCure extends CardImpl { // If you control a Plains, you may tap an untapped creature you control rather than pay Orim's Cure's mana cost. Cost cost = new TapTargetCost(new TargetControlledPermanent(1,1,filterCreature,false)); - cost.setText(" tap an untapped creature you control"); + cost.setText("tap an untapped creature you control"); this.addAbility(new AlternativeCostSourceAbility(cost, new PermanentsOnTheBattlefieldCondition(filter))); // Prevent the next 4 damage that would be dealt to any target this turn. diff --git a/Mage.Sets/src/mage/cards/o/OutOfTime.java b/Mage.Sets/src/mage/cards/o/OutOfTime.java index e28d782450b..d9fdc7a6a73 100644 --- a/Mage.Sets/src/mage/cards/o/OutOfTime.java +++ b/Mage.Sets/src/mage/cards/o/OutOfTime.java @@ -56,7 +56,7 @@ class OutOfTimePhaseOutEffect extends OneShotEffect { public OutOfTimePhaseOutEffect() { super(Outcome.AIDontUseIt); - this.staticText = "untap all creatures, then phase them out until {this} leaves the battlefield. " + this.staticText = "untap all creatures, then those creatures phase out until {this} leaves the battlefield. " + "Put a time counter on {this} for each creature phased out this way"; } diff --git a/Mage.Sets/src/mage/cards/p/PalisadeGiant.java b/Mage.Sets/src/mage/cards/p/PalisadeGiant.java index 42f26f03dac..096f8f47941 100644 --- a/Mage.Sets/src/mage/cards/p/PalisadeGiant.java +++ b/Mage.Sets/src/mage/cards/p/PalisadeGiant.java @@ -65,7 +65,7 @@ class PalisadeGiantReplacementEffect extends ReplacementEffectImpl { PalisadeGiantReplacementEffect() { super(Duration.WhileOnBattlefield, Outcome.RedirectDamage); - staticText = "All damage that would be dealt to you or another permanent you control is dealt to {this} instead"; + staticText = "All damage that would be dealt to you and other permanents you control is dealt to {this} instead"; } PalisadeGiantReplacementEffect(final PalisadeGiantReplacementEffect effect) { diff --git a/Mage.Sets/src/mage/cards/p/ParasiticImplant.java b/Mage.Sets/src/mage/cards/p/ParasiticImplant.java index 1512e663241..cef68a85ba3 100644 --- a/Mage.Sets/src/mage/cards/p/ParasiticImplant.java +++ b/Mage.Sets/src/mage/cards/p/ParasiticImplant.java @@ -35,7 +35,7 @@ public final class ParasiticImplant extends CardImpl { Ability ability = new EnchantAbility(auraTarget); this.addAbility(ability); ability = new BeginningOfUpkeepTriggeredAbility(new ParasiticImplantEffect(), TargetController.YOU, false); - ability.addEffect(new CreateTokenEffect(new PhyrexianMyrToken())); + ability.addEffect(new CreateTokenEffect(new PhyrexianMyrToken()).concatBy("and you")); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/p/Penance.java b/Mage.Sets/src/mage/cards/p/Penance.java index 77abfcd09e4..697cc02ac38 100644 --- a/Mage.Sets/src/mage/cards/p/Penance.java +++ b/Mage.Sets/src/mage/cards/p/Penance.java @@ -47,7 +47,7 @@ class PenanceEffect extends PreventionEffectImpl { public PenanceEffect() { super(Duration.EndOfTurn, Integer.MAX_VALUE, false, false); - this.staticText = "The next time a black or red source of your choice would deal damage to you this turn, prevent that damage."; + this.staticText = "The next time a black or red source of your choice would deal damage this turn, prevent that damage."; this.target = new TargetSource(); } @@ -76,14 +76,12 @@ class PenanceEffect extends PreventionEffectImpl { @Override public boolean applies(GameEvent event, Ability source, Game game) { - if (!this.used - && super.applies(event, source, game)) { - if (event.getTargetId().equals(source.getControllerId()) - && event.getSourceId().equals(target.getFirstTarget())) { + if (!this.used && super.applies(event, source, game)) { + if (event.getSourceId().equals(target.getFirstTarget())) { return (game.getObject(target.getFirstTarget()).getColor(game).contains(ObjectColor.BLACK) || game.getObject(target.getFirstTarget()).getColor(game).contains(ObjectColor.RED)); } } return false; } -} \ No newline at end of file +} diff --git a/Mage.Sets/src/mage/cards/p/Piety.java b/Mage.Sets/src/mage/cards/p/Piety.java index 94848631f5a..4f3002407ff 100644 --- a/Mage.Sets/src/mage/cards/p/Piety.java +++ b/Mage.Sets/src/mage/cards/p/Piety.java @@ -17,14 +17,13 @@ import mage.filter.common.FilterBlockingCreature; */ public final class Piety extends CardImpl { - static final FilterBlockingCreature filter = new FilterBlockingCreature(); + private static final FilterBlockingCreature filter = new FilterBlockingCreature("blocking creatures"); public Piety(UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{2}{W}"); // Blocking creatures get +0/+3 until end of turn. this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostAllEffect(0, 3, Duration.EndOfTurn, filter, false))); - //this.addAbility(new OnEventTriggeredAbility(GameEvent.EventType.END_TURN_STEP_POST, "end Piety", true, new BoostAllEffect(0, 3, Duration.EndOfTurn, filter, false))); } private Piety(final Piety card) { diff --git a/Mage.Sets/src/mage/cards/p/PriceOfBetrayal.java b/Mage.Sets/src/mage/cards/p/PriceOfBetrayal.java index 30b7775498d..d9ebefc7789 100644 --- a/Mage.Sets/src/mage/cards/p/PriceOfBetrayal.java +++ b/Mage.Sets/src/mage/cards/p/PriceOfBetrayal.java @@ -32,7 +32,7 @@ public final class PriceOfBetrayal extends CardImpl { )); } - private static final FilterPermanentOrPlayer filter2 = new FilterPermanentOrPlayer("artifact, creature, planeswalker or opponent", filter, new FilterOpponent()); + private static final FilterPermanentOrPlayer filter2 = new FilterPermanentOrPlayer("artifact, creature, planeswalker, or opponent", filter, new FilterOpponent()); public PriceOfBetrayal(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{B}"); @@ -128,4 +128,4 @@ class PriceOfBetrayalEffect extends OneShotEffect { } return false; } -} \ No newline at end of file +} diff --git a/Mage.Sets/src/mage/cards/p/PrimalWhisperer.java b/Mage.Sets/src/mage/cards/p/PrimalWhisperer.java index 647978989e7..669552b58b1 100644 --- a/Mage.Sets/src/mage/cards/p/PrimalWhisperer.java +++ b/Mage.Sets/src/mage/cards/p/PrimalWhisperer.java @@ -23,7 +23,7 @@ import mage.filter.predicate.card.FaceDownPredicate; */ public final class PrimalWhisperer extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("face-down creature"); + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("face-down creature on the battlefield"); static { filter.add(FaceDownPredicate.instance); diff --git a/Mage.Sets/src/mage/cards/p/Pulverize.java b/Mage.Sets/src/mage/cards/p/Pulverize.java index 51b913b5136..db6f4e08998 100644 --- a/Mage.Sets/src/mage/cards/p/Pulverize.java +++ b/Mage.Sets/src/mage/cards/p/Pulverize.java @@ -9,7 +9,7 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; -import mage.filter.common.FilterArtifactPermanent; +import mage.filter.StaticFilters; import mage.filter.common.FilterControlledPermanent; import mage.target.common.TargetControlledPermanent; @@ -32,7 +32,7 @@ public final class Pulverize extends CardImpl { this.addAbility(new AlternativeCostSourceAbility(new SacrificeTargetCost(new TargetControlledPermanent(2, 2, filter, true)))); // Destroy all artifacts. - this.getSpellAbility().addEffect(new DestroyAllEffect(new FilterArtifactPermanent())); + this.getSpellAbility().addEffect(new DestroyAllEffect(StaticFilters.FILTER_PERMANENT_ARTIFACTS)); } private Pulverize(final Pulverize card) { diff --git a/Mage.Sets/src/mage/cards/r/RecklessEmbermage.java b/Mage.Sets/src/mage/cards/r/RecklessEmbermage.java index cbfe2217922..03f5da202c6 100644 --- a/Mage.Sets/src/mage/cards/r/RecklessEmbermage.java +++ b/Mage.Sets/src/mage/cards/r/RecklessEmbermage.java @@ -31,7 +31,7 @@ public final class RecklessEmbermage extends CardImpl { // {1}{R}: Reckless Embermage deals 1 damage to any target and 1 damage to itself. Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(1), new ManaCostsImpl<>("{1}{R}")); - ability.addEffect(new DamageSelfEffect(1)); + ability.addEffect(new DamageSelfEffect(1).setText("and 1 damage to itself")); ability.addTarget(new TargetAnyTarget()); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/r/RescueRetriever.java b/Mage.Sets/src/mage/cards/r/RescueRetriever.java index 1d61c53a701..16c430cf59b 100644 --- a/Mage.Sets/src/mage/cards/r/RescueRetriever.java +++ b/Mage.Sets/src/mage/cards/r/RescueRetriever.java @@ -22,7 +22,7 @@ import mage.filter.predicate.mageobject.AnotherPredicate; public final class RescueRetriever extends CardImpl { private static final FilterControlledPermanent filter = new FilterControlledPermanent(SubType.SOLDIER, "other Soldier you control"); - private static final FilterAttackingCreature filterAttacking = new FilterAttackingCreature("attacking Soldiers you control"); + private static final FilterAttackingCreature filterAttacking = new FilterAttackingCreature("other attacking Soldiers you control"); static { filter.add(AnotherPredicate.instance); diff --git a/Mage.Sets/src/mage/cards/r/RiptideEntrancer.java b/Mage.Sets/src/mage/cards/r/RiptideEntrancer.java index dba624e774f..3e94aa8a3ec 100644 --- a/Mage.Sets/src/mage/cards/r/RiptideEntrancer.java +++ b/Mage.Sets/src/mage/cards/r/RiptideEntrancer.java @@ -91,6 +91,6 @@ class RiptideEntrancerTriggeredAbility extends TriggeredAbilityImpl { @Override public String getRule() { return "Whenever {this} deals combat damage to a player, you may sacrifice it. " - + "If you do, gain control of target creature that player controls"; + + "If you do, gain control of target creature that player controls."; } } diff --git a/Mage.Sets/src/mage/cards/r/RotlungReanimator.java b/Mage.Sets/src/mage/cards/r/RotlungReanimator.java index dee2c6c4879..c21304aa9cb 100644 --- a/Mage.Sets/src/mage/cards/r/RotlungReanimator.java +++ b/Mage.Sets/src/mage/cards/r/RotlungReanimator.java @@ -18,11 +18,7 @@ import mage.game.permanent.token.ZombieToken; */ public final class RotlungReanimator extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("{this} or another Cleric"); - - static { - filter.add(SubType.CLERIC.getPredicate()); - } + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent(SubType.CLERIC, "Cleric"); public RotlungReanimator(UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{B}"); diff --git a/Mage.Sets/src/mage/cards/s/SaidDone.java b/Mage.Sets/src/mage/cards/s/SaidDone.java index b32b25fe168..6c291145c0f 100644 --- a/Mage.Sets/src/mage/cards/s/SaidDone.java +++ b/Mage.Sets/src/mage/cards/s/SaidDone.java @@ -33,10 +33,10 @@ public final class SaidDone extends SplitCard { )); // Done - // Tap up to two target creatures. They don't untap during their controllers' next untap step. + // Tap up to two target creatures. Those creatures don't untap during their controllers' next untap step. this.getRightHalfCard().getSpellAbility().addEffect(new TapTargetEffect()); this.getRightHalfCard().getSpellAbility().addTarget(new TargetCreaturePermanent(0, 2)); - this.getRightHalfCard().getSpellAbility().addEffect(new DontUntapInControllersNextUntapStepTargetEffect("They")); + this.getRightHalfCard().getSpellAbility().addEffect(new DontUntapInControllersNextUntapStepTargetEffect("Those creatures")); } private SaidDone(final SaidDone card) { diff --git a/Mage.Sets/src/mage/cards/s/SaprazzanOutrigger.java b/Mage.Sets/src/mage/cards/s/SaprazzanOutrigger.java index 30f25abddf3..f0e01a6f3b1 100644 --- a/Mage.Sets/src/mage/cards/s/SaprazzanOutrigger.java +++ b/Mage.Sets/src/mage/cards/s/SaprazzanOutrigger.java @@ -26,7 +26,9 @@ public final class SaprazzanOutrigger extends CardImpl { this.toughness = new MageInt(5); // When Saprazzan Outrigger attacks or blocks, put it on top of its owner's library at end of combat. - DelayedTriggeredAbility ability = new AtTheEndOfCombatDelayedTriggeredAbility(new PutOnLibrarySourceEffect(true, "put it on top of its owner's library at end of combat")); + DelayedTriggeredAbility ability = new AtTheEndOfCombatDelayedTriggeredAbility( + new PutOnLibrarySourceEffect(true, "put it on top of its owner's library at end of combat")) + .setTriggerPhrase(""); this.addAbility(new AttacksOrBlocksTriggeredAbility(new CreateDelayedTriggeredAbilityEffect(ability, true), false)); } diff --git a/Mage.Sets/src/mage/cards/s/SerpentineBasilisk.java b/Mage.Sets/src/mage/cards/s/SerpentineBasilisk.java index ac1ca9f69b4..81cf312cc80 100644 --- a/Mage.Sets/src/mage/cards/s/SerpentineBasilisk.java +++ b/Mage.Sets/src/mage/cards/s/SerpentineBasilisk.java @@ -29,7 +29,8 @@ public final class SerpentineBasilisk extends CardImpl { // Whenever Serpentine Basilisk deals combat damage to a creature, destroy that creature at end of combat. this.addAbility(new DealsCombatDamageToACreatureTriggeredAbility( new CreateDelayedTriggeredAbilityEffect( - new AtTheEndOfCombatDelayedTriggeredAbility(new DestroyTargetEffect("destroy that creature at end of combat")), true), false, true)); + new AtTheEndOfCombatDelayedTriggeredAbility(new DestroyTargetEffect("destroy that creature at end of combat")) + .setTriggerPhrase(""), true), false, true)); // Morph {1}{G}{G} this.addAbility(new MorphAbility(new ManaCostsImpl<>("{1}{G}{G}"))); } diff --git a/Mage.Sets/src/mage/cards/s/ShadesBreath.java b/Mage.Sets/src/mage/cards/s/ShadesBreath.java index 7ac89a66e6b..aa036b3e3ef 100644 --- a/Mage.Sets/src/mage/cards/s/ShadesBreath.java +++ b/Mage.Sets/src/mage/cards/s/ShadesBreath.java @@ -80,7 +80,7 @@ class ShadesBreathSetSubtypeEffect extends ContinuousEffectImpl { ShadesBreathSetSubtypeEffect() { super(Duration.EndOfTurn, Layer.TypeChangingEffects_4, SubLayer.NA, Outcome.Benefit); - staticText = "Shade"; + staticText = " Shade"; } private ShadesBreathSetSubtypeEffect(final ShadesBreathSetSubtypeEffect effect) { diff --git a/Mage.Sets/src/mage/cards/s/ShaukuEndbringer.java b/Mage.Sets/src/mage/cards/s/ShaukuEndbringer.java index afc124405b8..a4da8160e5d 100644 --- a/Mage.Sets/src/mage/cards/s/ShaukuEndbringer.java +++ b/Mage.Sets/src/mage/cards/s/ShaukuEndbringer.java @@ -45,7 +45,7 @@ public final class ShaukuEndbringer extends CardImpl { // {T}: Exile target creature and put a +1/+1 counter on Shauku. Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new ExileTargetEffect(), new TapSourceCost()); - ability.addEffect(new AddCountersSourceEffect(CounterType.P1P1.createInstance())); + ability.addEffect(new AddCountersSourceEffect(CounterType.P1P1.createInstance()).concatBy("and")); ability.addTarget(new TargetCreaturePermanent()); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/s/SkitteringHorror.java b/Mage.Sets/src/mage/cards/s/SkitteringHorror.java index f685d21d370..faccb0d2b32 100644 --- a/Mage.Sets/src/mage/cards/s/SkitteringHorror.java +++ b/Mage.Sets/src/mage/cards/s/SkitteringHorror.java @@ -25,7 +25,8 @@ public final class SkitteringHorror extends CardImpl { this.toughness = new MageInt(3); // When you cast a creature spell, sacrifice Skittering Horror. - this.addAbility(new SpellCastControllerTriggeredAbility(new SacrificeSourceEffect(), StaticFilters.FILTER_SPELL_A_CREATURE, false)); + this.addAbility(new SpellCastControllerTriggeredAbility(new SacrificeSourceEffect(), StaticFilters.FILTER_SPELL_A_CREATURE, false) + .setTriggerPhrase("When you cast a creature spell, ")); } private SkitteringHorror(final SkitteringHorror card) { diff --git a/Mage.Sets/src/mage/cards/s/SlagFiend.java b/Mage.Sets/src/mage/cards/s/SlagFiend.java index 922d314d41c..bb49df1c5bd 100644 --- a/Mage.Sets/src/mage/cards/s/SlagFiend.java +++ b/Mage.Sets/src/mage/cards/s/SlagFiend.java @@ -27,7 +27,8 @@ public final class SlagFiend extends CardImpl { this.power = new MageInt(0); this.toughness = new MageInt(0); - this.addAbility(new SimpleStaticAbility(Zone.ALL, new SetBasePowerToughnessSourceEffect(new CardsInAllGraveyardsCount(new FilterArtifactCard("artifacts"))))); + this.addAbility(new SimpleStaticAbility(Zone.ALL, new SetBasePowerToughnessSourceEffect( + new CardsInAllGraveyardsCount(new FilterArtifactCard("artifact cards"))))); } private SlagFiend(final SlagFiend card) { @@ -38,4 +39,4 @@ public final class SlagFiend extends CardImpl { public SlagFiend copy() { return new SlagFiend(this); } -} \ No newline at end of file +} diff --git a/Mage.Sets/src/mage/cards/s/SorcerousSight.java b/Mage.Sets/src/mage/cards/s/SorcerousSight.java index d368d5d452a..0121b65b047 100644 --- a/Mage.Sets/src/mage/cards/s/SorcerousSight.java +++ b/Mage.Sets/src/mage/cards/s/SorcerousSight.java @@ -26,7 +26,7 @@ public final class SorcerousSight extends CardImpl { this.getSpellAbility().addTarget(new TargetOpponent()); // Draw a card. - this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1)); + this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1).concatBy("
")); } private SorcerousSight(final SorcerousSight card) { diff --git a/Mage.Sets/src/mage/cards/s/SoulTithe.java b/Mage.Sets/src/mage/cards/s/SoulTithe.java index e8a6d308a1c..368d3a16417 100644 --- a/Mage.Sets/src/mage/cards/s/SoulTithe.java +++ b/Mage.Sets/src/mage/cards/s/SoulTithe.java @@ -8,10 +8,7 @@ import mage.abilities.effects.common.AttachEffect; import mage.abilities.keyword.EnchantAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.Outcome; -import mage.constants.SubType; -import mage.constants.TargetController; +import mage.constants.*; import mage.game.Game; import mage.game.permanent.Permanent; import mage.players.Player; @@ -26,8 +23,6 @@ import java.util.UUID; */ public final class SoulTithe extends CardImpl { - static final String rule = "At the beginning of the upkeep of enchanted permanent's controller, that player sacrifices it unless they pay {X}, where X is its mana value"; - public SoulTithe(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{W}"); this.subtype.add(SubType.AURA); @@ -42,7 +37,8 @@ public final class SoulTithe extends CardImpl { // At the beginning of the upkeep of enchanted permanent's controller, // that player sacrifices it unless they pay {X}, // where X is its converted mana cost. - this.addAbility(new BeginningOfUpkeepTriggeredAbility(new SoulTitheEffect(), TargetController.CONTROLLER_ATTACHED_TO, false)); + this.addAbility(new BeginningOfUpkeepTriggeredAbility(new SoulTitheEffect(), TargetController.CONTROLLER_ATTACHED_TO, false) + .setTriggerPhrase("At the beginning of the upkeep of enchanted permanent's controller, ")); } private SoulTithe(final SoulTithe card) { diff --git a/Mage.Sets/src/mage/cards/s/SpiritAway.java b/Mage.Sets/src/mage/cards/s/SpiritAway.java index bf3444f87d0..3e5f5137231 100644 --- a/Mage.Sets/src/mage/cards/s/SpiritAway.java +++ b/Mage.Sets/src/mage/cards/s/SpiritAway.java @@ -24,7 +24,6 @@ import mage.target.common.TargetCreaturePermanent; /** * * @author noxx - */ public final class SpiritAway extends CardImpl { @@ -41,11 +40,11 @@ public final class SpiritAway extends CardImpl { this.addAbility(ability); // You control enchanted creature. - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new ControlEnchantedEffect())); + this.addAbility(new SimpleStaticAbility(new ControlEnchantedEffect())); // Enchanted creature gets +2/+2 and has flying. - SimpleStaticAbility ability2 = new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEnchantedEffect(2, 2, Duration.WhileOnBattlefield)); - ability2.addEffect(new GainAbilityAttachedEffect(FlyingAbility.getInstance(), AttachmentType.AURA)); + SimpleStaticAbility ability2 = new SimpleStaticAbility(new BoostEnchantedEffect(2, 2, Duration.WhileOnBattlefield)); + ability2.addEffect(new GainAbilityAttachedEffect(FlyingAbility.getInstance(), AttachmentType.AURA).setText("and has flying")); this.addAbility(ability2); } diff --git a/Mage.Sets/src/mage/cards/s/SpyNetwork.java b/Mage.Sets/src/mage/cards/s/SpyNetwork.java index 4be5d8353fd..03ad1e60c11 100644 --- a/Mage.Sets/src/mage/cards/s/SpyNetwork.java +++ b/Mage.Sets/src/mage/cards/s/SpyNetwork.java @@ -33,7 +33,7 @@ public final class SpyNetwork extends CardImpl { // Look at target player's hand, the top card of that player's library, and any face-down creatures they control. Look at the top four cards of your library, then put them back in any order. this.getSpellAbility().addEffect(new SpyNetworkLookAtTargetPlayerHandEffect()); - this.getSpellAbility().addEffect(new LookLibraryTopCardTargetPlayerEffect().setText(" the top card of that player's library")); + this.getSpellAbility().addEffect(new LookLibraryTopCardTargetPlayerEffect().setText(" the top card of that player's library,")); this.getSpellAbility().addEffect(new SpyNetworkFaceDownEffect()); this.getSpellAbility().addEffect(new LookLibraryControllerEffect(4)); this.getSpellAbility().addTarget(new TargetPlayer()); diff --git a/Mage.Sets/src/mage/cards/s/Subdue.java b/Mage.Sets/src/mage/cards/s/Subdue.java index d66fd744b83..7c8364d3d70 100644 --- a/Mage.Sets/src/mage/cards/s/Subdue.java +++ b/Mage.Sets/src/mage/cards/s/Subdue.java @@ -22,7 +22,8 @@ public final class Subdue extends CardImpl { // Prevent all combat damage that would be dealt by target creature this turn. That creature gets +0/+X until end of turn, where X is its converted mana cost. this.getSpellAbility().addTarget(new TargetCreaturePermanent()); - this.getSpellAbility().addEffect(new PreventDamageByTargetEffect(Duration.EndOfTurn, true)); + this.getSpellAbility().addEffect(new PreventDamageByTargetEffect(Duration.EndOfTurn, true) + .setText("prevent all combat damage that would be dealt by target creature this turn")); this.getSpellAbility().addEffect(new BoostTargetEffect(StaticValue.get(0), TargetManaValue.instance, Duration.EndOfTurn) .setText("That creature gets +0/+X until end of turn, where X is its mana value")); } diff --git a/Mage.Sets/src/mage/cards/t/ThranPowerSuit.java b/Mage.Sets/src/mage/cards/t/ThranPowerSuit.java index 9b1e79e1b04..1522f930017 100644 --- a/Mage.Sets/src/mage/cards/t/ThranPowerSuit.java +++ b/Mage.Sets/src/mage/cards/t/ThranPowerSuit.java @@ -36,7 +36,7 @@ public final class ThranPowerSuit extends CardImpl { )); ability.addEffect(new GainAbilityAttachedEffect(new WardAbility( new GenericManaCost(2), false - ), AttachmentType.EQUIPMENT).setText("and has ward {2} (Whenever equipped creature becomes the target of a spell or ability an opponent controls, counter it unless that player pays {2}.)")); + ), AttachmentType.EQUIPMENT).setText("and has ward {2}. (Whenever equipped creature becomes the target of a spell or ability an opponent controls, counter it unless that player pays {2}.)")); this.addAbility(ability); // Equip {2} diff --git a/Mage.Sets/src/mage/cards/t/TithebearerGiant.java b/Mage.Sets/src/mage/cards/t/TithebearerGiant.java index b3ba27a062d..b595d69af8c 100644 --- a/Mage.Sets/src/mage/cards/t/TithebearerGiant.java +++ b/Mage.Sets/src/mage/cards/t/TithebearerGiant.java @@ -27,7 +27,7 @@ public final class TithebearerGiant extends CardImpl { // When Tithebearer Giant enters the battlefield, you draw a card and you lose 1 life. Ability ability = new EntersBattlefieldTriggeredAbility( - new DrawCardSourceControllerEffect(1), false + new DrawCardSourceControllerEffect(1, "you"), false ); ability.addEffect(new LoseLifeSourceControllerEffect(1).concatBy("and")); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/cards/t/TreetopDefense.java b/Mage.Sets/src/mage/cards/t/TreetopDefense.java index 0dd06d490c7..8c23a2e0181 100644 --- a/Mage.Sets/src/mage/cards/t/TreetopDefense.java +++ b/Mage.Sets/src/mage/cards/t/TreetopDefense.java @@ -13,6 +13,7 @@ import mage.constants.CardType; import mage.constants.Duration; import mage.constants.PhaseStep; import mage.constants.TurnPhase; +import mage.filter.StaticFilters; import mage.watchers.common.PlayerAttackedStepWatcher; /** @@ -33,7 +34,7 @@ public final class TreetopDefense extends CardImpl { this.addAbility(ability); // Creatures you control gain reach until end of turn. - this.getSpellAbility().addEffect(new GainAbilityControlledEffect(ReachAbility.getInstance(), Duration.EndOfTurn)); + this.getSpellAbility().addEffect(new GainAbilityControlledEffect(ReachAbility.getInstance(), Duration.EndOfTurn, StaticFilters.FILTER_PERMANENT_CREATURES)); } private TreetopDefense(final TreetopDefense card) { diff --git a/Mage.Sets/src/mage/cards/v/Vertigo.java b/Mage.Sets/src/mage/cards/v/Vertigo.java index 87c02057b0e..37d06241451 100644 --- a/Mage.Sets/src/mage/cards/v/Vertigo.java +++ b/Mage.Sets/src/mage/cards/v/Vertigo.java @@ -31,7 +31,8 @@ public final class Vertigo extends CardImpl { // Vertigo deals 2 damage to target creature with flying. That creature loses flying until end of turn. this.getSpellAbility().addEffect(new DamageTargetEffect(2)); - this.getSpellAbility().addEffect(new LoseAbilityTargetEffect(FlyingAbility.getInstance(), Duration.EndOfTurn)); + this.getSpellAbility().addEffect(new LoseAbilityTargetEffect(FlyingAbility.getInstance(), Duration.EndOfTurn) + .setText("That creature loses flying until end of turn")); this.getSpellAbility().addTarget(new TargetCreaturePermanent(filter)); } diff --git a/Mage.Sets/src/mage/cards/w/WaveElemental.java b/Mage.Sets/src/mage/cards/w/WaveElemental.java index 6d99291d93d..45d4f6c1ad7 100644 --- a/Mage.Sets/src/mage/cards/w/WaveElemental.java +++ b/Mage.Sets/src/mage/cards/w/WaveElemental.java @@ -42,7 +42,7 @@ public final class WaveElemental extends CardImpl { Ability ability = new SimpleActivatedAbility(new TapTargetEffect(), new ManaCostsImpl<>("{U}")); ability.addCost(new TapSourceCost()); ability.addCost(new SacrificeSourceCost()); - ability.addTarget(new TargetPermanent(0, 4, filter, false)); + ability.addTarget(new TargetPermanent(0, 3, filter, false)); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/w/WeaverOfLies.java b/Mage.Sets/src/mage/cards/w/WeaverOfLies.java index bb95c0b7c36..804ee6924b4 100644 --- a/Mage.Sets/src/mage/cards/w/WeaverOfLies.java +++ b/Mage.Sets/src/mage/cards/w/WeaverOfLies.java @@ -67,7 +67,7 @@ class WeaverOfLiesEffect extends OneShotEffect { WeaverOfLiesEffect() { super(Outcome.Benefit); - this.staticText = "turn any number of target creatures with a morph ability other than {this} face down"; + this.staticText = "turn any number of target creatures with morph abilities other than {this} face down"; } WeaverOfLiesEffect(final WeaverOfLiesEffect effect) { diff --git a/Mage.Sets/src/mage/cards/y/YusriFortunesFlame.java b/Mage.Sets/src/mage/cards/y/YusriFortunesFlame.java index d2ef7227aab..84fe2942424 100644 --- a/Mage.Sets/src/mage/cards/y/YusriFortunesFlame.java +++ b/Mage.Sets/src/mage/cards/y/YusriFortunesFlame.java @@ -50,7 +50,7 @@ class YusriFortunesFlameEffect extends OneShotEffect { YusriFortunesFlameEffect() { super(Outcome.Benefit); staticText = "choose a number between 1 and 5. Flip that many coins. For each flip you win, draw a card. " + - "For each flip you lose, {this} deals 2 damage to you. You you won five flips this way, " + + "For each flip you lose, {this} deals 2 damage to you. If you won five flips this way, " + "you may cast spells from your hand this turn without paying their mana costs"; } diff --git a/Mage.Sets/src/mage/cards/z/ZirilanOfTheClaw.java b/Mage.Sets/src/mage/cards/z/ZirilanOfTheClaw.java index 27a4039d40b..b3c90eb9b35 100644 --- a/Mage.Sets/src/mage/cards/z/ZirilanOfTheClaw.java +++ b/Mage.Sets/src/mage/cards/z/ZirilanOfTheClaw.java @@ -59,7 +59,7 @@ class ZirilanOfTheClawEffect extends OneShotEffect { public ZirilanOfTheClawEffect() { super(Outcome.PutCreatureInPlay); - this.staticText = "Search your library for a Dragon permanent card and put that card onto the battlefield. Then shuffle." + this.staticText = "Search your library for a Dragon permanent card, put that card onto the battlefield, then shuffle." + " That Dragon gains haste until end of turn. Exile it at the beginning of the next end step"; } diff --git a/Mage.Sets/src/mage/cards/z/ZursWeirding.java b/Mage.Sets/src/mage/cards/z/ZursWeirding.java index 9b0b35c5ee0..3a922790a38 100644 --- a/Mage.Sets/src/mage/cards/z/ZursWeirding.java +++ b/Mage.Sets/src/mage/cards/z/ZursWeirding.java @@ -46,7 +46,7 @@ class ZursWeirdingReplacementEffect extends ReplacementEffectImpl { ZursWeirdingReplacementEffect() { super(Duration.WhileOnBattlefield, Outcome.Neutral); - this.staticText = "If a player would draw a card, they reveal it instead." + + this.staticText = "If a player would draw a card, they reveal it instead. " + "Then any other player may pay 2 life. If a player does, " + "put that card into its owner's graveyard. Otherwise, that player draws a card."; } diff --git a/Mage/src/main/java/mage/abilities/effects/common/LookAtTargetPlayerHandEffect.java b/Mage/src/main/java/mage/abilities/effects/common/LookAtTargetPlayerHandEffect.java index 6d3e191da93..ccc21d321ef 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/LookAtTargetPlayerHandEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/LookAtTargetPlayerHandEffect.java @@ -16,7 +16,7 @@ public class LookAtTargetPlayerHandEffect extends OneShotEffect { public LookAtTargetPlayerHandEffect() { super(Outcome.Benefit); - this.staticText = "Look at target player's hand"; + this.staticText = "look at target player's hand"; } public LookAtTargetPlayerHandEffect(final LookAtTargetPlayerHandEffect effect) { diff --git a/Mage/src/main/java/mage/abilities/effects/common/TurnFaceUpTargetEffect.java b/Mage/src/main/java/mage/abilities/effects/common/TurnFaceUpTargetEffect.java index 1a7bf8c0ef7..10527902be5 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/TurnFaceUpTargetEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/TurnFaceUpTargetEffect.java @@ -41,6 +41,6 @@ public class TurnFaceUpTargetEffect extends OneShotEffect { @Override public String getText(Mode mode) { - return "turn target " + mode.getTargets().get(0).getTargetName() + " face-up"; + return "turn target " + mode.getTargets().get(0).getTargetName() + " face up"; } } diff --git a/Mage/src/main/java/mage/abilities/effects/common/combat/CantBeBlockedByCreaturesAllEffect.java b/Mage/src/main/java/mage/abilities/effects/common/combat/CantBeBlockedByCreaturesAllEffect.java index ca807c9fe84..74276fd0be0 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/combat/CantBeBlockedByCreaturesAllEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/combat/CantBeBlockedByCreaturesAllEffect.java @@ -20,6 +20,7 @@ public class CantBeBlockedByCreaturesAllEffect extends RestrictionEffect { this.filterCreatures = filterCreatures; this.filterBlockedBy = filterBlockedBy; staticText = filterCreatures.getMessage() + " can't be blocked " + + (duration == Duration.EndOfTurn ? "this turn " : "") + (filterBlockedBy.getMessage().startsWith("except by") ? "" : "by ") + filterBlockedBy.getMessage(); } diff --git a/Mage/src/main/java/mage/abilities/effects/common/continuous/GainAbilityControlledEffect.java b/Mage/src/main/java/mage/abilities/effects/common/continuous/GainAbilityControlledEffect.java index e7208691fa0..4f044a6bf59 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/continuous/GainAbilityControlledEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/continuous/GainAbilityControlledEffect.java @@ -121,7 +121,7 @@ public class GainAbilityControlledEffect extends ContinuousEffectImpl { private void setText() { StringBuilder sb = new StringBuilder(); if (excludeSource) { - sb.append("Other "); + sb.append("other "); } String gainedAbility = ability.getRule(); sb.append(filter.getMessage()).append(" you control "); diff --git a/Mage/src/main/java/mage/abilities/effects/common/continuous/GainAbilitySourceEffect.java b/Mage/src/main/java/mage/abilities/effects/common/continuous/GainAbilitySourceEffect.java index 2a6aeb22d7c..848288e02e0 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/continuous/GainAbilitySourceEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/continuous/GainAbilitySourceEffect.java @@ -35,7 +35,8 @@ public class GainAbilitySourceEffect extends ContinuousEffectImpl { public GainAbilitySourceEffect(Ability ability, Duration duration, boolean onCard) { this(ability, duration, onCard, false); - staticText = "{this} gains " + ability.getRule() + ' ' + duration.toString(); + staticText = "{this} gains " + ability.getRule() + + (duration.toString().isEmpty() ? "" : ' ' + duration.toString()); } public GainAbilitySourceEffect(Ability ability, Duration duration, boolean onCard, boolean noStaticText) {