From afec3086da1f33a757fd299297c1645df26d20d3 Mon Sep 17 00:00:00 2001 From: PurpleCrowbar <26198472+PurpleCrowbar@users.noreply.github.com> Date: Wed, 2 Nov 2022 01:48:53 +0000 Subject: [PATCH 1/2] [BRO] Implement Ashnod, Flesh Mechanist --- .../mage/cards/a/AshnodFleshMechanist.java | 76 +++++++++++++++++++ Mage.Sets/src/mage/sets/TheBrothersWar.java | 1 + .../permanent/token/AshnodZombieToken.java | 30 ++++++++ 3 files changed, 107 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/a/AshnodFleshMechanist.java create mode 100644 Mage/src/main/java/mage/game/permanent/token/AshnodZombieToken.java diff --git a/Mage.Sets/src/mage/cards/a/AshnodFleshMechanist.java b/Mage.Sets/src/mage/cards/a/AshnodFleshMechanist.java new file mode 100644 index 0000000000..ee87c5bcbe --- /dev/null +++ b/Mage.Sets/src/mage/cards/a/AshnodFleshMechanist.java @@ -0,0 +1,76 @@ +package mage.cards.a; + +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.AttacksTriggeredAbility; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.ExileFromGraveCost; +import mage.abilities.costs.common.SacrificeTargetCost; +import mage.abilities.costs.mana.GenericManaCost; +import mage.abilities.effects.common.CreateTokenEffect; +import mage.abilities.effects.common.DoIfCostPaid; +import mage.abilities.keyword.DeathtouchAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.SubType; +import mage.constants.SuperType; +import mage.filter.StaticFilters; +import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.common.FilterControlledPermanent; +import mage.filter.predicate.mageobject.AnotherPredicate; +import mage.game.permanent.token.AshnodZombieToken; +import mage.game.permanent.token.PowerstoneToken; +import mage.target.common.TargetCardInYourGraveyard; +import mage.target.common.TargetControlledPermanent; + +import java.util.UUID; + +/** + * @author PurpleCrowbar + */ +public final class AshnodFleshMechanist extends CardImpl { + + private static final FilterControlledPermanent filter + = new FilterControlledCreaturePermanent("another creature"); + + static { + filter.add(AnotherPredicate.instance); + } + + public AshnodFleshMechanist(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{B}"); + this.addSuperType(SuperType.LEGENDARY); + this.subtype.add(SubType.HUMAN, SubType.ARTIFICER); + this.power = new MageInt(1); + this.toughness = new MageInt(1); + + // Deathtouch + this.addAbility(DeathtouchAbility.getInstance()); + + // Whenever Ashnod, Flesh Mechanist attacks, you may sacrifice another creature. If you do, create a tapped Powerstone token. + this.addAbility(new AttacksTriggeredAbility( + new DoIfCostPaid( + new CreateTokenEffect( + new PowerstoneToken(), 1, true, false + ), new SacrificeTargetCost(new TargetControlledPermanent(filter)) + ), false + )); + + // {5}, Exile a creature card from your graveyard: Create a tapped 3/3 colorless Zombie artifact creature token. + Ability ability = new SimpleActivatedAbility( + new CreateTokenEffect(new AshnodZombieToken(), 1, true, false), new GenericManaCost(5) + ); + ability.addCost(new ExileFromGraveCost(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_CREATURE_A))); + this.addAbility(ability); + } + + private AshnodFleshMechanist(final AshnodFleshMechanist card) { + super(card); + } + + @Override + public AshnodFleshMechanist copy() { + return new AshnodFleshMechanist(this); + } +} diff --git a/Mage.Sets/src/mage/sets/TheBrothersWar.java b/Mage.Sets/src/mage/sets/TheBrothersWar.java index 609ed8edda..22c2690f30 100644 --- a/Mage.Sets/src/mage/sets/TheBrothersWar.java +++ b/Mage.Sets/src/mage/sets/TheBrothersWar.java @@ -29,6 +29,7 @@ public final class TheBrothersWar extends ExpansionSet { cards.add(new SetCardInfo("Arcane Proxy", 75, Rarity.MYTHIC, mage.cards.a.ArcaneProxy.class)); cards.add(new SetCardInfo("Argoth, Sanctum of Nature", "256a", Rarity.RARE, mage.cards.a.ArgothSanctumOfNature.class)); cards.add(new SetCardInfo("Argothian Opportunist", 167, Rarity.COMMON, mage.cards.a.ArgothianOpportunist.class)); + cards.add(new SetCardInfo("Ashnod, Flesh Mechanist", 84, Rarity.RARE, mage.cards.a.AshnodFleshMechanist.class)); cards.add(new SetCardInfo("Ashnod's Harvester", 117, Rarity.UNCOMMON, mage.cards.a.AshnodsHarvester.class)); cards.add(new SetCardInfo("Audacity", 169, Rarity.UNCOMMON, mage.cards.a.Audacity.class)); cards.add(new SetCardInfo("Battlefield Forge", 257, Rarity.RARE, mage.cards.b.BattlefieldForge.class)); diff --git a/Mage/src/main/java/mage/game/permanent/token/AshnodZombieToken.java b/Mage/src/main/java/mage/game/permanent/token/AshnodZombieToken.java new file mode 100644 index 0000000000..577ba020d3 --- /dev/null +++ b/Mage/src/main/java/mage/game/permanent/token/AshnodZombieToken.java @@ -0,0 +1,30 @@ +package mage.game.permanent.token; + +import mage.MageInt; +import mage.constants.CardType; +import mage.constants.SubType; + +/** + * @author PurpleCrowbar + */ +public final class AshnodZombieToken extends TokenImpl { + + public AshnodZombieToken() { + super("Zombie Token", "3/3 colorless Zombie artifact creature token"); + cardType.add(CardType.ARTIFACT); + cardType.add(CardType.CREATURE); + subtype.add(SubType.ZOMBIE); + power = new MageInt(3); + toughness = new MageInt(3); + + setOriginalExpansionSetCode("BRO"); + } + + public AshnodZombieToken(final AshnodZombieToken token) { + super(token); + } + + public AshnodZombieToken copy() { + return new AshnodZombieToken(this); + } +} From cac4ac13e09dea5f349965326b869d3ed4ba97b1 Mon Sep 17 00:00:00 2001 From: PurpleCrowbar <26198472+PurpleCrowbar@users.noreply.github.com> Date: Thu, 3 Nov 2022 01:53:04 +0000 Subject: [PATCH 2/2] Standardise use of static filter for "sacrifice another creature" effects --- Mage.Sets/src/mage/cards/a/AhnCropInvader.java | 13 ++----------- Mage.Sets/src/mage/cards/a/ApocalypseDemon.java | 11 ++--------- .../src/mage/cards/a/AshnodFleshMechanist.java | 12 +----------- .../src/mage/cards/b/BloodmistInfiltrator.java | 13 ++----------- .../src/mage/cards/b/BogardanDragonheart.java | 13 ++----------- Mage.Sets/src/mage/cards/c/CavalierOfNight.java | 15 +++++---------- .../src/mage/cards/d/DemonlordOfAshmouth.java | 15 ++++++--------- Mage.Sets/src/mage/cards/f/FiendArtisan.java | 11 +---------- Mage.Sets/src/mage/cards/g/GiftOfDoom.java | 10 ++-------- .../src/mage/cards/u/UndercityNecrolisk.java | 14 ++------------ .../src/mage/cards/u/UndercityScavenger.java | 12 ++---------- Mage.Sets/src/mage/cards/w/WoeStrider.java | 13 ++----------- 12 files changed, 29 insertions(+), 123 deletions(-) diff --git a/Mage.Sets/src/mage/cards/a/AhnCropInvader.java b/Mage.Sets/src/mage/cards/a/AhnCropInvader.java index c23fbdf0b8..ba881a3eda 100644 --- a/Mage.Sets/src/mage/cards/a/AhnCropInvader.java +++ b/Mage.Sets/src/mage/cards/a/AhnCropInvader.java @@ -18,9 +18,7 @@ import mage.constants.CardType; import mage.constants.Duration; import mage.constants.SubType; import mage.constants.Zone; -import mage.filter.common.FilterControlledCreaturePermanent; -import mage.filter.common.FilterControlledPermanent; -import mage.filter.predicate.mageobject.AnotherPredicate; +import mage.filter.StaticFilters; import mage.target.common.TargetControlledPermanent; import java.util.UUID; @@ -30,13 +28,6 @@ import java.util.UUID; */ public final class AhnCropInvader extends CardImpl { - private static final FilterControlledPermanent filter - = new FilterControlledCreaturePermanent("another creature"); - - static { - filter.add(AnotherPredicate.instance); - } - public AhnCropInvader(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{R}"); @@ -63,7 +54,7 @@ public final class AhnCropInvader extends CardImpl { Ability ability = new SimpleActivatedAbility( new BoostSourceEffect(2, 0, Duration.EndOfTurn), new GenericManaCost(1) ); - ability.addCost(new SacrificeTargetCost(new TargetControlledPermanent(filter))); + ability.addCost(new SacrificeTargetCost(new TargetControlledPermanent(StaticFilters.FILTER_CONTROLLED_ANOTHER_CREATURE))); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/a/ApocalypseDemon.java b/Mage.Sets/src/mage/cards/a/ApocalypseDemon.java index cee725b9e7..a565eab7b9 100644 --- a/Mage.Sets/src/mage/cards/a/ApocalypseDemon.java +++ b/Mage.Sets/src/mage/cards/a/ApocalypseDemon.java @@ -12,8 +12,7 @@ import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.*; -import mage.filter.common.FilterControlledCreaturePermanent; -import mage.filter.predicate.mageobject.AnotherPredicate; +import mage.filter.StaticFilters; import mage.target.common.TargetControlledPermanent; /** @@ -22,12 +21,6 @@ import mage.target.common.TargetControlledPermanent; */ public final class ApocalypseDemon extends CardImpl { - private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("another creature"); - - static { - filter.add(AnotherPredicate.instance); - } - public ApocalypseDemon(UUID ownerId, CardSetInfo cardSetInfo) { super(ownerId, cardSetInfo, new CardType[]{CardType.CREATURE}, "{4}{B}{B}"); subtype.add(SubType.DEMON); @@ -39,7 +32,7 @@ public final class ApocalypseDemon extends CardImpl { this.addAbility(new SimpleStaticAbility(Zone.ALL, new SetBasePowerToughnessSourceEffect(new CardsInControllerGraveyardCount(), Duration.EndOfGame))); // At the beginning of your upkeep, tap Apocalypse Demon unless you sacrifice another creature. - TapSourceUnlessPaysEffect tapEffect = new TapSourceUnlessPaysEffect(new SacrificeTargetCost(new TargetControlledPermanent(filter))); + TapSourceUnlessPaysEffect tapEffect = new TapSourceUnlessPaysEffect(new SacrificeTargetCost(new TargetControlledPermanent(StaticFilters.FILTER_CONTROLLED_ANOTHER_CREATURE))); tapEffect.setText("tap {this} unless you sacrifice another creature."); this.addAbility(new BeginningOfUpkeepTriggeredAbility(tapEffect, TargetController.YOU, false)); } diff --git a/Mage.Sets/src/mage/cards/a/AshnodFleshMechanist.java b/Mage.Sets/src/mage/cards/a/AshnodFleshMechanist.java index ee87c5bcbe..d7fc5576eb 100644 --- a/Mage.Sets/src/mage/cards/a/AshnodFleshMechanist.java +++ b/Mage.Sets/src/mage/cards/a/AshnodFleshMechanist.java @@ -16,9 +16,6 @@ import mage.constants.CardType; import mage.constants.SubType; import mage.constants.SuperType; import mage.filter.StaticFilters; -import mage.filter.common.FilterControlledCreaturePermanent; -import mage.filter.common.FilterControlledPermanent; -import mage.filter.predicate.mageobject.AnotherPredicate; import mage.game.permanent.token.AshnodZombieToken; import mage.game.permanent.token.PowerstoneToken; import mage.target.common.TargetCardInYourGraveyard; @@ -31,13 +28,6 @@ import java.util.UUID; */ public final class AshnodFleshMechanist extends CardImpl { - private static final FilterControlledPermanent filter - = new FilterControlledCreaturePermanent("another creature"); - - static { - filter.add(AnotherPredicate.instance); - } - public AshnodFleshMechanist(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{B}"); this.addSuperType(SuperType.LEGENDARY); @@ -53,7 +43,7 @@ public final class AshnodFleshMechanist extends CardImpl { new DoIfCostPaid( new CreateTokenEffect( new PowerstoneToken(), 1, true, false - ), new SacrificeTargetCost(new TargetControlledPermanent(filter)) + ), new SacrificeTargetCost(new TargetControlledPermanent(StaticFilters.FILTER_CONTROLLED_ANOTHER_CREATURE)) ), false )); diff --git a/Mage.Sets/src/mage/cards/b/BloodmistInfiltrator.java b/Mage.Sets/src/mage/cards/b/BloodmistInfiltrator.java index ddf7cf9147..22216e76ba 100644 --- a/Mage.Sets/src/mage/cards/b/BloodmistInfiltrator.java +++ b/Mage.Sets/src/mage/cards/b/BloodmistInfiltrator.java @@ -10,9 +10,7 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Duration; import mage.constants.SubType; -import mage.filter.common.FilterControlledCreaturePermanent; -import mage.filter.common.FilterControlledPermanent; -import mage.filter.predicate.mageobject.AnotherPredicate; +import mage.filter.StaticFilters; import mage.target.common.TargetControlledPermanent; import java.util.UUID; @@ -22,13 +20,6 @@ import java.util.UUID; */ public final class BloodmistInfiltrator extends CardImpl { - private static final FilterControlledPermanent filter - = new FilterControlledCreaturePermanent("another creature"); - - static { - filter.add(AnotherPredicate.instance); - } - public BloodmistInfiltrator(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{B}"); @@ -39,7 +30,7 @@ public final class BloodmistInfiltrator extends CardImpl { // Whenever Bloodmist Infiltrator attacks, you may sacrifice another creature. If you do, Bloodmist Infiltrator can't be blocked this turn. this.addAbility(new AttacksTriggeredAbility(new DoIfCostPaid( new CantBeBlockedSourceEffect(Duration.EndOfTurn), - new SacrificeTargetCost(new TargetControlledPermanent(filter)) + new SacrificeTargetCost(new TargetControlledPermanent(StaticFilters.FILTER_CONTROLLED_ANOTHER_CREATURE)) ), false)); } diff --git a/Mage.Sets/src/mage/cards/b/BogardanDragonheart.java b/Mage.Sets/src/mage/cards/b/BogardanDragonheart.java index c788d89a1c..23366dc85e 100644 --- a/Mage.Sets/src/mage/cards/b/BogardanDragonheart.java +++ b/Mage.Sets/src/mage/cards/b/BogardanDragonheart.java @@ -11,9 +11,7 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Duration; import mage.constants.SubType; -import mage.filter.common.FilterControlledCreaturePermanent; -import mage.filter.common.FilterControlledPermanent; -import mage.filter.predicate.mageobject.AnotherPredicate; +import mage.filter.StaticFilters; import mage.game.permanent.token.TokenImpl; import mage.target.common.TargetControlledPermanent; @@ -24,13 +22,6 @@ import java.util.UUID; */ public final class BogardanDragonheart extends CardImpl { - private static final FilterControlledPermanent filter - = new FilterControlledCreaturePermanent("another creature"); - - static { - filter.add(AnotherPredicate.instance); - } - public BogardanDragonheart(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{R}"); @@ -43,7 +34,7 @@ public final class BogardanDragonheart extends CardImpl { this.addAbility(new SimpleActivatedAbility(new BecomesCreatureSourceEffect( new BogardanDragonheartToken(), null, Duration.EndOfTurn, false, false, null, null, false - ), new SacrificeTargetCost(new TargetControlledPermanent(filter)))); + ), new SacrificeTargetCost(new TargetControlledPermanent(StaticFilters.FILTER_CONTROLLED_ANOTHER_CREATURE)))); } private BogardanDragonheart(final BogardanDragonheart card) { diff --git a/Mage.Sets/src/mage/cards/c/CavalierOfNight.java b/Mage.Sets/src/mage/cards/c/CavalierOfNight.java index 6c0ab003f5..231879c76d 100644 --- a/Mage.Sets/src/mage/cards/c/CavalierOfNight.java +++ b/Mage.Sets/src/mage/cards/c/CavalierOfNight.java @@ -16,11 +16,9 @@ import mage.constants.CardType; import mage.constants.ComparisonType; import mage.constants.SubType; import mage.filter.FilterCard; -import mage.filter.common.FilterControlledCreaturePermanent; -import mage.filter.common.FilterControlledPermanent; +import mage.filter.StaticFilters; import mage.filter.common.FilterCreatureCard; import mage.filter.predicate.mageobject.ManaValuePredicate; -import mage.filter.predicate.mageobject.AnotherPredicate; import mage.target.common.TargetCardInYourGraveyard; import mage.target.common.TargetControlledPermanent; import mage.target.common.TargetOpponentsCreaturePermanent; @@ -32,14 +30,11 @@ import java.util.UUID; */ public final class CavalierOfNight extends CardImpl { - private static final FilterControlledPermanent filter - = new FilterControlledCreaturePermanent("another creature"); - private static final FilterCard filter2 + private static final FilterCard filter = new FilterCreatureCard("creature card with mana value 3 or less from your graveyard"); static { - filter.add(AnotherPredicate.instance); - filter2.add(new ManaValuePredicate(ComparisonType.FEWER_THAN, 4)); + filter.add(new ManaValuePredicate(ComparisonType.FEWER_THAN, 4)); } public CavalierOfNight(UUID ownerId, CardSetInfo setInfo) { @@ -59,13 +54,13 @@ public final class CavalierOfNight extends CardImpl { ); triggeredAbility.addTarget(new TargetOpponentsCreaturePermanent()); this.addAbility(new EntersBattlefieldTriggeredAbility(new DoWhenCostPaid( - triggeredAbility, new SacrificeTargetCost(new TargetControlledPermanent(filter)), + triggeredAbility, new SacrificeTargetCost(new TargetControlledPermanent(StaticFilters.FILTER_CONTROLLED_ANOTHER_CREATURE)), "Sacrifice a creature?" ))); // When Cavalier of Night dies, return target creature card with converted mana cost 3 or less from your graveyard to the battlefield. Ability ability = new DiesSourceTriggeredAbility(new ReturnFromGraveyardToBattlefieldTargetEffect()); - ability.addTarget(new TargetCardInYourGraveyard(filter2)); + ability.addTarget(new TargetCardInYourGraveyard(filter)); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/d/DemonlordOfAshmouth.java b/Mage.Sets/src/mage/cards/d/DemonlordOfAshmouth.java index b059b1f5fb..25d77f149c 100644 --- a/Mage.Sets/src/mage/cards/d/DemonlordOfAshmouth.java +++ b/Mage.Sets/src/mage/cards/d/DemonlordOfAshmouth.java @@ -12,8 +12,7 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; -import mage.filter.common.FilterControlledCreaturePermanent; -import mage.filter.predicate.mageobject.AnotherPredicate; +import mage.filter.StaticFilters; import mage.target.common.TargetControlledPermanent; /** @@ -21,12 +20,6 @@ import mage.target.common.TargetControlledPermanent; */ public final class DemonlordOfAshmouth extends CardImpl { - private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent(" another creature"); - - static { - filter.add(AnotherPredicate.instance); - } - public DemonlordOfAshmouth(UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{B}{B}"); this.subtype.add(SubType.DEMON); @@ -37,7 +30,11 @@ public final class DemonlordOfAshmouth extends CardImpl { this.addAbility(FlyingAbility.getInstance()); // When Demonlord of Ashmouth enters the battlefield, exile it unless you sacrifice another creature. - this.addAbility(new EntersBattlefieldTriggeredAbility(new ExileSourceUnlessPaysEffect(new SacrificeTargetCost(new TargetControlledPermanent(filter))))); + this.addAbility(new EntersBattlefieldTriggeredAbility( + new ExileSourceUnlessPaysEffect( + new SacrificeTargetCost(new TargetControlledPermanent(StaticFilters.FILTER_CONTROLLED_ANOTHER_CREATURE)) + ) + )); this.addAbility(new UndyingAbility()); } diff --git a/Mage.Sets/src/mage/cards/f/FiendArtisan.java b/Mage.Sets/src/mage/cards/f/FiendArtisan.java index b148f328a2..9be419edc3 100644 --- a/Mage.Sets/src/mage/cards/f/FiendArtisan.java +++ b/Mage.Sets/src/mage/cards/f/FiendArtisan.java @@ -17,11 +17,8 @@ import mage.cards.CardSetInfo; import mage.constants.*; import mage.filter.FilterCard; import mage.filter.StaticFilters; -import mage.filter.common.FilterControlledCreaturePermanent; -import mage.filter.common.FilterControlledPermanent; import mage.filter.common.FilterCreatureCard; import mage.filter.predicate.mageobject.ManaValuePredicate; -import mage.filter.predicate.mageobject.AnotherPredicate; import mage.game.Game; import mage.target.common.TargetCardInLibrary; import mage.target.common.TargetControlledPermanent; @@ -35,12 +32,6 @@ public final class FiendArtisan extends CardImpl { private static final DynamicValue xValue = new CardsInControllerGraveyardCount(StaticFilters.FILTER_CARD_CREATURE); - private static final FilterControlledPermanent filter - = new FilterControlledCreaturePermanent("another creature"); - - static { - filter.add(AnotherPredicate.instance); - } public FiendArtisan(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{B/G}{B/G}"); @@ -59,7 +50,7 @@ public final class FiendArtisan extends CardImpl { Zone.BATTLEFIELD, new FiendArtisanEffect(), new ManaCostsImpl<>("{X}{B/G}") ); ability.addCost(new TapSourceCost()); - ability.addCost(new SacrificeTargetCost(new TargetControlledPermanent(filter))); + ability.addCost(new SacrificeTargetCost(new TargetControlledPermanent(StaticFilters.FILTER_CONTROLLED_ANOTHER_CREATURE))); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/g/GiftOfDoom.java b/Mage.Sets/src/mage/cards/g/GiftOfDoom.java index 6529f8f564..58e8e7e208 100644 --- a/Mage.Sets/src/mage/cards/g/GiftOfDoom.java +++ b/Mage.Sets/src/mage/cards/g/GiftOfDoom.java @@ -15,7 +15,7 @@ import mage.abilities.keyword.MorphAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.*; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.StaticFilters; import mage.filter.common.FilterCreaturePermanent; import mage.filter.predicate.mageobject.AnotherPredicate; import mage.game.Game; @@ -35,12 +35,6 @@ import static mage.constants.Outcome.Benefit; */ public final class GiftOfDoom extends CardImpl { - private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent(); - - static { - filter.add(AnotherPredicate.instance); - } - public GiftOfDoom(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{4}{B}"); @@ -65,7 +59,7 @@ public final class GiftOfDoom extends CardImpl { // Morph—Sacrifice another creature. this.addAbility(new MorphAbility(new SacrificeTargetCost( - new TargetControlledPermanent(filter) + new TargetControlledPermanent(StaticFilters.FILTER_CONTROLLED_ANOTHER_CREATURE) ))); // As Gift of Doom is turned face up, you may attach it to a creature. diff --git a/Mage.Sets/src/mage/cards/u/UndercityNecrolisk.java b/Mage.Sets/src/mage/cards/u/UndercityNecrolisk.java index 67666a6298..7373f1eac1 100644 --- a/Mage.Sets/src/mage/cards/u/UndercityNecrolisk.java +++ b/Mage.Sets/src/mage/cards/u/UndercityNecrolisk.java @@ -4,7 +4,6 @@ import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.ActivatedAbilityImpl; -import mage.abilities.common.ActivateAsSorceryActivatedAbility; import mage.abilities.costs.Cost; import mage.abilities.costs.common.SacrificeTargetCost; import mage.abilities.costs.mana.GenericManaCost; @@ -16,9 +15,7 @@ import mage.constants.*; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.counters.CounterType; -import mage.filter.common.FilterControlledCreaturePermanent; -import mage.filter.common.FilterControlledPermanent; -import mage.filter.predicate.mageobject.AnotherPredicate; +import mage.filter.StaticFilters; import mage.target.common.TargetControlledPermanent; /** @@ -27,13 +24,6 @@ import mage.target.common.TargetControlledPermanent; */ public final class UndercityNecrolisk extends CardImpl { - private static final FilterControlledPermanent filter - = new FilterControlledCreaturePermanent("another creature"); - - static { - filter.add(AnotherPredicate.instance); - } - public UndercityNecrolisk(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{B}"); @@ -50,7 +40,7 @@ public final class UndercityNecrolisk extends CardImpl { new GenericManaCost(1) ); ability.addCost(new SacrificeTargetCost( - new TargetControlledPermanent(filter) + new TargetControlledPermanent(StaticFilters.FILTER_CONTROLLED_ANOTHER_CREATURE) )); // It gains menace until end of turn. Activate this ability only any time you could cast a sorcery. ability.addEffect(new GainAbilitySourceEffect( diff --git a/Mage.Sets/src/mage/cards/u/UndercityScavenger.java b/Mage.Sets/src/mage/cards/u/UndercityScavenger.java index 22bf1616c1..f430dbf501 100644 --- a/Mage.Sets/src/mage/cards/u/UndercityScavenger.java +++ b/Mage.Sets/src/mage/cards/u/UndercityScavenger.java @@ -11,9 +11,7 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; import mage.counters.CounterType; -import mage.filter.common.FilterControlledCreaturePermanent; -import mage.filter.common.FilterControlledPermanent; -import mage.filter.predicate.mageobject.AnotherPredicate; +import mage.filter.StaticFilters; import mage.target.common.TargetControlledPermanent; import java.util.UUID; @@ -23,12 +21,6 @@ import java.util.UUID; */ public final class UndercityScavenger extends CardImpl { - private static final FilterControlledPermanent filter = new FilterControlledCreaturePermanent("another creature"); - - static { - filter.add(AnotherPredicate.instance); - } - public UndercityScavenger(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{B}"); @@ -40,7 +32,7 @@ public final class UndercityScavenger extends CardImpl { // When Undercity Scavenger enters the battlefield, you may sacrifice another creature. If you do, put two +1/+1 counters on Undercity Scavenger, then scry 2. this.addAbility(new EntersBattlefieldTriggeredAbility(new DoIfCostPaid( new AddCountersSourceEffect(CounterType.P1P1.createInstance(2)), - new SacrificeTargetCost(new TargetControlledPermanent(filter)) + new SacrificeTargetCost(new TargetControlledPermanent(StaticFilters.FILTER_CONTROLLED_ANOTHER_CREATURE)) ).addEffect(new ScryEffect(2).concatBy(", then")))); } diff --git a/Mage.Sets/src/mage/cards/w/WoeStrider.java b/Mage.Sets/src/mage/cards/w/WoeStrider.java index 5e22209de7..12bcbb0949 100644 --- a/Mage.Sets/src/mage/cards/w/WoeStrider.java +++ b/Mage.Sets/src/mage/cards/w/WoeStrider.java @@ -12,9 +12,7 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; -import mage.filter.common.FilterControlledCreaturePermanent; -import mage.filter.common.FilterControlledPermanent; -import mage.filter.predicate.mageobject.AnotherPredicate; +import mage.filter.StaticFilters; import mage.game.permanent.token.GoatToken; import mage.target.common.TargetControlledPermanent; @@ -25,13 +23,6 @@ import java.util.UUID; */ public final class WoeStrider extends CardImpl { - private static final FilterControlledPermanent filter - = new FilterControlledCreaturePermanent("another creature"); - - static { - filter.add(AnotherPredicate.instance); - } - public WoeStrider(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{B}"); @@ -44,7 +35,7 @@ public final class WoeStrider extends CardImpl { // Sacrifice another creature: Scry 1. this.addAbility(new SimpleActivatedAbility( - new ScryEffect(1, false), new SacrificeTargetCost(new TargetControlledPermanent(filter)) + new ScryEffect(1, false), new SacrificeTargetCost(new TargetControlledPermanent(StaticFilters.FILTER_CONTROLLED_ANOTHER_CREATURE)) )); // Escape—{3}{B}{B}, Exile four other cards from your graveyard.