From 014a4b6941e2fe855cff013b85c625405f5655c6 Mon Sep 17 00:00:00 2001 From: Evan Kranzler Date: Sat, 19 Feb 2022 22:21:02 -0500 Subject: [PATCH] [AER] various text fixes --- .../src/mage/cards/a/AerialModification.java | 2 +- Mage.Sets/src/mage/cards/a/AetherChaser.java | 3 +- Mage.Sets/src/mage/cards/a/AetherHerder.java | 3 +- .../src/mage/cards/a/AetherInspector.java | 3 +- Mage.Sets/src/mage/cards/a/AetherSwooper.java | 3 +- .../src/mage/cards/a/AetherstreamLeopard.java | 10 +- .../src/mage/cards/a/AidFromTheCowl.java | 2 +- .../src/mage/cards/a/AirdropAeronauts.java | 13 ++- .../src/mage/cards/a/AjaniUnyielding.java | 2 +- .../src/mage/cards/c/CaughtInTheBrights.java | 2 +- .../mage/cards/c/CountlessGearsRenegade.java | 16 +-- .../src/mage/cards/d/DarkIntimations.java | 2 +- .../src/mage/cards/d/DeadeyeHarpooner.java | 24 ++--- .../src/mage/cards/f/FelidarGuardian.java | 2 +- .../src/mage/cards/f/FourthBridgeProwler.java | 12 +-- .../src/mage/cards/g/GlintSleeveSiphoner.java | 10 +- .../src/mage/cards/g/GremlinInfestation.java | 4 +- .../src/mage/cards/h/HeraldOfAnguish.java | 15 +-- .../src/mage/cards/h/HiddenStockpile.java | 21 ++-- .../src/mage/cards/h/HinterlandDrake.java | 2 +- .../mage/cards/i/IllusionistsStratagem.java | 2 +- .../mage/cards/i/IndomitableCreativity.java | 2 +- .../src/mage/cards/i/InspiringStatuary.java | 2 +- .../mage/cards/k/KariZevSkyshipRaider.java | 2 +- .../src/mage/cards/l/LeaveInTheDust.java | 2 +- .../src/mage/cards/l/LifecraftAwakening.java | 5 +- .../src/mage/cards/l/LightningRunner.java | 4 +- .../src/mage/cards/n/NarnamRenegade.java | 17 ++- .../src/mage/cards/n/NightMarketAeronaut.java | 16 ++- Mage.Sets/src/mage/cards/p/ParadoxEngine.java | 9 +- .../src/mage/cards/r/RenegadeRallier.java | 20 ++-- .../src/mage/cards/r/ResourcefulReturn.java | 3 +- .../src/mage/cards/s/SalvageScuttler.java | 17 ++- .../src/mage/cards/s/ScroungingBandar.java | 2 +- Mage.Sets/src/mage/cards/s/SecretSalvage.java | 2 +- .../src/mage/cards/s/ShieldedAetherThief.java | 2 +- .../src/mage/cards/s/SiegeModification.java | 2 +- .../src/mage/cards/s/SilkweaverElite.java | 18 ++-- .../mage/cards/t/TezzeretMasterOfMetal.java | 15 ++- .../src/mage/cards/t/TezzeretsBetrayal.java | 6 +- Mage.Sets/src/mage/cards/t/TrophyMage.java | 11 +- .../src/mage/cards/u/UntetheredExpress.java | 2 +- .../mage/cards/y/YahenniUndyingPartisan.java | 19 ++-- .../java/mage/verify/VerifyCardDataTest.java | 2 +- .../common/DiesAttachedTriggeredAbility.java | 2 +- .../abilities/costs/common/PayEnergyCost.java | 2 +- .../RevealCardsFromLibraryUntilEffect.java | 102 +++++++++--------- .../permanent/token/EtheriumCellToken.java | 2 +- 48 files changed, 205 insertions(+), 236 deletions(-) diff --git a/Mage.Sets/src/mage/cards/a/AerialModification.java b/Mage.Sets/src/mage/cards/a/AerialModification.java index f31af20978..83aacbb8bf 100644 --- a/Mage.Sets/src/mage/cards/a/AerialModification.java +++ b/Mage.Sets/src/mage/cards/a/AerialModification.java @@ -24,7 +24,7 @@ import mage.target.TargetPermanent; */ public final class AerialModification extends CardImpl { - private static final FilterPermanent filter = new FilterPermanent("creature or vehicle"); + private static final FilterPermanent filter = new FilterPermanent("creature or Vehicle"); static { filter.add(Predicates.or(CardType.CREATURE.getPredicate(), diff --git a/Mage.Sets/src/mage/cards/a/AetherChaser.java b/Mage.Sets/src/mage/cards/a/AetherChaser.java index b6fa2065f9..7e13cf0556 100644 --- a/Mage.Sets/src/mage/cards/a/AetherChaser.java +++ b/Mage.Sets/src/mage/cards/a/AetherChaser.java @@ -36,8 +36,7 @@ public final class AetherChaser extends CardImpl { this.addAbility(new EntersBattlefieldTriggeredAbility(new GetEnergyCountersControllerEffect(2))); // Whenever Aether Chaser attacks, you may pay {E}{E}. If you do, create a 1/1 colorless Servo artifact creature token. - this.addAbility(new AttacksTriggeredAbility(new DoIfCostPaid(new CreateTokenEffect(new ServoToken()), new PayEnergyCost(2)), false, - "Whenever {this} attacks you may pay {E}{E}. If you do, create a 1/1 colorless Servo artifact creature token.")); + this.addAbility(new AttacksTriggeredAbility(new DoIfCostPaid(new CreateTokenEffect(new ServoToken()), new PayEnergyCost(2)))); } private AetherChaser(final AetherChaser card) { diff --git a/Mage.Sets/src/mage/cards/a/AetherHerder.java b/Mage.Sets/src/mage/cards/a/AetherHerder.java index dfb7b51e86..6365354912 100644 --- a/Mage.Sets/src/mage/cards/a/AetherHerder.java +++ b/Mage.Sets/src/mage/cards/a/AetherHerder.java @@ -34,8 +34,7 @@ public final class AetherHerder extends CardImpl { this.addAbility(new EntersBattlefieldTriggeredAbility(new GetEnergyCountersControllerEffect(2))); // Whenever Aether Herder attacks, you may pay {E}{E}. If you do, create a 1/1 colorless Servo artifact creature token. - this.addAbility(new AttacksTriggeredAbility(new DoIfCostPaid(new CreateTokenEffect(new ServoToken()), new PayEnergyCost(2)), false, - "Whenever {this} attacks you may pay {E}{E}. If you do, create a 1/1 colorless Servo artifact creature token.")); + this.addAbility(new AttacksTriggeredAbility(new DoIfCostPaid(new CreateTokenEffect(new ServoToken()), new PayEnergyCost(2)))); } private AetherHerder(final AetherHerder card) { diff --git a/Mage.Sets/src/mage/cards/a/AetherInspector.java b/Mage.Sets/src/mage/cards/a/AetherInspector.java index 6ba31ee973..6ea57c0701 100644 --- a/Mage.Sets/src/mage/cards/a/AetherInspector.java +++ b/Mage.Sets/src/mage/cards/a/AetherInspector.java @@ -36,8 +36,7 @@ public final class AetherInspector extends CardImpl { this.addAbility(new EntersBattlefieldTriggeredAbility(new GetEnergyCountersControllerEffect(2))); // Whenever Aether Inspector attacks, you may pay {E}{E}. If you do, create a 1/1 colorless Servo artifact creature token. - this.addAbility(new AttacksTriggeredAbility(new DoIfCostPaid(new CreateTokenEffect(new ServoToken()), new PayEnergyCost(2)), false, - "Whenever {this} attacks you may pay {E}{E}. If you do, create a 1/1 colorless Servo artifact creature token.")); + this.addAbility(new AttacksTriggeredAbility(new DoIfCostPaid(new CreateTokenEffect(new ServoToken()), new PayEnergyCost(2)))); } private AetherInspector(final AetherInspector card) { diff --git a/Mage.Sets/src/mage/cards/a/AetherSwooper.java b/Mage.Sets/src/mage/cards/a/AetherSwooper.java index ad7cf1aab4..5aa40c707d 100644 --- a/Mage.Sets/src/mage/cards/a/AetherSwooper.java +++ b/Mage.Sets/src/mage/cards/a/AetherSwooper.java @@ -37,8 +37,7 @@ public final class AetherSwooper extends CardImpl { this.addAbility(new EntersBattlefieldTriggeredAbility(new GetEnergyCountersControllerEffect(2))); // Whenever Aether Swooper attacks, you may pay {E}{E}. If you do, create a 1/1 colorless Servo artifact creature token. - this.addAbility(new AttacksTriggeredAbility(new DoIfCostPaid(new CreateTokenEffect(new ServoToken()), new PayEnergyCost(2)), false, - "Whenever {this} attacks you may pay {E}{E}. If you do, create a 1/1 colorless Servo artifact creature token.")); + this.addAbility(new AttacksTriggeredAbility(new DoIfCostPaid(new CreateTokenEffect(new ServoToken()), new PayEnergyCost(2)))); } private AetherSwooper(final AetherSwooper card) { diff --git a/Mage.Sets/src/mage/cards/a/AetherstreamLeopard.java b/Mage.Sets/src/mage/cards/a/AetherstreamLeopard.java index e10a884841..7c63853017 100644 --- a/Mage.Sets/src/mage/cards/a/AetherstreamLeopard.java +++ b/Mage.Sets/src/mage/cards/a/AetherstreamLeopard.java @@ -1,7 +1,5 @@ - package mage.cards.a; -import java.util.UUID; import mage.MageInt; import mage.abilities.common.AttacksTriggeredAbility; import mage.abilities.common.EntersBattlefieldTriggeredAbility; @@ -16,8 +14,9 @@ import mage.constants.CardType; import mage.constants.Duration; import mage.constants.SubType; +import java.util.UUID; + /** - * * @author fireshoes */ public final class AetherstreamLeopard extends CardImpl { @@ -36,8 +35,9 @@ public final class AetherstreamLeopard extends CardImpl { this.addAbility(new EntersBattlefieldTriggeredAbility(new GetEnergyCountersControllerEffect(1))); // Whenever Aetherstream Leopard attacks, you may pay {E}. If you do, it gets +2/+0 until end of turn. - this.addAbility(new AttacksTriggeredAbility(new DoIfCostPaid(new BoostSourceEffect(2, 0, Duration.EndOfTurn), new PayEnergyCost(1)), false, - "Whenever {this} attacks you may pay {E}. If you do, it gets +2/+0 until end of turn.")); + this.addAbility(new AttacksTriggeredAbility(new DoIfCostPaid(new BoostSourceEffect( + 2, 0, Duration.EndOfTurn + ).setText("it gets +2/+0 until end of turn"), new PayEnergyCost(1)))); } private AetherstreamLeopard(final AetherstreamLeopard card) { diff --git a/Mage.Sets/src/mage/cards/a/AidFromTheCowl.java b/Mage.Sets/src/mage/cards/a/AidFromTheCowl.java index adfcd640ca..5794ef8914 100644 --- a/Mage.Sets/src/mage/cards/a/AidFromTheCowl.java +++ b/Mage.Sets/src/mage/cards/a/AidFromTheCowl.java @@ -25,7 +25,7 @@ import mage.watchers.common.RevoltWatcher; public final class AidFromTheCowl extends CardImpl { private static final String ruleText = "Revolt — At the beginning of your end step, if a permanent you controlled left the battlefield this turn, " - + "reveal the top card of your library. If it's a permanent card, you may put it onto the battlefield. Otherwise, put it on the bottom of your library."; + + "reveal the top card of your library. If it's a permanent card, you may put it onto the battlefield. Otherwise, you may put it on the bottom of your library."; public AidFromTheCowl(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{3}{G}{G}"); diff --git a/Mage.Sets/src/mage/cards/a/AirdropAeronauts.java b/Mage.Sets/src/mage/cards/a/AirdropAeronauts.java index a60bbe3aef..d62249d408 100644 --- a/Mage.Sets/src/mage/cards/a/AirdropAeronauts.java +++ b/Mage.Sets/src/mage/cards/a/AirdropAeronauts.java @@ -1,7 +1,5 @@ - package mage.cards.a; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldTriggeredAbility; @@ -16,8 +14,9 @@ import mage.constants.CardType; import mage.constants.SubType; import mage.watchers.common.RevoltWatcher; +import java.util.UUID; + /** - * * @author Styxo */ public final class AirdropAeronauts extends CardImpl { @@ -34,10 +33,10 @@ public final class AirdropAeronauts extends CardImpl { this.addAbility(FlyingAbility.getInstance()); // Revolt — When Airdrop Aeronauts enters the battlefield, if a permanent you controlled left the battlefield this turn, you gain 5 life. - Ability ability = new ConditionalInterveningIfTriggeredAbility(new EntersBattlefieldTriggeredAbility( - new GainLifeEffect(5), false), RevoltCondition.instance, - "Revolt — When {this} enters the battlefield, if a permanent you controlled left" - + " the battlefield this turn, you gain 5 life." + Ability ability = new ConditionalInterveningIfTriggeredAbility( + new EntersBattlefieldTriggeredAbility(new GainLifeEffect(5), false), + RevoltCondition.instance, "When {this} enters the battlefield, " + + "if a permanent you controlled left the battlefield this turn, you gain 5 life." ); ability.setAbilityWord(AbilityWord.REVOLT); this.addAbility(ability, new RevoltWatcher()); diff --git a/Mage.Sets/src/mage/cards/a/AjaniUnyielding.java b/Mage.Sets/src/mage/cards/a/AjaniUnyielding.java index a6c189f003..786318a9df 100644 --- a/Mage.Sets/src/mage/cards/a/AjaniUnyielding.java +++ b/Mage.Sets/src/mage/cards/a/AjaniUnyielding.java @@ -52,7 +52,7 @@ public final class AjaniUnyielding extends CardImpl { // -9: Put five +1/+1 counters on each creature you control and five loyalty counters on each other planeswalker you control. LoyaltyAbility ajaniAbility3 = new LoyaltyAbility(new AddCountersAllEffect(CounterType.P1P1.createInstance(5), new FilterControlledCreaturePermanent()), -9); - ajaniAbility3.addEffect(new AddCountersAllEffect(CounterType.LOYALTY.createInstance(5), planeswalkerFilter)); + ajaniAbility3.addEffect(new AddCountersAllEffect(CounterType.LOYALTY.createInstance(5), planeswalkerFilter).setText("and five loyalty counters on each other planeswalker you control")); this.addAbility(ajaniAbility3); } diff --git a/Mage.Sets/src/mage/cards/c/CaughtInTheBrights.java b/Mage.Sets/src/mage/cards/c/CaughtInTheBrights.java index 8a5e6d559d..cb593ab1d9 100644 --- a/Mage.Sets/src/mage/cards/c/CaughtInTheBrights.java +++ b/Mage.Sets/src/mage/cards/c/CaughtInTheBrights.java @@ -44,7 +44,7 @@ public final class CaughtInTheBrights extends CardImpl { this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new CantAttackBlockAttachedEffect(AttachmentType.AURA))); // When a Vehicle you control attacks, exile enchanted creature. - this.addAbility(new AttacksAllTriggeredAbility(new ExileAttachedEffect(), false, filter, SetTargetPointer.NONE, false)); + this.addAbility(new AttacksAllTriggeredAbility(new ExileAttachedEffect(), false, filter, SetTargetPointer.NONE, false).setTriggerPhrase("When a Vehicle you control attacks, ")); } private CaughtInTheBrights(final CaughtInTheBrights card) { diff --git a/Mage.Sets/src/mage/cards/c/CountlessGearsRenegade.java b/Mage.Sets/src/mage/cards/c/CountlessGearsRenegade.java index 374e9212c7..96974b3321 100644 --- a/Mage.Sets/src/mage/cards/c/CountlessGearsRenegade.java +++ b/Mage.Sets/src/mage/cards/c/CountlessGearsRenegade.java @@ -1,7 +1,5 @@ - package mage.cards.c; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldTriggeredAbility; @@ -16,6 +14,8 @@ import mage.constants.SubType; import mage.game.permanent.token.ServoToken; import mage.watchers.common.RevoltWatcher; +import java.util.UUID; + /** * @author JRHerlehy */ @@ -31,13 +31,13 @@ public final class CountlessGearsRenegade extends CardImpl { // Revolt — When Countless Gears Renegade enters the battlefield, if a permanent you controlled // left the battlefield this turn, create a 1/1 colorless Servo artifact creature token. - Ability ability = new ConditionalInterveningIfTriggeredAbility(new EntersBattlefieldTriggeredAbility( - new CreateTokenEffect(new ServoToken(), 1), false), RevoltCondition.instance, - "Revolt — When {this} enters the battlefield, if a permanent you controlled left" - + " the battlefield this turn, create a 1/1 colorless Servo artifact creature token."); + Ability ability = new ConditionalInterveningIfTriggeredAbility( + new EntersBattlefieldTriggeredAbility(new CreateTokenEffect(new ServoToken()), false), + RevoltCondition.instance, "When {this} enters the battlefield, if a permanent you controlled " + + "left the battlefield this turn, create a 1/1 colorless Servo artifact creature token." + ); ability.setAbilityWord(AbilityWord.REVOLT); - ability.addWatcher(new RevoltWatcher()); - this.addAbility(ability); + this.addAbility(ability, new RevoltWatcher()); } private CountlessGearsRenegade(final CountlessGearsRenegade card) { diff --git a/Mage.Sets/src/mage/cards/d/DarkIntimations.java b/Mage.Sets/src/mage/cards/d/DarkIntimations.java index 2397f33caf..947dff69c8 100644 --- a/Mage.Sets/src/mage/cards/d/DarkIntimations.java +++ b/Mage.Sets/src/mage/cards/d/DarkIntimations.java @@ -48,7 +48,7 @@ public final class DarkIntimations extends CardImpl { this.getSpellAbility().addEffect(new DarkIntimationsEffect()); // When you cast a Bolas planeswalker spell, exile Dark Intimations from your graveyard. That planeswalker enters the battlefield with an additional loyalty counter on it. - this.addAbility(new SpellCastControllerTriggeredAbility(Zone.GRAVEYARD, new DarkIntimationsGraveyardEffect(), filter, false, true)); + this.addAbility(new SpellCastControllerTriggeredAbility(Zone.GRAVEYARD, new DarkIntimationsGraveyardEffect(), filter, false, true).setTriggerPhrase("When you cast a Bolas planeswalker spell, ")); } private DarkIntimations(final DarkIntimations card) { diff --git a/Mage.Sets/src/mage/cards/d/DeadeyeHarpooner.java b/Mage.Sets/src/mage/cards/d/DeadeyeHarpooner.java index 05ea3661bb..f6912f11f9 100644 --- a/Mage.Sets/src/mage/cards/d/DeadeyeHarpooner.java +++ b/Mage.Sets/src/mage/cards/d/DeadeyeHarpooner.java @@ -1,7 +1,5 @@ - package mage.cards.d; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldTriggeredAbility; @@ -13,18 +11,21 @@ import mage.cards.CardSetInfo; import mage.constants.AbilityWord; import mage.constants.CardType; import mage.constants.SubType; +import mage.filter.FilterPermanent; import mage.filter.common.FilterOpponentsCreaturePermanent; import mage.filter.predicate.permanent.TappedPredicate; -import mage.target.common.TargetOpponentsCreaturePermanent; +import mage.target.TargetPermanent; import mage.watchers.common.RevoltWatcher; +import java.util.UUID; + /** - * * @author Styxo */ public final class DeadeyeHarpooner extends CardImpl { - private static final FilterOpponentsCreaturePermanent filter = new FilterOpponentsCreaturePermanent("tapped creature an opponent controls"); + private static final FilterPermanent filter + = new FilterOpponentsCreaturePermanent("tapped creature an opponent controls"); static { filter.add(TappedPredicate.TAPPED); @@ -39,15 +40,14 @@ public final class DeadeyeHarpooner extends CardImpl { this.toughness = new MageInt(2); // Revolt — When Deadeye Harpooner enters the battlefield, if a permanent you controlled left the battlefield this turn, destroy target tapped creature an opponent controls. - Ability ability = new ConditionalInterveningIfTriggeredAbility(new EntersBattlefieldTriggeredAbility( - new DestroyTargetEffect(), false), RevoltCondition.instance, - "Revolt — When {this} enters the battlefield, if a permanent you controlled left" - + " the battlefield this turn, destroy target tapped creature an opponent controls." + Ability ability = new ConditionalInterveningIfTriggeredAbility( + new EntersBattlefieldTriggeredAbility(new DestroyTargetEffect(), false), + RevoltCondition.instance, "When {this} enters the battlefield, if a permanent you controlled " + + "left the battlefield this turn, destroy target tapped creature an opponent controls." ); ability.setAbilityWord(AbilityWord.REVOLT); - ability.addTarget(new TargetOpponentsCreaturePermanent(filter)); - ability.addWatcher(new RevoltWatcher()); - this.addAbility(ability); + ability.addTarget(new TargetPermanent(filter)); + this.addAbility(ability, new RevoltWatcher()); } private DeadeyeHarpooner(final DeadeyeHarpooner card) { diff --git a/Mage.Sets/src/mage/cards/f/FelidarGuardian.java b/Mage.Sets/src/mage/cards/f/FelidarGuardian.java index 155d6d53fa..5bb596028b 100644 --- a/Mage.Sets/src/mage/cards/f/FelidarGuardian.java +++ b/Mage.Sets/src/mage/cards/f/FelidarGuardian.java @@ -36,7 +36,7 @@ public final class FelidarGuardian extends CardImpl { // When Felidar Guardian enters the battlefield, you may exile another target permanent you control, then return that card to the battlefield under its owner's control. Ability ability = new EntersBattlefieldTriggeredAbility(new ExileTargetForSourceEffect(), true); - ability.addEffect(new ReturnToBattlefieldUnderOwnerControlTargetEffect(false, false)); + ability.addEffect(new ReturnToBattlefieldUnderOwnerControlTargetEffect(false, false).concatBy(",")); ability.addTarget(new TargetControlledPermanent(filter)); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/f/FourthBridgeProwler.java b/Mage.Sets/src/mage/cards/f/FourthBridgeProwler.java index 12f1e80972..8c7ea0c977 100644 --- a/Mage.Sets/src/mage/cards/f/FourthBridgeProwler.java +++ b/Mage.Sets/src/mage/cards/f/FourthBridgeProwler.java @@ -1,21 +1,18 @@ - package mage.cards.f; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldTriggeredAbility; -import mage.abilities.effects.Effect; import mage.abilities.effects.common.continuous.BoostTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; -import mage.constants.Duration; import mage.target.common.TargetCreaturePermanent; +import java.util.UUID; + /** - * * @author LevelX2 */ public final class FourthBridgeProwler extends CardImpl { @@ -29,9 +26,8 @@ public final class FourthBridgeProwler extends CardImpl { this.toughness = new MageInt(1); // When Fourth Bridge Prowler enters the battlefield, you may have target creature get -1/-1 until end of turn. - Effect effect = new BoostTargetEffect(-1, -1, Duration.EndOfTurn); - effect.setText("have target creature get -1/-1 until end of turn"); - Ability ability = new EntersBattlefieldTriggeredAbility(effect, true); + Ability ability = new EntersBattlefieldTriggeredAbility(new BoostTargetEffect(-1, -1) + .setText("you may have target creature get -1/-1 until end of turn"), true); ability.addTarget(new TargetCreaturePermanent()); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/g/GlintSleeveSiphoner.java b/Mage.Sets/src/mage/cards/g/GlintSleeveSiphoner.java index dad8c4c9ba..fb07399e7b 100644 --- a/Mage.Sets/src/mage/cards/g/GlintSleeveSiphoner.java +++ b/Mage.Sets/src/mage/cards/g/GlintSleeveSiphoner.java @@ -4,7 +4,6 @@ import mage.MageInt; import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; import mage.abilities.common.EntersBattlefieldOrAttacksSourceTriggeredAbility; import mage.abilities.costs.common.PayEnergyCost; -import mage.abilities.effects.Effect; import mage.abilities.effects.common.DoIfCostPaid; import mage.abilities.effects.common.DrawCardSourceControllerEffect; import mage.abilities.effects.common.LoseLifeSourceControllerEffect; @@ -15,7 +14,6 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; import mage.constants.TargetController; -import mage.constants.Zone; import java.util.UUID; @@ -39,11 +37,9 @@ public final class GlintSleeveSiphoner extends CardImpl { this.addAbility(new EntersBattlefieldOrAttacksSourceTriggeredAbility(new GetEnergyCountersControllerEffect(1))); // At the beginning of your upkeep, you may pay {E}{E}. If you do, draw a card and you lose 1 life. - DoIfCostPaid doIfCostPaidEffect = new DoIfCostPaid(new DrawCardSourceControllerEffect(1), new PayEnergyCost(2)); - Effect effect = new LoseLifeSourceControllerEffect(1); - doIfCostPaidEffect.addEffect(effect.concatBy("and")); - this.addAbility(new BeginningOfUpkeepTriggeredAbility(Zone.BATTLEFIELD, doIfCostPaidEffect, TargetController.YOU, false, false, - "At the beginning of your upkeep, ")); + this.addAbility(new BeginningOfUpkeepTriggeredAbility(new DoIfCostPaid( + new DrawCardSourceControllerEffect(1).setText("you draw a card"), new PayEnergyCost(2) + ).addEffect(new LoseLifeSourceControllerEffect(1).concatBy("and")), TargetController.YOU, false)); } private GlintSleeveSiphoner(final GlintSleeveSiphoner card) { diff --git a/Mage.Sets/src/mage/cards/g/GremlinInfestation.java b/Mage.Sets/src/mage/cards/g/GremlinInfestation.java index c99b79595a..d0b7af76eb 100644 --- a/Mage.Sets/src/mage/cards/g/GremlinInfestation.java +++ b/Mage.Sets/src/mage/cards/g/GremlinInfestation.java @@ -39,9 +39,7 @@ public final class GremlinInfestation extends CardImpl { this.addAbility(ability); // At the beginning of your end step, Gremlin Infestation deals 2 damage to enchanted artifact's controller. - Effect effect = new DamageAttachedControllerEffect(2); - effect.setText("{this} deals 2 damage to enchanted artifact's controller"); - this.addAbility(new BeginningOfEndStepTriggeredAbility(new DamageAttachedControllerEffect(2), TargetController.YOU, false)); + this.addAbility(new BeginningOfEndStepTriggeredAbility(new DamageAttachedControllerEffect(2).setText("{this} deals 2 damage to enchanted artifact's controller"), TargetController.YOU, false)); // When enchanted artifact is put into a graveyard, create a 2/2 red Gremlin creature token. this.addAbility(new DiesAttachedTriggeredAbility(new CreateTokenEffect(new GremlinToken()), "enchanted artifact", false, false)); diff --git a/Mage.Sets/src/mage/cards/h/HeraldOfAnguish.java b/Mage.Sets/src/mage/cards/h/HeraldOfAnguish.java index ca30a58bf7..ebd207e12f 100644 --- a/Mage.Sets/src/mage/cards/h/HeraldOfAnguish.java +++ b/Mage.Sets/src/mage/cards/h/HeraldOfAnguish.java @@ -1,7 +1,5 @@ - package mage.cards.h; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.BeginningOfYourEndStepTriggeredAbility; @@ -14,17 +12,14 @@ import mage.abilities.keyword.FlyingAbility; import mage.abilities.keyword.ImproviseAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.SubType; -import mage.constants.Duration; -import mage.constants.TargetController; -import mage.constants.Zone; -import mage.filter.common.FilterControlledArtifactPermanent; +import mage.constants.*; +import mage.filter.StaticFilters; import mage.target.common.TargetControlledPermanent; import mage.target.common.TargetCreaturePermanent; +import java.util.UUID; + /** - * * @author fireshoes */ public final class HeraldOfAnguish extends CardImpl { @@ -47,7 +42,7 @@ public final class HeraldOfAnguish extends CardImpl { // {1}{B}, Sacrifice an artifact: Target creature gets -2/-2 until end of turn. Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostTargetEffect(-2, -2, Duration.EndOfTurn), new ManaCostsImpl("{1}{B}")); - ability.addCost(new SacrificeTargetCost(new TargetControlledPermanent(new FilterControlledArtifactPermanent()))); + ability.addCost(new SacrificeTargetCost(new TargetControlledPermanent(StaticFilters.FILTER_CONTROLLED_PERMANENT_ARTIFACT_AN))); ability.addTarget(new TargetCreaturePermanent()); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/h/HiddenStockpile.java b/Mage.Sets/src/mage/cards/h/HiddenStockpile.java index a7e9e6ade6..5708f76fab 100644 --- a/Mage.Sets/src/mage/cards/h/HiddenStockpile.java +++ b/Mage.Sets/src/mage/cards/h/HiddenStockpile.java @@ -1,7 +1,5 @@ - package mage.cards.h; -import java.util.UUID; import mage.abilities.Ability; import mage.abilities.common.BeginningOfYourEndStepTriggeredAbility; import mage.abilities.common.SimpleActivatedAbility; @@ -15,14 +13,15 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.AbilityWord; import mage.constants.CardType; -import mage.constants.Zone; -import static mage.filter.StaticFilters.FILTER_CONTROLLED_CREATURE_SHORT_TEXT; import mage.game.permanent.token.ServoToken; import mage.target.common.TargetControlledCreaturePermanent; import mage.watchers.common.RevoltWatcher; +import java.util.UUID; + +import static mage.filter.StaticFilters.FILTER_CONTROLLED_CREATURE_SHORT_TEXT; + /** - * * @author LevelX2 */ public final class HiddenStockpile extends CardImpl { @@ -31,14 +30,14 @@ public final class HiddenStockpile extends CardImpl { super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{W}{B}"); // Revolt — At the beginning of your end step, if a permanent you controlled left the battlefield this turn, create a 1/1 colorless Servo artifact creature token. - Ability ability = new ConditionalInterveningIfTriggeredAbility(new BeginningOfYourEndStepTriggeredAbility(new CreateTokenEffect(new ServoToken()), false), RevoltCondition.instance, - "Revolt — At the beginning of your end step, if a permanent you controlled left the battlefield this turn, create a 1/1 colorless Servo artifact creature token."); - ability.setAbilityWord(AbilityWord.REVOLT); - ability.addWatcher(new RevoltWatcher()); - this.addAbility(ability); + this.addAbility(new ConditionalInterveningIfTriggeredAbility( + new BeginningOfYourEndStepTriggeredAbility(new CreateTokenEffect(new ServoToken()), false), + RevoltCondition.instance, "At the beginning of your end step, if a permanent you controlled " + + "left the battlefield this turn, create a 1/1 colorless Servo artifact creature token." + ).setAbilityWord(AbilityWord.REVOLT), new RevoltWatcher()); // {1}, Sacrifice a creature: Scry 1. - ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new ScryEffect(1, false), new GenericManaCost(1)); + Ability ability = new SimpleActivatedAbility(new ScryEffect(1, false), new GenericManaCost(1)); ability.addCost(new SacrificeTargetCost(new TargetControlledCreaturePermanent(FILTER_CONTROLLED_CREATURE_SHORT_TEXT))); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/h/HinterlandDrake.java b/Mage.Sets/src/mage/cards/h/HinterlandDrake.java index df9ac61ec0..dc136208ef 100644 --- a/Mage.Sets/src/mage/cards/h/HinterlandDrake.java +++ b/Mage.Sets/src/mage/cards/h/HinterlandDrake.java @@ -32,7 +32,7 @@ public final class HinterlandDrake extends CardImpl { // Hinterland Drake can't block artifact creatures. Effect effect = new CantBlockCreaturesSourceEffect(StaticFilters.FILTER_PERMANENT_ARTIFACT_CREATURE); - effect.setText("{this} can't block artifact creatures"); + effect.setText("{this} can't block artifact creatures"); this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, effect)); } diff --git a/Mage.Sets/src/mage/cards/i/IllusionistsStratagem.java b/Mage.Sets/src/mage/cards/i/IllusionistsStratagem.java index 9b2de6deaf..179ced6e00 100644 --- a/Mage.Sets/src/mage/cards/i/IllusionistsStratagem.java +++ b/Mage.Sets/src/mage/cards/i/IllusionistsStratagem.java @@ -27,7 +27,7 @@ public final class IllusionistsStratagem extends CardImpl { StaticFilters.FILTER_CONTROLLED_CREATURES, false)); // Draw a card. - this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1)); + this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1).concatBy("
")); } private IllusionistsStratagem(final IllusionistsStratagem card) { diff --git a/Mage.Sets/src/mage/cards/i/IndomitableCreativity.java b/Mage.Sets/src/mage/cards/i/IndomitableCreativity.java index 679e186ad3..b0c9866c23 100644 --- a/Mage.Sets/src/mage/cards/i/IndomitableCreativity.java +++ b/Mage.Sets/src/mage/cards/i/IndomitableCreativity.java @@ -71,7 +71,7 @@ class IndomitableCreativityEffect extends OneShotEffect { "For each permanent destroyed this way, " + "its controller reveals cards from the top of their library" + " until an artifact or creature card is revealed and exiles that card. " + - "Those players put the exiled card onto the battlefield, then shuffle"; + "Those players put the exiled cards onto the battlefield, then shuffle"; } public IndomitableCreativityEffect(final IndomitableCreativityEffect effect) { diff --git a/Mage.Sets/src/mage/cards/i/InspiringStatuary.java b/Mage.Sets/src/mage/cards/i/InspiringStatuary.java index 12e8bcda08..33270464a9 100644 --- a/Mage.Sets/src/mage/cards/i/InspiringStatuary.java +++ b/Mage.Sets/src/mage/cards/i/InspiringStatuary.java @@ -17,7 +17,7 @@ import java.util.UUID; */ public final class InspiringStatuary extends CardImpl { - private static final FilterCard filter = new FilterCard("non-artifact spells you cast"); + private static final FilterCard filter = new FilterCard("nonartifact spells"); static { filter.add(Predicates.not(CardType.ARTIFACT.getPredicate())); diff --git a/Mage.Sets/src/mage/cards/k/KariZevSkyshipRaider.java b/Mage.Sets/src/mage/cards/k/KariZevSkyshipRaider.java index da85aef699..d028250a9f 100644 --- a/Mage.Sets/src/mage/cards/k/KariZevSkyshipRaider.java +++ b/Mage.Sets/src/mage/cards/k/KariZevSkyshipRaider.java @@ -58,7 +58,7 @@ class KariZevSkyshipRaiderEffect extends OneShotEffect { KariZevSkyshipRaiderEffect() { super(Outcome.PutCreatureInPlay); - staticText = "create Ragaven, a legendary 2/1 red Monkey creature token. Ragavan enters the battlefied tapped and attacking. Exile that token at end of combat"; + staticText = "create Ragavan, a legendary 2/1 red Monkey creature token. Ragavan enters the battlefield tapped and attacking. Exile that token at end of combat"; } KariZevSkyshipRaiderEffect(final KariZevSkyshipRaiderEffect effect) { diff --git a/Mage.Sets/src/mage/cards/l/LeaveInTheDust.java b/Mage.Sets/src/mage/cards/l/LeaveInTheDust.java index 8647ad4a52..fdaf2059c2 100644 --- a/Mage.Sets/src/mage/cards/l/LeaveInTheDust.java +++ b/Mage.Sets/src/mage/cards/l/LeaveInTheDust.java @@ -23,7 +23,7 @@ public final class LeaveInTheDust extends CardImpl { this.getSpellAbility().addTarget(new TargetNonlandPermanent()); // Draw a card. - this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1)); + this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1).concatBy("
")); } diff --git a/Mage.Sets/src/mage/cards/l/LifecraftAwakening.java b/Mage.Sets/src/mage/cards/l/LifecraftAwakening.java index 9c08e51a19..8a539a44f7 100644 --- a/Mage.Sets/src/mage/cards/l/LifecraftAwakening.java +++ b/Mage.Sets/src/mage/cards/l/LifecraftAwakening.java @@ -37,8 +37,9 @@ public final class LifecraftAwakening extends CardImpl { super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{X}{G}"); // Put X +1/+1 counters on target artifact you control. If it isn't a creature or Vehicle, it becomes a 0/0 Construct artifact creature. - ManacostVariableValue manaX = ManacostVariableValue.REGULAR; - getSpellAbility().addEffect(new AddCountersTargetEffect(CounterType.P1P1.createInstance(), manaX)); + getSpellAbility().addEffect(new AddCountersTargetEffect( + CounterType.P1P1.createInstance(), ManacostVariableValue.REGULAR + ).setText("put X +1/+1 counters on target artifact you control")); getSpellAbility().addTarget(new TargetArtifactPermanent(filter)); getSpellAbility().addEffect(new LifecraftAwakeningEffect()); } diff --git a/Mage.Sets/src/mage/cards/l/LightningRunner.java b/Mage.Sets/src/mage/cards/l/LightningRunner.java index c22a3a5e39..2a1aa9ee4b 100644 --- a/Mage.Sets/src/mage/cards/l/LightningRunner.java +++ b/Mage.Sets/src/mage/cards/l/LightningRunner.java @@ -62,8 +62,8 @@ class LightningRunnerEffect extends OneShotEffect { LightningRunnerEffect() { super(Outcome.Benefit); - staticText = "you get {E}{E}, then you may pay {E}{E}{E}{E}{E}{E}{E}{E}. If you do, " - + "untap all creatures you control and after this phase, there is an additional combat phase"; + staticText = "you get {E}{E}, then you may pay {E}{E}{E}{E}{E}{E}{E}{E}. If you pay, " + + "untap all creatures you control, and after this phase, there is an additional combat phase"; } LightningRunnerEffect(final LightningRunnerEffect effect) { diff --git a/Mage.Sets/src/mage/cards/n/NarnamRenegade.java b/Mage.Sets/src/mage/cards/n/NarnamRenegade.java index a105199e1a..1a7f53b57a 100644 --- a/Mage.Sets/src/mage/cards/n/NarnamRenegade.java +++ b/Mage.Sets/src/mage/cards/n/NarnamRenegade.java @@ -1,7 +1,5 @@ - package mage.cards.n; -import java.util.UUID; import mage.MageInt; import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.condition.common.RevoltCondition; @@ -14,8 +12,9 @@ import mage.constants.SubType; import mage.counters.CounterType; import mage.watchers.common.RevoltWatcher; +import java.util.UUID; + /** - * * @author fireshoes */ public final class NarnamRenegade extends CardImpl { @@ -32,13 +31,11 @@ public final class NarnamRenegade extends CardImpl { this.addAbility(DeathtouchAbility.getInstance()); // Revolt — Narnam Renegade enters the battlefield with a +1/+1 counter on it if a permanent you controlled left this battlefield this turn. - this.addAbility( - new EntersBattlefieldAbility( - new AddCountersSourceEffect(CounterType.P1P1.createInstance()), - false, RevoltCondition.instance, - "Revolt — {this} enters the battlefield with a +1/+1 counter on it if a permanent you controlled left the battlefield this turn", null), - new RevoltWatcher() - ); + this.addAbility(new EntersBattlefieldAbility( + new AddCountersSourceEffect(CounterType.P1P1.createInstance()), false, + RevoltCondition.instance, "Revolt — {this} enters the battlefield with " + + "a +1/+1 counter on it if a permanent you controlled left the battlefield this turn.", null + ), new RevoltWatcher()); } private NarnamRenegade(final NarnamRenegade card) { diff --git a/Mage.Sets/src/mage/cards/n/NightMarketAeronaut.java b/Mage.Sets/src/mage/cards/n/NightMarketAeronaut.java index 9c0819d902..7a2a91fd8d 100644 --- a/Mage.Sets/src/mage/cards/n/NightMarketAeronaut.java +++ b/Mage.Sets/src/mage/cards/n/NightMarketAeronaut.java @@ -1,10 +1,6 @@ - - package mage.cards.n; -import java.util.UUID; import mage.MageInt; -import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.condition.common.RevoltCondition; import mage.abilities.effects.common.counter.AddCountersSourceEffect; @@ -16,6 +12,8 @@ import mage.constants.SubType; import mage.counters.CounterType; import mage.watchers.common.RevoltWatcher; +import java.util.UUID; + /** * @author JRHerlehy */ @@ -34,11 +32,11 @@ public final class NightMarketAeronaut extends CardImpl { // Revolt — Night Market Aeronaut enters the battlefield with a +1/+1 counter on it if // a permanent you controlled left the battlefield this turn. - Ability ability = new EntersBattlefieldAbility( - new AddCountersSourceEffect(CounterType.P1P1.createInstance()), false, RevoltCondition.instance, - "Revolt — {this} enters the battlefield with a +1/+1 counter on it if a permanent you controlled left the battlefield this turn", null); - ability.addWatcher(new RevoltWatcher()); - this.addAbility(ability); + this.addAbility(new EntersBattlefieldAbility( + new AddCountersSourceEffect(CounterType.P1P1.createInstance()), false, + RevoltCondition.instance, "Revolt — {this} enters the battlefield with " + + "a +1/+1 counter on it if a permanent you controlled left the battlefield this turn.", null + ), new RevoltWatcher()); } private NightMarketAeronaut(final NightMarketAeronaut card) { diff --git a/Mage.Sets/src/mage/cards/p/ParadoxEngine.java b/Mage.Sets/src/mage/cards/p/ParadoxEngine.java index 7f0757b868..f93b153a51 100644 --- a/Mage.Sets/src/mage/cards/p/ParadoxEngine.java +++ b/Mage.Sets/src/mage/cards/p/ParadoxEngine.java @@ -1,28 +1,31 @@ package mage.cards.p; -import java.util.UUID; import mage.abilities.common.SpellCastControllerTriggeredAbility; import mage.abilities.effects.common.UntapAllControllerEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SuperType; +import mage.filter.FilterPermanent; import mage.filter.common.FilterNonlandPermanent; +import java.util.UUID; + /** - * * @author fireshoes */ public final class ParadoxEngine extends CardImpl { + private static final FilterPermanent filter = new FilterNonlandPermanent("nonland permanents"); + public ParadoxEngine(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{5}"); this.addSuperType(SuperType.LEGENDARY); // Whenever you cast a spell, untap all nonland permanents you control. - this.addAbility(new SpellCastControllerTriggeredAbility(new UntapAllControllerEffect(new FilterNonlandPermanent()), false)); + this.addAbility(new SpellCastControllerTriggeredAbility(new UntapAllControllerEffect(filter), false)); } private ParadoxEngine(final ParadoxEngine card) { diff --git a/Mage.Sets/src/mage/cards/r/RenegadeRallier.java b/Mage.Sets/src/mage/cards/r/RenegadeRallier.java index f3a0bfc359..8b99f7d866 100644 --- a/Mage.Sets/src/mage/cards/r/RenegadeRallier.java +++ b/Mage.Sets/src/mage/cards/r/RenegadeRallier.java @@ -1,7 +1,5 @@ - package mage.cards.r; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldTriggeredAbility; @@ -12,15 +10,16 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.AbilityWord; import mage.constants.CardType; -import mage.constants.SubType; import mage.constants.ComparisonType; +import mage.constants.SubType; import mage.filter.common.FilterPermanentCard; import mage.filter.predicate.mageobject.ManaValuePredicate; import mage.target.common.TargetCardInYourGraveyard; import mage.watchers.common.RevoltWatcher; +import java.util.UUID; + /** - * * @author fireshoes */ public final class RenegadeRallier extends CardImpl { @@ -41,14 +40,13 @@ public final class RenegadeRallier extends CardImpl { // Revolt — When Renegade Rallier enters the battlefield, if a permanent you controlled left the battlefield this turn, // return target permanent card with converted mana cost 2 or less from your graveyard to your battlefield. - Ability ability = new ConditionalInterveningIfTriggeredAbility(new EntersBattlefieldTriggeredAbility( - new ReturnFromGraveyardToBattlefieldTargetEffect(), false), RevoltCondition.instance, - "Revolt — When {this} enters the battlefield, if a permanent you controlled left" - + " the battlefield this turn, return target permanent card with mana value 2 or less from your graveyard to the battlefield."); - ability.setAbilityWord(AbilityWord.REVOLT); + Ability ability = new ConditionalInterveningIfTriggeredAbility( + new EntersBattlefieldTriggeredAbility(new ReturnFromGraveyardToBattlefieldTargetEffect(), false), + RevoltCondition.instance, "When {this} enters the battlefield, if a permanent you controlled " + + "left the battlefield this turn, return target permanent card with mana value 2 or less from your graveyard to the battlefield." + ).setAbilityWord(AbilityWord.REVOLT); ability.addTarget(new TargetCardInYourGraveyard(filter)); - ability.addWatcher(new RevoltWatcher()); - this.addAbility(ability); + this.addAbility(ability, new RevoltWatcher()); } private RenegadeRallier(final RenegadeRallier card) { diff --git a/Mage.Sets/src/mage/cards/r/ResourcefulReturn.java b/Mage.Sets/src/mage/cards/r/ResourcefulReturn.java index 8bf98ff0a0..2b9e985c4c 100644 --- a/Mage.Sets/src/mage/cards/r/ResourcefulReturn.java +++ b/Mage.Sets/src/mage/cards/r/ResourcefulReturn.java @@ -5,6 +5,7 @@ import java.util.UUID; import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition; import mage.abilities.decorator.ConditionalOneShotEffect; import mage.abilities.effects.common.DrawCardSourceControllerEffect; +import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect; import mage.abilities.effects.common.ReturnToHandTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; @@ -23,7 +24,7 @@ public final class ResourcefulReturn extends CardImpl { // Return target creature card from your graveyard to your hand. If you control an artifact, draw a card. this.getSpellAbility().addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_CREATURE_YOUR_GRAVEYARD)); - this.getSpellAbility().addEffect(new ReturnToHandTargetEffect()); + this.getSpellAbility().addEffect(new ReturnFromGraveyardToHandTargetEffect()); this.getSpellAbility().addEffect(new ConditionalOneShotEffect(new DrawCardSourceControllerEffect(1), new PermanentsOnTheBattlefieldCondition(StaticFilters.FILTER_CONTROLLED_PERMANENT_ARTIFACT), "If you control an artifact, draw a card")); diff --git a/Mage.Sets/src/mage/cards/s/SalvageScuttler.java b/Mage.Sets/src/mage/cards/s/SalvageScuttler.java index 4e2c6b0b1f..02d336c270 100644 --- a/Mage.Sets/src/mage/cards/s/SalvageScuttler.java +++ b/Mage.Sets/src/mage/cards/s/SalvageScuttler.java @@ -1,20 +1,17 @@ - package mage.cards.s; -import java.util.UUID; import mage.MageInt; -import mage.abilities.Ability; import mage.abilities.common.AttacksTriggeredAbility; -import mage.abilities.effects.common.ReturnToHandTargetEffect; +import mage.abilities.effects.common.ReturnToHandChosenControlledPermanentEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; -import mage.filter.common.FilterControlledArtifactPermanent; -import mage.target.common.TargetControlledPermanent; +import mage.filter.StaticFilters; + +import java.util.UUID; /** - * * @author fireshoes */ public final class SalvageScuttler extends CardImpl { @@ -27,9 +24,9 @@ public final class SalvageScuttler extends CardImpl { this.toughness = new MageInt(4); // Whenever Salvage Scuttler attacks, return an artifact you control to its owner's hand. - Ability ability = new AttacksTriggeredAbility(new ReturnToHandTargetEffect(), false); - ability.addTarget(new TargetControlledPermanent(new FilterControlledArtifactPermanent("an artifact you control"))); - this.addAbility(ability); + this.addAbility(new AttacksTriggeredAbility( + new ReturnToHandChosenControlledPermanentEffect(StaticFilters.FILTER_CONTROLLED_PERMANENT_ARTIFACT) + )); } private SalvageScuttler(final SalvageScuttler card) { diff --git a/Mage.Sets/src/mage/cards/s/ScroungingBandar.java b/Mage.Sets/src/mage/cards/s/ScroungingBandar.java index c4b96834e7..e56ee36c4b 100644 --- a/Mage.Sets/src/mage/cards/s/ScroungingBandar.java +++ b/Mage.Sets/src/mage/cards/s/ScroungingBandar.java @@ -65,7 +65,7 @@ class ScroungingBandarEffect extends OneShotEffect { public ScroungingBandarEffect() { super(Outcome.Benefit); - this.staticText = "move any number of +1/+1 counters from Scrounging Bandar onto another target creature"; + this.staticText = "you may move any number of +1/+1 counters from Scrounging Bandar onto another target creature"; } public ScroungingBandarEffect(final ScroungingBandarEffect effect) { diff --git a/Mage.Sets/src/mage/cards/s/SecretSalvage.java b/Mage.Sets/src/mage/cards/s/SecretSalvage.java index b348f06558..21c94daad8 100644 --- a/Mage.Sets/src/mage/cards/s/SecretSalvage.java +++ b/Mage.Sets/src/mage/cards/s/SecretSalvage.java @@ -47,7 +47,7 @@ class SecretSalvageEffect extends OneShotEffect { public SecretSalvageEffect() { super(Outcome.DrawCard); staticText = "Exile target nonland card from your graveyard. Search your library for any number of cards with the same name as that card, " - + "reveal them, and put them into your hand. Then shuffle"; + + "reveal them, put them into your hand, then shuffle"; } public SecretSalvageEffect(final SecretSalvageEffect effect) { diff --git a/Mage.Sets/src/mage/cards/s/ShieldedAetherThief.java b/Mage.Sets/src/mage/cards/s/ShieldedAetherThief.java index abebd97034..43546ff001 100644 --- a/Mage.Sets/src/mage/cards/s/ShieldedAetherThief.java +++ b/Mage.Sets/src/mage/cards/s/ShieldedAetherThief.java @@ -35,7 +35,7 @@ public final class ShieldedAetherThief extends CardImpl { this.addAbility(FlashAbility.getInstance()); // Whenever Shield Aether Thief blocks, you get {E}. - this.addAbility(new BlocksSourceTriggeredAbility(new GetEnergyCountersControllerEffect(1), false, true)); + this.addAbility(new BlocksSourceTriggeredAbility(new GetEnergyCountersControllerEffect(1), false)); // {T}, Pay {E}{E}{E}: Draw a card. Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DrawCardSourceControllerEffect(1), new TapSourceCost()); diff --git a/Mage.Sets/src/mage/cards/s/SiegeModification.java b/Mage.Sets/src/mage/cards/s/SiegeModification.java index 14cf7531d1..89add34aa5 100644 --- a/Mage.Sets/src/mage/cards/s/SiegeModification.java +++ b/Mage.Sets/src/mage/cards/s/SiegeModification.java @@ -23,7 +23,7 @@ import mage.target.TargetPermanent; */ public final class SiegeModification extends CardImpl { - private static final FilterPermanent filter = new FilterPermanent("creature or vehicle"); + private static final FilterPermanent filter = new FilterPermanent("creature or Vehicle"); static { filter.add(Predicates.or(CardType.CREATURE.getPredicate(), diff --git a/Mage.Sets/src/mage/cards/s/SilkweaverElite.java b/Mage.Sets/src/mage/cards/s/SilkweaverElite.java index 6995058b50..df1a5fa6aa 100644 --- a/Mage.Sets/src/mage/cards/s/SilkweaverElite.java +++ b/Mage.Sets/src/mage/cards/s/SilkweaverElite.java @@ -1,9 +1,6 @@ - package mage.cards.s; -import java.util.UUID; import mage.MageInt; -import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.condition.common.RevoltCondition; import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility; @@ -16,6 +13,8 @@ import mage.constants.CardType; import mage.constants.SubType; import mage.watchers.common.RevoltWatcher; +import java.util.UUID; + /** * @author JRHerlehy */ @@ -33,14 +32,11 @@ public final class SilkweaverElite extends CardImpl { this.addAbility(ReachAbility.getInstance()); // Revolt — When Silkweaver Elite enters the battlefield, if a permanent you controlled left the battlefield this turn, draw a card. - Ability ability = new ConditionalInterveningIfTriggeredAbility(new EntersBattlefieldTriggeredAbility( - new DrawCardSourceControllerEffect(1), false), RevoltCondition.instance, - "Revolt — When {this} enters the battlefield, if a permanent you controlled left" - + " the battlefield this turn, draw a card."); - ability.setAbilityWord(AbilityWord.REVOLT); - ability.addWatcher(new RevoltWatcher()); - this.addAbility(ability); - + this.addAbility(new ConditionalInterveningIfTriggeredAbility( + new EntersBattlefieldTriggeredAbility(new DrawCardSourceControllerEffect(1), false), + RevoltCondition.instance, "When {this} enters the battlefield, " + + "if a permanent you controlled left the battlefield this turn, draw a card." + ).setAbilityWord(AbilityWord.REVOLT), new RevoltWatcher()); } private SilkweaverElite(final SilkweaverElite card) { diff --git a/Mage.Sets/src/mage/cards/t/TezzeretMasterOfMetal.java b/Mage.Sets/src/mage/cards/t/TezzeretMasterOfMetal.java index d05b96e43b..c9a4fd6ecb 100644 --- a/Mage.Sets/src/mage/cards/t/TezzeretMasterOfMetal.java +++ b/Mage.Sets/src/mage/cards/t/TezzeretMasterOfMetal.java @@ -2,20 +2,18 @@ package mage.cards.t; import mage.abilities.Ability; import mage.abilities.LoyaltyAbility; -import mage.abilities.dynamicvalue.DynamicValue; -import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount; +import mage.abilities.dynamicvalue.common.ArtifactYouControlCount; import mage.abilities.effects.ContinuousEffect; import mage.abilities.effects.ContinuousEffectImpl; import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.common.LoseLifeTargetEffect; import mage.abilities.effects.common.RevealCardsFromLibraryUntilEffect; -import mage.abilities.hint.ValueHint; +import mage.abilities.hint.common.ArtifactYouControlHint; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.*; import mage.filter.FilterPermanent; -import mage.filter.common.FilterArtifactCard; -import mage.filter.common.FilterControlledArtifactPermanent; +import mage.filter.StaticFilters; import mage.filter.predicate.Predicates; import mage.game.Game; import mage.game.permanent.Permanent; @@ -38,13 +36,12 @@ public final class TezzeretMasterOfMetal extends CardImpl { this.setStartingLoyalty(5); // +1: Reveal cards from the top of your library until you reveal an artifact card. Put that card into your hand and the rest on the bottom of your library in a random order. - this.addAbility(new LoyaltyAbility(new RevealCardsFromLibraryUntilEffect(new FilterArtifactCard(), Zone.HAND, Zone.LIBRARY), 1)); + this.addAbility(new LoyaltyAbility(new RevealCardsFromLibraryUntilEffect(StaticFilters.FILTER_CARD_ARTIFACT, Zone.HAND, Zone.LIBRARY), 1)); // -3: Target opponent loses life equal to the number of artifacts you control. - DynamicValue xValue = new PermanentsOnBattlefieldCount(new FilterControlledArtifactPermanent()); - Ability ability = new LoyaltyAbility(new LoseLifeTargetEffect(xValue), -3); + Ability ability = new LoyaltyAbility(new LoseLifeTargetEffect(ArtifactYouControlCount.instance).setText("target opponent loses life equal to the number of artifacts you control"), -3); ability.addTarget(new TargetOpponent()); - ability.addHint(new ValueHint("Artifacts you control", xValue)); + ability.addHint(ArtifactYouControlHint.instance); this.addAbility(ability); // -8: Gain control of all artifacts and creatures target opponent controls. diff --git a/Mage.Sets/src/mage/cards/t/TezzeretsBetrayal.java b/Mage.Sets/src/mage/cards/t/TezzeretsBetrayal.java index 02aa259eb3..da6499ea4f 100644 --- a/Mage.Sets/src/mage/cards/t/TezzeretsBetrayal.java +++ b/Mage.Sets/src/mage/cards/t/TezzeretsBetrayal.java @@ -1,7 +1,6 @@ package mage.cards.t; -import java.util.UUID; import mage.abilities.effects.common.DestroyTargetEffect; import mage.abilities.effects.common.search.SearchLibraryGraveyardPutInHandEffect; import mage.cards.CardImpl; @@ -11,8 +10,9 @@ import mage.filter.FilterCard; import mage.filter.predicate.mageobject.NamePredicate; import mage.target.common.TargetCreaturePermanent; +import java.util.UUID; + /** - * * @author fireshoes */ public final class TezzeretsBetrayal extends CardImpl { @@ -32,7 +32,7 @@ public final class TezzeretsBetrayal extends CardImpl { // You may search your library and/or graveyard for a card named Tezzeret, Master of Metal, reveal it, and put it into your hand. // If you search your library this way, shuffle it. - getSpellAbility().addEffect(new SearchLibraryGraveyardPutInHandEffect(filter)); + getSpellAbility().addEffect(new SearchLibraryGraveyardPutInHandEffect(filter, false, true)); } private TezzeretsBetrayal(final TezzeretsBetrayal card) { diff --git a/Mage.Sets/src/mage/cards/t/TrophyMage.java b/Mage.Sets/src/mage/cards/t/TrophyMage.java index ef63fefacd..83931678c9 100644 --- a/Mage.Sets/src/mage/cards/t/TrophyMage.java +++ b/Mage.Sets/src/mage/cards/t/TrophyMage.java @@ -1,21 +1,20 @@ - package mage.cards.t; -import java.util.UUID; import mage.MageInt; import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.effects.common.search.SearchLibraryPutInHandEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.constants.SubType; import mage.constants.ComparisonType; +import mage.constants.SubType; import mage.filter.FilterCard; import mage.filter.predicate.mageobject.ManaValuePredicate; import mage.target.common.TargetCardInLibrary; +import java.util.UUID; + /** - * * @author Styxo */ public final class TrophyMage extends CardImpl { @@ -36,7 +35,9 @@ public final class TrophyMage extends CardImpl { this.toughness = new MageInt(2); // When Trophy Mage enters the battlefield, you may search your library for an artifact card with converted mana cost 3, reveal it, put it into your hand, then shuffle your library. - this.addAbility(new EntersBattlefieldTriggeredAbility(new SearchLibraryPutInHandEffect(new TargetCardInLibrary(0, 1, filter), true, true), true)); + this.addAbility(new EntersBattlefieldTriggeredAbility(new SearchLibraryPutInHandEffect( + new TargetCardInLibrary(filter), true, true + ), true)); } private TrophyMage(final TrophyMage card) { diff --git a/Mage.Sets/src/mage/cards/u/UntetheredExpress.java b/Mage.Sets/src/mage/cards/u/UntetheredExpress.java index 6ac63afece..4c097b1ab7 100644 --- a/Mage.Sets/src/mage/cards/u/UntetheredExpress.java +++ b/Mage.Sets/src/mage/cards/u/UntetheredExpress.java @@ -30,7 +30,7 @@ public final class UntetheredExpress extends CardImpl { this.addAbility(TrampleAbility.getInstance()); // Whenever Untethered Express attacks, put a +1/+1 counter on it. - this.addAbility(new AttacksTriggeredAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance()), false)); + this.addAbility(new AttacksTriggeredAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance()).setText("put a +1/+1 counter on it"), false)); // Crew 1 this.addAbility(new CrewAbility(1)); diff --git a/Mage.Sets/src/mage/cards/y/YahenniUndyingPartisan.java b/Mage.Sets/src/mage/cards/y/YahenniUndyingPartisan.java index 11fb28c760..d92b8d2815 100644 --- a/Mage.Sets/src/mage/cards/y/YahenniUndyingPartisan.java +++ b/Mage.Sets/src/mage/cards/y/YahenniUndyingPartisan.java @@ -1,7 +1,5 @@ - package mage.cards.y; -import java.util.UUID; import mage.MageInt; import mage.abilities.common.DiesCreatureTriggeredAbility; import mage.abilities.common.SimpleActivatedAbility; @@ -13,17 +11,16 @@ import mage.abilities.keyword.IndestructibleAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.constants.SubType; import mage.constants.Duration; +import mage.constants.SubType; import mage.constants.SuperType; -import mage.constants.Zone; import mage.counters.CounterType; import mage.filter.StaticFilters; -import mage.filter.common.FilterOpponentsCreaturePermanent; import mage.target.common.TargetControlledPermanent; +import java.util.UUID; + /** - * * @author fireshoes */ public final class YahenniUndyingPartisan extends CardImpl { @@ -41,14 +38,16 @@ public final class YahenniUndyingPartisan extends CardImpl { this.addAbility(HasteAbility.getInstance()); // Whenever a creature an opponent controls dies, put a +1/+1 counter on Yahenni, Undying Partisan. - this.addAbility(new DiesCreatureTriggeredAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance()), false, new FilterOpponentsCreaturePermanent())); + this.addAbility(new DiesCreatureTriggeredAbility( + new AddCountersSourceEffect(CounterType.P1P1.createInstance()), + false, StaticFilters.FILTER_OPPONENTS_PERMANENT_A_CREATURE + )); // Sacrifice another creature: Yahenni gains indestructible until end of turn. this.addAbility(new SimpleActivatedAbility( - Zone.BATTLEFIELD, new GainAbilitySourceEffect(IndestructibleAbility.getInstance(), Duration.EndOfTurn), - new SacrificeTargetCost(new TargetControlledPermanent(StaticFilters.FILTER_CONTROLLED_ANOTHER_CREATURE))) - ); + new SacrificeTargetCost(new TargetControlledPermanent(StaticFilters.FILTER_CONTROLLED_ANOTHER_CREATURE)) + )); } private YahenniUndyingPartisan(final YahenniUndyingPartisan card) { diff --git a/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java b/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java index c26b756402..ed4942ce71 100644 --- a/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java +++ b/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java @@ -62,7 +62,7 @@ public class VerifyCardDataTest { private static final Logger logger = Logger.getLogger(VerifyCardDataTest.class); - private static final String FULL_ABILITIES_CHECK_SET_CODE = "SLD"; // check all abilities and output cards with wrong abilities texts; + private static final String FULL_ABILITIES_CHECK_SET_CODE = "AER"; // check all abilities and output cards with wrong abilities texts; private static final boolean AUTO_FIX_SAMPLE_DECKS = false; // debug only: auto-fix sample decks by test_checkSampleDecks test run private static final boolean ONLY_TEXT = false; // use when checking text locally, suppresses unnecessary checks and output messages diff --git a/Mage/src/main/java/mage/abilities/common/DiesAttachedTriggeredAbility.java b/Mage/src/main/java/mage/abilities/common/DiesAttachedTriggeredAbility.java index cbea3651f8..3b94b15b38 100644 --- a/Mage/src/main/java/mage/abilities/common/DiesAttachedTriggeredAbility.java +++ b/Mage/src/main/java/mage/abilities/common/DiesAttachedTriggeredAbility.java @@ -138,7 +138,7 @@ public class DiesAttachedTriggeredAbility extends TriggeredAbilityImpl { if (diesRuleText) { sb.append(" dies, "); } else { - sb.append(" is put into graveyard, "); + sb.append(" is put into a graveyard, "); } return sb.toString(); } diff --git a/Mage/src/main/java/mage/abilities/costs/common/PayEnergyCost.java b/Mage/src/main/java/mage/abilities/costs/common/PayEnergyCost.java index e2462f3a25..75e11fa421 100644 --- a/Mage/src/main/java/mage/abilities/costs/common/PayEnergyCost.java +++ b/Mage/src/main/java/mage/abilities/costs/common/PayEnergyCost.java @@ -49,7 +49,7 @@ public class PayEnergyCost extends CostImpl { } private void setText() { - StringBuilder sb = new StringBuilder("Pay "); + StringBuilder sb = new StringBuilder("pay "); for (int i = 0; i < amount; i++) { sb.append("{E}"); } diff --git a/Mage/src/main/java/mage/abilities/effects/common/RevealCardsFromLibraryUntilEffect.java b/Mage/src/main/java/mage/abilities/effects/common/RevealCardsFromLibraryUntilEffect.java index dddb343176..6504371298 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/RevealCardsFromLibraryUntilEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/RevealCardsFromLibraryUntilEffect.java @@ -1,8 +1,8 @@ - package mage.abilities.effects.common; import mage.MageObject; import mage.abilities.Ability; +import mage.abilities.Mode; import mage.abilities.effects.OneShotEffect; import mage.cards.Card; import mage.cards.Cards; @@ -13,18 +13,18 @@ import mage.filter.FilterCard; import mage.game.Game; import mage.players.Library; import mage.players.Player; +import mage.util.CardUtil; /** - * * @author Styxo */ public class RevealCardsFromLibraryUntilEffect extends OneShotEffect { - private FilterCard filter; - private Zone zoneToPutRest; - private Zone zoneToPutCard; - private boolean shuffleRestInto; - private boolean anyOrder; + private final FilterCard filter; + private final Zone zoneToPutRest; + private final Zone zoneToPutCard; + private final boolean shuffleRestInto; + private final boolean anyOrder; public RevealCardsFromLibraryUntilEffect(FilterCard filter, Zone zoneToPutCard, Zone zoneToPutRest) { this(filter, zoneToPutCard, zoneToPutRest, false, false); @@ -41,17 +41,15 @@ public class RevealCardsFromLibraryUntilEffect extends OneShotEffect { this.zoneToPutRest = zoneToPutRest; this.shuffleRestInto = shuffleRestInto; this.anyOrder = anyOrder; - setText(); } - public RevealCardsFromLibraryUntilEffect(final RevealCardsFromLibraryUntilEffect effect) { + private RevealCardsFromLibraryUntilEffect(final RevealCardsFromLibraryUntilEffect effect) { super(effect); this.filter = effect.filter; this.zoneToPutCard = effect.zoneToPutCard; this.zoneToPutRest = effect.zoneToPutRest; this.shuffleRestInto = effect.shuffleRestInto; this.anyOrder = effect.anyOrder; - setText(); } @Override @@ -63,50 +61,54 @@ public class RevealCardsFromLibraryUntilEffect extends OneShotEffect { public boolean apply(Game game, Ability source) { Player controller = game.getPlayer(source.getControllerId()); MageObject sourceObject = game.getObject(source.getSourceId()); - if (controller != null && controller.getLibrary().hasCards()) { - Cards cards = new CardsImpl(); - Library library = controller.getLibrary(); - Card card = null; - do { - card = library.removeFromTop(game); - if (card != null) { - cards.add(card); - } - } while (library.hasCards() && !filter.match(card, game)); - // reveal cards - if (!cards.isEmpty()) { - controller.revealCards(sourceObject.getIdName(), cards, game); - if (filter.match(card, game)) { - // put card in correct zone - controller.moveCards(card, zoneToPutCard, source, game); - // remove it from revealed card list - cards.remove(card); - } - // Put the rest in correct zone - switch (zoneToPutRest) { - case LIBRARY: { - if (!cards.isEmpty()) { - if (shuffleRestInto) { - library.addAll(cards.getCards(game), game); - } else { - controller.putCardsOnBottomOfLibrary(cards, game, source, anyOrder); - } - } - break; - } - default: - if (!cards.isEmpty()) { - controller.moveCards(cards, zoneToPutRest, source, game); - } - } + if (controller == null || !controller.getLibrary().hasCards()) { + return false; + } + Cards cards = new CardsImpl(); + Library library = controller.getLibrary(); + Card card = null; + do { + card = library.removeFromTop(game); + if (card != null) { + cards.add(card); } + } while (library.hasCards() && !filter.match(card, game)); + // reveal cards + if (cards.isEmpty()) { return true; } - return false; + controller.revealCards(sourceObject.getIdName(), cards, game); + if (filter.match(card, game)) { + // put card in correct zone + controller.moveCards(card, zoneToPutCard, source, game); + // remove it from revealed card list + cards.remove(card); + } + // Put the rest in correct zone + if (zoneToPutRest == Zone.LIBRARY) { + if (!cards.isEmpty()) { + if (shuffleRestInto) { + library.addAll(cards.getCards(game), game); + } else { + controller.putCardsOnBottomOfLibrary(cards, game, source, anyOrder); + } + } + } else { + if (!cards.isEmpty()) { + controller.moveCards(cards, zoneToPutRest, source, game); + } + } + return true; } - private void setText() { - StringBuilder sb = new StringBuilder("reveal cards from the top of your library until you reveal a " + filter.getMessage() + ". Put that card "); + @Override + public String getText(Mode mode) { + if (staticText != null && !staticText.isEmpty()) { + return staticText; + } + StringBuilder sb = new StringBuilder("reveal cards from the top of your library until you reveal "); + sb.append(CardUtil.addArticle(filter.getMessage())); + sb.append(". Put that card "); switch (zoneToPutCard) { case HAND: { @@ -144,6 +146,6 @@ public class RevealCardsFromLibraryUntilEffect extends OneShotEffect { break; } } - staticText = sb.toString(); + return sb.toString(); } } diff --git a/Mage/src/main/java/mage/game/permanent/token/EtheriumCellToken.java b/Mage/src/main/java/mage/game/permanent/token/EtheriumCellToken.java index ff472627b3..a1bc68568a 100644 --- a/Mage/src/main/java/mage/game/permanent/token/EtheriumCellToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/EtheriumCellToken.java @@ -16,7 +16,7 @@ import mage.constants.Zone; public final class EtheriumCellToken extends TokenImpl { public EtheriumCellToken() { - super("Etherium Cell", "colorless artifact token named Etherium Cell which has \"{T}, Sacrifice this artifact: Add one mana of any color.\""); + super("Etherium Cell", "colorless artifact token named Etherium Cell with \"{T}, Sacrifice this artifact: Add one mana of any color.\""); this.setOriginalExpansionSetCode("AER"); cardType.add(CardType.ARTIFACT);