diff --git a/Mage.Sets/src/mage/cards/a/AngelOfFlightAlabaster.java b/Mage.Sets/src/mage/cards/a/AngelOfFlightAlabaster.java index 82147b452b..9234c9ebc4 100644 --- a/Mage.Sets/src/mage/cards/a/AngelOfFlightAlabaster.java +++ b/Mage.Sets/src/mage/cards/a/AngelOfFlightAlabaster.java @@ -1,10 +1,9 @@ package mage.cards.a; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; -import mage.abilities.effects.common.ReturnToHandTargetEffect; +import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect; import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; @@ -15,7 +14,10 @@ import mage.filter.FilterCard; import mage.target.Target; import mage.target.common.TargetCardInYourGraveyard; +import java.util.UUID; + public final class AngelOfFlightAlabaster extends CardImpl { + private static final FilterCard filter = new FilterCard("Spirit card from your graveyard"); static { @@ -23,19 +25,18 @@ public final class AngelOfFlightAlabaster extends CardImpl { } public AngelOfFlightAlabaster(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{4}{W}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{W}"); this.subtype.add(SubType.ANGEL); this.power = new MageInt(4); this.toughness = new MageInt(4); this.addAbility(FlyingAbility.getInstance()); - Ability ability = new BeginningOfUpkeepTriggeredAbility(new ReturnToHandTargetEffect(), TargetController.YOU, false); - Target target = new TargetCardInYourGraveyard(filter); - ability.addTarget(target); + Ability ability = new BeginningOfUpkeepTriggeredAbility( + new ReturnFromGraveyardToHandTargetEffect(), TargetController.YOU, false + ); + ability.addTarget(new TargetCardInYourGraveyard(filter)); this.addAbility(ability); - - } private AngelOfFlightAlabaster(final AngelOfFlightAlabaster card) { diff --git a/Mage.Sets/src/mage/cards/a/ArcaneDenial.java b/Mage.Sets/src/mage/cards/a/ArcaneDenial.java index 5e99149b23..57e617ef0e 100644 --- a/Mage.Sets/src/mage/cards/a/ArcaneDenial.java +++ b/Mage.Sets/src/mage/cards/a/ArcaneDenial.java @@ -1,6 +1,5 @@ package mage.cards.a; -import java.util.UUID; import mage.abilities.Ability; import mage.abilities.DelayedTriggeredAbility; import mage.abilities.common.delayed.AtTheBeginOfNextUpkeepDelayedTriggeredAbility; @@ -19,8 +18,9 @@ import mage.players.Player; import mage.target.TargetSpell; import mage.target.targetpointer.FixedTarget; +import java.util.UUID; + /** - * * @author LevelX2 */ public final class ArcaneDenial extends CardImpl { @@ -35,7 +35,10 @@ public final class ArcaneDenial extends CardImpl { // You draw a card at the beginning of the next turn's upkeep. this.getSpellAbility().addEffect(new CreateDelayedTriggeredAbilityEffect( new AtTheBeginOfNextUpkeepDelayedTriggeredAbility( - new DrawCardSourceControllerEffect(1)), false)); + new DrawCardSourceControllerEffect(1) + .setText("you draw a card") + ), false).concatBy("
") + ); } private ArcaneDenial(final ArcaneDenial card) { diff --git a/Mage.Sets/src/mage/cards/a/ArterialAlchemy.java b/Mage.Sets/src/mage/cards/a/ArterialAlchemy.java index 042831df34..9fc51df6f9 100644 --- a/Mage.Sets/src/mage/cards/a/ArterialAlchemy.java +++ b/Mage.Sets/src/mage/cards/a/ArterialAlchemy.java @@ -31,6 +31,7 @@ public final class ArterialAlchemy extends CardImpl { // When Arterial Alchemy enters the battlefield, create a Blood token for each opponent you have. this.addAbility(new EntersBattlefieldTriggeredAbility( new CreateTokenEffect(new BloodToken(), OpponentsCount.instance) + .setText("create a Blood token for each opponent you have") )); // Blood tokens you control are Equipment in addition to their other types and have "Equipped creature gets +2/+0" and equip {2}. diff --git a/Mage.Sets/src/mage/cards/a/AvacynsJudgment.java b/Mage.Sets/src/mage/cards/a/AvacynsJudgment.java index 4465bb2899..3fe86e5fb3 100644 --- a/Mage.Sets/src/mage/cards/a/AvacynsJudgment.java +++ b/Mage.Sets/src/mage/cards/a/AvacynsJudgment.java @@ -32,7 +32,7 @@ public final class AvacynsJudgment extends CardImpl { // Avacyn's Judgment deals 2 damage divided as you choose among any number of target creatures and/or players. If Avacyn's Judgment's madness cost was paid, it deals X damage divided as you choose among those creatures and/or players instead. DynamicValue xValue = new AvacynsJudgmentManacostVariableValue(); Effect effect = new DamageMultiEffect(xValue); - effect.setText("{this} deals 2 damage divided as you choose among any number of target creatures and/or players. If {this}'s madness cost was paid, it deals X damage divided as you choose among those creatures and/or players instead."); + effect.setText("{this} deals 2 damage divided as you choose among any number of targets. If this spell's madness cost was paid, it deals X damage divided as you choose among those permanents and/or players instead."); this.getSpellAbility().addEffect(effect); this.getSpellAbility().addTarget(new TargetAnyTargetAmount(xValue)); } diff --git a/Mage.Sets/src/mage/cards/b/BenevolentOffering.java b/Mage.Sets/src/mage/cards/b/BenevolentOffering.java index d454671c0f..c6bd066c46 100644 --- a/Mage.Sets/src/mage/cards/b/BenevolentOffering.java +++ b/Mage.Sets/src/mage/cards/b/BenevolentOffering.java @@ -83,7 +83,7 @@ class BenevolentOfferingEffect2 extends OneShotEffect { BenevolentOfferingEffect2() { super(Outcome.Sacrifice); - this.staticText = "Choose an opponent. You gain 2 life for each creature you control and that player gains 2 life for each creature they control"; + this.staticText = "
Choose an opponent. You gain 2 life for each creature you control and that player gains 2 life for each creature they control"; } BenevolentOfferingEffect2(final BenevolentOfferingEffect2 effect) { diff --git a/Mage.Sets/src/mage/cards/c/ChampionOfDusk.java b/Mage.Sets/src/mage/cards/c/ChampionOfDusk.java index 7a39738d1f..2deaf20a98 100644 --- a/Mage.Sets/src/mage/cards/c/ChampionOfDusk.java +++ b/Mage.Sets/src/mage/cards/c/ChampionOfDusk.java @@ -1,4 +1,3 @@ - package mage.cards.c; import mage.MageInt; @@ -8,6 +7,8 @@ import mage.abilities.dynamicvalue.DynamicValue; import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount; import mage.abilities.effects.common.DrawCardSourceControllerEffect; import mage.abilities.effects.common.LoseLifeSourceControllerEffect; +import mage.abilities.hint.Hint; +import mage.abilities.hint.ValueHint; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; @@ -17,7 +18,6 @@ import mage.filter.common.FilterControlledPermanent; import java.util.UUID; /** - * * @author L_J */ public final class ChampionOfDusk extends CardImpl { @@ -28,6 +28,9 @@ public final class ChampionOfDusk extends CardImpl { filter.add(SubType.VAMPIRE.getPredicate()); } + private static final DynamicValue xCount = new PermanentsOnBattlefieldCount(filter); + private static final Hint hint = new ValueHint("Vampires you control", xCount); + public ChampionOfDusk(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{B}{B}"); this.subtype.add(SubType.VAMPIRE); @@ -36,10 +39,12 @@ public final class ChampionOfDusk extends CardImpl { this.toughness = new MageInt(4); // When Champion of Dusk enters the battlefield, you draw X cards and you lose X life, where X is the number of Vampires you control. - DynamicValue xCount = new PermanentsOnBattlefieldCount(filter); - Ability ability = new EntersBattlefieldTriggeredAbility(new DrawCardSourceControllerEffect(xCount)); - ability.addEffect(new LoseLifeSourceControllerEffect(xCount)); - this.addAbility(ability); + Ability ability = new EntersBattlefieldTriggeredAbility( + new DrawCardSourceControllerEffect(xCount).setText("you draw X cards") + ); + ability.addEffect(new LoseLifeSourceControllerEffect(xCount) + .setText("and you lose X life, where X is the number of Vampires you control")); + this.addAbility(ability.addHint(hint)); } private ChampionOfDusk(final ChampionOfDusk card) { diff --git a/Mage.Sets/src/mage/cards/c/CrimsonHonorGuard.java b/Mage.Sets/src/mage/cards/c/CrimsonHonorGuard.java index 0118e9df1d..9e4ef9f7b5 100644 --- a/Mage.Sets/src/mage/cards/c/CrimsonHonorGuard.java +++ b/Mage.Sets/src/mage/cards/c/CrimsonHonorGuard.java @@ -4,7 +4,6 @@ import mage.MageInt; import mage.abilities.Ability; import mage.abilities.Mode; import mage.abilities.common.BeginningOfEndStepTriggeredAbility; -import mage.abilities.effects.Effect; import mage.abilities.effects.OneShotEffect; import mage.abilities.keyword.TrampleAbility; import mage.cards.CardImpl; @@ -37,7 +36,7 @@ public final class CrimsonHonorGuard extends CardImpl { this.addAbility(TrampleAbility.getInstance()); // At the beginning of each player's end step, Crimson Honor Guard deals 4 damage to that player unless they control a commander. - this.addAbility(new BeginningOfEndStepTriggeredAbility(new CrimsonHonorGuardEffect(), TargetController.ANY, false)); + this.addAbility(new BeginningOfEndStepTriggeredAbility(new CrimsonHonorGuardEffect(), TargetController.EACH_PLAYER, false)); } private CrimsonHonorGuard(final CrimsonHonorGuard card) { diff --git a/Mage.Sets/src/mage/cards/d/DrogskolCaptain.java b/Mage.Sets/src/mage/cards/d/DrogskolCaptain.java index 9ec6bd1fb8..33ff8aefc1 100644 --- a/Mage.Sets/src/mage/cards/d/DrogskolCaptain.java +++ b/Mage.Sets/src/mage/cards/d/DrogskolCaptain.java @@ -22,7 +22,7 @@ import mage.filter.common.FilterCreaturePermanent; */ public final class DrogskolCaptain extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent(SubType.SPIRIT, "Spirits"); + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent(SubType.SPIRIT, "Spirit creatures"); public DrogskolCaptain(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{W}{U}"); diff --git a/Mage.Sets/src/mage/cards/d/DrogskolReinforcements.java b/Mage.Sets/src/mage/cards/d/DrogskolReinforcements.java index 0a558f2bd0..50fe982f00 100644 --- a/Mage.Sets/src/mage/cards/d/DrogskolReinforcements.java +++ b/Mage.Sets/src/mage/cards/d/DrogskolReinforcements.java @@ -11,7 +11,6 @@ import mage.constants.CardType; import mage.constants.Duration; import mage.constants.SubType; import mage.filter.FilterPermanent; -import mage.filter.StaticFilters; import mage.filter.common.FilterControlledPermanent; import java.util.UUID; @@ -38,12 +37,12 @@ public final class DrogskolReinforcements extends CardImpl { // Other Spirits you control have melee. this.addAbility(new SimpleStaticAbility(new GainAbilityAllEffect( new MeleeAbility(), Duration.WhileOnBattlefield, filter, true - ))); + ).setText("other Spirits you control have melee"))); // Prevent all noncombat damage that would be dealt to Spirits you control. - this.addAbility(new SimpleStaticAbility(new PreventAllNonCombatDamageToAllEffect( - Duration.WhileOnBattlefield, StaticFilters.FILTER_CONTROLLED_CREATURES - ))); + this.addAbility(new SimpleStaticAbility( + new PreventAllNonCombatDamageToAllEffect(Duration.WhileOnBattlefield, filter) + )); } private DrogskolReinforcements(final DrogskolReinforcements card) { diff --git a/Mage.Sets/src/mage/cards/f/FalkenrathGorger.java b/Mage.Sets/src/mage/cards/f/FalkenrathGorger.java index d3a75de7a2..d18775a0eb 100644 --- a/Mage.Sets/src/mage/cards/f/FalkenrathGorger.java +++ b/Mage.Sets/src/mage/cards/f/FalkenrathGorger.java @@ -69,7 +69,7 @@ class FalkenrathGorgerEffect extends ContinuousEffectImpl { public FalkenrathGorgerEffect() { super(Duration.WhileOnBattlefield, Layer.AbilityAddingRemovingEffects_6, SubLayer.NA, Outcome.AddAbility); - this.staticText = "Each Vampire creature card you own that isn't on the battlefield has madness. Its madness cost is equal to its mana cost"; + this.staticText = "Each Vampire creature card you own that isn't on the battlefield has madness. The madness cost is equal to its mana cost"; } public FalkenrathGorgerEffect(final FalkenrathGorgerEffect effect) { diff --git a/Mage.Sets/src/mage/cards/g/GeistOfSaintTraft.java b/Mage.Sets/src/mage/cards/g/GeistOfSaintTraft.java index f05a55c3d1..2b49fb8e29 100644 --- a/Mage.Sets/src/mage/cards/g/GeistOfSaintTraft.java +++ b/Mage.Sets/src/mage/cards/g/GeistOfSaintTraft.java @@ -52,7 +52,7 @@ class GeistOfSaintTraftEffect extends OneShotEffect { GeistOfSaintTraftEffect() { super(Outcome.PutCreatureInPlay); - staticText = "create a 4/4 white Angel creature token with flying tapped and attacking. Exile that token at end of combat"; + staticText = "create a 4/4 white Angel creature token with flying that's tapped and attacking. Exile that token at end of combat"; } GeistOfSaintTraftEffect(final GeistOfSaintTraftEffect effect) { diff --git a/Mage.Sets/src/mage/cards/k/KamberThePlunderer.java b/Mage.Sets/src/mage/cards/k/KamberThePlunderer.java index 5ff05678d4..723876e742 100644 --- a/Mage.Sets/src/mage/cards/k/KamberThePlunderer.java +++ b/Mage.Sets/src/mage/cards/k/KamberThePlunderer.java @@ -41,7 +41,7 @@ public final class KamberThePlunderer extends CardImpl { Ability ability = new DiesCreatureTriggeredAbility( new GainLifeEffect(1), false, StaticFilters.FILTER_OPPONENTS_PERMANENT_A_CREATURE ); - ability.addEffect(new CreateTokenEffect(new BloodToken())); + ability.addEffect(new CreateTokenEffect(new BloodToken()).concatBy("and")); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/k/KamiOfTheCrescentMoon.java b/Mage.Sets/src/mage/cards/k/KamiOfTheCrescentMoon.java index 8b73b4f474..fd6ad2c89d 100644 --- a/Mage.Sets/src/mage/cards/k/KamiOfTheCrescentMoon.java +++ b/Mage.Sets/src/mage/cards/k/KamiOfTheCrescentMoon.java @@ -1,7 +1,5 @@ - package mage.cards.k; -import java.util.UUID; import mage.MageInt; import mage.abilities.common.BeginningOfDrawTriggeredAbility; import mage.abilities.effects.common.DrawCardTargetEffect; @@ -12,14 +10,15 @@ import mage.constants.SubType; import mage.constants.SuperType; import mage.constants.TargetController; +import java.util.UUID; + /** - * * @author LevelX2 */ public final class KamiOfTheCrescentMoon extends CardImpl { public KamiOfTheCrescentMoon(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{U}{U}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{U}{U}"); addSuperType(SuperType.LEGENDARY); this.subtype.add(SubType.SPIRIT); @@ -27,7 +26,7 @@ public final class KamiOfTheCrescentMoon extends CardImpl { this.toughness = new MageInt(3); // At the beginning of each player's draw step, that player draws an additional card. - this.addAbility(new BeginningOfDrawTriggeredAbility(new DrawCardTargetEffect(1), TargetController.ANY, false)); + this.addAbility(new BeginningOfDrawTriggeredAbility(new DrawCardTargetEffect(1).setText("that player draws an additional card"), TargetController.ANY, false)); } private KamiOfTheCrescentMoon(final KamiOfTheCrescentMoon card) { diff --git a/Mage.Sets/src/mage/cards/n/NightsWhisper.java b/Mage.Sets/src/mage/cards/n/NightsWhisper.java index 98c35080b6..2f5a296d98 100644 --- a/Mage.Sets/src/mage/cards/n/NightsWhisper.java +++ b/Mage.Sets/src/mage/cards/n/NightsWhisper.java @@ -19,8 +19,8 @@ public final class NightsWhisper extends CardImpl { // You draw two cards and you lose 2 life. - this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(2)); - this.getSpellAbility().addEffect(new LoseLifeSourceControllerEffect(2)); + this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(2).setText("you draw two cards")); + this.getSpellAbility().addEffect(new LoseLifeSourceControllerEffect(2).concatBy("and")); } private NightsWhisper(final NightsWhisper card) { diff --git a/Mage.Sets/src/mage/cards/p/PatronOfTheVein.java b/Mage.Sets/src/mage/cards/p/PatronOfTheVein.java index 477afb8afd..06e7ea7320 100644 --- a/Mage.Sets/src/mage/cards/p/PatronOfTheVein.java +++ b/Mage.Sets/src/mage/cards/p/PatronOfTheVein.java @@ -112,7 +112,7 @@ class PatronOfTheVeinCreatureDiesTriggeredAbility extends TriggeredAbilityImpl { @Override public String getRule() { - return "Whenever a creature an opponent controls dies, exile it and put a +1/+1 counter on each Vampire you control"; + return "Whenever a creature an opponent controls dies, exile it and put a +1/+1 counter on each Vampire you control."; } } diff --git a/Mage.Sets/src/mage/cards/p/PromiseOfBunrei.java b/Mage.Sets/src/mage/cards/p/PromiseOfBunrei.java index 917810c002..db97ebe9d5 100644 --- a/Mage.Sets/src/mage/cards/p/PromiseOfBunrei.java +++ b/Mage.Sets/src/mage/cards/p/PromiseOfBunrei.java @@ -1,7 +1,5 @@ - package mage.cards.p; -import java.util.UUID; import mage.abilities.Ability; import mage.abilities.common.DiesCreatureTriggeredAbility; import mage.abilities.effects.OneShotEffect; @@ -17,23 +15,26 @@ import mage.game.permanent.Permanent; import mage.game.permanent.token.SpiritToken; import mage.players.Player; +import java.util.UUID; + /** - * * @author LevelX2 */ public final class PromiseOfBunrei extends CardImpl { private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("a creature you control"); - + static { filter.add(TargetController.YOU.getControllerPredicate()); } - + public PromiseOfBunrei(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{2}{W}"); + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{2}{W}"); // When a creature you control dies, sacrifice Promise of Bunrei. If you do, create four 1/1 colorless Spirit creature tokens. - this.addAbility(new DiesCreatureTriggeredAbility(new PromiseOfBunreiEffect(), false, filter)); + this.addAbility(new DiesCreatureTriggeredAbility( + new PromiseOfBunreiEffect(), false, filter + ).setTriggerPhrase("When a creature you control dies, ")); } private PromiseOfBunrei(final PromiseOfBunrei card) { @@ -47,21 +48,21 @@ public final class PromiseOfBunrei extends CardImpl { } class PromiseOfBunreiEffect extends OneShotEffect { - + public PromiseOfBunreiEffect() { super(Outcome.Benefit); this.staticText = "sacrifice {this}. If you do, create four 1/1 colorless Spirit creature tokens"; } - + public PromiseOfBunreiEffect(final PromiseOfBunreiEffect effect) { super(effect); } - + @Override public PromiseOfBunreiEffect copy() { return new PromiseOfBunreiEffect(this); } - + @Override public boolean apply(Game game, Ability source) { Player controller = game.getPlayer(source.getControllerId()); diff --git a/Mage.Sets/src/mage/cards/r/ReconnaissanceMission.java b/Mage.Sets/src/mage/cards/r/ReconnaissanceMission.java index a435aa9e8d..6ffe195fe0 100644 --- a/Mage.Sets/src/mage/cards/r/ReconnaissanceMission.java +++ b/Mage.Sets/src/mage/cards/r/ReconnaissanceMission.java @@ -23,7 +23,7 @@ public final class ReconnaissanceMission extends CardImpl { // Whenever a creature you control deals combat damage to a player, you may draw a card. this.addAbility(new DealsDamageToAPlayerAllTriggeredAbility( new DrawCardSourceControllerEffect(1), - StaticFilters.FILTER_CONTROLLED_CREATURE, + StaticFilters.FILTER_CONTROLLED_A_CREATURE, true, SetTargetPointer.NONE, true )); diff --git a/Mage.Sets/src/mage/cards/s/ScionOfOpulence.java b/Mage.Sets/src/mage/cards/s/ScionOfOpulence.java index c4375c613e..2233763e73 100644 --- a/Mage.Sets/src/mage/cards/s/ScionOfOpulence.java +++ b/Mage.Sets/src/mage/cards/s/ScionOfOpulence.java @@ -13,7 +13,7 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; import mage.filter.FilterPermanent; -import mage.filter.StaticFilters; +import mage.filter.common.FilterControlledArtifactPermanent; import mage.filter.common.FilterControlledPermanent; import mage.filter.predicate.permanent.TokenPredicate; import mage.game.permanent.token.TreasureToken; @@ -28,6 +28,8 @@ public final class ScionOfOpulence extends CardImpl { private static final FilterPermanent filter = new FilterControlledPermanent(SubType.VAMPIRE, "nontoken Vampire you control"); + private static final FilterControlledPermanent filter2 + = new FilterControlledArtifactPermanent("artifacts"); static { filter.add(TokenPredicate.FALSE); @@ -50,9 +52,7 @@ public final class ScionOfOpulence extends CardImpl { Ability ability = new SimpleActivatedAbility( new ExileTopXMayPlayUntilEndOfTurnEffect(1), new ManaCostsImpl<>("{R}") ); - ability.addCost(new SacrificeTargetCost(new TargetControlledPermanent( - 2, StaticFilters.FILTER_CONTROLLED_PERMANENT_ARTIFACT_AN - ))); + ability.addCost(new SacrificeTargetCost(new TargetControlledPermanent(2, filter2))); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/s/SpectralShepherd.java b/Mage.Sets/src/mage/cards/s/SpectralShepherd.java index 998cad5702..0805892178 100644 --- a/Mage.Sets/src/mage/cards/s/SpectralShepherd.java +++ b/Mage.Sets/src/mage/cards/s/SpectralShepherd.java @@ -1,7 +1,5 @@ - package mage.cards.s; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; @@ -12,35 +10,29 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; -import mage.constants.TargetController; -import mage.constants.Zone; import mage.filter.common.FilterControlledPermanent; import mage.target.common.TargetControlledPermanent; +import java.util.UUID; + /** - * * @author escplan9 (Derek Monturo - dmontur1 at gmail dot com) */ public final class SpectralShepherd extends CardImpl { - - private static final FilterControlledPermanent filter = new FilterControlledPermanent("Spirit"); - static { - filter.add(TargetController.YOU.getControllerPredicate()); - filter.add(SubType.SPIRIT.getPredicate()); - } + private static final FilterControlledPermanent filter = new FilterControlledPermanent(SubType.SPIRIT); public SpectralShepherd(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{W}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{W}"); this.subtype.add(SubType.SPIRIT); this.power = new MageInt(2); this.toughness = new MageInt(2); // Flying this.addAbility(FlyingAbility.getInstance()); - + // {1}{U}: Return target Spirit you control to its owner's hand. - Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new ReturnToHandTargetEffect(), new ManaCostsImpl("{1}{U}")); + Ability ability = new SimpleActivatedAbility(new ReturnToHandTargetEffect(), new ManaCostsImpl<>("{1}{U}")); ability.addTarget(new TargetControlledPermanent(filter)); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/s/StromkirkCaptain.java b/Mage.Sets/src/mage/cards/s/StromkirkCaptain.java index 9382b75134..690c079a8a 100644 --- a/Mage.Sets/src/mage/cards/s/StromkirkCaptain.java +++ b/Mage.Sets/src/mage/cards/s/StromkirkCaptain.java @@ -1,8 +1,7 @@ - package mage.cards.s; -import java.util.UUID; import mage.MageInt; +import mage.abilities.Ability; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.effects.common.continuous.BoostControlledEffect; import mage.abilities.effects.common.continuous.GainAbilityControlledEffect; @@ -12,22 +11,20 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Duration; import mage.constants.SubType; -import mage.constants.Zone; import mage.filter.common.FilterCreaturePermanent; +import java.util.UUID; + /** - * * @author Loki */ public final class StromkirkCaptain extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Vampire creatures"); - static { - filter.add(SubType.VAMPIRE.getPredicate()); - } + private static final FilterCreaturePermanent filter + = new FilterCreaturePermanent(SubType.VAMPIRE, "Vampire creatures"); public StromkirkCaptain(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{B}{R}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{B}{R}"); this.subtype.add(SubType.VAMPIRE); this.subtype.add(SubType.SOLDIER); @@ -36,8 +33,13 @@ public final class StromkirkCaptain extends CardImpl { this.addAbility(FirstStrikeAbility.getInstance()); // Other Vampire creatures you control get +1/+1 and have first strike. - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostControlledEffect(1, 1, Duration.WhileOnBattlefield, filter, true))); - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityControlledEffect(FirstStrikeAbility.getInstance(), Duration.WhileOnBattlefield, filter, true))); + Ability ability = new SimpleStaticAbility(new BoostControlledEffect( + 1, 1, Duration.WhileOnBattlefield, filter, true + )); + ability.addEffect(new GainAbilityControlledEffect( + FirstStrikeAbility.getInstance(), Duration.WhileOnBattlefield, filter, true + ).setText("and have first strike")); + this.addAbility(ability); } private StromkirkCaptain(final StromkirkCaptain card) { diff --git a/Mage.Sets/src/mage/cards/s/StromkirkOccultist.java b/Mage.Sets/src/mage/cards/s/StromkirkOccultist.java index 6ecdc25ecb..7489eaaf92 100644 --- a/Mage.Sets/src/mage/cards/s/StromkirkOccultist.java +++ b/Mage.Sets/src/mage/cards/s/StromkirkOccultist.java @@ -62,7 +62,7 @@ class StromkirkOccultistExileEffect extends OneShotEffect { public StromkirkOccultistExileEffect() { super(Outcome.Detriment); - this.staticText = "Exile the top card of your library. Until end of turn, you may play that card"; + this.staticText = "exile the top card of your library. Until end of turn, you may play that card"; } public StromkirkOccultistExileEffect(final StromkirkOccultistExileEffect effect) { diff --git a/Mage.Sets/src/mage/cards/t/TiminYouthfulGeist.java b/Mage.Sets/src/mage/cards/t/TiminYouthfulGeist.java index 9e5797e053..e2e3582ba7 100644 --- a/Mage.Sets/src/mage/cards/t/TiminYouthfulGeist.java +++ b/Mage.Sets/src/mage/cards/t/TiminYouthfulGeist.java @@ -37,7 +37,8 @@ public final class TiminYouthfulGeist extends CardImpl { // At the beginning of each combat, tap up to one target creature. Ability ability = new BeginningOfCombatTriggeredAbility( - new TapTargetEffect(), TargetController.ANY, false + new TapTargetEffect().setText("tap up to one target creature"), + TargetController.ANY, false ); ability.addTarget(new TargetCreaturePermanent(0, 1)); this.addAbility(ability); diff --git a/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java b/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java index 2a6b597c0e..84988f7daf 100644 --- a/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java +++ b/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java @@ -58,7 +58,7 @@ public class VerifyCardDataTest { private static final Logger logger = Logger.getLogger(VerifyCardDataTest.class); - private static final String FULL_ABILITIES_CHECK_SET_CODE = "VOW"; // check all abilities and output cards with wrong abilities texts; + private static final String FULL_ABILITIES_CHECK_SET_CODE = "VOC"; // 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/effects/keyword/InvestigateEffect.java b/Mage/src/main/java/mage/abilities/effects/keyword/InvestigateEffect.java index e4b04c1af8..1ac4c6fc9b 100644 --- a/Mage/src/main/java/mage/abilities/effects/keyword/InvestigateEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/keyword/InvestigateEffect.java @@ -67,13 +67,13 @@ public class InvestigateEffect extends OneShotEffect { message = ". (C"; break; case 2: - message = "twice. (To investigate, c"; + message = " twice. (To investigate, c"; break; default: - message = CardUtil.numberToText(value) + " times. (To investigate, c"; + message = ' ' + CardUtil.numberToText(value) + " times. (To investigate, c"; } } else { - message = "X times, where X is the " + amount.getMessage() + ". (To investigate, c"; + message = " X times, where X is the " + amount.getMessage() + ". (To investigate, c"; } return "investigate" + message + "reate a colorless Clue artifact token " + "with \"{2}, Sacrifice this artifact: Draw a card.\")";