diff --git a/Mage.Sets/src/mage/cards/a/AetherFigment.java b/Mage.Sets/src/mage/cards/a/AetherFigment.java index 90847b3dc68..3a3258f5709 100644 --- a/Mage.Sets/src/mage/cards/a/AetherFigment.java +++ b/Mage.Sets/src/mage/cards/a/AetherFigment.java @@ -37,7 +37,7 @@ public final class AetherFigment extends CardImpl { Ability ability = new EntersBattlefieldAbility( new AddCountersSourceEffect(CounterType.P1P1.createInstance(2)), KickedCondition.instance, - "If {this} was kicked, it enters the battlefield with two +1/+1 counters on it", + "If {this} was kicked, it enters the battlefield with two +1/+1 counters on it.", ""); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/b/BalaGedThief.java b/Mage.Sets/src/mage/cards/b/BalaGedThief.java index f27ca9a8548..574025d2f60 100644 --- a/Mage.Sets/src/mage/cards/b/BalaGedThief.java +++ b/Mage.Sets/src/mage/cards/b/BalaGedThief.java @@ -36,7 +36,7 @@ public final class BalaGedThief extends CardImpl { // You choose one of them. That player discards that card. Ability ability = new AllyEntersBattlefieldTriggeredAbility(new DiscardCardYouChooseTargetEffect(TargetController.ANY, xValue), false); ability.addTarget(new TargetPlayer()); - this.addAbility(ability); + this.addAbility(ability.setAbilityWord(null)); } private BalaGedThief(final BalaGedThief card) { diff --git a/Mage.Sets/src/mage/cards/b/BurstLightning.java b/Mage.Sets/src/mage/cards/b/BurstLightning.java index 52c03e02f3f..72f91afae59 100644 --- a/Mage.Sets/src/mage/cards/b/BurstLightning.java +++ b/Mage.Sets/src/mage/cards/b/BurstLightning.java @@ -26,7 +26,7 @@ public final class BurstLightning extends CardImpl { // Burst Lightning deals 2 damage to any target. If Burst Lightning was kicked, it deals 4 damage to that creature or player instead. this.getSpellAbility().addTarget(new TargetAnyTarget()); this.getSpellAbility().addEffect(new ConditionalOneShotEffect(new DamageTargetEffect(4), - new DamageTargetEffect(2), KickedCondition.instance, "{this} deals 2 damage to any target. If this spell was kicked, it deals 4 damage to that permanent or player instead")); + new DamageTargetEffect(2), KickedCondition.instance, "{this} deals 2 damage to any target. If this spell was kicked, it deals 4 damage instead")); } private BurstLightning(final BurstLightning card) { diff --git a/Mage.Sets/src/mage/cards/g/GrimDiscovery.java b/Mage.Sets/src/mage/cards/g/GrimDiscovery.java index f3a2515eabc..b9a5dfc4d96 100644 --- a/Mage.Sets/src/mage/cards/g/GrimDiscovery.java +++ b/Mage.Sets/src/mage/cards/g/GrimDiscovery.java @@ -1,7 +1,7 @@ package mage.cards.g; import mage.abilities.Mode; -import mage.abilities.effects.common.ReturnToHandTargetEffect; +import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; @@ -24,14 +24,15 @@ public final class GrimDiscovery extends CardImpl { // Choose one or both - this.getSpellAbility().getModes().setMinModes(1); this.getSpellAbility().getModes().setMaxModes(2); + // Return target creature card from your graveyard to your hand; - this.getSpellAbility().addEffect(new ReturnToHandTargetEffect()); + this.getSpellAbility().addEffect(new ReturnFromGraveyardToHandTargetEffect()); this.getSpellAbility().addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_CREATURE_YOUR_GRAVEYARD).withChooseHint("return to hand")); + // and/or return target land card from your graveyard to your hand. - Mode mode1 = new Mode(); - mode1.addEffect(new ReturnToHandTargetEffect()); - mode1.addTarget(new TargetCardInYourGraveyard(filterLandCard).withChooseHint("return to hand")); - this.getSpellAbility().addMode(mode1); + Mode mode = new Mode(new ReturnFromGraveyardToHandTargetEffect()); + mode.addTarget(new TargetCardInYourGraveyard(filterLandCard).withChooseHint("return to hand")); + this.getSpellAbility().addMode(mode); } private GrimDiscovery(final GrimDiscovery card) { diff --git a/Mage.Sets/src/mage/cards/h/HagraDiabolist.java b/Mage.Sets/src/mage/cards/h/HagraDiabolist.java index d05f888b206..b5e5e9c9191 100644 --- a/Mage.Sets/src/mage/cards/h/HagraDiabolist.java +++ b/Mage.Sets/src/mage/cards/h/HagraDiabolist.java @@ -1,7 +1,5 @@ - package mage.cards.h; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.AllyEntersBattlefieldTriggeredAbility; @@ -15,8 +13,9 @@ import mage.constants.TargetController; import mage.filter.common.FilterControlledCreaturePermanent; import mage.target.TargetPlayer; +import java.util.UUID; + /** - * * @author North */ public final class HagraDiabolist extends CardImpl { @@ -29,7 +28,7 @@ public final class HagraDiabolist extends CardImpl { } public HagraDiabolist(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{4}{B}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{B}"); this.subtype.add(SubType.OGRE); this.subtype.add(SubType.SHAMAN); this.subtype.add(SubType.ALLY); @@ -37,9 +36,9 @@ public final class HagraDiabolist extends CardImpl { this.power = new MageInt(3); this.toughness = new MageInt(2); - Ability ability = new AllyEntersBattlefieldTriggeredAbility(new LoseLifeTargetEffect(new PermanentsOnBattlefieldCount(filter)), true); + Ability ability = new AllyEntersBattlefieldTriggeredAbility(new LoseLifeTargetEffect(new PermanentsOnBattlefieldCount(filter)).setText("you may have target player lose life equal to the number of Allies you control"), true); ability.addTarget(new TargetPlayer()); - this.addAbility(ability); + this.addAbility(ability.setAbilityWord(null)); } private HagraDiabolist(final HagraDiabolist card) { diff --git a/Mage.Sets/src/mage/cards/h/HighlandBerserker.java b/Mage.Sets/src/mage/cards/h/HighlandBerserker.java index b535564f1b3..8b857dbbe60 100644 --- a/Mage.Sets/src/mage/cards/h/HighlandBerserker.java +++ b/Mage.Sets/src/mage/cards/h/HighlandBerserker.java @@ -40,7 +40,7 @@ public final class HighlandBerserker extends CardImpl { // Whenever Highland Berserker or another Ally enters the battlefield under your control, you may have Ally creatures you control gain first strike until end of turn. Effect effect = new GainAbilityAllEffect(FirstStrikeAbility.getInstance(), Duration.EndOfTurn, filter); effect.setText("you may have Ally creatures you control gain first strike until end of turn"); - this.addAbility(new AllyEntersBattlefieldTriggeredAbility(effect, true)); + this.addAbility(new AllyEntersBattlefieldTriggeredAbility(effect, true).setAbilityWord(null)); } private HighlandBerserker(final HighlandBerserker card) { diff --git a/Mage.Sets/src/mage/cards/j/JoragaBard.java b/Mage.Sets/src/mage/cards/j/JoragaBard.java index 2dc81eafb22..f71ca1a4715 100644 --- a/Mage.Sets/src/mage/cards/j/JoragaBard.java +++ b/Mage.Sets/src/mage/cards/j/JoragaBard.java @@ -37,7 +37,9 @@ public final class JoragaBard extends CardImpl { this.power = new MageInt(1); this.toughness = new MageInt(4); - this.addAbility(new AllyEntersBattlefieldTriggeredAbility(new GainAbilityAllEffect(VigilanceAbility.getInstance(), Duration.EndOfTurn, filter), true)); + this.addAbility(new AllyEntersBattlefieldTriggeredAbility(new GainAbilityAllEffect( + VigilanceAbility.getInstance(), Duration.EndOfTurn, filter + ).setText("you may have Ally creatures you control gain vigilance until end of turn"), true).setAbilityWord(null)); } private JoragaBard(final JoragaBard card) { diff --git a/Mage.Sets/src/mage/cards/k/KabiraEvangel.java b/Mage.Sets/src/mage/cards/k/KabiraEvangel.java index d0ad7a9d2e2..549022a84a4 100644 --- a/Mage.Sets/src/mage/cards/k/KabiraEvangel.java +++ b/Mage.Sets/src/mage/cards/k/KabiraEvangel.java @@ -35,7 +35,7 @@ public final class KabiraEvangel extends CardImpl { .setText("choose a color. If you do, Allies you control gain protection " + "from the chosen color until end of turn."), true - )); + ).setAbilityWord(null)); } private KabiraEvangel(final KabiraEvangel card) { diff --git a/Mage.Sets/src/mage/cards/k/KazanduBlademaster.java b/Mage.Sets/src/mage/cards/k/KazanduBlademaster.java index 3d835c30bd6..fb63020efc6 100644 --- a/Mage.Sets/src/mage/cards/k/KazanduBlademaster.java +++ b/Mage.Sets/src/mage/cards/k/KazanduBlademaster.java @@ -30,7 +30,7 @@ public final class KazanduBlademaster extends CardImpl { this.addAbility(FirstStrikeAbility.getInstance()); this.addAbility(VigilanceAbility.getInstance()); - this.addAbility(new AllyEntersBattlefieldTriggeredAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance()), true)); + this.addAbility(new AllyEntersBattlefieldTriggeredAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance()), true).setAbilityWord(null)); } private KazanduBlademaster(final KazanduBlademaster card) { diff --git a/Mage.Sets/src/mage/cards/k/KazuulWarlord.java b/Mage.Sets/src/mage/cards/k/KazuulWarlord.java index b54d5cb093c..ba0084be938 100644 --- a/Mage.Sets/src/mage/cards/k/KazuulWarlord.java +++ b/Mage.Sets/src/mage/cards/k/KazuulWarlord.java @@ -19,7 +19,7 @@ import mage.filter.common.FilterCreaturePermanent; */ public final class KazuulWarlord extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Ally creatures you control"); + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Ally creature you control"); static { filter.add(SubType.ALLY.getPredicate()); @@ -35,7 +35,7 @@ public final class KazuulWarlord extends CardImpl { this.power = new MageInt(3); this.toughness = new MageInt(3); - this.addAbility(new AllyEntersBattlefieldTriggeredAbility(new AddCountersAllEffect(CounterType.P1P1.createInstance(), filter), true)); + this.addAbility(new AllyEntersBattlefieldTriggeredAbility(new AddCountersAllEffect(CounterType.P1P1.createInstance(), filter), true).setAbilityWord(null)); } private KazuulWarlord(final KazuulWarlord card) { diff --git a/Mage.Sets/src/mage/cards/k/KorHookmaster.java b/Mage.Sets/src/mage/cards/k/KorHookmaster.java index 91b330cfa5d..64e80a529d4 100644 --- a/Mage.Sets/src/mage/cards/k/KorHookmaster.java +++ b/Mage.Sets/src/mage/cards/k/KorHookmaster.java @@ -30,7 +30,7 @@ public final class KorHookmaster extends CardImpl { // When Kor Hookmaster enters the battlefield, tap target creature an opponent controls. // That creature doesn't untap during its controller's next untap step. EntersBattlefieldTriggeredAbility ability = new EntersBattlefieldTriggeredAbility(new TapTargetEffect()); - ability.addEffect(new DontUntapInControllersNextUntapStepTargetEffect()); + ability.addEffect(new DontUntapInControllersNextUntapStepTargetEffect("that creature")); ability.addTarget(new TargetCreaturePermanent(StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURE)); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/m/MagosiTheWaterveil.java b/Mage.Sets/src/mage/cards/m/MagosiTheWaterveil.java index f987cad643a..6f121fc9236 100644 --- a/Mage.Sets/src/mage/cards/m/MagosiTheWaterveil.java +++ b/Mage.Sets/src/mage/cards/m/MagosiTheWaterveil.java @@ -1,10 +1,9 @@ - package mage.cards.m; -import java.util.UUID; import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldTappedAbility; import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.CompositeCost; import mage.abilities.costs.common.RemoveCountersSourceCost; import mage.abilities.costs.common.ReturnToHandFromBattlefieldSourceCost; import mage.abilities.costs.common.TapSourceCost; @@ -16,17 +15,17 @@ import mage.abilities.mana.BlueManaAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.constants.Zone; import mage.counters.CounterType; +import java.util.UUID; + /** - * * @author jeffwadsworth */ public final class MagosiTheWaterveil extends CardImpl { public MagosiTheWaterveil(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.LAND},""); + super(ownerId, setInfo, new CardType[]{CardType.LAND}, ""); // Magosi, the Waterveil enters the battlefield tapped. this.addAbility(new EntersBattlefieldTappedAbility()); @@ -35,17 +34,21 @@ public final class MagosiTheWaterveil extends CardImpl { this.addAbility(new BlueManaAbility()); // {U}, {T}: Put an eon counter on Magosi, the Waterveil. Skip your next turn. - Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new AddCountersSourceEffect(CounterType.EON.createInstance()), new ManaCostsImpl("{U}")); - ability.addEffect(new SkipNextTurnSourceEffect()); + Ability ability = new SimpleActivatedAbility( + new AddCountersSourceEffect(CounterType.EON.createInstance()), new ManaCostsImpl<>("{U}") + ); + ability.addEffect(new SkipNextTurnSourceEffect().setText("skip your next turn")); ability.addCost(new TapSourceCost()); this.addAbility(ability); // {T}, Remove an eon counter from Magosi, the Waterveil and return it to its owner's hand: Take an extra turn after this one. - Ability ability2 = new SimpleActivatedAbility(Zone.BATTLEFIELD, new AddExtraTurnControllerEffect(), new TapSourceCost()); - ability2.addCost(new RemoveCountersSourceCost(CounterType.EON.createInstance())); - ability2.addCost(new ReturnToHandFromBattlefieldSourceCost()); + Ability ability2 = new SimpleActivatedAbility(new AddExtraTurnControllerEffect(), new TapSourceCost()); + ability2.addCost(new CompositeCost( + new RemoveCountersSourceCost(CounterType.EON.createInstance()), + new ReturnToHandFromBattlefieldSourceCost(), + "remove an eon counter from {this} and return it to its owner's hand" + )); this.addAbility(ability2); - } private MagosiTheWaterveil(final MagosiTheWaterveil card) { diff --git a/Mage.Sets/src/mage/cards/m/MakindiShieldmate.java b/Mage.Sets/src/mage/cards/m/MakindiShieldmate.java index c2014f5be7c..6ab3df8597b 100644 --- a/Mage.Sets/src/mage/cards/m/MakindiShieldmate.java +++ b/Mage.Sets/src/mage/cards/m/MakindiShieldmate.java @@ -29,7 +29,7 @@ public final class MakindiShieldmate extends CardImpl { this.addAbility(DefenderAbility.getInstance()); - this.addAbility(new AllyEntersBattlefieldTriggeredAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance()), true)); + this.addAbility(new AllyEntersBattlefieldTriggeredAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance()), true).setAbilityWord(null)); } private MakindiShieldmate(final MakindiShieldmate card) { diff --git a/Mage.Sets/src/mage/cards/m/MerfolkWayfinder.java b/Mage.Sets/src/mage/cards/m/MerfolkWayfinder.java index 2d88c82aa58..d0d36179d2d 100644 --- a/Mage.Sets/src/mage/cards/m/MerfolkWayfinder.java +++ b/Mage.Sets/src/mage/cards/m/MerfolkWayfinder.java @@ -19,7 +19,7 @@ import mage.filter.FilterCard; */ public final class MerfolkWayfinder extends CardImpl { - private static final FilterCard filter = new FilterCard("all Island cards"); + private static final FilterCard filter = new FilterCard("Island cards"); static { filter.add(SubType.ISLAND.getPredicate()); diff --git a/Mage.Sets/src/mage/cards/m/MireBlight.java b/Mage.Sets/src/mage/cards/m/MireBlight.java index 3cf62b90219..3e675f06565 100644 --- a/Mage.Sets/src/mage/cards/m/MireBlight.java +++ b/Mage.Sets/src/mage/cards/m/MireBlight.java @@ -33,7 +33,7 @@ public final class MireBlight extends CardImpl { Ability ability = new EnchantAbility(auraTarget.getTargetName()); this.addAbility(ability); // When enchanted creature is dealt damage, destroy it. - this.addAbility(new DealtDamageAttachedTriggeredAbility(new DestroyAttachedToEffect("it"), false)); + this.addAbility(new DealtDamageAttachedTriggeredAbility(new DestroyAttachedToEffect("it"), false).setTriggerPhrase("When enchanted creature is dealt damage, ")); } private MireBlight(final MireBlight card) { diff --git a/Mage.Sets/src/mage/cards/m/MurasaPyromancer.java b/Mage.Sets/src/mage/cards/m/MurasaPyromancer.java index 2ab4b2bfa81..953c54f6b3e 100644 --- a/Mage.Sets/src/mage/cards/m/MurasaPyromancer.java +++ b/Mage.Sets/src/mage/cards/m/MurasaPyromancer.java @@ -39,7 +39,7 @@ public final class MurasaPyromancer extends CardImpl { Ability ability = new AllyEntersBattlefieldTriggeredAbility(new DamageTargetEffect(new PermanentsOnBattlefieldCount(filter)), true); ability.addTarget(new TargetCreaturePermanent()); - this.addAbility(ability); + this.addAbility(ability.setAbilityWord(null)); } diff --git a/Mage.Sets/src/mage/cards/n/NeedlebiteTrap.java b/Mage.Sets/src/mage/cards/n/NeedlebiteTrap.java index 5c52c0502f4..35a7a7b5bd5 100644 --- a/Mage.Sets/src/mage/cards/n/NeedlebiteTrap.java +++ b/Mage.Sets/src/mage/cards/n/NeedlebiteTrap.java @@ -31,7 +31,7 @@ public final class NeedlebiteTrap extends CardImpl { // Target player loses 5 life and you gain 5 life. this.getSpellAbility().addEffect(new LoseLifeTargetEffect(5)); - this.getSpellAbility().addEffect(new GainLifeEffect(5)); + this.getSpellAbility().addEffect(new GainLifeEffect(5).concatBy("and")); this.getSpellAbility().addTarget(new TargetPlayer()); } diff --git a/Mage.Sets/src/mage/cards/n/NimanaSellSword.java b/Mage.Sets/src/mage/cards/n/NimanaSellSword.java index 0b007bce435..52864bec84c 100644 --- a/Mage.Sets/src/mage/cards/n/NimanaSellSword.java +++ b/Mage.Sets/src/mage/cards/n/NimanaSellSword.java @@ -26,7 +26,7 @@ public final class NimanaSellSword extends CardImpl { this.power = new MageInt(2); this.toughness = new MageInt(2); - this.addAbility(new AllyEntersBattlefieldTriggeredAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance()), true)); + this.addAbility(new AllyEntersBattlefieldTriggeredAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance()), true).setAbilityWord(null)); } private NimanaSellSword(final NimanaSellSword card) { diff --git a/Mage.Sets/src/mage/cards/n/NimbusWings.java b/Mage.Sets/src/mage/cards/n/NimbusWings.java index 39af8670ec3..7dfbee6d766 100644 --- a/Mage.Sets/src/mage/cards/n/NimbusWings.java +++ b/Mage.Sets/src/mage/cards/n/NimbusWings.java @@ -38,7 +38,7 @@ public final class NimbusWings extends CardImpl { this.addAbility(new EnchantAbility(auraTarget.getTargetName())); // Enchanted creature gets +1/+2 and has flying. SimpleStaticAbility ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEnchantedEffect(1, 2, Duration.WhileOnBattlefield)); - ability.addEffect(new GainAbilityAttachedEffect(FlyingAbility.getInstance(), AttachmentType.AURA)); + ability.addEffect(new GainAbilityAttachedEffect(FlyingAbility.getInstance(), AttachmentType.AURA).setText("and has flying")); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/o/ObNixilisTheFallen.java b/Mage.Sets/src/mage/cards/o/ObNixilisTheFallen.java index 3a68864fa39..90e5af83b5e 100644 --- a/Mage.Sets/src/mage/cards/o/ObNixilisTheFallen.java +++ b/Mage.Sets/src/mage/cards/o/ObNixilisTheFallen.java @@ -31,7 +31,7 @@ public final class ObNixilisTheFallen extends CardImpl { // Landfall - Whenever a land enters the battlefield under your control, you may have target player lose 3 life. // If you do, put three +1/+1 counters on Ob Nixilis, the Fallen. - Ability ability = new LandfallAbility(new LoseLifeTargetEffect(3), true); + Ability ability = new LandfallAbility(new LoseLifeTargetEffect(3).setText("target player lose 3 life"), true); ability.addEffect(new AddCountersSourceEffect(CounterType.P1P1.createInstance(3)).concatBy("If you do,")); ability.addTarget(new TargetPlayer()); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/cards/o/OnduCleric.java b/Mage.Sets/src/mage/cards/o/OnduCleric.java index 76d9878aff1..9c0069c83d7 100644 --- a/Mage.Sets/src/mage/cards/o/OnduCleric.java +++ b/Mage.Sets/src/mage/cards/o/OnduCleric.java @@ -35,7 +35,7 @@ public final class OnduCleric extends CardImpl { this.power = new MageInt(1); this.toughness = new MageInt(1); - this.addAbility(new AllyEntersBattlefieldTriggeredAbility(new GainLifeEffect(new PermanentsOnBattlefieldCount(filter)), true)); + this.addAbility(new AllyEntersBattlefieldTriggeredAbility(new GainLifeEffect(new PermanentsOnBattlefieldCount(filter)), true).setAbilityWord(null)); } private OnduCleric(final OnduCleric card) { diff --git a/Mage.Sets/src/mage/cards/o/OranRiefSurvivalist.java b/Mage.Sets/src/mage/cards/o/OranRiefSurvivalist.java index 3cf336dfe83..4ca05bfee6b 100644 --- a/Mage.Sets/src/mage/cards/o/OranRiefSurvivalist.java +++ b/Mage.Sets/src/mage/cards/o/OranRiefSurvivalist.java @@ -26,7 +26,7 @@ public final class OranRiefSurvivalist extends CardImpl { this.power = new MageInt(1); this.toughness = new MageInt(1); - this.addAbility(new AllyEntersBattlefieldTriggeredAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance()), true)); + this.addAbility(new AllyEntersBattlefieldTriggeredAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance()), true).setAbilityWord(null)); } private OranRiefSurvivalist(final OranRiefSurvivalist card) { diff --git a/Mage.Sets/src/mage/cards/p/PunishingFire.java b/Mage.Sets/src/mage/cards/p/PunishingFire.java index c1b023c93e6..6244ded3109 100644 --- a/Mage.Sets/src/mage/cards/p/PunishingFire.java +++ b/Mage.Sets/src/mage/cards/p/PunishingFire.java @@ -1,34 +1,32 @@ - package mage.cards.p; -import java.util.UUID; import mage.abilities.TriggeredAbilityImpl; import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.effects.common.DamageTargetEffect; import mage.abilities.effects.common.DoIfCostPaid; -import mage.abilities.effects.common.ReturnToHandSourceEffect; +import mage.abilities.effects.common.ReturnSourceFromGraveyardToHandEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Zone; import mage.game.Game; import mage.game.events.GameEvent; -import mage.game.events.GameEvent.EventType; import mage.target.common.TargetAnyTarget; +import java.util.UUID; + /** - * * @author North */ public final class PunishingFire extends CardImpl { public PunishingFire(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{1}{R}"); - + super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{1}{R}"); // Punishing Fire deals 2 damage to any target. this.getSpellAbility().addEffect(new DamageTargetEffect(2)); this.getSpellAbility().addTarget(new TargetAnyTarget()); + // Whenever an opponent gains life, you may pay {R}. If you do, return Punishing Fire from your graveyard to your hand. this.addAbility(new PunishingFireTriggeredAbility()); } @@ -46,7 +44,7 @@ public final class PunishingFire extends CardImpl { class PunishingFireTriggeredAbility extends TriggeredAbilityImpl { public PunishingFireTriggeredAbility() { - super(Zone.GRAVEYARD, new DoIfCostPaid(new ReturnToHandSourceEffect(), new ManaCostsImpl("{R}"))); + super(Zone.GRAVEYARD, new DoIfCostPaid(new ReturnSourceFromGraveyardToHandEffect(), new ManaCostsImpl<>("{R}"))); } public PunishingFireTriggeredAbility(final PunishingFireTriggeredAbility ability) { @@ -70,6 +68,6 @@ class PunishingFireTriggeredAbility extends TriggeredAbilityImpl { @Override public String getTriggerPhrase() { - return "Whenever an opponent gains life, " ; + return "Whenever an opponent gains life, "; } } diff --git a/Mage.Sets/src/mage/cards/q/QuestForTheGemblades.java b/Mage.Sets/src/mage/cards/q/QuestForTheGemblades.java index af8c4671382..17f588f0306 100644 --- a/Mage.Sets/src/mage/cards/q/QuestForTheGemblades.java +++ b/Mage.Sets/src/mage/cards/q/QuestForTheGemblades.java @@ -28,7 +28,7 @@ public final class QuestForTheGemblades extends CardImpl { // Whenever a creature you control deals combat damage to a creature, you may put a quest counter on Quest for the Gemblades. this.addAbility(new DealsDamageToACreatureAllTriggeredAbility( - new AddCountersSourceEffect(CounterType.QUEST.createInstance()), false, + new AddCountersSourceEffect(CounterType.QUEST.createInstance()), true, StaticFilters.FILTER_CONTROLLED_A_CREATURE, SetTargetPointer.PERMANENT, true )); diff --git a/Mage.Sets/src/mage/cards/s/SavageSilhouette.java b/Mage.Sets/src/mage/cards/s/SavageSilhouette.java index 10fefc893cb..a46ce3a4167 100644 --- a/Mage.Sets/src/mage/cards/s/SavageSilhouette.java +++ b/Mage.Sets/src/mage/cards/s/SavageSilhouette.java @@ -1,7 +1,5 @@ - package mage.cards.s; -import java.util.UUID; import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SimpleStaticAbility; @@ -13,36 +11,35 @@ import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect; import mage.abilities.keyword.EnchantAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; -import mage.constants.AttachmentType; -import mage.constants.CardType; -import mage.constants.SubType; -import mage.constants.Duration; -import mage.constants.Outcome; -import mage.constants.Zone; +import mage.constants.*; import mage.target.TargetPermanent; import mage.target.common.TargetCreaturePermanent; +import java.util.UUID; + /** - * * @author North */ public final class SavageSilhouette extends CardImpl { public SavageSilhouette(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{2}{G}"); + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{2}{G}"); this.subtype.add(SubType.AURA); - // Enchant creature TargetPermanent auraTarget = new TargetCreaturePermanent(); this.getSpellAbility().addTarget(auraTarget); this.getSpellAbility().addEffect(new AttachEffect(Outcome.BoostCreature)); - Ability ability = new EnchantAbility(auraTarget.getTargetName()); - this.addAbility(ability); + this.addAbility(new EnchantAbility(auraTarget.getTargetName())); + // Enchanted creature gets +2/+2 and has "{1}{G}: Regenerate this creature." - ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new RegenerateSourceEffect(), new ManaCostsImpl("{1}{G}")); - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEnchantedEffect(2, 2, Duration.WhileOnBattlefield))); - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAttachedEffect(ability, AttachmentType.AURA))); + Ability ability = new SimpleStaticAbility(new BoostEnchantedEffect( + 2, 2, Duration.WhileOnBattlefield + )); + ability.addEffect(new GainAbilityAttachedEffect(new SimpleActivatedAbility( + new RegenerateSourceEffect(), new ManaCostsImpl<>("{1}{G}") + ), AttachmentType.AURA).setText("and has \"{1}{G}: Regenerate this creature.\"")); + this.addAbility(ability); } private SavageSilhouette(final SavageSilhouette card) { diff --git a/Mage.Sets/src/mage/cards/s/ScytheTiger.java b/Mage.Sets/src/mage/cards/s/ScytheTiger.java index 5e37e5abfff..5162eb79804 100644 --- a/Mage.Sets/src/mage/cards/s/ScytheTiger.java +++ b/Mage.Sets/src/mage/cards/s/ScytheTiger.java @@ -31,7 +31,7 @@ public final class ScytheTiger extends CardImpl { this.addAbility(ShroudAbility.getInstance()); // When Scythe Tiger enters the battlefield, sacrifice it unless you sacrifice a land. - this.addAbility(new EntersBattlefieldTriggeredAbility(new SacrificeSourceUnlessPaysEffect(new SacrificeTargetCost(new TargetControlledPermanent(StaticFilters.FILTER_CONTROLLED_LAND_SHORT_TEXT))))); + this.addAbility(new EntersBattlefieldTriggeredAbility(new SacrificeSourceUnlessPaysEffect(new SacrificeTargetCost(new TargetControlledPermanent(StaticFilters.FILTER_CONTROLLED_LAND_SHORT_TEXT))).setText("sacrifice it unless you sacrifice a land"))); } private ScytheTiger(final ScytheTiger card) { diff --git a/Mage.Sets/src/mage/cards/s/SeascapeAerialist.java b/Mage.Sets/src/mage/cards/s/SeascapeAerialist.java index 04d886b4824..4b884ce90d3 100644 --- a/Mage.Sets/src/mage/cards/s/SeascapeAerialist.java +++ b/Mage.Sets/src/mage/cards/s/SeascapeAerialist.java @@ -36,7 +36,7 @@ public final class SeascapeAerialist extends CardImpl { this.power = new MageInt(2); this.toughness = new MageInt(3); - this.addAbility(new AllyEntersBattlefieldTriggeredAbility(new GainAbilityAllEffect(FlyingAbility.getInstance(), Duration.EndOfTurn, filter), true)); + this.addAbility(new AllyEntersBattlefieldTriggeredAbility(new GainAbilityAllEffect(FlyingAbility.getInstance(), Duration.EndOfTurn, filter).setText("you may have Ally creatures you control gain flying until end of turn"), true).setAbilityWord(null)); } private SeascapeAerialist(final SeascapeAerialist card) { diff --git a/Mage.Sets/src/mage/cards/s/SorinMarkov.java b/Mage.Sets/src/mage/cards/s/SorinMarkov.java index 55141a923f6..4ca04ea6b31 100644 --- a/Mage.Sets/src/mage/cards/s/SorinMarkov.java +++ b/Mage.Sets/src/mage/cards/s/SorinMarkov.java @@ -35,7 +35,7 @@ public final class SorinMarkov extends CardImpl { // +2: Sorin Markov deals 2 damage to any target and you gain 2 life. LoyaltyAbility ability1 = new LoyaltyAbility(new DamageTargetEffect(2), 2); - ability1.addEffect(new GainLifeEffect(2)); + ability1.addEffect(new GainLifeEffect(2).concatBy("and")); ability1.addTarget(new TargetAnyTarget()); this.addAbility(ability1); diff --git a/Mage.Sets/src/mage/cards/s/SoulStairExpedition.java b/Mage.Sets/src/mage/cards/s/SoulStairExpedition.java index 8f03fab0226..a6be5ffaa24 100644 --- a/Mage.Sets/src/mage/cards/s/SoulStairExpedition.java +++ b/Mage.Sets/src/mage/cards/s/SoulStairExpedition.java @@ -6,7 +6,7 @@ import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.CompositeCost; import mage.abilities.costs.common.RemoveCountersSourceCost; import mage.abilities.costs.common.SacrificeSourceCost; -import mage.abilities.effects.common.ReturnToHandTargetEffect; +import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect; import mage.abilities.effects.common.counter.AddCountersSourceEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; @@ -30,7 +30,7 @@ public final class SoulStairExpedition extends CardImpl { // Remove three quest counters from Soul Stair Expedition and sacrifice it: Return up to two target creature cards from your graveyard to your hand. Ability ability = new SimpleActivatedAbility( - new ReturnToHandTargetEffect(), + new ReturnFromGraveyardToHandTargetEffect(), new CompositeCost( new RemoveCountersSourceCost(CounterType.QUEST.createInstance(3)), new SacrificeSourceCost(), diff --git a/Mage.Sets/src/mage/cards/s/SpidersilkNet.java b/Mage.Sets/src/mage/cards/s/SpidersilkNet.java index 1e528d381c8..d37634d9743 100644 --- a/Mage.Sets/src/mage/cards/s/SpidersilkNet.java +++ b/Mage.Sets/src/mage/cards/s/SpidersilkNet.java @@ -1,7 +1,6 @@ - package mage.cards.s; -import java.util.UUID; +import mage.abilities.Ability; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.costs.mana.GenericManaCost; import mage.abilities.effects.common.continuous.BoostEquippedEffect; @@ -12,22 +11,26 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.AttachmentType; import mage.constants.CardType; -import mage.constants.SubType; import mage.constants.Outcome; -import mage.constants.Zone; +import mage.constants.SubType; + +import java.util.UUID; /** - * * @author North */ public final class SpidersilkNet extends CardImpl { public SpidersilkNet(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT},"{0}"); + super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{0}"); this.subtype.add(SubType.EQUIPMENT); - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEquippedEffect(0, 2))); - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAttachedEffect(ReachAbility.getInstance(), AttachmentType.EQUIPMENT))); + Ability ability = new SimpleStaticAbility(new BoostEquippedEffect(0, 2)); + ability.addEffect(new GainAbilityAttachedEffect( + ReachAbility.getInstance(), AttachmentType.EQUIPMENT + ).setText("and has reach")); + this.addAbility(ability); + this.addAbility(new EquipAbility(Outcome.BoostCreature, new GenericManaCost(2))); } diff --git a/Mage.Sets/src/mage/cards/t/TajuruArcher.java b/Mage.Sets/src/mage/cards/t/TajuruArcher.java index 513c5922915..ac1d5cffa70 100644 --- a/Mage.Sets/src/mage/cards/t/TajuruArcher.java +++ b/Mage.Sets/src/mage/cards/t/TajuruArcher.java @@ -42,7 +42,7 @@ public final class TajuruArcher extends CardImpl { this.toughness = new MageInt(2); Ability ability = new AllyEntersBattlefieldTriggeredAbility(new DamageTargetEffect(new PermanentsOnBattlefieldCount(filter)), true); ability.addTarget(new TargetCreaturePermanent(filterTarget)); - this.addAbility(ability); + this.addAbility(ability.setAbilityWord(null)); } private TajuruArcher(final TajuruArcher card) { diff --git a/Mage.Sets/src/mage/cards/t/TimbermawLarva.java b/Mage.Sets/src/mage/cards/t/TimbermawLarva.java index 4fe5da1980c..a84e15e87fb 100644 --- a/Mage.Sets/src/mage/cards/t/TimbermawLarva.java +++ b/Mage.Sets/src/mage/cards/t/TimbermawLarva.java @@ -1,9 +1,8 @@ - package mage.cards.t; -import java.util.UUID; import mage.MageInt; import mage.abilities.common.AttacksTriggeredAbility; +import mage.abilities.dynamicvalue.DynamicValue; import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount; import mage.abilities.effects.common.continuous.BoostSourceEffect; import mage.cards.CardImpl; @@ -14,8 +13,9 @@ import mage.constants.SubType; import mage.constants.TargetController; import mage.filter.common.FilterLandPermanent; +import java.util.UUID; + /** - * * @author North */ public final class TimbermawLarva extends CardImpl { @@ -28,15 +28,18 @@ public final class TimbermawLarva extends CardImpl { } + private static final DynamicValue xValue = new PermanentsOnBattlefieldCount(filter); + public TimbermawLarva(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{G}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{G}"); this.subtype.add(SubType.BEAST); this.power = new MageInt(2); this.toughness = new MageInt(2); - PermanentsOnBattlefieldCount value = new PermanentsOnBattlefieldCount(filter); - this.addAbility(new AttacksTriggeredAbility(new BoostSourceEffect(value, value, Duration.EndOfTurn), false)); + this.addAbility(new AttacksTriggeredAbility(new BoostSourceEffect( + xValue, xValue, Duration.EndOfTurn, true, "it" + ), false)); } private TimbermawLarva(final TimbermawLarva card) { diff --git a/Mage.Sets/src/mage/cards/t/TuktukGrunts.java b/Mage.Sets/src/mage/cards/t/TuktukGrunts.java index 3239838260a..78ef44cd83c 100644 --- a/Mage.Sets/src/mage/cards/t/TuktukGrunts.java +++ b/Mage.Sets/src/mage/cards/t/TuktukGrunts.java @@ -28,7 +28,7 @@ public final class TuktukGrunts extends CardImpl { this.toughness = new MageInt(2); this.addAbility(HasteAbility.getInstance()); - this.addAbility(new AllyEntersBattlefieldTriggeredAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance()), true)); + this.addAbility(new AllyEntersBattlefieldTriggeredAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance()), true).setAbilityWord(null)); } private TuktukGrunts(final TuktukGrunts card) { diff --git a/Mage.Sets/src/mage/cards/t/TurntimberRanger.java b/Mage.Sets/src/mage/cards/t/TurntimberRanger.java index 622a344af61..2f40c219c62 100644 --- a/Mage.Sets/src/mage/cards/t/TurntimberRanger.java +++ b/Mage.Sets/src/mage/cards/t/TurntimberRanger.java @@ -32,8 +32,8 @@ public final class TurntimberRanger extends CardImpl { // Whenever Turntimber Ranger or another Ally enters the battlefield under your control, you may create a 2/2 green Wolf creature token. If you do, put a +1/+1 counter on Turntimber Ranger. Ability ability = new AllyEntersBattlefieldTriggeredAbility(new CreateTokenEffect(new WolfToken()), true); - ability.addEffect(new AddCountersSourceEffect(CounterType.P1P1.createInstance())); - this.addAbility(ability); + ability.addEffect(new AddCountersSourceEffect(CounterType.P1P1.createInstance()).concatBy("If you do,")); + this.addAbility(ability.setAbilityWord(null)); } private TurntimberRanger(final TurntimberRanger card) { diff --git a/Mage.Sets/src/mage/cards/u/UmaraRaptor.java b/Mage.Sets/src/mage/cards/u/UmaraRaptor.java index d32c1db9d07..69863738cb1 100644 --- a/Mage.Sets/src/mage/cards/u/UmaraRaptor.java +++ b/Mage.Sets/src/mage/cards/u/UmaraRaptor.java @@ -27,7 +27,7 @@ public final class UmaraRaptor extends CardImpl { this.toughness = new MageInt(1); this.addAbility(FlyingAbility.getInstance()); - this.addAbility(new AllyEntersBattlefieldTriggeredAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance()), true)); + this.addAbility(new AllyEntersBattlefieldTriggeredAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance()), true).setAbilityWord(null)); } private UmaraRaptor(final UmaraRaptor card) { diff --git a/Mage.Sets/src/mage/cards/w/WindborneCharge.java b/Mage.Sets/src/mage/cards/w/WindborneCharge.java index 4ac01482626..7e732d461be 100644 --- a/Mage.Sets/src/mage/cards/w/WindborneCharge.java +++ b/Mage.Sets/src/mage/cards/w/WindborneCharge.java @@ -1,7 +1,5 @@ - package mage.cards.w; -import java.util.UUID; import mage.abilities.effects.common.continuous.BoostTargetEffect; import mage.abilities.effects.common.continuous.GainAbilityTargetEffect; import mage.abilities.keyword.FlyingAbility; @@ -11,20 +9,24 @@ import mage.constants.CardType; import mage.constants.Duration; import mage.target.common.TargetControlledCreaturePermanent; +import java.util.UUID; + /** - * * @author North */ public final class WindborneCharge extends CardImpl { public WindborneCharge(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{2}{W}{W}"); - + super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{2}{W}{W}"); // Two target creatures you control each get +2/+2 and gain flying until end of turn. + this.getSpellAbility().addEffect(new BoostTargetEffect( + 2, 2, Duration.EndOfTurn + ).setText("two target creatures you control each get +2/+2")); + this.getSpellAbility().addEffect(new GainAbilityTargetEffect( + FlyingAbility.getInstance(), Duration.EndOfTurn + ).setText("and gain flying until end of turn")); this.getSpellAbility().addTarget(new TargetControlledCreaturePermanent(2)); - this.getSpellAbility().addEffect(new BoostTargetEffect(2, 2, Duration.EndOfTurn)); - this.getSpellAbility().addEffect(new GainAbilityTargetEffect(FlyingAbility.getInstance(), Duration.EndOfTurn)); } private WindborneCharge(final WindborneCharge card) { diff --git a/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java b/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java index 21a22c75434..203744ef2c2 100644 --- a/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java +++ b/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java @@ -62,7 +62,7 @@ public class VerifyCardDataTest { private static final Logger logger = Logger.getLogger(VerifyCardDataTest.class); - private static final String FULL_ABILITIES_CHECK_SET_CODE = "MOR"; // check all abilities and output cards with wrong abilities texts; + private static final String FULL_ABILITIES_CHECK_SET_CODE = "ZEN"; // check all abilities and output cards with wrong abilities texts; private static final boolean AUTO_FIX_SAMPLE_DECKS = false; // debug only: auto-fix sample decks by test_checkSampleDecks test run private static final boolean ONLY_TEXT = false; // use when checking text locally, suppresses unnecessary checks and output messages diff --git a/Mage/src/main/java/mage/abilities/TriggeredAbilityImpl.java b/Mage/src/main/java/mage/abilities/TriggeredAbilityImpl.java index 65955445a46..413c84a06e2 100644 --- a/Mage/src/main/java/mage/abilities/TriggeredAbilityImpl.java +++ b/Mage/src/main/java/mage/abilities/TriggeredAbilityImpl.java @@ -160,17 +160,18 @@ public abstract class TriggeredAbilityImpl extends AbilityImpl implements Trigge superRule = newRule.toString(); } } else if (this.getTargets().isEmpty() + || ruleLow.startsWith("attach") + || ruleLow.startsWith("counter") + || ruleLow.startsWith("destroy") + || ruleLow.startsWith("exchange") || ruleLow.startsWith("exile") || ruleLow.startsWith("gain") - || ruleLow.startsWith("destroy") - || ruleLow.startsWith("return") - || ruleLow.startsWith("tap") - || ruleLow.startsWith("untap") + || ruleLow.startsWith("goad") || ruleLow.startsWith("put") || ruleLow.startsWith("remove") - || ruleLow.startsWith("counter") - || ruleLow.startsWith("exchange") - || ruleLow.startsWith("goad")) { + || ruleLow.startsWith("return") + || ruleLow.startsWith("tap") + || ruleLow.startsWith("untap")) { sb.append("you may "); } else if (!ruleLow.startsWith("its controller may")) { sb.append("you may have ");