diff --git a/Mage.Sets/src/mage/cards/a/AbsoluteGrace.java b/Mage.Sets/src/mage/cards/a/AbsoluteGrace.java index d20fcb1c779..2693f6a4b3f 100644 --- a/Mage.Sets/src/mage/cards/a/AbsoluteGrace.java +++ b/Mage.Sets/src/mage/cards/a/AbsoluteGrace.java @@ -10,7 +10,6 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Duration; -import mage.constants.Zone; import mage.filter.StaticFilters; /** @@ -24,7 +23,8 @@ public final class AbsoluteGrace extends CardImpl { // All creatures have protection from black. Ability ability = ProtectionAbility.from(ObjectColor.BLACK); - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAllEffect(ability, Duration.WhileOnBattlefield, StaticFilters.FILTER_PERMANENT_CREATURES, false))); + this.addAbility(new SimpleStaticAbility(new GainAbilityAllEffect(ability, Duration.WhileOnBattlefield, + StaticFilters.FILTER_PERMANENT_ALL_CREATURES, false))); } private AbsoluteGrace(final AbsoluteGrace card) { diff --git a/Mage.Sets/src/mage/cards/a/AbsoluteLaw.java b/Mage.Sets/src/mage/cards/a/AbsoluteLaw.java index 49fde70a207..0d46ab1fb32 100644 --- a/Mage.Sets/src/mage/cards/a/AbsoluteLaw.java +++ b/Mage.Sets/src/mage/cards/a/AbsoluteLaw.java @@ -1,4 +1,3 @@ - package mage.cards.a; import java.util.UUID; @@ -11,7 +10,6 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Duration; -import mage.constants.Zone; import mage.filter.StaticFilters; /** @@ -24,7 +22,8 @@ public final class AbsoluteLaw extends CardImpl { super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{W}"); Ability ability = ProtectionAbility.from(ObjectColor.RED); - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAllEffect(ability, Duration.WhileOnBattlefield, StaticFilters.FILTER_PERMANENT_CREATURES, false))); + this.addAbility(new SimpleStaticAbility(new GainAbilityAllEffect(ability, Duration.WhileOnBattlefield, + StaticFilters.FILTER_PERMANENT_ALL_CREATURES, false))); } private AbsoluteLaw(final AbsoluteLaw card) { diff --git a/Mage.Sets/src/mage/cards/a/AeonEngine.java b/Mage.Sets/src/mage/cards/a/AeonEngine.java index a59e0bfb2fe..75cf735f88d 100644 --- a/Mage.Sets/src/mage/cards/a/AeonEngine.java +++ b/Mage.Sets/src/mage/cards/a/AeonEngine.java @@ -1,36 +1,34 @@ - package mage.cards.a; -import java.util.UUID; import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldTappedAbility; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.common.ExileSourceCost; import mage.abilities.costs.common.TapSourceCost; import mage.abilities.effects.OneShotEffect; -import mage.cards.*; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Outcome; import mage.constants.Zone; import mage.game.Game; -import mage.game.GameState; -import mage.players.PlayerList; + +import java.util.UUID; /** - * * @author azra1l */ public final class AeonEngine extends CardImpl { public AeonEngine(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT},"{5}"); - + super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{5}"); + // Aeon Engine enters the battlefield tapped. this.addAbility(new EntersBattlefieldTappedAbility()); // {T}, Exile Aeon Engine: Reverse the game’s turn order. (For example, if play had proceeded clockwise around the table, it now goes counterclockwise.) - Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new AeonEngineEffect(), new TapSourceCost()); + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new AeonEngineEffect(), new TapSourceCost()); ability.addCost(new ExileSourceCost()); - this.addAbility(ability); + this.addAbility(ability); } private AeonEngine(final AeonEngine card) { @@ -44,9 +42,10 @@ public final class AeonEngine extends CardImpl { } class AeonEngineEffect extends OneShotEffect { - public AeonEngineEffect() { + + AeonEngineEffect() { super(Outcome.Benefit); - this.staticText = "Reverse the game turn order."; + this.staticText = "Reverse the game's turn order."; } private AeonEngineEffect(final AeonEngineEffect effect) { @@ -60,6 +59,6 @@ class AeonEngineEffect extends OneShotEffect { public boolean apply(Game game, Ability source) { game.getState().setReverseTurnOrder(true); return true; - + } -} \ No newline at end of file +} diff --git a/Mage.Sets/src/mage/cards/a/ArcaneSpyglass.java b/Mage.Sets/src/mage/cards/a/ArcaneSpyglass.java index 96b39529e66..5eb9a3f7087 100644 --- a/Mage.Sets/src/mage/cards/a/ArcaneSpyglass.java +++ b/Mage.Sets/src/mage/cards/a/ArcaneSpyglass.java @@ -35,7 +35,7 @@ public final class ArcaneSpyglass extends CardImpl { Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DrawCardSourceControllerEffect(1), new GenericManaCost(2)); ability.addCost(new TapSourceCost()); ability.addCost(new SacrificeTargetCost(new TargetControlledPermanent(filter))); - ability.addEffect(new AddCountersSourceEffect(CounterType.CHARGE.createInstance())); + ability.addEffect(new AddCountersSourceEffect(CounterType.CHARGE.createInstance()).concatBy("and")); this.addAbility(ability); // Remove three charge counters from Arcane Spyglass: Draw a card. diff --git a/Mage.Sets/src/mage/cards/a/Attunement.java b/Mage.Sets/src/mage/cards/a/Attunement.java index d1109cfa271..131a9d56ccf 100644 --- a/Mage.Sets/src/mage/cards/a/Attunement.java +++ b/Mage.Sets/src/mage/cards/a/Attunement.java @@ -1,4 +1,3 @@ - package mage.cards.a; import java.util.UUID; @@ -20,10 +19,9 @@ public final class Attunement extends CardImpl { public Attunement(UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{2}{U}"); - // Return Attunement to its owner's hand: Draw three cards, then discard four cards. SimpleActivatedAbility ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DrawCardSourceControllerEffect(3), new ReturnToHandFromBattlefieldSourceCost()); - ability.addEffect(new DiscardControllerEffect(4)); + ability.addEffect(new DiscardControllerEffect(4).concatBy(", then")); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/a/AvacynianMissionaries.java b/Mage.Sets/src/mage/cards/a/AvacynianMissionaries.java index a9469350d33..2766420d5dc 100644 --- a/Mage.Sets/src/mage/cards/a/AvacynianMissionaries.java +++ b/Mage.Sets/src/mage/cards/a/AvacynianMissionaries.java @@ -1,4 +1,3 @@ - package mage.cards.a; import java.util.UUID; @@ -31,7 +30,8 @@ public final class AvacynianMissionaries extends CardImpl { // At the beginning of your end step, if Avacynian Missionaries is equipped, transform it. this.addAbility(new TransformAbility()); - this.addAbility(new BeginningOfEndStepTriggeredAbility(Zone.BATTLEFIELD, new TransformSourceEffect(), TargetController.YOU, EquippedSourceCondition.instance, false)); + this.addAbility(new BeginningOfEndStepTriggeredAbility(Zone.BATTLEFIELD, new TransformSourceEffect().setText("transform it"), + TargetController.YOU, EquippedSourceCondition.instance, false)); } diff --git a/Mage.Sets/src/mage/cards/b/BarrinMasterWizard.java b/Mage.Sets/src/mage/cards/b/BarrinMasterWizard.java index fc31a7f4c84..75de5a07070 100644 --- a/Mage.Sets/src/mage/cards/b/BarrinMasterWizard.java +++ b/Mage.Sets/src/mage/cards/b/BarrinMasterWizard.java @@ -1,4 +1,3 @@ - package mage.cards.b; import mage.MageInt; @@ -12,8 +11,7 @@ import mage.constants.CardType; import mage.constants.SubType; import mage.constants.SuperType; import mage.constants.Zone; -import mage.filter.common.FilterControlledPermanent; -import mage.target.common.TargetControlledPermanent; +import mage.filter.StaticFilters; import mage.target.common.TargetCreaturePermanent; import java.util.UUID; @@ -34,7 +32,7 @@ public final class BarrinMasterWizard extends CardImpl { //{2}, Sacrifice a permanent: Return target creature to its owner's hand. SimpleActivatedAbility ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new ReturnToHandTargetEffect(), new ManaCostsImpl<>("{2}")); - ability.addCost(new SacrificeTargetCost(new TargetControlledPermanent(new FilterControlledPermanent()))); + ability.addCost(new SacrificeTargetCost(StaticFilters.FILTER_CONTROLLED_PERMANENT_SHORT_TEXT)); ability.addTarget(new TargetCreaturePermanent()); this.addAbility(ability); } @@ -47,4 +45,4 @@ public final class BarrinMasterWizard extends CardImpl { public BarrinMasterWizard copy() { return new BarrinMasterWizard(this); } -} \ No newline at end of file +} diff --git a/Mage.Sets/src/mage/cards/b/BlitzwingAdaptiveAssailant.java b/Mage.Sets/src/mage/cards/b/BlitzwingAdaptiveAssailant.java index 0285dff81ac..9e03ad141ea 100644 --- a/Mage.Sets/src/mage/cards/b/BlitzwingAdaptiveAssailant.java +++ b/Mage.Sets/src/mage/cards/b/BlitzwingAdaptiveAssailant.java @@ -38,7 +38,7 @@ public final class BlitzwingAdaptiveAssailant extends CardImpl { // At the beginning of combat on your turn, choose flying or indestructible at random. Blitzwing gains that ability until end of turn. this.addAbility(new BeginningOfCombatTriggeredAbility( - new BlitzwingCruelTormentorEffect(), TargetController.YOU, false + new BlitzwingAdaptiveAssailantEffect(), TargetController.YOU, false )); // Whenever Blitzwing deals combat damage to a player, convert it. diff --git a/Mage.Sets/src/mage/cards/b/Breach.java b/Mage.Sets/src/mage/cards/b/Breach.java index c96669eff8d..e6ba8c80c56 100644 --- a/Mage.Sets/src/mage/cards/b/Breach.java +++ b/Mage.Sets/src/mage/cards/b/Breach.java @@ -1,4 +1,3 @@ - package mage.cards.b; import java.util.UUID; @@ -20,10 +19,11 @@ public final class Breach extends CardImpl { public Breach(UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{2}{B}"); - // Target creature gets +2/+0 and gains fear until end of turn. - this.getSpellAbility().addEffect(new BoostTargetEffect(2, 0, Duration.EndOfTurn)); - this.getSpellAbility().addEffect(new GainAbilityTargetEffect(FearAbility.getInstance(), Duration.EndOfTurn)); + this.getSpellAbility().addEffect(new BoostTargetEffect(2, 0, Duration.EndOfTurn) + .setText("target creature gets +2/+0")); + this.getSpellAbility().addEffect(new GainAbilityTargetEffect(FearAbility.getInstance(), Duration.EndOfTurn) + .setText("and gains fear until end of turn")); this.getSpellAbility().addTarget(new TargetCreaturePermanent()); } diff --git a/Mage.Sets/src/mage/cards/b/Burnout.java b/Mage.Sets/src/mage/cards/b/Burnout.java index 1e6bb2089e6..51ad6ce1505 100644 --- a/Mage.Sets/src/mage/cards/b/Burnout.java +++ b/Mage.Sets/src/mage/cards/b/Burnout.java @@ -1,4 +1,3 @@ - package mage.cards.b; import java.util.UUID; @@ -41,7 +40,8 @@ public final class Burnout extends CardImpl { // Draw a card at the beginning of the next turn's upkeep. this.getSpellAbility().addEffect(new CreateDelayedTriggeredAbilityEffect( - new AtTheBeginOfNextUpkeepDelayedTriggeredAbility(new DrawCardSourceControllerEffect(1), Duration.OneUse), false)); + new AtTheBeginOfNextUpkeepDelayedTriggeredAbility(new DrawCardSourceControllerEffect(1), Duration.OneUse), false) + .concatBy("
")); } private Burnout(final Burnout card) { @@ -56,7 +56,7 @@ public final class Burnout extends CardImpl { class BurnoutCounterTargetEffect extends OneShotEffect { - public BurnoutCounterTargetEffect() { + BurnoutCounterTargetEffect() { super(Outcome.Detriment); } @@ -77,4 +77,4 @@ class BurnoutCounterTargetEffect extends OneShotEffect { } return true; } -} \ No newline at end of file +} diff --git a/Mage.Sets/src/mage/cards/c/CavalcadeOfCalamity.java b/Mage.Sets/src/mage/cards/c/CavalcadeOfCalamity.java index beeaeff6ebc..4a9c8dbb660 100644 --- a/Mage.Sets/src/mage/cards/c/CavalcadeOfCalamity.java +++ b/Mage.Sets/src/mage/cards/c/CavalcadeOfCalamity.java @@ -18,7 +18,7 @@ import java.util.UUID; public final class CavalcadeOfCalamity extends CardImpl { private static final FilterCreaturePermanent filter - = new FilterCreaturePermanent("creaure you control with power 1 or less"); + = new FilterCreaturePermanent("creature you control with power 1 or less"); static { filter.add(TargetController.YOU.getControllerPredicate()); @@ -68,4 +68,4 @@ class CavalcadeOfCalamityEffect extends OneShotEffect { source.getSourceId(), source, game, false, true ) > 0; } -} \ No newline at end of file +} diff --git a/Mage.Sets/src/mage/cards/c/Cindervines.java b/Mage.Sets/src/mage/cards/c/Cindervines.java index 528170c47e1..aa6108c9ea3 100644 --- a/Mage.Sets/src/mage/cards/c/Cindervines.java +++ b/Mage.Sets/src/mage/cards/c/Cindervines.java @@ -32,7 +32,7 @@ public final class Cindervines extends CardImpl { // Whenever an opponent casts a noncreature spell, Cindervines deals 1 damage to that player. this.addAbility(new SpellCastOpponentTriggeredAbility( Zone.BATTLEFIELD, new DamageTargetEffect(1, true, "that player"), - StaticFilters.FILTER_SPELL_NON_CREATURE, false, SetTargetPointer.PLAYER + StaticFilters.FILTER_SPELL_A_NON_CREATURE, false, SetTargetPointer.PLAYER )); // {1}, Sacrifice Cindervines: Destroy target artifact or enchantment. Cindervines deals 2 damage to that permanent's controller. @@ -85,4 +85,4 @@ class CindervinesEffect extends OneShotEffect { player.damage(2, source.getSourceId(), source, game); return true; } -} \ No newline at end of file +} diff --git a/Mage.Sets/src/mage/cards/c/ClawsOfGix.java b/Mage.Sets/src/mage/cards/c/ClawsOfGix.java index d07dc5b5bef..45d72b2ade5 100644 --- a/Mage.Sets/src/mage/cards/c/ClawsOfGix.java +++ b/Mage.Sets/src/mage/cards/c/ClawsOfGix.java @@ -1,4 +1,3 @@ - package mage.cards.c; import java.util.UUID; @@ -11,7 +10,7 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Zone; -import mage.target.common.TargetControlledPermanent; +import mage.filter.StaticFilters; /** * @@ -24,7 +23,7 @@ public final class ClawsOfGix extends CardImpl { //{1}, Sacrifice a permanent: You gain 1 life. Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new GainLifeEffect(1), new GenericManaCost(1)); - ability.addCost(new SacrificeTargetCost(new TargetControlledPermanent())); + ability.addCost(new SacrificeTargetCost(StaticFilters.FILTER_CONTROLLED_PERMANENT_SHORT_TEXT)); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/c/CliffsideRescuer.java b/Mage.Sets/src/mage/cards/c/CliffsideRescuer.java index 272e8e55263..bb8d4a89925 100644 --- a/Mage.Sets/src/mage/cards/c/CliffsideRescuer.java +++ b/Mage.Sets/src/mage/cards/c/CliffsideRescuer.java @@ -65,7 +65,7 @@ class CliffsideRescuerEffect extends OneShotEffect { CliffsideRescuerEffect() { super(Outcome.Benefit); - staticText = "Target permanent you control gets protection from each opponent until end of turn."; + staticText = "Target permanent you control gains protection from each of your opponents until end of turn."; } private CliffsideRescuerEffect(final CliffsideRescuerEffect effect) { diff --git a/Mage.Sets/src/mage/cards/c/CoastalBreach.java b/Mage.Sets/src/mage/cards/c/CoastalBreach.java index 417f6c24bfe..90f0d2942fb 100644 --- a/Mage.Sets/src/mage/cards/c/CoastalBreach.java +++ b/Mage.Sets/src/mage/cards/c/CoastalBreach.java @@ -1,4 +1,3 @@ - package mage.cards.c; import java.util.UUID; @@ -7,7 +6,7 @@ import mage.abilities.keyword.UndauntedAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.filter.common.FilterNonlandPermanent; +import mage.filter.StaticFilters; /** * @@ -21,7 +20,7 @@ public final class CoastalBreach extends CardImpl { // Undaunted this.addAbility(new UndauntedAbility()); // Return all nonland permanents to their owners' hands. - this.getSpellAbility().addEffect(new ReturnToHandFromBattlefieldAllEffect(new FilterNonlandPermanent())); + this.getSpellAbility().addEffect(new ReturnToHandFromBattlefieldAllEffect(StaticFilters.FILTER_PERMANENTS_NON_LAND)); } private CoastalBreach(final CoastalBreach card) { diff --git a/Mage.Sets/src/mage/cards/c/ContestedWarZone.java b/Mage.Sets/src/mage/cards/c/ContestedWarZone.java index 032cc8b63ed..46ba116011e 100644 --- a/Mage.Sets/src/mage/cards/c/ContestedWarZone.java +++ b/Mage.Sets/src/mage/cards/c/ContestedWarZone.java @@ -2,7 +2,6 @@ package mage.cards.c; import java.util.UUID; import mage.abilities.Ability; -import mage.abilities.Mode; import mage.abilities.TriggeredAbilityImpl; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.common.TapSourceCost; @@ -86,7 +85,7 @@ class ContestedWarZoneAbility extends TriggeredAbilityImpl { @Override public String getRule() { - return "Whenever a creature deals combat damage to you, that creature's controller gains control of {this}"; + return "Whenever a creature deals combat damage to you, that creature's controller gains control of {this}."; } } diff --git a/Mage.Sets/src/mage/cards/c/ConversionChamber.java b/Mage.Sets/src/mage/cards/c/ConversionChamber.java index 2664ecbd125..54805724d50 100644 --- a/Mage.Sets/src/mage/cards/c/ConversionChamber.java +++ b/Mage.Sets/src/mage/cards/c/ConversionChamber.java @@ -24,12 +24,14 @@ import java.util.UUID; */ public final class ConversionChamber extends CardImpl { + private static final FilterArtifactCard filter = new FilterArtifactCard("artifact card from a graveyard"); + public ConversionChamber(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{3}"); // {2}, {T}: Exile target artifact card from a graveyard. Put a charge counter on Conversion Chamber. Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new ExileTargetEffect(), new GenericManaCost(2)); ability.addEffect(new AddCountersSourceEffect(CounterType.CHARGE.createInstance())); - ability.addTarget(new TargetCardInGraveyard(new FilterArtifactCard("artifact card from a graveyard"))); + ability.addTarget(new TargetCardInGraveyard(filter)); ability.addCost(new TapSourceCost()); this.addAbility(ability); // {2}, {T}, Remove a charge counter from Conversion Chamber: Create a 3/3 colorless Golem artifact creature token. @@ -49,4 +51,4 @@ public final class ConversionChamber extends CardImpl { return new ConversionChamber(this); } -} \ No newline at end of file +} diff --git a/Mage.Sets/src/mage/cards/c/CorpseCur.java b/Mage.Sets/src/mage/cards/c/CorpseCur.java index 81d9a78caa7..c96e4dc8c5f 100644 --- a/Mage.Sets/src/mage/cards/c/CorpseCur.java +++ b/Mage.Sets/src/mage/cards/c/CorpseCur.java @@ -34,7 +34,7 @@ public final class CorpseCur extends CardImpl { this.power = new MageInt(2); this.toughness = new MageInt(2); this.addAbility(InfectAbility.getInstance()); - Ability ability = new EntersBattlefieldTriggeredAbility(new ReturnFromGraveyardToHandTargetEffect()); + Ability ability = new EntersBattlefieldTriggeredAbility(new ReturnFromGraveyardToHandTargetEffect(), true); ability.addTarget(new TargetCardInYourGraveyard(filter)); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/c/CurseOfBounty.java b/Mage.Sets/src/mage/cards/c/CurseOfBounty.java index 006f6836826..2530bf92a60 100644 --- a/Mage.Sets/src/mage/cards/c/CurseOfBounty.java +++ b/Mage.Sets/src/mage/cards/c/CurseOfBounty.java @@ -56,7 +56,7 @@ class CurseOfBountyEffect extends OneShotEffect { CurseOfBountyEffect() { super(Outcome.Benefit); - this.staticText = "untap all nonland permanents you control. Each opponent attacking that player does the same."; + this.staticText = "untap all nonland permanents you control. Each opponent attacking that player untaps all nonland permanents they control."; } private CurseOfBountyEffect(final CurseOfBountyEffect effect) { diff --git a/Mage.Sets/src/mage/cards/c/CurseOfVengeance.java b/Mage.Sets/src/mage/cards/c/CurseOfVengeance.java index 6dba85eb15b..2c141a0a71b 100644 --- a/Mage.Sets/src/mage/cards/c/CurseOfVengeance.java +++ b/Mage.Sets/src/mage/cards/c/CurseOfVengeance.java @@ -3,7 +3,6 @@ package mage.cards.c; import java.util.UUID; import mage.abilities.Ability; import mage.abilities.TriggeredAbilityImpl; -import mage.abilities.effects.Effect; import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.common.AttachEffect; import mage.abilities.effects.common.counter.AddCountersTargetEffect; @@ -17,7 +16,6 @@ import mage.constants.Zone; import mage.counters.CounterType; import mage.game.Game; import mage.game.events.GameEvent; -import mage.game.events.GameEvent.EventType; import mage.game.permanent.Permanent; import mage.game.stack.Spell; import mage.players.Player; @@ -59,14 +57,10 @@ public final class CurseOfVengeance extends CardImpl { class CurseOfVengeanceTriggeredAbility extends TriggeredAbilityImpl { - public CurseOfVengeanceTriggeredAbility() { + CurseOfVengeanceTriggeredAbility() { super(Zone.BATTLEFIELD, new AddCountersTargetEffect(CounterType.SPITE.createInstance(), Outcome.Detriment), false); } - public CurseOfVengeanceTriggeredAbility(Effect effect, boolean optional, String text) { - super(Zone.BATTLEFIELD, effect, optional); - } - private CurseOfVengeanceTriggeredAbility(final CurseOfVengeanceTriggeredAbility ability) { super(ability); } @@ -92,7 +86,7 @@ class CurseOfVengeanceTriggeredAbility extends TriggeredAbilityImpl { @Override public String getRule() { - return "Whenever enchanted player casts a spell, put a spite counter on {this}"; + return "Whenever enchanted player casts a spell, put a spite counter on {this}."; } @Override @@ -103,8 +97,9 @@ class CurseOfVengeanceTriggeredAbility extends TriggeredAbilityImpl { class CurseOfVengeancePlayerLosesTriggeredAbility extends TriggeredAbilityImpl { - public CurseOfVengeancePlayerLosesTriggeredAbility() { + CurseOfVengeancePlayerLosesTriggeredAbility() { super(Zone.BATTLEFIELD, new CurseOfVengeanceDrawLifeEffect(), false); + setTriggerPhrase("When enchanted player loses the game, "); } private CurseOfVengeancePlayerLosesTriggeredAbility(final CurseOfVengeancePlayerLosesTriggeredAbility ability) { @@ -127,16 +122,11 @@ class CurseOfVengeancePlayerLosesTriggeredAbility extends TriggeredAbilityImpl { return sourceObject != null && sourceObject.isAttachedTo(event.getPlayerId()); } - @Override - public String getRule() { - return "When enchanted player loses the game, you gain X life and " - + "draw X cards, where X is the number of spite counters on {this}"; - } } class CurseOfVengeanceDrawLifeEffect extends OneShotEffect { - public CurseOfVengeanceDrawLifeEffect() { + CurseOfVengeanceDrawLifeEffect() { super(Outcome.Benefit); staticText = "you gain X life and draw X cards, where X is the " + "number of spite counters on {this}"; diff --git a/Mage.Sets/src/mage/cards/d/DauthiWarlord.java b/Mage.Sets/src/mage/cards/d/DauthiWarlord.java index aab3b426928..4d6abc7340b 100644 --- a/Mage.Sets/src/mage/cards/d/DauthiWarlord.java +++ b/Mage.Sets/src/mage/cards/d/DauthiWarlord.java @@ -1,4 +1,3 @@ - package mage.cards.d; import java.util.UUID; @@ -23,7 +22,7 @@ import mage.filter.predicate.mageobject.AbilityPredicate; */ public final class DauthiWarlord extends CardImpl { - private static final FilterPermanent filter = new FilterCreaturePermanent("creatures with shadow"); + private static final FilterPermanent filter = new FilterCreaturePermanent("creatures with shadow on the battlefield"); static{ filter.add(new AbilityPredicate(ShadowAbility.class)); diff --git a/Mage.Sets/src/mage/cards/d/DenyTheWitch.java b/Mage.Sets/src/mage/cards/d/DenyTheWitch.java index d59d08818f5..e54075fc0b4 100644 --- a/Mage.Sets/src/mage/cards/d/DenyTheWitch.java +++ b/Mage.Sets/src/mage/cards/d/DenyTheWitch.java @@ -20,9 +20,10 @@ public final class DenyTheWitch extends CardImpl { super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{1}{W}{U}{B}"); // Counter target spell, activated ability, or triggered ability. Its controller loses life equal to the number of creatures you control. - this.getSpellAbility().addEffect(new CounterTargetEffect()); + this.getSpellAbility().addEffect(new CounterTargetEffect().setText("Counter target spell, activated ability, or triggered ability")); this.getSpellAbility().addTarget(new TargetStackObject()); - this.getSpellAbility().addEffect(new LoseLifeTargetControllerEffect(CreaturesYouControlCount.instance)); + this.getSpellAbility().addEffect(new LoseLifeTargetControllerEffect(CreaturesYouControlCount.instance) + .setText("Its controller loses life equal to the number of creatures you control")); this.getSpellAbility().addHint(CreaturesYouControlHint.instance); } diff --git a/Mage.Sets/src/mage/cards/e/EldraziObligator.java b/Mage.Sets/src/mage/cards/e/EldraziObligator.java index 0a53ee01637..9f96a410810 100644 --- a/Mage.Sets/src/mage/cards/e/EldraziObligator.java +++ b/Mage.Sets/src/mage/cards/e/EldraziObligator.java @@ -42,7 +42,7 @@ public final class EldraziObligator extends CardImpl { DoIfCostPaid costPaidEffect = new DoIfCostPaid(new GainControlTargetEffect(Duration.EndOfTurn), new ManaCostsImpl<>("{1}{C}")); Effect untapEffect = new UntapTargetEffect(); - untapEffect.setText("untap that creature,"); + untapEffect.setText(", untap that creature,"); Effect hasteEffect = new GainAbilityTargetEffect(HasteAbility.getInstance(), Duration.EndOfTurn); hasteEffect.setText("and it gains haste until end of turn"); costPaidEffect.addEffect(untapEffect); diff --git a/Mage.Sets/src/mage/cards/e/Enervate.java b/Mage.Sets/src/mage/cards/e/Enervate.java index b3b518aec5c..a8bffa78364 100644 --- a/Mage.Sets/src/mage/cards/e/Enervate.java +++ b/Mage.Sets/src/mage/cards/e/Enervate.java @@ -1,4 +1,3 @@ - package mage.cards.e; import java.util.UUID; @@ -36,7 +35,8 @@ public final class Enervate extends CardImpl { this.getSpellAbility().addTarget(new TargetPermanent(filter)); // Draw a card at the beginning of the next turn's upkeep. - this.getSpellAbility().addEffect(new CreateDelayedTriggeredAbilityEffect(new AtTheBeginOfNextUpkeepDelayedTriggeredAbility(new DrawCardSourceControllerEffect(1)), false)); + this.getSpellAbility().addEffect(new CreateDelayedTriggeredAbilityEffect(new AtTheBeginOfNextUpkeepDelayedTriggeredAbility( + new DrawCardSourceControllerEffect(1)), false).concatBy("
")); } private Enervate(final Enervate card) { diff --git a/Mage.Sets/src/mage/cards/e/EssenceFlux.java b/Mage.Sets/src/mage/cards/e/EssenceFlux.java index 52aa8f20ba3..f7d31cff633 100644 --- a/Mage.Sets/src/mage/cards/e/EssenceFlux.java +++ b/Mage.Sets/src/mage/cards/e/EssenceFlux.java @@ -48,7 +48,7 @@ class EssenceFluxEffect extends OneShotEffect { EssenceFluxEffect() { super(Outcome.Benefit); - staticText = "return that card to the battlefield under its owner's control. If it's a Spirit, put a +1/+1 counter on it"; + staticText = ", then return that card to the battlefield under its owner's control. If it's a Spirit, put a +1/+1 counter on it"; } private EssenceFluxEffect(final EssenceFluxEffect effect) { diff --git a/Mage.Sets/src/mage/cards/f/FatalGrudge.java b/Mage.Sets/src/mage/cards/f/FatalGrudge.java index 5a6e664fb82..7b4b3b05246 100644 --- a/Mage.Sets/src/mage/cards/f/FatalGrudge.java +++ b/Mage.Sets/src/mage/cards/f/FatalGrudge.java @@ -53,9 +53,9 @@ public final class FatalGrudge extends CardImpl { class FatalGrudgeEffect extends OneShotEffect { - public FatalGrudgeEffect() { + FatalGrudgeEffect() { super(Outcome.Sacrifice); - this.staticText = "each opponent chooses a permanent they control that shares a type with the sacrificed permanent and sacrifices it"; + this.staticText = "each opponent chooses a permanent they control that shares a card type with the sacrificed permanent and sacrifices it"; } private FatalGrudgeEffect(final FatalGrudgeEffect effect) { diff --git a/Mage.Sets/src/mage/cards/f/FearsomeTemper.java b/Mage.Sets/src/mage/cards/f/FearsomeTemper.java index 48b8c7ae65c..753989475a9 100644 --- a/Mage.Sets/src/mage/cards/f/FearsomeTemper.java +++ b/Mage.Sets/src/mage/cards/f/FearsomeTemper.java @@ -43,7 +43,7 @@ public final class FearsomeTemper extends CardImpl { Ability grantedAbility = new SimpleActivatedAbility(Zone.BATTLEFIELD, new CantBeBlockedByTargetSourceEffect(Duration.EndOfTurn), new ManaCostsImpl<>("{2}{R}")); grantedAbility.addTarget(new TargetCreaturePermanent()); effect = new GainAbilityAttachedEffect(grantedAbility, AttachmentType.AURA, Duration.WhileOnBattlefield); - effect.setText("and has \"{2}{R}: Target creature can't block this creature this turn"); + effect.setText("and has \"{2}{R}: Target creature can't block this creature this turn.\""); ability.addEffect(effect); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/cards/f/FeralInstinct.java b/Mage.Sets/src/mage/cards/f/FeralInstinct.java index d7d20edb2a4..73cb1cc441d 100644 --- a/Mage.Sets/src/mage/cards/f/FeralInstinct.java +++ b/Mage.Sets/src/mage/cards/f/FeralInstinct.java @@ -27,7 +27,8 @@ public final class FeralInstinct extends CardImpl { // Draw a card at the beginning of the next turn's upkeep. this.getSpellAbility().addEffect(new CreateDelayedTriggeredAbilityEffect( - new AtTheBeginOfNextUpkeepDelayedTriggeredAbility(new DrawCardSourceControllerEffect(1), Duration.OneUse), false)); + new AtTheBeginOfNextUpkeepDelayedTriggeredAbility(new DrawCardSourceControllerEffect(1), Duration.OneUse), false) + .concatBy("
")); } private FeralInstinct(final FeralInstinct card) { diff --git a/Mage.Sets/src/mage/cards/f/FeveredStrength.java b/Mage.Sets/src/mage/cards/f/FeveredStrength.java index e5e68ae5028..4cdde064e9d 100644 --- a/Mage.Sets/src/mage/cards/f/FeveredStrength.java +++ b/Mage.Sets/src/mage/cards/f/FeveredStrength.java @@ -27,7 +27,8 @@ public final class FeveredStrength extends CardImpl { // Draw a card at the beginning of the next turn's upkeep. this.getSpellAbility().addEffect(new CreateDelayedTriggeredAbilityEffect( - new AtTheBeginOfNextUpkeepDelayedTriggeredAbility(new DrawCardSourceControllerEffect(1), Duration.OneUse), false)); + new AtTheBeginOfNextUpkeepDelayedTriggeredAbility(new DrawCardSourceControllerEffect(1), Duration.OneUse), false) + .concatBy("
")); } private FeveredStrength(final FeveredStrength card) { diff --git a/Mage.Sets/src/mage/cards/f/Foreshadow.java b/Mage.Sets/src/mage/cards/f/Foreshadow.java index 35dcf95384d..de4715602ab 100644 --- a/Mage.Sets/src/mage/cards/f/Foreshadow.java +++ b/Mage.Sets/src/mage/cards/f/Foreshadow.java @@ -28,12 +28,13 @@ public final class Foreshadow extends CardImpl { // Choose a card name, then target opponent puts the top card of their library into their graveyard. If that card has the chosen name, you draw a card. this.getSpellAbility().addEffect(new ChooseACardNameEffect(ChooseACardNameEffect.TypeOfName.ALL)); - this.getSpellAbility().addEffect(new ForeshadowEffect().concatBy("then")); + this.getSpellAbility().addEffect(new ForeshadowEffect().concatBy(", then")); this.getSpellAbility().addTarget(new TargetOpponent()); // Draw a card at the beginning of the next turn's upkeep. this.getSpellAbility().addEffect(new CreateDelayedTriggeredAbilityEffect( - new AtTheBeginOfNextUpkeepDelayedTriggeredAbility(new DrawCardSourceControllerEffect(1)), false)); + new AtTheBeginOfNextUpkeepDelayedTriggeredAbility(new DrawCardSourceControllerEffect(1)), false) + .concatBy("
")); } private Foreshadow(final Foreshadow card) { @@ -50,7 +51,7 @@ class ForeshadowEffect extends OneShotEffect { ForeshadowEffect() { super(Outcome.DrawCard); - this.staticText = "target opponent mills a card. If that card has the chosen name, you draw a card"; + this.staticText = "target opponent mills a card. If a card with the chosen name was milled this way, you draw a card"; } private ForeshadowEffect(final ForeshadowEffect effect) { diff --git a/Mage.Sets/src/mage/cards/f/Frostling.java b/Mage.Sets/src/mage/cards/f/Frostling.java index 303ec40d594..0127f7151ee 100644 --- a/Mage.Sets/src/mage/cards/f/Frostling.java +++ b/Mage.Sets/src/mage/cards/f/Frostling.java @@ -27,7 +27,7 @@ public final class Frostling extends CardImpl { this.power = new MageInt(1); this.toughness = new MageInt(1); // Sacrifice Frostling: Frostling deals 1 damage to target creature. - Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(1), new SacrificeSourceCost()); + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(1, "it"), new SacrificeSourceCost()); ability.addTarget(new TargetCreaturePermanent()); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/g/GhostLitRaider.java b/Mage.Sets/src/mage/cards/g/GhostLitRaider.java index 8f281cb23c5..1f4b8146b4e 100644 --- a/Mage.Sets/src/mage/cards/g/GhostLitRaider.java +++ b/Mage.Sets/src/mage/cards/g/GhostLitRaider.java @@ -35,7 +35,7 @@ public final class GhostLitRaider extends CardImpl { ability.addTarget(new TargetCreaturePermanent()); this.addAbility(ability); // Channel - {3}{R}, Discard Ghost-Lit Raider: Ghost-Lit Raider deals 4 damage to target creature. - Ability ability2 = new ChannelAbility("{3}{R}", new DamageTargetEffect(4)); + Ability ability2 = new ChannelAbility("{3}{R}", new DamageTargetEffect(4, "it")); ability2.addTarget(new TargetCreaturePermanent()); this.addAbility(ability2); } diff --git a/Mage.Sets/src/mage/cards/g/GiftOfDoom.java b/Mage.Sets/src/mage/cards/g/GiftOfDoom.java index 27457bf2633..88cbb8d7304 100644 --- a/Mage.Sets/src/mage/cards/g/GiftOfDoom.java +++ b/Mage.Sets/src/mage/cards/g/GiftOfDoom.java @@ -85,7 +85,7 @@ class GiftOfDoomEffect extends OneShotEffect { GiftOfDoomEffect() { super(Outcome.Benefit); - staticText = "attach it to a creature"; + staticText = "you may attach it to a creature"; } private GiftOfDoomEffect(final GiftOfDoomEffect effect) { diff --git a/Mage.Sets/src/mage/cards/g/GloriousEnd.java b/Mage.Sets/src/mage/cards/g/GloriousEnd.java index f9c0b2c19ba..f291f0f90e1 100644 --- a/Mage.Sets/src/mage/cards/g/GloriousEnd.java +++ b/Mage.Sets/src/mage/cards/g/GloriousEnd.java @@ -1,4 +1,3 @@ - package mage.cards.g; import java.util.UUID; @@ -25,7 +24,8 @@ public final class GloriousEnd extends CardImpl { // At the beginning of your next end step, you lose the game. getSpellAbility().addEffect(new CreateDelayedTriggeredAbilityEffect( - new AtTheBeginOfNextEndStepDelayedTriggeredAbility(new LoseGameSourceControllerEffect(), TargetController.YOU))); + new AtTheBeginOfNextEndStepDelayedTriggeredAbility(new LoseGameSourceControllerEffect(), TargetController.YOU)) + .concatBy("
")); } private GloriousEnd(final GloriousEnd card) { diff --git a/Mage.Sets/src/mage/cards/g/GoblinWizard.java b/Mage.Sets/src/mage/cards/g/GoblinWizard.java index 5b724132be0..9517b2d5dbc 100644 --- a/Mage.Sets/src/mage/cards/g/GoblinWizard.java +++ b/Mage.Sets/src/mage/cards/g/GoblinWizard.java @@ -1,4 +1,3 @@ - package mage.cards.g; import java.util.UUID; @@ -25,12 +24,11 @@ import mage.target.TargetPermanent; */ public final class GoblinWizard extends CardImpl { - private static final FilterPermanentCard filter = new FilterPermanentCard("Goblin"); - private static final FilterPermanent goblinPermanent = new FilterPermanent("Goblin"); + private static final FilterPermanentCard filterCard = new FilterPermanentCard("a Goblin permanent card"); + private static final FilterPermanent filter2 = new FilterPermanent(SubType.GOBLIN, "Goblin"); static { - filter.add(SubType.GOBLIN.getPredicate()); - goblinPermanent.add(SubType.GOBLIN.getPredicate()); + filterCard.add(SubType.GOBLIN.getPredicate()); } public GoblinWizard(UUID ownerId, CardSetInfo setInfo) { @@ -45,13 +43,13 @@ public final class GoblinWizard extends CardImpl { // {tap}: You may put a Goblin permanent card from your hand onto the battlefield. this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, - new PutCardFromHandOntoBattlefieldEffect(filter), + new PutCardFromHandOntoBattlefieldEffect(filterCard), new TapSourceCost())); // {R}: Target Goblin gains protection from white until end of turn. Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new GainAbilityTargetEffect(ProtectionAbility.from(ObjectColor.WHITE), Duration.EndOfTurn), new ManaCostsImpl<>("{R}")); - Target target = new TargetPermanent(goblinPermanent); + Target target = new TargetPermanent(filter2); ability.addTarget(target); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/cards/g/GorillaWarCry.java b/Mage.Sets/src/mage/cards/g/GorillaWarCry.java index 4989119b7ee..5ba98a6cb4c 100644 --- a/Mage.Sets/src/mage/cards/g/GorillaWarCry.java +++ b/Mage.Sets/src/mage/cards/g/GorillaWarCry.java @@ -1,4 +1,3 @@ - package mage.cards.g; import java.util.UUID; @@ -35,7 +34,8 @@ public final class GorillaWarCry extends CardImpl { this.getSpellAbility().addEffect(effect); // Draw a card at the beginning of the next turn's upkeep. - this.getSpellAbility().addEffect(new CreateDelayedTriggeredAbilityEffect(new AtTheBeginOfNextUpkeepDelayedTriggeredAbility(new DrawCardSourceControllerEffect(1)), false)); + this.getSpellAbility().addEffect(new CreateDelayedTriggeredAbilityEffect(new AtTheBeginOfNextUpkeepDelayedTriggeredAbility( + new DrawCardSourceControllerEffect(1)), false).concatBy("
")); } private GorillaWarCry(final GorillaWarCry card) { diff --git a/Mage.Sets/src/mage/cards/g/GrandArchitect.java b/Mage.Sets/src/mage/cards/g/GrandArchitect.java index 65c6310892e..a998ee5781c 100644 --- a/Mage.Sets/src/mage/cards/g/GrandArchitect.java +++ b/Mage.Sets/src/mage/cards/g/GrandArchitect.java @@ -15,6 +15,7 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.*; import mage.filter.FilterPermanent; +import mage.filter.StaticFilters; import mage.filter.common.FilterControlledCreaturePermanent; import mage.filter.common.FilterCreaturePermanent; import mage.filter.predicate.mageobject.ColorPredicate; @@ -32,11 +33,12 @@ import java.util.UUID; public final class GrandArchitect extends CardImpl { private static final FilterCreaturePermanent boostFilter = new FilterCreaturePermanent("blue creatures"); - private static final FilterCreaturePermanent targetFilter = new FilterCreaturePermanent("artifact creature"); + private static final FilterControlledCreaturePermanent tapFilter = new FilterControlledCreaturePermanent("untapped blue creature you control"); static { boostFilter.add(new ColorPredicate(ObjectColor.BLUE)); - targetFilter.add(CardType.ARTIFACT.getPredicate()); + tapFilter.add(new ColorPredicate(ObjectColor.BLUE)); + tapFilter.add(TappedPredicate.UNTAPPED); } public GrandArchitect(UUID ownerId, CardSetInfo setInfo) { @@ -52,14 +54,11 @@ public final class GrandArchitect extends CardImpl { // {U}: Target artifact creature becomes blue until end of turn. Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new GrandArchitectEffect(), new ManaCostsImpl<>("{U}")); - ability.addTarget(new TargetPermanent(targetFilter)); + ability.addTarget(new TargetPermanent(StaticFilters.FILTER_PERMANENT_ARTIFACT_CREATURE)); this.addAbility(ability); // Tap an untapped blue creature you control: Add {C}{C}. Spend this mana only to cast artifact spells or activate abilities of artifacts. - FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("untapped blue creature"); - filter.add(new ColorPredicate(ObjectColor.BLUE)); - filter.add(TappedPredicate.UNTAPPED); - this.addAbility(new GrandArchitectManaAbility(filter)); + this.addAbility(new GrandArchitectManaAbility(tapFilter)); } private GrandArchitect(final GrandArchitect card) { @@ -75,7 +74,7 @@ public final class GrandArchitect extends CardImpl { class GrandArchitectEffect extends ContinuousEffectImpl { - public GrandArchitectEffect() { + GrandArchitectEffect() { super(Duration.EndOfTurn, Layer.ColorChangingEffects_5, SubLayer.NA, Outcome.Detriment); staticText = "Target artifact creature becomes blue until end of turn"; } @@ -129,7 +128,7 @@ class GrandArchitectManaAbility extends ActivatedManaAbilityImpl { class GrandArchitectConditionalMana extends ConditionalMana { - public GrandArchitectConditionalMana() { + GrandArchitectConditionalMana() { super(Mana.ColorlessMana(2)); staticText = "Spend this mana only to cast artifact spells or activate abilities of artifacts"; addCondition(new GrandArchitectManaCondition()); diff --git a/Mage.Sets/src/mage/cards/g/GraveRobbers.java b/Mage.Sets/src/mage/cards/g/GraveRobbers.java index 9aa3bc93d84..51be10b3895 100644 --- a/Mage.Sets/src/mage/cards/g/GraveRobbers.java +++ b/Mage.Sets/src/mage/cards/g/GraveRobbers.java @@ -1,4 +1,3 @@ - package mage.cards.g; import mage.MageInt; @@ -13,7 +12,7 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; import mage.constants.Zone; -import mage.filter.StaticFilters; +import mage.filter.common.FilterArtifactCard; import mage.target.common.TargetCardInGraveyard; import java.util.UUID; @@ -23,6 +22,8 @@ import java.util.UUID; */ public final class GraveRobbers extends CardImpl { + private static final FilterArtifactCard filter = new FilterArtifactCard("artifact card from a graveyard"); + public GraveRobbers(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{B}{B}"); this.subtype.add(SubType.HUMAN); @@ -33,7 +34,7 @@ public final class GraveRobbers extends CardImpl { // {B}, {tap}: Exile target artifact card from a graveyard. You gain 2 life. Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new ExileTargetEffect(), new ManaCostsImpl<>("{B}")); ability.addCost(new TapSourceCost()); - ability.addTarget(new TargetCardInGraveyard(StaticFilters.FILTER_CARD_ARTIFACT_FROM_YOUR_GRAVEYARD)); + ability.addTarget(new TargetCardInGraveyard(filter)); ability.addEffect(new GainLifeEffect(2)); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/g/Gravebind.java b/Mage.Sets/src/mage/cards/g/Gravebind.java index 7d1da7dab19..012d28f976d 100644 --- a/Mage.Sets/src/mage/cards/g/Gravebind.java +++ b/Mage.Sets/src/mage/cards/g/Gravebind.java @@ -1,4 +1,3 @@ - package mage.cards.g; import java.util.UUID; @@ -26,7 +25,8 @@ public final class Gravebind extends CardImpl { getSpellAbility().addTarget(new TargetCreaturePermanent()); // Draw a card at the beginning of the next turn's upkeep. - this.getSpellAbility().addEffect(new CreateDelayedTriggeredAbilityEffect(new AtTheBeginOfNextUpkeepDelayedTriggeredAbility(new DrawCardSourceControllerEffect(1)), false)); + this.getSpellAbility().addEffect(new CreateDelayedTriggeredAbilityEffect(new AtTheBeginOfNextUpkeepDelayedTriggeredAbility( + new DrawCardSourceControllerEffect(1)), false).concatBy("
")); } private Gravebind(final Gravebind card) { diff --git a/Mage.Sets/src/mage/cards/g/GripOfTheRoil.java b/Mage.Sets/src/mage/cards/g/GripOfTheRoil.java index 6a66c4e8885..b795e0d7f81 100644 --- a/Mage.Sets/src/mage/cards/g/GripOfTheRoil.java +++ b/Mage.Sets/src/mage/cards/g/GripOfTheRoil.java @@ -1,4 +1,3 @@ - package mage.cards.g; import java.util.UUID; @@ -23,7 +22,7 @@ public final class GripOfTheRoil extends CardImpl { // Tap target creature. It doesn't untap during its controller's next untap step. this.getSpellAbility().addTarget(new TargetCreaturePermanent()); this.getSpellAbility().addEffect(new TapTargetEffect()); - this.getSpellAbility().addEffect(new DontUntapInControllersNextUntapStepTargetEffect()); + this.getSpellAbility().addEffect(new DontUntapInControllersNextUntapStepTargetEffect("It")); // Draw a card. this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1).concatBy("
")); diff --git a/Mage.Sets/src/mage/cards/g/GruulSpellbreaker.java b/Mage.Sets/src/mage/cards/g/GruulSpellbreaker.java index 54b25e5af1d..d8f00b4822f 100644 --- a/Mage.Sets/src/mage/cards/g/GruulSpellbreaker.java +++ b/Mage.Sets/src/mage/cards/g/GruulSpellbreaker.java @@ -46,14 +46,14 @@ public final class GruulSpellbreaker extends CardImpl { new GainAbilityControllerEffect( HexproofAbility.getInstance(), Duration.WhileOnBattlefield - ), MyTurnCondition.instance, "As long as it's your turn, you and" + ), MyTurnCondition.instance, "As long as it's your turn, you" ) ); ability.addEffect(new ConditionalContinuousEffect( new GainAbilitySourceEffect( HexproofAbility.getInstance(), Duration.WhileOnBattlefield - ), MyTurnCondition.instance, "{this} have hexproof." + ), MyTurnCondition.instance, "and {this} have hexproof." )); ability.addHint(MyTurnHint.instance); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/cards/h/HarvestHand.java b/Mage.Sets/src/mage/cards/h/HarvestHand.java index 10572bb1ed3..f1667031b88 100644 --- a/Mage.Sets/src/mage/cards/h/HarvestHand.java +++ b/Mage.Sets/src/mage/cards/h/HarvestHand.java @@ -50,7 +50,7 @@ class HarvestHandReturnTransformedEffect extends OneShotEffect { HarvestHandReturnTransformedEffect() { super(Outcome.PutCardInPlay); - this.staticText = "Return {this} to the battlefield transformed under your control"; + this.staticText = "return it to the battlefield transformed under your control"; } private HarvestHandReturnTransformedEffect(final HarvestHandReturnTransformedEffect effect) { diff --git a/Mage.Sets/src/mage/cards/i/Icequake.java b/Mage.Sets/src/mage/cards/i/Icequake.java index b8f8cf882e5..1379a3104b4 100644 --- a/Mage.Sets/src/mage/cards/i/Icequake.java +++ b/Mage.Sets/src/mage/cards/i/Icequake.java @@ -13,7 +13,6 @@ import mage.target.common.TargetLandPermanent; import java.util.UUID; - /** * @author fireshoes */ @@ -27,7 +26,6 @@ public final class Icequake extends CardImpl { this.getSpellAbility().addEffect(new IcequakeEffect()); this.getSpellAbility().addTarget(new TargetLandPermanent()); - } private Icequake(final Icequake card) { @@ -42,9 +40,9 @@ public final class Icequake extends CardImpl { class IcequakeEffect extends OneShotEffect { - public IcequakeEffect() { + IcequakeEffect() { super(Outcome.Damage); - this.staticText = "Destroy target land.
If that land was a snow land, {this} deals 1 damage to that land's controller."; + this.staticText = "Destroy target land. If that land was a snow land, {this} deals 1 damage to that land's controller."; } private IcequakeEffect(final IcequakeEffect effect) { diff --git a/Mage.Sets/src/mage/cards/i/IncandescentAria.java b/Mage.Sets/src/mage/cards/i/IncandescentAria.java index 7a4643e07dc..7105d48dbd2 100644 --- a/Mage.Sets/src/mage/cards/i/IncandescentAria.java +++ b/Mage.Sets/src/mage/cards/i/IncandescentAria.java @@ -5,7 +5,6 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.filter.FilterPermanent; -import mage.filter.StaticFilters; import mage.filter.common.FilterCreaturePermanent; import mage.filter.predicate.permanent.TokenPredicate; @@ -16,11 +15,17 @@ import java.util.UUID; */ public final class IncandescentAria extends CardImpl { + private static final FilterPermanent filter = new FilterCreaturePermanent("nontoken creature"); + + static { + filter.add(TokenPredicate.FALSE); + } + public IncandescentAria(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{R}{G}{W}"); // Incandescent Aria deals 3 damage to each nontoken creature. - this.getSpellAbility().addEffect(new DamageAllEffect(3, StaticFilters.FILTER_CREATURE_NON_TOKEN)); + this.getSpellAbility().addEffect(new DamageAllEffect(3, filter)); } private IncandescentAria(final IncandescentAria card) { diff --git a/Mage.Sets/src/mage/cards/i/InsultInjury.java b/Mage.Sets/src/mage/cards/i/InsultInjury.java index 702673412dc..3bbb8dc66df 100644 --- a/Mage.Sets/src/mage/cards/i/InsultInjury.java +++ b/Mage.Sets/src/mage/cards/i/InsultInjury.java @@ -56,9 +56,9 @@ public final class InsultInjury extends SplitCard { class InsultDoubleDamageEffect extends ReplacementEffectImpl { - public InsultDoubleDamageEffect() { + InsultDoubleDamageEffect() { super(Duration.EndOfTurn, Outcome.Damage); - staticText = "If a source you control would deal damage this turn, it deals double that damage to that permanent or player instead."; + staticText = "If a source you control would deal damage this turn, it deals double that damage instead."; } private InsultDoubleDamageEffect(final InsultDoubleDamageEffect effect) { diff --git a/Mage.Sets/src/mage/cards/k/KjeldoranFrostbeast.java b/Mage.Sets/src/mage/cards/k/KjeldoranFrostbeast.java index a84844592a8..0b689fd8556 100644 --- a/Mage.Sets/src/mage/cards/k/KjeldoranFrostbeast.java +++ b/Mage.Sets/src/mage/cards/k/KjeldoranFrostbeast.java @@ -19,7 +19,7 @@ import java.util.UUID; public final class KjeldoranFrostbeast extends CardImpl { private static final FilterPermanent filter - = new FilterCreaturePermanent("creatures blocking or blocked by it"); + = new FilterCreaturePermanent("creatures blocking or blocked by {this}"); static { filter.add(BlockingOrBlockedBySourcePredicate.EITHER); diff --git a/Mage.Sets/src/mage/cards/k/KuonOgreAscendant.java b/Mage.Sets/src/mage/cards/k/KuonOgreAscendant.java index 4354e35424d..490d10e5c6e 100644 --- a/Mage.Sets/src/mage/cards/k/KuonOgreAscendant.java +++ b/Mage.Sets/src/mage/cards/k/KuonOgreAscendant.java @@ -43,7 +43,7 @@ public final class KuonOgreAscendant extends CardImpl { this.addAbility(new BeginningOfEndStepTriggeredAbility( Zone.BATTLEFIELD, new FlipSourceEffect(new KuonsEssenceToken()), - TargetController.ANY, + TargetController.NEXT, KuonOgreAscendantCondition.instance, false)); } diff --git a/Mage.Sets/src/mage/cards/m/MaelstromDjinn.java b/Mage.Sets/src/mage/cards/m/MaelstromDjinn.java index 6a14a166696..ce651b62379 100644 --- a/Mage.Sets/src/mage/cards/m/MaelstromDjinn.java +++ b/Mage.Sets/src/mage/cards/m/MaelstromDjinn.java @@ -37,7 +37,7 @@ public final class MaelstromDjinn extends CardImpl { // When Maelstrom Djinn is turned face up, put two time counters on it and it gains vanishing. Ability ability = new TurnedFaceUpSourceTriggeredAbility( - new AddCountersSourceEffect(CounterType.TIME.createInstance(2)) + new AddCountersSourceEffect(CounterType.TIME.createInstance(2)).setText("put two time counters on it") ); ability.addEffect(new GainAbilitySourceEffect( new VanishingAbility(0), Duration.WhileOnBattlefield diff --git a/Mage.Sets/src/mage/cards/m/Metrognome.java b/Mage.Sets/src/mage/cards/m/Metrognome.java index 39eec3d66b9..ebf36ce2710 100644 --- a/Mage.Sets/src/mage/cards/m/Metrognome.java +++ b/Mage.Sets/src/mage/cards/m/Metrognome.java @@ -1,4 +1,3 @@ - package mage.cards.m; import java.util.UUID; @@ -24,7 +23,7 @@ public final class Metrognome extends CardImpl { super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{4}"); // When a spell or ability an opponent controls causes you to discard Metrognome, create four 1/1 colorless Gnome artifact creature tokens. - this.addAbility(new DiscardedByOpponentTriggeredAbility(new CreateTokenEffect(new GnomeToken(), 4))); + this.addAbility(new DiscardedByOpponentTriggeredAbility(new CreateTokenEffect(new GnomeToken(), 4), true)); // {4}, {tap}: Create a 1/1 colorless Gnome artifact creature token. Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new CreateTokenEffect(new GnomeToken()), new ManaCostsImpl<>("{4}")); diff --git a/Mage.Sets/src/mage/cards/m/MyrWelder.java b/Mage.Sets/src/mage/cards/m/MyrWelder.java index 8079d56eea1..4ab1a5519d8 100644 --- a/Mage.Sets/src/mage/cards/m/MyrWelder.java +++ b/Mage.Sets/src/mage/cards/m/MyrWelder.java @@ -24,6 +24,8 @@ import mage.target.common.TargetCardInGraveyard; */ public final class MyrWelder extends CardImpl { + private static final FilterArtifactCard filter = new FilterArtifactCard("artifact card from a graveyard"); + public MyrWelder(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{3}"); this.subtype.add(SubType.MYR); @@ -32,7 +34,7 @@ public final class MyrWelder extends CardImpl { // Imprint - {tap}: Exile target artifact card from a graveyard SimpleActivatedAbility ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new MyrWelderEffect(), new TapSourceCost()); - ability.addTarget(new TargetCardInGraveyard(new FilterArtifactCard("artifact card from a graveyard"))); + ability.addTarget(new TargetCardInGraveyard(filter)); this.addAbility(ability.setAbilityWord(AbilityWord.IMPRINT)); // Myr Welder has all activated abilities of all cards exiled with it @@ -53,7 +55,7 @@ public final class MyrWelder extends CardImpl { class MyrWelderEffect extends OneShotEffect { - public MyrWelderEffect() { + MyrWelderEffect() { super(Outcome.Exile); staticText = "Exile target artifact card from a graveyard"; } diff --git a/Mage.Sets/src/mage/cards/n/NissasJudgment.java b/Mage.Sets/src/mage/cards/n/NissasJudgment.java index b5ef3ac5584..55e9a5bbf26 100644 --- a/Mage.Sets/src/mage/cards/n/NissasJudgment.java +++ b/Mage.Sets/src/mage/cards/n/NissasJudgment.java @@ -1,4 +1,3 @@ - package mage.cards.n; import java.util.UUID; @@ -49,9 +48,10 @@ public final class NissasJudgment extends CardImpl { class NissasJudgmentEffect extends OneShotEffect { - public NissasJudgmentEffect() { + NissasJudgmentEffect() { super(Outcome.Damage); this.staticText = "Choose up to one target creature an opponent controls. Each creature you control with a +1/+1 counter on it deals damage equal to its power to that creature"; + this.concatPrefix = "
"; } private NissasJudgmentEffect(final NissasJudgmentEffect effect) { diff --git a/Mage.Sets/src/mage/cards/o/ONaginata.java b/Mage.Sets/src/mage/cards/o/ONaginata.java index 6de31ebdb60..9b82ea987d0 100644 --- a/Mage.Sets/src/mage/cards/o/ONaginata.java +++ b/Mage.Sets/src/mage/cards/o/ONaginata.java @@ -30,7 +30,7 @@ import mage.target.common.TargetControlledCreaturePermanent; */ public final class ONaginata extends CardImpl { - private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("creature you control with 3 or more power "); + private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("creature with power 3 or greater"); static { filter.add(new PowerPredicate(ComparisonType.MORE_THAN, 2)); diff --git a/Mage.Sets/src/mage/cards/o/OngoingInvestigation.java b/Mage.Sets/src/mage/cards/o/OngoingInvestigation.java index 45dd0a30242..d3f10d45983 100644 --- a/Mage.Sets/src/mage/cards/o/OngoingInvestigation.java +++ b/Mage.Sets/src/mage/cards/o/OngoingInvestigation.java @@ -29,7 +29,7 @@ public final class OngoingInvestigation extends CardImpl { this.addAbility(new DealCombatDamageControlledTriggeredAbility(new InvestigateEffect())); // {1}{G}, Exile a creature card from your graveyard: Investigate. You gain 2 life. - Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new InvestigateEffect(), new ManaCostsImpl<>("{1}{G}")); + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new InvestigateEffect().setText("investigate"), new ManaCostsImpl<>("{1}{G}")); ability.addCost(new ExileFromGraveCost(new TargetCardInYourGraveyard(new FilterCreatureCard("a creature card from your graveyard")))); ability.addEffect(new GainLifeEffect(2)); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/cards/p/Portent.java b/Mage.Sets/src/mage/cards/p/Portent.java index 12a878414eb..91db6964db6 100644 --- a/Mage.Sets/src/mage/cards/p/Portent.java +++ b/Mage.Sets/src/mage/cards/p/Portent.java @@ -30,7 +30,8 @@ public final class Portent extends CardImpl { this.getSpellAbility().addEffect(new PortentEffect()); this.getSpellAbility().addTarget(new TargetPlayer()); // Draw a card at the beginning of the next turn's upkeep. - this.getSpellAbility().addEffect(new CreateDelayedTriggeredAbilityEffect(new AtTheBeginOfNextUpkeepDelayedTriggeredAbility(new DrawCardSourceControllerEffect(1)), false)); + this.getSpellAbility().addEffect(new CreateDelayedTriggeredAbilityEffect(new AtTheBeginOfNextUpkeepDelayedTriggeredAbility( + new DrawCardSourceControllerEffect(1)), false).concatBy("
")); } private Portent(final Portent card) { diff --git a/Mage.Sets/src/mage/cards/p/PressIntoService.java b/Mage.Sets/src/mage/cards/p/PressIntoService.java index 68783fe3aab..b6dd954e823 100644 --- a/Mage.Sets/src/mage/cards/p/PressIntoService.java +++ b/Mage.Sets/src/mage/cards/p/PressIntoService.java @@ -1,8 +1,6 @@ - package mage.cards.p; import java.util.UUID; -import mage.abilities.effects.Effect; import mage.abilities.effects.common.UntapTargetEffect; import mage.abilities.effects.common.continuous.GainAbilityTargetEffect; import mage.abilities.effects.common.continuous.GainControlTargetEffect; @@ -31,7 +29,7 @@ public final class PressIntoService extends CardImpl { this.getSpellAbility().addTarget(new TargetCreaturePermanent()); // First target is used by Support this.getSpellAbility().addEffect(new GainControlTargetEffect(Duration.EndOfTurn) - .setText("Gain control of target creature until end of turn") + .setText("Gain control of target creature until end of turn").concatBy("
") .setTargetPointer(new SecondTargetPointer()) ); this.getSpellAbility().addEffect(new UntapTargetEffect() diff --git a/Mage.Sets/src/mage/cards/q/Quagnoth.java b/Mage.Sets/src/mage/cards/q/Quagnoth.java index 802b9b7e7fa..aeaad7a581c 100644 --- a/Mage.Sets/src/mage/cards/q/Quagnoth.java +++ b/Mage.Sets/src/mage/cards/q/Quagnoth.java @@ -1,4 +1,3 @@ - package mage.cards.q; import java.util.UUID; @@ -31,7 +30,8 @@ public final class Quagnoth extends CardImpl { this.addAbility(ShroudAbility.getInstance()); // When a spell or ability an opponent controls causes you to discard Quagnoth, return it to your hand. - this.addAbility(new DiscardedByOpponentTriggeredAbility(new ReturnToHandSourceEffect())); + this.addAbility(new DiscardedByOpponentTriggeredAbility(new ReturnToHandSourceEffect() + .setText("return it to your hand"), true)); } private Quagnoth(final Quagnoth card) { diff --git a/Mage.Sets/src/mage/cards/q/QuicksilverGargantuan.java b/Mage.Sets/src/mage/cards/q/QuicksilverGargantuan.java index 54fa2c08a20..451e40ef2e8 100644 --- a/Mage.Sets/src/mage/cards/q/QuicksilverGargantuan.java +++ b/Mage.Sets/src/mage/cards/q/QuicksilverGargantuan.java @@ -1,4 +1,3 @@ - package mage.cards.q; import java.util.UUID; @@ -27,7 +26,8 @@ public final class QuicksilverGargantuan extends CardImpl { this.toughness = new MageInt(7); Ability ability = new EntersBattlefieldAbility(new CopyPermanentEffect(new QuicksilverGargantuanCopyApplier()), - "You may have {this} enter the battlefield as a copy of any creature on the battlefield, except it's 7/7"); + true, null, null, + "as a copy of any creature on the battlefield, except it's 7/7"); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/r/RagsRiches.java b/Mage.Sets/src/mage/cards/r/RagsRiches.java index a0df514573e..d20d7c34b32 100644 --- a/Mage.Sets/src/mage/cards/r/RagsRiches.java +++ b/Mage.Sets/src/mage/cards/r/RagsRiches.java @@ -48,9 +48,9 @@ public final class RagsRiches extends SplitCard { class RichesEffect extends OneShotEffect { - public RichesEffect() { + RichesEffect() { super(Outcome.Benefit); - this.staticText = "Each opponent chooses a creature they control. You gain control of each of those creatures."; + this.staticText = "Each opponent chooses a creature they control. You gain control of those creatures."; } private RichesEffect(final RichesEffect effect) { diff --git a/Mage.Sets/src/mage/cards/r/RhetCropSpearmaster.java b/Mage.Sets/src/mage/cards/r/RhetCropSpearmaster.java index e6c87eb1176..d67231c16be 100644 --- a/Mage.Sets/src/mage/cards/r/RhetCropSpearmaster.java +++ b/Mage.Sets/src/mage/cards/r/RhetCropSpearmaster.java @@ -34,7 +34,7 @@ public final class RhetCropSpearmaster extends CardImpl { effect.setText("it gets +1/+0"); BecomesExertSourceTriggeredAbility ability = new BecomesExertSourceTriggeredAbility(effect); effect = new GainAbilitySourceEffect(FirstStrikeAbility.getInstance(), Duration.EndOfTurn); - effect.setText(" and gains first strike until end of turn"); + effect.setText("and gains first strike until end of turn"); ability.addEffect(effect); this.addAbility(new ExertAbility(ability)); } diff --git a/Mage.Sets/src/mage/cards/r/RiptideSurvivor.java b/Mage.Sets/src/mage/cards/r/RiptideSurvivor.java index a10c38247fc..4d846600537 100644 --- a/Mage.Sets/src/mage/cards/r/RiptideSurvivor.java +++ b/Mage.Sets/src/mage/cards/r/RiptideSurvivor.java @@ -1,4 +1,3 @@ - package mage.cards.r; import java.util.UUID; @@ -33,8 +32,7 @@ public final class RiptideSurvivor extends CardImpl { this.addAbility(new MorphAbility(this, new ManaCostsImpl<>("{1}{U}{U}"))); // When Riptide Survivor is turned face up, discard two cards, then draw three cards. Ability ability = new TurnedFaceUpSourceTriggeredAbility(new DiscardControllerEffect(2)); - Effect effect = new DrawCardSourceControllerEffect(3); - effect.setText("then draw three cards"); + Effect effect = new DrawCardSourceControllerEffect(3).concatBy(", then"); ability.addEffect(effect); this.addAbility(ability); } @@ -48,4 +46,3 @@ public final class RiptideSurvivor extends CardImpl { return new RiptideSurvivor(this); } } - diff --git a/Mage.Sets/src/mage/cards/r/RocketLauncher.java b/Mage.Sets/src/mage/cards/r/RocketLauncher.java index 3563189cab9..810db5ba37f 100644 --- a/Mage.Sets/src/mage/cards/r/RocketLauncher.java +++ b/Mage.Sets/src/mage/cards/r/RocketLauncher.java @@ -32,7 +32,7 @@ public final class RocketLauncher extends CardImpl { new GenericManaCost(2), RocketLauncherCondition.instance); ability.addTarget(new TargetAnyTarget()); ability.addEffect(new CreateDelayedTriggeredAbilityEffect( - new AtTheBeginOfNextEndStepDelayedTriggeredAbility(new DestroySourceEffect(true)) + new AtTheBeginOfNextEndStepDelayedTriggeredAbility(new DestroySourceEffect()) ).setText("destroy {this} at the beginning of the next end step")); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/s/SavageSmash.java b/Mage.Sets/src/mage/cards/s/SavageSmash.java index b989ee1d17d..80892289ee5 100644 --- a/Mage.Sets/src/mage/cards/s/SavageSmash.java +++ b/Mage.Sets/src/mage/cards/s/SavageSmash.java @@ -24,7 +24,7 @@ public final class SavageSmash extends CardImpl { this.getSpellAbility().addEffect(new BoostTargetEffect(2, 2, Duration.EndOfTurn)); this.getSpellAbility().addEffect( new FightTargetsEffect().setText("It fights target creature you don't control." + - "(Each deals damage equal to its power to the other.)") + " (Each deals damage equal to its power to the other.)") ); this.getSpellAbility().addTarget(new TargetControlledCreaturePermanent()); this.getSpellAbility().addTarget(new TargetCreaturePermanent(StaticFilters.FILTER_CREATURE_YOU_DONT_CONTROL)); diff --git a/Mage.Sets/src/mage/cards/s/SearingBlood.java b/Mage.Sets/src/mage/cards/s/SearingBlood.java index fc0115bdc86..dde6c05bf80 100644 --- a/Mage.Sets/src/mage/cards/s/SearingBlood.java +++ b/Mage.Sets/src/mage/cards/s/SearingBlood.java @@ -23,7 +23,7 @@ public final class SearingBlood extends CardImpl { this.getSpellAbility().addEffect(new DamageTargetEffect(2)); this.getSpellAbility().addEffect(new CreateDelayedTriggeredAbilityEffect( new WhenTargetDiesDelayedTriggeredAbility( - new DamageTargetEffect(3, true, "that creature's controller"), + new DamageTargetEffect(3, true, "the creature's controller"), SetTargetPointer.PLAYER ) )); diff --git a/Mage.Sets/src/mage/cards/s/ShadowGuildmage.java b/Mage.Sets/src/mage/cards/s/ShadowGuildmage.java index 2af510423f6..1a1b1bb6ba7 100644 --- a/Mage.Sets/src/mage/cards/s/ShadowGuildmage.java +++ b/Mage.Sets/src/mage/cards/s/ShadowGuildmage.java @@ -1,4 +1,3 @@ - package mage.cards.s; import java.util.UUID; @@ -40,7 +39,7 @@ public final class ShadowGuildmage extends CardImpl { // {R}, {tap}: Shadow Guildmage deals 1 damage to any target and 1 damage to you. 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); } @@ -53,4 +52,4 @@ public final class ShadowGuildmage extends CardImpl { public ShadowGuildmage copy() { return new ShadowGuildmage(this); } -} \ No newline at end of file +} diff --git a/Mage.Sets/src/mage/cards/s/SirenOfTheSilentSong.java b/Mage.Sets/src/mage/cards/s/SirenOfTheSilentSong.java index a44e8e69e91..091b3258445 100644 --- a/Mage.Sets/src/mage/cards/s/SirenOfTheSilentSong.java +++ b/Mage.Sets/src/mage/cards/s/SirenOfTheSilentSong.java @@ -34,7 +34,7 @@ public final class SirenOfTheSilentSong extends CardImpl { // Inspired — Whenever Siren of the Silent Song becomes untapped, each opponent discards a card, then puts the top card of their library into their graveyard. Ability ability = new InspiredAbility(new DiscardEachPlayerEffect(TargetController.OPPONENT)); Effect effect = new MillCardsEachPlayerEffect(1, TargetController.OPPONENT); - effect.setText(", then mills a card"); + effect.setText(", then each opponent mills a card"); ability.addEffect(effect); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/s/Skinwing.java b/Mage.Sets/src/mage/cards/s/Skinwing.java index af5e477c2d5..15770a66817 100644 --- a/Mage.Sets/src/mage/cards/s/Skinwing.java +++ b/Mage.Sets/src/mage/cards/s/Skinwing.java @@ -1,7 +1,6 @@ - package mage.cards.s; -import java.util.UUID; +import mage.abilities.Ability; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.costs.mana.GenericManaCost; import mage.abilities.effects.common.continuous.BoostEquippedEffect; @@ -13,9 +12,10 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.AttachmentType; import mage.constants.CardType; -import mage.constants.SubType; import mage.constants.Outcome; -import mage.constants.Zone; +import mage.constants.SubType; + +import java.util.UUID; /** * @@ -27,12 +27,14 @@ public final class Skinwing extends CardImpl { super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT},"{4}"); this.subtype.add(SubType.EQUIPMENT); - // Living Weapom + // Living weapon this.addAbility(new LivingWeaponAbility()); // Equipped creature gets +2/+2 and has flying - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEquippedEffect(2, 2))); - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAttachedEffect(FlyingAbility.getInstance(), AttachmentType.EQUIPMENT))); + Ability ability = new SimpleStaticAbility(new BoostEquippedEffect(2, 2)); + ability.addEffect(new GainAbilityAttachedEffect(FlyingAbility.getInstance(), AttachmentType.EQUIPMENT) + .setText("and has flying")); + this.addAbility(ability); // Equip {6} this.addAbility(new EquipAbility(Outcome.BoostCreature, new GenericManaCost(6), false)); diff --git a/Mage.Sets/src/mage/cards/s/SleeperAgent.java b/Mage.Sets/src/mage/cards/s/SleeperAgent.java index 16273a06bff..c4382e158f5 100644 --- a/Mage.Sets/src/mage/cards/s/SleeperAgent.java +++ b/Mage.Sets/src/mage/cards/s/SleeperAgent.java @@ -56,7 +56,7 @@ class SleeperAgentChangeControlEffect extends ContinuousEffectImpl { public SleeperAgentChangeControlEffect() { super(Duration.Custom, Layer.ControlChangingEffects_2, SubLayer.NA, Outcome.GainControl); - staticText = "target opponent gains control of {this}"; + staticText = "target opponent gains control of it"; } private SleeperAgentChangeControlEffect(final SleeperAgentChangeControlEffect effect) { @@ -79,5 +79,3 @@ class SleeperAgentChangeControlEffect extends ContinuousEffectImpl { return false; } } - - diff --git a/Mage.Sets/src/mage/cards/s/Solfatara.java b/Mage.Sets/src/mage/cards/s/Solfatara.java index 067e5aee695..84fa6e6bdf0 100644 --- a/Mage.Sets/src/mage/cards/s/Solfatara.java +++ b/Mage.Sets/src/mage/cards/s/Solfatara.java @@ -1,4 +1,3 @@ - package mage.cards.s; import java.util.UUID; @@ -32,7 +31,8 @@ public final class Solfatara extends CardImpl { // Draw a card at the beginning of the next turn's upkeep. this.getSpellAbility().addEffect(new CreateDelayedTriggeredAbilityEffect( - new AtTheBeginOfNextUpkeepDelayedTriggeredAbility(new DrawCardSourceControllerEffect(1), Duration.OneUse), false)); + new AtTheBeginOfNextUpkeepDelayedTriggeredAbility(new DrawCardSourceControllerEffect(1), Duration.OneUse), false) + .concatBy("
")); } private Solfatara(final Solfatara card) { @@ -47,9 +47,9 @@ public final class Solfatara extends CardImpl { class SolfataraEffect extends ContinuousRuleModifyingEffectImpl { - public SolfataraEffect() { + SolfataraEffect() { super(Duration.EndOfTurn, Outcome.Detriment); - staticText = "Target player can't play land cards this turn"; + staticText = "Target player can't play lands this turn"; } private SolfataraEffect(final SolfataraEffect effect) { diff --git a/Mage.Sets/src/mage/cards/s/StoneHavenOutfitter.java b/Mage.Sets/src/mage/cards/s/StoneHavenOutfitter.java index 60276970956..86c1cb2aa13 100644 --- a/Mage.Sets/src/mage/cards/s/StoneHavenOutfitter.java +++ b/Mage.Sets/src/mage/cards/s/StoneHavenOutfitter.java @@ -1,4 +1,3 @@ - package mage.cards.s; import java.util.UUID; @@ -42,7 +41,8 @@ public final class StoneHavenOutfitter extends CardImpl { this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostAllEffect(1, 1, Duration.WhileOnBattlefield, filter, false))); // Whenever an equipped creature you control dies, draw a card. - this.addAbility(new DiesCreatureTriggeredAbility(new DrawCardSourceControllerEffect(1), false, filter)); + this.addAbility(new DiesCreatureTriggeredAbility(new DrawCardSourceControllerEffect(1), false, filter) + .setTriggerPhrase("Whenever an equipped creature you control dies, ")); } private StoneHavenOutfitter(final StoneHavenOutfitter card) { diff --git a/Mage.Sets/src/mage/cards/s/Strandwalker.java b/Mage.Sets/src/mage/cards/s/Strandwalker.java index 465193f9e9c..36a3f04cd02 100644 --- a/Mage.Sets/src/mage/cards/s/Strandwalker.java +++ b/Mage.Sets/src/mage/cards/s/Strandwalker.java @@ -1,7 +1,8 @@ - package mage.cards.s; import java.util.UUID; + +import mage.abilities.Ability; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.costs.mana.GenericManaCost; import mage.abilities.effects.common.continuous.BoostEquippedEffect; @@ -15,7 +16,6 @@ import mage.constants.AttachmentType; import mage.constants.CardType; import mage.constants.SubType; import mage.constants.Outcome; -import mage.constants.Zone; /** * @@ -31,8 +31,10 @@ public final class Strandwalker extends CardImpl { this.addAbility(new LivingWeaponAbility()); // Equipped creature gets +2/+4 and has reach. - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEquippedEffect(2, 4))); - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAttachedEffect(ReachAbility.getInstance(), AttachmentType.EQUIPMENT))); + Ability ability = new SimpleStaticAbility(new BoostEquippedEffect(2, 4)); + ability.addEffect(new GainAbilityAttachedEffect(ReachAbility.getInstance(), AttachmentType.EQUIPMENT) + .setText("and has reach")); + this.addAbility(ability); // Equip {4} this.addAbility(new EquipAbility(Outcome.BoostCreature, new GenericManaCost(4), false)); diff --git a/Mage.Sets/src/mage/cards/s/SummaryJudgment.java b/Mage.Sets/src/mage/cards/s/SummaryJudgment.java index a6ed77c27e4..e3e87cbf792 100644 --- a/Mage.Sets/src/mage/cards/s/SummaryJudgment.java +++ b/Mage.Sets/src/mage/cards/s/SummaryJudgment.java @@ -52,7 +52,7 @@ class SummaryJudgementEffect extends OneShotEffect { super(Outcome.Benefit); staticText = "{this} deals 3 damage to target tapped creature." + "
Addendum — If you cast this spell during your main phase, " + - "it deals 5 damage."; + "it deals 5 damage instead."; } private SummaryJudgementEffect(final SummaryJudgementEffect effect) { @@ -76,4 +76,4 @@ class SummaryJudgementEffect extends OneShotEffect { } return permanent.damage(damage, source.getSourceId(), source, game) > 0; } -} \ No newline at end of file +} diff --git a/Mage.Sets/src/mage/cards/s/SurviveTheNight.java b/Mage.Sets/src/mage/cards/s/SurviveTheNight.java index 4bbef275796..3091d829635 100644 --- a/Mage.Sets/src/mage/cards/s/SurviveTheNight.java +++ b/Mage.Sets/src/mage/cards/s/SurviveTheNight.java @@ -32,7 +32,7 @@ public final class SurviveTheNight extends CardImpl { this.getSpellAbility().addTarget(new TargetCreaturePermanent()); // Investigate. - this.getSpellAbility().addEffect(new InvestigateEffect()); + this.getSpellAbility().addEffect(new InvestigateEffect().concatBy("
")); } private SurviveTheNight(final SurviveTheNight card) { diff --git a/Mage.Sets/src/mage/cards/s/SymbolOfUnsummoning.java b/Mage.Sets/src/mage/cards/s/SymbolOfUnsummoning.java index 5b99f02a8c4..439c42b012a 100644 --- a/Mage.Sets/src/mage/cards/s/SymbolOfUnsummoning.java +++ b/Mage.Sets/src/mage/cards/s/SymbolOfUnsummoning.java @@ -1,4 +1,3 @@ - package mage.cards.s; import java.util.UUID; @@ -22,7 +21,7 @@ public final class SymbolOfUnsummoning extends CardImpl { this.getSpellAbility().addTarget(new TargetCreaturePermanent()); this.getSpellAbility().addEffect(new ReturnToHandTargetEffect()); // Draw a card. - this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1)); + this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1).concatBy("
")); } private SymbolOfUnsummoning(final SymbolOfUnsummoning card) { diff --git a/Mage.Sets/src/mage/cards/t/TaigamOjutaiMaster.java b/Mage.Sets/src/mage/cards/t/TaigamOjutaiMaster.java index ad061277426..5541b193e0c 100644 --- a/Mage.Sets/src/mage/cards/t/TaigamOjutaiMaster.java +++ b/Mage.Sets/src/mage/cards/t/TaigamOjutaiMaster.java @@ -30,7 +30,7 @@ import mage.watchers.common.AttackedThisTurnWatcher; public final class TaigamOjutaiMaster extends CardImpl { private static final String effectText = "Whenever you cast an instant or sorcery spell from your hand, if {this} attacked this turn, that spell gains rebound."; - private static final FilterSpell filter = new FilterSpell("Instant, Sorcery, and Dragon spells you control"); + private static final FilterSpell filter = new FilterSpell("Instant, sorcery, and Dragon spells you control"); static { filter.add( diff --git a/Mage.Sets/src/mage/cards/t/TheHauntOfHightower.java b/Mage.Sets/src/mage/cards/t/TheHauntOfHightower.java index 8847e6b0efb..74ab654881d 100644 --- a/Mage.Sets/src/mage/cards/t/TheHauntOfHightower.java +++ b/Mage.Sets/src/mage/cards/t/TheHauntOfHightower.java @@ -36,7 +36,7 @@ public final class TheHauntOfHightower extends CardImpl { // Whenever The Haunt of Hightower attacks, defending player discards a card. this.addAbility(new AttacksTriggeredAbility( new DiscardTargetEffect(1), false, - "Whenever {this} attacks, defending player discards a card", SetTargetPointer.PLAYER + "Whenever {this} attacks, defending player discards a card.", SetTargetPointer.PLAYER )); // Whenever a card is put into an opponent's graveyard from anywhere, put a +1/+1 counter on The Haunt of Hightower. diff --git a/Mage.Sets/src/mage/cards/t/ThornThallid.java b/Mage.Sets/src/mage/cards/t/ThornThallid.java index 034bac12361..61f4cadeb7c 100644 --- a/Mage.Sets/src/mage/cards/t/ThornThallid.java +++ b/Mage.Sets/src/mage/cards/t/ThornThallid.java @@ -34,7 +34,7 @@ public final class ThornThallid extends CardImpl { this.addAbility(new BeginningOfUpkeepTriggeredAbility(new AddCountersSourceEffect(CounterType.SPORE.createInstance()), TargetController.YOU, false)); // Remove three spore counters from Thorn Thallid: Thorn Thallid deals 1 damage to any target. Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, - new DamageTargetEffect(1), + new DamageTargetEffect(1, "it"), new RemoveCountersSourceCost(CounterType.SPORE.createInstance(3))); ability.addTarget(new TargetAnyTarget()); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/cards/t/TidyConclusion.java b/Mage.Sets/src/mage/cards/t/TidyConclusion.java index 713e41bd6bd..966fe5ea3c8 100644 --- a/Mage.Sets/src/mage/cards/t/TidyConclusion.java +++ b/Mage.Sets/src/mage/cards/t/TidyConclusion.java @@ -22,7 +22,8 @@ public final class TidyConclusion extends CardImpl { // Destroy target creature. You gain 1 life for each artifact you control. this.getSpellAbility().addEffect(new DestroyTargetEffect()); this.getSpellAbility().addTarget(new TargetCreaturePermanent()); - this.getSpellAbility().addEffect(new GainLifeEffect(ArtifactYouControlCount.instance)); + this.getSpellAbility().addEffect(new GainLifeEffect(ArtifactYouControlCount.instance) + .setText("you gain 1 life for each artifact you control")); this.getSpellAbility().addHint(ArtifactYouControlHint.instance); } diff --git a/Mage.Sets/src/mage/cards/t/TinderWall.java b/Mage.Sets/src/mage/cards/t/TinderWall.java index cdac2cb8828..b81a6ace593 100644 --- a/Mage.Sets/src/mage/cards/t/TinderWall.java +++ b/Mage.Sets/src/mage/cards/t/TinderWall.java @@ -47,7 +47,7 @@ public final class TinderWall extends CardImpl { this.addAbility(new SimpleManaAbility(Zone.BATTLEFIELD, Mana.RedMana(2), new SacrificeSourceCost())); // {R}, Sacrifice Tinder Wall: Tinder Wall deals 2 damage to target creature it's blocking. - Ability ability = new SimpleActivatedAbility(new DamageTargetEffect(2), new ManaCostsImpl<>("{R}")); + Ability ability = new SimpleActivatedAbility(new DamageTargetEffect(2, "it"), new ManaCostsImpl<>("{R}")); ability.addCost(new SacrificeSourceCost()); ability.addTarget(new TargetPermanent(filter)); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/cards/t/TumbleMagnet.java b/Mage.Sets/src/mage/cards/t/TumbleMagnet.java index 3780754a7e0..4f9522e567d 100644 --- a/Mage.Sets/src/mage/cards/t/TumbleMagnet.java +++ b/Mage.Sets/src/mage/cards/t/TumbleMagnet.java @@ -27,7 +27,7 @@ public final class TumbleMagnet extends CardImpl { this.addAbility(new EntersBattlefieldAbility( new AddCountersSourceEffect(CounterType.CHARGE.createInstance(3)), - "{this} enters the battlefield with three charge counters on it" + "with three charge counters on it" )); Ability ability = new SimpleActivatedAbility( diff --git a/Mage.Sets/src/mage/cards/u/UndercitysEmbrace.java b/Mage.Sets/src/mage/cards/u/UndercitysEmbrace.java index 9e74e521578..b7b589db91a 100644 --- a/Mage.Sets/src/mage/cards/u/UndercitysEmbrace.java +++ b/Mage.Sets/src/mage/cards/u/UndercitysEmbrace.java @@ -23,7 +23,7 @@ public final class UndercitysEmbrace extends CardImpl { // Target opponent sacrifices a creature. If you control a creature with power 4 or greater, you gain 4 life. this.getSpellAbility().addEffect(new SacrificeEffect( - StaticFilters.FILTER_PERMANENT_A_CREATURE, 1, "target player" + StaticFilters.FILTER_PERMANENT_A_CREATURE, 1, "target opponent" )); this.getSpellAbility().addTarget(new TargetOpponent()); this.getSpellAbility().addEffect(new ConditionalOneShotEffect( diff --git a/Mage.Sets/src/mage/cards/u/UnityOfPurpose.java b/Mage.Sets/src/mage/cards/u/UnityOfPurpose.java index 77a04b1274f..fa9c2b16965 100644 --- a/Mage.Sets/src/mage/cards/u/UnityOfPurpose.java +++ b/Mage.Sets/src/mage/cards/u/UnityOfPurpose.java @@ -1,4 +1,3 @@ - package mage.cards.u; import java.util.UUID; @@ -23,7 +22,8 @@ public final class UnityOfPurpose extends CardImpl { // Untap each creature you control with a +1/+1 counter on it. this.getSpellAbility().addEffect(new UntapAllControllerEffect( - StaticFilters.FILTER_EACH_CONTROLLED_CREATURE_P1P1, "Untap each creature you control with a +1/+1 counter on it")); + StaticFilters.FILTER_EACH_CONTROLLED_CREATURE_P1P1, "Untap each creature you control with a +1/+1 counter on it") + .concatBy("
")); } private UnityOfPurpose(final UnityOfPurpose card) { diff --git a/Mage.Sets/src/mage/cards/u/UnnaturalPredation.java b/Mage.Sets/src/mage/cards/u/UnnaturalPredation.java index a440c0dd418..50d3370a010 100644 --- a/Mage.Sets/src/mage/cards/u/UnnaturalPredation.java +++ b/Mage.Sets/src/mage/cards/u/UnnaturalPredation.java @@ -1,5 +1,3 @@ - - package mage.cards.u; import java.util.UUID; @@ -21,8 +19,10 @@ public final class UnnaturalPredation extends CardImpl { public UnnaturalPredation (UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{G}"); - this.getSpellAbility().addEffect(new BoostTargetEffect(1, 1, Duration.EndOfTurn)); - this.getSpellAbility().addEffect(new GainAbilityTargetEffect(TrampleAbility.getInstance(), Duration.EndOfTurn)); + this.getSpellAbility().addEffect(new BoostTargetEffect(1, 1, Duration.EndOfTurn) + .setText("Target creature gets +1/+1")); + this.getSpellAbility().addEffect(new GainAbilityTargetEffect(TrampleAbility.getInstance(), Duration.EndOfTurn) + .setText("and gains trample until end of turn")); this.getSpellAbility().addTarget(new TargetCreaturePermanent()); } diff --git a/Mage.Sets/src/mage/cards/v/VeiledApparition.java b/Mage.Sets/src/mage/cards/v/VeiledApparition.java index 8fe3329f472..e7ac38f6f44 100644 --- a/Mage.Sets/src/mage/cards/v/VeiledApparition.java +++ b/Mage.Sets/src/mage/cards/v/VeiledApparition.java @@ -32,13 +32,12 @@ public final class VeiledApparition extends CardImpl { public VeiledApparition(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{U}"); - // When an opponent casts a spell, if Veiled Apparition is an enchantment, Veiled Apparition becomes a 3/3 Illusion creature with flying and "At the beginning of your upkeep, sacrifice Veiled Apparition unless you pay {1}{U}." TriggeredAbility ability = new SpellCastOpponentTriggeredAbility(new BecomesCreatureSourceEffect(new VeilApparitionToken(), null, Duration.WhileOnBattlefield), filter, false); this.addAbility(new ConditionalInterveningIfTriggeredAbility(ability, new SourceMatchesFilterCondition(StaticFilters.FILTER_PERMANENT_ENCHANTMENT), - "When an opponent casts a spell, if {this} is an enchantment, {this} becomes a 3/3 Illusion creature with flying and \"At the beginning of your upkeep, sacrifice Veiled Apparition unless you pay {1}{U}.")); + "When an opponent casts a spell, if {this} is an enchantment, {this} becomes a 3/3 Illusion creature with flying and \"At the beginning of your upkeep, sacrifice Veiled Apparition unless you pay {1}{U}.\"")); } diff --git a/Mage.Sets/src/mage/cards/v/VeiledSentry.java b/Mage.Sets/src/mage/cards/v/VeiledSentry.java index 2eb916af549..b541b5abc15 100644 --- a/Mage.Sets/src/mage/cards/v/VeiledSentry.java +++ b/Mage.Sets/src/mage/cards/v/VeiledSentry.java @@ -30,7 +30,7 @@ public final class VeiledSentry extends CardImpl { this.addAbility(new ConditionalInterveningIfTriggeredAbility( new SpellCastOpponentTriggeredAbility(new VeiledSentryEffect(), false), condition, "When an opponent casts a spell, if {this} is an enchantment, " + - "{this} becomes an Illusion creature with power and toughness equal to that spell's mana value." + "{this} becomes an Illusion creature with power and toughness each equal to that spell's mana value." )); } diff --git a/Mage.Sets/src/mage/cards/w/WelcomeToTheFold.java b/Mage.Sets/src/mage/cards/w/WelcomeToTheFold.java index 2e1ee520630..4138a7cc8c6 100644 --- a/Mage.Sets/src/mage/cards/w/WelcomeToTheFold.java +++ b/Mage.Sets/src/mage/cards/w/WelcomeToTheFold.java @@ -52,7 +52,7 @@ class WelcomeToTheFoldEffect extends GainControlTargetEffect { public WelcomeToTheFoldEffect(Duration duration, boolean fixedControl) { super(duration, fixedControl); - staticText = "Gain control of target creature if its toughness is 2 or less. If Welcome to the Fold's madness cost was paid, instead gain control of that creature if its toughness is X or less"; + staticText = "Gain control of target creature if its toughness is 2 or less. If this spell's madness cost was paid, instead gain control of that creature if its toughness is X or less"; } private WelcomeToTheFoldEffect(final WelcomeToTheFoldEffect effect) { diff --git a/Mage.Sets/src/mage/cards/w/Wiitigo.java b/Mage.Sets/src/mage/cards/w/Wiitigo.java index ce0ba21ec08..76435d35af4 100644 --- a/Mage.Sets/src/mage/cards/w/Wiitigo.java +++ b/Mage.Sets/src/mage/cards/w/Wiitigo.java @@ -41,7 +41,7 @@ public final class Wiitigo extends CardImpl { // Wiitigo enters the battlefield with six +1/+1 counters on it. this.addAbility(new EntersBattlefieldAbility( - new AddCountersSourceEffect(CounterType.P1P1.createInstance(6)))); + new AddCountersSourceEffect(CounterType.P1P1.createInstance(6)), "with six +1/+1 counters on it")); // At the beginning of your upkeep, put a +1/+1 counter on Wiitigo if it has blocked or been blocked since your last upkeep. Otherwise, remove a +1/+1 counter from it. Ability triggeredAbility = new BeginningOfUpkeepTriggeredAbility( @@ -49,7 +49,7 @@ public final class Wiitigo extends CardImpl { new AddCountersSourceEffect(CounterType.P1P1.createInstance(1)), new RemoveCounterSourceEffect(CounterType.P1P1.createInstance(1)), new BlockedOrBeenBlockedSinceYourLastUpkeepCondition(), - "put a +1/+1 counter on enchanted creature if it blocked or been blocked since your last " + "put a +1/+1 counter on {this} if it has blocked or been blocked since your last " + "upkeep. Otherwise, remove a +1/+1 counter from it"), TargetController.YOU, false); diff --git a/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java b/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java index 4df8934809a..b148c7ef87f 100644 --- a/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java +++ b/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java @@ -2330,7 +2330,7 @@ public class VerifyCardDataTest { } // remove unnecessary reminder text - refText = refText.replaceAll("^\\(.+(can be paid with|ransforms from).+\\)\n", ""); + refText = refText.replaceAll("^\\(.+(can be paid with|ransforms from|represents).+\\)\n", ""); // mana ability fix // Current implementation makes one Activated Ability per kind of color. diff --git a/Mage/src/main/java/mage/abilities/TriggeredAbilityImpl.java b/Mage/src/main/java/mage/abilities/TriggeredAbilityImpl.java index b6248d1b1ae..47be846a6f9 100644 --- a/Mage/src/main/java/mage/abilities/TriggeredAbilityImpl.java +++ b/Mage/src/main/java/mage/abilities/TriggeredAbilityImpl.java @@ -226,7 +226,7 @@ public abstract class TriggeredAbilityImpl extends AbilityImpl implements Trigge } } if (replaceRuleText && triggerPhrase != null) { - superRule = superRule.replaceFirst("^((?:you may )?sacrifice |put a [^ ]+ counter on |return )?\\{this\\}", "$1it"); + superRule = superRule.replaceFirst("^((?:you may )?sacrifice |put an? [^ ]+ counter on |return |transform )?\\{this\\}", "$1it"); } sb.append(superRule); if (triggersOnceEachTurn) { @@ -272,6 +272,8 @@ public abstract class TriggeredAbilityImpl extends AbilityImpl implements Trigge || effect instanceof ReturnToHandSourceEffect || effect instanceof ShuffleIntoLibrarySourceEffect || effect instanceof ExileSourceEffect + || effect instanceof FlipSourceEffect + || effect instanceof DestroySourceEffect ) ? "When " : "Whenever "); } diff --git a/Mage/src/main/java/mage/abilities/common/BecomesTappedAttachedTriggeredAbility.java b/Mage/src/main/java/mage/abilities/common/BecomesTappedAttachedTriggeredAbility.java index 0f5dddfd563..f84505313f8 100644 --- a/Mage/src/main/java/mage/abilities/common/BecomesTappedAttachedTriggeredAbility.java +++ b/Mage/src/main/java/mage/abilities/common/BecomesTappedAttachedTriggeredAbility.java @@ -19,7 +19,7 @@ public class BecomesTappedAttachedTriggeredAbility extends TriggeredAbilityImpl public BecomesTappedAttachedTriggeredAbility(Effect effect, String description, boolean isOptional) { super(Zone.BATTLEFIELD, effect, isOptional); - setTriggerPhrase("Whenever " + description + " becomes tapped, "); + setTriggerPhrase(getWhen() + description + " becomes tapped, "); } protected BecomesTappedAttachedTriggeredAbility(final BecomesTappedAttachedTriggeredAbility ability) { diff --git a/Mage/src/main/java/mage/abilities/common/BlocksSourceTriggeredAbility.java b/Mage/src/main/java/mage/abilities/common/BlocksSourceTriggeredAbility.java index 5a652d9cd75..ee7962204c4 100644 --- a/Mage/src/main/java/mage/abilities/common/BlocksSourceTriggeredAbility.java +++ b/Mage/src/main/java/mage/abilities/common/BlocksSourceTriggeredAbility.java @@ -18,6 +18,7 @@ public class BlocksSourceTriggeredAbility extends TriggeredAbilityImpl { public BlocksSourceTriggeredAbility(Effect effect, boolean optional) { super(Zone.BATTLEFIELD, effect, optional); setTriggerPhrase("Whenever {this} blocks, "); + this.replaceRuleText = true; } protected BlocksSourceTriggeredAbility(final BlocksSourceTriggeredAbility ability) { diff --git a/Mage/src/main/java/mage/abilities/common/DealsCombatDamageToAPlayerTriggeredAbility.java b/Mage/src/main/java/mage/abilities/common/DealsCombatDamageToAPlayerTriggeredAbility.java index 62a709612e5..54c26399e82 100644 --- a/Mage/src/main/java/mage/abilities/common/DealsCombatDamageToAPlayerTriggeredAbility.java +++ b/Mage/src/main/java/mage/abilities/common/DealsCombatDamageToAPlayerTriggeredAbility.java @@ -2,9 +2,6 @@ package mage.abilities.common; import mage.abilities.TriggeredAbilityImpl; import mage.abilities.effects.Effect; -import mage.abilities.effects.common.ExileSourceEffect; -import mage.abilities.effects.common.SacrificeSourceEffect; -import mage.abilities.effects.common.ShuffleIntoLibrarySourceEffect; import mage.constants.Zone; import mage.game.Game; import mage.game.events.DamagedEvent; @@ -25,10 +22,7 @@ public class DealsCombatDamageToAPlayerTriggeredAbility extends TriggeredAbility public DealsCombatDamageToAPlayerTriggeredAbility(Effect effect, boolean optional, boolean setTargetPointer) { super(Zone.BATTLEFIELD, effect, optional); this.setTargetPointer = setTargetPointer; - boolean textWhen = !optional && (effect instanceof SacrificeSourceEffect - || effect instanceof ShuffleIntoLibrarySourceEffect - || effect instanceof ExileSourceEffect); - setTriggerPhrase((textWhen ? "When" : "Whenever") + " {this} deals combat damage to a player, "); + setTriggerPhrase(getWhen() + "{this} deals combat damage to a player, "); this.replaceRuleText = true; } diff --git a/Mage/src/main/java/mage/abilities/common/DiscardedByOpponentTriggeredAbility.java b/Mage/src/main/java/mage/abilities/common/DiscardedByOpponentTriggeredAbility.java index 644956352ae..75e3df42573 100644 --- a/Mage/src/main/java/mage/abilities/common/DiscardedByOpponentTriggeredAbility.java +++ b/Mage/src/main/java/mage/abilities/common/DiscardedByOpponentTriggeredAbility.java @@ -5,7 +5,6 @@ import mage.abilities.effects.Effect; import mage.constants.Zone; import mage.game.Game; import mage.game.events.GameEvent; -import mage.game.events.GameEvent.EventType; import mage.game.stack.StackObject; /** @@ -17,9 +16,10 @@ public class DiscardedByOpponentTriggeredAbility extends TriggeredAbilityImpl { this(effect, false); } - public DiscardedByOpponentTriggeredAbility(Effect effect, boolean optional) { - super(Zone.GRAVEYARD, effect, optional); - setTriggerPhrase("When a spell or ability an opponent controls causes you to discard this card, "); + public DiscardedByOpponentTriggeredAbility(Effect effect, boolean textCardName) { + super(Zone.GRAVEYARD, effect, false); + setTriggerPhrase("When a spell or ability an opponent controls causes you to discard " + + (textCardName ? "{this}, " : "this card, ")); } protected DiscardedByOpponentTriggeredAbility(final DiscardedByOpponentTriggeredAbility ability) { diff --git a/Mage/src/main/java/mage/abilities/common/DrawCardControllerTriggeredAbility.java b/Mage/src/main/java/mage/abilities/common/DrawCardControllerTriggeredAbility.java index 0480ae70bf5..299c6fca613 100644 --- a/Mage/src/main/java/mage/abilities/common/DrawCardControllerTriggeredAbility.java +++ b/Mage/src/main/java/mage/abilities/common/DrawCardControllerTriggeredAbility.java @@ -1,4 +1,3 @@ - package mage.abilities.common; import mage.abilities.TriggeredAbilityImpl; @@ -18,7 +17,7 @@ public class DrawCardControllerTriggeredAbility extends TriggeredAbilityImpl { public DrawCardControllerTriggeredAbility(Zone zone, Effect effect, boolean optional) { super(zone, effect, optional); - setTriggerPhrase("Whenever you draw a card, "); + setTriggerPhrase(getWhen() + "you draw a card, "); } protected DrawCardControllerTriggeredAbility(final DrawCardControllerTriggeredAbility ability) { diff --git a/Mage/src/main/java/mage/abilities/effects/Effects.java b/Mage/src/main/java/mage/abilities/effects/Effects.java index e78fad107eb..2cdc4d54bc5 100644 --- a/Mage/src/main/java/mage/abilities/effects/Effects.java +++ b/Mage/src/main/java/mage/abilities/effects/Effects.java @@ -105,6 +105,7 @@ public class Effects extends ArrayList { // add punctuation to very last rule. if (lastRule != null && lastRule.length() > 3 && !lastRule.endsWith(".") + && !lastRule.endsWith("!") && !lastRule.endsWith("\"") && !lastRule.endsWith(".]") && !lastRule.startsWith("LEVEL ") diff --git a/Mage/src/main/java/mage/abilities/effects/common/DestroySourceEffect.java b/Mage/src/main/java/mage/abilities/effects/common/DestroySourceEffect.java index 87adad19f96..73fb8e4012b 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/DestroySourceEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/DestroySourceEffect.java @@ -1,4 +1,3 @@ - package mage.abilities.effects.common; import mage.abilities.Ability; @@ -21,7 +20,7 @@ public class DestroySourceEffect extends OneShotEffect { public DestroySourceEffect(boolean noRegen) { super(Outcome.DestroyPermanent); this.noRegen = noRegen; - staticText = "destroy {this}"; + staticText = "destroy {this}" + (noRegen ? ". It can't be regenerated" : ""); } protected DestroySourceEffect(final DestroySourceEffect effect) { diff --git a/Mage/src/main/java/mage/abilities/effects/common/FlipSourceEffect.java b/Mage/src/main/java/mage/abilities/effects/common/FlipSourceEffect.java index b5a8f43facb..f82cd316c4b 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/FlipSourceEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/FlipSourceEffect.java @@ -21,7 +21,7 @@ public class FlipSourceEffect extends OneShotEffect { public FlipSourceEffect(Token flipToken) { super(Outcome.BecomeCreature); this.flipToken = flipToken; - staticText = "flip it"; + staticText = "flip {this}"; } protected FlipSourceEffect(final FlipSourceEffect effect) { diff --git a/Mage/src/main/java/mage/abilities/effects/common/combat/CantAttackBlockUnlessPaysSourceEffect.java b/Mage/src/main/java/mage/abilities/effects/common/combat/CantAttackBlockUnlessPaysSourceEffect.java index 235acfa0484..4df490f51f0 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/combat/CantAttackBlockUnlessPaysSourceEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/combat/CantAttackBlockUnlessPaysSourceEffect.java @@ -17,7 +17,7 @@ public class CantAttackBlockUnlessPaysSourceEffect extends PayCostToAttackBlockE public CantAttackBlockUnlessPaysSourceEffect(Cost cost, RestrictType restrictType) { super(Duration.WhileOnBattlefield, Outcome.Detriment, restrictType, cost); staticText = "{this} can't " + restrictType.toString() + " unless you " + (cost == null ? "" : cost.getText()) - + (restrictType == RestrictType.ATTACK ? " (This cost is paid as attackers are declared.)" : ""); + + (restrictType == RestrictType.ATTACK ? ". (This cost is paid as attackers are declared.)" : ""); } public CantAttackBlockUnlessPaysSourceEffect(ManaCosts manaCosts, RestrictType restrictType) { diff --git a/Mage/src/main/java/mage/abilities/keyword/InspiredAbility.java b/Mage/src/main/java/mage/abilities/keyword/InspiredAbility.java index e7b3ae920fa..38711040a63 100644 --- a/Mage/src/main/java/mage/abilities/keyword/InspiredAbility.java +++ b/Mage/src/main/java/mage/abilities/keyword/InspiredAbility.java @@ -28,6 +28,7 @@ public class InspiredAbility extends TriggeredAbilityImpl { setAbilityWord(AbilityWord.INSPIRED); } setTriggerPhrase("Whenever {this} becomes untapped, "); + this.replaceRuleText = true; } protected InspiredAbility(final InspiredAbility ability) { diff --git a/Mage/src/main/java/mage/abilities/keyword/ProtectionAbility.java b/Mage/src/main/java/mage/abilities/keyword/ProtectionAbility.java index a7bdf2f330b..e9cab133d3b 100644 --- a/Mage/src/main/java/mage/abilities/keyword/ProtectionAbility.java +++ b/Mage/src/main/java/mage/abilities/keyword/ProtectionAbility.java @@ -75,7 +75,8 @@ public class ProtectionAbility extends StaticAbility { @Override public String getRule() { - return "protection from " + filter.getMessage() + (removeAuras ? "" : ". This effect doesn't remove Auras."); + return (flavorWord == null ? "protection from " : CardUtil.italicizeWithEmDash(flavorWord) + "Protection from ") + + filter.getMessage() + (removeAuras ? "" : ". This effect doesn't remove Auras."); } public boolean canTarget(MageObject source, Game game) { @@ -125,7 +126,7 @@ public class ProtectionAbility extends StaticAbility { return true; } - private static final String getFilterText(ObjectColor color) { + private static String getFilterText(ObjectColor color) { return CardUtil.concatWithAnd( color.getColors() .stream()