diff --git a/Mage.Sets/src/mage/cards/c/CaradoraHeartOfAlacria.java b/Mage.Sets/src/mage/cards/c/CaradoraHeartOfAlacria.java index f7765cef735..2b93fbbe9ce 100644 --- a/Mage.Sets/src/mage/cards/c/CaradoraHeartOfAlacria.java +++ b/Mage.Sets/src/mage/cards/c/CaradoraHeartOfAlacria.java @@ -12,8 +12,7 @@ import mage.constants.SubType; import mage.constants.SuperType; import mage.counters.CounterType; import mage.filter.FilterCard; -import mage.filter.FilterPermanent; -import mage.filter.common.FilterControlledPermanent; +import mage.filter.StaticFilters; import mage.filter.predicate.Predicates; import mage.target.common.TargetCardInLibrary; @@ -25,17 +24,12 @@ import java.util.UUID; public final class CaradoraHeartOfAlacria extends CardImpl { private static final FilterCard filter = new FilterCard("Mount or Vehicle card"); - private static final FilterPermanent filter2 = new FilterControlledPermanent("creature or Vehicle you control"); static { filter.add(Predicates.or( SubType.MOUNT.getPredicate(), SubType.VEHICLE.getPredicate() )); - filter2.add(Predicates.or( - CardType.CREATURE.getPredicate(), - SubType.VEHICLE.getPredicate() - )); } public CaradoraHeartOfAlacria(UUID ownerId, CardSetInfo setInfo) { @@ -53,7 +47,7 @@ public final class CaradoraHeartOfAlacria extends CardImpl { )); // If one or more +1/+1 counters would be put on a creature or Vehicle you control, that many plus one +1/+1 counters are put on it instead. - this.addAbility(new SimpleStaticAbility(new ModifyCountersAddedEffect(filter2, CounterType.P1P1))); + this.addAbility(new SimpleStaticAbility(new ModifyCountersAddedEffect(StaticFilters.FILTER_CONTROLLED_PERMANENT_CREATURE_OR_VEHICLE, CounterType.P1P1))); } private CaradoraHeartOfAlacria(final CaradoraHeartOfAlacria card) { diff --git a/Mage.Sets/src/mage/cards/g/GraftedGrowth.java b/Mage.Sets/src/mage/cards/g/GraftedGrowth.java index cd1c7924aa8..fffcd0c7724 100644 --- a/Mage.Sets/src/mage/cards/g/GraftedGrowth.java +++ b/Mage.Sets/src/mage/cards/g/GraftedGrowth.java @@ -14,9 +14,7 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.*; import mage.counters.CounterType; -import mage.filter.FilterPermanent; -import mage.filter.common.FilterControlledPermanent; -import mage.filter.predicate.Predicates; +import mage.filter.StaticFilters; import mage.target.TargetPermanent; import mage.target.common.TargetLandPermanent; @@ -27,16 +25,6 @@ import java.util.UUID; */ public final class GraftedGrowth extends CardImpl { - private static final FilterPermanent filter - = new FilterControlledPermanent("creature or Vehicle you control"); - - static { - filter.add(Predicates.or( - CardType.CREATURE.getPredicate(), - SubType.VEHICLE.getPredicate() - )); - } - public GraftedGrowth(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{2}{G}"); @@ -52,7 +40,7 @@ public final class GraftedGrowth extends CardImpl { Ability ability = new EntersBattlefieldTriggeredAbility( new AddCountersTargetEffect(CounterType.P1P1.createInstance()) ); - ability.addTarget(new TargetPermanent(filter)); + ability.addTarget(new TargetPermanent(StaticFilters.FILTER_CONTROLLED_PERMANENT_CREATURE_OR_VEHICLE)); this.addAbility(ability); // Enchanted land has "{T}: Add two mana of any one color." diff --git a/Mage.Sets/src/mage/cards/p/PerilousSnare.java b/Mage.Sets/src/mage/cards/p/PerilousSnare.java new file mode 100644 index 00000000000..0163e0b0ba7 --- /dev/null +++ b/Mage.Sets/src/mage/cards/p/PerilousSnare.java @@ -0,0 +1,52 @@ +package mage.cards.p; + +import mage.abilities.Ability; +import mage.abilities.common.ActivateAsSorceryActivatedAbility; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.common.MaxSpeedAbility; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.effects.common.ExileUntilSourceLeavesEffect; +import mage.abilities.effects.common.counter.AddCountersTargetEffect; +import mage.abilities.keyword.StartYourEnginesAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.counters.CounterType; +import mage.filter.StaticFilters; +import mage.target.TargetPermanent; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class PerilousSnare extends CardImpl { + + public PerilousSnare(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{2}{W}"); + + // Start your engines! + this.addAbility(new StartYourEnginesAbility()); + + // When this artifact enters, exile target nonland permanent an opponent controls until this artifact leaves the battlefield. + Ability ability = new EntersBattlefieldTriggeredAbility(new ExileUntilSourceLeavesEffect()); + ability.addTarget(new TargetPermanent(StaticFilters.FILTER_OPPONENTS_PERMANENT_NON_LAND)); + this.addAbility(ability); + + // Max speed -- {T}: Put a +1/+1 counter on target creature or Vehicle you control. Activate only as a sorcery. + ability = new ActivateAsSorceryActivatedAbility( + new AddCountersTargetEffect(CounterType.P1P1.createInstance()), new TapSourceCost() + ); + ability.addTarget(new TargetPermanent(StaticFilters.FILTER_CONTROLLED_PERMANENT_CREATURE_OR_VEHICLE)); + this.addAbility(new MaxSpeedAbility(ability)); + } + + private PerilousSnare(final PerilousSnare card) { + super(card); + } + + @Override + public PerilousSnare copy() { + return new PerilousSnare(this); + } +} diff --git a/Mage.Sets/src/mage/cards/p/PrideOfTheRoad.java b/Mage.Sets/src/mage/cards/p/PrideOfTheRoad.java index 3bf89a5212b..410c1383a88 100644 --- a/Mage.Sets/src/mage/cards/p/PrideOfTheRoad.java +++ b/Mage.Sets/src/mage/cards/p/PrideOfTheRoad.java @@ -12,9 +12,7 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; -import mage.filter.FilterPermanent; -import mage.filter.common.FilterControlledPermanent; -import mage.filter.predicate.Predicates; +import mage.filter.StaticFilters; import mage.target.TargetPermanent; import java.util.UUID; @@ -24,15 +22,6 @@ import java.util.UUID; */ public final class PrideOfTheRoad extends CardImpl { - private static final FilterPermanent filter = new FilterControlledPermanent("creature or Vehicle you control"); - - static { - filter.add(Predicates.or( - CardType.CREATURE.getPredicate(), - SubType.VEHICLE.getPredicate() - )); - } - public PrideOfTheRoad(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{W}"); @@ -50,7 +39,7 @@ public final class PrideOfTheRoad extends CardImpl { // Max speed -- At the beginning of combat on your turn, target creature or Vehicle you control gains double strike until end of turn. Ability ability = new BeginningOfCombatTriggeredAbility(new GainAbilityTargetEffect(DoubleStrikeAbility.getInstance())); - ability.addTarget(new TargetPermanent(filter)); + ability.addTarget(new TargetPermanent(StaticFilters.FILTER_CONTROLLED_PERMANENT_CREATURE_OR_VEHICLE)); this.addAbility(new MaxSpeedAbility(ability)); } diff --git a/Mage.Sets/src/mage/cards/r/ReckonerShakedown.java b/Mage.Sets/src/mage/cards/r/ReckonerShakedown.java index 670a2c37251..0d616b47e77 100644 --- a/Mage.Sets/src/mage/cards/r/ReckonerShakedown.java +++ b/Mage.Sets/src/mage/cards/r/ReckonerShakedown.java @@ -7,12 +7,8 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Outcome; -import mage.constants.SubType; import mage.counters.CounterType; -import mage.filter.FilterPermanent; import mage.filter.StaticFilters; -import mage.filter.common.FilterControlledPermanent; -import mage.filter.predicate.Predicates; import mage.game.Game; import mage.game.permanent.Permanent; import mage.players.Player; @@ -48,15 +44,6 @@ public final class ReckonerShakedown extends CardImpl { class ReckonerShakedownEffect extends OneShotEffect { - private static final FilterPermanent filter = new FilterControlledPermanent("creature or Vehicle you control"); - - static { - filter.add(Predicates.or( - CardType.CREATURE.getPredicate(), - SubType.VEHICLE.getPredicate() - )); - } - ReckonerShakedownEffect() { super(Outcome.Benefit); staticText = "target opponent reveals their hand. You may choose a nonland card from it. " + @@ -88,10 +75,10 @@ class ReckonerShakedownEffect extends OneShotEffect { player.discard(card, false, source, game); return true; } - if (!game.getBattlefield().contains(filter, source, game, 1)) { + if (!game.getBattlefield().contains(StaticFilters.FILTER_CONTROLLED_PERMANENT_CREATURE_OR_VEHICLE, source, game, 1)) { return true; } - TargetPermanent targetPermanent = new TargetPermanent(filter); + TargetPermanent targetPermanent = new TargetPermanent(StaticFilters.FILTER_CONTROLLED_PERMANENT_CREATURE_OR_VEHICLE); targetPermanent.withNotTarget(true); controller.choose(Outcome.BoostCreature, targetPermanent, source, game); Permanent permanent = game.getPermanent(targetPermanent.getFirstTarget()); diff --git a/Mage.Sets/src/mage/cards/r/RoaringEarth.java b/Mage.Sets/src/mage/cards/r/RoaringEarth.java index 56dbbd2c758..1a1e6b03baf 100644 --- a/Mage.Sets/src/mage/cards/r/RoaringEarth.java +++ b/Mage.Sets/src/mage/cards/r/RoaringEarth.java @@ -13,10 +13,7 @@ import mage.constants.CardType; import mage.constants.Duration; import mage.constants.SubType; import mage.counters.CounterType; -import mage.filter.FilterPermanent; import mage.filter.StaticFilters; -import mage.filter.common.FilterControlledPermanent; -import mage.filter.predicate.Predicates; import mage.game.permanent.token.custom.CreatureToken; import mage.target.TargetPermanent; @@ -27,21 +24,12 @@ import java.util.UUID; */ public final class RoaringEarth extends CardImpl { - private static final FilterPermanent filter = new FilterControlledPermanent("creature or Vehicle you control"); - - static { - filter.add(Predicates.or( - CardType.CREATURE.getPredicate(), - SubType.VEHICLE.getPredicate() - )); - } - public RoaringEarth(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{G}"); // Whenever a land you control enters, put a +1/+1 counter on target creature or Vehicle you control. Ability ability = new LandfallAbility(new AddCountersTargetEffect(CounterType.P1P1.createInstance())); - ability.addTarget(new TargetPermanent(filter)); + ability.addTarget(new TargetPermanent(StaticFilters.FILTER_CONTROLLED_PERMANENT_CREATURE_OR_VEHICLE)); this.addAbility(ability); // Channel — {X}{G}{G}, Discard Roaring Earth; Put X +1/+1 counters on target land you control. It becomes a 0/0 green Spirit creature with haste. It's still a land. diff --git a/Mage.Sets/src/mage/cards/s/SevenTailMentor.java b/Mage.Sets/src/mage/cards/s/SevenTailMentor.java index 36bddfaa18e..692a682e134 100644 --- a/Mage.Sets/src/mage/cards/s/SevenTailMentor.java +++ b/Mage.Sets/src/mage/cards/s/SevenTailMentor.java @@ -9,9 +9,7 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; import mage.counters.CounterType; -import mage.filter.FilterPermanent; -import mage.filter.common.FilterControlledPermanent; -import mage.filter.predicate.Predicates; +import mage.filter.StaticFilters; import mage.target.TargetPermanent; import java.util.UUID; @@ -21,15 +19,6 @@ import java.util.UUID; */ public final class SevenTailMentor extends CardImpl { - private static final FilterPermanent filter = new FilterControlledPermanent("creature or Vehicle you control"); - - static { - filter.add(Predicates.or( - CardType.CREATURE.getPredicate(), - SubType.VEHICLE.getPredicate() - )); - } - public SevenTailMentor(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{W}"); @@ -42,7 +31,7 @@ public final class SevenTailMentor extends CardImpl { Ability ability = new EntersBattlefieldOrDiesSourceTriggeredAbility( new AddCountersTargetEffect(CounterType.P1P1.createInstance()), false ); - ability.addTarget(new TargetPermanent(filter)); + ability.addTarget(new TargetPermanent(StaticFilters.FILTER_CONTROLLED_PERMANENT_CREATURE_OR_VEHICLE)); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/t/TalesOfMasterSeshiro.java b/Mage.Sets/src/mage/cards/t/TalesOfMasterSeshiro.java index 04a1d542911..6f85e081486 100644 --- a/Mage.Sets/src/mage/cards/t/TalesOfMasterSeshiro.java +++ b/Mage.Sets/src/mage/cards/t/TalesOfMasterSeshiro.java @@ -13,9 +13,7 @@ import mage.constants.CardType; import mage.constants.SagaChapter; import mage.constants.SubType; import mage.counters.CounterType; -import mage.filter.FilterPermanent; -import mage.filter.common.FilterControlledPermanent; -import mage.filter.predicate.Predicates; +import mage.filter.StaticFilters; import mage.target.TargetPermanent; import java.util.UUID; @@ -25,16 +23,6 @@ import java.util.UUID; */ public final class TalesOfMasterSeshiro extends CardImpl { - private static final FilterPermanent filter - = new FilterControlledPermanent("creature or Vehicle you control"); - - static { - filter.add(Predicates.or( - CardType.CREATURE.getPredicate(), - SubType.VEHICLE.getPredicate() - )); - } - public TalesOfMasterSeshiro(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{4}{G}"); @@ -51,7 +39,7 @@ public final class TalesOfMasterSeshiro extends CardImpl { new AddCountersTargetEffect(CounterType.P1P1.createInstance()), new GainAbilityTargetEffect(VigilanceAbility.getInstance()) .setText("It gains vigilance until end of turn") - ), new TargetPermanent(filter) + ), new TargetPermanent(StaticFilters.FILTER_CONTROLLED_PERMANENT_CREATURE_OR_VEHICLE) ); // III — Exile this Saga, then return it to the battlefield transformed under your control. diff --git a/Mage.Sets/src/mage/sets/Aetherdrift.java b/Mage.Sets/src/mage/sets/Aetherdrift.java index 3b9d683f1af..e6f0cdaa52b 100644 --- a/Mage.Sets/src/mage/sets/Aetherdrift.java +++ b/Mage.Sets/src/mage/sets/Aetherdrift.java @@ -145,6 +145,7 @@ public final class Aetherdrift extends ExpansionSet { cards.add(new SetCardInfo("Oviya, Automech Artisan", 173, Rarity.RARE, mage.cards.o.OviyaAutomechArtisan.class)); cards.add(new SetCardInfo("Pacesetter Paragon", 140, Rarity.UNCOMMON, mage.cards.p.PacesetterParagon.class)); cards.add(new SetCardInfo("Pedal to the Metal", 141, Rarity.COMMON, mage.cards.p.PedalToTheMetal.class)); + cards.add(new SetCardInfo("Perilous Snare", 23, Rarity.RARE, mage.cards.p.PerilousSnare.class)); cards.add(new SetCardInfo("Plains", 272, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Plow Through", 174, Rarity.UNCOMMON, mage.cards.p.PlowThrough.class)); cards.add(new SetCardInfo("Point the Way", 175, Rarity.UNCOMMON, mage.cards.p.PointTheWay.class)); diff --git a/Mage/src/main/java/mage/filter/StaticFilters.java b/Mage/src/main/java/mage/filter/StaticFilters.java index f441286c5fa..dfb7cc6b4c9 100644 --- a/Mage/src/main/java/mage/filter/StaticFilters.java +++ b/Mage/src/main/java/mage/filter/StaticFilters.java @@ -765,6 +765,17 @@ public final class StaticFilters { FILTER_PERMANENT_CREATURE_OR_VEHICLE.setLockedFilter(true); } + public static final FilterControlledPermanent FILTER_CONTROLLED_PERMANENT_CREATURE_OR_VEHICLE = new FilterControlledPermanent("creature or Vehicle you control"); + + static { + FILTER_CONTROLLED_PERMANENT_CREATURE_OR_VEHICLE.add( + Predicates.or( + CardType.CREATURE.getPredicate(), + SubType.VEHICLE.getPredicate() + )); + FILTER_CONTROLLED_PERMANENT_CREATURE_OR_VEHICLE.setLockedFilter(true); + } + public static final FilterCreaturePermanent FILTER_PERMANENT_A_CREATURE = new FilterCreaturePermanent("a creature"); static {