From a98ff3867cb55b98f2b5c3823934d1efa7d443c2 Mon Sep 17 00:00:00 2001 From: xenohedron Date: Sun, 3 Nov 2024 21:40:07 -0500 Subject: [PATCH] various text fixes --- .../src/mage/cards/a/AbyssalHarvester.java | 52 ++++++++++--------- .../src/mage/cards/a/AncientGreenwarden.java | 2 +- .../cards/b/BlackPantherWakandanKing.java | 23 ++++---- Mage.Sets/src/mage/cards/b/BloodBurglar.java | 3 +- .../src/mage/cards/b/BrimazKingOfOreskos.java | 2 +- .../cards/c/CaptainAmericaFirstAvenger.java | 2 +- Mage.Sets/src/mage/cards/c/CatCollector.java | 8 +-- .../src/mage/cards/c/CherishedHatchling.java | 5 +- .../src/mage/cards/c/CleonMerryChampion.java | 3 +- .../mage/cards/d/DionusElvishArchdruid.java | 43 +++++++++++---- .../src/mage/cards/d/DivineResilience.java | 5 +- .../src/mage/cards/d/DreadwingScavenger.java | 2 +- .../src/mage/cards/d/DropkickBomber.java | 3 +- Mage.Sets/src/mage/cards/d/DrownInDreams.java | 2 +- .../src/mage/cards/e/EternalTaskmaster.java | 4 +- Mage.Sets/src/mage/cards/f/FellingBlow.java | 5 +- .../src/mage/cards/f/FieryAnnihilation.java | 2 +- .../src/mage/cards/g/GarruksPackleader.java | 15 +++--- .../src/mage/cards/g/GiadaFontOfHope.java | 2 +- .../src/mage/cards/g/GoblinBoarders.java | 2 +- Mage.Sets/src/mage/cards/g/GrabThePrize.java | 4 +- .../src/mage/cards/i/InfernalVessel.java | 4 +- .../src/mage/cards/i/InspiringCommander.java | 8 +-- .../src/mage/cards/k/KykarZephyrAwakener.java | 2 +- .../src/mage/cards/m/MentorOfTheMeek.java | 14 ++--- .../src/mage/cards/m/MoonCircuitHacker.java | 2 +- .../mage/cards/n/NabanDeanOfIteration.java | 2 +- .../src/mage/cards/n/NaiadOfHiddenCoves.java | 2 +- .../src/mage/cards/r/RevengeOfTheRats.java | 6 +-- Mage.Sets/src/mage/cards/s/ShieldMare.java | 2 +- .../src/mage/cards/s/ShroofusSproutsire.java | 2 +- .../src/mage/cards/s/SkyknightSquire.java | 2 +- .../src/mage/cards/t/ThuridMareOfDestiny.java | 2 +- .../src/mage/cards/t/TriumphOfCruelty.java | 2 +- .../src/mage/cards/t/TriumphOfFerocity.java | 2 +- .../src/mage/cards/w/WaterkinShaman.java | 8 +-- ...tlefieldThisOrAnotherTriggeredAbility.java | 2 +- .../decorator/ConditionalOneShotEffect.java | 16 +++++- .../KaitoCunningInfiltratorEmblem.java | 2 +- 39 files changed, 153 insertions(+), 116 deletions(-) diff --git a/Mage.Sets/src/mage/cards/a/AbyssalHarvester.java b/Mage.Sets/src/mage/cards/a/AbyssalHarvester.java index 941cd945758..eca7acd1984 100644 --- a/Mage.Sets/src/mage/cards/a/AbyssalHarvester.java +++ b/Mage.Sets/src/mage/cards/a/AbyssalHarvester.java @@ -28,7 +28,6 @@ import java.util.List; import java.util.UUID; /** - * * @author ciaccona007 */ public final class AbyssalHarvester extends CardImpl { @@ -43,7 +42,7 @@ public final class AbyssalHarvester extends CardImpl { public AbyssalHarvester(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{B}{B}"); - + this.subtype.add(SubType.DEMON); this.subtype.add(SubType.WARLOCK); this.power = new MageInt(3); @@ -68,10 +67,16 @@ public final class AbyssalHarvester extends CardImpl { class AbyssalHarvesterEffect extends OneShotEffect { - public AbyssalHarvesterEffect() { + private static final FilterPermanent filter = new FilterControlledPermanent(); + static { + filter.add(TokenPredicate.TRUE); + filter.add(SubType.NIGHTMARE.getPredicate()); + } + + AbyssalHarvesterEffect() { super(Outcome.PutCreatureInPlay); this.staticText = "Exile target creature card from a graveyard that was put there this turn. " - + "Create a token that's a copy of it, except it's a Nightmare in addition to its other types." + + "Create a token that's a copy of it, except it's a Nightmare in addition to its other types. " + "Then exile all other Nightmare tokens you control"; } @@ -88,25 +93,24 @@ class AbyssalHarvesterEffect extends OneShotEffect { public boolean apply(Game game, Ability source) { Card card = game.getCard(source.getFirstTarget()); Player controller = game.getPlayer(source.getControllerId()); - if (controller != null && card != null) { - controller.moveCards(card, Zone.EXILED, source, game); // Also if the move to exile is replaced, the copy takes place - CreateTokenCopyTargetEffect effect = new CreateTokenCopyTargetEffect(source.getControllerId(), null, false, 1, false, false, null); - effect.setTargetPointer(new FixedTarget(card, game)); - effect.withAdditionalSubType(SubType.NIGHTMARE); - effect.apply(game, source); - FilterPermanent filter = new FilterControlledPermanent(); - filter.add(TokenPredicate.TRUE); - filter.add(SubType.NIGHTMARE.getPredicate()); - List addedTokens = effect.getAddedPermanents(); - Cards cards = new CardsImpl(); - for(Permanent permanent : game.getBattlefield().getActivePermanents(filter, source.getControllerId(), game)) { - if(!addedTokens.contains(permanent)) { - cards.add(permanent.getId()); - } - } - controller.moveCards(cards, Zone.EXILED, source, game); - return true; + if (controller == null || card == null) { + return false; } - return false; + controller.moveCards(card, Zone.EXILED, source, game); // Also if the move to exile is replaced, the copy takes place + game.processAction(); + CreateTokenCopyTargetEffect effect = new CreateTokenCopyTargetEffect(source.getControllerId(), null, false, 1, false, false, null); + effect.setTargetPointer(new FixedTarget(card, game)); + effect.withAdditionalSubType(SubType.NIGHTMARE); + effect.apply(game, source); + game.processAction(); + List addedTokens = effect.getAddedPermanents(); + Cards cards = new CardsImpl(); + for (Permanent permanent : game.getBattlefield().getActivePermanents(filter, source.getControllerId(), game)) { + if (!addedTokens.contains(permanent)) { + cards.add(permanent.getId()); + } + } + controller.moveCards(cards, Zone.EXILED, source, game); + return true; } -} \ No newline at end of file +} diff --git a/Mage.Sets/src/mage/cards/a/AncientGreenwarden.java b/Mage.Sets/src/mage/cards/a/AncientGreenwarden.java index 99e8a054976..02ceceeb46e 100644 --- a/Mage.Sets/src/mage/cards/a/AncientGreenwarden.java +++ b/Mage.Sets/src/mage/cards/a/AncientGreenwarden.java @@ -56,7 +56,7 @@ class AncientGreenwardenEffect extends ReplacementEffectImpl { AncientGreenwardenEffect() { super(Duration.WhileOnBattlefield, Outcome.Benefit); - staticText = "If a land entering the battlefield causes a triggered ability " + + staticText = "If a land entering causes a triggered ability " + "of a permanent you control to trigger, that ability triggers an additional time"; } diff --git a/Mage.Sets/src/mage/cards/b/BlackPantherWakandanKing.java b/Mage.Sets/src/mage/cards/b/BlackPantherWakandanKing.java index b3dd4555e47..938d54bde6e 100644 --- a/Mage.Sets/src/mage/cards/b/BlackPantherWakandanKing.java +++ b/Mage.Sets/src/mage/cards/b/BlackPantherWakandanKing.java @@ -1,6 +1,5 @@ package mage.cards.b; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldThisOrAnotherTriggeredAbility; @@ -8,18 +7,23 @@ import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.mana.GenericManaCost; import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.common.counter.AddCountersTargetEffect; -import mage.constants.*; import mage.abilities.keyword.FirstStrikeAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.SubType; +import mage.constants.SuperType; import mage.counters.CounterType; import mage.filter.StaticFilters; -import mage.filter.common.FilterLandPermanent; +import mage.filter.common.FilterControlledLandPermanent; import mage.game.Game; import mage.game.permanent.Permanent; import mage.players.Player; +import mage.target.TargetPermanent; import mage.target.common.TargetCreaturePermanent; -import mage.target.common.TargetLandPermanent; + +import java.util.UUID; /** * @@ -27,10 +31,7 @@ import mage.target.common.TargetLandPermanent; */ public final class BlackPantherWakandanKing extends CardImpl { - private static final FilterLandPermanent filter = new FilterLandPermanent(); - static { - filter.add(TargetController.YOU.getControllerPredicate()); - } + private static final FilterControlledLandPermanent filter = new FilterControlledLandPermanent(); public BlackPantherWakandanKing(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{G}{W}"); @@ -51,13 +52,13 @@ public final class BlackPantherWakandanKing extends CardImpl { new AddCountersTargetEffect(CounterType.P1P1.createInstance()), StaticFilters.FILTER_PERMANENT_CREATURE, false, true).setTriggerPhrase( "Whenever {this} or another creature you control enters, "); - ability.addTarget(new TargetLandPermanent(filter)); + ability.addTarget(new TargetPermanent(filter)); this.addAbility(ability.withFlavorWord("Survey the Realm")); // Mine Vibranium — {3}: Move all +1/+1 counters from target land you control onto target creature. If one or // more +1/+1 counters are moved this way, you gain that much life and draw a card. ability = new SimpleActivatedAbility(new BlackPantherWakandanKingEffect(), new GenericManaCost(3)); - ability.addTarget(new TargetLandPermanent(filter)); + ability.addTarget(new TargetPermanent(filter)); ability.addTarget(new TargetCreaturePermanent()); this.addAbility(ability.withFlavorWord("Mine Vibranium")); } @@ -113,4 +114,4 @@ class BlackPantherWakandanKingEffect extends OneShotEffect { } return true; } -} \ No newline at end of file +} diff --git a/Mage.Sets/src/mage/cards/b/BloodBurglar.java b/Mage.Sets/src/mage/cards/b/BloodBurglar.java index a518ddf1303..337a1379e0f 100644 --- a/Mage.Sets/src/mage/cards/b/BloodBurglar.java +++ b/Mage.Sets/src/mage/cards/b/BloodBurglar.java @@ -35,8 +35,7 @@ public final class BloodBurglar extends CardImpl { LifelinkAbility.getInstance(), Duration.WhileOnBattlefield ), MyTurnCondition.instance, - "As long as it's your turn, " - + "{this} has lifelink." + "During your turn, {this} has lifelink." ) ).addHint(MyTurnHint.instance)); } diff --git a/Mage.Sets/src/mage/cards/b/BrimazKingOfOreskos.java b/Mage.Sets/src/mage/cards/b/BrimazKingOfOreskos.java index 5689493c628..2e78b4dd69a 100644 --- a/Mage.Sets/src/mage/cards/b/BrimazKingOfOreskos.java +++ b/Mage.Sets/src/mage/cards/b/BrimazKingOfOreskos.java @@ -60,7 +60,7 @@ class BrimazKingOfOreskosEffect extends OneShotEffect { BrimazKingOfOreskosEffect() { super(Outcome.Benefit); - this.staticText = "create a 1/1 white Cat Soldier creature token with vigilance blocking that creature"; + this.staticText = "create a 1/1 white Cat Soldier creature token with vigilance that's blocking that creature"; } private BrimazKingOfOreskosEffect(final BrimazKingOfOreskosEffect effect) { diff --git a/Mage.Sets/src/mage/cards/c/CaptainAmericaFirstAvenger.java b/Mage.Sets/src/mage/cards/c/CaptainAmericaFirstAvenger.java index be037d2e8f0..9b8da42a407 100644 --- a/Mage.Sets/src/mage/cards/c/CaptainAmericaFirstAvenger.java +++ b/Mage.Sets/src/mage/cards/c/CaptainAmericaFirstAvenger.java @@ -194,7 +194,7 @@ class CaptainAmericaFirstAvengerCatchEffect extends OneShotEffect { CaptainAmericaFirstAvengerCatchEffect() { super(Outcome.Benefit); - staticText = "attach target Equipment you control to {this}"; + staticText = "attach up to one target Equipment you control to {this}"; } private CaptainAmericaFirstAvengerCatchEffect(final CaptainAmericaFirstAvengerCatchEffect effect) { diff --git a/Mage.Sets/src/mage/cards/c/CatCollector.java b/Mage.Sets/src/mage/cards/c/CatCollector.java index f9c22f0d41e..3999eb9fae0 100644 --- a/Mage.Sets/src/mage/cards/c/CatCollector.java +++ b/Mage.Sets/src/mage/cards/c/CatCollector.java @@ -48,8 +48,9 @@ public final class CatCollector extends CardImpl { class CatCollectorTriggeredAbility extends GainLifeFirstTimeTriggeredAbility { - public CatCollectorTriggeredAbility() { + CatCollectorTriggeredAbility() { super(new CreateTokenEffect(new CatToken3())); + setTriggerPhrase("Whenever you gain life for the first time during each of your turns, "); } private CatCollectorTriggeredAbility(final CatCollectorTriggeredAbility ability) { @@ -66,9 +67,4 @@ class CatCollectorTriggeredAbility extends GainLifeFirstTimeTriggeredAbility { return super.checkTrigger(event, game) && game.isActivePlayer(event.getPlayerId()); } - @Override - public String getRule() { - return "Whenever you gain life for the first time during each of your turns, " - + "create a 1/1 white Cat creature token"; - } } diff --git a/Mage.Sets/src/mage/cards/c/CherishedHatchling.java b/Mage.Sets/src/mage/cards/c/CherishedHatchling.java index 3626f6401c6..aa93168f1b2 100644 --- a/Mage.Sets/src/mage/cards/c/CherishedHatchling.java +++ b/Mage.Sets/src/mage/cards/c/CherishedHatchling.java @@ -69,9 +69,8 @@ class CherishedHatchlingTriggeredAbility extends DelayedTriggeredAbility { private static Effect getEffectToAdd() { Ability abilityToAdd = new EntersBattlefieldTriggeredAbility(new FightTargetSourceEffect().setText("you may have it fight another target creature"), true); abilityToAdd.addTarget(new TargetCreaturePermanent(StaticFilters.FILTER_ANOTHER_TARGET_CREATURE)); - Effect effect = new GainAbilityTargetEffect(abilityToAdd, Duration.EndOfTurn, - "it gains \"When this creature enters the battlefield, you may have it fight another target creature.\"", true); - return effect; + return new GainAbilityTargetEffect(abilityToAdd, Duration.EndOfTurn, + "it gains \"When this creature enters, you may have it fight another target creature.\"", true); } private CherishedHatchlingTriggeredAbility(final CherishedHatchlingTriggeredAbility ability) { diff --git a/Mage.Sets/src/mage/cards/c/CleonMerryChampion.java b/Mage.Sets/src/mage/cards/c/CleonMerryChampion.java index d68b5247e61..e42ba3a3f33 100644 --- a/Mage.Sets/src/mage/cards/c/CleonMerryChampion.java +++ b/Mage.Sets/src/mage/cards/c/CleonMerryChampion.java @@ -31,7 +31,8 @@ public final class CleonMerryChampion extends CardImpl { this.addAbility(DoubleStrikeAbility.getInstance()); // Heroic -- Whenever you cast a spell that targets Cleon, exile the top card of your library. You may play that card until the end of your next turn. - this.addAbility(new HeroicAbility(new ExileTopXMayPlayUntilEffect(1, Duration.UntilEndOfYourNextTurn))); + this.addAbility(new HeroicAbility(new ExileTopXMayPlayUntilEffect(1, Duration.UntilEndOfYourNextTurn) + .withTextOptions("that card", true))); } private CleonMerryChampion(final CleonMerryChampion card) { diff --git a/Mage.Sets/src/mage/cards/d/DionusElvishArchdruid.java b/Mage.Sets/src/mage/cards/d/DionusElvishArchdruid.java index 51a3a2974d2..29102c35c73 100644 --- a/Mage.Sets/src/mage/cards/d/DionusElvishArchdruid.java +++ b/Mage.Sets/src/mage/cards/d/DionusElvishArchdruid.java @@ -1,21 +1,23 @@ package mage.cards.d; -import java.util.UUID; import mage.MageInt; -import mage.abilities.Ability; import mage.abilities.common.BecomesTappedSourceTriggeredAbility; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.effects.common.UntapSourceEffect; import mage.abilities.effects.common.continuous.GainAbilityControlledEffect; import mage.abilities.effects.common.counter.AddCountersSourceEffect; -import mage.constants.Duration; -import mage.constants.SubType; -import mage.constants.SuperType; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.SubType; +import mage.constants.SuperType; import mage.counters.CounterType; import mage.filter.common.FilterControlledCreaturePermanent; +import mage.game.Game; +import mage.game.events.GameEvent; + +import java.util.UUID; /** * @@ -34,10 +36,7 @@ public final class DionusElvishArchdruid extends CardImpl { this.toughness = new MageInt(3); // Elves you control have "Whenever this creature becomes tapped during your turn, untap it and put a +1/+1 counter on it. This ability triggers only once each turn." - Ability untapAndGrow = new BecomesTappedSourceTriggeredAbility(new UntapSourceEffect()).setTriggersLimitEachTurn(1); - untapAndGrow.addEffect(new AddCountersSourceEffect(CounterType.P1P1.createInstance())); - - this.addAbility(new SimpleStaticAbility(new GainAbilityControlledEffect(untapAndGrow, + this.addAbility(new SimpleStaticAbility(new GainAbilityControlledEffect(new DionusTriggeredAbility(), Duration.WhileOnBattlefield, filter, false))); } @@ -50,3 +49,29 @@ public final class DionusElvishArchdruid extends CardImpl { return new DionusElvishArchdruid(this); } } + +class DionusTriggeredAbility extends BecomesTappedSourceTriggeredAbility { + + DionusTriggeredAbility() { + super(new UntapSourceEffect().setText("untap it"), false); + addEffect(new AddCountersSourceEffect(CounterType.P1P1.createInstance()) + .setText("and put a +1/+1 counter on it")); + setTriggerPhrase("Whenever this creature becomes tapped during your turn, "); + setTriggersLimitEachTurn(1); + } + + private DionusTriggeredAbility(final DionusTriggeredAbility ability) { + super(ability); + } + + @Override + public DionusTriggeredAbility copy() { + return new DionusTriggeredAbility(this); + } + + @Override + public boolean checkTrigger(GameEvent event, Game game) { + return game.isActivePlayer(this.getControllerId()) && super.checkTrigger(event, game); + } + +} diff --git a/Mage.Sets/src/mage/cards/d/DivineResilience.java b/Mage.Sets/src/mage/cards/d/DivineResilience.java index ff380bc190a..58b3d0b1272 100644 --- a/Mage.Sets/src/mage/cards/d/DivineResilience.java +++ b/Mage.Sets/src/mage/cards/d/DivineResilience.java @@ -1,7 +1,6 @@ package mage.cards.d; import mage.abilities.condition.common.KickedCondition; -import mage.abilities.decorator.ConditionalOneShotEffect; import mage.abilities.effects.common.continuous.GainAbilityTargetEffect; import mage.abilities.keyword.IndestructibleAbility; import mage.abilities.keyword.KickerAbility; @@ -28,7 +27,9 @@ public final class DivineResilience extends CardImpl { this.addAbility(new KickerAbility("{2}{W}")); // Target creature you control gains indestructible until end of turn. If this spell was kicked, instead any number of target creatures you control gain indestructible until end of turn. - this.getSpellAbility().addEffect(new GainAbilityTargetEffect(IndestructibleAbility.getInstance())); + this.getSpellAbility().addEffect(new GainAbilityTargetEffect(IndestructibleAbility.getInstance()) + .setText("Target creature you control gains indestructible until end of turn. " + + "If this spell was kicked, instead any number of target creatures you control gain indestructible until end of turn")); this.getSpellAbility().addTarget(new TargetControlledCreaturePermanent()); this.getSpellAbility().setTargetAdjuster(new ConditionalTargetAdjuster( KickedCondition.ONCE, diff --git a/Mage.Sets/src/mage/cards/d/DreadwingScavenger.java b/Mage.Sets/src/mage/cards/d/DreadwingScavenger.java index 623427626c9..80edc4f863e 100644 --- a/Mage.Sets/src/mage/cards/d/DreadwingScavenger.java +++ b/Mage.Sets/src/mage/cards/d/DreadwingScavenger.java @@ -47,7 +47,7 @@ public final class DreadwingScavenger extends CardImpl { )); ability.addEffect(new ConditionalContinuousEffect( new GainAbilitySourceEffect(DeathtouchAbility.getInstance()), - ThresholdCondition.instance, "and has deathtouch" + ThresholdCondition.instance, "and has deathtouch as long as there are seven or more cards in your graveyard" )); ability.setAbilityWord(AbilityWord.THRESHOLD); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/cards/d/DropkickBomber.java b/Mage.Sets/src/mage/cards/d/DropkickBomber.java index c8090d88c0c..2a1075bcf26 100644 --- a/Mage.Sets/src/mage/cards/d/DropkickBomber.java +++ b/Mage.Sets/src/mage/cards/d/DropkickBomber.java @@ -59,7 +59,8 @@ public final class DropkickBomber extends CardImpl { // {R}: Until end of turn, another target Goblin you control gains flying and "When this creature deals combat damage, sacrifice it." Ability ability = new SimpleActivatedAbility( Zone.BATTLEFIELD, - new GainAbilityTargetEffect(FlyingAbility.getInstance(), Duration.EndOfTurn), + new GainAbilityTargetEffect(FlyingAbility.getInstance(), Duration.EndOfTurn) + .setText("Until end of turn, another target Goblin you control gains flying"), new ManaCostsImpl<>("{R}") ); ability.addEffect( diff --git a/Mage.Sets/src/mage/cards/d/DrownInDreams.java b/Mage.Sets/src/mage/cards/d/DrownInDreams.java index 50712f11214..75663bd265d 100644 --- a/Mage.Sets/src/mage/cards/d/DrownInDreams.java +++ b/Mage.Sets/src/mage/cards/d/DrownInDreams.java @@ -26,7 +26,7 @@ public final class DrownInDreams extends CardImpl { // Choose one. If you control a commander as you cast this spell, you may choose both. this.getSpellAbility().getModes().setChooseText( - "Choose one. If you control a commander as you cast this spell, you may choose both." + "Choose one. If you control a commander as you cast this spell, you may choose both instead." ); this.getSpellAbility().getModes().setMoreCondition(2, ControlACommanderCondition.instance); diff --git a/Mage.Sets/src/mage/cards/e/EternalTaskmaster.java b/Mage.Sets/src/mage/cards/e/EternalTaskmaster.java index 16b2b38cea0..70cf34c3f8e 100644 --- a/Mage.Sets/src/mage/cards/e/EternalTaskmaster.java +++ b/Mage.Sets/src/mage/cards/e/EternalTaskmaster.java @@ -6,7 +6,7 @@ import mage.abilities.common.AttacksTriggeredAbility; import mage.abilities.common.EntersBattlefieldTappedAbility; import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.effects.common.DoIfCostPaid; -import mage.abilities.effects.common.ReturnToHandTargetEffect; +import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; @@ -33,7 +33,7 @@ public final class EternalTaskmaster extends CardImpl { // Whenever Eternal Taskmaster attacks, you may pay {2}{B}. If you do, return target creature card from your graveyard to your hand. Ability ability = new AttacksTriggeredAbility(new DoIfCostPaid( - new ReturnToHandTargetEffect(), new ManaCostsImpl<>("{2}{B}") + new ReturnFromGraveyardToHandTargetEffect(), new ManaCostsImpl<>("{2}{B}") ), false); ability.addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_CREATURE_YOUR_GRAVEYARD)); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/cards/f/FellingBlow.java b/Mage.Sets/src/mage/cards/f/FellingBlow.java index a3360f4416d..756df28bf0e 100644 --- a/Mage.Sets/src/mage/cards/f/FellingBlow.java +++ b/Mage.Sets/src/mage/cards/f/FellingBlow.java @@ -6,9 +6,8 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.counters.CounterType; -import mage.filter.StaticFilters; -import mage.target.TargetPermanent; import mage.target.common.TargetControlledCreaturePermanent; +import mage.target.common.TargetOpponentsCreaturePermanent; import java.util.UUID; @@ -25,7 +24,7 @@ public final class FellingBlow extends CardImpl { this.getSpellAbility().addEffect(new AddCountersTargetEffect(CounterType.P1P1.createInstance())); this.getSpellAbility().addTarget(new TargetControlledCreaturePermanent()); this.getSpellAbility().addEffect(new DamageWithPowerFromOneToAnotherTargetEffect("that creature").concatBy("Then")); - this.getSpellAbility().addTarget(new TargetPermanent(StaticFilters.FILTER_OPPONENTS_PERMANENT_A_CREATURE)); + this.getSpellAbility().addTarget(new TargetOpponentsCreaturePermanent()); } private FellingBlow(final FellingBlow card) { diff --git a/Mage.Sets/src/mage/cards/f/FieryAnnihilation.java b/Mage.Sets/src/mage/cards/f/FieryAnnihilation.java index ce2c4bb70ac..6b54ad299ca 100644 --- a/Mage.Sets/src/mage/cards/f/FieryAnnihilation.java +++ b/Mage.Sets/src/mage/cards/f/FieryAnnihilation.java @@ -37,7 +37,7 @@ public final class FieryAnnihilation extends CardImpl { // Fiery Annihilation deals 5 damage to target creature. Exile up to one target Equipment attached to that creature. If that creature would die this turn, exile it instead. this.getSpellAbility().addEffect(new DamageTargetEffect( - 5, true, "{this}", true + 5, true, "target creature", true )); this.getSpellAbility().addEffect(new ExileTargetEffect() .setTargetPointer(new SecondTargetPointer()) diff --git a/Mage.Sets/src/mage/cards/g/GarruksPackleader.java b/Mage.Sets/src/mage/cards/g/GarruksPackleader.java index 937bdb45658..f3cc9b056ab 100644 --- a/Mage.Sets/src/mage/cards/g/GarruksPackleader.java +++ b/Mage.Sets/src/mage/cards/g/GarruksPackleader.java @@ -1,21 +1,20 @@ - - package mage.cards.g; -import java.util.UUID; import mage.MageInt; -import mage.abilities.common.EntersBattlefieldControlledTriggeredAbility; +import mage.abilities.common.EntersBattlefieldAllTriggeredAbility; import mage.abilities.effects.common.DrawCardSourceControllerEffect; 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.constants.Zone; import mage.filter.FilterPermanent; import mage.filter.common.FilterControlledCreaturePermanent; -import mage.filter.predicate.mageobject.PowerPredicate; import mage.filter.predicate.mageobject.AnotherPredicate; +import mage.filter.predicate.mageobject.PowerPredicate; + +import java.util.UUID; /** * @@ -23,7 +22,7 @@ import mage.filter.predicate.mageobject.AnotherPredicate; */ public final class GarruksPackleader extends CardImpl { - private static final FilterPermanent filter = new FilterControlledCreaturePermanent("another creature with power 3 or greater"); + private static final FilterPermanent filter = new FilterControlledCreaturePermanent("another creature you control with power 3 or greater"); static { filter.add(AnotherPredicate.instance); filter.add(new PowerPredicate(ComparisonType.MORE_THAN, 2)); @@ -36,7 +35,7 @@ public final class GarruksPackleader extends CardImpl { this.power = new MageInt(4); this.toughness = new MageInt(4); - this.addAbility(new EntersBattlefieldControlledTriggeredAbility( + this.addAbility(new EntersBattlefieldAllTriggeredAbility( Zone.BATTLEFIELD, new DrawCardSourceControllerEffect(1), filter, true)); } diff --git a/Mage.Sets/src/mage/cards/g/GiadaFontOfHope.java b/Mage.Sets/src/mage/cards/g/GiadaFontOfHope.java index 954619ea97c..27a0534245f 100644 --- a/Mage.Sets/src/mage/cards/g/GiadaFontOfHope.java +++ b/Mage.Sets/src/mage/cards/g/GiadaFontOfHope.java @@ -78,7 +78,7 @@ class GiadaFontOfHopeEntersBattlefieldEffect extends ReplacementEffectImpl { GiadaFontOfHopeEntersBattlefieldEffect() { super(Duration.WhileOnBattlefield, Outcome.BoostCreature); - staticText = "Each other Angel you control enters the battlefield with an additional +1/+1 counter on it for each Angel you already control."; + staticText = "Each other Angel you control enters with an additional +1/+1 counter on it for each Angel you already control."; } private GiadaFontOfHopeEntersBattlefieldEffect(GiadaFontOfHopeEntersBattlefieldEffect effect) { diff --git a/Mage.Sets/src/mage/cards/g/GoblinBoarders.java b/Mage.Sets/src/mage/cards/g/GoblinBoarders.java index 12ce53772bc..e2c65461ff9 100644 --- a/Mage.Sets/src/mage/cards/g/GoblinBoarders.java +++ b/Mage.Sets/src/mage/cards/g/GoblinBoarders.java @@ -32,7 +32,7 @@ public final class GoblinBoarders extends CardImpl { // Raid -- This creature enters with a +1/+1 counter on it if you attacked this turn. this.addAbility(new EntersBattlefieldAbility(new ConditionalOneShotEffect( new AddCountersSourceEffect(CounterType.P1P1.createInstance()), RaidCondition.instance, "" - ), "with a +1/+1 counter on it if a creature died this turn") + ), "with a +1/+1 counter on it if you attacked this turn") .setAbilityWord(AbilityWord.RAID) .addHint(RaidHint.instance), new PlayerAttackedWatcher()); } diff --git a/Mage.Sets/src/mage/cards/g/GrabThePrize.java b/Mage.Sets/src/mage/cards/g/GrabThePrize.java index 7bdf108bad5..7e330c34e5d 100644 --- a/Mage.Sets/src/mage/cards/g/GrabThePrize.java +++ b/Mage.Sets/src/mage/cards/g/GrabThePrize.java @@ -34,7 +34,7 @@ public final class GrabThePrize extends CardImpl { this.getSpellAbility().addEffect(new ConditionalOneShotEffect( new DamagePlayersEffect(2, TargetController.OPPONENT), GrabThePrizeCondition.instance, - "If the discarded card wasn't a land card, {this} deals two damage to each opponent.")); + "If the discarded card wasn't a land card, {this} deals 2 damage to each opponent.")); } private GrabThePrize(final GrabThePrize card) { @@ -57,4 +57,4 @@ enum GrabThePrizeCondition implements Condition { .flatMap(Collection::stream) .anyMatch(card -> !card.isLand(game)); } -} \ No newline at end of file +} diff --git a/Mage.Sets/src/mage/cards/i/InfernalVessel.java b/Mage.Sets/src/mage/cards/i/InfernalVessel.java index 42d5bce4d64..41408b1b061 100644 --- a/Mage.Sets/src/mage/cards/i/InfernalVessel.java +++ b/Mage.Sets/src/mage/cards/i/InfernalVessel.java @@ -38,7 +38,7 @@ public final class InfernalVessel extends CardImpl { this.addAbility(new ConditionalInterveningIfTriggeredAbility( new DiesSourceTriggeredAbility(new InfernalVesselReturnEffect()), InfernalVesselCondition.instance, - "if it wasn't a Demon, return it to the battlefield under its owner's control " + "When this creature dies, if it wasn't a Demon, return it to the battlefield under its owner's control " + "with two +1/+1 counters on it. It's a Demon in addition to its other types" )); } @@ -81,7 +81,7 @@ class InfernalVesselReturnEffect extends OneShotEffect { @Override public boolean apply(Game game, Ability source) { Player controller = game.getPlayer(source.getControllerId()); - if (controller == null || !(game.getState().getZone(source.getSourceId()) == Zone.GRAVEYARD)) { + if (controller == null || game.getState().getZone(source.getSourceId()) != Zone.GRAVEYARD) { return false; } Card card = game.getCard(source.getSourceId()); diff --git a/Mage.Sets/src/mage/cards/i/InspiringCommander.java b/Mage.Sets/src/mage/cards/i/InspiringCommander.java index 2af3c6c1977..1c5a5a03c33 100644 --- a/Mage.Sets/src/mage/cards/i/InspiringCommander.java +++ b/Mage.Sets/src/mage/cards/i/InspiringCommander.java @@ -2,7 +2,7 @@ package mage.cards.i; import mage.MageInt; import mage.abilities.Ability; -import mage.abilities.common.EntersBattlefieldControlledTriggeredAbility; +import mage.abilities.common.EntersBattlefieldAllTriggeredAbility; import mage.abilities.effects.Effect; import mage.abilities.effects.common.DrawCardSourceControllerEffect; import mage.abilities.effects.common.GainLifeEffect; @@ -14,8 +14,8 @@ import mage.constants.SubType; import mage.constants.Zone; import mage.filter.FilterPermanent; import mage.filter.common.FilterControlledCreaturePermanent; -import mage.filter.predicate.mageobject.PowerPredicate; import mage.filter.predicate.mageobject.AnotherPredicate; +import mage.filter.predicate.mageobject.PowerPredicate; import java.util.UUID; @@ -24,7 +24,7 @@ import java.util.UUID; */ public final class InspiringCommander extends CardImpl { - private static final FilterPermanent filter = new FilterControlledCreaturePermanent("another creature with power 2 or less"); + private static final FilterPermanent filter = new FilterControlledCreaturePermanent("another creature you control with power 2 or less"); static { filter.add(AnotherPredicate.instance); @@ -42,7 +42,7 @@ public final class InspiringCommander extends CardImpl { // Whenever another creature with power 2 or less you control enters, you gain 1 life and draw a card. Effect effect1 = new GainLifeEffect(1); Effect effect2 = new DrawCardSourceControllerEffect(1); - Ability ability = new EntersBattlefieldControlledTriggeredAbility( + Ability ability = new EntersBattlefieldAllTriggeredAbility( Zone.BATTLEFIELD, effect1, filter, false); ability.addEffect(effect2.setText("and draw a card")); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/cards/k/KykarZephyrAwakener.java b/Mage.Sets/src/mage/cards/k/KykarZephyrAwakener.java index 06d3c2a3eed..b3b4c9c4b01 100644 --- a/Mage.Sets/src/mage/cards/k/KykarZephyrAwakener.java +++ b/Mage.Sets/src/mage/cards/k/KykarZephyrAwakener.java @@ -38,7 +38,7 @@ public final class KykarZephyrAwakener extends CardImpl { // Whenever you cast a noncreature spell, choose one -- // * Exile another target creature you control. Return it to the battlefield under its owner's control at the beginning of the next end step. Ability ability = new SpellCastControllerTriggeredAbility( - new ExileReturnBattlefieldNextEndStepTargetEffect().withTextThatCard(false), + new ExileReturnBattlefieldNextEndStepTargetEffect().withTextThatCard(true), StaticFilters.FILTER_SPELL_A_NON_CREATURE, false ); ability.addTarget(new TargetPermanent(StaticFilters.FILTER_ANOTHER_TARGET_CREATURE_YOU_CONTROL)); diff --git a/Mage.Sets/src/mage/cards/m/MentorOfTheMeek.java b/Mage.Sets/src/mage/cards/m/MentorOfTheMeek.java index 79e9e1c4ec2..e9f54af7eb3 100644 --- a/Mage.Sets/src/mage/cards/m/MentorOfTheMeek.java +++ b/Mage.Sets/src/mage/cards/m/MentorOfTheMeek.java @@ -1,10 +1,8 @@ - package mage.cards.m; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; -import mage.abilities.common.EntersBattlefieldControlledTriggeredAbility; +import mage.abilities.common.EntersBattlefieldAllTriggeredAbility; import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.effects.Effect; import mage.abilities.effects.common.DoIfCostPaid; @@ -12,20 +10,22 @@ import mage.abilities.effects.common.DrawCardSourceControllerEffect; 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.constants.Zone; import mage.filter.FilterPermanent; import mage.filter.common.FilterControlledCreaturePermanent; -import mage.filter.predicate.mageobject.PowerPredicate; import mage.filter.predicate.mageobject.AnotherPredicate; +import mage.filter.predicate.mageobject.PowerPredicate; + +import java.util.UUID; /** * @author Loki */ public final class MentorOfTheMeek extends CardImpl { - private static final FilterPermanent filter = new FilterControlledCreaturePermanent("another creature with power 2 or less"); + private static final FilterPermanent filter = new FilterControlledCreaturePermanent("another creature you control with power 2 or less"); static { filter.add(AnotherPredicate.instance); @@ -42,7 +42,7 @@ public final class MentorOfTheMeek extends CardImpl { //Whenever another creature with power 2 or less you control enters, you may pay 1. If you do, draw a card. Effect effect = new DoIfCostPaid(new DrawCardSourceControllerEffect(1), new ManaCostsImpl<>("{1}")); - Ability ability = new EntersBattlefieldControlledTriggeredAbility( + Ability ability = new EntersBattlefieldAllTriggeredAbility( Zone.BATTLEFIELD, effect, filter, false); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/cards/m/MoonCircuitHacker.java b/Mage.Sets/src/mage/cards/m/MoonCircuitHacker.java index 3a70c4956dc..797138e2087 100644 --- a/Mage.Sets/src/mage/cards/m/MoonCircuitHacker.java +++ b/Mage.Sets/src/mage/cards/m/MoonCircuitHacker.java @@ -41,7 +41,7 @@ public final class MoonCircuitHacker extends CardImpl { ); ability.addEffect(new ConditionalOneShotEffect( new DiscardControllerEffect(1), condition, - "If you do, discard a card unless {this} entered the battlefield this turn" + "If you do, discard a card unless {this} entered this turn" )); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/n/NabanDeanOfIteration.java b/Mage.Sets/src/mage/cards/n/NabanDeanOfIteration.java index 11a20b31a85..4f2707720d2 100644 --- a/Mage.Sets/src/mage/cards/n/NabanDeanOfIteration.java +++ b/Mage.Sets/src/mage/cards/n/NabanDeanOfIteration.java @@ -52,7 +52,7 @@ class NabanDeanOfIterationEffect extends ReplacementEffectImpl { NabanDeanOfIterationEffect() { super(Duration.WhileOnBattlefield, Outcome.Benefit); - staticText = "If a Wizard entering the battlefield under your control causes a triggered ability of a permanent you control to trigger, that ability triggers an additional time"; + staticText = "If a Wizard entering under your control causes a triggered ability of a permanent you control to trigger, that ability triggers an additional time"; } private NabanDeanOfIterationEffect(final NabanDeanOfIterationEffect effect) { diff --git a/Mage.Sets/src/mage/cards/n/NaiadOfHiddenCoves.java b/Mage.Sets/src/mage/cards/n/NaiadOfHiddenCoves.java index 788246645dc..b11356b533f 100644 --- a/Mage.Sets/src/mage/cards/n/NaiadOfHiddenCoves.java +++ b/Mage.Sets/src/mage/cards/n/NaiadOfHiddenCoves.java @@ -29,7 +29,7 @@ public final class NaiadOfHiddenCoves extends CardImpl { // As long as it's not your turn, spells you cast cost {1} less to cast. this.addAbility(new SimpleStaticAbility(new ConditionalCostModificationEffect( new SpellsCostReductionControllerEffect(StaticFilters.FILTER_CARD, 1), - NotMyTurnCondition.instance, "As long as it's not your turn, " + + NotMyTurnCondition.instance, "During turns other than yours, " + "spells you cast cost {1} less to cast." )).addHint(MyTurnHint.instance)); } diff --git a/Mage.Sets/src/mage/cards/r/RevengeOfTheRats.java b/Mage.Sets/src/mage/cards/r/RevengeOfTheRats.java index 2e1575c9925..a2fcc35b46c 100644 --- a/Mage.Sets/src/mage/cards/r/RevengeOfTheRats.java +++ b/Mage.Sets/src/mage/cards/r/RevengeOfTheRats.java @@ -1,6 +1,5 @@ package mage.cards.r; -import java.util.UUID; import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.dynamicvalue.DynamicValue; import mage.abilities.dynamicvalue.common.CardsInControllerGraveyardCount; @@ -12,7 +11,8 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.filter.StaticFilters; import mage.game.permanent.token.RatToken; -import mage.game.permanent.token.ZombieToken; + +import java.util.UUID; /** * @@ -28,7 +28,7 @@ public final class RevengeOfTheRats extends CardImpl { // Create a tapped 1/1 black Rat creature token for each creature card in your graveyard. this.getSpellAbility().addEffect(new CreateTokenEffect(new RatToken(), cardsCount, true, false)); - this.getSpellAbility().addHint(new ValueHint("creature card card in your graveyard", cardsCount)); + this.getSpellAbility().addHint(new ValueHint("Creature cards in your graveyard", cardsCount)); // Flashback {2}{B}{B} this.addAbility(new FlashbackAbility(this, new ManaCostsImpl<>("{2}{B}{B}"))); diff --git a/Mage.Sets/src/mage/cards/s/ShieldMare.java b/Mage.Sets/src/mage/cards/s/ShieldMare.java index 47f62ceef21..1a88cd50c2b 100644 --- a/Mage.Sets/src/mage/cards/s/ShieldMare.java +++ b/Mage.Sets/src/mage/cards/s/ShieldMare.java @@ -45,7 +45,7 @@ public final class ShieldMare extends CardImpl { // When Shield Mare enters the battlefield or becomes the target of a spell or ability and opponent controls, you gain 3 life. this.addAbility(new OrTriggeredAbility(Zone.ALL, new GainLifeEffect(3), false, - "When {this} enters or becomes the target of a spell or ability an opponent controls, ", + "Whenever {this} enters or becomes the target of a spell or ability an opponent controls, ", new EntersBattlefieldTriggeredAbility(null), new BecomesTargetSourceTriggeredAbility(null, StaticFilters.FILTER_SPELL_OR_ABILITY_OPPONENTS))); } diff --git a/Mage.Sets/src/mage/cards/s/ShroofusSproutsire.java b/Mage.Sets/src/mage/cards/s/ShroofusSproutsire.java index e37d550a155..917909c7f73 100644 --- a/Mage.Sets/src/mage/cards/s/ShroofusSproutsire.java +++ b/Mage.Sets/src/mage/cards/s/ShroofusSproutsire.java @@ -20,7 +20,7 @@ import mage.game.permanent.token.SaprolingToken; * @author Grath */ public final class ShroofusSproutsire extends CardImpl { - private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent(SubType.SAPROLING, "Saproling"); + private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent(SubType.SAPROLING, "Saproling you control"); public ShroofusSproutsire(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{G}"); diff --git a/Mage.Sets/src/mage/cards/s/SkyknightSquire.java b/Mage.Sets/src/mage/cards/s/SkyknightSquire.java index 09b6aeddf3b..5a0e49870f0 100644 --- a/Mage.Sets/src/mage/cards/s/SkyknightSquire.java +++ b/Mage.Sets/src/mage/cards/s/SkyknightSquire.java @@ -52,7 +52,7 @@ public final class SkyknightSquire extends CardImpl { )); ability.addEffect(new ConditionalContinuousEffect( new AddCardSubTypeSourceEffect(Duration.WhileOnBattlefield, true, SubType.KNIGHT), - condition, "and is an Knight in addition to its other types" + condition, "and is a Knight in addition to its other types" )); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/t/ThuridMareOfDestiny.java b/Mage.Sets/src/mage/cards/t/ThuridMareOfDestiny.java index 9e1f63c416c..1313b7a70a4 100644 --- a/Mage.Sets/src/mage/cards/t/ThuridMareOfDestiny.java +++ b/Mage.Sets/src/mage/cards/t/ThuridMareOfDestiny.java @@ -53,7 +53,7 @@ public final class ThuridMareOfDestiny extends CardImpl { // Whenever you cast a Pegasus, Unicorn, or Horse creature spell, copy it. this.addAbility(new SpellCastControllerTriggeredAbility( - new CopyTargetStackObjectEffect(true) + new CopyTargetStackObjectEffect(false, true, false) .withText("it"), filter, false, SetTargetPointer.SPELL )); diff --git a/Mage.Sets/src/mage/cards/t/TriumphOfCruelty.java b/Mage.Sets/src/mage/cards/t/TriumphOfCruelty.java index 452411e3191..8ad450dfb8a 100644 --- a/Mage.Sets/src/mage/cards/t/TriumphOfCruelty.java +++ b/Mage.Sets/src/mage/cards/t/TriumphOfCruelty.java @@ -22,7 +22,7 @@ public final class TriumphOfCruelty extends CardImpl { // At the beginning of your upkeep, target opponent discards a card if you control the creature with the greatest power or tied for the greatest power. Ability ability = new BeginningOfUpkeepTriggeredAbility(new ConditionalOneShotEffect( - new DiscardTargetEffect(1), ControlsCreatureGreatestPowerCondition.instance)); + new DiscardTargetEffect(1), ControlsCreatureGreatestPowerCondition.instance).withConditionTextAtEnd(true)); ability.addTarget(new TargetOpponent()); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/t/TriumphOfFerocity.java b/Mage.Sets/src/mage/cards/t/TriumphOfFerocity.java index 23926191125..5bc31d9c8eb 100644 --- a/Mage.Sets/src/mage/cards/t/TriumphOfFerocity.java +++ b/Mage.Sets/src/mage/cards/t/TriumphOfFerocity.java @@ -21,7 +21,7 @@ public final class TriumphOfFerocity extends CardImpl { // At the beginning of your upkeep, draw a card if you control the creature with the greatest power or tied for the greatest power. this.addAbility(new BeginningOfUpkeepTriggeredAbility(new ConditionalOneShotEffect( new DrawCardSourceControllerEffect(1), ControlsCreatureGreatestPowerCondition.instance - ))); + ).withConditionTextAtEnd(true))); } private TriumphOfFerocity(final TriumphOfFerocity card) { diff --git a/Mage.Sets/src/mage/cards/w/WaterkinShaman.java b/Mage.Sets/src/mage/cards/w/WaterkinShaman.java index de77b2f191a..c1e942927cc 100644 --- a/Mage.Sets/src/mage/cards/w/WaterkinShaman.java +++ b/Mage.Sets/src/mage/cards/w/WaterkinShaman.java @@ -1,7 +1,7 @@ package mage.cards.w; import mage.MageInt; -import mage.abilities.common.EntersBattlefieldControlledTriggeredAbility; +import mage.abilities.common.EntersBattlefieldAllTriggeredAbility; import mage.abilities.effects.common.continuous.BoostSourceEffect; import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; @@ -10,7 +10,7 @@ import mage.constants.CardType; import mage.constants.Duration; import mage.constants.SubType; import mage.filter.FilterPermanent; -import mage.filter.common.FilterCreaturePermanent; +import mage.filter.common.FilterControlledCreaturePermanent; import mage.filter.predicate.mageobject.AbilityPredicate; import java.util.UUID; @@ -20,7 +20,7 @@ import java.util.UUID; */ public final class WaterkinShaman extends CardImpl { - private static final FilterPermanent filter = new FilterCreaturePermanent("a creature with flying"); + private static final FilterPermanent filter = new FilterControlledCreaturePermanent("a creature you control with flying"); static { filter.add(new AbilityPredicate(FlyingAbility.class)); @@ -35,7 +35,7 @@ public final class WaterkinShaman extends CardImpl { this.toughness = new MageInt(1); // Whenever a creature with flying you control enters, Waterkin Shaman gets +1/+1 until end of turn. - this.addAbility(new EntersBattlefieldControlledTriggeredAbility( + this.addAbility(new EntersBattlefieldAllTriggeredAbility( new BoostSourceEffect(1, 1, Duration.EndOfTurn), filter )); } diff --git a/Mage/src/main/java/mage/abilities/common/EntersBattlefieldThisOrAnotherTriggeredAbility.java b/Mage/src/main/java/mage/abilities/common/EntersBattlefieldThisOrAnotherTriggeredAbility.java index fd7f76c4e7b..0b1808f86f6 100644 --- a/Mage/src/main/java/mage/abilities/common/EntersBattlefieldThisOrAnotherTriggeredAbility.java +++ b/Mage/src/main/java/mage/abilities/common/EntersBattlefieldThisOrAnotherTriggeredAbility.java @@ -17,7 +17,7 @@ public class EntersBattlefieldThisOrAnotherTriggeredAbility extends EntersBattle public EntersBattlefieldThisOrAnotherTriggeredAbility(Effect effect, FilterPermanent filter, boolean optional, SetTargetPointer setTargetPointer, boolean onlyControlled) { super(Zone.BATTLEFIELD, effect, new FilterPermanentThisOrAnother(filter, onlyControlled), optional, setTargetPointer); - setTriggerPhrase("Whenever " + this.filter.getMessage() + " enters the battlefield" + (onlyControlled ? " under your control, " : ", ")); + setTriggerPhrase("Whenever " + this.filter.getMessage() + (onlyControlled ? " you control" : "") + " enters, "); } protected EntersBattlefieldThisOrAnotherTriggeredAbility(final EntersBattlefieldThisOrAnotherTriggeredAbility ability) { diff --git a/Mage/src/main/java/mage/abilities/decorator/ConditionalOneShotEffect.java b/Mage/src/main/java/mage/abilities/decorator/ConditionalOneShotEffect.java index 6bf38b80c5e..c533c05c686 100644 --- a/Mage/src/main/java/mage/abilities/decorator/ConditionalOneShotEffect.java +++ b/Mage/src/main/java/mage/abilities/decorator/ConditionalOneShotEffect.java @@ -21,6 +21,7 @@ public class ConditionalOneShotEffect extends OneShotEffect { private final Effects effects = new Effects(); private final Effects otherwiseEffects = new Effects(); private final Condition condition; + private boolean withConditionTextAtEnd = false; public ConditionalOneShotEffect(OneShotEffect effect, Condition condition) { this(effect, null, condition, null); @@ -57,6 +58,7 @@ public class ConditionalOneShotEffect extends OneShotEffect { this.effects.addAll(effect.effects.copy()); this.otherwiseEffects.addAll(effect.otherwiseEffects.copy()); this.condition = effect.condition; + this.withConditionTextAtEnd = effect.withConditionTextAtEnd; } @Override @@ -81,6 +83,11 @@ public class ConditionalOneShotEffect extends OneShotEffect { return this; } + public ConditionalOneShotEffect withConditionTextAtEnd(boolean withConditionTextAtEnd) { + this.withConditionTextAtEnd = withConditionTextAtEnd; + return this; + } + @Override public void setValue(String key, Object value) { super.setValue(key, value); @@ -105,8 +112,13 @@ public class ConditionalOneShotEffect extends OneShotEffect { } if (otherwiseEffects.isEmpty()) { - return "if " + conditionText + ", " - + CardUtil.getTextWithFirstCharLowerCase(effects.getText(mode)); + if (withConditionTextAtEnd) { + return CardUtil.getTextWithFirstCharLowerCase(effects.getText(mode)) + + " if " + conditionText; + } else { + return "if " + conditionText + ", " + + CardUtil.getTextWithFirstCharLowerCase(effects.getText(mode)); + } } return effects.getText(mode) + ". If " + conditionText + ", " + CardUtil.getTextWithFirstCharLowerCase(otherwiseEffects.getText(mode)); diff --git a/Mage/src/main/java/mage/game/command/emblems/KaitoCunningInfiltratorEmblem.java b/Mage/src/main/java/mage/game/command/emblems/KaitoCunningInfiltratorEmblem.java index 06f8687d47f..dbd5323d051 100644 --- a/Mage/src/main/java/mage/game/command/emblems/KaitoCunningInfiltratorEmblem.java +++ b/Mage/src/main/java/mage/game/command/emblems/KaitoCunningInfiltratorEmblem.java @@ -18,7 +18,7 @@ public class KaitoCunningInfiltratorEmblem extends Emblem { super("Emblem Kaito"); this.getAbilities().add(new SpellCastAllTriggeredAbility( Zone.COMMAND, new CreateTokenEffect(new NinjaToken2()), new FilterSpell(), false, SetTargetPointer.NONE - )); + ).setTriggerPhrase("Whenever a player casts a spell, you ")); } private KaitoCunningInfiltratorEmblem(final KaitoCunningInfiltratorEmblem card) {