diff --git a/Mage.Sets/src/mage/cards/a/ArcanistsOwl.java b/Mage.Sets/src/mage/cards/a/ArcanistsOwl.java index c3dec2d6943..cd73ab26557 100644 --- a/Mage.Sets/src/mage/cards/a/ArcanistsOwl.java +++ b/Mage.Sets/src/mage/cards/a/ArcanistsOwl.java @@ -38,7 +38,7 @@ public final class ArcanistsOwl extends CardImpl { StaticValue.get(4), false, StaticValue.get(1), filter, Zone.LIBRARY, false, true, false, Zone.HAND, true, false, false - ).setBackInRandomOrder(true).setText("Look at the top four cards of your library. " + + ).setBackInRandomOrder(true).setText("look at the top four cards of your library. " + "You may reveal an artifact or enchantment card from among them and put it into your hand. " + "Put the rest on the bottom of your library in a random order.") )); diff --git a/Mage.Sets/src/mage/cards/a/ArchonOfAbsolution.java b/Mage.Sets/src/mage/cards/a/ArchonOfAbsolution.java index f1aec8f3df4..e2175f84b87 100644 --- a/Mage.Sets/src/mage/cards/a/ArchonOfAbsolution.java +++ b/Mage.Sets/src/mage/cards/a/ArchonOfAbsolution.java @@ -33,9 +33,10 @@ public final class ArchonOfAbsolution extends CardImpl { this.addAbility(ProtectionAbility.from(ObjectColor.WHITE)); // Creatures can't attack you or a planeswalker you control unless their controller pays {1} for each of those creatures. - this.addAbility(new SimpleStaticAbility( - new CantAttackYouUnlessPayManaAllEffect(new ManaCostsImpl("{1}"), true) - )); + this.addAbility(new SimpleStaticAbility(new CantAttackYouUnlessPayManaAllEffect( + new ManaCostsImpl("{1}"), true + ).setText("creatures can't attack you or a planeswalker you control " + + "unless their controller pays {1} for each of those creatures"))); } private ArchonOfAbsolution(final ArchonOfAbsolution card) { diff --git a/Mage.Sets/src/mage/cards/b/BanishIntoFable.java b/Mage.Sets/src/mage/cards/b/BanishIntoFable.java index 285f88d1ce4..79f947e1794 100644 --- a/Mage.Sets/src/mage/cards/b/BanishIntoFable.java +++ b/Mage.Sets/src/mage/cards/b/BanishIntoFable.java @@ -81,6 +81,12 @@ class BanishIntoFableTriggeredAbility extends CastSourceTriggeredAbility { public BanishIntoFableTriggeredAbility copy() { return new BanishIntoFableTriggeredAbility(this); } + + @Override + public String getRule() { + return "When you cast this spell from your hand, copy it if you control an artifact, " + + "then copy it if you control an enchantment. You may choose new targets for the copies."; + } } class BanishIntoFableEffect extends OneShotEffect { diff --git a/Mage.Sets/src/mage/cards/f/FaeOfWishes.java b/Mage.Sets/src/mage/cards/f/FaeOfWishes.java index 2c5ad0bdba5..473bcb4a062 100644 --- a/Mage.Sets/src/mage/cards/f/FaeOfWishes.java +++ b/Mage.Sets/src/mage/cards/f/FaeOfWishes.java @@ -12,6 +12,7 @@ import mage.cards.AdventureCard; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; +import mage.filter.FilterCard; import mage.filter.StaticFilters; import mage.target.common.TargetCardInHand; @@ -22,6 +23,8 @@ import java.util.UUID; */ public final class FaeOfWishes extends AdventureCard { + private static final FilterCard filter = new FilterCard("two cards"); + public FaeOfWishes(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, new CardType[]{CardType.SORCERY}, "{1}{U}", "Granted", "{3}{U}"); @@ -37,7 +40,7 @@ public final class FaeOfWishes extends AdventureCard { Ability ability = new SimpleActivatedAbility( new ReturnToHandSourceEffect(true), new ManaCostsImpl("{1}{U}") ); - ability.addCost(new DiscardTargetCost(new TargetCardInHand(2, StaticFilters.FILTER_CARD))); + ability.addCost(new DiscardTargetCost(new TargetCardInHand(2, filter))); this.addAbility(ability); // Granted diff --git a/Mage.Sets/src/mage/cards/f/FaeburrowElder.java b/Mage.Sets/src/mage/cards/f/FaeburrowElder.java index 3c6dfab1e2e..2cbd4bd0cd2 100644 --- a/Mage.Sets/src/mage/cards/f/FaeburrowElder.java +++ b/Mage.Sets/src/mage/cards/f/FaeburrowElder.java @@ -8,8 +8,8 @@ import mage.abilities.common.SimpleStaticAbility; import mage.abilities.costs.common.TapSourceCost; import mage.abilities.dynamicvalue.DynamicValue; import mage.abilities.effects.Effect; -import mage.abilities.effects.mana.ManaEffect; import mage.abilities.effects.common.continuous.BoostSourceEffect; +import mage.abilities.effects.mana.ManaEffect; import mage.abilities.keyword.VigilanceAbility; import mage.abilities.mana.SimpleManaAbility; import mage.cards.CardImpl; @@ -84,7 +84,7 @@ enum FaeburrowElderValue implements DynamicValue { @Override public String getMessage() { - return "for each color among permanents you control"; + return "color among permanents you control"; } } diff --git a/Mage.Sets/src/mage/cards/f/FerventChampion.java b/Mage.Sets/src/mage/cards/f/FerventChampion.java index 3dc095ea406..3ad2e21d0a4 100644 --- a/Mage.Sets/src/mage/cards/f/FerventChampion.java +++ b/Mage.Sets/src/mage/cards/f/FerventChampion.java @@ -13,6 +13,7 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.*; import mage.filter.FilterPermanent; +import mage.filter.common.FilterControlledPermanent; import mage.filter.predicate.permanent.AnotherPredicate; import mage.filter.predicate.permanent.AttackingPredicate; import mage.game.Game; @@ -29,7 +30,7 @@ import java.util.UUID; public final class FerventChampion extends CardImpl { private static final FilterPermanent filter - = new FilterPermanent(SubType.KNIGHT, "another target attacking Knight"); + = new FilterControlledPermanent(SubType.KNIGHT, "another target attacking Knight you control"); static { filter.add(AttackingPredicate.instance); @@ -90,20 +91,20 @@ class FerventChampionEffect extends CostModificationEffectImpl { @Override public boolean applies(Ability abilityToModify, Ability source, Game game) { - if (abilityToModify instanceof EquipAbility + if (abilityToModify instanceof EquipAbility && abilityToModify.isControlledBy(source.getControllerId())) { if (game != null && game.inCheckPlayableState()) { return !abilityToModify.getTargets().isEmpty() && - abilityToModify.getTargets().get(0).canTarget(source.getSourceId(), abilityToModify, game); + abilityToModify.getTargets().get(0).canTarget(source.getSourceId(), abilityToModify, game); } else { - return abilityToModify - .getTargets() - .stream() - .map(Target::getTargets) - .flatMap(Collection::stream) - .anyMatch(source.getSourceId()::equals); + return abilityToModify + .getTargets() + .stream() + .map(Target::getTargets) + .flatMap(Collection::stream) + .anyMatch(source.getSourceId()::equals); } - + } return false; } diff --git a/Mage.Sets/src/mage/cards/f/FlaxenIntruder.java b/Mage.Sets/src/mage/cards/f/FlaxenIntruder.java index c64ba61968d..549e8853edf 100644 --- a/Mage.Sets/src/mage/cards/f/FlaxenIntruder.java +++ b/Mage.Sets/src/mage/cards/f/FlaxenIntruder.java @@ -3,6 +3,7 @@ package mage.cards.f; import mage.MageInt; import mage.abilities.common.DealsCombatDamageToAPlayerTriggeredAbility; import mage.abilities.common.delayed.ReflexiveTriggeredAbility; +import mage.abilities.costs.Cost; import mage.abilities.costs.common.SacrificeSourceCost; import mage.abilities.effects.common.CreateTokenEffect; import mage.abilities.effects.common.DestroyTargetEffect; @@ -35,8 +36,10 @@ public final class FlaxenIntruder extends AdventureCard { new DestroyTargetEffect(), false, "destroy target artifact or enchantment" ); ability.addTarget(new TargetPermanent(StaticFilters.FILTER_PERMANENT_ARTIFACT_OR_ENCHANTMENT)); + Cost cost = new SacrificeSourceCost(); + cost.setText("sacrifice it"); this.addAbility(new DealsCombatDamageToAPlayerTriggeredAbility(new DoWhenCostPaid( - ability, new SacrificeSourceCost(), "Sacrifice {this}?" + ability, cost, "Sacrifice {this}?" ), false)); // Welcome Home diff --git a/Mage.Sets/src/mage/cards/i/IrencragFeat.java b/Mage.Sets/src/mage/cards/i/IrencragFeat.java index 9170bfa20bb..909c01cf68c 100644 --- a/Mage.Sets/src/mage/cards/i/IrencragFeat.java +++ b/Mage.Sets/src/mage/cards/i/IrencragFeat.java @@ -25,7 +25,6 @@ public final class IrencragFeat extends CardImpl { super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{1}{R}{R}{R}"); // Add seven {R}. You can cast only one more spell this turn. - this.getSpellAbility().addEffect(new BasicManaEffect(Mana.RedMana(7))); this.getSpellAbility().addEffect(new IrencragFeatEffect()); } @@ -57,6 +56,7 @@ class IrencragFeatEffect extends OneShotEffect { @Override public boolean apply(Game game, Ability source) { + new BasicManaEffect(Mana.RedMana(7)).apply(game, source); CastSpellLastTurnWatcher watcher = game.getState().getWatcher(CastSpellLastTurnWatcher.class); if (watcher == null) { return false; diff --git a/Mage.Sets/src/mage/cards/k/KeeperOfFables.java b/Mage.Sets/src/mage/cards/k/KeeperOfFables.java index e5e07bdb117..097f560cffd 100644 --- a/Mage.Sets/src/mage/cards/k/KeeperOfFables.java +++ b/Mage.Sets/src/mage/cards/k/KeeperOfFables.java @@ -88,6 +88,6 @@ class KeeperOfFablesTriggeredAbility extends TriggeredAbilityImpl { @Override public String getRule() { - return "Whenever one or more non-Human creatures you control deal combat damage to a player, draw a card"; + return "Whenever one or more non-Human creatures you control deal combat damage to a player, draw a card."; } } diff --git a/Mage.Sets/src/mage/cards/m/MemoryTheft.java b/Mage.Sets/src/mage/cards/m/MemoryTheft.java index e302ecfeef9..3f6c660bb60 100644 --- a/Mage.Sets/src/mage/cards/m/MemoryTheft.java +++ b/Mage.Sets/src/mage/cards/m/MemoryTheft.java @@ -31,9 +31,6 @@ public final class MemoryTheft extends CardImpl { super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{2}{B}"); // Target opponent reveals their hand. You choose a nonland card from it. That player discards that card. You may put a card that has an Adventure that player owns from exile into that player's graveyard. - this.getSpellAbility().addEffect( - new DiscardCardYouChooseTargetEffect(StaticFilters.FILTER_CARD_NON_LAND, TargetController.ANY) - ); this.getSpellAbility().addEffect(new MemoryTheftEffect()); this.getSpellAbility().addTarget(new TargetOpponent()); } @@ -68,6 +65,9 @@ class MemoryTheftEffect extends OneShotEffect { @Override public boolean apply(Game game, Ability source) { + new DiscardCardYouChooseTargetEffect( + StaticFilters.FILTER_CARD_NON_LAND, TargetController.ANY + ).apply(game, source); Player controller = game.getPlayer(source.getControllerId()); Player player = game.getPlayer(source.getFirstTarget()); if (controller == null || player == null) { diff --git a/Mage.Sets/src/mage/cards/m/MidnightClock.java b/Mage.Sets/src/mage/cards/m/MidnightClock.java index 97ac36038f1..662a0773641 100644 --- a/Mage.Sets/src/mage/cards/m/MidnightClock.java +++ b/Mage.Sets/src/mage/cards/m/MidnightClock.java @@ -44,7 +44,7 @@ public final class MidnightClock extends CardImpl { // At the beginning of each upkeep, put an hour counter on Midnight Clock. this.addAbility(new BeginningOfUpkeepTriggeredAbility( - new AddCountersSourceEffect(CounterType.HOUR.createInstance()), TargetController.ANY, false + new AddCountersSourceEffect(CounterType.HOUR.createInstance()), TargetController.EACH_PLAYER, false )); // When the twelfth hour counter is put on Midnight Clock, shuffle your hand and graveyard into your library, then draw seven cards. Exile Midnight Clock. diff --git a/Mage.Sets/src/mage/cards/o/OakhameAdversary.java b/Mage.Sets/src/mage/cards/o/OakhameAdversary.java index 6cd85144ab7..df195f6cf10 100644 --- a/Mage.Sets/src/mage/cards/o/OakhameAdversary.java +++ b/Mage.Sets/src/mage/cards/o/OakhameAdversary.java @@ -27,7 +27,7 @@ import java.util.UUID; public final class OakhameAdversary extends CardImpl { private static final FilterPermanent filter - = new FilterPermanent("your opponent controls a green permanent"); + = new FilterPermanent("an opponent controls a green permanent"); static { filter.add(new ColorPredicate(ObjectColor.GREEN)); diff --git a/Mage.Sets/src/mage/cards/q/QueenOfIce.java b/Mage.Sets/src/mage/cards/q/QueenOfIce.java index a83d83f648b..429e09e1eb4 100644 --- a/Mage.Sets/src/mage/cards/q/QueenOfIce.java +++ b/Mage.Sets/src/mage/cards/q/QueenOfIce.java @@ -29,7 +29,7 @@ public final class QueenOfIce extends AdventureCard { // Whenever Queen of Ice deals combat damage to a creature, tap that creature. It doesn't untap during its controller's next untap step. Ability ability = new DealsDamageToACreatureTriggeredAbility( - new TapTargetEffect().setText("tap that creature"), + new TapTargetEffect().setText("that creature"), true, false, true ); ability.addEffect(new DontUntapInControllersNextUntapStepTargetEffect() diff --git a/Mage.Sets/src/mage/cards/q/QuestingBeast.java b/Mage.Sets/src/mage/cards/q/QuestingBeast.java index 4f8a5ff1fed..a99babbfa06 100644 --- a/Mage.Sets/src/mage/cards/q/QuestingBeast.java +++ b/Mage.Sets/src/mage/cards/q/QuestingBeast.java @@ -152,6 +152,6 @@ class QuestingBeastTriggeredAbility extends TriggeredAbilityImpl { @Override public String getRule() { return "Whenever {this} deals combat damage to an opponent, " + - "it deals that much damage to target planeswalker that player controls"; + "it deals that much damage to target planeswalker that player controls."; } } diff --git a/Mage.Sets/src/mage/cards/r/RowanFearlessSparkmage.java b/Mage.Sets/src/mage/cards/r/RowanFearlessSparkmage.java index ade68c0c67f..bd5b73ffbfd 100644 --- a/Mage.Sets/src/mage/cards/r/RowanFearlessSparkmage.java +++ b/Mage.Sets/src/mage/cards/r/RowanFearlessSparkmage.java @@ -50,15 +50,16 @@ public final class RowanFearlessSparkmage extends CardImpl { // −2: Rowan, Fearless Sparkmage deals 1 damage to each of up to two target creatures. Those creatures can't block this turn. ability = new LoyaltyAbility(new DamageTargetEffect(1) - .setText("deals 1 damage to each of up to two target creatures."), -2); + .setText("{this} deals 1 damage to each of up to two target creatures."), -2); ability.addEffect(new CantBlockTargetEffect(Duration.EndOfTurn) .setText("Those creatures can't block this turn.")); ability.addTarget(new TargetCreaturePermanent(0, 2)); this.addAbility(ability); // −9: Gain control of all creatures until end of turn. Untap them. They gain haste until end of turn. - ability = new LoyaltyAbility(new GainControlAllEffect(Duration.EndOfTurn, filter), -9); - ability.addEffect(new UntapAllEffect(filter).setText("until end of turn. Untap them.")); + ability = new LoyaltyAbility(new GainControlAllEffect(Duration.EndOfTurn, filter) + .setText("gain control of all creatures until end of turn."), -9); + ability.addEffect(new UntapAllEffect(filter).setText("Untap them.")); ability.addEffect(new GainAbilityAllEffect( HasteAbility.getInstance(), Duration.EndOfTurn, filter ).setText("They gain haste until end of turn")); diff --git a/Mage.Sets/src/mage/cards/s/SorcerersBroom.java b/Mage.Sets/src/mage/cards/s/SorcerersBroom.java index 393347aafb3..dd40797e1da 100644 --- a/Mage.Sets/src/mage/cards/s/SorcerersBroom.java +++ b/Mage.Sets/src/mage/cards/s/SorcerersBroom.java @@ -70,6 +70,6 @@ class SorcerersBroomTriggeredAbility extends TriggeredAbilityImpl { @Override public String getRule() { return "Whenever you sacrifice another permanent, you may pay {3}. " + - "If you do, create a token that's a copy of {this}"; + "If you do, create a token that's a copy of {this}."; } } \ No newline at end of file diff --git a/Mage.Sets/src/mage/cards/s/SyrGwynHeroOfAshvale.java b/Mage.Sets/src/mage/cards/s/SyrGwynHeroOfAshvale.java index 14c92435fbc..8d159f68b66 100644 --- a/Mage.Sets/src/mage/cards/s/SyrGwynHeroOfAshvale.java +++ b/Mage.Sets/src/mage/cards/s/SyrGwynHeroOfAshvale.java @@ -8,23 +8,19 @@ import mage.abilities.costs.mana.GenericManaCost; import mage.abilities.effects.common.DrawCardSourceControllerEffect; import mage.abilities.effects.common.LoseLifeSourceControllerEffect; import mage.abilities.effects.common.continuous.GainAbilityControlledEffect; +import mage.abilities.keyword.EquipAbility; import mage.abilities.keyword.MenaceAbility; import mage.abilities.keyword.VigilanceAbility; 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.constants.*; import mage.filter.FilterPermanent; import mage.filter.common.FilterControlledCreaturePermanent; import mage.filter.common.FilterControlledPermanent; import mage.filter.predicate.permanent.EquippedPredicate; +import mage.target.common.TargetControlledCreaturePermanent; import java.util.UUID; -import mage.abilities.keyword.EquipAbility; -import mage.constants.Outcome; -import mage.target.common.TargetControlledCreaturePermanent; /** * @author TheElk801 @@ -32,7 +28,7 @@ import mage.target.common.TargetControlledCreaturePermanent; public final class SyrGwynHeroOfAshvale extends CardImpl { private static final FilterControlledCreaturePermanent filter - = new FilterControlledCreaturePermanent("an equipped creature you control"); + = new FilterControlledCreaturePermanent("equipped creature you control"); private static final FilterPermanent filter2 = new FilterControlledPermanent(SubType.EQUIPMENT); private static final FilterControlledCreaturePermanent filter3 @@ -59,16 +55,18 @@ public final class SyrGwynHeroOfAshvale extends CardImpl { // Whenever an equipped creature you control attacks, you draw a card and you lose 1 life. Ability ability = new AttacksCreatureYouControlTriggeredAbility( - new DrawCardSourceControllerEffect(1).setText("you draw a card and"), false, filter + new DrawCardSourceControllerEffect(1).setText("you draw a card"), false, filter ); - ability.addEffect(new LoseLifeSourceControllerEffect(1)); + ability.addEffect(new LoseLifeSourceControllerEffect(1).concatBy("and")); this.addAbility(ability); // Equipment you control have equip Knight {0}. this.addAbility(new SimpleStaticAbility(new GainAbilityControlledEffect( - new EquipAbility(Outcome.AddAbility, new GenericManaCost(0), new TargetControlledCreaturePermanent(filter3)), - Duration.WhileOnBattlefield, filter2 - ))); + new EquipAbility( + Outcome.AddAbility, new GenericManaCost(0), + new TargetControlledCreaturePermanent(filter3) + ), Duration.WhileOnBattlefield, filter2 + ).setText("Equipment you control have equip Knight {0}."))); } private SyrGwynHeroOfAshvale(final SyrGwynHeroOfAshvale card) { diff --git a/Mage.Sets/src/mage/cards/w/WeaponRack.java b/Mage.Sets/src/mage/cards/w/WeaponRack.java index 70066e25511..33c75de119e 100644 --- a/Mage.Sets/src/mage/cards/w/WeaponRack.java +++ b/Mage.Sets/src/mage/cards/w/WeaponRack.java @@ -29,7 +29,7 @@ public final class WeaponRack extends CardImpl { // Weapon Rack enters the battlefield with three +1/+1 counters on it. this.addAbility(new EntersBattlefieldAbility( new AddCountersSourceEffect(CounterType.P1P1.createInstance(3)), - "{this} enters the battlefield with three +1/+1 counters on it" + "with three +1/+1 counters on it" )); // {T}: Move a +1/+1 counter from Weapon Rack onto target creature. Activate this ability only any time you could cast a sorcery. diff --git a/Mage.Sets/src/mage/cards/w/WishclawTalisman.java b/Mage.Sets/src/mage/cards/w/WishclawTalisman.java index b062b512ae9..fae511df278 100644 --- a/Mage.Sets/src/mage/cards/w/WishclawTalisman.java +++ b/Mage.Sets/src/mage/cards/w/WishclawTalisman.java @@ -41,7 +41,7 @@ public final class WishclawTalisman extends CardImpl { // Wishclaw Talisman enters the battlefield with three wish counters on it. this.addAbility(new EntersBattlefieldAbility( new AddCountersSourceEffect(CounterType.WISH.createInstance(3)), - "{this} enters the battlefield with three wish counters on it" + "with three wish counters on it" )); // {1}, {T}, Remove a wish counter from Wishclaw Talisman: Search your library for a card, put it into your hand, then shuffle your library. An opponent gains control of Wishclaw Talisman. Activate this ability only during your turn. diff --git a/Mage.Sets/src/mage/cards/w/WorkshopElders.java b/Mage.Sets/src/mage/cards/w/WorkshopElders.java index 8f6abe6ab1a..ba1fe0a5c8c 100644 --- a/Mage.Sets/src/mage/cards/w/WorkshopElders.java +++ b/Mage.Sets/src/mage/cards/w/WorkshopElders.java @@ -54,13 +54,13 @@ public final class WorkshopElders extends CardImpl { // At the beginning of combat on your turn, you may have target noncreature artifact you control become a 0/0 artifact creature. If you do, put four +1/+1 counters on it. Ability ability = new BeginningOfCombatTriggeredAbility(new AddCardTypeTargetEffect( Duration.EndOfGame, CardType.ARTIFACT, CardType.CREATURE - ).setText("have target noncreature artifact you control become"), TargetController.YOU, true); + ).setText("target noncreature artifact you control become a 0/0 artifact creature"), TargetController.YOU, true); ability.addEffect(new SetPowerToughnessTargetEffect( 0, 0, Duration.EndOfGame - ).setText("a 0/0 artifact creature")); + ).setText("If you do")); ability.addEffect(new AddCountersTargetEffect( CounterType.P1P1.createInstance(4) - ).setText("If you do, put four +1/+1 counters on it")); + ).setText(", put four +1/+1 counters on it")); ability.addTarget(new TargetPermanent(filter2)); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/y/YorvoLordOfGarenbrig.java b/Mage.Sets/src/mage/cards/y/YorvoLordOfGarenbrig.java index 1535004ce7c..a3eace4e7f0 100644 --- a/Mage.Sets/src/mage/cards/y/YorvoLordOfGarenbrig.java +++ b/Mage.Sets/src/mage/cards/y/YorvoLordOfGarenbrig.java @@ -44,7 +44,7 @@ public final class YorvoLordOfGarenbrig extends CardImpl { // Yorvo, Lord of Garenbrig enters the battlefield with four +1/+1 counters on it. this.addAbility(new EntersBattlefieldAbility( new AddCountersSourceEffect(CounterType.P1P1.createInstance(4)), - "{this} enters the battlefield with four +1/+1 counters on it" + "with four +1/+1 counters on it" )); // Whenever another green creature enters the battlefield under your control, put a +1/+1 counter on Yorvo. Then if that creature's power is greater than Yorvo's power, put another +1/+1 counter on Yorvo. diff --git a/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java b/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java index 69d875f004b..96c86cb9e06 100644 --- a/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java +++ b/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java @@ -52,7 +52,7 @@ public class VerifyCardDataTest { private static final Logger logger = Logger.getLogger(VerifyCardDataTest.class); - private static final String FULL_ABILITIES_CHECK_SET_CODE = "ZNR"; // check all abilities and output cards with wrong abilities texts; + private static final String FULL_ABILITIES_CHECK_SET_CODE = "ELD"; // check all abilities and output cards with wrong abilities texts; private static final boolean AUTO_FIX_SAMPLE_DECKS = false; // debug only: fix sample decks if it contains errors like wrong card numbers private static final HashMap> skipCheckLists = new HashMap<>(); diff --git a/Mage/src/main/java/mage/abilities/common/BeginningOfUpkeepTriggeredAbility.java b/Mage/src/main/java/mage/abilities/common/BeginningOfUpkeepTriggeredAbility.java index 021787292e0..12b5d03c598 100644 --- a/Mage/src/main/java/mage/abilities/common/BeginningOfUpkeepTriggeredAbility.java +++ b/Mage/src/main/java/mage/abilities/common/BeginningOfUpkeepTriggeredAbility.java @@ -136,9 +136,10 @@ public class BeginningOfUpkeepTriggeredAbility extends TriggeredAbilityImpl { case OPPONENT: return sb.insert(0, generateZoneString()).insert(0, "At the beginning of each opponent's upkeep, ").toString(); case ANY: - return sb.insert(0, generateZoneString()).insert(0, "At the beginning of each player's upkeep, ").toString(); case ACTIVE: return sb.insert(0, generateZoneString()).insert(0, "At the beginning of each player's upkeep, ").toString(); + case EACH_PLAYER: + return sb.insert(0, generateZoneString()).insert(0, "At the beginning of each upkeep, ").toString(); case CONTROLLER_ATTACHED_TO: return sb.insert(0, generateZoneString()).insert(0, "At the beginning of the upkeep of enchanted creature's controller, ").toString(); } diff --git a/Mage/src/main/java/mage/abilities/costs/common/TapTargetCost.java b/Mage/src/main/java/mage/abilities/costs/common/TapTargetCost.java index 0496b899442..acfb38c7168 100644 --- a/Mage/src/main/java/mage/abilities/costs/common/TapTargetCost.java +++ b/Mage/src/main/java/mage/abilities/costs/common/TapTargetCost.java @@ -23,7 +23,7 @@ public class TapTargetCost extends CostImpl { this.target.setNotTarget(true); // costs are never targeted this.target.setRequired(false); // can be cancel by user this.text - = new StringBuilder("Tap ") + = new StringBuilder("tap ") .append((target.getTargetName().startsWith("a ") || target.getTargetName().startsWith("an ") || target.getTargetName().startsWith("another")) ? "" : CardUtil.numberToText(target.getMaxNumberOfTargets()) + ' ') .append(target.getTargetName()).toString(); diff --git a/Mage/src/main/java/mage/abilities/effects/common/CreateTokenTargetEffect.java b/Mage/src/main/java/mage/abilities/effects/common/CreateTokenTargetEffect.java index 790be23c4d4..58af4a8c0d6 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/CreateTokenTargetEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/CreateTokenTargetEffect.java @@ -71,8 +71,7 @@ public class CreateTokenTargetEffect extends OneShotEffect { if (mode.getTargets().isEmpty()) { sb.append("that player"); - } - else { + } else { sb.append("target ").append(mode.getTargets().get(0).getTargetName()); } @@ -90,11 +89,11 @@ public class CreateTokenTargetEffect extends OneShotEffect { } sb.append(token.getDescription()); if (token.getDescription().endsWith("token")) { - sb.append("s "); + sb.append("s"); } - int tokenLocation = sb.indexOf("token "); + int tokenLocation = sb.indexOf("token"); if (tokenLocation != -1) { - sb.replace(tokenLocation, tokenLocation + 6, "tokens "); + sb.replace(tokenLocation, tokenLocation + 6, "tokens"); } } if (attacking) { diff --git a/Mage/src/main/java/mage/abilities/effects/common/DoIfCostPaid.java b/Mage/src/main/java/mage/abilities/effects/common/DoIfCostPaid.java index 59d6234ef1a..baa0f2738b2 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/DoIfCostPaid.java +++ b/Mage/src/main/java/mage/abilities/effects/common/DoIfCostPaid.java @@ -160,6 +160,7 @@ public class DoIfCostPaid extends OneShotEffect { && !costText.toLowerCase(Locale.ENGLISH).startsWith("discard") && !costText.toLowerCase(Locale.ENGLISH).startsWith("sacrifice") && !costText.toLowerCase(Locale.ENGLISH).startsWith("remove") + && !costText.toLowerCase(Locale.ENGLISH).startsWith("tap") && !costText.toLowerCase(Locale.ENGLISH).startsWith("pay")) { sb.append("pay "); } diff --git a/Mage/src/main/java/mage/abilities/effects/common/DoWhenCostPaid.java b/Mage/src/main/java/mage/abilities/effects/common/DoWhenCostPaid.java index 0697ec3beca..8d0dea08dd8 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/DoWhenCostPaid.java +++ b/Mage/src/main/java/mage/abilities/effects/common/DoWhenCostPaid.java @@ -86,6 +86,7 @@ public class DoWhenCostPaid extends OneShotEffect { && !costText.toLowerCase(Locale.ENGLISH).startsWith("discard") && !costText.toLowerCase(Locale.ENGLISH).startsWith("sacrifice") && !costText.toLowerCase(Locale.ENGLISH).startsWith("remove") + && !costText.toLowerCase(Locale.ENGLISH).startsWith("tap") && !costText.toLowerCase(Locale.ENGLISH).startsWith("pay")) { sb.append("pay "); } diff --git a/Mage/src/main/java/mage/abilities/effects/common/SacrificeAllEffect.java b/Mage/src/main/java/mage/abilities/effects/common/SacrificeAllEffect.java index 434ebc82259..168115a5779 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/SacrificeAllEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/SacrificeAllEffect.java @@ -88,7 +88,8 @@ public class SacrificeAllEffect extends OneShotEffect { sb.append(amount.toString()); sb.append(' '); } else if (!filter.getMessage().startsWith("a ")) { - sb.append(CardUtil.numberToText(amount.toString(), "a ")); + sb.append(CardUtil.numberToText(amount.toString(), "a")); + sb.append(' '); } sb.append(filter.getMessage()); staticText = sb.toString(); diff --git a/Mage/src/main/java/mage/abilities/effects/common/SacrificeEffect.java b/Mage/src/main/java/mage/abilities/effects/common/SacrificeEffect.java index fc954a3a5d1..33d37346961 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/SacrificeEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/SacrificeEffect.java @@ -1,6 +1,5 @@ package mage.abilities.effects.common; -import java.util.UUID; import mage.abilities.Ability; import mage.abilities.dynamicvalue.DynamicValue; import mage.abilities.dynamicvalue.common.StaticValue; @@ -15,8 +14,9 @@ import mage.target.Target; import mage.target.TargetPermanent; import mage.util.CardUtil; +import java.util.UUID; + /** - * * @author maurer.it_at_gmail.com */ public class SacrificeEffect extends OneShotEffect { @@ -98,7 +98,9 @@ public class SacrificeEffect extends OneShotEffect { sb.append(" sacrifice "); } } - sb.append(CardUtil.numberToText(count.toString(), "a")).append(' '); + if (!filter.getMessage().startsWith("another")) { + sb.append(CardUtil.numberToText(count.toString(), "a")).append(' '); + } sb.append(filter.getMessage()); staticText = sb.toString(); }