From 50b3d3d8d9cd095046a8a7a27001c45c056b9341 Mon Sep 17 00:00:00 2001 From: Evan Kranzler Date: Mon, 7 Mar 2022 20:19:20 -0500 Subject: [PATCH] [LRW] various text fixes --- Mage.Sets/src/mage/cards/b/Benthicore.java | 4 +- .../src/mage/cards/b/BoggartBirthRite.java | 11 +- .../src/mage/cards/b/BoggartShenanigans.java | 19 +-- Mage.Sets/src/mage/cards/b/BrionStoutarm.java | 26 ++-- .../src/mage/cards/c/CaterwaulingBoggart.java | 36 +++--- Mage.Sets/src/mage/cards/c/Cloudthresher.java | 2 +- Mage.Sets/src/mage/cards/c/ColfenorsUrn.java | 2 +- Mage.Sets/src/mage/cards/e/EgoErasure.java | 111 ++++++++---------- .../src/mage/cards/e/ElvishHandservant.java | 2 +- .../src/mage/cards/e/EpicProportions.java | 18 +-- Mage.Sets/src/mage/cards/f/FinalRevels.java | 17 +-- .../src/mage/cards/f/FlamekinBladewhirl.java | 2 +- Mage.Sets/src/mage/cards/f/FodderLaunch.java | 2 +- .../src/mage/cards/f/FootbottomFeast.java | 2 +- .../src/mage/cards/f/ForcedFruition.java | 2 +- .../src/mage/cards/g/GiltLeafPalace.java | 2 +- .../src/mage/cards/h/HearthcageGiant.java | 2 +- .../src/mage/cards/i/InnerFlameAcolyte.java | 16 +-- .../src/mage/cards/k/KithkinGreatheart.java | 36 +++--- .../src/mage/cards/k/KnuckleboneWitch.java | 24 ++-- .../src/mage/cards/l/LaceWithMoonglove.java | 2 +- Mage.Sets/src/mage/cards/l/LowlandOaf.java | 2 +- .../src/mage/cards/m/MerrowReejerey.java | 2 +- .../src/mage/cards/m/MoongloveExtract.java | 2 +- Mage.Sets/src/mage/cards/n/NeedleDrop.java | 2 +- .../src/mage/cards/p/ProtectiveBubble.java | 20 ++-- Mage.Sets/src/mage/cards/s/ScionOfOona.java | 2 +- .../src/mage/cards/s/StreambedAquitects.java | 27 ++--- .../src/mage/cards/s/SummonTheSchool.java | 21 ++-- .../src/mage/cards/s/SunriseSovereign.java | 21 ++-- Mage.Sets/src/mage/cards/s/SylvanEchoes.java | 2 +- .../src/mage/cards/t/ThorntoothWitch.java | 2 +- .../src/mage/cards/t/TimberProtector.java | 52 +++++--- .../src/mage/cards/t/TriclopeanSight.java | 33 +++--- .../src/mage/cards/v/VeteranOfTheDepths.java | 16 +-- Mage.Sets/src/mage/cards/v/Vigor.java | 2 +- .../mage/cards/w/WellgabberApothecary.java | 2 +- .../src/mage/cards/w/WingsOfVelisVel.java | 4 +- .../src/mage/cards/w/WortBoggartAuntie.java | 13 +- .../src/mage/cards/w/WrensRunPackmaster.java | 36 +++--- .../java/mage/verify/VerifyCardDataTest.java | 2 +- .../CanBlockAdditionalCreatureEffect.java | 23 ++-- .../combat/CantBeBlockedByOneEffect.java | 33 ++---- 43 files changed, 318 insertions(+), 339 deletions(-) diff --git a/Mage.Sets/src/mage/cards/b/Benthicore.java b/Mage.Sets/src/mage/cards/b/Benthicore.java index 7f9763a704..f4151c1554 100644 --- a/Mage.Sets/src/mage/cards/b/Benthicore.java +++ b/Mage.Sets/src/mage/cards/b/Benthicore.java @@ -45,8 +45,8 @@ public final class Benthicore extends CardImpl { this.addAbility(new EntersBattlefieldTriggeredAbility(new CreateTokenEffect(new MerfolkWizardToken(), 2), false)); // Tap two untapped Merfolk you control: Untap Benthicore. It gains shroud until end of turn. - Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new UntapSourceEffect(), new TapTargetCost(new TargetControlledPermanent(2, 2, filter, false))); - ability.addEffect(new GainAbilitySourceEffect(ShroudAbility.getInstance(), Duration.EndOfTurn)); + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new UntapSourceEffect(), new TapTargetCost(new TargetControlledPermanent(2, filter))); + ability.addEffect(new GainAbilitySourceEffect(ShroudAbility.getInstance(), Duration.EndOfTurn).setText("it gains shroud until end of turn")); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/b/BoggartBirthRite.java b/Mage.Sets/src/mage/cards/b/BoggartBirthRite.java index efd73cd948..a4dfc023ee 100644 --- a/Mage.Sets/src/mage/cards/b/BoggartBirthRite.java +++ b/Mage.Sets/src/mage/cards/b/BoggartBirthRite.java @@ -1,8 +1,6 @@ - package mage.cards.b; -import java.util.UUID; -import mage.abilities.effects.common.ReturnToHandTargetEffect; +import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; @@ -10,8 +8,9 @@ import mage.constants.SubType; import mage.filter.FilterCard; import mage.target.common.TargetCardInYourGraveyard; +import java.util.UUID; + /** - * * @author Loki */ public final class BoggartBirthRite extends CardImpl { @@ -23,10 +22,10 @@ public final class BoggartBirthRite extends CardImpl { } public BoggartBirthRite(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.TRIBAL,CardType.SORCERY},"{B}"); + super(ownerId, setInfo, new CardType[]{CardType.TRIBAL, CardType.SORCERY}, "{B}"); this.subtype.add(SubType.GOBLIN); - this.getSpellAbility().addEffect(new ReturnToHandTargetEffect()); + this.getSpellAbility().addEffect(new ReturnFromGraveyardToHandTargetEffect()); this.getSpellAbility().addTarget(new TargetCardInYourGraveyard(filter)); } diff --git a/Mage.Sets/src/mage/cards/b/BoggartShenanigans.java b/Mage.Sets/src/mage/cards/b/BoggartShenanigans.java index 32ac7a9011..83bf41637b 100644 --- a/Mage.Sets/src/mage/cards/b/BoggartShenanigans.java +++ b/Mage.Sets/src/mage/cards/b/BoggartShenanigans.java @@ -1,7 +1,5 @@ - package mage.cards.b; -import java.util.UUID; import mage.abilities.Ability; import mage.abilities.common.DiesCreatureTriggeredAbility; import mage.abilities.effects.common.DamageTargetEffect; @@ -9,21 +7,22 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; -import mage.constants.TargetController; -import mage.filter.common.FilterCreaturePermanent; +import mage.filter.FilterPermanent; +import mage.filter.common.FilterControlledPermanent; +import mage.filter.predicate.mageobject.AnotherPredicate; import mage.target.common.TargetPlayerOrPlaneswalker; +import java.util.UUID; + /** - * * @author LevelX2 */ public final class BoggartShenanigans extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("another Goblin you control"); + private static final FilterPermanent filter = new FilterControlledPermanent(SubType.GOBLIN); static { - filter.add(TargetController.YOU.getControllerPredicate()); - filter.add(SubType.GOBLIN.getPredicate()); + filter.add(AnotherPredicate.instance); } public BoggartShenanigans(UUID ownerId, CardSetInfo setInfo) { @@ -31,7 +30,9 @@ public final class BoggartShenanigans extends CardImpl { this.subtype.add(SubType.GOBLIN); // Whenever another Goblin you control dies, you may have Boggart Shenanigans deal 1 damage to target player. - Ability ability = new DiesCreatureTriggeredAbility(new DamageTargetEffect(1), true, filter, false); + Ability ability = new DiesCreatureTriggeredAbility( + new DamageTargetEffect(1), true, filter, false + ).setTriggerPhrase("Whenever another Goblin you control is put into a graveyard from the battlefield, "); ability.addTarget(new TargetPlayerOrPlaneswalker()); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/b/BrionStoutarm.java b/Mage.Sets/src/mage/cards/b/BrionStoutarm.java index a0a6865c34..f4ad0f3056 100644 --- a/Mage.Sets/src/mage/cards/b/BrionStoutarm.java +++ b/Mage.Sets/src/mage/cards/b/BrionStoutarm.java @@ -1,7 +1,5 @@ - package mage.cards.b; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; @@ -14,25 +12,22 @@ import mage.abilities.effects.common.DamageTargetEffect; import mage.abilities.keyword.LifelinkAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; -import mage.constants.*; -import mage.filter.common.FilterControlledCreaturePermanent; -import mage.filter.predicate.mageobject.AnotherPredicate; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.SubType; +import mage.constants.SuperType; +import mage.filter.StaticFilters; import mage.game.Game; -import mage.target.common.TargetControlledCreaturePermanent; +import mage.target.common.TargetControlledPermanent; import mage.target.common.TargetPlayerOrPlaneswalker; +import java.util.UUID; + /** - * * @author LevelX2 */ public final class BrionStoutarm extends CardImpl { - private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("creature other than Brion Stoutarm"); - - static { - filter.add(AnotherPredicate.instance); - } - public BrionStoutarm(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{R}{W}"); addSuperType(SuperType.LEGENDARY); @@ -43,10 +38,11 @@ public final class BrionStoutarm extends CardImpl { // Lifelink this.addAbility(LifelinkAbility.getInstance()); + // {R}, {tap}, Sacrifice a creature other than Brion Stoutarm: Brion Stoutarm deals damage equal to the sacrificed creature's power to target player. - Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new BrionStoutarmEffect(), new ManaCostsImpl("{R}")); + Ability ability = new SimpleActivatedAbility(new BrionStoutarmEffect(), new ManaCostsImpl<>("{R}")); ability.addCost(new TapSourceCost()); - ability.addCost(new SacrificeTargetCost(new TargetControlledCreaturePermanent(1, 1, filter, true))); + ability.addCost(new SacrificeTargetCost(new TargetControlledPermanent(StaticFilters.FILTER_CONTROLLED_ANOTHER_CREATURE))); ability.addTarget(new TargetPlayerOrPlaneswalker()); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/c/CaterwaulingBoggart.java b/Mage.Sets/src/mage/cards/c/CaterwaulingBoggart.java index 7e976c7b30..2a32a36744 100644 --- a/Mage.Sets/src/mage/cards/c/CaterwaulingBoggart.java +++ b/Mage.Sets/src/mage/cards/c/CaterwaulingBoggart.java @@ -1,53 +1,45 @@ - package mage.cards.c; -import java.util.UUID; import mage.MageInt; import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.effects.common.continuous.GainAbilityAllEffect; +import mage.abilities.effects.common.continuous.GainAbilityControlledEffect; import mage.abilities.keyword.MenaceAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Duration; import mage.constants.SubType; -import mage.constants.Zone; import mage.filter.FilterPermanent; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.predicate.Predicates; + +import java.util.UUID; /** - * * @author LevelX2 */ public final class CaterwaulingBoggart extends CardImpl { - private static final FilterPermanent filterGoblin = new FilterControlledCreaturePermanent("Goblin"); - private static final FilterPermanent filterElemental = new FilterControlledCreaturePermanent("Elemental"); + private static final FilterPermanent filter = new FilterPermanent("Goblins you control and Elementals"); static { - filterGoblin.add(SubType.GOBLIN.getPredicate()); - filterElemental.add(SubType.ELEMENTAL.getPredicate()); + filter.add(Predicates.or( + SubType.GOBLIN.getPredicate(), + SubType.ELEMENTAL.getPredicate() + )); } public CaterwaulingBoggart(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{R}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{R}"); this.subtype.add(SubType.GOBLIN); this.subtype.add(SubType.SHAMAN); this.power = new MageInt(2); this.toughness = new MageInt(2); - // Each Goblin you control has menace. (They can't be blocked except by two or more creatures.) - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAllEffect( - new MenaceAbility(), - Duration.WhileOnBattlefield, filterGoblin, - "Each Goblin you control has menace. (They can't be blocked except by two or more creatures.)"))); - - // Each Elemental you control has menace. (They can't be blocked except by two or more creatures.) - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAllEffect( - new MenaceAbility(), - Duration.WhileOnBattlefield, filterElemental, - "Each Elemental you control has menace. (They can't be blocked except by two or more creatures.)"))); + // Goblins you control and Elementals you control have menace. + this.addAbility(new SimpleStaticAbility(new GainAbilityControlledEffect( + new MenaceAbility(false), Duration.WhileOnBattlefield, filter + ))); } private CaterwaulingBoggart(final CaterwaulingBoggart card) { diff --git a/Mage.Sets/src/mage/cards/c/Cloudthresher.java b/Mage.Sets/src/mage/cards/c/Cloudthresher.java index 0139ffd66e..7b16baa23f 100644 --- a/Mage.Sets/src/mage/cards/c/Cloudthresher.java +++ b/Mage.Sets/src/mage/cards/c/Cloudthresher.java @@ -42,7 +42,7 @@ public final class Cloudthresher extends CardImpl { this.addAbility(ReachAbility.getInstance()); // When Cloudthresher enters the battlefield, it deals 2 damage to each creature with flying and each player. Ability ability = new EntersBattlefieldTriggeredAbility(new DamageAllEffect(2, "it", filter)); - ability.addEffect(new DamagePlayersEffect(2)); + ability.addEffect(new DamagePlayersEffect(2).setText("and each player")); this.addAbility(ability); // Evoke {2}{G}{G} this.addAbility(new EvokeAbility("{2}{G}{G}")); diff --git a/Mage.Sets/src/mage/cards/c/ColfenorsUrn.java b/Mage.Sets/src/mage/cards/c/ColfenorsUrn.java index 5ffe45ee08..46df2f9f3f 100644 --- a/Mage.Sets/src/mage/cards/c/ColfenorsUrn.java +++ b/Mage.Sets/src/mage/cards/c/ColfenorsUrn.java @@ -44,7 +44,7 @@ public final class ColfenorsUrn extends CardImpl { new ExileTargetForSourceEffect().setText("exile it"), true, filter, true, true)); // At the beginning of the end step, if three or more cards have been exiled with Colfenor's Urn, sacrifice it. If you do, return those cards to the battlefield under their owner's control. - this.addAbility(new BeginningOfEndStepTriggeredAbility(Zone.BATTLEFIELD, new ColfenorsUrnEffect(), TargetController.ANY, new ColfenorsUrnCondition(), false)); + this.addAbility(new BeginningOfEndStepTriggeredAbility(Zone.BATTLEFIELD, new ColfenorsUrnEffect(), TargetController.NEXT, new ColfenorsUrnCondition(), false)); } private ColfenorsUrn(final ColfenorsUrn card) { diff --git a/Mage.Sets/src/mage/cards/e/EgoErasure.java b/Mage.Sets/src/mage/cards/e/EgoErasure.java index 15f98b62d6..c0077e492c 100644 --- a/Mage.Sets/src/mage/cards/e/EgoErasure.java +++ b/Mage.Sets/src/mage/cards/e/EgoErasure.java @@ -13,7 +13,6 @@ import mage.game.permanent.Permanent; import mage.target.TargetPlayer; import java.util.Iterator; -import java.util.List; import java.util.UUID; /** @@ -28,9 +27,8 @@ public final class EgoErasure extends CardImpl { // Changeling this.addAbility(new ChangelingAbility()); - //Creatures target player controls get -2/+0 and lose all creature types until end of turn. - this.getSpellAbility().addEffect(new EgoErasureBoostEffect()); - this.getSpellAbility().addEffect(new EgoErasureLoseEffect()); + // Creatures target player controls get -2/+0 and lose all creature types until end of turn. + this.getSpellAbility().addEffect(new EgoErasureEffect()); this.getSpellAbility().addTarget(new TargetPlayer()); } @@ -44,84 +42,67 @@ public final class EgoErasure extends CardImpl { } } -class EgoErasureLoseEffect extends ContinuousEffectImpl { +class EgoErasureEffect extends ContinuousEffectImpl { - public EgoErasureLoseEffect() { - super(Duration.EndOfTurn, Layer.TypeChangingEffects_4, SubLayer.NA, Outcome.Neutral); - staticText = "and lose all creature types until end of turn"; + public EgoErasureEffect() { + super(Duration.EndOfTurn, Outcome.Neutral); + staticText = "creatures target player controls get -2/-0 and lose all creature types until end of turn"; } - public EgoErasureLoseEffect(final EgoErasureLoseEffect effect) { + public EgoErasureEffect(final EgoErasureEffect effect) { super(effect); } @Override - public EgoErasureLoseEffect copy() { - return new EgoErasureLoseEffect(this); + public EgoErasureEffect copy() { + return new EgoErasureEffect(this); } @Override public void init(Ability source, Game game) { super.init(source, game); - if (this.affectedObjectsSet) { - List creatures = game.getBattlefield().getAllActivePermanents(StaticFilters.FILTER_PERMANENT_CREATURE, source.getFirstTarget(), game); - for (Permanent creature : creatures) { - affectedObjectList.add(new MageObjectReference(creature, game)); + game.getBattlefield() + .getActivePermanents( + StaticFilters.FILTER_CONTROLLED_CREATURE, + source.getFirstTarget(), source.getSourceId(), game + ).stream() + .map(permanent -> new MageObjectReference(permanent, game)) + .forEach(affectedObjectList::add); + } + + @Override + public boolean apply(Layer layer, SubLayer sublayer, Ability source, Game game) { + for (Iterator it = affectedObjectList.iterator(); it.hasNext(); ) { + Permanent permanent = it.next().getPermanent(game); + if (permanent == null) { + it.remove(); + continue; + } + switch (layer) { + case TypeChangingEffects_4: + permanent.removeAllCreatureTypes(game); + break; + case PTChangingEffects_7: + if (sublayer == SubLayer.ModifyPT_7c) { + permanent.addPower(-2); + } + break; } } + if (affectedObjectList.isEmpty()) { + discard(); + return false; + } + return true; } @Override public boolean apply(Game game, Ability source) { - for (Iterator it = affectedObjectList.iterator(); it.hasNext(); ) { - Permanent permanent = it.next().getPermanent(game); - if (permanent != null) { - permanent.removeAllCreatureTypes(game); - } else { - it.remove(); - } - } - return true; - } -} - -class EgoErasureBoostEffect extends ContinuousEffectImpl { - - public EgoErasureBoostEffect() { - super(Duration.EndOfTurn, Layer.PTChangingEffects_7, SubLayer.ModifyPT_7c, Outcome.Benefit); - staticText = "Creatures target player controls get -2/+0"; - } - - public EgoErasureBoostEffect(final EgoErasureBoostEffect effect) { - super(effect); - } - - @Override - public EgoErasureBoostEffect copy() { - return new EgoErasureBoostEffect(this); - } - - @Override - public void init(Ability source, Game game) { - super.init(source, game); - if (this.affectedObjectsSet) { - List creatures = game.getBattlefield().getAllActivePermanents(StaticFilters.FILTER_PERMANENT_CREATURE, source.getFirstTarget(), game); - for (Permanent creature : creatures) { - affectedObjectList.add(new MageObjectReference(creature, game)); - } - } - } - - @Override - public boolean apply(Game game, Ability source) { - for (Iterator it = affectedObjectList.iterator(); it.hasNext(); ) { - Permanent permanent = it.next().getPermanent(game); - if (permanent != null) { - permanent.addPower(-2); - } else { - it.remove(); - } - } - return true; + return false; + } + + @Override + public boolean hasLayer(Layer layer) { + return layer == Layer.TypeChangingEffects_4 || layer == Layer.PTChangingEffects_7; } } diff --git a/Mage.Sets/src/mage/cards/e/ElvishHandservant.java b/Mage.Sets/src/mage/cards/e/ElvishHandservant.java index 5c9a739143..0534c5d3d0 100644 --- a/Mage.Sets/src/mage/cards/e/ElvishHandservant.java +++ b/Mage.Sets/src/mage/cards/e/ElvishHandservant.java @@ -18,7 +18,7 @@ import mage.filter.FilterSpell; */ public final class ElvishHandservant extends CardImpl { - private static final FilterSpell filter = new FilterSpell("Giant"); + private static final FilterSpell filter = new FilterSpell("Giant spell"); static { filter.add(SubType.GIANT.getPredicate()); diff --git a/Mage.Sets/src/mage/cards/e/EpicProportions.java b/Mage.Sets/src/mage/cards/e/EpicProportions.java index 5a82c8ee01..737a88ffd6 100644 --- a/Mage.Sets/src/mage/cards/e/EpicProportions.java +++ b/Mage.Sets/src/mage/cards/e/EpicProportions.java @@ -1,7 +1,5 @@ - package mage.cards.e; -import java.util.UUID; import mage.abilities.Ability; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.effects.common.AttachEffect; @@ -16,24 +14,30 @@ import mage.constants.*; import mage.target.TargetPermanent; import mage.target.common.TargetCreaturePermanent; +import java.util.UUID; + /** - * * @author Loki */ public final class EpicProportions extends CardImpl { public EpicProportions(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{4}{G}{G}"); + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{4}{G}{G}"); this.subtype.add(SubType.AURA); this.addAbility(FlashAbility.getInstance()); TargetPermanent auraTarget = new TargetCreaturePermanent(); this.getSpellAbility().addTarget(auraTarget); this.getSpellAbility().addEffect(new AttachEffect(Outcome.BoostCreature)); - Ability ability = new EnchantAbility(auraTarget.getTargetName()); + this.addAbility(new EnchantAbility(auraTarget.getTargetName())); + + Ability ability = new SimpleStaticAbility(new BoostEnchantedEffect( + 5, 5, Duration.WhileOnBattlefield + )); + ability.addEffect(new GainAbilityAttachedEffect( + TrampleAbility.getInstance(), AttachmentType.AURA + ).setText("and has trample")); this.addAbility(ability); - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEnchantedEffect(5, 5, Duration.WhileOnBattlefield))); - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAttachedEffect(TrampleAbility.getInstance(), AttachmentType.AURA))); } private EpicProportions(final EpicProportions card) { diff --git a/Mage.Sets/src/mage/cards/f/FinalRevels.java b/Mage.Sets/src/mage/cards/f/FinalRevels.java index 28e1f96279..ee222a8c28 100644 --- a/Mage.Sets/src/mage/cards/f/FinalRevels.java +++ b/Mage.Sets/src/mage/cards/f/FinalRevels.java @@ -1,7 +1,5 @@ - package mage.cards.f; -import java.util.UUID; import mage.abilities.Mode; import mage.abilities.effects.common.continuous.BoostAllEffect; import mage.cards.CardImpl; @@ -10,8 +8,9 @@ import mage.constants.CardType; import mage.constants.Duration; import mage.filter.StaticFilters; +import java.util.UUID; + /** - * * @author Loki */ public final class FinalRevels extends CardImpl { @@ -19,10 +18,14 @@ public final class FinalRevels extends CardImpl { public FinalRevels(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{4}{B}"); - this.getSpellAbility().addEffect(new BoostAllEffect(2, 0, Duration.EndOfTurn, StaticFilters.FILTER_PERMANENT_CREATURE, false)); - Mode mode = new Mode(); - mode.addEffect(new BoostAllEffect(0, -2, Duration.EndOfTurn, StaticFilters.FILTER_PERMANENT_CREATURE, false)); - this.getSpellAbility().addMode(mode); + this.getSpellAbility().addEffect(new BoostAllEffect( + 2, 0, Duration.EndOfTurn, + StaticFilters.FILTER_PERMANENT_ALL_CREATURES, false + )); + this.getSpellAbility().addMode(new Mode(new BoostAllEffect( + 0, -2, Duration.EndOfTurn, + StaticFilters.FILTER_PERMANENT_ALL_CREATURES, false + ))); } private FinalRevels(final FinalRevels card) { diff --git a/Mage.Sets/src/mage/cards/f/FlamekinBladewhirl.java b/Mage.Sets/src/mage/cards/f/FlamekinBladewhirl.java index c79bf18007..303cd6cf75 100644 --- a/Mage.Sets/src/mage/cards/f/FlamekinBladewhirl.java +++ b/Mage.Sets/src/mage/cards/f/FlamekinBladewhirl.java @@ -36,7 +36,7 @@ public final class FlamekinBladewhirl extends CardImpl { this.getSpellAbility().addCost(new OrCost( new RevealTargetFromHandCost(new TargetCardInHand(filter)), new GenericManaCost(3), - "reveal a Elemental card from your hand or pay {3}")); + "reveal an Elemental card from your hand or pay {3}")); } private FlamekinBladewhirl(final FlamekinBladewhirl card) { diff --git a/Mage.Sets/src/mage/cards/f/FodderLaunch.java b/Mage.Sets/src/mage/cards/f/FodderLaunch.java index 919ddf8629..211152d059 100644 --- a/Mage.Sets/src/mage/cards/f/FodderLaunch.java +++ b/Mage.Sets/src/mage/cards/f/FodderLaunch.java @@ -29,7 +29,7 @@ public final class FodderLaunch extends CardImpl { //Target creature gets -5/-5 until end of turn. Fodder Launch deals 5 damage to that creature's controller. this.getSpellAbility().addEffect(new BoostTargetEffect(-5, -5, Duration.EndOfTurn)); this.getSpellAbility().addTarget(new TargetCreaturePermanent()); - this.getSpellAbility().addEffect(new DamageTargetControllerEffect(5)); + this.getSpellAbility().addEffect(new DamageTargetControllerEffect(5).setText("{this} deals 5 damage to that creature's controller")); } private FodderLaunch(final FodderLaunch card) { diff --git a/Mage.Sets/src/mage/cards/f/FootbottomFeast.java b/Mage.Sets/src/mage/cards/f/FootbottomFeast.java index e8c1078ee9..7dae262452 100644 --- a/Mage.Sets/src/mage/cards/f/FootbottomFeast.java +++ b/Mage.Sets/src/mage/cards/f/FootbottomFeast.java @@ -23,7 +23,7 @@ public final class FootbottomFeast extends CardImpl { this.getSpellAbility().addTarget(new TargetCardInYourGraveyard(0, Integer.MAX_VALUE, StaticFilters.FILTER_CARD_CREATURES_YOUR_GRAVEYARD)); // Draw a card. - this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1)); + this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1).concatBy("
")); } private FootbottomFeast(final FootbottomFeast card) { diff --git a/Mage.Sets/src/mage/cards/f/ForcedFruition.java b/Mage.Sets/src/mage/cards/f/ForcedFruition.java index bc11aff54a..95a7c83ffa 100644 --- a/Mage.Sets/src/mage/cards/f/ForcedFruition.java +++ b/Mage.Sets/src/mage/cards/f/ForcedFruition.java @@ -23,7 +23,7 @@ public final class ForcedFruition extends CardImpl { // Whenever an opponent casts a spell, that player draws seven cards. this.addAbility(new SpellCastOpponentTriggeredAbility(Zone.BATTLEFIELD, new DrawCardTargetEffect(7), - StaticFilters.FILTER_SPELL, false, SetTargetPointer.PLAYER)); + StaticFilters.FILTER_SPELL_A, false, SetTargetPointer.PLAYER)); } private ForcedFruition(final ForcedFruition card) { diff --git a/Mage.Sets/src/mage/cards/g/GiltLeafPalace.java b/Mage.Sets/src/mage/cards/g/GiltLeafPalace.java index 4c47f0b743..5a32e45141 100644 --- a/Mage.Sets/src/mage/cards/g/GiltLeafPalace.java +++ b/Mage.Sets/src/mage/cards/g/GiltLeafPalace.java @@ -29,7 +29,7 @@ public final class GiltLeafPalace extends CardImpl { super(ownerId,setInfo,new CardType[]{CardType.LAND},""); // As Gilt-Leaf Palace enters the battlefield, you may reveal an Elf card from your hand. If you don't, Gilt-Leaf Palace enters the battlefield tapped. - this.addAbility(new AsEntersBattlefieldAbility(new TapSourceUnlessPaysEffect(new RevealTargetFromHandCost(new TargetCardInHand(filter))), "you may reveal a Elf card from your hand. If you don't, {this} enters the battlefield tapped")); + this.addAbility(new AsEntersBattlefieldAbility(new TapSourceUnlessPaysEffect(new RevealTargetFromHandCost(new TargetCardInHand(filter))), "you may reveal an Elf card from your hand. If you don't, {this} enters the battlefield tapped")); // {tap}: Add {B} or {G}. this.addAbility(new BlackManaAbility()); this.addAbility(new GreenManaAbility()); diff --git a/Mage.Sets/src/mage/cards/h/HearthcageGiant.java b/Mage.Sets/src/mage/cards/h/HearthcageGiant.java index 08970c78af..94eb0488f6 100644 --- a/Mage.Sets/src/mage/cards/h/HearthcageGiant.java +++ b/Mage.Sets/src/mage/cards/h/HearthcageGiant.java @@ -28,7 +28,7 @@ import mage.target.common.TargetCreaturePermanent; public final class HearthcageGiant extends CardImpl { private static final FilterControlledPermanent filterElemental = new FilterControlledPermanent("Elemental"); - private static final FilterCreaturePermanent filterGiant = new FilterCreaturePermanent("Giant"); + private static final FilterCreaturePermanent filterGiant = new FilterCreaturePermanent("Giant creature"); static { filterElemental.add(SubType.ELEMENTAL.getPredicate()); diff --git a/Mage.Sets/src/mage/cards/i/InnerFlameAcolyte.java b/Mage.Sets/src/mage/cards/i/InnerFlameAcolyte.java index 6f45e6c334..f065920893 100644 --- a/Mage.Sets/src/mage/cards/i/InnerFlameAcolyte.java +++ b/Mage.Sets/src/mage/cards/i/InnerFlameAcolyte.java @@ -1,7 +1,5 @@ - package mage.cards.i; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldTriggeredAbility; @@ -12,12 +10,13 @@ import mage.abilities.keyword.HasteAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.constants.SubType; import mage.constants.Duration; +import mage.constants.SubType; import mage.target.common.TargetCreaturePermanent; +import java.util.UUID; + /** - * * @author LevelX2 */ public final class InnerFlameAcolyte extends CardImpl { @@ -31,9 +30,12 @@ public final class InnerFlameAcolyte extends CardImpl { this.toughness = new MageInt(2); // When Inner-Flame Acolyte enters the battlefield, target creature gets +2/+0 and gains haste until end of turn. - Ability ability = new EntersBattlefieldTriggeredAbility(new BoostTargetEffect(2, 0, Duration.EndOfTurn)); - ability.addEffect(new GainAbilityTargetEffect(HasteAbility.getInstance(), Duration.EndOfTurn) - .setText("and gains haste until end of turn")); + Ability ability = new EntersBattlefieldTriggeredAbility(new BoostTargetEffect( + 2, 0, Duration.EndOfTurn + ).setText("target creature gets +2/+0")); + ability.addEffect(new GainAbilityTargetEffect( + HasteAbility.getInstance(), Duration.EndOfTurn + ).setText("and gains haste until end of turn")); ability.addTarget(new TargetCreaturePermanent()); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/cards/k/KithkinGreatheart.java b/Mage.Sets/src/mage/cards/k/KithkinGreatheart.java index 40cb1872fe..9de0c1b208 100644 --- a/Mage.Sets/src/mage/cards/k/KithkinGreatheart.java +++ b/Mage.Sets/src/mage/cards/k/KithkinGreatheart.java @@ -1,10 +1,9 @@ - package mage.cards.k; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.condition.Condition; import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition; import mage.abilities.decorator.ConditionalContinuousEffect; import mage.abilities.effects.common.continuous.BoostSourceEffect; @@ -12,43 +11,46 @@ import mage.abilities.effects.common.continuous.GainAbilitySourceEffect; import mage.abilities.keyword.FirstStrikeAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; -import mage.constants.*; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.SubType; +import mage.constants.TargetController; import mage.filter.common.FilterCreaturePermanent; +import java.util.UUID; + /** - * * @author LevelX2 */ public final class KithkinGreatheart extends CardImpl { private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Giant"); + static { filter.add(TargetController.YOU.getControllerPredicate()); filter.add(SubType.GIANT.getPredicate()); } - private static final String rule2 = "As long as you control a Giant, {this} has first strike"; + + private static final Condition condition = new PermanentsOnTheBattlefieldCondition(filter); public KithkinGreatheart(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{W}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{W}"); this.subtype.add(SubType.KITHKIN); this.subtype.add(SubType.SOLDIER); - this.color.setWhite(true); this.power = new MageInt(2); this.toughness = new MageInt(1); // As long as you control a Giant, Kithkin Greatheart gets +1/+1 and has first strike. - Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect( - new BoostSourceEffect(1,1, Duration.WhileOnBattlefield), - new PermanentsOnTheBattlefieldCondition(filter), - "As long as you control a Giant, Kithkin Greatheart gets +1/+1")); + Ability ability = new SimpleStaticAbility(new ConditionalContinuousEffect( + new BoostSourceEffect(1, 1, Duration.WhileOnBattlefield), + condition, "As long as you control a Giant, {this} gets +1/+1" + )); + ability.addEffect(new ConditionalContinuousEffect( + new GainAbilitySourceEffect(FirstStrikeAbility.getInstance()), + condition, "and has first strike" + )); this.addAbility(ability); - ConditionalContinuousEffect effect2 = new ConditionalContinuousEffect( - new GainAbilitySourceEffect(FirstStrikeAbility.getInstance()), - new PermanentsOnTheBattlefieldCondition(filter), - rule2); - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, effect2)); - } private KithkinGreatheart(final KithkinGreatheart card) { diff --git a/Mage.Sets/src/mage/cards/k/KnuckleboneWitch.java b/Mage.Sets/src/mage/cards/k/KnuckleboneWitch.java index c86cc70798..885060a761 100644 --- a/Mage.Sets/src/mage/cards/k/KnuckleboneWitch.java +++ b/Mage.Sets/src/mage/cards/k/KnuckleboneWitch.java @@ -1,7 +1,5 @@ - package mage.cards.k; -import java.util.UUID; import mage.MageInt; import mage.abilities.common.DiesCreatureTriggeredAbility; import mage.abilities.effects.common.counter.AddCountersSourceEffect; @@ -9,32 +7,30 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; -import mage.constants.TargetController; import mage.counters.CounterType; -import mage.filter.common.FilterCreaturePermanent; +import mage.filter.FilterPermanent; +import mage.filter.common.FilterControlledPermanent; + +import java.util.UUID; /** - * * @author markedagain */ public final class KnuckleboneWitch extends CardImpl { - - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Goblin you control"); - static { - filter.add(TargetController.YOU.getControllerPredicate()); - filter.add(SubType.GOBLIN.getPredicate()); - } - + private static final FilterPermanent filter = new FilterControlledPermanent(SubType.GOBLIN); + public KnuckleboneWitch(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{B}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{B}"); this.subtype.add(SubType.GOBLIN); this.subtype.add(SubType.SHAMAN); this.power = new MageInt(1); this.toughness = new MageInt(1); // Whenever a Goblin you control dies, you may put a +1/+1 counter on Knucklebone Witch. - this.addAbility(new DiesCreatureTriggeredAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance()), true, filter )); + this.addAbility(new DiesCreatureTriggeredAbility( + new AddCountersSourceEffect(CounterType.P1P1.createInstance()), true, filter + ).setTriggerPhrase("Whenever a Goblin you control is put into a graveyard from the battlefield, ")); } private KnuckleboneWitch(final KnuckleboneWitch card) { diff --git a/Mage.Sets/src/mage/cards/l/LaceWithMoonglove.java b/Mage.Sets/src/mage/cards/l/LaceWithMoonglove.java index 518a635583..a8656cd7fd 100644 --- a/Mage.Sets/src/mage/cards/l/LaceWithMoonglove.java +++ b/Mage.Sets/src/mage/cards/l/LaceWithMoonglove.java @@ -22,7 +22,7 @@ public final class LaceWithMoonglove extends CardImpl { this.getSpellAbility().addEffect(new GainAbilityTargetEffect(DeathtouchAbility.getInstance(), Duration.EndOfTurn)); this.getSpellAbility().addTarget(new TargetCreaturePermanent()); - this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1)); + this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1).concatBy("
")); } private LaceWithMoonglove(final LaceWithMoonglove card) { diff --git a/Mage.Sets/src/mage/cards/l/LowlandOaf.java b/Mage.Sets/src/mage/cards/l/LowlandOaf.java index 83b598a693..4a2b491377 100644 --- a/Mage.Sets/src/mage/cards/l/LowlandOaf.java +++ b/Mage.Sets/src/mage/cards/l/LowlandOaf.java @@ -49,7 +49,7 @@ public final class LowlandOaf extends CardImpl { effect.setText("Target Goblin creature you control gets +1/+0"); Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, effect, new TapSourceCost()); effect = new GainAbilityTargetEffect(FlyingAbility.getInstance(), Duration.EndOfTurn); - effect.setText("and gains flying until end of turn. "); + effect.setText("and gains flying until end of turn."); ability.addEffect(effect); ability.addEffect(new LowlandOafEffect()); ability.addTarget(new TargetCreaturePermanent(filter)); diff --git a/Mage.Sets/src/mage/cards/m/MerrowReejerey.java b/Mage.Sets/src/mage/cards/m/MerrowReejerey.java index 61e8d2c1c1..c729be9312 100644 --- a/Mage.Sets/src/mage/cards/m/MerrowReejerey.java +++ b/Mage.Sets/src/mage/cards/m/MerrowReejerey.java @@ -23,7 +23,7 @@ import mage.target.TargetPermanent; public final class MerrowReejerey extends CardImpl { private static final FilterCreaturePermanent filter1 = new FilterCreaturePermanent("Merfolk creatures you control"); - private static final FilterSpell filter2 = new FilterSpell("Merfolk spell"); + private static final FilterSpell filter2 = new FilterSpell("a Merfolk spell"); static { filter1.add(SubType.MERFOLK.getPredicate()); diff --git a/Mage.Sets/src/mage/cards/m/MoongloveExtract.java b/Mage.Sets/src/mage/cards/m/MoongloveExtract.java index 15acc9c1a7..ebe05d6269 100644 --- a/Mage.Sets/src/mage/cards/m/MoongloveExtract.java +++ b/Mage.Sets/src/mage/cards/m/MoongloveExtract.java @@ -22,7 +22,7 @@ public final class MoongloveExtract extends CardImpl { super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT},"{3}"); // Sacrifice Moonglove Extract: Moonglove Extract deals 2 damage to any target. - Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(2), new SacrificeSourceCost()); + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(2, "it"), new SacrificeSourceCost()); ability.addTarget(new TargetAnyTarget()); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/n/NeedleDrop.java b/Mage.Sets/src/mage/cards/n/NeedleDrop.java index 549659c588..7f7cb3f068 100644 --- a/Mage.Sets/src/mage/cards/n/NeedleDrop.java +++ b/Mage.Sets/src/mage/cards/n/NeedleDrop.java @@ -39,7 +39,7 @@ public final class NeedleDrop extends CardImpl { this.getSpellAbility().addTarget(new TargetAnyTarget(1, 1, filer)); // Draw a card. - this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1)); + this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1).concatBy("
")); } private NeedleDrop(final NeedleDrop card) { diff --git a/Mage.Sets/src/mage/cards/p/ProtectiveBubble.java b/Mage.Sets/src/mage/cards/p/ProtectiveBubble.java index b1354ce80f..9e590f3b0e 100644 --- a/Mage.Sets/src/mage/cards/p/ProtectiveBubble.java +++ b/Mage.Sets/src/mage/cards/p/ProtectiveBubble.java @@ -1,7 +1,6 @@ - package mage.cards.p; -import java.util.UUID; +import mage.abilities.Ability; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.effects.common.AttachEffect; import mage.abilities.effects.common.combat.CantBeBlockedAttachedEffect; @@ -12,31 +11,34 @@ 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 mage.target.TargetPermanent; import mage.target.common.TargetCreaturePermanent; +import java.util.UUID; + /** - * * @author Loki */ public final class ProtectiveBubble extends CardImpl { public ProtectiveBubble(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{3}{U}"); + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{3}{U}"); this.subtype.add(SubType.AURA); - // Enchant creature TargetPermanent auraTarget = new TargetCreaturePermanent(); this.getSpellAbility().addTarget(auraTarget); this.getSpellAbility().addEffect(new AttachEffect(Outcome.BoostCreature)); this.addAbility(new EnchantAbility(auraTarget.getTargetName())); + // Enchanted creature can't be blocked and has shroud. - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new CantBeBlockedAttachedEffect(AttachmentType.AURA))); - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAttachedEffect(ShroudAbility.getInstance(), AttachmentType.AURA))); + Ability ability = new SimpleStaticAbility(new CantBeBlockedAttachedEffect(AttachmentType.AURA)); + ability.addEffect(new GainAbilityAttachedEffect( + ShroudAbility.getInstance(), AttachmentType.AURA + ).setText("and has shroud")); + this.addAbility(ability); } private ProtectiveBubble(final ProtectiveBubble card) { diff --git a/Mage.Sets/src/mage/cards/s/ScionOfOona.java b/Mage.Sets/src/mage/cards/s/ScionOfOona.java index 6050c7dc24..58876001ac 100644 --- a/Mage.Sets/src/mage/cards/s/ScionOfOona.java +++ b/Mage.Sets/src/mage/cards/s/ScionOfOona.java @@ -22,7 +22,7 @@ import mage.filter.common.FilterCreaturePermanent; public final class ScionOfOona extends CardImpl { private static final FilterPermanent filter = new FilterPermanent("Faeries"); - private static final FilterCreaturePermanent filterCreature = new FilterCreaturePermanent("Faeries"); + private static final FilterCreaturePermanent filterCreature = new FilterCreaturePermanent("Faerie creatures"); static { filter.add(SubType.FAERIE.getPredicate()); diff --git a/Mage.Sets/src/mage/cards/s/StreambedAquitects.java b/Mage.Sets/src/mage/cards/s/StreambedAquitects.java index 2d7f81b84d..32ba35910e 100644 --- a/Mage.Sets/src/mage/cards/s/StreambedAquitects.java +++ b/Mage.Sets/src/mage/cards/s/StreambedAquitects.java @@ -1,4 +1,3 @@ - package mage.cards.s; import mage.MageInt; @@ -14,27 +13,21 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Duration; import mage.constants.SubType; -import mage.constants.Zone; import mage.filter.common.FilterCreaturePermanent; -import mage.target.Target; import mage.target.common.TargetCreaturePermanent; import mage.target.common.TargetLandPermanent; import java.util.UUID; /** - * * @author LevelX2 */ public final class StreambedAquitects extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Merfolk creature"); - static { - filter.add(SubType.MERFOLK.getPredicate()); - } + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent(SubType.MERFOLK, "Merfolk creature"); public StreambedAquitects(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{U}{U}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{U}{U}"); this.subtype.add(SubType.MERFOLK); this.subtype.add(SubType.SCOUT); @@ -42,16 +35,18 @@ public final class StreambedAquitects extends CardImpl { this.toughness = new MageInt(3); // {tap}: Target Merfolk creature gets +1/+1 and gains islandwalk until end of turn. - Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostTargetEffect(1,1, Duration.EndOfTurn), new TapSourceCost()); - ability.addEffect(new GainAbilityTargetEffect(new IslandwalkAbility(false), Duration.EndOfTurn)); - Target target = new TargetCreaturePermanent(filter); - ability.addTarget(target); + Ability ability = new SimpleActivatedAbility(new BoostTargetEffect( + 1, 1, Duration.EndOfTurn + ).setText("target Merfolk creature gets +1/+1"), new TapSourceCost()); + ability.addEffect(new GainAbilityTargetEffect( + new IslandwalkAbility(false), Duration.EndOfTurn + ).setText("and gains islandwalk until end of turn")); + ability.addTarget(new TargetCreaturePermanent(filter)); this.addAbility(ability); // {tap}: Target land becomes an Island until end of turn. - ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new BecomesBasicLandTargetEffect(Duration.EndOfTurn, SubType.ISLAND), new TapSourceCost()); - target = new TargetLandPermanent(); - ability.addTarget(target); + ability = new SimpleActivatedAbility(new BecomesBasicLandTargetEffect(Duration.EndOfTurn, SubType.ISLAND), new TapSourceCost()); + ability.addTarget(new TargetLandPermanent()); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/s/SummonTheSchool.java b/Mage.Sets/src/mage/cards/s/SummonTheSchool.java index 274ff5d580..95a5552409 100644 --- a/Mage.Sets/src/mage/cards/s/SummonTheSchool.java +++ b/Mage.Sets/src/mage/cards/s/SummonTheSchool.java @@ -1,11 +1,9 @@ - package mage.cards.s; -import java.util.UUID; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.common.TapTargetCost; import mage.abilities.effects.common.CreateTokenEffect; -import mage.abilities.effects.common.ReturnToHandSourceEffect; +import mage.abilities.effects.common.ReturnSourceFromGraveyardToHandEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; @@ -16,27 +14,32 @@ import mage.filter.predicate.permanent.TappedPredicate; import mage.game.permanent.token.MerfolkWizardToken; import mage.target.common.TargetControlledPermanent; +import java.util.UUID; + /** - * * @author Loki */ public final class SummonTheSchool extends CardImpl { - private static final FilterControlledPermanent filter = new FilterControlledPermanent("untapped Merfolk you control"); + private static final FilterControlledPermanent filter + = new FilterControlledPermanent(SubType.MERFOLK, "untapped Merfolk you control"); static { filter.add(TappedPredicate.UNTAPPED); - filter.add(SubType.MERFOLK.getPredicate()); } public SummonTheSchool(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.TRIBAL,CardType.SORCERY},"{3}{W}"); + super(ownerId, setInfo, new CardType[]{CardType.TRIBAL, CardType.SORCERY}, "{3}{W}"); this.subtype.add(SubType.MERFOLK); - + // Create two 1/1 blue Merfolk Wizard creature tokens. this.getSpellAbility().addEffect(new CreateTokenEffect(new MerfolkWizardToken(), 2)); + // Tap four untapped Merfolk you control: Return Summon the School from your graveyard to your hand. - this.addAbility(new SimpleActivatedAbility(Zone.GRAVEYARD, new ReturnToHandSourceEffect(), new TapTargetCost(new TargetControlledPermanent(4, 4, filter, false)))); + this.addAbility(new SimpleActivatedAbility( + Zone.GRAVEYARD, new ReturnSourceFromGraveyardToHandEffect(), + new TapTargetCost(new TargetControlledPermanent(4, filter)) + )); } private SummonTheSchool(final SummonTheSchool card) { diff --git a/Mage.Sets/src/mage/cards/s/SunriseSovereign.java b/Mage.Sets/src/mage/cards/s/SunriseSovereign.java index 1929740428..d2865fc977 100644 --- a/Mage.Sets/src/mage/cards/s/SunriseSovereign.java +++ b/Mage.Sets/src/mage/cards/s/SunriseSovereign.java @@ -1,8 +1,7 @@ - package mage.cards.s; -import java.util.UUID; import mage.MageInt; +import mage.abilities.Ability; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.effects.common.continuous.BoostControlledEffect; import mage.abilities.effects.common.continuous.GainAbilityControlledEffect; @@ -12,31 +11,37 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Duration; import mage.constants.SubType; -import mage.constants.Zone; import mage.filter.common.FilterCreaturePermanent; +import java.util.UUID; + /** - * * @author Loki */ public final class SunriseSovereign extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Giant"); + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Giant creatures"); static { filter.add(SubType.GIANT.getPredicate()); } public SunriseSovereign(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{5}{R}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{5}{R}"); this.subtype.add(SubType.GIANT); this.subtype.add(SubType.WARRIOR); this.power = new MageInt(5); this.toughness = new MageInt(5); + // Other Giant creatures you control get +2/+2 and have trample. - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostControlledEffect(2, 2, Duration.WhileOnBattlefield, filter, true))); - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityControlledEffect(TrampleAbility.getInstance(), Duration.WhileOnBattlefield, filter, true))); + Ability ability = new SimpleStaticAbility(new BoostControlledEffect( + 2, 2, Duration.WhileOnBattlefield, filter, true + )); + ability.addEffect(new GainAbilityControlledEffect( + TrampleAbility.getInstance(), Duration.WhileOnBattlefield, filter, true + ).setText("and have trample")); + this.addAbility(ability); } private SunriseSovereign(final SunriseSovereign card) { diff --git a/Mage.Sets/src/mage/cards/s/SylvanEchoes.java b/Mage.Sets/src/mage/cards/s/SylvanEchoes.java index f181a73156..47b86af15e 100644 --- a/Mage.Sets/src/mage/cards/s/SylvanEchoes.java +++ b/Mage.Sets/src/mage/cards/s/SylvanEchoes.java @@ -60,6 +60,6 @@ class SylvanEchoesTriggeredAbility extends TriggeredAbilityImpl { @Override public String getRule() { - return "Whenever you clash and win, you may draw a card"; + return "Whenever you clash and win, you may draw a card."; } } diff --git a/Mage.Sets/src/mage/cards/t/ThorntoothWitch.java b/Mage.Sets/src/mage/cards/t/ThorntoothWitch.java index 4cb0681eb9..33cd5cf5f1 100644 --- a/Mage.Sets/src/mage/cards/t/ThorntoothWitch.java +++ b/Mage.Sets/src/mage/cards/t/ThorntoothWitch.java @@ -20,7 +20,7 @@ import mage.target.common.TargetCreaturePermanent; */ public final class ThorntoothWitch extends CardImpl { - private static final FilterSpell filter = new FilterSpell("Treefolk"); + private static final FilterSpell filter = new FilterSpell("a Treefolk spell"); static { filter.add(SubType.TREEFOLK.getPredicate()); diff --git a/Mage.Sets/src/mage/cards/t/TimberProtector.java b/Mage.Sets/src/mage/cards/t/TimberProtector.java index 35ab5f860e..fb60893818 100644 --- a/Mage.Sets/src/mage/cards/t/TimberProtector.java +++ b/Mage.Sets/src/mage/cards/t/TimberProtector.java @@ -1,10 +1,8 @@ - package mage.cards.t; -import java.util.UUID; import mage.MageInt; +import mage.MageObject; import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.effects.Effect; import mage.abilities.effects.common.continuous.BoostControlledEffect; import mage.abilities.effects.common.continuous.GainAbilityAllEffect; import mage.abilities.keyword.IndestructibleAbility; @@ -13,31 +11,32 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Duration; import mage.constants.SubType; -import mage.constants.Zone; import mage.filter.common.FilterControlledPermanent; import mage.filter.common.FilterCreaturePermanent; -import mage.filter.predicate.Predicates; -import mage.filter.predicate.mageobject.AnotherPredicate; +import mage.filter.predicate.ObjectSourcePlayer; +import mage.filter.predicate.ObjectSourcePlayerPredicate; +import mage.game.Game; +import mage.game.permanent.Permanent; + +import java.util.UUID; /** - * * @author Loki */ public final class TimberProtector extends CardImpl { - private static final FilterCreaturePermanent filterTreefolk = new FilterCreaturePermanent("Treefolk creatures"); - private static final FilterControlledPermanent filterBoth = new FilterControlledPermanent("Other Treefolk and Forests you control"); + private static final FilterCreaturePermanent filterTreefolk + = new FilterCreaturePermanent("Treefolk creatures"); + private static final FilterControlledPermanent filterBoth + = new FilterControlledPermanent("other Treefolk and Forests you control"); static { filterTreefolk.add(SubType.TREEFOLK.getPredicate()); - filterBoth.add(Predicates.or( - SubType.TREEFOLK.getPredicate(), - SubType.FOREST.getPredicate())); - filterBoth.add(AnotherPredicate.instance); + filterBoth.add(TimberProtectorPredicate.instance); } public TimberProtector(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{4}{G}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{G}"); this.subtype.add(SubType.TREEFOLK); this.subtype.add(SubType.WARRIOR); @@ -45,11 +44,14 @@ public final class TimberProtector extends CardImpl { this.toughness = new MageInt(6); // Other Treefolk creatures you control get +1/+1. - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostControlledEffect(1, 1, Duration.WhileOnBattlefield, filterTreefolk, true))); + this.addAbility(new SimpleStaticAbility(new BoostControlledEffect( + 1, 1, Duration.WhileOnBattlefield, filterTreefolk, true + ))); + // Other Treefolk and Forests you control are indestructible. - Effect effect = new GainAbilityAllEffect(IndestructibleAbility.getInstance(), Duration.WhileOnBattlefield, filterBoth, true); - effect.setText("Other Treefolk and Forests you control are indestructible"); - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, effect)); + this.addAbility(new SimpleStaticAbility(new GainAbilityAllEffect( + IndestructibleAbility.getInstance(), Duration.WhileOnBattlefield, filterBoth + ))); } private TimberProtector(final TimberProtector card) { @@ -61,3 +63,17 @@ public final class TimberProtector extends CardImpl { return new TimberProtector(this); } } + +enum TimberProtectorPredicate implements ObjectSourcePlayerPredicate { + instance; + + @Override + public boolean apply(ObjectSourcePlayer input, Game game) { + MageObject obj = input.getObject(); + if (obj.getId().equals(input.getSourceId())) { + return obj.hasSubtype(SubType.FOREST, game); + } + return obj.hasSubtype(SubType.FOREST, game) + || obj.hasSubtype(SubType.TREEFOLK, game); + } +} diff --git a/Mage.Sets/src/mage/cards/t/TriclopeanSight.java b/Mage.Sets/src/mage/cards/t/TriclopeanSight.java index 16a8872a28..703c7e027c 100644 --- a/Mage.Sets/src/mage/cards/t/TriclopeanSight.java +++ b/Mage.Sets/src/mage/cards/t/TriclopeanSight.java @@ -1,7 +1,5 @@ - package mage.cards.t; -import java.util.UUID; import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.common.SimpleStaticAbility; @@ -14,41 +12,42 @@ import mage.abilities.keyword.FlashAbility; import mage.abilities.keyword.VigilanceAbility; 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 fireshoes */ public final class TriclopeanSight extends CardImpl { public TriclopeanSight(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{1}{W}"); + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{W}"); this.subtype.add(SubType.AURA); // Flash this.addAbility(FlashAbility.getInstance()); - + // Enchant creature TargetPermanent auraTarget = new TargetCreaturePermanent(); this.getSpellAbility().addTarget(auraTarget); this.getSpellAbility().addEffect(new AttachEffect(Outcome.Neutral)); - Ability ability = new EnchantAbility(auraTarget.getTargetName()); - this.addAbility(ability); - + this.addAbility(new EnchantAbility(auraTarget.getTargetName())); + // When Triclopean Sight enters the battlefield, untap enchanted creature. this.addAbility(new EntersBattlefieldTriggeredAbility(new UntapEnchantedEffect())); - + // Enchanted creature gets +1/+1 and has vigilance. - ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEnchantedEffect(1,1, Duration.WhileOnBattlefield)); - ability.addEffect(new GainAbilityAttachedEffect(VigilanceAbility.getInstance(), AttachmentType.AURA, Duration.WhileOnBattlefield)); + Ability ability = new SimpleStaticAbility(new BoostEnchantedEffect( + 1, 1, Duration.WhileOnBattlefield + )); + ability.addEffect(new GainAbilityAttachedEffect( + VigilanceAbility.getInstance(), + AttachmentType.AURA, + Duration.WhileOnBattlefield + ).setText("and has vigilance")); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/v/VeteranOfTheDepths.java b/Mage.Sets/src/mage/cards/v/VeteranOfTheDepths.java index 47081f9c85..866de65796 100644 --- a/Mage.Sets/src/mage/cards/v/VeteranOfTheDepths.java +++ b/Mage.Sets/src/mage/cards/v/VeteranOfTheDepths.java @@ -1,9 +1,6 @@ - package mage.cards.v; -import java.util.UUID; import mage.MageInt; -import mage.abilities.Ability; import mage.abilities.common.BecomesTappedSourceTriggeredAbility; import mage.abilities.effects.common.counter.AddCountersSourceEffect; import mage.cards.CardImpl; @@ -12,22 +9,25 @@ import mage.constants.CardType; import mage.constants.SubType; import mage.counters.CounterType; +import java.util.UUID; + /** - * * @author Wehk */ public final class VeteranOfTheDepths extends CardImpl { public VeteranOfTheDepths(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{W}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{W}"); this.subtype.add(SubType.MERFOLK); this.subtype.add(SubType.SOLDIER); this.power = new MageInt(2); this.toughness = new MageInt(2); // Whenever Veteran of the Depths becomes tapped, you may put a +1/+1 counter on it. - Ability ability = new BecomesTappedSourceTriggeredAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance()), true); - this.addAbility(ability); + this.addAbility(new BecomesTappedSourceTriggeredAbility( + new AddCountersSourceEffect(CounterType.P1P1.createInstance()) + .setText("put a +1/+1 counter on it"), true + )); } private VeteranOfTheDepths(final VeteranOfTheDepths card) { @@ -38,4 +38,4 @@ public final class VeteranOfTheDepths extends CardImpl { public VeteranOfTheDepths copy() { return new VeteranOfTheDepths(this); } -} \ No newline at end of file +} diff --git a/Mage.Sets/src/mage/cards/v/Vigor.java b/Mage.Sets/src/mage/cards/v/Vigor.java index 22ccb02da7..1d62170daf 100644 --- a/Mage.Sets/src/mage/cards/v/Vigor.java +++ b/Mage.Sets/src/mage/cards/v/Vigor.java @@ -57,7 +57,7 @@ class VigorReplacementEffect extends ReplacementEffectImpl { VigorReplacementEffect() { super(Duration.WhileOnBattlefield, Outcome.BoostCreature); - staticText = "If damage would be dealt to a creature you control other than {this}, prevent that damage. Put a +1/+1 counter on that creature for each 1 damage prevented this way"; + staticText = "if damage would be dealt to another creature you control, prevent that damage. Put a +1/+1 counter on that creature for each 1 damage prevented this way"; } VigorReplacementEffect(final VigorReplacementEffect effect) { diff --git a/Mage.Sets/src/mage/cards/w/WellgabberApothecary.java b/Mage.Sets/src/mage/cards/w/WellgabberApothecary.java index 957b1d5d09..e73aec31ea 100644 --- a/Mage.Sets/src/mage/cards/w/WellgabberApothecary.java +++ b/Mage.Sets/src/mage/cards/w/WellgabberApothecary.java @@ -23,7 +23,7 @@ import mage.target.common.TargetCreaturePermanent; */ public final class WellgabberApothecary extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("target tapped Merfolk or Kithkin creature this turn"); + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("tapped Merfolk or Kithkin creature"); static { filter.add(TappedPredicate.TAPPED); diff --git a/Mage.Sets/src/mage/cards/w/WingsOfVelisVel.java b/Mage.Sets/src/mage/cards/w/WingsOfVelisVel.java index 9d13d2df67..573c1477dc 100644 --- a/Mage.Sets/src/mage/cards/w/WingsOfVelisVel.java +++ b/Mage.Sets/src/mage/cards/w/WingsOfVelisVel.java @@ -28,11 +28,11 @@ public final class WingsOfVelisVel extends CardImpl { // Target creature becomes 4/4, gains all creature types, and gains flying until end of turn. this.getSpellAbility().addEffect(new SetPowerToughnessTargetEffect(4, 4, Duration.EndOfTurn) - .setText("Target creature becomes 4/4")); + .setText("Until end of turn, target creature has base power and toughness 4/4")); this.getSpellAbility().addEffect(new GainAllCreatureTypesTargetEffect(Duration.EndOfTurn) .setText(", gains all creature types")); this.getSpellAbility().addEffect(new GainAbilityTargetEffect(FlyingAbility.getInstance(), Duration.EndOfTurn) - .setText(", and gains flying until end of turn")); + .setText(", and gains flying")); this.getSpellAbility().addTarget(new TargetCreaturePermanent()); } diff --git a/Mage.Sets/src/mage/cards/w/WortBoggartAuntie.java b/Mage.Sets/src/mage/cards/w/WortBoggartAuntie.java index c685f4e50f..5383ae4645 100644 --- a/Mage.Sets/src/mage/cards/w/WortBoggartAuntie.java +++ b/Mage.Sets/src/mage/cards/w/WortBoggartAuntie.java @@ -1,11 +1,9 @@ - package mage.cards.w; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; -import mage.abilities.effects.common.ReturnToHandTargetEffect; +import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect; import mage.abilities.keyword.FearAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; @@ -16,8 +14,9 @@ import mage.constants.TargetController; import mage.filter.FilterCard; import mage.target.common.TargetCardInYourGraveyard; +import java.util.UUID; + /** - * * @author Loki */ public final class WortBoggartAuntie extends CardImpl { @@ -29,7 +28,7 @@ public final class WortBoggartAuntie extends CardImpl { } public WortBoggartAuntie(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{B}{R}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{B}{R}"); addSuperType(SuperType.LEGENDARY); this.subtype.add(SubType.GOBLIN); this.subtype.add(SubType.SHAMAN); @@ -40,7 +39,9 @@ public final class WortBoggartAuntie extends CardImpl { this.addAbility(FearAbility.getInstance()); // At the beginning of your upkeep, you may return target Goblin card from your graveyard to your hand. - Ability ability = new BeginningOfUpkeepTriggeredAbility(new ReturnToHandTargetEffect(), TargetController.YOU, true); + Ability ability = new BeginningOfUpkeepTriggeredAbility( + new ReturnFromGraveyardToHandTargetEffect(), TargetController.YOU, true + ); ability.addTarget(new TargetCardInYourGraveyard(filter)); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/w/WrensRunPackmaster.java b/Mage.Sets/src/mage/cards/w/WrensRunPackmaster.java index f8dd682a04..e9b17d621a 100644 --- a/Mage.Sets/src/mage/cards/w/WrensRunPackmaster.java +++ b/Mage.Sets/src/mage/cards/w/WrensRunPackmaster.java @@ -1,36 +1,32 @@ - package mage.cards.w; -import java.util.UUID; import mage.MageInt; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.costs.mana.ManaCostsImpl; -import mage.abilities.effects.Effect; import mage.abilities.effects.common.CreateTokenEffect; -import mage.abilities.effects.common.continuous.GainAbilityAllEffect; +import mage.abilities.effects.common.continuous.GainAbilityControlledEffect; import mage.abilities.keyword.ChampionAbility; import mage.abilities.keyword.DeathtouchAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; -import mage.constants.*; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.SubType; import mage.filter.FilterPermanent; import mage.game.permanent.token.WolfToken; +import java.util.UUID; + /** - * * @author emerald000 */ public final class WrensRunPackmaster extends CardImpl { - - private static final FilterPermanent filter = new FilterPermanent("Wolf"); - static { - filter.add(TargetController.YOU.getControllerPredicate()); - filter.add(SubType.WOLF.getPredicate()); - } + + private static final FilterPermanent filter = new FilterPermanent(SubType.WOLF, "Wolves"); public WrensRunPackmaster(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.ELF); this.subtype.add(SubType.WARRIOR); @@ -39,14 +35,16 @@ public final class WrensRunPackmaster extends CardImpl { // Champion an Elf this.addAbility(new ChampionAbility(this, SubType.ELF, false)); - + // {2}{G}: Create a 2/2 green Wolf creature token. - this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new CreateTokenEffect(new WolfToken()), new ManaCostsImpl<>("{2}{G}"))); - + this.addAbility(new SimpleActivatedAbility( + new CreateTokenEffect(new WolfToken()), new ManaCostsImpl<>("{2}{G}") + )); + // Each Wolf you control has deathtouch. - Effect effect = new GainAbilityAllEffect(DeathtouchAbility.getInstance(), Duration.WhileOnBattlefield, filter); - effect.setText("Each Wolf you control has deathtouch"); - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, effect)); + this.addAbility(new SimpleStaticAbility(new GainAbilityControlledEffect( + DeathtouchAbility.getInstance(), Duration.WhileOnBattlefield, filter + ))); } private WrensRunPackmaster(final WrensRunPackmaster card) { diff --git a/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java b/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java index edb4950b8d..3842df282f 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 = "M10"; // check all abilities and output cards with wrong abilities texts; + private static final String FULL_ABILITIES_CHECK_SET_CODE = "LRW"; // 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/effects/common/combat/CanBlockAdditionalCreatureEffect.java b/Mage/src/main/java/mage/abilities/effects/common/combat/CanBlockAdditionalCreatureEffect.java index 242dc77603..a2e4f73f2b 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/combat/CanBlockAdditionalCreatureEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/combat/CanBlockAdditionalCreatureEffect.java @@ -12,7 +12,6 @@ import mage.game.permanent.Permanent; import mage.util.CardUtil; /** - * * @author LevelX2 */ public class CanBlockAdditionalCreatureEffect extends ContinuousEffectImpl { @@ -69,21 +68,21 @@ public class CanBlockAdditionalCreatureEffect extends ContinuousEffectImpl { } private String setText() { - String text = "{this} can block "; - switch (amount) { - case 0: - text += "any number of creatures"; - break; - default: - text += CardUtil.numberToText(amount, "an") + " additional creature" + (amount > 1 ? "s" : ""); + StringBuilder sb = new StringBuilder("{this} can block "); + if (amount == 0) { + sb.append("any number of creatures"); + } else { + sb.append(CardUtil.numberToText(amount, "an")); + sb.append(" additional creature"); + sb.append((amount > 1 ? "s" : "")); } if (duration == Duration.EndOfTurn) { - text += " this turn"; + sb.append(" this turn"); } - if (duration == Duration.WhileOnBattlefield) { - text += " each combat"; + if (duration == Duration.WhileOnBattlefield && amount == 1) { + sb.append(" each combat"); } - return text; + return sb.toString(); } @Override diff --git a/Mage/src/main/java/mage/abilities/effects/common/combat/CantBeBlockedByOneEffect.java b/Mage/src/main/java/mage/abilities/effects/common/combat/CantBeBlockedByOneEffect.java index 326af72f95..7ee7bc31c5 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/combat/CantBeBlockedByOneEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/combat/CantBeBlockedByOneEffect.java @@ -1,17 +1,16 @@ - package mage.abilities.effects.common.combat; +import mage.abilities.Ability; +import mage.abilities.effects.ContinuousEffectImpl; import mage.constants.Duration; import mage.constants.Layer; import mage.constants.Outcome; import mage.constants.SubLayer; -import mage.abilities.Ability; -import mage.abilities.effects.ContinuousEffectImpl; import mage.game.Game; import mage.game.permanent.Permanent; +import mage.util.CardUtil; /** - * * @author North */ public class CantBeBlockedByOneEffect extends ContinuousEffectImpl { @@ -23,9 +22,9 @@ public class CantBeBlockedByOneEffect extends ContinuousEffectImpl { } public CantBeBlockedByOneEffect(int amount, Duration duration) { - super(duration, Outcome.Benefit); + super(duration, Layer.RulesEffects, SubLayer.NA, Outcome.Benefit); this.amount = amount; - staticText = "{this} can't be blocked except by " + amount + " or more creatures"; + staticText = "{this} can't be blocked except by " + CardUtil.numberToText(amount) + " or more creatures"; } public CantBeBlockedByOneEffect(final CantBeBlockedByOneEffect effect) { @@ -39,26 +38,12 @@ public class CantBeBlockedByOneEffect extends ContinuousEffectImpl { } @Override - public boolean apply(Layer layer, SubLayer sublayer, Ability source, Game game) { - Permanent perm = game.getPermanent(source.getSourceId()); + public boolean apply(Game game, Ability source) { + Permanent perm = source.getSourcePermanentIfItStillExists(game); if (perm != null) { - switch (layer) { - case RulesEffects: - perm.setMinBlockedBy(amount); - break; - } + perm.setMinBlockedBy(amount); return true; } return false; } - - @Override - public boolean apply(Game game, Ability source) { - return false; - } - - @Override - public boolean hasLayer(Layer layer) { - return layer == Layer.RulesEffects; - } -} \ No newline at end of file +}