diff --git a/Mage.Sets/src/mage/cards/a/AnjeMaidOfDishonor.java b/Mage.Sets/src/mage/cards/a/AnjeMaidOfDishonor.java index ca2cb22b254..60992503a43 100644 --- a/Mage.Sets/src/mage/cards/a/AnjeMaidOfDishonor.java +++ b/Mage.Sets/src/mage/cards/a/AnjeMaidOfDishonor.java @@ -32,7 +32,7 @@ import mage.game.permanent.token.BloodToken; */ public final class AnjeMaidOfDishonor extends CardImpl { - private static final FilterControlledPermanent filter = new FilterControlledPermanent("another creature or a Blood Token"); + private static final FilterControlledPermanent filter = new FilterControlledPermanent("another creature or a Blood token"); static { filter.add(AnjeMaidOfDishonorPredicate.instance); diff --git a/Mage.Sets/src/mage/cards/b/BallistaWielder.java b/Mage.Sets/src/mage/cards/b/BallistaWielder.java index 3cb5de8f974..72f2f8b952a 100644 --- a/Mage.Sets/src/mage/cards/b/BallistaWielder.java +++ b/Mage.Sets/src/mage/cards/b/BallistaWielder.java @@ -37,7 +37,6 @@ public final class BallistaWielder extends CardImpl { // {2}{R}: Ballista Wielder deals 1 damage to any target. A creature dealt damage this way can't block this turn. Ability ability = new SimpleActivatedAbility(new BallistaWielderEffect(), new ManaCostsImpl<>("{2}{R}")); - ability.addCost(new TapSourceCost()); ability.addTarget(new TargetAnyTarget()); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/cards/b/BloodswornKnight.java b/Mage.Sets/src/mage/cards/b/BloodswornKnight.java index d17112c59d7..941c1fce0f8 100644 --- a/Mage.Sets/src/mage/cards/b/BloodswornKnight.java +++ b/Mage.Sets/src/mage/cards/b/BloodswornKnight.java @@ -1,29 +1,33 @@ package mage.cards.b; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.costs.common.DiscardCardCost; import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.dynamicvalue.DynamicValue; import mage.abilities.dynamicvalue.common.CardsInControllerGraveyardCount; import mage.abilities.effects.common.TapSourceEffect; import mage.abilities.effects.common.continuous.GainAbilitySourceEffect; import mage.abilities.effects.common.continuous.SetPowerToughnessSourceEffect; import mage.abilities.keyword.IndestructibleAbility; -import mage.constants.Duration; -import mage.constants.SubType; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.SubType; +import mage.filter.StaticFilters; + +import java.util.UUID; /** - * * @author weirddan455 */ public final class BloodswornKnight extends CardImpl { + private static final DynamicValue xValue = new CardsInControllerGraveyardCount(StaticFilters.FILTER_CARD_CREATURES); + public BloodswornKnight(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, ""); @@ -37,7 +41,7 @@ public final class BloodswornKnight extends CardImpl { this.nightCard = true; // Bloodsworn Knight's power and toughness are each equal to the number of creature cards in your graveyard. - this.addAbility(new SimpleStaticAbility(new SetPowerToughnessSourceEffect(new CardsInControllerGraveyardCount(), Duration.EndOfGame))); + this.addAbility(new SimpleStaticAbility(new SetPowerToughnessSourceEffect(xValue, Duration.EndOfGame))); // {1}{B}, Discard a card: Bloodsworn Knight gains indestructible until end of turn. Tap it. Ability ability = new SimpleActivatedAbility( diff --git a/Mage.Sets/src/mage/cards/b/BloodtitheHarvester.java b/Mage.Sets/src/mage/cards/b/BloodtitheHarvester.java index 5cf0b93e242..4bd171cdbc1 100644 --- a/Mage.Sets/src/mage/cards/b/BloodtitheHarvester.java +++ b/Mage.Sets/src/mage/cards/b/BloodtitheHarvester.java @@ -52,9 +52,9 @@ public final class BloodtitheHarvester extends CardImpl { this.addAbility(new EntersBattlefieldTriggeredAbility(new CreateTokenEffect(new BloodToken()))); // {T}, Sacrifice Bloodtithe Harvester: Target creature gets -X/-X until end of turn, where X is twice the number of Blood tokens you control. Activate only as a sorcery. - Ability ability = new ActivateAsSorceryActivatedAbility( - new BoostTargetEffect(xValue, xValue, Duration.EndOfTurn), new TapSourceCost() - ); + Ability ability = new ActivateAsSorceryActivatedAbility(new BoostTargetEffect( + xValue, xValue, Duration.EndOfTurn + ).setText("target creature gets -X/-X until end of turn, where X is twice the number of Blood tokens you control"), new TapSourceCost()); ability.addCost(new SacrificeSourceCost()); ability.addTarget(new TargetCreaturePermanent()); this.addAbility(ability.addHint(hint)); diff --git a/Mage.Sets/src/mage/cards/b/BrineComber.java b/Mage.Sets/src/mage/cards/b/BrineComber.java index 9e84dfde9d4..cac6dbda703 100644 --- a/Mage.Sets/src/mage/cards/b/BrineComber.java +++ b/Mage.Sets/src/mage/cards/b/BrineComber.java @@ -89,6 +89,6 @@ class BrineComberTriggeredAbility extends TriggeredAbilityImpl { @Override public String getRule() { return "Whenever {this} enters the battlefield or becomes the target " + - "of an Aura spell, create a 1/1 white Spirit creature token with flying"; + "of an Aura spell, create a 1/1 white Spirit creature token with flying."; } } diff --git a/Mage.Sets/src/mage/cards/b/BrineboundGift.java b/Mage.Sets/src/mage/cards/b/BrineboundGift.java index feeff97f827..17e94aa84d9 100644 --- a/Mage.Sets/src/mage/cards/b/BrineboundGift.java +++ b/Mage.Sets/src/mage/cards/b/BrineboundGift.java @@ -102,6 +102,6 @@ class BrineboundGiftTriggeredAbility extends TriggeredAbilityImpl { @Override public String getRule() { return "Whenever {this} enters the battlefield or enchanted creature becomes the target " + - "of an Aura spell, create a 1/1 white Spirit creature token with flying"; + "of an Aura spell, create a 1/1 white Spirit creature token with flying."; } } diff --git a/Mage.Sets/src/mage/cards/b/BrutalCathar.java b/Mage.Sets/src/mage/cards/b/BrutalCathar.java index 842eafb3735..66d67e83707 100644 --- a/Mage.Sets/src/mage/cards/b/BrutalCathar.java +++ b/Mage.Sets/src/mage/cards/b/BrutalCathar.java @@ -33,7 +33,7 @@ public final class BrutalCathar extends CardImpl { // When this creature enters the battlefield or transforms into Brutal Cathar, exile target creature an opponent controls until this creature leaves the battlefield. Ability ability = new TransformsOrEntersTriggeredAbility( new ExileUntilSourceLeavesEffect("creature an opponent controls"), false - ); + ).setTriggerPhrase("Whenever this creature enters the battlefield or transforms into {this}, "); ability.addTarget(new TargetOpponentsCreaturePermanent()); ability.addEffect(new CreateDelayedTriggeredAbilityEffect(new OnLeaveReturnExiledToBattlefieldAbility())); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/cards/c/CacklingCulprit.java b/Mage.Sets/src/mage/cards/c/CacklingCulprit.java index 4f844eb7aa3..0d6ed4dc548 100644 --- a/Mage.Sets/src/mage/cards/c/CacklingCulprit.java +++ b/Mage.Sets/src/mage/cards/c/CacklingCulprit.java @@ -33,7 +33,7 @@ public final class CacklingCulprit extends CardImpl { // Whenever Cackling Culprit or another creature you control dies, you gain 1 life. this.addAbility(new DiesThisOrAnotherCreatureTriggeredAbility( - new GainLifeEffect(1), false, StaticFilters.FILTER_CONTROLLED_ANOTHER_CREATURE + new GainLifeEffect(1), false, StaticFilters.FILTER_CONTROLLED_CREATURE )); // {1}{B}: Cackling Culprit gains deathtouch until end of turn. diff --git a/Mage.Sets/src/mage/cards/c/ChangeOfFortune.java b/Mage.Sets/src/mage/cards/c/ChangeOfFortune.java index 1114259d74f..2bde5c9224c 100644 --- a/Mage.Sets/src/mage/cards/c/ChangeOfFortune.java +++ b/Mage.Sets/src/mage/cards/c/ChangeOfFortune.java @@ -24,7 +24,7 @@ public final class ChangeOfFortune extends CardImpl { // Discard your hand, then draw a card for each card you've discarded this turn. this.getSpellAbility().addEffect(new DiscardHandControllerEffect()); - this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(ChangeOfFortuneValue.instance)); + this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(ChangeOfFortuneValue.instance).concatBy(", then")); this.getSpellAbility().addWatcher(new DiscardedCardWatcher()); } diff --git a/Mage.Sets/src/mage/cards/c/ChillOfTheGrave.java b/Mage.Sets/src/mage/cards/c/ChillOfTheGrave.java index 0bc58281d39..e7a232205db 100644 --- a/Mage.Sets/src/mage/cards/c/ChillOfTheGrave.java +++ b/Mage.Sets/src/mage/cards/c/ChillOfTheGrave.java @@ -43,7 +43,7 @@ public final class ChillOfTheGrave extends CardImpl { this.getSpellAbility().addEffect(new DontUntapInControllersNextUntapStepTargetEffect("It")); // Draw a card. - this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1)); + this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1).concatBy("
")); } private ChillOfTheGrave(final ChillOfTheGrave card) { diff --git a/Mage.Sets/src/mage/cards/c/CrashingTide.java b/Mage.Sets/src/mage/cards/c/CrashingTide.java index ed1a2cc645a..d604b1b447a 100644 --- a/Mage.Sets/src/mage/cards/c/CrashingTide.java +++ b/Mage.Sets/src/mage/cards/c/CrashingTide.java @@ -33,7 +33,7 @@ public final class CrashingTide extends CardImpl { this.addAbility(new SimpleStaticAbility(Zone.ALL, new ConditionalContinuousEffect(new GainAbilitySourceEffect(FlashAbility.getInstance(), Duration.WhileOnBattlefield, true), new PermanentsOnTheBattlefieldCondition(filter), - "{this} has flash as long as you control a Merfolk")).setRuleAtTheTop(true)); + "this spell has flash as long as you control a Merfolk")).setRuleAtTheTop(true)); // Return target creature to it's owner's hand. this.getSpellAbility().addEffect(new ReturnToHandTargetEffect()); diff --git a/Mage.Sets/src/mage/cards/d/DeadlyDancer.java b/Mage.Sets/src/mage/cards/d/DeadlyDancer.java index 3c4da95ee52..6cb2633093f 100644 --- a/Mage.Sets/src/mage/cards/d/DeadlyDancer.java +++ b/Mage.Sets/src/mage/cards/d/DeadlyDancer.java @@ -44,8 +44,9 @@ public final class DeadlyDancer extends CardImpl { // {R}{R}: Deadly Dancer and another target creature each get +1/+0 until end of turn. Ability ability = new SimpleActivatedAbility(new BoostSourceEffect( 1, 0, Duration.EndOfTurn - ).setText("{this} and another target creature"), new ManaCostsImpl<>("{R}{R}")); - ability.addEffect(new BoostTargetEffect(1, 0).setText("each get +1/+0 until end of turn")); + ).setText("{this}"), new ManaCostsImpl<>("{R}{R}")); + ability.addEffect(new BoostTargetEffect(1, 0) + .setText("and another target creature each get +1/+0 until end of turn")); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/d/DesperateFarmer.java b/Mage.Sets/src/mage/cards/d/DesperateFarmer.java index 872e387632d..a0aae4476de 100644 --- a/Mage.Sets/src/mage/cards/d/DesperateFarmer.java +++ b/Mage.Sets/src/mage/cards/d/DesperateFarmer.java @@ -9,9 +9,7 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; -import mage.filter.FilterPermanent; -import mage.filter.common.FilterControlledCreaturePermanent; -import mage.filter.predicate.mageobject.AnotherPredicate; +import mage.filter.StaticFilters; import java.util.UUID; @@ -20,13 +18,6 @@ import java.util.UUID; */ public final class DesperateFarmer extends CardImpl { - private static final FilterPermanent filter - = new FilterControlledCreaturePermanent("another creature you control"); - - static { - filter.add(AnotherPredicate.instance); - } - public DesperateFarmer(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{B}"); @@ -41,7 +32,10 @@ public final class DesperateFarmer extends CardImpl { // When another creature you control dies, transform Desperate Farmer. this.addAbility(new TransformAbility()); - this.addAbility(new DiesCreatureTriggeredAbility(new TransformSourceEffect(), false, filter)); + this.addAbility(new DiesCreatureTriggeredAbility( + new TransformSourceEffect(), false, + StaticFilters.FILTER_CONTROLLED_ANOTHER_CREATURE + ).setTriggerPhrase("When another creature you control dies, ")); } private DesperateFarmer(final DesperateFarmer card) { diff --git a/Mage.Sets/src/mage/cards/d/DollhouseOfHorrors.java b/Mage.Sets/src/mage/cards/d/DollhouseOfHorrors.java index af1ebc4669e..feaa4101e93 100644 --- a/Mage.Sets/src/mage/cards/d/DollhouseOfHorrors.java +++ b/Mage.Sets/src/mage/cards/d/DollhouseOfHorrors.java @@ -1,7 +1,7 @@ package mage.cards.d; import mage.abilities.Ability; -import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.common.ActivateAsSorceryActivatedAbility; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.costs.common.ExileFromGraveCost; import mage.abilities.costs.common.TapSourceCost; @@ -36,7 +36,9 @@ public final class DollhouseOfHorrors extends CardImpl { super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{5}"); // {1}, {T}, Exile a creature card from your graveyard: Create a token that's a copy of the exiled card, except it's a 0/0 Construct artifact in addition to its other types and it has "This creature gets +1/+1 for each Construct you control." It gains haste until end of turn. Activate only as a sorcery. - Ability ability = new SimpleActivatedAbility(new DollhouseOfHorrorsEffect(), new GenericManaCost(1)); + Ability ability = new ActivateAsSorceryActivatedAbility( + new DollhouseOfHorrorsEffect(), new GenericManaCost(1) + ); ability.addCost(new TapSourceCost()); ability.addCost(new ExileFromGraveCost(new TargetCardInYourGraveyard( StaticFilters.FILTER_CARD_CREATURE_YOUR_GRAVEYARD diff --git a/Mage.Sets/src/mage/cards/d/DorotheaVengefulVictim.java b/Mage.Sets/src/mage/cards/d/DorotheaVengefulVictim.java index edc5bd5f117..24b3336c0d0 100644 --- a/Mage.Sets/src/mage/cards/d/DorotheaVengefulVictim.java +++ b/Mage.Sets/src/mage/cards/d/DorotheaVengefulVictim.java @@ -36,7 +36,7 @@ public final class DorotheaVengefulVictim extends CardImpl { // When Dorothea, Vengeful Victim attacks or blocks, sacrifice it at end of combat. this.addAbility(new AttacksOrBlocksTriggeredAbility(new CreateDelayedTriggeredAbilityEffect( new AtTheEndOfCombatDelayedTriggeredAbility(new SacrificeSourceEffect()) - ), false)); + ).setText("sacrifice it at end of combat"), false)); // Disturb {1}{W}{U} this.addAbility(new DisturbAbility(this, "{1}{W}{U}")); diff --git a/Mage.Sets/src/mage/cards/d/DreadFugue.java b/Mage.Sets/src/mage/cards/d/DreadFugue.java index 896e191ee16..345b121c28e 100644 --- a/Mage.Sets/src/mage/cards/d/DreadFugue.java +++ b/Mage.Sets/src/mage/cards/d/DreadFugue.java @@ -60,7 +60,7 @@ class DreadFugueEffect extends OneShotEffect { public DreadFugueEffect(FilterCard filter) { super(Outcome.Discard); this.filter = filter; - staticText = "Target player reveals their hand. You may choose a nonland card from it [with mana value 2 or less]. That player discards that card"; + staticText = "Target player reveals their hand. You choose a nonland card from it [with mana value 2 or less]. That player discards that card"; } private DreadFugueEffect(final DreadFugueEffect effect) { diff --git a/Mage.Sets/src/mage/cards/e/EdgarsAwakening.java b/Mage.Sets/src/mage/cards/e/EdgarsAwakening.java index 6202a010161..5e97ea7cb09 100644 --- a/Mage.Sets/src/mage/cards/e/EdgarsAwakening.java +++ b/Mage.Sets/src/mage/cards/e/EdgarsAwakening.java @@ -13,7 +13,6 @@ import mage.constants.Zone; import mage.filter.StaticFilters; import mage.game.Game; import mage.game.events.GameEvent; -import mage.target.common.TargetCardInGraveyard; import mage.target.common.TargetCardInYourGraveyard; import java.util.UUID; @@ -28,7 +27,7 @@ public final class EdgarsAwakening extends CardImpl { // Return target creature card from your graveyard to the battlefield. this.getSpellAbility().addEffect(new ReturnFromGraveyardToBattlefieldTargetEffect()); - this.getSpellAbility().addTarget(new TargetCardInGraveyard(StaticFilters.FILTER_CARD_CREATURE_YOUR_GRAVEYARD)); + this.getSpellAbility().addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_CREATURE_YOUR_GRAVEYARD)); // When you discard Edgar's Awakening, you may pay {B}. When you do, return target creature card from your graveyard to your hand. this.addAbility(new EdgarsAwakeningTriggeredAbility()); diff --git a/Mage.Sets/src/mage/cards/f/FellStinger.java b/Mage.Sets/src/mage/cards/f/FellStinger.java index a2e75524d07..8a9e4fdb051 100644 --- a/Mage.Sets/src/mage/cards/f/FellStinger.java +++ b/Mage.Sets/src/mage/cards/f/FellStinger.java @@ -36,7 +36,7 @@ public final class FellStinger extends CardImpl { // When Fell Stinger exploits a creature, target player draws two cards and loses 2 life. Ability ability = new ExploitCreatureTriggeredAbility(new DrawCardTargetEffect(2)); - ability.addEffect(new LoseLifeTargetEffect(2)); + ability.addEffect(new LoseLifeTargetEffect(2).setText("and loses 2 life")); ability.addTarget(new TargetPlayer()); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/g/GeralfVisionaryStitcher.java b/Mage.Sets/src/mage/cards/g/GeralfVisionaryStitcher.java index e6eae41c753..4a43896b3f7 100644 --- a/Mage.Sets/src/mage/cards/g/GeralfVisionaryStitcher.java +++ b/Mage.Sets/src/mage/cards/g/GeralfVisionaryStitcher.java @@ -50,7 +50,7 @@ public final class GeralfVisionaryStitcher extends CardImpl { // Zombies you control have flying. this.addAbility(new SimpleStaticAbility(new GainAbilityControlledEffect(FlyingAbility.getInstance(), Duration.WhileOnBattlefield, filter))); - // {U}, {T}, Sacrifice another nontoken creature: Create an X/X blue Zombie token, where X is the sacrificed creature's power. + // {U}, {T}, Sacrifice another nontoken creature: Create an X/X blue Zombie token, where X is the sacrificed creature's toughness. Ability ability = new SimpleActivatedAbility(new GeralfVisionaryStitcherEffect(), new ManaCostsImpl<>("{U}")); ability.addCost(new TapSourceCost()); ability.addCost(new SacrificeTargetCost(filter2)); @@ -71,7 +71,7 @@ class GeralfVisionaryStitcherEffect extends OneShotEffect { public GeralfVisionaryStitcherEffect() { super(Outcome.PutCreatureInPlay); - staticText = "Create an X/X blue Zombie token, where X is the sacrificed creature's power"; + staticText = "Create an X/X blue Zombie creature token, where X is the sacrificed creature's toughness"; } private GeralfVisionaryStitcherEffect(final GeralfVisionaryStitcherEffect effect) { @@ -89,7 +89,7 @@ class GeralfVisionaryStitcherEffect extends OneShotEffect { for (Cost cost : source.getCosts()) { if (cost instanceof SacrificeTargetCost) { for (Permanent permanent : ((SacrificeTargetCost) cost).getPermanents()) { - xValue += permanent.getPower().getValue(); + xValue += permanent.getToughness().getValue(); } } } diff --git a/Mage.Sets/src/mage/cards/g/GloriousSunrise.java b/Mage.Sets/src/mage/cards/g/GloriousSunrise.java index 4594b5d666a..ab3f33679b2 100644 --- a/Mage.Sets/src/mage/cards/g/GloriousSunrise.java +++ b/Mage.Sets/src/mage/cards/g/GloriousSunrise.java @@ -51,7 +51,7 @@ public final class GloriousSunrise extends CardImpl { // • Creatures you control get +1/+1 and gain trample until end of turn. Ability ability = new BeginningOfCombatTriggeredAbility(new BoostControlledEffect( 1, 1, Duration.EndOfTurn - ).setText("reatures you control get +1/+1"), TargetController.YOU, false); + ).setText("creatures you control get +1/+1"), TargetController.YOU, false); ability.addEffect(new GainAbilityControlledEffect( TrampleAbility.getInstance(), Duration.EndOfTurn, StaticFilters.FILTER_PERMANENT_CREATURE diff --git a/Mage.Sets/src/mage/cards/h/HalanaAndAlenaPartners.java b/Mage.Sets/src/mage/cards/h/HalanaAndAlenaPartners.java index 0c911cc887e..d3ade280166 100644 --- a/Mage.Sets/src/mage/cards/h/HalanaAndAlenaPartners.java +++ b/Mage.Sets/src/mage/cards/h/HalanaAndAlenaPartners.java @@ -44,7 +44,7 @@ public final class HalanaAndAlenaPartners extends CardImpl { // At the beginning of combat on your turn, put X +1/+1 counters on another target creature you control, where X is Halana and Alena's power. That creature gains haste until end of turn. Ability ability = new BeginningOfCombatTriggeredAbility( new AddCountersTargetEffect(CounterType.P1P1.createInstance(0), xValue) - .setText("put X +1/+1 counters on another target creature you control, where X is {this} power"), + .setText("put X +1/+1 counters on another target creature you control, where X is {this}'s power"), TargetController.YOU, false ); ability.addEffect(new GainAbilityTargetEffect( diff --git a/Mage.Sets/src/mage/cards/h/HenrikaDomnathi.java b/Mage.Sets/src/mage/cards/h/HenrikaDomnathi.java index d1bf4e407e1..bec79f3fd06 100644 --- a/Mage.Sets/src/mage/cards/h/HenrikaDomnathi.java +++ b/Mage.Sets/src/mage/cards/h/HenrikaDomnathi.java @@ -47,9 +47,10 @@ public final class HenrikaDomnathi extends CardImpl { // • You draw a card and you lose 1 life. Mode mode = new Mode(new DrawCardSourceControllerEffect(1).setText("you draw a card")); mode.addEffect(new LoseLifeSourceControllerEffect(1).concatBy("and")); + ability.addMode(mode); // • Transform Henrika Domnathi. - ability.addEffect(new TransformSourceEffect()); + ability.addMode(new Mode(new TransformSourceEffect())); this.addAbility(new TransformAbility()); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/h/HenrikaInfernalSeer.java b/Mage.Sets/src/mage/cards/h/HenrikaInfernalSeer.java index 184ebb0b4e6..9d51e0234ee 100644 --- a/Mage.Sets/src/mage/cards/h/HenrikaInfernalSeer.java +++ b/Mage.Sets/src/mage/cards/h/HenrikaInfernalSeer.java @@ -21,8 +21,7 @@ import java.util.UUID; */ public final class HenrikaInfernalSeer extends CardImpl { - private static final FilterCreaturePermanent filter - = new FilterCreaturePermanent("creature you control with flying, deathtouch, and/or lifelink"); + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent(); static { filter.add(TargetController.YOU.getControllerPredicate()); @@ -55,7 +54,7 @@ public final class HenrikaInfernalSeer extends CardImpl { // {1}{B}{B}: Each creature you control with flying, deathtouch, and/or lifelink gets +1/+0 until end of turn. this.addAbility(new SimpleActivatedAbility(new BoostAllEffect( 0, 1, Duration.EndOfTurn, filter, false - ), new ManaCostsImpl<>("{1}{B}{B}"))); + ).setText("each creature you control with flying, deathtouch, and/or lifelink gets +1/+0 until end of turn"), new ManaCostsImpl<>("{1}{B}{B}"))); } private HenrikaInfernalSeer(final HenrikaInfernalSeer card) { diff --git a/Mage.Sets/src/mage/cards/h/HeronBlessedGeist.java b/Mage.Sets/src/mage/cards/h/HeronBlessedGeist.java index 1efe487fc54..d63452acafd 100644 --- a/Mage.Sets/src/mage/cards/h/HeronBlessedGeist.java +++ b/Mage.Sets/src/mage/cards/h/HeronBlessedGeist.java @@ -5,6 +5,7 @@ import mage.abilities.ActivatedAbility; import mage.abilities.common.ActivateIfConditionActivatedAbility; import mage.abilities.condition.Condition; import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition; +import mage.abilities.costs.common.ExileSourceFromGraveCost; import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.effects.common.CreateTokenEffect; import mage.abilities.hint.ConditionHint; @@ -16,7 +17,7 @@ import mage.constants.CardType; import mage.constants.SubType; import mage.constants.TimingRule; import mage.constants.Zone; -import mage.filter.StaticFilters; +import mage.filter.common.FilterEnchantmentPermanent; import mage.game.permanent.token.SpiritWhiteToken; import java.util.UUID; @@ -26,8 +27,9 @@ import java.util.UUID; */ public final class HeronBlessedGeist extends CardImpl { - private static final Condition condition - = new PermanentsOnTheBattlefieldCondition(StaticFilters.FILTER_ENCHANTMENT_PERMANENT); + private static final Condition condition = new PermanentsOnTheBattlefieldCondition( + new FilterEnchantmentPermanent("you control an enchantment and only as a sorcery") + ); private static final Hint hint = new ConditionHint(condition, "You control an enchantment"); public HeronBlessedGeist(UUID ownerId, CardSetInfo setInfo) { @@ -45,6 +47,7 @@ public final class HeronBlessedGeist extends CardImpl { Zone.GRAVEYARD, new CreateTokenEffect(new SpiritWhiteToken(), 2), new ManaCostsImpl<>("{3}{W}"), condition ); + ability.addCost(new ExileSourceFromGraveCost()); ability.setTiming(TimingRule.SORCERY); this.addAbility(ability.addHint(hint)); } diff --git a/Mage.Sets/src/mage/cards/h/HiveheartShaman.java b/Mage.Sets/src/mage/cards/h/HiveheartShaman.java index c8db005c9f5..35f5f608a75 100644 --- a/Mage.Sets/src/mage/cards/h/HiveheartShaman.java +++ b/Mage.Sets/src/mage/cards/h/HiveheartShaman.java @@ -2,13 +2,13 @@ package mage.cards.h; import mage.MageInt; import mage.abilities.Ability; +import mage.abilities.common.ActivateAsSorceryActivatedAbility; import mage.abilities.common.AttacksTriggeredAbility; -import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.dynamicvalue.DynamicValue; import mage.abilities.dynamicvalue.common.DomainValue; import mage.abilities.effects.OneShotEffect; -import mage.abilities.effects.common.search.SearchLibraryPutInHandEffect; +import mage.abilities.effects.common.search.SearchLibraryPutInPlayEffect; import mage.abilities.hint.common.DomainHint; import mage.cards.Card; import mage.cards.CardImpl; @@ -52,12 +52,12 @@ public final class HiveheartShaman extends CardImpl { this.toughness = new MageInt(5); // Whenever Hiveheart Shaman attacks, you may search your library for a basic land card that doesn't share a land type with a land you control, put that card onto the battlefield, then shuffle. - this.addAbility(new AttacksTriggeredAbility(new SearchLibraryPutInHandEffect( - new TargetCardInLibrary(filter), true, true - ))); + this.addAbility(new AttacksTriggeredAbility( + new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(filter)), true + )); // {5}{G}: Create a 1/1 green Insect creature token. Put X +1/+1 counters on it, where X is the number of basic land types among lands you control. Activate only as a sorcery. - this.addAbility(new SimpleActivatedAbility( + this.addAbility(new ActivateAsSorceryActivatedAbility( new HiveheartShamanEffect(), new ManaCostsImpl<>("{5}{G}") ).addHint(DomainHint.instance)); } diff --git a/Mage.Sets/src/mage/cards/h/HoneymoonHearse.java b/Mage.Sets/src/mage/cards/h/HoneymoonHearse.java index ea51f5fb58d..cc4be54024a 100644 --- a/Mage.Sets/src/mage/cards/h/HoneymoonHearse.java +++ b/Mage.Sets/src/mage/cards/h/HoneymoonHearse.java @@ -34,7 +34,7 @@ public final class HoneymoonHearse extends CardImpl { this.addAbility(new SimpleActivatedAbility( new AddCardTypeSourceEffect( Duration.EndOfTurn, CardType.ARTIFACT, CardType.CREATURE - ), + ).setText("{this} becomes an artifact creature until end of turn"), new TapTargetCost(new TargetControlledPermanent( 2, StaticFilters.FILTER_CONTROLLED_UNTAPPED_CREATURES )) diff --git a/Mage.Sets/src/mage/cards/h/HuntmasterOfTheFells.java b/Mage.Sets/src/mage/cards/h/HuntmasterOfTheFells.java index e5f0763e5a2..5994fd49068 100644 --- a/Mage.Sets/src/mage/cards/h/HuntmasterOfTheFells.java +++ b/Mage.Sets/src/mage/cards/h/HuntmasterOfTheFells.java @@ -31,9 +31,7 @@ public final class HuntmasterOfTheFells extends CardImpl { this.toughness = new MageInt(2); // Whenever this creature enters the battlefield or transforms into Huntmaster of the Fells, create a 2/2 green Wolf creature token and you gain 2 life. - Ability ability = new TransformsOrEntersTriggeredAbility( - new CreateTokenEffect(new WolfToken()), false, true - ); + Ability ability = new TransformsOrEntersTriggeredAbility(new CreateTokenEffect(new WolfToken()), false); ability.addEffect(new GainLifeEffect(2).concatBy("and")); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/cards/l/LanternFlare.java b/Mage.Sets/src/mage/cards/l/LanternFlare.java index 723d4d823f4..b127bd8df92 100644 --- a/Mage.Sets/src/mage/cards/l/LanternFlare.java +++ b/Mage.Sets/src/mage/cards/l/LanternFlare.java @@ -33,7 +33,7 @@ public final class LanternFlare extends CardImpl { // Lantern Flare deals X damage to target creature or planeswalker and you gain X life. [X is the number of creatures you control.] this.getSpellAbility().addEffect(new DamageTargetEffect( CreaturesYouControlCount.instance - ).setText("deals X damage to target creature or planeswalker")); + ).setText("{this} deals X damage to target creature or planeswalker")); this.getSpellAbility().addEffect(new GainLifeEffect( CreaturesYouControlCount.instance, "and you gain X life. [X is the number of creatures you control.]" diff --git a/Mage.Sets/src/mage/cards/m/MagmaPummeler.java b/Mage.Sets/src/mage/cards/m/MagmaPummeler.java index 805a69d074f..0c53646f66e 100644 --- a/Mage.Sets/src/mage/cards/m/MagmaPummeler.java +++ b/Mage.Sets/src/mage/cards/m/MagmaPummeler.java @@ -2,6 +2,7 @@ package mage.cards.m; import mage.MageInt; import mage.abilities.Ability; +import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.common.delayed.ReflexiveTriggeredAbility; import mage.abilities.effects.PreventionEffectImpl; @@ -33,7 +34,7 @@ public final class MagmaPummeler extends CardImpl { this.toughness = new MageInt(0); // Magma Pummeler enters the battlefield with X +1/+1 counters on it. - this.addAbility(new SimpleStaticAbility(new EntersBattlefieldWithXCountersEffect(CounterType.P1P1.createInstance()))); + this.addAbility(new EntersBattlefieldAbility(new EntersBattlefieldWithXCountersEffect(CounterType.P1P1.createInstance()))); // If damage would be dealt to Magma Pummeler while it has a +1/+1 counter on it, prevent that damage and remove that many +1/+1 counters from it. When one or more counters are removed from Magma Pummeler this way, it deals that much damage to any target. this.addAbility(new SimpleStaticAbility(new MagmaPummelerEffect())); diff --git a/Mage.Sets/src/mage/cards/m/MirrorhallMimic.java b/Mage.Sets/src/mage/cards/m/MirrorhallMimic.java index 7296833fb55..15a77dbb34e 100644 --- a/Mage.Sets/src/mage/cards/m/MirrorhallMimic.java +++ b/Mage.Sets/src/mage/cards/m/MirrorhallMimic.java @@ -34,7 +34,7 @@ public final class MirrorhallMimic extends CardImpl { this.addAbility(new EntersBattlefieldAbility(new CopyPermanentEffect( StaticFilters.FILTER_PERMANENT_CREATURE, new MirrorhallMimicApplier() ), true, null, "You may have {this} enter the battlefield as a copy of " + - "any creature on the battlefield, except it's a Spirit in addition to its other types", null)); + "any creature on the battlefield, except it's a Spirit in addition to its other types.", null)); // Disturb {3}{U}{U} this.addAbility(new DisturbAbility(this, "{3}{U}{U}")); diff --git a/Mage.Sets/src/mage/cards/p/PanickedBystander.java b/Mage.Sets/src/mage/cards/p/PanickedBystander.java index 1ef54df2994..3b16985cbee 100644 --- a/Mage.Sets/src/mage/cards/p/PanickedBystander.java +++ b/Mage.Sets/src/mage/cards/p/PanickedBystander.java @@ -34,7 +34,7 @@ public final class PanickedBystander extends CardImpl { // Whenever Panicked Bystander or another creature you control dies, you gain 1 life. this.addAbility(new DiesThisOrAnotherCreatureTriggeredAbility( - new GainLifeEffect(1), false, StaticFilters.FILTER_CONTROLLED_ANOTHER_CREATURE + new GainLifeEffect(1), false, StaticFilters.FILTER_CONTROLLED_CREATURE )); // At the beginning of your end step, if you gained 3 or more life this turn, transform Panicked Bystander. diff --git a/Mage.Sets/src/mage/cards/p/PointedDiscussion.java b/Mage.Sets/src/mage/cards/p/PointedDiscussion.java index 1b223fbdafb..244c6f72635 100644 --- a/Mage.Sets/src/mage/cards/p/PointedDiscussion.java +++ b/Mage.Sets/src/mage/cards/p/PointedDiscussion.java @@ -20,7 +20,7 @@ public final class PointedDiscussion extends CardImpl { // You draw two cards, lose 2 life, then create a Blood token. this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(2).setText("you draw two cards")); - this.getSpellAbility().addEffect(new LoseLifeSourceControllerEffect(2).concatBy(",")); + this.getSpellAbility().addEffect(new LoseLifeSourceControllerEffect(2).setText(", lose 2 life")); this.getSpellAbility().addEffect(new CreateTokenEffect(new BloodToken()).concatBy(", then")); } diff --git a/Mage.Sets/src/mage/cards/r/RestlessBloodseeker.java b/Mage.Sets/src/mage/cards/r/RestlessBloodseeker.java index 9db3475e614..2525c0588d9 100644 --- a/Mage.Sets/src/mage/cards/r/RestlessBloodseeker.java +++ b/Mage.Sets/src/mage/cards/r/RestlessBloodseeker.java @@ -30,7 +30,7 @@ public final class RestlessBloodseeker extends CardImpl { private static final Condition condition = new YouGainedLifeCondition(ComparisonType.MORE_THAN, 0); private static final Hint hint = new ConditionHint(condition, "You gained life this turn"); private static final FilterControlledPermanent filter - = new FilterControlledPermanent(SubType.BLOOD, "Blood token"); + = new FilterControlledPermanent(SubType.BLOOD, "Blood tokens"); static { filter.add(TokenPredicate.TRUE); diff --git a/Mage.Sets/src/mage/cards/r/RunoStromkirk.java b/Mage.Sets/src/mage/cards/r/RunoStromkirk.java index 66f9927c515..a5c7e229a3b 100644 --- a/Mage.Sets/src/mage/cards/r/RunoStromkirk.java +++ b/Mage.Sets/src/mage/cards/r/RunoStromkirk.java @@ -41,7 +41,7 @@ public final class RunoStromkirk extends CardImpl { // When Runo Stromkirk enters the battlefield, put up to one target creature card from your graveyard on top of your library. Ability ability = new EntersBattlefieldTriggeredAbility(new PutOnLibraryTargetEffect(true)); - ability.addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_CREATURE_YOUR_GRAVEYARD)); + ability.addTarget(new TargetCardInYourGraveyard(0, 1, StaticFilters.FILTER_CARD_CREATURE_YOUR_GRAVEYARD)); this.addAbility(ability); // At the beginning of your upkeep, look at the top card of your library. You may reveal that card. If a creature card with mana value 6 or greater is revealed this way, transform Runo Stromkirk. diff --git a/Mage.Sets/src/mage/cards/s/SanguineStatuette.java b/Mage.Sets/src/mage/cards/s/SanguineStatuette.java index e932a5869f7..5452de4839e 100644 --- a/Mage.Sets/src/mage/cards/s/SanguineStatuette.java +++ b/Mage.Sets/src/mage/cards/s/SanguineStatuette.java @@ -42,7 +42,7 @@ public final class SanguineStatuette extends CardImpl { .withSubType(SubType.VAMPIRE) .withAbility(HasteAbility.getInstance()), "", Duration.EndOfTurn - ), filter, false, true)); + ).setText("have {this} become a 3/3 Vampire artifact creature with haste until end of turn"), filter, false, true)); } private SanguineStatuette(final SanguineStatuette card) { diff --git a/Mage.Sets/src/mage/cards/s/SawbladeSlinger.java b/Mage.Sets/src/mage/cards/s/SawbladeSlinger.java index e0dcf412adf..1a3a454b37d 100644 --- a/Mage.Sets/src/mage/cards/s/SawbladeSlinger.java +++ b/Mage.Sets/src/mage/cards/s/SawbladeSlinger.java @@ -23,7 +23,7 @@ import java.util.UUID; public final class SawbladeSlinger extends CardImpl { private static final FilterPermanent filter = new FilterArtifactPermanent("artifact an opponent controls"); - private static final FilterPermanent filter2 = new FilterPermanent(SubType.ZOMBIE, "Zombie and opponent controls"); + private static final FilterPermanent filter2 = new FilterPermanent(SubType.ZOMBIE, "Zombie an opponent controls"); static { filter.add(TargetController.OPPONENT.getControllerPredicate()); diff --git a/Mage.Sets/src/mage/cards/s/SpikedRipsaw.java b/Mage.Sets/src/mage/cards/s/SpikedRipsaw.java index d335ad211db..6b16b2be202 100644 --- a/Mage.Sets/src/mage/cards/s/SpikedRipsaw.java +++ b/Mage.Sets/src/mage/cards/s/SpikedRipsaw.java @@ -24,7 +24,7 @@ import mage.filter.common.FilterControlledPermanent; */ public final class SpikedRipsaw extends CardImpl { - private static final FilterControlledPermanent filter = new FilterControlledPermanent(SubType.FOREST, "forest"); + private static final FilterControlledPermanent filter = new FilterControlledPermanent(SubType.FOREST, "Forest"); public SpikedRipsaw(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{2}{G}"); diff --git a/Mage.Sets/src/mage/cards/s/SteelcladSpirit.java b/Mage.Sets/src/mage/cards/s/SteelcladSpirit.java index d8206a5a7a7..010fbe4265a 100644 --- a/Mage.Sets/src/mage/cards/s/SteelcladSpirit.java +++ b/Mage.Sets/src/mage/cards/s/SteelcladSpirit.java @@ -9,7 +9,8 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Duration; import mage.constants.SubType; -import mage.filter.StaticFilters; +import mage.filter.FilterPermanent; +import mage.filter.common.FilterEnchantmentPermanent; import java.util.UUID; @@ -18,6 +19,8 @@ import java.util.UUID; */ public final class SteelcladSpirit extends CardImpl { + private static final FilterPermanent filter = new FilterEnchantmentPermanent("an enchantment"); + public SteelcladSpirit(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{U}"); @@ -30,8 +33,7 @@ public final class SteelcladSpirit extends CardImpl { // Whenever an enchantment enters the battlefield under your control, Steelclad Spirit can attack this turn as though it didn't have defender. this.addAbility(new EntersBattlefieldControlledTriggeredAbility( - new CanAttackAsThoughItDidntHaveDefenderSourceEffect(Duration.EndOfTurn), - StaticFilters.FILTER_ENCHANTMENT_PERMANENT + new CanAttackAsThoughItDidntHaveDefenderSourceEffect(Duration.EndOfTurn), filter )); } diff --git a/Mage.Sets/src/mage/cards/s/StensiaUprising.java b/Mage.Sets/src/mage/cards/s/StensiaUprising.java index 265c6410882..ee79b894364 100644 --- a/Mage.Sets/src/mage/cards/s/StensiaUprising.java +++ b/Mage.Sets/src/mage/cards/s/StensiaUprising.java @@ -1,7 +1,7 @@ package mage.cards.s; import mage.abilities.Ability; -import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; +import mage.abilities.common.BeginningOfEndStepTriggeredAbility; import mage.abilities.common.delayed.ReflexiveTriggeredAbility; import mage.abilities.condition.Condition; import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition; @@ -47,7 +47,7 @@ public final class StensiaUprising extends CardImpl { new DamageTargetEffect(7), false, "{this} deals 7 damage to any target" ); reflexiveTrigger.addTarget(new TargetAnyTarget()); - Ability ability = new BeginningOfUpkeepTriggeredAbility( + Ability ability = new BeginningOfEndStepTriggeredAbility( new CreateTokenEffect(new RedHumanToken()), TargetController.YOU, false ); ability.addEffect(new ConditionalOneShotEffect( diff --git a/Mage.Sets/src/mage/cards/s/StormchaserDrake.java b/Mage.Sets/src/mage/cards/s/StormchaserDrake.java index 72c7df74a19..c9a323e28d1 100644 --- a/Mage.Sets/src/mage/cards/s/StormchaserDrake.java +++ b/Mage.Sets/src/mage/cards/s/StormchaserDrake.java @@ -1,19 +1,19 @@ package mage.cards.s; -import java.util.UUID; import mage.MageInt; import mage.abilities.common.BecomesTargetTriggeredAbility; import mage.abilities.effects.common.DrawCardSourceControllerEffect; -import mage.constants.SubType; import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; +import mage.constants.SubType; import mage.constants.TargetController; import mage.filter.FilterSpell; +import java.util.UUID; + /** - * * @author weirddan455 */ public final class StormchaserDrake extends CardImpl { @@ -35,7 +35,9 @@ public final class StormchaserDrake extends CardImpl { this.addAbility(FlyingAbility.getInstance()); // Whenever Stormchaser Drake becomes the target of a spell you control, draw a card. - this.addAbility(new BecomesTargetTriggeredAbility(new DrawCardSourceControllerEffect(1), filter)); + this.addAbility(new BecomesTargetTriggeredAbility( + new DrawCardSourceControllerEffect(1), filter + ).setTriggerPhrase("Whenever {this} becomes the target of a spell you control, ")); } private StormchaserDrake(final StormchaserDrake card) { diff --git a/Mage.Sets/src/mage/cards/s/SupernaturalRescue.java b/Mage.Sets/src/mage/cards/s/SupernaturalRescue.java index 82c4eb3a096..3026def22a2 100644 --- a/Mage.Sets/src/mage/cards/s/SupernaturalRescue.java +++ b/Mage.Sets/src/mage/cards/s/SupernaturalRescue.java @@ -44,7 +44,7 @@ public final class SupernaturalRescue extends CardImpl { Zone.ALL, new ConditionalContinuousEffect(new GainAbilitySourceEffect( FlashAbility.getInstance(), Duration.WhileOnBattlefield, true - ), condition, "{this} has flash as long as you control a Merfolk") + ), condition, "this spell has flash as long as you control a Spirit") ).setRuleAtTheTop(true).addHint(hint)); // When you cast this spell, tap up to two target creatures you don't control. diff --git a/Mage.Sets/src/mage/cards/u/UlrichOfTheKrallenhorde.java b/Mage.Sets/src/mage/cards/u/UlrichOfTheKrallenhorde.java index 27611324325..db4150de835 100644 --- a/Mage.Sets/src/mage/cards/u/UlrichOfTheKrallenhorde.java +++ b/Mage.Sets/src/mage/cards/u/UlrichOfTheKrallenhorde.java @@ -32,7 +32,7 @@ public final class UlrichOfTheKrallenhorde extends CardImpl { // Whenever this creature enters the battlefield or transforms into Ulrich of the Krallenhorde, target creature gets +4/+4 until end of turn. Ability ability = new TransformsOrEntersTriggeredAbility( - new BoostTargetEffect(4, 4), false, true + new BoostTargetEffect(4, 4), false ); ability.addTarget(new TargetCreaturePermanent()); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/cards/u/UndeadButler.java b/Mage.Sets/src/mage/cards/u/UndeadButler.java index 062491a1886..10c9c921e02 100644 --- a/Mage.Sets/src/mage/cards/u/UndeadButler.java +++ b/Mage.Sets/src/mage/cards/u/UndeadButler.java @@ -38,7 +38,7 @@ public final class UndeadButler extends CardImpl { ); ability.addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_CREATURE_YOUR_GRAVEYARD)); this.addAbility(new DiesSourceTriggeredAbility(new DoWhenCostPaid( - ability, new ExileSourceFromGraveCost(), "Exile {this}?" + ability, new ExileSourceFromGraveCost().setText("exile it"), "Exile {this}?" ))); } diff --git a/Mage.Sets/src/mage/cards/v/VoldarenEpicure.java b/Mage.Sets/src/mage/cards/v/VoldarenEpicure.java index 6ea0a14a46b..378ce7c376b 100644 --- a/Mage.Sets/src/mage/cards/v/VoldarenEpicure.java +++ b/Mage.Sets/src/mage/cards/v/VoldarenEpicure.java @@ -27,9 +27,9 @@ public final class VoldarenEpicure extends CardImpl { this.toughness = new MageInt(1); // When Voldaren Epicure enters the battlefield, it deals 1 damage to each opponent. Create a Blood token. - Ability ability = new EntersBattlefieldTriggeredAbility( - new DamagePlayersEffect(1, TargetController.OPPONENT) - ); + Ability ability = new EntersBattlefieldTriggeredAbility(new DamagePlayersEffect( + 1, TargetController.OPPONENT, "it" + )); ability.addEffect(new CreateTokenEffect(new BloodToken())); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/w/WitchsWeb.java b/Mage.Sets/src/mage/cards/w/WitchsWeb.java index dc60631c687..04c4f319254 100644 --- a/Mage.Sets/src/mage/cards/w/WitchsWeb.java +++ b/Mage.Sets/src/mage/cards/w/WitchsWeb.java @@ -22,8 +22,8 @@ public final class WitchsWeb extends CardImpl { // Target creature gets +3/+3 and gains reach until end of turn. Untap it. this.getSpellAbility().addEffect(new BoostTargetEffect( - 1, 2, Duration.EndOfTurn - ).setText("Target creature gets +1/+2")); + 3, 3, Duration.EndOfTurn + ).setText("Target creature gets +3/+3")); this.getSpellAbility().addEffect(new GainAbilityTargetEffect( ReachAbility.getInstance(), Duration.EndOfTurn ).setText("and gains reach until end of turn")); diff --git a/Mage.Sets/src/mage/cards/w/WretchedThrong.java b/Mage.Sets/src/mage/cards/w/WretchedThrong.java index 544b021466f..d695e88c130 100644 --- a/Mage.Sets/src/mage/cards/w/WretchedThrong.java +++ b/Mage.Sets/src/mage/cards/w/WretchedThrong.java @@ -18,7 +18,7 @@ import java.util.UUID; */ public final class WretchedThrong extends CardImpl { - private static final FilterCard filter = new FilterCard("a card name Wretched Throng"); + private static final FilterCard filter = new FilterCard("a card named Wretched Throng"); static { filter.add(new NamePredicate("Wretched Throng")); diff --git a/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java b/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java index 7023781bb07..2a6b597c0e9 100644 --- a/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java +++ b/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java @@ -58,7 +58,7 @@ public class VerifyCardDataTest { private static final Logger logger = Logger.getLogger(VerifyCardDataTest.class); - private static final String FULL_ABILITIES_CHECK_SET_CODE = "SLD"; // check all abilities and output cards with wrong abilities texts; + private static final String FULL_ABILITIES_CHECK_SET_CODE = "VOW"; // check all abilities and output cards with wrong abilities texts; private static final boolean AUTO_FIX_SAMPLE_DECKS = false; // debug only: auto-fix sample decks by test_checkSampleDecks test run private static final boolean ONLY_TEXT = false; // use when checking text locally, suppresses unnecessary checks and output messages @@ -1581,9 +1581,8 @@ public class VerifyCardDataTest { refText = refText.substring(1, refText.length() - 1); } // planeswalker fix [-7]: xxx - if (refText.contains("[") && refText.contains("]")) { - refText = refText.replace("[", "").replace("]", ""); - } + refText = refText.replaceAll("\\[([\\−\\+]?\\d*)\\]\\: ", "$1: "); + // evergreen keyword fix for (String s : refText.split("[\\$\\\n]")) { if (Arrays diff --git a/Mage/src/main/java/mage/abilities/common/PayMoreToCastAsThoughtItHadFlashAbility.java b/Mage/src/main/java/mage/abilities/common/PayMoreToCastAsThoughtItHadFlashAbility.java index 7595f01dc4a..52e6f6e7695 100644 --- a/Mage/src/main/java/mage/abilities/common/PayMoreToCastAsThoughtItHadFlashAbility.java +++ b/Mage/src/main/java/mage/abilities/common/PayMoreToCastAsThoughtItHadFlashAbility.java @@ -10,7 +10,6 @@ import mage.constants.Zone; import mage.util.CardUtil; /** - * * @author LevelX2 */ public class PayMoreToCastAsThoughtItHadFlashAbility extends SpellAbility { @@ -42,7 +41,7 @@ public class PayMoreToCastAsThoughtItHadFlashAbility extends SpellAbility { @Override public String getRule() { - return "You may cast {this} as though it had flash if you pay " + costsToAdd.getText() + " more to cast it. (You may cast it any time you could cast an instant.)"; + return "You may cast this spell as though it had flash if you pay " + costsToAdd.getText() + " more to cast it. (You may cast it any time you could cast an instant.)"; } } diff --git a/Mage/src/main/java/mage/abilities/common/TransformIntoSourceTriggeredAbility.java b/Mage/src/main/java/mage/abilities/common/TransformIntoSourceTriggeredAbility.java index 8b916e50359..4902f91d450 100644 --- a/Mage/src/main/java/mage/abilities/common/TransformIntoSourceTriggeredAbility.java +++ b/Mage/src/main/java/mage/abilities/common/TransformIntoSourceTriggeredAbility.java @@ -53,6 +53,6 @@ public class TransformIntoSourceTriggeredAbility extends TriggeredAbilityImpl { @Override public String getTriggerPhrase() { - return "When" + (whenever ? "ever" : "") + " this creature transforms into this {this}, "; + return "When" + (whenever ? "ever" : "") + " this creature transforms into {this}, "; } } diff --git a/Mage/src/main/java/mage/abilities/common/TransformsOrEntersTriggeredAbility.java b/Mage/src/main/java/mage/abilities/common/TransformsOrEntersTriggeredAbility.java index bd5cda7396e..de57ff9824d 100644 --- a/Mage/src/main/java/mage/abilities/common/TransformsOrEntersTriggeredAbility.java +++ b/Mage/src/main/java/mage/abilities/common/TransformsOrEntersTriggeredAbility.java @@ -12,20 +12,12 @@ import mage.game.permanent.Permanent; */ public class TransformsOrEntersTriggeredAbility extends TriggeredAbilityImpl { - private final boolean whenever; - public TransformsOrEntersTriggeredAbility(Effect effect, boolean optional) { - this(effect, optional, false); - } - - public TransformsOrEntersTriggeredAbility(Effect effect, boolean optional, boolean whenever) { super(Zone.BATTLEFIELD, effect, optional); - this.whenever = whenever; } private TransformsOrEntersTriggeredAbility(final TransformsOrEntersTriggeredAbility ability) { super(ability); - this.whenever = ability.whenever; } @Override @@ -56,6 +48,6 @@ public class TransformsOrEntersTriggeredAbility extends TriggeredAbilityImpl { @Override public String getTriggerPhrase() { - return "When" + (whenever ? "ever" : "") + " this creature enters the battlefield or transforms into {this}, "; + return "Whenever this creature enters the battlefield or transforms into {this}, "; } } diff --git a/Mage/src/main/java/mage/abilities/costs/common/ExileSourceFromGraveCost.java b/Mage/src/main/java/mage/abilities/costs/common/ExileSourceFromGraveCost.java index 1169199a7b9..e6dcf15e195 100644 --- a/Mage/src/main/java/mage/abilities/costs/common/ExileSourceFromGraveCost.java +++ b/Mage/src/main/java/mage/abilities/costs/common/ExileSourceFromGraveCost.java @@ -17,7 +17,7 @@ import mage.players.Player; public class ExileSourceFromGraveCost extends CostImpl { public ExileSourceFromGraveCost() { - this.text = "Exile {this} from your graveyard"; + this.text = "exile {this} from your graveyard"; } public ExileSourceFromGraveCost(ExileSourceFromGraveCost cost) { diff --git a/Mage/src/main/java/mage/abilities/effects/common/continuous/GainAbilityAttachedEffect.java b/Mage/src/main/java/mage/abilities/effects/common/continuous/GainAbilityAttachedEffect.java index 437d4a8b9db..d46281f5df8 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/continuous/GainAbilityAttachedEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/continuous/GainAbilityAttachedEffect.java @@ -7,6 +7,8 @@ import mage.game.Game; import mage.game.permanent.Permanent; import mage.target.targetpointer.FixedTarget; +import java.util.Locale; + /** * @author BetaSteward_at_googlemail.com */ @@ -115,7 +117,7 @@ public class GainAbilityAttachedEffect extends ContinuousEffectImpl { private void setText() { StringBuilder sb = new StringBuilder(); - sb.append(attachmentType.verb()); + sb.append(attachmentType.verb().toLowerCase()); sb.append(" " + targetObjectName + " "); if (duration == Duration.WhileOnBattlefield) { sb.append("has ");