diff --git a/Mage.Sets/src/mage/cards/a/AlabasterHostIntercessor.java b/Mage.Sets/src/mage/cards/a/AlabasterHostIntercessor.java index b9fdda071cf..6737e855e10 100644 --- a/Mage.Sets/src/mage/cards/a/AlabasterHostIntercessor.java +++ b/Mage.Sets/src/mage/cards/a/AlabasterHostIntercessor.java @@ -33,6 +33,7 @@ public final class AlabasterHostIntercessor extends CardImpl { Ability ability = new EntersBattlefieldTriggeredAbility(new ExileUntilSourceLeavesEffect()); ability.addTarget(new TargetOpponentsCreaturePermanent()); ability.addEffect(new CreateDelayedTriggeredAbilityEffect(new OnLeaveReturnExiledToBattlefieldAbility())); + this.addAbility(ability); // Plainscycling {2} this.addAbility(new PlainscyclingAbility(new ManaCostsImpl<>("{2}"))); diff --git a/Mage.Sets/src/mage/cards/a/AncientImperiosaur.java b/Mage.Sets/src/mage/cards/a/AncientImperiosaur.java index 1177109340d..dcc8b86ab82 100644 --- a/Mage.Sets/src/mage/cards/a/AncientImperiosaur.java +++ b/Mage.Sets/src/mage/cards/a/AncientImperiosaur.java @@ -45,7 +45,7 @@ public final class AncientImperiosaur extends CardImpl { this.addAbility(new EntersBattlefieldAbility(new AddCountersSourceEffect( CounterType.P1P1.createInstance(), xValue, true ), null, "{this} enters the battlefield with two " + - "+1/+1 counters on it for each creature that convoked it", null)); + "+1/+1 counters on it for each creature that convoked it.", null)); } private AncientImperiosaur(final AncientImperiosaur card) { diff --git a/Mage.Sets/src/mage/cards/a/ArchangelElspeth.java b/Mage.Sets/src/mage/cards/a/ArchangelElspeth.java index c3aefdde49c..968b384785f 100644 --- a/Mage.Sets/src/mage/cards/a/ArchangelElspeth.java +++ b/Mage.Sets/src/mage/cards/a/ArchangelElspeth.java @@ -40,7 +40,8 @@ public final class ArchangelElspeth extends CardImpl { // -2: Put two +1/+1 counters on target creature. It becomes an Angel in addition to its other types and gains flying. Ability ability = new LoyaltyAbility(new AddCountersTargetEffect(CounterType.P1P1.createInstance(2)), -2); - ability.addEffect(new AddCardSubTypeTargetEffect(SubType.ANGEL, Duration.Custom)); + ability.addEffect(new AddCardSubTypeTargetEffect(SubType.ANGEL, Duration.Custom) + .setText("It becomes an Angel in addition to its other types")); ability.addEffect(new GainAbilityTargetEffect(FlyingAbility.getInstance(), Duration.Custom).setText("and gains flying")); ability.addTarget(new TargetCreaturePermanent()); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/cards/a/AttentiveSkywarden.java b/Mage.Sets/src/mage/cards/a/AttentiveSkywarden.java index 3f72a0d4034..3bdb617e58b 100644 --- a/Mage.Sets/src/mage/cards/a/AttentiveSkywarden.java +++ b/Mage.Sets/src/mage/cards/a/AttentiveSkywarden.java @@ -42,7 +42,7 @@ public final class AttentiveSkywarden extends CardImpl { Ability ability = new DealsCombatDamageToAPlayerTriggeredAbility( new TransformTargetEffect(), false ).setOrBattle(true); - ability.addTarget(new TargetPermanent(filter)); + ability.addTarget(new TargetPermanent(0, 1, filter)); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/b/BeamtownBeatstick.java b/Mage.Sets/src/mage/cards/b/BeamtownBeatstick.java index 2a66ea85f74..e60dff5064d 100644 --- a/Mage.Sets/src/mage/cards/b/BeamtownBeatstick.java +++ b/Mage.Sets/src/mage/cards/b/BeamtownBeatstick.java @@ -33,7 +33,7 @@ public final class BeamtownBeatstick extends CardImpl { this.subtype.add(SubType.EQUIPMENT); // Equipped creature gets +1/+0 and has menace. - Ability ability = new SimpleStaticAbility(new BoostEquippedEffect(2, 2)); + Ability ability = new SimpleStaticAbility(new BoostEquippedEffect(1, 0)); ability.addEffect(new GainAbilityAttachedEffect( new MenaceAbility(), AttachmentType.EQUIPMENT ).setText("and has menace. (It can't be blocked except by two or more creatures.)")); diff --git a/Mage.Sets/src/mage/cards/c/ChompingKavu.java b/Mage.Sets/src/mage/cards/c/ChompingKavu.java index 26ea8e967e8..d9bc4617782 100644 --- a/Mage.Sets/src/mage/cards/c/ChompingKavu.java +++ b/Mage.Sets/src/mage/cards/c/ChompingKavu.java @@ -1,11 +1,14 @@ package mage.cards.c; import mage.MageInt; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.effects.common.combat.CantBeBlockedByCreaturesSourceEffect; import mage.abilities.keyword.BackupAbility; import mage.abilities.keyword.DauntAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; +import mage.constants.Duration; import mage.constants.SubType; import java.util.UUID; @@ -27,7 +30,9 @@ public final class ChompingKavu extends CardImpl { this.addAbility(backupAbility); // This creature can't be blocked by creatures with power 2 or less. - backupAbility.addAbility(new DauntAbility()); + backupAbility.addAbility(new SimpleStaticAbility(new CantBeBlockedByCreaturesSourceEffect( + DauntAbility.getFilter(), Duration.WhileOnBattlefield + ).setText("this creature can't be blocked by creatures with power 2 or less"))); } private ChompingKavu(final ChompingKavu card) { diff --git a/Mage.Sets/src/mage/cards/c/CompleatedConjurer.java b/Mage.Sets/src/mage/cards/c/CompleatedConjurer.java index a55613596d1..4e1aa2d6280 100644 --- a/Mage.Sets/src/mage/cards/c/CompleatedConjurer.java +++ b/Mage.Sets/src/mage/cards/c/CompleatedConjurer.java @@ -6,6 +6,7 @@ import mage.abilities.effects.common.ExileTopXMayPlayUntilEndOfTurnEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; +import mage.constants.Duration; import mage.constants.SubType; import java.util.UUID; @@ -27,7 +28,9 @@ public final class CompleatedConjurer extends CardImpl { this.nightCard = true; // When this creature transforms into Compleated Conjurer, exile the top card of your library. Until the end of your next turn, you may play that card. - this.addAbility(new TransformIntoSourceTriggeredAbility(new ExileTopXMayPlayUntilEndOfTurnEffect(1))); + this.addAbility(new TransformIntoSourceTriggeredAbility( + new ExileTopXMayPlayUntilEndOfTurnEffect(1, false, Duration.UntilEndOfYourNextTurn) + )); } private CompleatedConjurer(final CompleatedConjurer card) { diff --git a/Mage.Sets/src/mage/cards/c/CrystalCarapace.java b/Mage.Sets/src/mage/cards/c/CrystalCarapace.java index 089a3b5c536..7668a7b37a7 100644 --- a/Mage.Sets/src/mage/cards/c/CrystalCarapace.java +++ b/Mage.Sets/src/mage/cards/c/CrystalCarapace.java @@ -42,6 +42,7 @@ public final class CrystalCarapace extends CardImpl { ability.addEffect(new GainAbilityAttachedEffect( new WardAbility(new GenericManaCost(2), false), AttachmentType.AURA ).setText("and has ward {2}")); + this.addAbility(ability); // Cycling {2} this.addAbility(new CyclingAbility(new ManaCostsImpl<>("{2}"))); diff --git a/Mage.Sets/src/mage/cards/e/EtaliPrimalSickness.java b/Mage.Sets/src/mage/cards/e/EtaliPrimalSickness.java index c779785d010..0ba17bc9006 100644 --- a/Mage.Sets/src/mage/cards/e/EtaliPrimalSickness.java +++ b/Mage.Sets/src/mage/cards/e/EtaliPrimalSickness.java @@ -44,7 +44,7 @@ public final class EtaliPrimalSickness extends CardImpl { // Whenever Etali, Primal Sickness deals combat damage to a player, they get that many poison counters. this.addAbility(new DealsCombatDamageToAPlayerTriggeredAbility( - new EtaliPrimalConquerorEffect(), false, true + new EtaliPrimalSicknessEffect(), false, true )); } diff --git a/Mage.Sets/src/mage/cards/e/ExpeditionLookout.java b/Mage.Sets/src/mage/cards/e/ExpeditionLookout.java index e549ccbb8a8..7e6852c2643 100644 --- a/Mage.Sets/src/mage/cards/e/ExpeditionLookout.java +++ b/Mage.Sets/src/mage/cards/e/ExpeditionLookout.java @@ -40,7 +40,7 @@ public final class ExpeditionLookout extends CardImpl { ).setText("as long as an opponent has eight or more cards in their graveyard, " + "{this} can attack as though it didn't have defender")); ability.addEffect(new ConditionalRestrictionEffect( - new CantBeBlockedSourceEffect(), CardsInOpponentGraveyardCondition.EIGHT, "and can't be blocked" + new CantBeBlockedSourceEffect(), CardsInOpponentGraveyardCondition.EIGHT, "and it can't be blocked" )); this.addAbility(ability.addHint(CardsInOpponentGraveyardCondition.EIGHT.getHint())); } diff --git a/Mage.Sets/src/mage/cards/f/FlittingGuerrilla.java b/Mage.Sets/src/mage/cards/f/FlittingGuerrilla.java index a0d6480337d..28b4fa83323 100644 --- a/Mage.Sets/src/mage/cards/f/FlittingGuerrilla.java +++ b/Mage.Sets/src/mage/cards/f/FlittingGuerrilla.java @@ -49,7 +49,7 @@ public final class FlittingGuerrilla extends CardImpl { ReflexiveTriggeredAbility rAbility = new ReflexiveTriggeredAbility(new PutOnLibraryTargetEffect(true), false); rAbility.addTarget(new TargetCardInYourGraveyard(filter)); Ability ability = new DiesSourceTriggeredAbility(new MillCardsEachPlayerEffect(2, TargetController.EACH_PLAYER)); - ability.addEffect(new DoWhenCostPaid(rAbility, new ExileSourceFromGraveCost(), "Exile this from your graveyard?")); + ability.addEffect(new DoWhenCostPaid(rAbility, new ExileSourceFromGraveCost().setText("exile {this}"), "Exile this from your graveyard?").concatBy("Then")); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/g/GlisteningGoremonger.java b/Mage.Sets/src/mage/cards/g/GlisteningGoremonger.java index c31cb3f3f19..aa682247428 100644 --- a/Mage.Sets/src/mage/cards/g/GlisteningGoremonger.java +++ b/Mage.Sets/src/mage/cards/g/GlisteningGoremonger.java @@ -28,7 +28,7 @@ public final class GlisteningGoremonger extends CardImpl { this.nightCard = true; // When Glistening Goremonger dies, each opponent sacrifices an artifact or creature. - this.addAbility(new DiesSourceTriggeredAbility(new SacrificeOpponentsEffect(StaticFilters.FILTER_PERMANENT_ARTIFACT_CREATURE))); + this.addAbility(new DiesSourceTriggeredAbility(new SacrificeOpponentsEffect(StaticFilters.FILTER_PERMANENT_ARTIFACT_OR_CREATURE))); } private GlisteningGoremonger(final GlisteningGoremonger card) { diff --git a/Mage.Sets/src/mage/cards/g/GraftedButcher.java b/Mage.Sets/src/mage/cards/g/GraftedButcher.java index dcd2031b6aa..2770eda82fb 100644 --- a/Mage.Sets/src/mage/cards/g/GraftedButcher.java +++ b/Mage.Sets/src/mage/cards/g/GraftedButcher.java @@ -51,7 +51,7 @@ public final class GraftedButcher extends CardImpl { // {3}{B}, Sacrifice an artifact or creature: Return Grafted Butcher from your graveyard to the battlefield. Activate only as a sorcery. Ability ability = new ActivateAsSorceryActivatedAbility( - Zone.GRAVEYARD, new ReturnSourceFromGraveyardToBattlefieldEffect(), new ManaCostsImpl<>("{3}{B}") + Zone.GRAVEYARD, new ReturnSourceFromGraveyardToBattlefieldEffect(false, false), new ManaCostsImpl<>("{3}{B}") ); ability.addCost(new SacrificeTargetCost(StaticFilters.FILTER_CONTROLLED_ARTIFACT_OR_CREATURE_SHORT_TEXT)); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/cards/h/HaloChargedSkaab.java b/Mage.Sets/src/mage/cards/h/HaloChargedSkaab.java index a61e0cd504c..3aa71b5bbb5 100644 --- a/Mage.Sets/src/mage/cards/h/HaloChargedSkaab.java +++ b/Mage.Sets/src/mage/cards/h/HaloChargedSkaab.java @@ -65,7 +65,7 @@ class HaloChargedSkaabEffect extends OneShotEffect { HaloChargedSkaabEffect() { super(Outcome.Benefit); - staticText = "then you may put an instant, sorcery, or battle card from your graveyard on top of your library"; + staticText = "Then you may put an instant, sorcery, or battle card from your graveyard on top of your library"; } private HaloChargedSkaabEffect(final HaloChargedSkaabEffect effect) { diff --git a/Mage.Sets/src/mage/cards/h/HeliodTheWarpedEclipse.java b/Mage.Sets/src/mage/cards/h/HeliodTheWarpedEclipse.java index d2645116de9..282326aa10a 100644 --- a/Mage.Sets/src/mage/cards/h/HeliodTheWarpedEclipse.java +++ b/Mage.Sets/src/mage/cards/h/HeliodTheWarpedEclipse.java @@ -4,27 +4,24 @@ import mage.MageInt; import mage.abilities.Ability; import mage.abilities.SpellAbility; import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.dynamicvalue.DynamicValue; import mage.abilities.effects.common.continuous.CastAsThoughItHadFlashAllEffect; import mage.abilities.effects.common.cost.CostModificationEffectImpl; -import mage.abilities.effects.common.cost.SpellsCostReductionControllerEffect; -import mage.abilities.keyword.TransformAbility; import mage.cards.Card; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.*; -import mage.counters.CounterType; -import mage.filter.StaticFilters; +import mage.filter.FilterCard; +import mage.filter.common.FilterNonlandCard; import mage.game.Game; -import mage.players.Player; import mage.util.CardUtil; import mage.watchers.common.CardsDrawnThisTurnWatcher; -import java.util.Objects; -import java.util.Optional; import java.util.UUID; public class HeliodTheWarpedEclipse extends CardImpl { + + private static final FilterCard filter = new FilterNonlandCard("spells"); + public HeliodTheWarpedEclipse(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT, CardType.CREATURE}, ""); this.color.setWhite(true); @@ -37,9 +34,7 @@ public class HeliodTheWarpedEclipse extends CardImpl { this.nightCard = true; //You may cast spells as though they had flash. - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new CastAsThoughItHadFlashAllEffect( - Duration.WhileOnBattlefield, StaticFilters.FILTER_CARD_NON_LAND - ))); + this.addAbility(new SimpleStaticAbility(new CastAsThoughItHadFlashAllEffect(Duration.WhileOnBattlefield, filter))); //Spells you cast cost {1} less to cast for each card your opponents have drawn this turn. this.addAbility(new SimpleStaticAbility(new HeliodTheWarpedEclipseEffect())); diff --git a/Mage.Sets/src/mage/cards/k/KroxaAndKunoros.java b/Mage.Sets/src/mage/cards/k/KroxaAndKunoros.java index c207d3cf302..1266cc55410 100644 --- a/Mage.Sets/src/mage/cards/k/KroxaAndKunoros.java +++ b/Mage.Sets/src/mage/cards/k/KroxaAndKunoros.java @@ -48,7 +48,6 @@ public final class KroxaAndKunoros extends CardImpl { new ReturnFromGraveyardToBattlefieldTargetEffect(), false ); ability.addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_CREATURE_YOUR_GRAVEYARD)); - this.addAbility(ability); this.addAbility(new EntersBattlefieldOrAttacksSourceTriggeredAbility(new DoWhenCostPaid( ability, new ExileFromGraveCost(new TargetCardInYourGraveyard(5)), "Exile five cards from your graveyard?" diff --git a/Mage.Sets/src/mage/cards/o/OrderOfTheAlabasterHost.java b/Mage.Sets/src/mage/cards/o/OrderOfTheAlabasterHost.java index e8df7def56c..32745385bf8 100644 --- a/Mage.Sets/src/mage/cards/o/OrderOfTheAlabasterHost.java +++ b/Mage.Sets/src/mage/cards/o/OrderOfTheAlabasterHost.java @@ -27,7 +27,7 @@ public final class OrderOfTheAlabasterHost extends CardImpl { this.nightCard = true; // Whenever Order of the Alabaster Host becomes blocked by a creature, that creature gets -1/-1 until end of turn. - this.addAbility(new BecomesBlockedByCreatureTriggeredAbility(new BoostTargetEffect(-1, -1), false)); + this.addAbility(new BecomesBlockedByCreatureTriggeredAbility(new BoostTargetEffect(-1, -1).setText("that creature gets -1/-1 until end of turn"), false)); } private OrderOfTheAlabasterHost(final OrderOfTheAlabasterHost card) { diff --git a/Mage.Sets/src/mage/cards/p/PhyrexianGargantua.java b/Mage.Sets/src/mage/cards/p/PhyrexianGargantua.java index a3f6df076d4..d79d5f59e2e 100644 --- a/Mage.Sets/src/mage/cards/p/PhyrexianGargantua.java +++ b/Mage.Sets/src/mage/cards/p/PhyrexianGargantua.java @@ -1,7 +1,5 @@ - package mage.cards.p; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldTriggeredAbility; @@ -12,21 +10,22 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; +import java.util.UUID; + /** - * * @author Loki */ public final class PhyrexianGargantua extends CardImpl { public PhyrexianGargantua(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{4}{B}{B}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{B}{B}"); this.subtype.add(SubType.PHYREXIAN); this.subtype.add(SubType.HORROR); this.power = new MageInt(4); this.toughness = new MageInt(4); - Ability ability = new EntersBattlefieldTriggeredAbility(new DrawCardSourceControllerEffect(2), false); - ability.addEffect(new LoseLifeSourceControllerEffect(2)); + Ability ability = new EntersBattlefieldTriggeredAbility(new DrawCardSourceControllerEffect(2, "you"), false); + ability.addEffect(new LoseLifeSourceControllerEffect(2).concatBy("and")); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/s/StreetwiseNegotiator.java b/Mage.Sets/src/mage/cards/s/StreetwiseNegotiator.java index 89aba5948bc..653b278359b 100644 --- a/Mage.Sets/src/mage/cards/s/StreetwiseNegotiator.java +++ b/Mage.Sets/src/mage/cards/s/StreetwiseNegotiator.java @@ -22,7 +22,7 @@ import java.util.UUID; */ public final class StreetwiseNegotiator extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("this creature"); + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent(); static { filter.add(StreetwiseNegotiatorPredicate.instance); @@ -41,7 +41,8 @@ public final class StreetwiseNegotiator extends CardImpl { this.addAbility(backupAbility); // This creature assigns combat damage equal to its toughness rather than its power. - backupAbility.addAbility(new SimpleStaticAbility(new CombatDamageByToughnessEffect(filter, false))); + backupAbility.addAbility(new SimpleStaticAbility(new CombatDamageByToughnessEffect(filter, false) + .setText("this creature assigns combat damage equal to its toughness rather than its power"))); } private StreetwiseNegotiator(final StreetwiseNegotiator card) { diff --git a/Mage.Sets/src/mage/cards/u/UnsealTheNecropolis.java b/Mage.Sets/src/mage/cards/u/UnsealTheNecropolis.java index 7962f6417fb..90a77b78772 100644 --- a/Mage.Sets/src/mage/cards/u/UnsealTheNecropolis.java +++ b/Mage.Sets/src/mage/cards/u/UnsealTheNecropolis.java @@ -46,7 +46,7 @@ class UnsealTheNecropolisEffect extends OneShotEffect { UnsealTheNecropolisEffect() { super(Outcome.Benefit); - staticText = "then you return up to two creature cards from your graveyard to your hand"; + staticText = "Then you return up to two creature cards from your graveyard to your hand"; } private UnsealTheNecropolisEffect(final UnsealTheNecropolisEffect effect) { diff --git a/Mage.Sets/src/mage/cards/u/UrnOfGodfire.java b/Mage.Sets/src/mage/cards/u/UrnOfGodfire.java index e91586cf212..129510c43bf 100644 --- a/Mage.Sets/src/mage/cards/u/UrnOfGodfire.java +++ b/Mage.Sets/src/mage/cards/u/UrnOfGodfire.java @@ -41,6 +41,7 @@ public final class UrnOfGodfire extends CardImpl { ability.addCost(new TapSourceCost()); ability.addCost(new SacrificeSourceCost()); ability.addTarget(new TargetPermanent(filter)); + this.addAbility(ability); } private UrnOfGodfire(final UrnOfGodfire card) { diff --git a/Mage.Sets/src/mage/cards/v/VoldarenThrillseeker.java b/Mage.Sets/src/mage/cards/v/VoldarenThrillseeker.java index 67d25533f50..25acc61c094 100644 --- a/Mage.Sets/src/mage/cards/v/VoldarenThrillseeker.java +++ b/Mage.Sets/src/mage/cards/v/VoldarenThrillseeker.java @@ -38,7 +38,9 @@ public final class VoldarenThrillseeker extends CardImpl { // {1}, Sacrifice this creature: It deals damage equal to its power to any target. Ability ability = new SimpleActivatedAbility( - new DamageTargetEffect(xValue, "it"), new GenericManaCost(1) + new DamageTargetEffect(xValue) + .setText("it deals damage equal to its power to any target"), + new GenericManaCost(1) ); ability.addCost(new SacrificeSourceCost().setText("sacrifice this creature")); ability.addTarget(new TargetAnyTarget()); diff --git a/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java b/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java index a0023ca8f4b..e1cf15cd944 100644 --- a/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java +++ b/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java @@ -63,7 +63,7 @@ public class VerifyCardDataTest { private static final Logger logger = Logger.getLogger(VerifyCardDataTest.class); - private static final String FULL_ABILITIES_CHECK_SET_CODE = "40K"; // check all abilities and output cards with wrong abilities texts; + private static final String FULL_ABILITIES_CHECK_SET_CODE = "MOM"; // check all abilities and output cards with wrong abilities texts; private static final boolean CHECK_ONLY_ABILITIES_TEXT = false; // use when checking text locally, suppresses unnecessary checks and output messages private static final boolean AUTO_FIX_SAMPLE_DECKS = false; // debug only: auto-fix sample decks by test_checkSampleDecks test run diff --git a/Mage/src/main/java/mage/abilities/effects/common/MillThenPutInHandEffect.java b/Mage/src/main/java/mage/abilities/effects/common/MillThenPutInHandEffect.java index 086b3468339..ef72b3fa9c2 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/MillThenPutInHandEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/MillThenPutInHandEffect.java @@ -86,7 +86,7 @@ public class MillThenPutInHandEffect extends OneShotEffect { sb.append(CardUtil.numberToText(amount)); sb.append(" cards. You may put "); sb.append(filter.getMessage()); - sb.append(" from among the cards milled this way into your hand"); + sb.append(" from among the milled cards into your hand"); if (otherwiseEffect != null) { sb.append(". If you don't, "); sb.append(otherwiseEffect.getText(mode)); diff --git a/Mage/src/main/java/mage/abilities/effects/common/ReturnFromGraveyardToBattlefieldTargetEffect.java b/Mage/src/main/java/mage/abilities/effects/common/ReturnFromGraveyardToBattlefieldTargetEffect.java index 74fe7ddcd06..3070d28eb50 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/ReturnFromGraveyardToBattlefieldTargetEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/ReturnFromGraveyardToBattlefieldTargetEffect.java @@ -87,11 +87,13 @@ public class ReturnFromGraveyardToBattlefieldTargetEffect extends OneShotEffect if (target.getMaxNumberOfTargets() == Integer.MAX_VALUE && target.getMinNumberOfTargets() == 0) { sb.append("any number of "); - } else { - if (target.getMaxNumberOfTargets() != target.getNumberOfTargets()) { - sb.append("up to "); - } - sb.append(CardUtil.numberToText(target.getMaxNumberOfTargets())).append(' '); + } else if (target.getMaxNumberOfTargets() != target.getNumberOfTargets()) { + sb.append("up to "); + sb.append(CardUtil.numberToText(target.getMaxNumberOfTargets())); + sb.append(' '); + } else if (target.getMaxNumberOfTargets() > 1) { + sb.append(CardUtil.numberToText(target.getMaxNumberOfTargets())); + sb.append(' '); } String targetName = mode.getTargets().get(0).getTargetName(); if (!targetName.contains("target ")) { diff --git a/Mage/src/main/java/mage/abilities/effects/common/TransformTargetEffect.java b/Mage/src/main/java/mage/abilities/effects/common/TransformTargetEffect.java index 31f2acfa636..021a8a2adc7 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/TransformTargetEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/TransformTargetEffect.java @@ -50,11 +50,13 @@ public class TransformTargetEffect extends OneShotEffect { if (target.getMaxNumberOfTargets() == Integer.MAX_VALUE && target.getMinNumberOfTargets() == 0) { sb.append("any number of "); - } else { - if (target.getMaxNumberOfTargets() != target.getNumberOfTargets()) { - sb.append("up to "); - } - sb.append(CardUtil.numberToText(target.getMaxNumberOfTargets())).append(' '); + } else if (target.getMaxNumberOfTargets() != target.getNumberOfTargets()) { + sb.append("up to "); + sb.append(CardUtil.numberToText(target.getMaxNumberOfTargets())); + sb.append(' '); + } else if (target.getMaxNumberOfTargets() > 1) { + sb.append(CardUtil.numberToText(target.getMaxNumberOfTargets())); + sb.append(' '); } String targetName = mode.getTargets().get(0).getTargetName(); if (!targetName.contains("target ")) { diff --git a/Mage/src/main/java/mage/abilities/effects/common/UntapTargetEffect.java b/Mage/src/main/java/mage/abilities/effects/common/UntapTargetEffect.java index 5a2992845ff..6e8756a27d6 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/UntapTargetEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/UntapTargetEffect.java @@ -69,7 +69,7 @@ public class UntapTargetEffect extends OneShotEffect { sb.append(CardUtil.numberToText(target.getMaxNumberOfTargets())); sb.append(haveTargetWord ? " " : " target "); sb.append(target.getTargetName()); - if (!target.getTargetName().endsWith("s")) { + if (target.getMaxNumberOfTargets() > 1 && !target.getTargetName().endsWith("s")) { sb.append('s'); } } else { diff --git a/Mage/src/main/java/mage/abilities/effects/common/continuous/BecomesCreatureTargetEffect.java b/Mage/src/main/java/mage/abilities/effects/common/continuous/BecomesCreatureTargetEffect.java index fca7cf59d5a..f0613677d5f 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/continuous/BecomesCreatureTargetEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/continuous/BecomesCreatureTargetEffect.java @@ -39,16 +39,16 @@ public class BecomesCreatureTargetEffect extends ContinuousEffectImpl { /** * @param token - * @param loseAllAbilities loses all creature subtypes, colors and abilities - * @param stillALand add rule text, "it's still a land" - * @param loseName permanent loses name and gets it from token - * @param keepAbilities lose subtypes/colors, but keep abilities (example: - * Scale Up) + * @param loseAllAbilities loses all creature subtypes, colors and abilities + * @param stillALand add rule text, "it's still a land" + * @param loseName permanent loses name and gets it from token + * @param keepAbilities lose subtypes/colors, but keep abilities (example: + * Scale Up) * @param duration * @param loseOtherCardTypes permanent loses other (original) card types, exclusively obtains card types of token */ public BecomesCreatureTargetEffect(Token token, boolean loseAllAbilities, boolean stillALand, Duration duration, boolean loseName, - boolean keepAbilities, boolean loseOtherCardTypes) { + boolean keepAbilities, boolean loseOtherCardTypes) { super(duration, Outcome.BecomeCreature); this.token = token; this.loseAllAbilities = loseAllAbilities; @@ -179,10 +179,13 @@ public class BecomesCreatureTargetEffect extends ContinuousEffectImpl { } StringBuilder sb = new StringBuilder(); Target target = mode.getTargets().get(0); - if (target.getMaxNumberOfTargets() > 1) { - if (target.getNumberOfTargets() < target.getMaxNumberOfTargets()) { - sb.append("up to "); + if (target.getNumberOfTargets() < target.getMaxNumberOfTargets()) { + sb.append("up to "); + if (target.getMaxNumberOfTargets() == 1) { + sb.append("one "); } + } + if (target.getMaxNumberOfTargets() > 1) { sb.append(CardUtil.numberToText(target.getMaxNumberOfTargets())).append(" target ").append(target.getTargetName()); if (loseAllAbilities) { sb.append(" lose all their abilities and "); diff --git a/Mage/src/main/java/mage/abilities/effects/common/replacement/ModifyCountersAddedEffect.java b/Mage/src/main/java/mage/abilities/effects/common/replacement/ModifyCountersAddedEffect.java index 917da46beb4..9db4e643441 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/replacement/ModifyCountersAddedEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/replacement/ModifyCountersAddedEffect.java @@ -24,7 +24,7 @@ public class ModifyCountersAddedEffect extends ReplacementEffectImpl { this.filter = filter; this.counterType = counterType; staticText = "if one or more " + (counterType != null ? counterType + " " : "") + "counters would be put on " + - CardUtil.addArticle(filter.getMessage()) + " you control, that many plus one " + + CardUtil.addArticle(filter.getMessage()) + ", that many plus one " + (counterType != null ? counterType : "of each of those kinds of") + " counters are put on it instead"; }