From 7f189f5e4b18bbeb6e6da78fa12e8b4bcfb335b8 Mon Sep 17 00:00:00 2001 From: theelk801 Date: Fri, 18 Jul 2025 16:45:55 -0400 Subject: [PATCH] add static filter for creatures with flying --- .../src/mage/cards/a/AerialPredation.java | 20 +++------ Mage.Sets/src/mage/cards/a/AerieOuphes.java | 17 ++------ Mage.Sets/src/mage/cards/a/AirServant.java | 21 ++++------ .../src/mage/cards/a/ArashiTheSkyAsunder.java | 21 +++------- .../src/mage/cards/b/BambooGroveArcher.java | 12 +----- Mage.Sets/src/mage/cards/b/BowOfNylea.java | 23 ++++------ Mage.Sets/src/mage/cards/b/BranchingBolt.java | 42 +------------------ .../src/mage/cards/b/BurningPalmEfreet.java | 18 +++----- Mage.Sets/src/mage/cards/c/CanopySurge.java | 22 ++++------ Mage.Sets/src/mage/cards/c/CentaurArcher.java | 20 +++------ .../src/mage/cards/c/ChooseYourWeapon.java | 13 +----- Mage.Sets/src/mage/cards/c/ClanDefiance.java | 6 +-- .../src/mage/cards/c/ClawsOfWirewood.java | 19 +++------ Mage.Sets/src/mage/cards/c/ClipWings.java | 18 +++----- Mage.Sets/src/mage/cards/c/Cloudthresher.java | 20 ++++----- .../src/mage/cards/c/CollisionColossus.java | 13 +----- Mage.Sets/src/mage/cards/c/CorrosiveGale.java | 19 +++------ Mage.Sets/src/mage/cards/c/CrashLanding.java | 12 ++---- .../src/mage/cards/c/CrushingCanopy.java | 18 +++----- Mage.Sets/src/mage/cards/c/CrushingVines.java | 20 +++------ .../src/mage/cards/d/DaybreakRanger.java | 15 ++----- .../src/mage/cards/d/DeadshotMinotaur.java | 22 +++------- Mage.Sets/src/mage/cards/d/Downdraft.java | 22 ++++------ Mage.Sets/src/mage/cards/d/DustCorona.java | 19 +++------ .../src/mage/cards/e/EatenBySpiders.java | 22 +++------- .../src/mage/cards/e/ElvishSkysweeper.java | 18 ++------ Mage.Sets/src/mage/cards/e/Ettercap.java | 13 +----- Mage.Sets/src/mage/cards/e/EzurisArchers.java | 21 +++------- .../src/mage/cards/f/FellThePheasant.java | 14 +------ Mage.Sets/src/mage/cards/f/Firespout.java | 7 +--- .../src/mage/cards/f/FlourishingStrike.java | 13 +----- Mage.Sets/src/mage/cards/f/ForcedLanding.java | 13 +----- Mage.Sets/src/mage/cards/f/FowlStrike.java | 13 +----- .../src/mage/cards/f/FrostwebSpider.java | 19 +++------ Mage.Sets/src/mage/cards/g/GaleForce.java | 19 +++------ .../src/mage/cards/g/GeistcatchersRig.java | 20 +++------ .../src/mage/cards/g/GloomwidowsFeast.java | 19 +++------ .../src/mage/cards/g/GoblinSkycutter.java | 20 +++------ .../src/mage/cards/g/GrapeshotCatapult.java | 20 +++------ Mage.Sets/src/mage/cards/g/GruulCharm.java | 12 +++--- .../src/mage/cards/h/HammerheimDeadeye.java | 19 +++------ Mage.Sets/src/mage/cards/h/HeavenEarth.java | 9 ++-- .../src/mage/cards/h/HighRiseSawjack.java | 14 ++----- Mage.Sets/src/mage/cards/h/HowlingGale.java | 20 +++------ Mage.Sets/src/mage/cards/h/HurlyBurly.java | 11 +++-- Mage.Sets/src/mage/cards/h/Hurricane.java | 19 +++------ Mage.Sets/src/mage/cards/i/IfhBiffEfreet.java | 20 +++------ .../src/mage/cards/i/IslandOfWakWak.java | 18 ++------ .../src/mage/cards/j/JaggedScarArchers.java | 14 +++---- Mage.Sets/src/mage/cards/l/LeafArrow.java | 21 +++------- .../src/mage/cards/l/LysAlanaBowmaster.java | 9 +--- .../src/mage/cards/m/MatsuTribeSniper.java | 22 +++------- Mage.Sets/src/mage/cards/n/NeedleStorm.java | 17 +++----- .../src/mage/cards/n/NetcasterSpider.java | 22 ++++------ .../src/mage/cards/o/OranRiefRecluse.java | 13 +----- .../src/mage/cards/p/PawpatchFormation.java | 13 +----- .../src/mage/cards/p/PickYourPoison.java | 12 +----- Mage.Sets/src/mage/cards/p/PierceTheSky.java | 17 ++------ Mage.Sets/src/mage/cards/p/PinionFeast.java | 19 +++------ Mage.Sets/src/mage/cards/p/PistusStrike.java | 19 +++------ Mage.Sets/src/mage/cards/p/Plummet.java | 19 +++------ .../src/mage/cards/p/PredatorFlagship.java | 20 +++------ .../src/mage/cards/r/RecklessAirStrike.java | 13 +----- .../src/mage/cards/r/RockcasterPlatoon.java | 12 +----- Mage.Sets/src/mage/cards/r/RoughTumble.java | 6 +-- Mage.Sets/src/mage/cards/r/RunAfoul.java | 16 ++----- .../src/mage/cards/s/SagittarsVolley.java | 9 ++-- .../src/mage/cards/s/SarkhansResolve.java | 13 +----- .../src/mage/cards/s/ScattershotArcher.java | 19 +++------ Mage.Sets/src/mage/cards/s/ShreddedSails.java | 13 +----- .../src/mage/cards/s/ShreddingWinds.java | 21 +++------- .../src/mage/cards/s/SilklashSpider.java | 19 +++------ Mage.Sets/src/mage/cards/s/Skyreaping.java | 12 +----- .../src/mage/cards/s/SkyshroudArcher.java | 22 +++------- Mage.Sets/src/mage/cards/s/Skystinger.java | 13 ++---- Mage.Sets/src/mage/cards/s/SkywaySniper.java | 13 +----- Mage.Sets/src/mage/cards/s/Snarespinner.java | 14 ++----- .../src/mage/cards/s/SpittingSpider.java | 18 +++----- Mage.Sets/src/mage/cards/s/Squall.java | 19 +++------ Mage.Sets/src/mage/cards/s/SquallLine.java | 19 +++------ Mage.Sets/src/mage/cards/s/Squallmonger.java | 19 +++------ .../src/mage/cards/s/StingerflingSpider.java | 18 +++----- Mage.Sets/src/mage/cards/s/StingingShot.java | 17 ++------ .../src/mage/cards/s/StormElemental.java | 12 +----- Mage.Sets/src/mage/cards/s/StormFront.java | 20 +++------ .../src/mage/cards/s/SunscapeBattlemage.java | 12 +----- .../src/mage/cards/s/SunsetStrikemaster.java | 13 +----- Mage.Sets/src/mage/cards/t/TajuruArcher.java | 15 +++---- Mage.Sets/src/mage/cards/t/TakeDown.java | 21 +++------- Mage.Sets/src/mage/cards/t/Tangletrap.java | 13 +----- .../src/mage/cards/t/TearsOfValakut.java | 19 +++------ Mage.Sets/src/mage/cards/t/Thornado.java | 13 +----- Mage.Sets/src/mage/cards/t/Thunderbolt.java | 17 ++------ Mage.Sets/src/mage/cards/t/TrophyHunter.java | 21 +++------- Mage.Sets/src/mage/cards/t/TropicalStorm.java | 11 ++--- Mage.Sets/src/mage/cards/v/Vertigo.java | 19 +++------ Mage.Sets/src/mage/cards/v/ViridianScout.java | 18 +++----- .../src/mage/cards/w/WhirlingCatapult.java | 18 +++----- Mage.Sets/src/mage/cards/w/Windstorm.java | 19 +++------ Mage.Sets/src/mage/cards/w/WingPuncture.java | 23 ++++------ Mage.Sets/src/mage/cards/w/WingSnare.java | 20 +++------ Mage.Sets/src/mage/cards/w/WoollySpider.java | 23 ++++------ .../main/java/mage/filter/StaticFilters.java | 8 ++++ 103 files changed, 451 insertions(+), 1291 deletions(-) diff --git a/Mage.Sets/src/mage/cards/a/AerialPredation.java b/Mage.Sets/src/mage/cards/a/AerialPredation.java index e3e9164983e..7eaec60816e 100644 --- a/Mage.Sets/src/mage/cards/a/AerialPredation.java +++ b/Mage.Sets/src/mage/cards/a/AerialPredation.java @@ -3,36 +3,26 @@ package mage.cards.a; -import java.util.UUID; import mage.abilities.effects.common.DestroyTargetEffect; import mage.abilities.effects.common.GainLifeEffect; -import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.filter.common.FilterCreaturePermanent; -import mage.filter.predicate.mageobject.AbilityPredicate; +import mage.filter.StaticFilters; import mage.target.TargetPermanent; -import mage.target.common.TargetCreaturePermanent; + +import java.util.UUID; /** - * * @author LevelX2 */ public final class AerialPredation extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature with flying"); - - static { - filter.add(new AbilityPredicate(FlyingAbility.class)); - } - public AerialPredation(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{2}{G}"); + super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{2}{G}"); - // Destroy target creature with flying. You gain 2 life. - this.getSpellAbility().addTarget(new TargetPermanent(filter)); + this.getSpellAbility().addTarget(new TargetPermanent(StaticFilters.FILTER_CREATURE_FLYING)); this.getSpellAbility().addEffect(new DestroyTargetEffect()); this.getSpellAbility().addEffect(new GainLifeEffect(2)); } diff --git a/Mage.Sets/src/mage/cards/a/AerieOuphes.java b/Mage.Sets/src/mage/cards/a/AerieOuphes.java index 588d018cefd..ecdd30d05d2 100644 --- a/Mage.Sets/src/mage/cards/a/AerieOuphes.java +++ b/Mage.Sets/src/mage/cards/a/AerieOuphes.java @@ -7,34 +7,23 @@ import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.common.SacrificeSourceCost; import mage.abilities.dynamicvalue.common.SourcePermanentPowerValue; import mage.abilities.effects.common.DamageTargetEffect; -import mage.abilities.keyword.FlyingAbility; import mage.abilities.keyword.PersistAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; -import mage.constants.Zone; -import mage.filter.common.FilterCreaturePermanent; -import mage.filter.predicate.mageobject.AbilityPredicate; +import mage.filter.StaticFilters; import mage.target.TargetPermanent; -import mage.target.common.TargetCreaturePermanent; import java.util.UUID; /** - * * @author jeffwadsworth */ public final class AerieOuphes extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature with flying"); - - static { - filter.add(new AbilityPredicate(FlyingAbility.class)); - } - public AerieOuphes(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.OUPHE); this.power = new MageInt(3); @@ -43,7 +32,7 @@ public final class AerieOuphes extends CardImpl { // Sacrifice Aerie Ouphes: Aerie Ouphes deals damage equal to its power to target creature with flying. Ability ability = new SimpleActivatedAbility(new DamageTargetEffect(SourcePermanentPowerValue.NOT_NEGATIVE) .setText("it deals damage equal to its power to target creature with flying"), new SacrificeSourceCost()); - ability.addTarget(new TargetPermanent(filter)); + ability.addTarget(new TargetPermanent(StaticFilters.FILTER_CREATURE_FLYING)); this.addAbility(ability); // Persist diff --git a/Mage.Sets/src/mage/cards/a/AirServant.java b/Mage.Sets/src/mage/cards/a/AirServant.java index da105691266..e12b1dc0b7c 100644 --- a/Mage.Sets/src/mage/cards/a/AirServant.java +++ b/Mage.Sets/src/mage/cards/a/AirServant.java @@ -2,7 +2,6 @@ package mage.cards.a; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; @@ -13,33 +12,27 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; -import mage.constants.Zone; -import mage.filter.common.FilterCreaturePermanent; -import mage.filter.predicate.mageobject.AbilityPredicate; +import mage.filter.StaticFilters; import mage.target.TargetPermanent; -import mage.target.common.TargetCreaturePermanent; + +import java.util.UUID; /** - * * @author BetaSteward_at_googlemail.com */ public final class AirServant extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature with flying"); - - static { - filter.add(new AbilityPredicate(FlyingAbility.class)); - } - public AirServant(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{4}{U}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{U}"); this.subtype.add(SubType.ELEMENTAL); this.power = new MageInt(4); this.toughness = new MageInt(3); + this.addAbility(FlyingAbility.getInstance()); + Ability ability = new SimpleActivatedAbility(new TapTargetEffect(), new ManaCostsImpl<>("{2}{U}")); - ability.addTarget(new TargetPermanent(filter)); + ability.addTarget(new TargetPermanent(StaticFilters.FILTER_CREATURE_FLYING)); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/a/ArashiTheSkyAsunder.java b/Mage.Sets/src/mage/cards/a/ArashiTheSkyAsunder.java index 2099b9ab64e..c68fa52dc09 100644 --- a/Mage.Sets/src/mage/cards/a/ArashiTheSkyAsunder.java +++ b/Mage.Sets/src/mage/cards/a/ArashiTheSkyAsunder.java @@ -1,7 +1,6 @@ package mage.cards.a; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; @@ -11,31 +10,23 @@ import mage.abilities.dynamicvalue.common.GetXValue; import mage.abilities.effects.common.DamageAllEffect; import mage.abilities.effects.common.DamageTargetEffect; import mage.abilities.keyword.ChannelAbility; -import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; import mage.constants.SuperType; -import mage.constants.Zone; -import mage.filter.common.FilterCreaturePermanent; -import mage.filter.predicate.mageobject.AbilityPredicate; +import mage.filter.StaticFilters; import mage.target.TargetPermanent; +import java.util.UUID; + /** - * * @author LevelX2 */ public final class ArashiTheSkyAsunder extends CardImpl { - static final private FilterCreaturePermanent filter = new FilterCreaturePermanent("creature with flying"); - - static { - filter.add(new AbilityPredicate(FlyingAbility.class)); - } - public ArashiTheSkyAsunder(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{G}{G}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{G}{G}"); this.supertype.add(SuperType.LEGENDARY); this.subtype.add(SubType.SPIRIT); @@ -45,11 +36,11 @@ public final class ArashiTheSkyAsunder extends CardImpl { // {X}{G}, {tap}: Arashi, the Sky Asunder deals X damage to target creature with flying. Ability ability = new SimpleActivatedAbility(new DamageTargetEffect(GetXValue.instance), new ManaCostsImpl<>("{X}{G}")); ability.addCost(new TapSourceCost()); - ability.addTarget(new TargetPermanent(filter)); + ability.addTarget(new TargetPermanent(StaticFilters.FILTER_CREATURE_FLYING)); this.addAbility(ability); // Channel - {X}{G}{G}, Discard Arashi: Arashi deals X damage to each creature with flying. - this.addAbility(new ChannelAbility("{X}{G}{G}", new DamageAllEffect(GetXValue.instance, filter))); + this.addAbility(new ChannelAbility("{X}{G}{G}", new DamageAllEffect(GetXValue.instance, StaticFilters.FILTER_CREATURE_FLYING))); } private ArashiTheSkyAsunder(final ArashiTheSkyAsunder card) { diff --git a/Mage.Sets/src/mage/cards/b/BambooGroveArcher.java b/Mage.Sets/src/mage/cards/b/BambooGroveArcher.java index d7e63242f5b..fef3144e564 100644 --- a/Mage.Sets/src/mage/cards/b/BambooGroveArcher.java +++ b/Mage.Sets/src/mage/cards/b/BambooGroveArcher.java @@ -5,14 +5,12 @@ import mage.abilities.Ability; import mage.abilities.effects.common.DestroyTargetEffect; import mage.abilities.keyword.ChannelAbility; import mage.abilities.keyword.DefenderAbility; -import mage.abilities.keyword.FlyingAbility; import mage.abilities.keyword.ReachAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; -import mage.filter.common.FilterCreaturePermanent; -import mage.filter.predicate.mageobject.AbilityPredicate; +import mage.filter.StaticFilters; import mage.target.TargetPermanent; import java.util.UUID; @@ -22,12 +20,6 @@ import java.util.UUID; */ public final class BambooGroveArcher extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature with flying"); - - static { - filter.add(new AbilityPredicate(FlyingAbility.class)); - } - public BambooGroveArcher(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT, CardType.CREATURE}, "{1}{G}"); @@ -44,7 +36,7 @@ public final class BambooGroveArcher extends CardImpl { // Channel — {4}{G}, Discard Bamboo Grove Archer: Destroy target creature with flying. Ability ability = new ChannelAbility("{4}{G}", new DestroyTargetEffect()); - ability.addTarget(new TargetPermanent(filter)); + ability.addTarget(new TargetPermanent(StaticFilters.FILTER_CREATURE_FLYING)); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/b/BowOfNylea.java b/Mage.Sets/src/mage/cards/b/BowOfNylea.java index 967859d2bb2..757d99258fa 100644 --- a/Mage.Sets/src/mage/cards/b/BowOfNylea.java +++ b/Mage.Sets/src/mage/cards/b/BowOfNylea.java @@ -1,6 +1,5 @@ package mage.cards.b; -import java.util.UUID; import mage.abilities.Ability; import mage.abilities.Mode; import mage.abilities.common.SimpleActivatedAbility; @@ -13,30 +12,26 @@ import mage.abilities.effects.common.PutOnLibraryTargetEffect; import mage.abilities.effects.common.continuous.GainAbilityControlledEffect; import mage.abilities.effects.common.counter.AddCountersTargetEffect; import mage.abilities.keyword.DeathtouchAbility; -import mage.abilities.keyword.FlyingAbility; -import mage.cards.*; -import mage.constants.*; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.SuperType; import mage.counters.CounterType; import mage.filter.StaticFilters; -import mage.filter.common.FilterCreaturePermanent; -import mage.filter.predicate.mageobject.AbilityPredicate; import mage.target.TargetPermanent; import mage.target.common.TargetCardInYourGraveyard; import mage.target.common.TargetCreaturePermanent; +import java.util.UUID; + /** - * * @author LevelX2 */ public final class BowOfNylea extends CardImpl { - private static final FilterCreaturePermanent filterFlying = new FilterCreaturePermanent("creature with flying"); - static { - filterFlying.add(new AbilityPredicate(FlyingAbility.class)); - } - public BowOfNylea(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT,CardType.ARTIFACT},"{1}{G}{G}"); + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT, CardType.ARTIFACT}, "{1}{G}{G}"); this.supertype.add(SuperType.LEGENDARY); // Attacking creatures you control have deathtouch. @@ -50,7 +45,7 @@ public final class BowOfNylea extends CardImpl { ability.addCost(new TapSourceCost()); // or Bow of Nylea deals 2 damage to target creature with flying; Mode mode = new Mode(new DamageTargetEffect(2)); - mode.addTarget(new TargetPermanent(filterFlying)); + mode.addTarget(new TargetPermanent(StaticFilters.FILTER_CREATURE_FLYING)); ability.addMode(mode); // or you gain 3 life; mode = new Mode(new GainLifeEffect(3)); diff --git a/Mage.Sets/src/mage/cards/b/BranchingBolt.java b/Mage.Sets/src/mage/cards/b/BranchingBolt.java index f9da1d99e24..6457f0efe34 100644 --- a/Mage.Sets/src/mage/cards/b/BranchingBolt.java +++ b/Mage.Sets/src/mage/cards/b/BranchingBolt.java @@ -1,21 +1,16 @@ package mage.cards.b; -import mage.abilities.Ability; import mage.abilities.Mode; -import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.common.DamageTargetEffect; import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.constants.Outcome; +import mage.filter.StaticFilters; import mage.filter.common.FilterCreaturePermanent; import mage.filter.predicate.Predicates; import mage.filter.predicate.mageobject.AbilityPredicate; -import mage.game.Game; -import mage.game.permanent.Permanent; import mage.target.TargetPermanent; -import mage.target.common.TargetCreaturePermanent; import java.util.UUID; @@ -24,11 +19,9 @@ import java.util.UUID; */ public final class BranchingBolt extends CardImpl { - private static final FilterCreaturePermanent filterFlying = new FilterCreaturePermanent("creature with flying"); private static final FilterCreaturePermanent filterNotFlying = new FilterCreaturePermanent("creature without flying"); static { - filterFlying.add(new AbilityPredicate(FlyingAbility.class)); filterNotFlying.add(Predicates.not(new AbilityPredicate(FlyingAbility.class))); } @@ -40,7 +33,7 @@ public final class BranchingBolt extends CardImpl { this.getSpellAbility().getModes().setMaxModes(2); // Branching Bolt deals 3 damage to target creature with flying; this.getSpellAbility().addEffect(new DamageTargetEffect(3)); - this.getSpellAbility().addTarget(new TargetPermanent(filterFlying).withChooseHint("deals 3 damage, without flying")); + this.getSpellAbility().addTarget(new TargetPermanent(StaticFilters.FILTER_CREATURE_FLYING).withChooseHint("deals 3 damage, without flying")); // or Branching Bolt deals 3 damage to target creature without flying. Mode mode = new Mode(new DamageTargetEffect(3)); mode.addTarget(new TargetPermanent(filterNotFlying).withChooseHint("deals 3 damage, without flying")); @@ -56,34 +49,3 @@ public final class BranchingBolt extends CardImpl { return new BranchingBolt(this); } } - -class BranchingBoltEffect extends OneShotEffect { - - BranchingBoltEffect() { - super(Outcome.Damage); - this.staticText = "{this} deals 3 damage to target creature with flying and to target creature without flying"; - } - - private BranchingBoltEffect(final BranchingBoltEffect effect) { - super(effect); - } - - @Override - public BranchingBoltEffect copy() { - return new BranchingBoltEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - Permanent permanent = game.getPermanent(source.getFirstTarget()); - if (permanent != null) { - permanent.damage(3, source.getSourceId(), source, game, false, true); - } - - permanent = game.getPermanent(source.getTargets().get(1).getFirstTarget()); - if (permanent != null) { - permanent.damage(3, source.getSourceId(), source, game, false, true); - } - return true; - } -} diff --git a/Mage.Sets/src/mage/cards/b/BurningPalmEfreet.java b/Mage.Sets/src/mage/cards/b/BurningPalmEfreet.java index 99f881cc6ac..eb0c14a14c4 100644 --- a/Mage.Sets/src/mage/cards/b/BurningPalmEfreet.java +++ b/Mage.Sets/src/mage/cards/b/BurningPalmEfreet.java @@ -1,7 +1,6 @@ package mage.cards.b; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; @@ -9,28 +8,21 @@ import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.effects.common.DamageTargetEffect; import mage.abilities.effects.common.continuous.LoseAbilityTargetEffect; import mage.abilities.keyword.FlyingAbility; -import mage.constants.SubType; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Duration; -import mage.filter.common.FilterCreaturePermanent; -import mage.filter.predicate.mageobject.AbilityPredicate; +import mage.constants.SubType; +import mage.filter.StaticFilters; import mage.target.TargetPermanent; -import mage.target.common.TargetCreaturePermanent; + +import java.util.UUID; /** - * * @author TheElk801 */ public final class BurningPalmEfreet extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature with flying"); - - static { - filter.add(new AbilityPredicate(FlyingAbility.class)); - } - public BurningPalmEfreet(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{R}{R}"); @@ -43,7 +35,7 @@ public final class BurningPalmEfreet extends CardImpl { ability.addEffect(new LoseAbilityTargetEffect(FlyingAbility.getInstance(), Duration.EndOfTurn) .setText("and that creature loses flying until end of turn") ); - ability.addTarget(new TargetPermanent(filter)); + ability.addTarget(new TargetPermanent(StaticFilters.FILTER_CREATURE_FLYING)); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/c/CanopySurge.java b/Mage.Sets/src/mage/cards/c/CanopySurge.java index 5480c699a8f..db363effba3 100644 --- a/Mage.Sets/src/mage/cards/c/CanopySurge.java +++ b/Mage.Sets/src/mage/cards/c/CanopySurge.java @@ -1,39 +1,31 @@ package mage.cards.c; -import java.util.UUID; import mage.abilities.condition.common.KickedCondition; import mage.abilities.decorator.ConditionalOneShotEffect; import mage.abilities.effects.common.DamageEverythingEffect; -import mage.abilities.keyword.FlyingAbility; import mage.abilities.keyword.KickerAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.filter.common.FilterCreaturePermanent; -import mage.filter.predicate.mageobject.AbilityPredicate; +import mage.filter.StaticFilters; + +import java.util.UUID; /** - * * @author LoneFox */ public final class CanopySurge extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature with flying"); - - static { - filter.add(new AbilityPredicate(FlyingAbility.class)); - } - public CanopySurge(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{1}{G}"); + super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{1}{G}"); // Kicker {2} this.addAbility(new KickerAbility("{2}")); // Canopy Surge deals 1 damage to each creature with flying and each player. If Canopy Surge was kicked, it deals 4 damage to each creature with flying and each player instead. - this.getSpellAbility().addEffect(new ConditionalOneShotEffect(new DamageEverythingEffect(4, filter), - new DamageEverythingEffect(1, filter), KickedCondition.ONCE, - "{this} deals 1 damage to each creature with flying and each player. If this spell was kicked, it deals 4 damage to each creature with flying and each player instead.")); + this.getSpellAbility().addEffect(new ConditionalOneShotEffect(new DamageEverythingEffect(4, StaticFilters.FILTER_CREATURE_FLYING), + new DamageEverythingEffect(1, StaticFilters.FILTER_CREATURE_FLYING), KickedCondition.ONCE, + "{this} deals 1 damage to each creature with flying and each player. If this spell was kicked, it deals 4 damage to each creature with flying and each player instead.")); } private CanopySurge(final CanopySurge card) { diff --git a/Mage.Sets/src/mage/cards/c/CentaurArcher.java b/Mage.Sets/src/mage/cards/c/CentaurArcher.java index 5eda6670a21..e109c004410 100644 --- a/Mage.Sets/src/mage/cards/c/CentaurArcher.java +++ b/Mage.Sets/src/mage/cards/c/CentaurArcher.java @@ -1,37 +1,27 @@ package mage.cards.c; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.common.TapSourceCost; import mage.abilities.effects.common.DamageTargetEffect; -import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; -import mage.constants.Zone; -import mage.filter.common.FilterCreaturePermanent; -import mage.filter.predicate.mageobject.AbilityPredicate; +import mage.filter.StaticFilters; import mage.target.TargetPermanent; -import mage.target.common.TargetCreaturePermanent; + +import java.util.UUID; /** - * * @author anonymous */ public final class CentaurArcher extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature with flying"); - - static { - filter.add(new AbilityPredicate(FlyingAbility.class)); - } - public CentaurArcher(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{R}{G}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{R}{G}"); this.subtype.add(SubType.CENTAUR); this.subtype.add(SubType.ARCHER); @@ -40,7 +30,7 @@ public final class CentaurArcher extends CardImpl { // {tap}: Centaur Archer deals 1 damage to target creature with flying. Ability activatedAbility = new SimpleActivatedAbility(new DamageTargetEffect(1), new TapSourceCost()); - activatedAbility.addTarget(new TargetPermanent(filter)); + activatedAbility.addTarget(new TargetPermanent(StaticFilters.FILTER_CREATURE_FLYING)); this.addAbility(activatedAbility); } diff --git a/Mage.Sets/src/mage/cards/c/ChooseYourWeapon.java b/Mage.Sets/src/mage/cards/c/ChooseYourWeapon.java index 7d60685c5da..98a41a400f8 100644 --- a/Mage.Sets/src/mage/cards/c/ChooseYourWeapon.java +++ b/Mage.Sets/src/mage/cards/c/ChooseYourWeapon.java @@ -5,15 +5,12 @@ import mage.abilities.Mode; import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.common.DamageTargetEffect; import mage.abilities.effects.common.continuous.BoostTargetEffect; -import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Duration; import mage.constants.Outcome; -import mage.filter.FilterPermanent; -import mage.filter.common.FilterCreaturePermanent; -import mage.filter.predicate.mageobject.AbilityPredicate; +import mage.filter.StaticFilters; import mage.game.Game; import mage.game.permanent.Permanent; import mage.target.TargetPermanent; @@ -26,12 +23,6 @@ import java.util.UUID; */ public final class ChooseYourWeapon extends CardImpl { - private static final FilterPermanent filter = new FilterCreaturePermanent("creature with flying"); - - static { - filter.add(new AbilityPredicate(FlyingAbility.class)); - } - public ChooseYourWeapon(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{2}{G}"); @@ -43,7 +34,7 @@ public final class ChooseYourWeapon extends CardImpl { // • Archery — This spell deals 5 damage to target creature with flying. Mode mode = new Mode(new DamageTargetEffect(5, "this spell")); - mode.addTarget(new TargetPermanent(filter)); + mode.addTarget(new TargetPermanent(StaticFilters.FILTER_CREATURE_FLYING)); this.getSpellAbility().addMode(mode.withFlavorWord("Archery")); } diff --git a/Mage.Sets/src/mage/cards/c/ClanDefiance.java b/Mage.Sets/src/mage/cards/c/ClanDefiance.java index a3d04ea8ba7..609475d0019 100644 --- a/Mage.Sets/src/mage/cards/c/ClanDefiance.java +++ b/Mage.Sets/src/mage/cards/c/ClanDefiance.java @@ -7,11 +7,11 @@ import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; +import mage.filter.StaticFilters; import mage.filter.common.FilterCreaturePermanent; import mage.filter.predicate.Predicates; import mage.filter.predicate.mageobject.AbilityPredicate; import mage.target.TargetPermanent; -import mage.target.common.TargetCreaturePermanent; import mage.target.common.TargetPlayerOrPlaneswalker; import java.util.UUID; @@ -21,11 +21,9 @@ import java.util.UUID; */ public final class ClanDefiance extends CardImpl { - static final private FilterCreaturePermanent filterFlying = new FilterCreaturePermanent("creature with flying"); static final private FilterCreaturePermanent filterWithoutFlying = new FilterCreaturePermanent("creature without flying"); static { - filterFlying.add(new AbilityPredicate(FlyingAbility.class)); filterWithoutFlying.add(Predicates.not(new AbilityPredicate(FlyingAbility.class))); } @@ -37,7 +35,7 @@ public final class ClanDefiance extends CardImpl { this.getSpellAbility().getModes().setMaxModes(3); // Clan Defiance deals X damage to target creature with flying; this.getSpellAbility().addEffect(new DamageTargetEffect(GetXValue.instance)); - this.getSpellAbility().addTarget(new TargetPermanent(filterFlying).withChooseHint("deals X damage, with flying")); + this.getSpellAbility().addTarget(new TargetPermanent(StaticFilters.FILTER_CREATURE_FLYING).withChooseHint("deals X damage, with flying")); // Clan Defiance deals X damage to target creature without flying; Mode mode1 = new Mode(new DamageTargetEffect(GetXValue.instance)); mode1.addTarget(new TargetPermanent(filterWithoutFlying).withChooseHint("deals X damage, without flying")); diff --git a/Mage.Sets/src/mage/cards/c/ClawsOfWirewood.java b/Mage.Sets/src/mage/cards/c/ClawsOfWirewood.java index fb6c2330ab6..c8dabe2fce9 100644 --- a/Mage.Sets/src/mage/cards/c/ClawsOfWirewood.java +++ b/Mage.Sets/src/mage/cards/c/ClawsOfWirewood.java @@ -1,40 +1,33 @@ package mage.cards.c; -import java.util.UUID; import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.effects.Effect; import mage.abilities.effects.common.DamageAllEffect; import mage.abilities.effects.common.DamagePlayersEffect; import mage.abilities.keyword.CyclingAbility; -import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.filter.common.FilterCreaturePermanent; -import mage.filter.predicate.mageobject.AbilityPredicate; +import mage.filter.StaticFilters; + +import java.util.UUID; /** - * * @author LevelX2 */ public final class ClawsOfWirewood extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature with flying"); - - static { - filter.add(new AbilityPredicate(FlyingAbility.class)); - } - public ClawsOfWirewood(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{3}{G}"); + super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{3}{G}"); // Claws of Wirewood deals 3 damage to each creature with flying and each player. - this.getSpellAbility().addEffect(new DamageAllEffect(3, filter)); + this.getSpellAbility().addEffect(new DamageAllEffect(3, StaticFilters.FILTER_CREATURE_FLYING)); Effect effect = new DamagePlayersEffect(3); effect.setText("and each player"); this.getSpellAbility().addEffect(effect); + // Cycling {2} this.addAbility(new CyclingAbility(new ManaCostsImpl<>("{2}"))); } diff --git a/Mage.Sets/src/mage/cards/c/ClipWings.java b/Mage.Sets/src/mage/cards/c/ClipWings.java index 40e5ea7c351..3f7c10acc26 100644 --- a/Mage.Sets/src/mage/cards/c/ClipWings.java +++ b/Mage.Sets/src/mage/cards/c/ClipWings.java @@ -1,31 +1,23 @@ package mage.cards.c; -import java.util.UUID; import mage.abilities.effects.common.SacrificeOpponentsEffect; -import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.filter.common.FilterCreaturePermanent; -import mage.filter.predicate.mageobject.AbilityPredicate; +import mage.filter.StaticFilters; + +import java.util.UUID; /** - * * @author fireshoes */ public final class ClipWings extends CardImpl { - - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature with flying"); - - static { - filter.add(new AbilityPredicate(FlyingAbility.class)); - } public ClipWings(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{1}{G}"); + super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{1}{G}"); // Each opponent sacrifices a creature with flying. - this.getSpellAbility().addEffect(new SacrificeOpponentsEffect(filter) + this.getSpellAbility().addEffect(new SacrificeOpponentsEffect(StaticFilters.FILTER_CREATURE_FLYING) .setText("each opponent sacrifices a creature of their choice with flying")); } diff --git a/Mage.Sets/src/mage/cards/c/Cloudthresher.java b/Mage.Sets/src/mage/cards/c/Cloudthresher.java index 7b16baa23f2..a3a02cefc8b 100644 --- a/Mage.Sets/src/mage/cards/c/Cloudthresher.java +++ b/Mage.Sets/src/mage/cards/c/Cloudthresher.java @@ -1,7 +1,6 @@ package mage.cards.c; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldTriggeredAbility; @@ -9,28 +8,22 @@ import mage.abilities.effects.common.DamageAllEffect; import mage.abilities.effects.common.DamagePlayersEffect; import mage.abilities.keyword.EvokeAbility; import mage.abilities.keyword.FlashAbility; -import mage.abilities.keyword.FlyingAbility; import mage.abilities.keyword.ReachAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; -import mage.filter.common.FilterCreaturePermanent; -import mage.filter.predicate.mageobject.AbilityPredicate; +import mage.filter.StaticFilters; + +import java.util.UUID; /** - * * @author LevelX2 */ public final class Cloudthresher extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature with flying"); - static { - filter.add(new AbilityPredicate(FlyingAbility.class)); - } - public Cloudthresher(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{G}{G}{G}{G}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{G}{G}{G}{G}"); this.subtype.add(SubType.ELEMENTAL); this.power = new MageInt(7); @@ -38,12 +31,15 @@ public final class Cloudthresher extends CardImpl { // Flash this.addAbility(FlashAbility.getInstance()); + // Reach 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 ability = new EntersBattlefieldTriggeredAbility(new DamageAllEffect(2, "it", StaticFilters.FILTER_CREATURE_FLYING)); 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/CollisionColossus.java b/Mage.Sets/src/mage/cards/c/CollisionColossus.java index 74a9473184c..5f627a704b4 100644 --- a/Mage.Sets/src/mage/cards/c/CollisionColossus.java +++ b/Mage.Sets/src/mage/cards/c/CollisionColossus.java @@ -3,16 +3,13 @@ package mage.cards.c; import mage.abilities.effects.common.DamageTargetEffect; import mage.abilities.effects.common.continuous.BoostTargetEffect; import mage.abilities.effects.common.continuous.GainAbilityTargetEffect; -import mage.abilities.keyword.FlyingAbility; import mage.abilities.keyword.TrampleAbility; import mage.cards.CardSetInfo; import mage.cards.SplitCard; import mage.constants.CardType; import mage.constants.Duration; import mage.constants.SpellAbilityType; -import mage.filter.FilterPermanent; -import mage.filter.common.FilterCreaturePermanent; -import mage.filter.predicate.mageobject.AbilityPredicate; +import mage.filter.StaticFilters; import mage.target.TargetPermanent; import mage.target.common.TargetCreaturePermanent; @@ -23,19 +20,13 @@ import java.util.UUID; */ public final class CollisionColossus extends SplitCard { - private static final FilterPermanent filter = new FilterCreaturePermanent("creature with flying"); - - static { - filter.add(new AbilityPredicate(FlyingAbility.class)); - } - public CollisionColossus(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{1}{R/G}", "{R}{G}", SpellAbilityType.SPLIT); // Collision // Collision deals 6 damage to target creature with flying. this.getLeftHalfCard().getSpellAbility().addEffect(new DamageTargetEffect(6)); - this.getLeftHalfCard().getSpellAbility().addTarget(new TargetPermanent(filter)); + this.getLeftHalfCard().getSpellAbility().addTarget(new TargetPermanent(StaticFilters.FILTER_CREATURE_FLYING)); // Colossus // Target creature gets +4/+2 and gains trample until end of turn. diff --git a/Mage.Sets/src/mage/cards/c/CorrosiveGale.java b/Mage.Sets/src/mage/cards/c/CorrosiveGale.java index 97b5cffea5c..75ea401177b 100644 --- a/Mage.Sets/src/mage/cards/c/CorrosiveGale.java +++ b/Mage.Sets/src/mage/cards/c/CorrosiveGale.java @@ -1,33 +1,24 @@ package mage.cards.c; -import java.util.UUID; import mage.abilities.dynamicvalue.common.GetXValue; import mage.abilities.effects.common.DamageAllEffect; -import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.filter.common.FilterCreaturePermanent; -import mage.filter.predicate.mageobject.AbilityPredicate; +import mage.filter.StaticFilters; + +import java.util.UUID; /** - * * @author North */ public final class CorrosiveGale extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature with flying"); - - static { - filter.add(new AbilityPredicate(FlyingAbility.class)); - } - public CorrosiveGale(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{X}{G/P}"); + super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{X}{G/P}"); - - this.getSpellAbility().addEffect(new DamageAllEffect(GetXValue.instance, filter)); + this.getSpellAbility().addEffect(new DamageAllEffect(GetXValue.instance, StaticFilters.FILTER_CREATURE_FLYING)); } private CorrosiveGale(final CorrosiveGale card) { diff --git a/Mage.Sets/src/mage/cards/c/CrashLanding.java b/Mage.Sets/src/mage/cards/c/CrashLanding.java index c075f6df546..fb375ac55bf 100644 --- a/Mage.Sets/src/mage/cards/c/CrashLanding.java +++ b/Mage.Sets/src/mage/cards/c/CrashLanding.java @@ -1,7 +1,6 @@ package mage.cards.c; -import java.util.UUID; import mage.abilities.dynamicvalue.DynamicValue; import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount; import mage.abilities.effects.common.DamageTargetEffect; @@ -12,24 +11,21 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Duration; import mage.constants.SubType; +import mage.filter.StaticFilters; import mage.filter.common.FilterControlledPermanent; -import mage.filter.common.FilterCreaturePermanent; -import mage.filter.predicate.mageobject.AbilityPredicate; import mage.target.TargetPermanent; -import mage.target.common.TargetCreaturePermanent; + +import java.util.UUID; /** - * * @author TheElk801 */ public final class CrashLanding extends CardImpl { private static final FilterControlledPermanent filter = new FilterControlledPermanent("Forests you control"); - private static final FilterCreaturePermanent filter2 = new FilterCreaturePermanent("creature with flying"); static { filter.add(SubType.FOREST.getPredicate()); - filter2.add(new AbilityPredicate(FlyingAbility.class)); } public CrashLanding(UUID ownerId, CardSetInfo setInfo) { @@ -40,7 +36,7 @@ public final class CrashLanding extends CardImpl { this.getSpellAbility().addEffect(new LoseAbilityTargetEffect( FlyingAbility.getInstance(), Duration.EndOfTurn)); this.getSpellAbility().addEffect(new DamageTargetEffect(amount).setText("{this} deals damage to that creature equal to the number of Forests you control")); - this.getSpellAbility().addTarget(new TargetPermanent(filter2)); + this.getSpellAbility().addTarget(new TargetPermanent(StaticFilters.FILTER_CREATURE_FLYING)); } private CrashLanding(final CrashLanding card) { diff --git a/Mage.Sets/src/mage/cards/c/CrushingCanopy.java b/Mage.Sets/src/mage/cards/c/CrushingCanopy.java index 7ca22a17ec1..0b4f3530ac5 100644 --- a/Mage.Sets/src/mage/cards/c/CrushingCanopy.java +++ b/Mage.Sets/src/mage/cards/c/CrushingCanopy.java @@ -1,38 +1,30 @@ package mage.cards.c; -import java.util.UUID; import mage.abilities.Mode; import mage.abilities.effects.common.DestroyTargetEffect; -import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.filter.common.FilterCreaturePermanent; -import mage.filter.predicate.mageobject.AbilityPredicate; +import mage.filter.StaticFilters; import mage.target.TargetPermanent; -import mage.target.common.TargetCreaturePermanent; import mage.target.common.TargetEnchantmentPermanent; +import java.util.UUID; + /** - * * @author TheElk801 */ public final class CrushingCanopy extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature with flying"); - - static { - filter.add(new AbilityPredicate(FlyingAbility.class)); - } - public CrushingCanopy(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{2}{G}"); // Choose one -- // * Destroy target creature with flying. - this.getSpellAbility().addTarget(new TargetPermanent(filter)); + this.getSpellAbility().addTarget(new TargetPermanent(StaticFilters.FILTER_CREATURE_FLYING)); this.getSpellAbility().addEffect(new DestroyTargetEffect()); + // * Destroy target enchantment. Mode mode = new Mode(new DestroyTargetEffect()); mode.addTarget(new TargetEnchantmentPermanent()); diff --git a/Mage.Sets/src/mage/cards/c/CrushingVines.java b/Mage.Sets/src/mage/cards/c/CrushingVines.java index 43cc576d3d8..5f01d70cce4 100644 --- a/Mage.Sets/src/mage/cards/c/CrushingVines.java +++ b/Mage.Sets/src/mage/cards/c/CrushingVines.java @@ -1,37 +1,27 @@ package mage.cards.c; -import java.util.UUID; import mage.abilities.Mode; import mage.abilities.effects.common.DestroyTargetEffect; -import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.filter.common.FilterCreaturePermanent; -import mage.filter.predicate.mageobject.AbilityPredicate; +import mage.filter.StaticFilters; import mage.target.TargetPermanent; import mage.target.common.TargetArtifactPermanent; -import mage.target.common.TargetCreaturePermanent; + +import java.util.UUID; /** - * * @author North */ public final class CrushingVines extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature with flying"); - - static { - filter.add(new AbilityPredicate(FlyingAbility.class)); - } - public CrushingVines(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{2}{G}"); - + super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{2}{G}"); // Choose one - Destroy target creature with flying; or destroy target artifact. - this.getSpellAbility().addTarget(new TargetPermanent(filter)); + this.getSpellAbility().addTarget(new TargetPermanent(StaticFilters.FILTER_CREATURE_FLYING)); this.getSpellAbility().addEffect(new DestroyTargetEffect()); Mode mode = new Mode(new DestroyTargetEffect()); mode.addTarget(new TargetArtifactPermanent()); diff --git a/Mage.Sets/src/mage/cards/d/DaybreakRanger.java b/Mage.Sets/src/mage/cards/d/DaybreakRanger.java index cc653c12f4d..7aa01edb49f 100644 --- a/Mage.Sets/src/mage/cards/d/DaybreakRanger.java +++ b/Mage.Sets/src/mage/cards/d/DaybreakRanger.java @@ -6,17 +6,13 @@ import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.WerewolfFrontTriggeredAbility; import mage.abilities.costs.common.TapSourceCost; import mage.abilities.effects.common.DamageTargetEffect; -import mage.abilities.keyword.FlyingAbility; import mage.abilities.keyword.TransformAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; -import mage.constants.Zone; -import mage.filter.common.FilterCreaturePermanent; -import mage.filter.predicate.mageobject.AbilityPredicate; +import mage.filter.StaticFilters; import mage.target.TargetPermanent; -import mage.target.common.TargetCreaturePermanent; import java.util.UUID; @@ -25,12 +21,6 @@ import java.util.UUID; */ public final class DaybreakRanger extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature with flying"); - - static { - filter.add(new AbilityPredicate(FlyingAbility.class)); - } - public DaybreakRanger(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{G}"); this.subtype.add(SubType.HUMAN); @@ -45,8 +35,9 @@ public final class DaybreakRanger extends CardImpl { // {tap}: Daybreak Ranger deals 2 damage to target creature with flying. Ability activatedAbility = new SimpleActivatedAbility(new DamageTargetEffect(2), new TapSourceCost()); - activatedAbility.addTarget(new TargetPermanent(filter)); + activatedAbility.addTarget(new TargetPermanent(StaticFilters.FILTER_CREATURE_FLYING)); this.addAbility(activatedAbility); + // At the beginning of each upkeep, if no spells were cast last turn, transform Daybreak Ranger. this.addAbility(new TransformAbility()); this.addAbility(new WerewolfFrontTriggeredAbility()); diff --git a/Mage.Sets/src/mage/cards/d/DeadshotMinotaur.java b/Mage.Sets/src/mage/cards/d/DeadshotMinotaur.java index 8ebaa2c9e90..e709da017b2 100644 --- a/Mage.Sets/src/mage/cards/d/DeadshotMinotaur.java +++ b/Mage.Sets/src/mage/cards/d/DeadshotMinotaur.java @@ -1,48 +1,38 @@ package mage.cards.d; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.effects.common.DamageTargetEffect; import mage.abilities.keyword.CyclingAbility; -import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; -import mage.filter.common.FilterCreaturePermanent; -import mage.filter.predicate.mageobject.AbilityPredicate; +import mage.filter.StaticFilters; import mage.target.TargetPermanent; -import mage.target.common.TargetCreaturePermanent; + +import java.util.UUID; /** - * * @author jonubuu */ public final class DeadshotMinotaur extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature with flying"); - - static { - filter.add(new AbilityPredicate(FlyingAbility.class)); - } - public DeadshotMinotaur(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{R}{G}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{R}{G}"); this.subtype.add(SubType.MINOTAUR); - - this.power = new MageInt(3); this.toughness = new MageInt(4); // When Deadshot Minotaur enters the battlefield, it deals 3 damage to target creature with flying. Ability ability = new EntersBattlefieldTriggeredAbility(new DamageTargetEffect(3, "it"), false); - ability.addTarget(new TargetPermanent(filter)); + ability.addTarget(new TargetPermanent(StaticFilters.FILTER_CREATURE_FLYING)); this.addAbility(ability); + // Cycling {RG} this.addAbility(new CyclingAbility(new ManaCostsImpl<>("{R/G}"))); } diff --git a/Mage.Sets/src/mage/cards/d/Downdraft.java b/Mage.Sets/src/mage/cards/d/Downdraft.java index f4400e93aee..b2b164e03b6 100644 --- a/Mage.Sets/src/mage/cards/d/Downdraft.java +++ b/Mage.Sets/src/mage/cards/d/Downdraft.java @@ -1,7 +1,6 @@ package mage.cards.d; -import java.util.UUID; import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.common.SacrificeSourceCost; @@ -13,35 +12,28 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Duration; -import mage.constants.Zone; -import mage.filter.common.FilterCreaturePermanent; -import mage.filter.predicate.mageobject.AbilityPredicate; +import mage.filter.StaticFilters; import mage.target.common.TargetCreaturePermanent; +import java.util.UUID; + /** - * * @author fireshoes */ public final class Downdraft extends CardImpl { - - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature with flying"); - - static { - filter.add(new AbilityPredicate(FlyingAbility.class)); - } public Downdraft(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{2}{G}"); + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{2}{G}"); // {G}: Target creature loses flying until end of turn. Ability ability = new SimpleActivatedAbility( - new LoseAbilityTargetEffect(FlyingAbility.getInstance(), Duration.EndOfTurn), + new LoseAbilityTargetEffect(FlyingAbility.getInstance(), Duration.EndOfTurn), new ManaCostsImpl<>("{G}")); ability.addTarget(new TargetCreaturePermanent()); this.addAbility(ability); - + // Sacrifice Downdraft: Downdraft deals 2 damage to each creature with flying. - this.addAbility(new SimpleActivatedAbility(new DamageAllEffect(2, "it", filter), new SacrificeSourceCost())); + this.addAbility(new SimpleActivatedAbility(new DamageAllEffect(2, "it", StaticFilters.FILTER_CREATURE_FLYING), new SacrificeSourceCost())); } private Downdraft(final Downdraft card) { diff --git a/Mage.Sets/src/mage/cards/d/DustCorona.java b/Mage.Sets/src/mage/cards/d/DustCorona.java index a9e0f06c6d8..9d8eac60f6a 100644 --- a/Mage.Sets/src/mage/cards/d/DustCorona.java +++ b/Mage.Sets/src/mage/cards/d/DustCorona.java @@ -1,7 +1,6 @@ package mage.cards.d; -import java.util.UUID; import mage.abilities.Ability; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.effects.Effect; @@ -9,28 +8,22 @@ import mage.abilities.effects.common.AttachEffect; import mage.abilities.effects.common.combat.CantBeBlockedByCreaturesAttachedEffect; import mage.abilities.effects.common.continuous.BoostEnchantedEffect; import mage.abilities.keyword.EnchantAbility; -import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.*; -import mage.filter.common.FilterCreaturePermanent; -import mage.filter.predicate.mageobject.AbilityPredicate; +import mage.filter.StaticFilters; import mage.target.TargetPermanent; import mage.target.common.TargetCreaturePermanent; +import java.util.UUID; + /** - * * @author emerald000 */ public final class DustCorona extends CardImpl { - - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creatures with flying"); - static { - filter.add(new AbilityPredicate(FlyingAbility.class)); - } public DustCorona(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{R}"); + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{R}"); this.subtype.add(SubType.AURA); // Enchant creature @@ -39,10 +32,10 @@ public final class DustCorona extends CardImpl { this.getSpellAbility().addEffect(new AttachEffect(Outcome.BoostCreature)); Ability ability = new EnchantAbility(auraTarget); this.addAbility(ability); - + // Enchanted creature gets +2/+0 and can't be blocked by creatures with flying. ability = new SimpleStaticAbility(new BoostEnchantedEffect(2, 0)); - Effect effect = new CantBeBlockedByCreaturesAttachedEffect(Duration.WhileOnBattlefield, filter, AttachmentType.AURA); + Effect effect = new CantBeBlockedByCreaturesAttachedEffect(Duration.WhileOnBattlefield, StaticFilters.FILTER_CREATURE_FLYING, AttachmentType.AURA); effect.setText("and can't be blocked by creatures with flying"); ability.addEffect(effect); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/cards/e/EatenBySpiders.java b/Mage.Sets/src/mage/cards/e/EatenBySpiders.java index 7dddb3e0b6b..0e37c34a264 100644 --- a/Mage.Sets/src/mage/cards/e/EatenBySpiders.java +++ b/Mage.Sets/src/mage/cards/e/EatenBySpiders.java @@ -1,42 +1,32 @@ package mage.cards.e; -import java.util.LinkedList; -import java.util.UUID; import mage.abilities.Ability; import mage.abilities.effects.OneShotEffect; -import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Outcome; import mage.constants.SubType; -import mage.filter.common.FilterCreaturePermanent; -import mage.filter.predicate.mageobject.AbilityPredicate; +import mage.filter.StaticFilters; import mage.game.Game; import mage.game.permanent.Permanent; import mage.target.TargetPermanent; -import mage.target.common.TargetCreaturePermanent; + +import java.util.LinkedList; +import java.util.UUID; /** - * * @author North */ public final class EatenBySpiders extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature with flying"); - - static { - filter.add(new AbilityPredicate(FlyingAbility.class)); - } - public EatenBySpiders(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{2}{G}"); - + super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{2}{G}"); // Destroy target creature with flying and all Equipment attached to that creature. this.getSpellAbility().addEffect(new EatenBySpidersEffect()); - this.getSpellAbility().addTarget(new TargetPermanent(filter)); + this.getSpellAbility().addTarget(new TargetPermanent(StaticFilters.FILTER_CREATURE_FLYING)); } private EatenBySpiders(final EatenBySpiders card) { diff --git a/Mage.Sets/src/mage/cards/e/ElvishSkysweeper.java b/Mage.Sets/src/mage/cards/e/ElvishSkysweeper.java index be06a8f9757..10fcdc0fb26 100644 --- a/Mage.Sets/src/mage/cards/e/ElvishSkysweeper.java +++ b/Mage.Sets/src/mage/cards/e/ElvishSkysweeper.java @@ -1,38 +1,26 @@ package mage.cards.e; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.common.SacrificeTargetCost; import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.effects.common.DestroyTargetEffect; -import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; -import mage.constants.Zone; import mage.filter.StaticFilters; -import mage.filter.common.FilterCreaturePermanent; -import mage.filter.predicate.mageobject.AbilityPredicate; import mage.target.TargetPermanent; -import mage.target.common.TargetControlledCreaturePermanent; -import mage.target.common.TargetCreaturePermanent; + +import java.util.UUID; /** - * * @author Loki */ public final class ElvishSkysweeper extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature with flying"); - - static { - filter.add(new AbilityPredicate(FlyingAbility.class)); - } - public ElvishSkysweeper(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{G}"); this.subtype.add(SubType.ELF); @@ -44,7 +32,7 @@ public final class ElvishSkysweeper extends CardImpl { // {4}{G}, Sacrifice a creature: Destroy target creature with flying. Ability ability = new SimpleActivatedAbility(new DestroyTargetEffect(), new ManaCostsImpl<>("{4}{G}")); ability.addCost(new SacrificeTargetCost(StaticFilters.FILTER_PERMANENT_CREATURE)); - ability.addTarget(new TargetPermanent(filter)); + ability.addTarget(new TargetPermanent(StaticFilters.FILTER_CREATURE_FLYING)); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/e/Ettercap.java b/Mage.Sets/src/mage/cards/e/Ettercap.java index dfc21a00fdd..692fea5aa27 100644 --- a/Mage.Sets/src/mage/cards/e/Ettercap.java +++ b/Mage.Sets/src/mage/cards/e/Ettercap.java @@ -2,15 +2,12 @@ package mage.cards.e; import mage.MageInt; import mage.abilities.effects.common.DestroyTargetEffect; -import mage.abilities.keyword.FlyingAbility; import mage.abilities.keyword.ReachAbility; import mage.cards.AdventureCard; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; -import mage.filter.FilterPermanent; -import mage.filter.common.FilterCreaturePermanent; -import mage.filter.predicate.mageobject.AbilityPredicate; +import mage.filter.StaticFilters; import mage.target.TargetPermanent; import java.util.UUID; @@ -20,12 +17,6 @@ import java.util.UUID; */ public final class Ettercap extends AdventureCard { - private static final FilterPermanent filter = new FilterCreaturePermanent("creature with flying"); - - static { - filter.add(new AbilityPredicate(FlyingAbility.class)); - } - public Ettercap(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, new CardType[]{CardType.INSTANT}, "{4}{G}", "Web Shot", "{2}{G}"); @@ -40,7 +31,7 @@ public final class Ettercap extends AdventureCard { // Web Shot // Destroy target creature with flying. this.getSpellCard().getSpellAbility().addEffect(new DestroyTargetEffect()); - this.getSpellCard().getSpellAbility().addTarget(new TargetPermanent(filter)); + this.getSpellCard().getSpellAbility().addTarget(new TargetPermanent(StaticFilters.FILTER_CREATURE_FLYING)); this.finalizeAdventure(); } diff --git a/Mage.Sets/src/mage/cards/e/EzurisArchers.java b/Mage.Sets/src/mage/cards/e/EzurisArchers.java index 95d98e62d44..1f102ae4bbd 100644 --- a/Mage.Sets/src/mage/cards/e/EzurisArchers.java +++ b/Mage.Sets/src/mage/cards/e/EzurisArchers.java @@ -1,35 +1,26 @@ package mage.cards.e; -import java.util.UUID; import mage.MageInt; import mage.abilities.common.BlocksCreatureTriggeredAbility; import mage.abilities.effects.common.continuous.BoostSourceEffect; -import mage.abilities.keyword.FlyingAbility; import mage.abilities.keyword.ReachAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.constants.SubType; import mage.constants.Duration; -import mage.filter.FilterPermanent; -import mage.filter.common.FilterCreaturePermanent; -import mage.filter.predicate.mageobject.AbilityPredicate; +import mage.constants.SubType; +import mage.filter.StaticFilters; + +import java.util.UUID; /** - * * @author North */ public final class EzurisArchers extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature with flying"); - - static { - filter.add(new AbilityPredicate(FlyingAbility.class)); - } - public EzurisArchers(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{G}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{G}"); this.subtype.add(SubType.ELF); this.subtype.add(SubType.ARCHER); @@ -40,7 +31,7 @@ public final class EzurisArchers extends CardImpl { this.addAbility(ReachAbility.getInstance()); // Whenever Ezuri's Archers blocks a creature with flying, Ezuri's Archers gets +3/+0 until end of turn. - this.addAbility(new BlocksCreatureTriggeredAbility(new BoostSourceEffect(3, 0, Duration.EndOfTurn), filter, false)); + this.addAbility(new BlocksCreatureTriggeredAbility(new BoostSourceEffect(3, 0, Duration.EndOfTurn), StaticFilters.FILTER_CREATURE_FLYING, false)); } private EzurisArchers(final EzurisArchers card) { diff --git a/Mage.Sets/src/mage/cards/f/FellThePheasant.java b/Mage.Sets/src/mage/cards/f/FellThePheasant.java index 788685d81a0..0c6a42e543e 100644 --- a/Mage.Sets/src/mage/cards/f/FellThePheasant.java +++ b/Mage.Sets/src/mage/cards/f/FellThePheasant.java @@ -2,13 +2,10 @@ package mage.cards.f; import mage.abilities.effects.common.CreateTokenEffect; import mage.abilities.effects.common.DamageTargetEffect; -import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.filter.FilterPermanent; -import mage.filter.common.FilterCreaturePermanent; -import mage.filter.predicate.mageobject.AbilityPredicate; +import mage.filter.StaticFilters; import mage.game.permanent.token.FoodToken; import mage.target.TargetPermanent; @@ -19,20 +16,13 @@ import java.util.UUID; */ public final class FellThePheasant extends CardImpl { - - private static final FilterPermanent filter = new FilterCreaturePermanent("creature with flying"); - - static { - filter.add(new AbilityPredicate(FlyingAbility.class)); - } - public FellThePheasant(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{1}{G}"); // Fell the Pheasant deals 5 damage to target creature with flying. Create a Food token. this.getSpellAbility().addEffect(new DamageTargetEffect(5)); this.getSpellAbility().addEffect(new CreateTokenEffect(new FoodToken())); - this.getSpellAbility().addTarget(new TargetPermanent(filter)); + this.getSpellAbility().addTarget(new TargetPermanent(StaticFilters.FILTER_CREATURE_FLYING)); } private FellThePheasant(final FellThePheasant card) { diff --git a/Mage.Sets/src/mage/cards/f/Firespout.java b/Mage.Sets/src/mage/cards/f/Firespout.java index 6f894b1fd13..c8ed77f2799 100644 --- a/Mage.Sets/src/mage/cards/f/Firespout.java +++ b/Mage.Sets/src/mage/cards/f/Firespout.java @@ -8,7 +8,7 @@ import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.constants.ColoredManaSymbol; +import mage.filter.StaticFilters; import mage.filter.common.FilterCreaturePermanent; import mage.filter.predicate.Predicates; import mage.filter.predicate.mageobject.AbilityPredicate; @@ -21,23 +21,20 @@ import java.util.UUID; public final class Firespout extends CardImpl { private static final FilterCreaturePermanent filter1 = new FilterCreaturePermanent("creature without flying"); - private static final FilterCreaturePermanent filter2 = new FilterCreaturePermanent("creature with flying"); static { filter1.add(Predicates.not(new AbilityPredicate(FlyingAbility.class))); - filter2.add(new AbilityPredicate(FlyingAbility.class)); } public Firespout(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{2}{R/G}"); - // Firespout deals 3 damage to each creature without flying if {R} was spent to cast Firespout and 3 damage to each creature with flying if {G} was spent to cast it. this.getSpellAbility().addEffect(new ConditionalOneShotEffect( new DamageAllEffect(3, filter1), ManaWasSpentCondition.RED, "{this} deals 3 damage to each creature without flying if {R} was spent to cast this spell")); this.getSpellAbility().addEffect(new ConditionalOneShotEffect( - new DamageAllEffect(3, filter2), + new DamageAllEffect(3, StaticFilters.FILTER_CREATURE_FLYING), ManaWasSpentCondition.GREEN, "and 3 damage to each creature with flying if {G} was spent to cast this spell. (Do both if {R}{G} was spent.)")); } diff --git a/Mage.Sets/src/mage/cards/f/FlourishingStrike.java b/Mage.Sets/src/mage/cards/f/FlourishingStrike.java index fa4d511a980..0609d8156a5 100644 --- a/Mage.Sets/src/mage/cards/f/FlourishingStrike.java +++ b/Mage.Sets/src/mage/cards/f/FlourishingStrike.java @@ -4,13 +4,11 @@ import mage.abilities.Mode; import mage.abilities.effects.common.DamageTargetEffect; import mage.abilities.effects.common.continuous.BoostTargetEffect; import mage.abilities.keyword.EntwineAbility; -import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Duration; -import mage.filter.common.FilterCreaturePermanent; -import mage.filter.predicate.mageobject.AbilityPredicate; +import mage.filter.StaticFilters; import mage.target.TargetPermanent; import mage.target.common.TargetCreaturePermanent; @@ -21,20 +19,13 @@ import java.util.UUID; */ public final class FlourishingStrike extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature with flying"); - - static { - filter.add(new AbilityPredicate(FlyingAbility.class)); - } - public FlourishingStrike(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{1}{G}"); - // Choose one — // • Flourishing Strike deals 5 damage to target creature with flying. this.getSpellAbility().addEffect(new DamageTargetEffect(5)); - this.getSpellAbility().addTarget(new TargetPermanent(filter)); + this.getSpellAbility().addTarget(new TargetPermanent(StaticFilters.FILTER_CREATURE_FLYING)); // • Target creature gets +3/+3 until end of turn. Mode mode = new Mode(new BoostTargetEffect(3, 3, Duration.EndOfTurn)); diff --git a/Mage.Sets/src/mage/cards/f/ForcedLanding.java b/Mage.Sets/src/mage/cards/f/ForcedLanding.java index fe46b1c5cec..f2e58398187 100644 --- a/Mage.Sets/src/mage/cards/f/ForcedLanding.java +++ b/Mage.Sets/src/mage/cards/f/ForcedLanding.java @@ -1,12 +1,10 @@ package mage.cards.f; import mage.abilities.effects.common.PutOnLibraryTargetEffect; -import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.filter.common.FilterCreaturePermanent; -import mage.filter.predicate.mageobject.AbilityPredicate; +import mage.filter.StaticFilters; import mage.target.TargetPermanent; import java.util.UUID; @@ -16,19 +14,12 @@ import java.util.UUID; */ public final class ForcedLanding extends CardImpl { - private static final FilterCreaturePermanent filter - = new FilterCreaturePermanent("creature with flying"); - - static { - filter.add(new AbilityPredicate(FlyingAbility.class)); - } - public ForcedLanding(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{1}{G}"); // Put target creature with flying on the bottom of its owner's library. this.getSpellAbility().addEffect(new PutOnLibraryTargetEffect(false)); - this.getSpellAbility().addTarget(new TargetPermanent(filter)); + this.getSpellAbility().addTarget(new TargetPermanent(StaticFilters.FILTER_CREATURE_FLYING)); } private ForcedLanding(final ForcedLanding card) { diff --git a/Mage.Sets/src/mage/cards/f/FowlStrike.java b/Mage.Sets/src/mage/cards/f/FowlStrike.java index ce423d2a787..50f9b33cc5c 100644 --- a/Mage.Sets/src/mage/cards/f/FowlStrike.java +++ b/Mage.Sets/src/mage/cards/f/FowlStrike.java @@ -2,15 +2,12 @@ package mage.cards.f; import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.effects.common.DestroyTargetEffect; -import mage.abilities.keyword.FlyingAbility; import mage.abilities.keyword.ReinforceAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.filter.common.FilterCreaturePermanent; -import mage.filter.predicate.mageobject.AbilityPredicate; +import mage.filter.StaticFilters; import mage.target.TargetPermanent; -import mage.target.common.TargetCreaturePermanent; import java.util.UUID; @@ -19,18 +16,12 @@ import java.util.UUID; */ public final class FowlStrike extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature with flying"); - - static { - filter.add(new AbilityPredicate(FlyingAbility.class)); - } - public FowlStrike(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{1}{G}"); // Destroy target creature with flying. this.getSpellAbility().addEffect(new DestroyTargetEffect()); - this.getSpellAbility().addTarget(new TargetPermanent(filter)); + this.getSpellAbility().addTarget(new TargetPermanent(StaticFilters.FILTER_CREATURE_FLYING)); // Reinforce 2--{2}{G} this.addAbility(new ReinforceAbility(2, new ManaCostsImpl<>("{2}{G}"))); diff --git a/Mage.Sets/src/mage/cards/f/FrostwebSpider.java b/Mage.Sets/src/mage/cards/f/FrostwebSpider.java index fa470eef0c8..135ae2fa560 100644 --- a/Mage.Sets/src/mage/cards/f/FrostwebSpider.java +++ b/Mage.Sets/src/mage/cards/f/FrostwebSpider.java @@ -1,14 +1,12 @@ package mage.cards.f; -import java.util.UUID; import mage.MageInt; import mage.abilities.common.BlocksCreatureTriggeredAbility; import mage.abilities.common.delayed.AtTheEndOfCombatDelayedTriggeredAbility; import mage.abilities.effects.Effect; import mage.abilities.effects.common.CreateDelayedTriggeredAbilityEffect; import mage.abilities.effects.common.counter.AddCountersSourceEffect; -import mage.abilities.keyword.FlyingAbility; import mage.abilities.keyword.ReachAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; @@ -16,20 +14,15 @@ import mage.constants.CardType; import mage.constants.SubType; import mage.constants.SuperType; import mage.counters.CounterType; -import mage.filter.common.FilterCreaturePermanent; -import mage.filter.predicate.mageobject.AbilityPredicate; +import mage.filter.StaticFilters; + +import java.util.UUID; + /** - * * @author L_J */ public final class FrostwebSpider extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature with flying"); - - static { - filter.add(new AbilityPredicate(FlyingAbility.class)); - } - public FrostwebSpider(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{G}"); this.supertype.add(SuperType.SNOW); @@ -43,7 +36,7 @@ public final class FrostwebSpider extends CardImpl { // Whenever Frostweb Spider blocks a creature with flying, put a +1/+1 counter on Frostweb Spider at end of combat. Effect effect = new CreateDelayedTriggeredAbilityEffect(new AtTheEndOfCombatDelayedTriggeredAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance())), true); effect.setText("put a +1/+1 counter on {this} at end of combat"); - this.addAbility(new BlocksCreatureTriggeredAbility(effect, filter,false)); + this.addAbility(new BlocksCreatureTriggeredAbility(effect, StaticFilters.FILTER_CREATURE_FLYING, false)); } private FrostwebSpider(final FrostwebSpider card) { @@ -54,4 +47,4 @@ public final class FrostwebSpider extends CardImpl { public FrostwebSpider copy() { return new FrostwebSpider(this); } -} \ No newline at end of file +} diff --git a/Mage.Sets/src/mage/cards/g/GaleForce.java b/Mage.Sets/src/mage/cards/g/GaleForce.java index 5c453b553be..6fdd7b91746 100644 --- a/Mage.Sets/src/mage/cards/g/GaleForce.java +++ b/Mage.Sets/src/mage/cards/g/GaleForce.java @@ -1,31 +1,22 @@ - - package mage.cards.g; -import java.util.UUID; import mage.abilities.effects.common.DamageAllEffect; -import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.filter.common.FilterCreaturePermanent; -import mage.filter.predicate.mageobject.AbilityPredicate; +import mage.filter.StaticFilters; + +import java.util.UUID; /** * @author Loki */ public final class GaleForce extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature with flying"); - - static { - filter.add(new AbilityPredicate(FlyingAbility.class)); - } - public GaleForce(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{4}{G}"); + super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{4}{G}"); - this.getSpellAbility().addEffect(new DamageAllEffect(5, filter)); + this.getSpellAbility().addEffect(new DamageAllEffect(5, StaticFilters.FILTER_CREATURE_FLYING)); } private GaleForce(final GaleForce card) { diff --git a/Mage.Sets/src/mage/cards/g/GeistcatchersRig.java b/Mage.Sets/src/mage/cards/g/GeistcatchersRig.java index 48ef5dc2ea2..860a41d4a3a 100644 --- a/Mage.Sets/src/mage/cards/g/GeistcatchersRig.java +++ b/Mage.Sets/src/mage/cards/g/GeistcatchersRig.java @@ -1,42 +1,34 @@ package mage.cards.g; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.effects.common.DamageTargetEffect; -import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; -import mage.filter.common.FilterCreaturePermanent; -import mage.filter.predicate.mageobject.AbilityPredicate; +import mage.filter.StaticFilters; import mage.target.TargetPermanent; -import mage.target.common.TargetCreaturePermanent; + +import java.util.UUID; /** - * * @author North */ public final class GeistcatchersRig extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature with flying"); - - static { - filter.add(new AbilityPredicate(FlyingAbility.class)); - } - public GeistcatchersRig(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT,CardType.CREATURE},"{6}"); + super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{6}"); this.subtype.add(SubType.CONSTRUCT); this.power = new MageInt(4); this.toughness = new MageInt(5); + // When Geistcatcher's Rig enters the battlefield, you may have it deal 4 damage to target creature with flying. Ability ability = new EntersBattlefieldTriggeredAbility(new DamageTargetEffect(4), true); - ability.addTarget(new TargetPermanent(filter)); + ability.addTarget(new TargetPermanent(StaticFilters.FILTER_CREATURE_FLYING)); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/g/GloomwidowsFeast.java b/Mage.Sets/src/mage/cards/g/GloomwidowsFeast.java index fef48fffef7..8df43d7c397 100644 --- a/Mage.Sets/src/mage/cards/g/GloomwidowsFeast.java +++ b/Mage.Sets/src/mage/cards/g/GloomwidowsFeast.java @@ -1,40 +1,31 @@ package mage.cards.g; -import java.util.UUID; import mage.abilities.Ability; import mage.abilities.effects.OneShotEffect; -import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Outcome; -import mage.filter.common.FilterCreaturePermanent; -import mage.filter.predicate.mageobject.AbilityPredicate; +import mage.filter.StaticFilters; import mage.game.Game; import mage.game.permanent.Permanent; import mage.game.permanent.token.SpiderToken; import mage.target.TargetPermanent; +import java.util.UUID; + /** - * * @author jeffwadsworth */ public final class GloomwidowsFeast extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("target creature with flying"); - - static { - filter.add(new AbilityPredicate(FlyingAbility.class)); - } - public GloomwidowsFeast(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{3}{G}"); - + super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{3}{G}"); // Destroy target creature with flying. If that creature was blue or black, create a 1/2 green Spider creature token with reach. this.getSpellAbility().addEffect(new GloomwidowsFeastEffect()); - this.getSpellAbility().addTarget(new TargetPermanent(filter)); + this.getSpellAbility().addTarget(new TargetPermanent(StaticFilters.FILTER_CREATURE_FLYING)); } diff --git a/Mage.Sets/src/mage/cards/g/GoblinSkycutter.java b/Mage.Sets/src/mage/cards/g/GoblinSkycutter.java index 4cfbe13ee95..09eff010452 100644 --- a/Mage.Sets/src/mage/cards/g/GoblinSkycutter.java +++ b/Mage.Sets/src/mage/cards/g/GoblinSkycutter.java @@ -1,7 +1,6 @@ package mage.cards.g; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; @@ -12,27 +11,18 @@ import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.constants.SubType; import mage.constants.Duration; -import mage.constants.Zone; -import mage.filter.common.FilterCreaturePermanent; -import mage.filter.predicate.mageobject.AbilityPredicate; +import mage.constants.SubType; +import mage.filter.StaticFilters; import mage.target.TargetPermanent; -import mage.target.common.TargetCreaturePermanent; + +import java.util.UUID; /** - * * @author LoneFox - * */ public final class GoblinSkycutter extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature with flying"); - - static { - filter.add(new AbilityPredicate(FlyingAbility.class)); - } - public GoblinSkycutter(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{R}"); this.subtype.add(SubType.GOBLIN); @@ -43,7 +33,7 @@ public final class GoblinSkycutter extends CardImpl { // Sacrifice Goblin Skycutter: Goblin Skycutter deals 2 damage to target creature with flying. That creature loses flying until end of turn. Ability ability = new SimpleActivatedAbility(new DamageTargetEffect(2, "it"), new SacrificeSourceCost()); ability.addEffect(new LoseAbilityTargetEffect(FlyingAbility.getInstance(), Duration.EndOfTurn).setText("that creature loses flying until end of turn")); - ability.addTarget(new TargetPermanent(filter)); + ability.addTarget(new TargetPermanent(StaticFilters.FILTER_CREATURE_FLYING)); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/g/GrapeshotCatapult.java b/Mage.Sets/src/mage/cards/g/GrapeshotCatapult.java index ae8d84dce82..9adf2a38c37 100644 --- a/Mage.Sets/src/mage/cards/g/GrapeshotCatapult.java +++ b/Mage.Sets/src/mage/cards/g/GrapeshotCatapult.java @@ -1,37 +1,27 @@ package mage.cards.g; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.common.TapSourceCost; import mage.abilities.effects.common.DamageTargetEffect; -import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; -import mage.constants.Zone; -import mage.filter.common.FilterCreaturePermanent; -import mage.filter.predicate.mageobject.AbilityPredicate; +import mage.filter.StaticFilters; import mage.target.TargetPermanent; -import mage.target.common.TargetCreaturePermanent; + +import java.util.UUID; /** - * * @author anonymous */ public final class GrapeshotCatapult extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature with flying"); - - static { - filter.add(new AbilityPredicate(FlyingAbility.class)); - } - public GrapeshotCatapult(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT,CardType.CREATURE},"{4}"); + super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{4}"); this.subtype.add(SubType.CONSTRUCT); this.power = new MageInt(2); @@ -39,7 +29,7 @@ public final class GrapeshotCatapult extends CardImpl { // {tap}: Grapeshot Catapult deals 1 damage to target creature with flying. Ability activatedAbility = new SimpleActivatedAbility(new DamageTargetEffect(1), new TapSourceCost()); - activatedAbility.addTarget(new TargetPermanent(filter)); + activatedAbility.addTarget(new TargetPermanent(StaticFilters.FILTER_CREATURE_FLYING)); this.addAbility(activatedAbility); } diff --git a/Mage.Sets/src/mage/cards/g/GruulCharm.java b/Mage.Sets/src/mage/cards/g/GruulCharm.java index b5b63e7d715..80816652a97 100644 --- a/Mage.Sets/src/mage/cards/g/GruulCharm.java +++ b/Mage.Sets/src/mage/cards/g/GruulCharm.java @@ -1,6 +1,5 @@ package mage.cards.g; -import java.util.UUID; import mage.abilities.Mode; import mage.abilities.effects.common.DamageAllEffect; import mage.abilities.effects.common.combat.CantBlockAllEffect; @@ -12,29 +11,28 @@ import mage.constants.CardType; import mage.constants.Duration; import mage.constants.TargetController; import mage.filter.FilterPermanent; +import mage.filter.StaticFilters; import mage.filter.common.FilterCreaturePermanent; import mage.filter.predicate.Predicates; import mage.filter.predicate.mageobject.AbilityPredicate; +import java.util.UUID; + /** - * * @author jeffwadsworth */ public final class GruulCharm extends CardImpl { private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creatures without flying"); private static final FilterPermanent filter2 = new FilterPermanent("permanents you own"); - private static final FilterCreaturePermanent filter3 = new FilterCreaturePermanent("creature with flying"); static { filter.add(Predicates.not(new AbilityPredicate(FlyingAbility.class))); filter2.add(TargetController.YOU.getOwnerPredicate()); - filter3.add(new AbilityPredicate(FlyingAbility.class)); } public GruulCharm(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{R}{G}"); - + super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{R}{G}"); // Choose one - Creatures without flying can't block this turn; this.getSpellAbility().addEffect(new CantBlockAllEffect(filter, Duration.EndOfTurn)); @@ -43,7 +41,7 @@ public final class GruulCharm extends CardImpl { this.getSpellAbility().addMode(new Mode(new GainControlAllEffect(Duration.Custom, filter2))); // or Gruul Charm deals 3 damage to each creature with flying. - this.getSpellAbility().addMode(new Mode(new DamageAllEffect(3, filter3))); + this.getSpellAbility().addMode(new Mode(new DamageAllEffect(3, StaticFilters.FILTER_CREATURE_FLYING))); } private GruulCharm(final GruulCharm card) { diff --git a/Mage.Sets/src/mage/cards/h/HammerheimDeadeye.java b/Mage.Sets/src/mage/cards/h/HammerheimDeadeye.java index dcd68bafae4..7f20fcd8f37 100644 --- a/Mage.Sets/src/mage/cards/h/HammerheimDeadeye.java +++ b/Mage.Sets/src/mage/cards/h/HammerheimDeadeye.java @@ -1,36 +1,28 @@ package mage.cards.h; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.effects.common.DestroyTargetEffect; import mage.abilities.keyword.EchoAbility; -import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; -import mage.filter.common.FilterCreaturePermanent; -import mage.filter.predicate.mageobject.AbilityPredicate; +import mage.filter.StaticFilters; import mage.target.Target; import mage.target.TargetPermanent; -import mage.target.common.TargetCreaturePermanent; + +import java.util.UUID; /** - * * @author LevelX2 */ public final class HammerheimDeadeye extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature with flying"); - static { - filter.add(new AbilityPredicate(FlyingAbility.class)); - } - public HammerheimDeadeye(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.GIANT); this.subtype.add(SubType.WARRIOR); @@ -39,9 +31,10 @@ public final class HammerheimDeadeye extends CardImpl { // Echo {5}{R} this.addAbility(new EchoAbility("{5}{R}")); + // When Hammerheim Deadeye enters the battlefield, destroy target creature with flying. Ability ability = new EntersBattlefieldTriggeredAbility(new DestroyTargetEffect()); - Target target = new TargetPermanent(filter); + Target target = new TargetPermanent(StaticFilters.FILTER_CREATURE_FLYING); ability.addTarget(target); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/h/HeavenEarth.java b/Mage.Sets/src/mage/cards/h/HeavenEarth.java index 02536851d55..159e17c449f 100644 --- a/Mage.Sets/src/mage/cards/h/HeavenEarth.java +++ b/Mage.Sets/src/mage/cards/h/HeavenEarth.java @@ -1,6 +1,5 @@ package mage.cards.h; -import java.util.UUID; import mage.abilities.dynamicvalue.common.GetXValue; import mage.abilities.effects.common.DamageAllEffect; import mage.abilities.keyword.AftermathAbility; @@ -9,21 +8,21 @@ import mage.cards.CardSetInfo; import mage.cards.SplitCard; import mage.constants.CardType; import mage.constants.SpellAbilityType; +import mage.filter.StaticFilters; import mage.filter.common.FilterCreaturePermanent; import mage.filter.predicate.Predicates; import mage.filter.predicate.mageobject.AbilityPredicate; +import java.util.UUID; + /** - * * @author Styxo */ public final class HeavenEarth extends SplitCard { - private static final FilterCreaturePermanent filterFlying = new FilterCreaturePermanent("creature with flying"); private static final FilterCreaturePermanent filterWithouFlying = new FilterCreaturePermanent("creature without flying"); static { - filterFlying.add(new AbilityPredicate(FlyingAbility.class)); filterWithouFlying.add(Predicates.not(new AbilityPredicate(FlyingAbility.class))); } @@ -32,7 +31,7 @@ public final class HeavenEarth extends SplitCard { // Falling // Falling deals X damage to each creature with flying. - getLeftHalfCard().getSpellAbility().addEffect(new DamageAllEffect(GetXValue.instance, filterFlying)); + getLeftHalfCard().getSpellAbility().addEffect(new DamageAllEffect(GetXValue.instance, StaticFilters.FILTER_CREATURE_FLYING)); // to // Earth diff --git a/Mage.Sets/src/mage/cards/h/HighRiseSawjack.java b/Mage.Sets/src/mage/cards/h/HighRiseSawjack.java index 5e35ae1eaec..0d5834f3ad7 100644 --- a/Mage.Sets/src/mage/cards/h/HighRiseSawjack.java +++ b/Mage.Sets/src/mage/cards/h/HighRiseSawjack.java @@ -3,15 +3,13 @@ package mage.cards.h; import mage.MageInt; import mage.abilities.common.BlocksCreatureTriggeredAbility; import mage.abilities.effects.common.continuous.BoostSourceEffect; -import mage.abilities.keyword.FlyingAbility; import mage.abilities.keyword.ReachAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Duration; import mage.constants.SubType; -import mage.filter.common.FilterCreaturePermanent; -import mage.filter.predicate.mageobject.AbilityPredicate; +import mage.filter.StaticFilters; import java.util.UUID; @@ -20,14 +18,8 @@ import java.util.UUID; */ public final class HighRiseSawjack extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature with flying"); - - static { - filter.add(new AbilityPredicate(FlyingAbility.class)); - } - public HighRiseSawjack(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{G}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{G}"); this.subtype.add(SubType.ELF); this.subtype.add(SubType.CITIZEN); @@ -38,7 +30,7 @@ public final class HighRiseSawjack extends CardImpl { this.addAbility(ReachAbility.getInstance()); // Whenever High-Rise Sawjack blocks a creature with flying, High-Rise Sawjack gets +2/+0 until end of turn. - this.addAbility(new BlocksCreatureTriggeredAbility(new BoostSourceEffect(2, 0, Duration.EndOfTurn), filter, false)); + this.addAbility(new BlocksCreatureTriggeredAbility(new BoostSourceEffect(2, 0, Duration.EndOfTurn), StaticFilters.FILTER_CREATURE_FLYING, false)); } private HighRiseSawjack(final HighRiseSawjack card) { diff --git a/Mage.Sets/src/mage/cards/h/HowlingGale.java b/Mage.Sets/src/mage/cards/h/HowlingGale.java index c4e058056c9..ed811ea9995 100644 --- a/Mage.Sets/src/mage/cards/h/HowlingGale.java +++ b/Mage.Sets/src/mage/cards/h/HowlingGale.java @@ -1,40 +1,32 @@ package mage.cards.h; -import java.util.UUID; import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.effects.Effect; import mage.abilities.effects.common.DamageAllEffect; import mage.abilities.effects.common.DamagePlayersEffect; import mage.abilities.keyword.FlashbackAbility; -import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.constants.TimingRule; -import mage.filter.common.FilterCreaturePermanent; -import mage.filter.predicate.mageobject.AbilityPredicate; +import mage.filter.StaticFilters; + +import java.util.UUID; /** - * * @author LevelX2 */ public final class HowlingGale extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature with flying"); - static { - filter.add(new AbilityPredicate(FlyingAbility.class)); - } - public HowlingGale(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{1}{G}"); - + super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{1}{G}"); // Howling Gale deals 1 damage to each creature with flying and each player. - this.getSpellAbility().addEffect(new DamageAllEffect(1, filter)); + this.getSpellAbility().addEffect(new DamageAllEffect(1, StaticFilters.FILTER_CREATURE_FLYING)); Effect effect = new DamagePlayersEffect(1); effect.setText("and each player"); this.getSpellAbility().addEffect(effect); + // Flashback {1}{G} this.addAbility(new FlashbackAbility(this, new ManaCostsImpl<>("{1}{G}"))); } diff --git a/Mage.Sets/src/mage/cards/h/HurlyBurly.java b/Mage.Sets/src/mage/cards/h/HurlyBurly.java index b78d98fd474..002d41c3afd 100644 --- a/Mage.Sets/src/mage/cards/h/HurlyBurly.java +++ b/Mage.Sets/src/mage/cards/h/HurlyBurly.java @@ -1,35 +1,34 @@ package mage.cards.h; -import java.util.UUID; import mage.abilities.Mode; import mage.abilities.effects.common.DamageAllEffect; import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; +import mage.filter.StaticFilters; import mage.filter.common.FilterCreaturePermanent; import mage.filter.predicate.Predicates; import mage.filter.predicate.mageobject.AbilityPredicate; +import java.util.UUID; + /** - * * @author Loki */ public final class HurlyBurly extends CardImpl { private static final FilterCreaturePermanent filterWithoutFlying = new FilterCreaturePermanent("creature without flying"); - private static final FilterCreaturePermanent filterWithFlying = new FilterCreaturePermanent("creature with flying"); static { filterWithoutFlying.add(Predicates.not(new AbilityPredicate(FlyingAbility.class))); - filterWithFlying.add(new AbilityPredicate(FlyingAbility.class)); } public HurlyBurly(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{1}{R}"); + super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{1}{R}"); - this.getSpellAbility().addEffect(new DamageAllEffect(1, filterWithFlying)); + this.getSpellAbility().addEffect(new DamageAllEffect(1, StaticFilters.FILTER_CREATURE_FLYING)); Mode mode = new Mode(new DamageAllEffect(1, filterWithoutFlying)); this.getSpellAbility().addMode(mode); } diff --git a/Mage.Sets/src/mage/cards/h/Hurricane.java b/Mage.Sets/src/mage/cards/h/Hurricane.java index cb196c777c8..06466406ba4 100644 --- a/Mage.Sets/src/mage/cards/h/Hurricane.java +++ b/Mage.Sets/src/mage/cards/h/Hurricane.java @@ -1,34 +1,25 @@ package mage.cards.h; -import java.util.UUID; import mage.abilities.dynamicvalue.common.GetXValue; import mage.abilities.effects.common.DamageEverythingEffect; -import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.filter.common.FilterCreaturePermanent; -import mage.filter.predicate.mageobject.AbilityPredicate; +import mage.filter.StaticFilters; + +import java.util.UUID; /** - * * @author Quercitron */ public final class Hurricane extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature with flying"); - - static { - filter.add(new AbilityPredicate(FlyingAbility.class)); - } - public Hurricane(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{X}{G}"); - + super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{X}{G}"); // Hurricane deals X damage to each creature with flying and each player. - this.getSpellAbility().addEffect(new DamageEverythingEffect(GetXValue.instance, filter)); + this.getSpellAbility().addEffect(new DamageEverythingEffect(GetXValue.instance, StaticFilters.FILTER_CREATURE_FLYING)); } private Hurricane(final Hurricane card) { diff --git a/Mage.Sets/src/mage/cards/i/IfhBiffEfreet.java b/Mage.Sets/src/mage/cards/i/IfhBiffEfreet.java index 9d5a8908f82..d928c40cb76 100644 --- a/Mage.Sets/src/mage/cards/i/IfhBiffEfreet.java +++ b/Mage.Sets/src/mage/cards/i/IfhBiffEfreet.java @@ -1,7 +1,6 @@ package mage.cards.i; -import java.util.UUID; import mage.MageInt; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.mana.ManaCostsImpl; @@ -15,33 +14,26 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; import mage.constants.TargetController; -import mage.constants.Zone; -import mage.filter.common.FilterCreaturePermanent; -import mage.filter.predicate.mageobject.AbilityPredicate; +import mage.filter.StaticFilters; + +import java.util.UUID; /** - * * @author fireshoes */ public final class IfhBiffEfreet extends CardImpl { - - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature with flying"); - - static { - filter.add(new AbilityPredicate(FlyingAbility.class)); - } public IfhBiffEfreet(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{G}{G}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{G}{G}"); this.subtype.add(SubType.EFREET); this.power = new MageInt(3); this.toughness = new MageInt(3); // Flying this.addAbility(FlyingAbility.getInstance()); - + // {G}: Ifh-Biff Efreet deals 1 damage to each creature with flying and each player. Any player may activate this ability. - SimpleActivatedAbility ability = new SimpleActivatedAbility(new DamageAllEffect(1, filter), new ManaCostsImpl<>("{G}")); + SimpleActivatedAbility ability = new SimpleActivatedAbility(new DamageAllEffect(1, StaticFilters.FILTER_CREATURE_FLYING), new ManaCostsImpl<>("{G}")); Effect effect = new DamagePlayersEffect(1); effect.setText("and each player"); ability.addEffect(effect); diff --git a/Mage.Sets/src/mage/cards/i/IslandOfWakWak.java b/Mage.Sets/src/mage/cards/i/IslandOfWakWak.java index fd027139515..98cb6119a16 100644 --- a/Mage.Sets/src/mage/cards/i/IslandOfWakWak.java +++ b/Mage.Sets/src/mage/cards/i/IslandOfWakWak.java @@ -1,44 +1,34 @@ package mage.cards.i; -import java.util.UUID; import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.common.TapSourceCost; import mage.abilities.dynamicvalue.common.StaticValue; import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.common.continuous.SetBasePowerToughnessTargetEffect; -import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Duration; import mage.constants.Outcome; -import mage.constants.Zone; -import mage.filter.common.FilterCreaturePermanent; -import mage.filter.predicate.mageobject.AbilityPredicate; +import mage.filter.StaticFilters; import mage.game.Game; import mage.game.permanent.Permanent; import mage.target.TargetPermanent; -import mage.target.common.TargetCreaturePermanent; + +import java.util.UUID; /** - * * @author anonymous */ public final class IslandOfWakWak extends CardImpl { - private static final FilterCreaturePermanent filterWithFlying = new FilterCreaturePermanent("creature with flying"); - - static { - filterWithFlying.add(new AbilityPredicate(FlyingAbility.class)); - } - public IslandOfWakWak(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.LAND}, ""); // {tap}: Target creature with flying has base power 0 until end of turn. Ability ability = new SimpleActivatedAbility(new IslandOfWakWakEffect(), new TapSourceCost()); - ability.addTarget(new TargetPermanent(filterWithFlying)); + ability.addTarget(new TargetPermanent(StaticFilters.FILTER_CREATURE_FLYING)); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/j/JaggedScarArchers.java b/Mage.Sets/src/mage/cards/j/JaggedScarArchers.java index 28d11bf11bf..f2d2c60297c 100644 --- a/Mage.Sets/src/mage/cards/j/JaggedScarArchers.java +++ b/Mage.Sets/src/mage/cards/j/JaggedScarArchers.java @@ -9,35 +9,30 @@ import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount; import mage.abilities.dynamicvalue.common.SourcePermanentPowerValue; import mage.abilities.effects.common.DamageTargetEffect; import mage.abilities.effects.common.continuous.SetBasePowerToughnessSourceEffect; -import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; import mage.constants.Zone; +import mage.filter.StaticFilters; import mage.filter.common.FilterControlledPermanent; -import mage.filter.common.FilterCreaturePermanent; -import mage.filter.predicate.mageobject.AbilityPredicate; import mage.target.TargetPermanent; -import mage.target.common.TargetCreaturePermanent; import java.util.UUID; /** - * * @author Plopman */ public final class JaggedScarArchers extends CardImpl { - private static final FilterCreaturePermanent flyingCreatureFilter = new FilterCreaturePermanent("creature with flying"); private static final FilterControlledPermanent controlledElvesFilter = new FilterControlledPermanent("Elves you control"); + static { - flyingCreatureFilter.add(new AbilityPredicate(FlyingAbility.class)); controlledElvesFilter.add(SubType.ELF.getPredicate()); } public JaggedScarArchers(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{G}{G}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{G}{G}"); this.subtype.add(SubType.ELF); this.subtype.add(SubType.ARCHER); @@ -46,9 +41,10 @@ public final class JaggedScarArchers extends CardImpl { // Jagged-Scar Archers's power and toughness are each equal to the number of Elves you control. this.addAbility(new SimpleStaticAbility(Zone.ALL, new SetBasePowerToughnessSourceEffect(new PermanentsOnBattlefieldCount(controlledElvesFilter)))); + // {tap}: Jagged-Scar Archers deals damage equal to its power to target creature with flying. Ability ability = new SimpleActivatedAbility(new DamageTargetEffect(SourcePermanentPowerValue.NOT_NEGATIVE).setText("{this} deals damage equal to its power to target creature with flying"), new TapSourceCost()); - ability.addTarget(new TargetPermanent(flyingCreatureFilter)); + ability.addTarget(new TargetPermanent(StaticFilters.FILTER_CREATURE_FLYING)); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/l/LeafArrow.java b/Mage.Sets/src/mage/cards/l/LeafArrow.java index b80bd3e4b88..4dc1eb2b305 100644 --- a/Mage.Sets/src/mage/cards/l/LeafArrow.java +++ b/Mage.Sets/src/mage/cards/l/LeafArrow.java @@ -1,35 +1,24 @@ - package mage.cards.l; -import java.util.UUID; import mage.abilities.effects.common.DamageTargetEffect; -import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.filter.common.FilterCreaturePermanent; -import mage.filter.predicate.mageobject.AbilityPredicate; +import mage.filter.StaticFilters; import mage.target.TargetPermanent; -import mage.target.common.TargetCreaturePermanent; + +import java.util.UUID; /** - * * @author North */ public final class LeafArrow extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature with flying"); - - static { - filter.add(new AbilityPredicate(FlyingAbility.class)); - } - public LeafArrow(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{G}"); + super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{G}"); - - this.getSpellAbility().addTarget(new TargetPermanent(filter)); this.getSpellAbility().addEffect(new DamageTargetEffect(3)); + this.getSpellAbility().addTarget(new TargetPermanent(StaticFilters.FILTER_CREATURE_FLYING)); } private LeafArrow(final LeafArrow card) { diff --git a/Mage.Sets/src/mage/cards/l/LysAlanaBowmaster.java b/Mage.Sets/src/mage/cards/l/LysAlanaBowmaster.java index d031b08afd3..a093279cc39 100644 --- a/Mage.Sets/src/mage/cards/l/LysAlanaBowmaster.java +++ b/Mage.Sets/src/mage/cards/l/LysAlanaBowmaster.java @@ -4,17 +4,14 @@ import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.SpellCastControllerTriggeredAbility; import mage.abilities.effects.common.DamageTargetEffect; -import mage.abilities.keyword.FlyingAbility; import mage.abilities.keyword.ReachAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; import mage.filter.FilterSpell; -import mage.filter.common.FilterCreaturePermanent; -import mage.filter.predicate.mageobject.AbilityPredicate; +import mage.filter.StaticFilters; import mage.target.TargetPermanent; -import mage.target.common.TargetCreaturePermanent; import java.util.UUID; @@ -24,11 +21,9 @@ import java.util.UUID; public final class LysAlanaBowmaster extends CardImpl { private static final FilterSpell filterElf = new FilterSpell("an Elf spell"); - private static final FilterCreaturePermanent filterFlying = new FilterCreaturePermanent("creature with flying"); static { filterElf.add(SubType.ELF.getPredicate()); - filterFlying.add(new AbilityPredicate(FlyingAbility.class)); } public LysAlanaBowmaster(UUID ownerId, CardSetInfo setInfo) { @@ -41,7 +36,7 @@ public final class LysAlanaBowmaster extends CardImpl { this.addAbility(ReachAbility.getInstance()); Ability ability = new SpellCastControllerTriggeredAbility(new DamageTargetEffect(2) .setText("{this} deal 2 damage to target creature with flying"), filterElf, true); - ability.addTarget(new TargetPermanent(filterFlying)); + ability.addTarget(new TargetPermanent(StaticFilters.FILTER_CREATURE_FLYING)); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/m/MatsuTribeSniper.java b/Mage.Sets/src/mage/cards/m/MatsuTribeSniper.java index e6347dc4070..9759315997e 100644 --- a/Mage.Sets/src/mage/cards/m/MatsuTribeSniper.java +++ b/Mage.Sets/src/mage/cards/m/MatsuTribeSniper.java @@ -1,7 +1,6 @@ package mage.cards.m; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.DealsDamageToACreatureTriggeredAbility; @@ -10,31 +9,22 @@ import mage.abilities.costs.common.TapSourceCost; import mage.abilities.effects.common.DamageTargetEffect; import mage.abilities.effects.common.DontUntapInControllersNextUntapStepTargetEffect; import mage.abilities.effects.common.TapTargetEffect; -import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; -import mage.constants.Zone; -import mage.filter.common.FilterCreaturePermanent; -import mage.filter.predicate.mageobject.AbilityPredicate; +import mage.filter.StaticFilters; import mage.target.TargetPermanent; -import mage.target.common.TargetCreaturePermanent; + +import java.util.UUID; /** - * * @author LevelX2 */ public final class MatsuTribeSniper extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature with flying"); - - static { - filter.add(new AbilityPredicate(FlyingAbility.class)); - } - public MatsuTribeSniper(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{G}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{G}"); this.subtype.add(SubType.SNAKE); this.subtype.add(SubType.WARRIOR); this.subtype.add(SubType.ARCHER); @@ -44,9 +34,9 @@ public final class MatsuTribeSniper extends CardImpl { // {t}: Matsu-Tribe Sniper deals 1 damage to target creature with flying. Ability ability = new SimpleActivatedAbility(new DamageTargetEffect(1), new TapSourceCost()); - ability.addTarget(new TargetPermanent(filter)); + ability.addTarget(new TargetPermanent(StaticFilters.FILTER_CREATURE_FLYING)); this.addAbility(ability); - + // Whenever Matsu-Tribe Sniper deals damage to a creature, tap that creature and it doesn't untap during its controller's next untap step. ability = new DealsDamageToACreatureTriggeredAbility(new TapTargetEffect("tap that creature"), false, false, true); ability.addEffect(new DontUntapInControllersNextUntapStepTargetEffect("and it")); diff --git a/Mage.Sets/src/mage/cards/n/NeedleStorm.java b/Mage.Sets/src/mage/cards/n/NeedleStorm.java index a45a14b307d..34195a295eb 100644 --- a/Mage.Sets/src/mage/cards/n/NeedleStorm.java +++ b/Mage.Sets/src/mage/cards/n/NeedleStorm.java @@ -1,30 +1,23 @@ package mage.cards.n; -import java.util.UUID; import mage.abilities.effects.common.DamageAllEffect; -import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.filter.common.FilterCreaturePermanent; -import mage.filter.predicate.mageobject.AbilityPredicate; +import mage.filter.StaticFilters; + +import java.util.UUID; /** * @author Loki */ public final class NeedleStorm extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature with flying"); - - static { - filter.add(new AbilityPredicate(FlyingAbility.class)); - } - public NeedleStorm(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{2}{G}"); + super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{2}{G}"); - this.getSpellAbility().addEffect(new DamageAllEffect(4, filter)); + this.getSpellAbility().addEffect(new DamageAllEffect(4, StaticFilters.FILTER_CREATURE_FLYING)); } private NeedleStorm(final NeedleStorm card) { diff --git a/Mage.Sets/src/mage/cards/n/NetcasterSpider.java b/Mage.Sets/src/mage/cards/n/NetcasterSpider.java index 067d8e48f87..e025ab806b0 100644 --- a/Mage.Sets/src/mage/cards/n/NetcasterSpider.java +++ b/Mage.Sets/src/mage/cards/n/NetcasterSpider.java @@ -1,34 +1,26 @@ package mage.cards.n; -import java.util.UUID; import mage.MageInt; import mage.abilities.common.BlocksCreatureTriggeredAbility; import mage.abilities.effects.common.continuous.BoostSourceEffect; -import mage.abilities.keyword.FlyingAbility; import mage.abilities.keyword.ReachAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.constants.SubType; import mage.constants.Duration; -import mage.filter.common.FilterCreaturePermanent; -import mage.filter.predicate.mageobject.AbilityPredicate; +import mage.constants.SubType; +import mage.filter.StaticFilters; + +import java.util.UUID; /** - * * @author LevelX2 */ public final class NetcasterSpider extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature with flying"); - - static { - filter.add(new AbilityPredicate(FlyingAbility.class)); - } - public NetcasterSpider(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{G}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{G}"); this.subtype.add(SubType.SPIDER); this.power = new MageInt(2); @@ -38,7 +30,7 @@ public final class NetcasterSpider extends CardImpl { this.addAbility(ReachAbility.getInstance()); // Whenever Netcaster Spider blocks a creature with flying, Netcaster Spider gets +2/+0 until end of turn. - this.addAbility(new BlocksCreatureTriggeredAbility(new BoostSourceEffect(2, 0, Duration.EndOfTurn), filter, false)); + this.addAbility(new BlocksCreatureTriggeredAbility(new BoostSourceEffect(2, 0, Duration.EndOfTurn), StaticFilters.FILTER_CREATURE_FLYING, false)); } private NetcasterSpider(final NetcasterSpider card) { @@ -49,4 +41,4 @@ public final class NetcasterSpider extends CardImpl { public NetcasterSpider copy() { return new NetcasterSpider(this); } -} \ No newline at end of file +} diff --git a/Mage.Sets/src/mage/cards/o/OranRiefRecluse.java b/Mage.Sets/src/mage/cards/o/OranRiefRecluse.java index 4a3bf001199..38eb6622d5b 100644 --- a/Mage.Sets/src/mage/cards/o/OranRiefRecluse.java +++ b/Mage.Sets/src/mage/cards/o/OranRiefRecluse.java @@ -5,16 +5,13 @@ import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.condition.common.KickedCondition; import mage.abilities.effects.common.DestroyTargetEffect; -import mage.abilities.keyword.FlyingAbility; import mage.abilities.keyword.KickerAbility; import mage.abilities.keyword.ReachAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; -import mage.filter.FilterPermanent; -import mage.filter.common.FilterCreaturePermanent; -import mage.filter.predicate.mageobject.AbilityPredicate; +import mage.filter.StaticFilters; import mage.target.TargetPermanent; import java.util.UUID; @@ -24,12 +21,6 @@ import java.util.UUID; */ public final class OranRiefRecluse extends CardImpl { - private static final FilterPermanent filter = new FilterCreaturePermanent("creature with flying"); - - static { - filter.add(new AbilityPredicate(FlyingAbility.class)); - } - public OranRiefRecluse(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{G}"); this.subtype.add(SubType.SPIDER); @@ -45,7 +36,7 @@ public final class OranRiefRecluse extends CardImpl { // When Oran-Rief Recluse enters the battlefield, if it was kicked, destroy target creature with flying. Ability ability = new EntersBattlefieldTriggeredAbility(new DestroyTargetEffect()).withInterveningIf(KickedCondition.ONCE); - ability.addTarget(new TargetPermanent(filter)); + ability.addTarget(new TargetPermanent(StaticFilters.FILTER_CREATURE_FLYING)); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/p/PawpatchFormation.java b/Mage.Sets/src/mage/cards/p/PawpatchFormation.java index 2588adc0179..0a4ee1ba923 100644 --- a/Mage.Sets/src/mage/cards/p/PawpatchFormation.java +++ b/Mage.Sets/src/mage/cards/p/PawpatchFormation.java @@ -4,13 +4,10 @@ import mage.abilities.Mode; import mage.abilities.effects.common.CreateTokenEffect; import mage.abilities.effects.common.DestroyTargetEffect; import mage.abilities.effects.common.DrawCardSourceControllerEffect; -import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.filter.FilterPermanent; -import mage.filter.common.FilterCreaturePermanent; -import mage.filter.predicate.mageobject.AbilityPredicate; +import mage.filter.StaticFilters; import mage.game.permanent.token.FoodToken; import mage.target.TargetPermanent; import mage.target.common.TargetEnchantmentPermanent; @@ -22,19 +19,13 @@ import java.util.UUID; */ public final class PawpatchFormation extends CardImpl { - private static final FilterPermanent filter = new FilterCreaturePermanent("creature with flying"); - - static { - filter.add(new AbilityPredicate(FlyingAbility.class)); - } - public PawpatchFormation(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{1}{G}"); // Choose one -- // * Destroy target creature with flying. this.getSpellAbility().addEffect(new DestroyTargetEffect()); - this.getSpellAbility().addTarget(new TargetPermanent(filter)); + this.getSpellAbility().addTarget(new TargetPermanent(StaticFilters.FILTER_CREATURE_FLYING)); // * Destroy target enchantment. this.getSpellAbility().addMode(new Mode(new DestroyTargetEffect()).addTarget(new TargetEnchantmentPermanent())); diff --git a/Mage.Sets/src/mage/cards/p/PickYourPoison.java b/Mage.Sets/src/mage/cards/p/PickYourPoison.java index fa624d5439e..6460fef2c44 100644 --- a/Mage.Sets/src/mage/cards/p/PickYourPoison.java +++ b/Mage.Sets/src/mage/cards/p/PickYourPoison.java @@ -2,14 +2,10 @@ package mage.cards.p; import mage.abilities.Mode; import mage.abilities.effects.common.SacrificeOpponentsEffect; -import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.filter.FilterPermanent; import mage.filter.StaticFilters; -import mage.filter.common.FilterCreaturePermanent; -import mage.filter.predicate.mageobject.AbilityPredicate; import java.util.UUID; @@ -18,12 +14,6 @@ import java.util.UUID; */ public final class PickYourPoison extends CardImpl { - private static final FilterPermanent filter = new FilterCreaturePermanent("creature with flying"); - - static { - filter.add(new AbilityPredicate(FlyingAbility.class)); - } - public PickYourPoison(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{G}"); @@ -35,7 +25,7 @@ public final class PickYourPoison extends CardImpl { this.getSpellAbility().addMode(new Mode(new SacrificeOpponentsEffect(StaticFilters.FILTER_PERMANENT_ENCHANTMENT))); // * Each opponent sacrifices a creature with flying. - this.getSpellAbility().addMode(new Mode(new SacrificeOpponentsEffect(filter) + this.getSpellAbility().addMode(new Mode(new SacrificeOpponentsEffect(StaticFilters.FILTER_CREATURE_FLYING) .setText("each opponent sacrifices a creature of their choice with flying"))); } diff --git a/Mage.Sets/src/mage/cards/p/PierceTheSky.java b/Mage.Sets/src/mage/cards/p/PierceTheSky.java index d2d3a4d0273..708beef88db 100644 --- a/Mage.Sets/src/mage/cards/p/PierceTheSky.java +++ b/Mage.Sets/src/mage/cards/p/PierceTheSky.java @@ -1,35 +1,26 @@ package mage.cards.p; -import java.util.UUID; import mage.abilities.effects.common.DamageTargetEffect; -import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.filter.common.FilterCreaturePermanent; -import mage.filter.predicate.mageobject.AbilityPredicate; +import mage.filter.StaticFilters; import mage.target.TargetPermanent; -import mage.target.common.TargetCreaturePermanent; + +import java.util.UUID; /** - * * @author TheElk801 */ public final class PierceTheSky extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature with flying"); - - static { - filter.add(new AbilityPredicate(FlyingAbility.class)); - } - public PierceTheSky(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{1}{G}"); // Pierce the Sky deals 7 damage to target creature with flying. this.getSpellAbility().addEffect(new DamageTargetEffect(7)); - this.getSpellAbility().addTarget(new TargetPermanent(filter)); + this.getSpellAbility().addTarget(new TargetPermanent(StaticFilters.FILTER_CREATURE_FLYING)); } private PierceTheSky(final PierceTheSky card) { diff --git a/Mage.Sets/src/mage/cards/p/PinionFeast.java b/Mage.Sets/src/mage/cards/p/PinionFeast.java index 42080cdd626..be8a98c2f07 100644 --- a/Mage.Sets/src/mage/cards/p/PinionFeast.java +++ b/Mage.Sets/src/mage/cards/p/PinionFeast.java @@ -1,36 +1,27 @@ package mage.cards.p; -import java.util.UUID; import mage.abilities.effects.common.DestroyTargetEffect; import mage.abilities.effects.keyword.BolsterEffect; -import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.filter.common.FilterCreaturePermanent; -import mage.filter.predicate.mageobject.AbilityPredicate; +import mage.filter.StaticFilters; import mage.target.TargetPermanent; -import mage.target.common.TargetCreaturePermanent; + +import java.util.UUID; /** - * * @author LevelX2 */ public final class PinionFeast extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature with flying"); - - static { - filter.add(new AbilityPredicate(FlyingAbility.class)); - } - public PinionFeast(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{4}{G}"); + super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{4}{G}"); // Destroy target creature with flying. Bolster 2. this.getSpellAbility().addEffect(new DestroyTargetEffect()); - this.getSpellAbility().addTarget(new TargetPermanent(filter)); + this.getSpellAbility().addTarget(new TargetPermanent(StaticFilters.FILTER_CREATURE_FLYING)); this.getSpellAbility().addEffect(new BolsterEffect(2)); } diff --git a/Mage.Sets/src/mage/cards/p/PistusStrike.java b/Mage.Sets/src/mage/cards/p/PistusStrike.java index e446b0b2fc8..146577553f5 100644 --- a/Mage.Sets/src/mage/cards/p/PistusStrike.java +++ b/Mage.Sets/src/mage/cards/p/PistusStrike.java @@ -1,42 +1,33 @@ package mage.cards.p; -import java.util.UUID; import mage.abilities.Ability; import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.common.DestroyTargetEffect; -import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Outcome; import mage.counters.CounterType; -import mage.filter.common.FilterCreaturePermanent; -import mage.filter.predicate.mageobject.AbilityPredicate; +import mage.filter.StaticFilters; import mage.game.Game; import mage.game.permanent.Permanent; import mage.players.Player; import mage.target.TargetPermanent; -import mage.target.common.TargetCreaturePermanent; + +import java.util.UUID; /** - * * @author Viserion */ public final class PistusStrike extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature with flying"); - - static { - filter.add(new AbilityPredicate(FlyingAbility.class)); - } - public PistusStrike(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{2}{G}"); + super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{2}{G}"); - this.getSpellAbility().addTarget(new TargetPermanent(filter)); this.getSpellAbility().addEffect(new DestroyTargetEffect()); this.getSpellAbility().addEffect(new PoisonControllerTargetCreatureEffect()); + this.getSpellAbility().addTarget(new TargetPermanent(StaticFilters.FILTER_CREATURE_FLYING)); } private PistusStrike(final PistusStrike card) { diff --git a/Mage.Sets/src/mage/cards/p/Plummet.java b/Mage.Sets/src/mage/cards/p/Plummet.java index 559acade3ba..a3acce9ba19 100644 --- a/Mage.Sets/src/mage/cards/p/Plummet.java +++ b/Mage.Sets/src/mage/cards/p/Plummet.java @@ -3,34 +3,25 @@ package mage.cards.p; -import java.util.UUID; import mage.abilities.effects.common.DestroyTargetEffect; -import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.filter.common.FilterCreaturePermanent; -import mage.filter.predicate.mageobject.AbilityPredicate; +import mage.filter.StaticFilters; import mage.target.TargetPermanent; -import mage.target.common.TargetCreaturePermanent; + +import java.util.UUID; /** - * * @author BetaSteward_at_googlemail.com */ public final class Plummet extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature with flying"); - - static { - filter.add(new AbilityPredicate(FlyingAbility.class)); - } - public Plummet(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{1}{G}"); + super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{1}{G}"); - this.getSpellAbility().addTarget(new TargetPermanent(filter)); this.getSpellAbility().addEffect(new DestroyTargetEffect()); + this.getSpellAbility().addTarget(new TargetPermanent(StaticFilters.FILTER_CREATURE_FLYING)); } private Plummet(final Plummet card) { diff --git a/Mage.Sets/src/mage/cards/p/PredatorFlagship.java b/Mage.Sets/src/mage/cards/p/PredatorFlagship.java index e7a586da48a..97dc2e2cd83 100644 --- a/Mage.Sets/src/mage/cards/p/PredatorFlagship.java +++ b/Mage.Sets/src/mage/cards/p/PredatorFlagship.java @@ -1,7 +1,6 @@ package mage.cards.p; -import java.util.UUID; import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.common.TapSourceCost; @@ -14,26 +13,19 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Duration; import mage.constants.SuperType; -import mage.constants.Zone; -import mage.filter.common.FilterCreaturePermanent; -import mage.filter.predicate.mageobject.AbilityPredicate; +import mage.filter.StaticFilters; import mage.target.TargetPermanent; import mage.target.common.TargetCreaturePermanent; +import java.util.UUID; + /** - * * @author LevelX2 */ public final class PredatorFlagship extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature with flying"); - - static { - filter.add(new AbilityPredicate(FlyingAbility.class)); - } - public PredatorFlagship(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT},"{5}"); + super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{5}"); this.supertype.add(SuperType.LEGENDARY); // {2}: Target creature gains flying until end of turn. @@ -44,8 +36,8 @@ public final class PredatorFlagship extends CardImpl { // {5}, {T}: Destroy target creature with flying. ability = new SimpleActivatedAbility(new DestroyTargetEffect(), new ManaCostsImpl<>("{5}")); ability.addCost(new TapSourceCost()); - ability.addTarget(new TargetPermanent(filter)); - this.addAbility(ability); + ability.addTarget(new TargetPermanent(StaticFilters.FILTER_CREATURE_FLYING)); + this.addAbility(ability); } private PredatorFlagship(final PredatorFlagship card) { diff --git a/Mage.Sets/src/mage/cards/r/RecklessAirStrike.java b/Mage.Sets/src/mage/cards/r/RecklessAirStrike.java index 911cd944f23..e9e496b9f17 100644 --- a/Mage.Sets/src/mage/cards/r/RecklessAirStrike.java +++ b/Mage.Sets/src/mage/cards/r/RecklessAirStrike.java @@ -3,13 +3,10 @@ package mage.cards.r; import mage.abilities.Mode; import mage.abilities.effects.common.DamageTargetEffect; import mage.abilities.effects.common.DestroyTargetEffect; -import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.filter.FilterPermanent; -import mage.filter.common.FilterCreaturePermanent; -import mage.filter.predicate.mageobject.AbilityPredicate; +import mage.filter.StaticFilters; import mage.target.TargetPermanent; import mage.target.common.TargetArtifactPermanent; @@ -20,19 +17,13 @@ import java.util.UUID; */ public final class RecklessAirStrike extends CardImpl { - private static final FilterPermanent filter = new FilterCreaturePermanent("creature with flying"); - - static { - filter.add(new AbilityPredicate(FlyingAbility.class)); - } - public RecklessAirStrike(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{R}"); // Choose one — // • Reckless Air Strike deals 3 damage to target creature with flying. this.getSpellAbility().addEffect(new DamageTargetEffect(3)); - this.getSpellAbility().addTarget(new TargetPermanent(filter)); + this.getSpellAbility().addTarget(new TargetPermanent(StaticFilters.FILTER_CREATURE_FLYING)); // • Destroy target artifact. Mode mode = new Mode(new DestroyTargetEffect()); diff --git a/Mage.Sets/src/mage/cards/r/RockcasterPlatoon.java b/Mage.Sets/src/mage/cards/r/RockcasterPlatoon.java index 69919e1f7e3..ec70a7ea6ec 100644 --- a/Mage.Sets/src/mage/cards/r/RockcasterPlatoon.java +++ b/Mage.Sets/src/mage/cards/r/RockcasterPlatoon.java @@ -6,13 +6,11 @@ import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.effects.common.DamageAllEffect; import mage.abilities.effects.common.DamagePlayersEffect; -import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; -import mage.filter.common.FilterCreaturePermanent; -import mage.filter.predicate.mageobject.AbilityPredicate; +import mage.filter.StaticFilters; import java.util.UUID; @@ -21,12 +19,6 @@ import java.util.UUID; */ public final class RockcasterPlatoon extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature with flying"); - - static { - filter.add(new AbilityPredicate(FlyingAbility.class)); - } - public RockcasterPlatoon(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{5}{W}{W}"); this.subtype.add(SubType.RHINO); @@ -36,7 +28,7 @@ public final class RockcasterPlatoon extends CardImpl { this.toughness = new MageInt(7); // {4}{G}: Rockcaster Platoon deals 2 damage to each creature with flying and each player. - Ability ability = new SimpleActivatedAbility(new DamageAllEffect(2, filter), new ManaCostsImpl<>("{4}{G}")); + Ability ability = new SimpleActivatedAbility(new DamageAllEffect(2, StaticFilters.FILTER_CREATURE_FLYING), new ManaCostsImpl<>("{4}{G}")); ability.addEffect(new DamagePlayersEffect(2).setText("and each player")); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/r/RoughTumble.java b/Mage.Sets/src/mage/cards/r/RoughTumble.java index c1a815ec844..50db48375ab 100644 --- a/Mage.Sets/src/mage/cards/r/RoughTumble.java +++ b/Mage.Sets/src/mage/cards/r/RoughTumble.java @@ -8,6 +8,7 @@ import mage.cards.CardSetInfo; import mage.cards.SplitCard; import mage.constants.CardType; import mage.constants.SpellAbilityType; +import mage.filter.StaticFilters; import mage.filter.common.FilterCreaturePermanent; import mage.filter.predicate.Predicates; import mage.filter.predicate.mageobject.AbilityPredicate; @@ -15,16 +16,13 @@ import mage.filter.predicate.mageobject.AbilityPredicate; import java.util.UUID; /** - * * @author LevelX2 */ public final class RoughTumble extends SplitCard { - private static final FilterCreaturePermanent filterFlying = new FilterCreaturePermanent("creature with flying"); private static final FilterCreaturePermanent filterWithoutFlying = new FilterCreaturePermanent("creature without flying"); static { - filterFlying.add(new AbilityPredicate(FlyingAbility.class)); filterWithoutFlying.add(Predicates.not(new AbilityPredicate(FlyingAbility.class))); } @@ -39,7 +37,7 @@ public final class RoughTumble extends SplitCard { // Tumble // Tumble deals 6 damage to each creature with flying. - effect = new DamageAllEffect(6, filterFlying); + effect = new DamageAllEffect(6, StaticFilters.FILTER_CREATURE_FLYING); effect.setText("{this} deals 6 damage to each creature with flying"); getRightHalfCard().getSpellAbility().addEffect(effect); diff --git a/Mage.Sets/src/mage/cards/r/RunAfoul.java b/Mage.Sets/src/mage/cards/r/RunAfoul.java index e2d0d55f990..ef76c320114 100644 --- a/Mage.Sets/src/mage/cards/r/RunAfoul.java +++ b/Mage.Sets/src/mage/cards/r/RunAfoul.java @@ -1,32 +1,24 @@ package mage.cards.r; -import java.util.UUID; - import mage.abilities.effects.common.SacrificeEffect; -import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.filter.common.FilterCreaturePermanent; -import mage.filter.predicate.mageobject.AbilityPredicate; +import mage.filter.StaticFilters; import mage.target.common.TargetOpponent; +import java.util.UUID; + /** * @author arcox */ public final class RunAfoul extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature with flying"); - - static { - filter.add(new AbilityPredicate(FlyingAbility.class)); - } - public RunAfoul(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{G}"); // Target opponent sacrifices a creature with flying. - this.getSpellAbility().addEffect(new SacrificeEffect(filter, 1, "Target opponent") + this.getSpellAbility().addEffect(new SacrificeEffect(StaticFilters.FILTER_CREATURE_FLYING, 1, "Target opponent") .setText("target opponent sacrifices a creature of their choice with flying")); this.getSpellAbility().addTarget(new TargetOpponent()); } diff --git a/Mage.Sets/src/mage/cards/s/SagittarsVolley.java b/Mage.Sets/src/mage/cards/s/SagittarsVolley.java index 1a017f2a8ca..d04107f67b8 100644 --- a/Mage.Sets/src/mage/cards/s/SagittarsVolley.java +++ b/Mage.Sets/src/mage/cards/s/SagittarsVolley.java @@ -7,7 +7,7 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.filter.FilterPermanent; -import mage.filter.common.FilterCreaturePermanent; +import mage.filter.StaticFilters; import mage.filter.common.FilterOpponentsCreaturePermanent; import mage.filter.predicate.mageobject.AbilityPredicate; import mage.target.TargetPermanent; @@ -20,13 +20,10 @@ import java.util.UUID; public final class SagittarsVolley extends CardImpl { private static final FilterPermanent filter - = new FilterCreaturePermanent("creature with flying"); - private static final FilterPermanent filter2 = new FilterOpponentsCreaturePermanent("creature with flying your opponents control"); static { filter.add(new AbilityPredicate(FlyingAbility.class)); - filter2.add(new AbilityPredicate(FlyingAbility.class)); } public SagittarsVolley(UUID ownerId, CardSetInfo setInfo) { @@ -34,8 +31,8 @@ public final class SagittarsVolley extends CardImpl { // Destroy target creature with flying. Sagittars' Volley deals 1 damage to each creature with flying your opponents control. this.getSpellAbility().addEffect(new DestroyTargetEffect()); - this.getSpellAbility().addTarget(new TargetPermanent(filter)); - this.getSpellAbility().addEffect(new DamageAllEffect(1, filter2)); + this.getSpellAbility().addTarget(new TargetPermanent(StaticFilters.FILTER_CREATURE_FLYING)); + this.getSpellAbility().addEffect(new DamageAllEffect(1, filter)); } private SagittarsVolley(final SagittarsVolley card) { diff --git a/Mage.Sets/src/mage/cards/s/SarkhansResolve.java b/Mage.Sets/src/mage/cards/s/SarkhansResolve.java index 6447331e66d..b88484e4dc7 100644 --- a/Mage.Sets/src/mage/cards/s/SarkhansResolve.java +++ b/Mage.Sets/src/mage/cards/s/SarkhansResolve.java @@ -3,13 +3,10 @@ package mage.cards.s; import mage.abilities.Mode; import mage.abilities.effects.common.DestroyTargetEffect; import mage.abilities.effects.common.continuous.BoostTargetEffect; -import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.filter.FilterPermanent; -import mage.filter.common.FilterCreaturePermanent; -import mage.filter.predicate.mageobject.AbilityPredicate; +import mage.filter.StaticFilters; import mage.target.TargetPermanent; import mage.target.common.TargetCreaturePermanent; @@ -20,12 +17,6 @@ import java.util.UUID; */ public final class SarkhansResolve extends CardImpl { - private static final FilterPermanent filter = new FilterCreaturePermanent("creature with flying"); - - static { - filter.add(new AbilityPredicate(FlyingAbility.class)); - } - public SarkhansResolve(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{1}{G}"); @@ -35,7 +26,7 @@ public final class SarkhansResolve extends CardImpl { this.getSpellAbility().addTarget(new TargetCreaturePermanent()); // * Destroy target creature with flying. - this.getSpellAbility().addMode(new Mode(new DestroyTargetEffect()).addTarget(new TargetPermanent(filter))); + this.getSpellAbility().addMode(new Mode(new DestroyTargetEffect()).addTarget(new TargetPermanent(StaticFilters.FILTER_CREATURE_FLYING))); } private SarkhansResolve(final SarkhansResolve card) { diff --git a/Mage.Sets/src/mage/cards/s/ScattershotArcher.java b/Mage.Sets/src/mage/cards/s/ScattershotArcher.java index 47b70bb743f..6372cdad809 100644 --- a/Mage.Sets/src/mage/cards/s/ScattershotArcher.java +++ b/Mage.Sets/src/mage/cards/s/ScattershotArcher.java @@ -1,34 +1,25 @@ package mage.cards.s; -import java.util.UUID; import mage.MageInt; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.common.TapSourceCost; import mage.abilities.effects.common.DamageAllEffect; -import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; -import mage.constants.Zone; -import mage.filter.common.FilterCreaturePermanent; -import mage.filter.predicate.mageobject.AbilityPredicate; +import mage.filter.StaticFilters; + +import java.util.UUID; /** - * * @author North */ public final class ScattershotArcher extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature with flying"); - - static { - filter.add(new AbilityPredicate(FlyingAbility.class)); - } - public ScattershotArcher(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{G}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{G}"); this.subtype.add(SubType.ELF); this.subtype.add(SubType.ARCHER); @@ -36,7 +27,7 @@ public final class ScattershotArcher extends CardImpl { this.toughness = new MageInt(2); // {tap}: Scattershot Archer deals 1 damage to each creature with flying. - this.addAbility(new SimpleActivatedAbility(new DamageAllEffect(1, filter), new TapSourceCost())); + this.addAbility(new SimpleActivatedAbility(new DamageAllEffect(1, StaticFilters.FILTER_CREATURE_FLYING), new TapSourceCost())); } private ScattershotArcher(final ScattershotArcher card) { diff --git a/Mage.Sets/src/mage/cards/s/ShreddedSails.java b/Mage.Sets/src/mage/cards/s/ShreddedSails.java index d77da51831e..ee0ee45d7fe 100644 --- a/Mage.Sets/src/mage/cards/s/ShreddedSails.java +++ b/Mage.Sets/src/mage/cards/s/ShreddedSails.java @@ -5,13 +5,10 @@ import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.effects.common.DamageTargetEffect; import mage.abilities.effects.common.DestroyTargetEffect; import mage.abilities.keyword.CyclingAbility; -import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.filter.FilterPermanent; -import mage.filter.common.FilterCreaturePermanent; -import mage.filter.predicate.mageobject.AbilityPredicate; +import mage.filter.StaticFilters; import mage.target.TargetPermanent; import mage.target.common.TargetArtifactPermanent; @@ -22,12 +19,6 @@ import java.util.UUID; */ public final class ShreddedSails extends CardImpl { - private static final FilterPermanent filter = new FilterCreaturePermanent("creature with flying"); - - static { - filter.add(new AbilityPredicate(FlyingAbility.class)); - } - public ShreddedSails(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{1}{R}"); @@ -38,7 +29,7 @@ public final class ShreddedSails extends CardImpl { // • Shredded Sails deals 4 damage to target creature with flying. Mode mode = new Mode(new DamageTargetEffect(4)); - mode.addTarget(new TargetPermanent(filter)); + mode.addTarget(new TargetPermanent(StaticFilters.FILTER_CREATURE_FLYING)); this.getSpellAbility().addMode(mode); // Cycling {2} diff --git a/Mage.Sets/src/mage/cards/s/ShreddingWinds.java b/Mage.Sets/src/mage/cards/s/ShreddingWinds.java index 90d61a2adb1..56ffb337d0f 100644 --- a/Mage.Sets/src/mage/cards/s/ShreddingWinds.java +++ b/Mage.Sets/src/mage/cards/s/ShreddingWinds.java @@ -1,37 +1,26 @@ package mage.cards.s; -import java.util.UUID; import mage.abilities.effects.common.DamageTargetEffect; -import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.filter.common.FilterCreaturePermanent; -import mage.filter.predicate.mageobject.AbilityPredicate; -import mage.target.Target; +import mage.filter.StaticFilters; import mage.target.TargetPermanent; -import mage.target.common.TargetCreaturePermanent; + +import java.util.UUID; /** - * * @author LevelX2 */ public final class ShreddingWinds extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature with flying"); - static { - filter.add(new AbilityPredicate(FlyingAbility.class)); - } - public ShreddingWinds(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{2}{G}"); - + super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{2}{G}"); // Shredding Winds deals 7 damage to target creature with flying. this.getSpellAbility().addEffect(new DamageTargetEffect(7)); - Target target = new TargetPermanent(filter); - this.getSpellAbility().addTarget(target); + this.getSpellAbility().addTarget(new TargetPermanent(StaticFilters.FILTER_CREATURE_FLYING)); } private ShreddingWinds(final ShreddingWinds card) { diff --git a/Mage.Sets/src/mage/cards/s/SilklashSpider.java b/Mage.Sets/src/mage/cards/s/SilklashSpider.java index b660e93cc82..f3a74050a02 100644 --- a/Mage.Sets/src/mage/cards/s/SilklashSpider.java +++ b/Mage.Sets/src/mage/cards/s/SilklashSpider.java @@ -1,36 +1,27 @@ package mage.cards.s; -import java.util.UUID; import mage.MageInt; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.dynamicvalue.common.GetXValue; import mage.abilities.effects.common.DamageAllEffect; -import mage.abilities.keyword.FlyingAbility; import mage.abilities.keyword.ReachAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; -import mage.constants.Zone; -import mage.filter.common.FilterCreaturePermanent; -import mage.filter.predicate.mageobject.AbilityPredicate; +import mage.filter.StaticFilters; + +import java.util.UUID; /** - * * @author North */ public final class SilklashSpider extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature with flying"); - - static { - filter.add(new AbilityPredicate(FlyingAbility.class)); - } - public SilklashSpider(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{G}{G}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{G}{G}"); this.subtype.add(SubType.SPIDER); this.power = new MageInt(2); @@ -40,7 +31,7 @@ public final class SilklashSpider extends CardImpl { this.addAbility(ReachAbility.getInstance()); // {X}{G}{G}: Silklash Spider deals X damage to each creature with flying. this.addAbility(new SimpleActivatedAbility( - new DamageAllEffect(GetXValue.instance, filter), + new DamageAllEffect(GetXValue.instance, StaticFilters.FILTER_CREATURE_FLYING), new ManaCostsImpl<>("{X}{G}{G}"))); } diff --git a/Mage.Sets/src/mage/cards/s/Skyreaping.java b/Mage.Sets/src/mage/cards/s/Skyreaping.java index b094e1c29dc..8ef559e9ac8 100644 --- a/Mage.Sets/src/mage/cards/s/Skyreaping.java +++ b/Mage.Sets/src/mage/cards/s/Skyreaping.java @@ -3,12 +3,10 @@ package mage.cards.s; import mage.abilities.dynamicvalue.common.DevotionCount; import mage.abilities.effects.Effect; import mage.abilities.effects.common.DamageAllEffect; -import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.filter.common.FilterCreaturePermanent; -import mage.filter.predicate.mageobject.AbilityPredicate; +import mage.filter.StaticFilters; import java.util.UUID; @@ -17,17 +15,11 @@ import java.util.UUID; */ public final class Skyreaping extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature with flying"); - - static { - filter.add(new AbilityPredicate(FlyingAbility.class)); - } - public Skyreaping(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{1}{G}"); // Skyreaping deals damage to each creature with flying equal to your devotion to green. - Effect effect = new DamageAllEffect(DevotionCount.G, filter); + Effect effect = new DamageAllEffect(DevotionCount.G, StaticFilters.FILTER_CREATURE_FLYING); effect.setText("{this} deals damage to each creature with flying equal to your devotion to green. " + DevotionCount.G.getReminder()); this.getSpellAbility().addEffect(effect); this.getSpellAbility().addHint(DevotionCount.G.getHint()); diff --git a/Mage.Sets/src/mage/cards/s/SkyshroudArcher.java b/Mage.Sets/src/mage/cards/s/SkyshroudArcher.java index 3a953a4d172..6d09a512a9f 100644 --- a/Mage.Sets/src/mage/cards/s/SkyshroudArcher.java +++ b/Mage.Sets/src/mage/cards/s/SkyshroudArcher.java @@ -1,38 +1,28 @@ package mage.cards.s; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.common.TapSourceCost; import mage.abilities.effects.common.continuous.BoostTargetEffect; -import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.constants.SubType; import mage.constants.Duration; -import mage.constants.Zone; -import mage.filter.common.FilterCreaturePermanent; -import mage.filter.predicate.mageobject.AbilityPredicate; +import mage.constants.SubType; +import mage.filter.StaticFilters; import mage.target.TargetPermanent; -import mage.target.common.TargetCreaturePermanent; + +import java.util.UUID; /** - * * @author LoneFox */ public final class SkyshroudArcher extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature with flying"); - - static { - filter.add(new AbilityPredicate(FlyingAbility.class)); - } - public SkyshroudArcher(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{G}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{G}"); this.subtype.add(SubType.ELF); this.subtype.add(SubType.ARCHER); this.power = new MageInt(1); @@ -40,7 +30,7 @@ public final class SkyshroudArcher extends CardImpl { // {tap}: Target creature with flying gets -1/-1 until end of turn. Ability ability = new SimpleActivatedAbility(new BoostTargetEffect(-1, -1, Duration.EndOfTurn), new TapSourceCost()); - ability.addTarget(new TargetPermanent(filter)); + ability.addTarget(new TargetPermanent(StaticFilters.FILTER_CREATURE_FLYING)); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/s/Skystinger.java b/Mage.Sets/src/mage/cards/s/Skystinger.java index f4ee41cc5d9..3e1d61ac96c 100644 --- a/Mage.Sets/src/mage/cards/s/Skystinger.java +++ b/Mage.Sets/src/mage/cards/s/Skystinger.java @@ -3,15 +3,13 @@ package mage.cards.s; import mage.MageInt; import mage.abilities.common.BlocksCreatureTriggeredAbility; import mage.abilities.effects.common.continuous.BoostSourceEffect; -import mage.abilities.keyword.FlyingAbility; import mage.abilities.keyword.ReachAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Duration; import mage.constants.SubType; -import mage.filter.common.FilterCreaturePermanent; -import mage.filter.predicate.mageobject.AbilityPredicate; +import mage.filter.StaticFilters; import java.util.UUID; @@ -20,12 +18,6 @@ import java.util.UUID; */ public final class Skystinger extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature with flying"); - - static { - filter.add(new AbilityPredicate(FlyingAbility.class)); - } - public Skystinger(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{G}"); @@ -39,7 +31,8 @@ public final class Skystinger extends CardImpl { // Whenever this creature blocks a creature with flying, this creature gets +5/+0 until end of turn. this.addAbility(new BlocksCreatureTriggeredAbility( - new BoostSourceEffect(5, 0, Duration.EndOfTurn), filter, false + new BoostSourceEffect(5, 0, Duration.EndOfTurn), + StaticFilters.FILTER_CREATURE_FLYING, false )); } diff --git a/Mage.Sets/src/mage/cards/s/SkywaySniper.java b/Mage.Sets/src/mage/cards/s/SkywaySniper.java index b41d481aad9..034499db1c6 100644 --- a/Mage.Sets/src/mage/cards/s/SkywaySniper.java +++ b/Mage.Sets/src/mage/cards/s/SkywaySniper.java @@ -5,15 +5,12 @@ import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.effects.common.DamageTargetEffect; -import mage.abilities.keyword.FlyingAbility; import mage.abilities.keyword.ReachAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; -import mage.filter.FilterPermanent; -import mage.filter.common.FilterCreaturePermanent; -import mage.filter.predicate.mageobject.AbilityPredicate; +import mage.filter.StaticFilters; import mage.target.TargetPermanent; import java.util.UUID; @@ -23,12 +20,6 @@ import java.util.UUID; */ public final class SkywaySniper extends CardImpl { - private static final FilterPermanent filter = new FilterCreaturePermanent("creature with flying"); - - static { - filter.add(new AbilityPredicate(FlyingAbility.class)); - } - public SkywaySniper(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{G}"); @@ -42,7 +33,7 @@ public final class SkywaySniper extends CardImpl { // {2}{G}: Skyway Sniper deals 1 damage to target creature with flying. Ability ability = new SimpleActivatedAbility(new DamageTargetEffect(1), new ManaCostsImpl<>("{2}{G}")); - ability.addTarget(new TargetPermanent(filter)); + ability.addTarget(new TargetPermanent(StaticFilters.FILTER_CREATURE_FLYING)); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/s/Snarespinner.java b/Mage.Sets/src/mage/cards/s/Snarespinner.java index 0715e6da8e2..42ee05e4e01 100644 --- a/Mage.Sets/src/mage/cards/s/Snarespinner.java +++ b/Mage.Sets/src/mage/cards/s/Snarespinner.java @@ -3,15 +3,13 @@ package mage.cards.s; import mage.MageInt; import mage.abilities.common.BlocksCreatureTriggeredAbility; import mage.abilities.effects.common.continuous.BoostSourceEffect; -import mage.abilities.keyword.FlyingAbility; import mage.abilities.keyword.ReachAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Duration; import mage.constants.SubType; -import mage.filter.common.FilterCreaturePermanent; -import mage.filter.predicate.mageobject.AbilityPredicate; +import mage.filter.StaticFilters; import java.util.UUID; @@ -20,12 +18,6 @@ import java.util.UUID; */ public final class Snarespinner extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature with flying"); - - static { - filter.add(new AbilityPredicate(FlyingAbility.class)); - } - public Snarespinner(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{G}"); @@ -37,7 +29,7 @@ public final class Snarespinner extends CardImpl { this.addAbility(ReachAbility.getInstance()); // Whenever Snarespinner blocks a creature with flying, Snarespinner gets +2/+0 until end of turn. - this.addAbility(new BlocksCreatureTriggeredAbility(new BoostSourceEffect(2, 0, Duration.EndOfTurn), filter, false)); + this.addAbility(new BlocksCreatureTriggeredAbility(new BoostSourceEffect(2, 0, Duration.EndOfTurn), StaticFilters.FILTER_CREATURE_FLYING, false)); } private Snarespinner(final Snarespinner card) { @@ -48,4 +40,4 @@ public final class Snarespinner extends CardImpl { public Snarespinner copy() { return new Snarespinner(this); } -} \ No newline at end of file +} diff --git a/Mage.Sets/src/mage/cards/s/SpittingSpider.java b/Mage.Sets/src/mage/cards/s/SpittingSpider.java index cf98843aa42..df1af4b3881 100644 --- a/Mage.Sets/src/mage/cards/s/SpittingSpider.java +++ b/Mage.Sets/src/mage/cards/s/SpittingSpider.java @@ -1,35 +1,26 @@ package mage.cards.s; -import java.util.UUID; import mage.MageInt; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.common.SacrificeTargetCost; import mage.abilities.effects.common.DamageAllEffect; -import mage.abilities.keyword.FlyingAbility; import mage.abilities.keyword.ReachAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; -import mage.constants.Zone; import mage.filter.StaticFilters; -import mage.filter.common.FilterCreaturePermanent; -import mage.filter.predicate.mageobject.AbilityPredicate; -import mage.target.common.TargetControlledPermanent; + +import java.util.UUID; /** - * * @author Plopman */ public final class SpittingSpider extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature with flying"); - static{ - filter.add(new AbilityPredicate(FlyingAbility.class)); - } public SpittingSpider(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{G}{G}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{G}{G}"); this.subtype.add(SubType.SPIDER); this.power = new MageInt(3); @@ -37,8 +28,9 @@ public final class SpittingSpider extends CardImpl { // Reach this.addAbility(ReachAbility.getInstance()); + // Sacrifice a land: Spitting Spider deals 1 damage to each creature with flying. - this.addAbility(new SimpleActivatedAbility(new DamageAllEffect(1, filter), new SacrificeTargetCost(StaticFilters.FILTER_LAND))); + this.addAbility(new SimpleActivatedAbility(new DamageAllEffect(1, StaticFilters.FILTER_CREATURE_FLYING), new SacrificeTargetCost(StaticFilters.FILTER_LAND))); } private SpittingSpider(final SpittingSpider card) { diff --git a/Mage.Sets/src/mage/cards/s/Squall.java b/Mage.Sets/src/mage/cards/s/Squall.java index e12e5e639b0..10665864247 100644 --- a/Mage.Sets/src/mage/cards/s/Squall.java +++ b/Mage.Sets/src/mage/cards/s/Squall.java @@ -1,33 +1,24 @@ package mage.cards.s; -import java.util.UUID; import mage.abilities.effects.common.DamageAllEffect; -import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.filter.common.FilterCreaturePermanent; -import mage.filter.predicate.mageobject.AbilityPredicate; +import mage.filter.StaticFilters; + +import java.util.UUID; /** - * * @author LoneFox - */ public final class Squall extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature with flying"); - - static { - filter.add(new AbilityPredicate(FlyingAbility.class)); - } - public Squall(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{2}{G}"); + super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{2}{G}"); // Squall deals 2 damage to each creature with flying. - this.getSpellAbility().addEffect(new DamageAllEffect(2, filter)); + this.getSpellAbility().addEffect(new DamageAllEffect(2, StaticFilters.FILTER_CREATURE_FLYING)); } private Squall(final Squall card) { diff --git a/Mage.Sets/src/mage/cards/s/SquallLine.java b/Mage.Sets/src/mage/cards/s/SquallLine.java index cc3faa1929d..328faf84b5b 100644 --- a/Mage.Sets/src/mage/cards/s/SquallLine.java +++ b/Mage.Sets/src/mage/cards/s/SquallLine.java @@ -1,33 +1,26 @@ package mage.cards.s; -import java.util.UUID; import mage.abilities.dynamicvalue.common.GetXValue; import mage.abilities.effects.common.DamageEverythingEffect; -import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.filter.common.FilterCreaturePermanent; -import mage.filter.predicate.mageobject.AbilityPredicate; +import mage.filter.StaticFilters; + +import java.util.UUID; /** - * * @author LoneFox */ public final class SquallLine extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature with flying"); - - static { - filter.add(new AbilityPredicate(FlyingAbility.class)); - } - public SquallLine(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{X}{G}{G}"); + super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{X}{G}{G}"); // Squall Line deals X damage to each creature with flying and each player. - this.getSpellAbility().addEffect(new DamageEverythingEffect(GetXValue.instance, filter)); } + this.getSpellAbility().addEffect(new DamageEverythingEffect(GetXValue.instance, StaticFilters.FILTER_CREATURE_FLYING)); + } private SquallLine(final SquallLine card) { super(card); diff --git a/Mage.Sets/src/mage/cards/s/Squallmonger.java b/Mage.Sets/src/mage/cards/s/Squallmonger.java index e23adb6b275..a1f21a30e67 100644 --- a/Mage.Sets/src/mage/cards/s/Squallmonger.java +++ b/Mage.Sets/src/mage/cards/s/Squallmonger.java @@ -1,7 +1,6 @@ package mage.cards.s; -import java.util.UUID; import mage.MageInt; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.mana.ManaCostsImpl; @@ -9,36 +8,28 @@ import mage.abilities.effects.Effect; import mage.abilities.effects.common.DamageAllEffect; import mage.abilities.effects.common.DamagePlayersEffect; import mage.abilities.effects.common.InfoEffect; -import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; import mage.constants.TargetController; -import mage.constants.Zone; -import mage.filter.common.FilterCreaturePermanent; -import mage.filter.predicate.mageobject.AbilityPredicate; +import mage.filter.StaticFilters; + +import java.util.UUID; /** - * * @author fireshoes */ public final class Squallmonger extends CardImpl { - - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature with flying"); - - static { - filter.add(new AbilityPredicate(FlyingAbility.class)); - } public Squallmonger(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.MONGER); this.power = new MageInt(3); this.toughness = new MageInt(3); // {2}: Squallmonger deals 1 damage to each creature with flying and each player. Any player may activate this ability. - SimpleActivatedAbility ability = new SimpleActivatedAbility(new DamageAllEffect(1, filter), new ManaCostsImpl<>("{2}")); + SimpleActivatedAbility ability = new SimpleActivatedAbility(new DamageAllEffect(1, StaticFilters.FILTER_CREATURE_FLYING), new ManaCostsImpl<>("{2}")); Effect effect = new DamagePlayersEffect(1); effect.setText("and each player"); ability.addEffect(effect); diff --git a/Mage.Sets/src/mage/cards/s/StingerflingSpider.java b/Mage.Sets/src/mage/cards/s/StingerflingSpider.java index 2e38bd05cba..48499eabcd7 100644 --- a/Mage.Sets/src/mage/cards/s/StingerflingSpider.java +++ b/Mage.Sets/src/mage/cards/s/StingerflingSpider.java @@ -2,42 +2,34 @@ package mage.cards.s; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.effects.common.DestroyTargetEffect; -import mage.abilities.keyword.FlyingAbility; import mage.abilities.keyword.ReachAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; -import mage.filter.common.FilterCreaturePermanent; -import mage.filter.predicate.mageobject.AbilityPredicate; +import mage.filter.StaticFilters; import mage.target.TargetPermanent; -import mage.target.common.TargetCreaturePermanent; + +import java.util.UUID; /** * @author Loki */ public final class StingerflingSpider extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature with flying"); - - static { - filter.add(new AbilityPredicate(FlyingAbility.class)); - } - public StingerflingSpider(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.SPIDER); this.power = new MageInt(2); this.toughness = new MageInt(5); this.addAbility(ReachAbility.getInstance()); Ability ability = new EntersBattlefieldTriggeredAbility(new DestroyTargetEffect(), true); - ability.addTarget(new TargetPermanent(filter)); + ability.addTarget(new TargetPermanent(StaticFilters.FILTER_CREATURE_FLYING)); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/s/StingingShot.java b/Mage.Sets/src/mage/cards/s/StingingShot.java index b3fb6f6d770..24e00163a23 100644 --- a/Mage.Sets/src/mage/cards/s/StingingShot.java +++ b/Mage.Sets/src/mage/cards/s/StingingShot.java @@ -1,38 +1,29 @@ package mage.cards.s; -import java.util.UUID; import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.effects.common.counter.AddCountersTargetEffect; import mage.abilities.keyword.CyclingAbility; -import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.counters.CounterType; -import mage.filter.common.FilterCreaturePermanent; -import mage.filter.predicate.mageobject.AbilityPredicate; +import mage.filter.StaticFilters; import mage.target.TargetPermanent; -import mage.target.common.TargetCreaturePermanent; + +import java.util.UUID; /** - * * @author stravant */ public final class StingingShot extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature with flying"); - - static { - filter.add(new AbilityPredicate(FlyingAbility.class)); - } - public StingingShot(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{G}"); // Put three -1/-1 counters on target creature with flying. - getSpellAbility().addTarget(new TargetPermanent(filter)); getSpellAbility().addEffect(new AddCountersTargetEffect(CounterType.M1M1.createInstance(3))); + getSpellAbility().addTarget(new TargetPermanent(StaticFilters.FILTER_CREATURE_FLYING)); // Cycling {2} this.addAbility(new CyclingAbility(new ManaCostsImpl<>("{2}"))); diff --git a/Mage.Sets/src/mage/cards/s/StormElemental.java b/Mage.Sets/src/mage/cards/s/StormElemental.java index 3f793bcb1d8..47d2b6053c8 100644 --- a/Mage.Sets/src/mage/cards/s/StormElemental.java +++ b/Mage.Sets/src/mage/cards/s/StormElemental.java @@ -14,13 +14,11 @@ import mage.cards.Card; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.*; -import mage.filter.common.FilterCreaturePermanent; +import mage.filter.StaticFilters; import mage.filter.common.FilterLandCard; -import mage.filter.predicate.mageobject.AbilityPredicate; import mage.game.Game; import mage.players.Player; import mage.target.TargetPermanent; -import mage.target.common.TargetCreaturePermanent; import java.util.UUID; @@ -29,12 +27,6 @@ import java.util.UUID; */ public final class StormElemental extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature with flying"); - - static { - filter.add(new AbilityPredicate(FlyingAbility.class)); - } - public StormElemental(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{5}{U}"); this.subtype.add(SubType.ELEMENTAL); @@ -47,7 +39,7 @@ public final class StormElemental extends CardImpl { // {U}, Exile the top card of your library: Tap target creature with flying. Ability ability = new SimpleActivatedAbility(new TapTargetEffect(), new ManaCostsImpl<>("{U}")); ability.addCost(new ExileTopCardLibraryCost()); - ability.addTarget(new TargetPermanent(filter)); + ability.addTarget(new TargetPermanent(StaticFilters.FILTER_CREATURE_FLYING)); this.addAbility(ability); // {U}, Exile the top card of your library: If the exiled card is a snow land, Storm Elemental gets +1/+1 until end of turn. diff --git a/Mage.Sets/src/mage/cards/s/StormFront.java b/Mage.Sets/src/mage/cards/s/StormFront.java index 6ab00a62498..bcf3cc11526 100644 --- a/Mage.Sets/src/mage/cards/s/StormFront.java +++ b/Mage.Sets/src/mage/cards/s/StormFront.java @@ -1,39 +1,29 @@ package mage.cards.s; -import java.util.UUID; import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.effects.common.TapTargetEffect; -import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.constants.Zone; -import mage.filter.common.FilterCreaturePermanent; -import mage.filter.predicate.mageobject.AbilityPredicate; +import mage.filter.StaticFilters; import mage.target.TargetPermanent; -import mage.target.common.TargetCreaturePermanent; + +import java.util.UUID; /** - * * @author KholdFuzion */ public final class StormFront extends CardImpl { - - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature with flying"); - - static { - filter.add(new AbilityPredicate(FlyingAbility.class)); - } public StormFront(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{G}"); + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{G}"); // {G}{G}: Tap target creature with flying. Ability ability = new SimpleActivatedAbility(new TapTargetEffect(), new ManaCostsImpl<>("{G}{G}")); - ability.addTarget(new TargetPermanent(filter)); + ability.addTarget(new TargetPermanent(StaticFilters.FILTER_CREATURE_FLYING)); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/s/SunscapeBattlemage.java b/Mage.Sets/src/mage/cards/s/SunscapeBattlemage.java index 17180abd35d..307e0417057 100644 --- a/Mage.Sets/src/mage/cards/s/SunscapeBattlemage.java +++ b/Mage.Sets/src/mage/cards/s/SunscapeBattlemage.java @@ -7,14 +7,12 @@ import mage.abilities.condition.Condition; import mage.abilities.condition.common.KickedCostCondition; import mage.abilities.effects.common.DestroyTargetEffect; import mage.abilities.effects.common.DrawCardSourceControllerEffect; -import mage.abilities.keyword.FlyingAbility; import mage.abilities.keyword.KickerAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; -import mage.filter.common.FilterCreaturePermanent; -import mage.filter.predicate.mageobject.AbilityPredicate; +import mage.filter.StaticFilters; import mage.target.TargetPermanent; import java.util.UUID; @@ -24,12 +22,6 @@ import java.util.UUID; */ public final class SunscapeBattlemage extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature with flying"); - - static { - filter.add(new AbilityPredicate(FlyingAbility.class)); - } - private static final Condition condition = new KickedCostCondition("{1}{G}"); private static final Condition condition2 = new KickedCostCondition("{2}{U}"); @@ -47,7 +39,7 @@ public final class SunscapeBattlemage extends CardImpl { // When {this} enters, if it was kicked with its {1}{G} kicker, destroy target creature with flying. Ability ability = new EntersBattlefieldTriggeredAbility(new DestroyTargetEffect()).withInterveningIf(condition); - ability.addTarget(new TargetPermanent(filter)); + ability.addTarget(new TargetPermanent(StaticFilters.FILTER_CREATURE_FLYING)); this.addAbility(ability); // When {this} enters, if it was kicked with its {2}{U} kicker, draw two cards. diff --git a/Mage.Sets/src/mage/cards/s/SunsetStrikemaster.java b/Mage.Sets/src/mage/cards/s/SunsetStrikemaster.java index e1c674adb5e..a10c87da0fb 100644 --- a/Mage.Sets/src/mage/cards/s/SunsetStrikemaster.java +++ b/Mage.Sets/src/mage/cards/s/SunsetStrikemaster.java @@ -7,15 +7,12 @@ import mage.abilities.costs.common.SacrificeSourceCost; import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.effects.common.DamageTargetEffect; -import mage.abilities.keyword.FlyingAbility; import mage.abilities.mana.RedManaAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; -import mage.filter.FilterPermanent; -import mage.filter.common.FilterCreaturePermanent; -import mage.filter.predicate.mageobject.AbilityPredicate; +import mage.filter.StaticFilters; import mage.target.TargetPermanent; import java.util.UUID; @@ -25,12 +22,6 @@ import java.util.UUID; */ public final class SunsetStrikemaster extends CardImpl { - private static final FilterPermanent filter = new FilterCreaturePermanent("creature with flying"); - - static { - filter.add(new AbilityPredicate(FlyingAbility.class)); - } - public SunsetStrikemaster(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{R}"); @@ -48,7 +39,7 @@ public final class SunsetStrikemaster extends CardImpl { ); ability.addCost(new TapSourceCost()); ability.addCost(new SacrificeSourceCost()); - ability.addTarget(new TargetPermanent(filter)); + ability.addTarget(new TargetPermanent(StaticFilters.FILTER_CREATURE_FLYING)); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/t/TajuruArcher.java b/Mage.Sets/src/mage/cards/t/TajuruArcher.java index 18fc688065e..4434e054859 100644 --- a/Mage.Sets/src/mage/cards/t/TajuruArcher.java +++ b/Mage.Sets/src/mage/cards/t/TajuruArcher.java @@ -1,48 +1,45 @@ package mage.cards.t; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.AllyEntersBattlefieldTriggeredAbility; import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount; import mage.abilities.effects.common.DamageTargetEffect; -import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; import mage.constants.TargetController; +import mage.filter.StaticFilters; import mage.filter.common.FilterCreaturePermanent; -import mage.filter.predicate.mageobject.AbilityPredicate; import mage.target.TargetPermanent; -import mage.target.common.TargetCreaturePermanent; + +import java.util.UUID; /** - * * @author North */ public final class TajuruArcher extends CardImpl { private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Allies you control"); - private static final FilterCreaturePermanent filterTarget = new FilterCreaturePermanent("creature with flying"); static { filter.add(SubType.ALLY.getPredicate()); filter.add(TargetController.YOU.getControllerPredicate()); - filterTarget.add(new AbilityPredicate(FlyingAbility.class)); } public TajuruArcher(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{G}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{G}"); this.subtype.add(SubType.ELF); this.subtype.add(SubType.ARCHER); this.subtype.add(SubType.ALLY); this.power = new MageInt(1); this.toughness = new MageInt(2); + Ability ability = new AllyEntersBattlefieldTriggeredAbility(new DamageTargetEffect(new PermanentsOnBattlefieldCount(filter)), true); - ability.addTarget(new TargetPermanent(filterTarget)); + ability.addTarget(new TargetPermanent(StaticFilters.FILTER_CREATURE_FLYING)); this.addAbility(ability.setAbilityWord(null)); } diff --git a/Mage.Sets/src/mage/cards/t/TakeDown.java b/Mage.Sets/src/mage/cards/t/TakeDown.java index 14989740706..528b353861b 100644 --- a/Mage.Sets/src/mage/cards/t/TakeDown.java +++ b/Mage.Sets/src/mage/cards/t/TakeDown.java @@ -1,41 +1,32 @@ package mage.cards.t; -import java.util.UUID; import mage.abilities.Mode; import mage.abilities.effects.common.DamageAllEffect; import mage.abilities.effects.common.DamageTargetEffect; -import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.filter.common.FilterCreaturePermanent; -import mage.filter.predicate.mageobject.AbilityPredicate; +import mage.filter.StaticFilters; import mage.target.TargetPermanent; -import mage.target.common.TargetCreaturePermanent; + +import java.util.UUID; /** - * * @author LevelX2 */ public final class TakeDown extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature with flying"); - - static { - filter.add(new AbilityPredicate(FlyingAbility.class)); - } - public TakeDown(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{G}"); + super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{G}"); // Choose one — // • Take Down deals 4 damage to target creature with flying. this.getSpellAbility().addEffect(new DamageTargetEffect(4)); - this.getSpellAbility().addTarget(new TargetPermanent(filter)); + this.getSpellAbility().addTarget(new TargetPermanent(StaticFilters.FILTER_CREATURE_FLYING)); // • Take Down deals 1 damage to each creature with flying - Mode mode = new Mode(new DamageAllEffect(1, filter)); + Mode mode = new Mode(new DamageAllEffect(1, StaticFilters.FILTER_CREATURE_FLYING)); this.getSpellAbility().addMode(mode); } diff --git a/Mage.Sets/src/mage/cards/t/Tangletrap.java b/Mage.Sets/src/mage/cards/t/Tangletrap.java index b053c3a75c6..7c155603368 100644 --- a/Mage.Sets/src/mage/cards/t/Tangletrap.java +++ b/Mage.Sets/src/mage/cards/t/Tangletrap.java @@ -3,13 +3,10 @@ package mage.cards.t; import mage.abilities.Mode; import mage.abilities.effects.common.DamageTargetEffect; import mage.abilities.effects.common.DestroyTargetEffect; -import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.filter.FilterPermanent; -import mage.filter.common.FilterCreaturePermanent; -import mage.filter.predicate.mageobject.AbilityPredicate; +import mage.filter.StaticFilters; import mage.target.TargetPermanent; import mage.target.common.TargetArtifactPermanent; @@ -20,19 +17,13 @@ import java.util.UUID; */ public final class Tangletrap extends CardImpl { - private static final FilterPermanent filter = new FilterCreaturePermanent("creature with flying"); - - static { - filter.add(new AbilityPredicate(FlyingAbility.class)); - } - public Tangletrap(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{1}{G}"); // Choose one — // • Tangletrap deals 5 damage to target creature with flying. this.getSpellAbility().addEffect(new DamageTargetEffect(5)); - this.getSpellAbility().addTarget(new TargetPermanent(filter)); + this.getSpellAbility().addTarget(new TargetPermanent(StaticFilters.FILTER_CREATURE_FLYING)); // • Destroy target artifact. Mode mode = new Mode(new DestroyTargetEffect()); diff --git a/Mage.Sets/src/mage/cards/t/TearsOfValakut.java b/Mage.Sets/src/mage/cards/t/TearsOfValakut.java index 5eeb74dc09a..aeb2c43591e 100644 --- a/Mage.Sets/src/mage/cards/t/TearsOfValakut.java +++ b/Mage.Sets/src/mage/cards/t/TearsOfValakut.java @@ -1,39 +1,30 @@ package mage.cards.t; -import java.util.UUID; import mage.abilities.common.CantBeCounteredSourceAbility; import mage.abilities.effects.common.DamageTargetEffect; -import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.filter.common.FilterCreaturePermanent; -import mage.filter.predicate.mageobject.AbilityPredicate; +import mage.filter.StaticFilters; import mage.target.TargetPermanent; -import mage.target.common.TargetCreaturePermanent; + +import java.util.UUID; /** - * * @author fireshoes */ public final class TearsOfValakut extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature with flying"); - - static { - filter.add(new AbilityPredicate(FlyingAbility.class)); - } - public TearsOfValakut(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{1}{R}"); + super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{1}{R}"); // This spell can't be countered. this.addAbility(new CantBeCounteredSourceAbility().setRuleAtTheTop(true)); // Tears of Valakut deals 5 damage to target creature with flying. this.getSpellAbility().addEffect(new DamageTargetEffect(5)); - this.getSpellAbility().addTarget(new TargetPermanent(filter)); + this.getSpellAbility().addTarget(new TargetPermanent(StaticFilters.FILTER_CREATURE_FLYING)); } private TearsOfValakut(final TearsOfValakut card) { diff --git a/Mage.Sets/src/mage/cards/t/Thornado.java b/Mage.Sets/src/mage/cards/t/Thornado.java index e730a192c86..c50df4343c0 100644 --- a/Mage.Sets/src/mage/cards/t/Thornado.java +++ b/Mage.Sets/src/mage/cards/t/Thornado.java @@ -3,13 +3,10 @@ package mage.cards.t; import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.effects.common.DestroyTargetEffect; import mage.abilities.keyword.CyclingAbility; -import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.filter.FilterPermanent; -import mage.filter.common.FilterCreaturePermanent; -import mage.filter.predicate.mageobject.AbilityPredicate; +import mage.filter.StaticFilters; import mage.target.TargetPermanent; import java.util.UUID; @@ -19,18 +16,12 @@ import java.util.UUID; */ public final class Thornado extends CardImpl { - private static final FilterPermanent filter = new FilterCreaturePermanent("creature with flying"); - - static { - filter.add(new AbilityPredicate(FlyingAbility.class)); - } - public Thornado(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{2}{G}"); // Destroy target creature with flying. this.getSpellAbility().addEffect(new DestroyTargetEffect()); - this.getSpellAbility().addTarget(new TargetPermanent(filter)); + this.getSpellAbility().addTarget(new TargetPermanent(StaticFilters.FILTER_CREATURE_FLYING)); // Cycling {1}{G} this.addAbility(new CyclingAbility(new ManaCostsImpl<>("{1}{G}"))); diff --git a/Mage.Sets/src/mage/cards/t/Thunderbolt.java b/Mage.Sets/src/mage/cards/t/Thunderbolt.java index 453a29b60c2..296a4c67701 100644 --- a/Mage.Sets/src/mage/cards/t/Thunderbolt.java +++ b/Mage.Sets/src/mage/cards/t/Thunderbolt.java @@ -1,31 +1,22 @@ package mage.cards.t; -import java.util.UUID; import mage.abilities.Mode; import mage.abilities.effects.common.DamageTargetEffect; -import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.filter.common.FilterCreaturePermanent; -import mage.filter.predicate.mageobject.AbilityPredicate; +import mage.filter.StaticFilters; import mage.target.TargetPermanent; -import mage.target.common.TargetCreaturePermanent; import mage.target.common.TargetPlayerOrPlaneswalker; +import java.util.UUID; + /** - * * @author North */ public final class Thunderbolt extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature with flying"); - - static { - filter.add(new AbilityPredicate(FlyingAbility.class)); - } - public Thunderbolt(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{1}{R}"); @@ -33,7 +24,7 @@ public final class Thunderbolt extends CardImpl { this.getSpellAbility().addEffect(new DamageTargetEffect(3)); this.getSpellAbility().addTarget(new TargetPlayerOrPlaneswalker()); Mode mode = new Mode(new DamageTargetEffect(4)); - mode.addTarget(new TargetPermanent(filter)); + mode.addTarget(new TargetPermanent(StaticFilters.FILTER_CREATURE_FLYING)); this.getSpellAbility().addMode(mode); } diff --git a/Mage.Sets/src/mage/cards/t/TrophyHunter.java b/Mage.Sets/src/mage/cards/t/TrophyHunter.java index 260be60922e..fb818f763f8 100644 --- a/Mage.Sets/src/mage/cards/t/TrophyHunter.java +++ b/Mage.Sets/src/mage/cards/t/TrophyHunter.java @@ -1,7 +1,6 @@ package mage.cards.t; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.DealtDamageAndDiedTriggeredAbility; @@ -9,29 +8,21 @@ import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.effects.common.DamageTargetEffect; import mage.abilities.effects.common.counter.AddCountersSourceEffect; -import mage.abilities.keyword.FlyingAbility; -import mage.constants.SubType; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; +import mage.constants.SubType; import mage.counters.CounterType; -import mage.filter.common.FilterCreaturePermanent; -import mage.filter.predicate.mageobject.AbilityPredicate; +import mage.filter.StaticFilters; import mage.target.TargetPermanent; -import mage.target.common.TargetCreaturePermanent; + +import java.util.UUID; /** - * * @author TheElk801 */ public final class TrophyHunter extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature with flying"); - - static { - filter.add(new AbilityPredicate(FlyingAbility.class)); - } - public TrophyHunter(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{G}"); @@ -42,11 +33,11 @@ public final class TrophyHunter extends CardImpl { // {1}{G}: Trophy Hunter deals 1 damage to target creature with flying. Ability ability = new SimpleActivatedAbility(new DamageTargetEffect(1), new ManaCostsImpl<>("{1}{G}")); - ability.addTarget(new TargetPermanent(filter)); + ability.addTarget(new TargetPermanent(StaticFilters.FILTER_CREATURE_FLYING)); this.addAbility(ability); // Whenever a creature with flying dealt damage by Trophy Hunter this turn dies, put a +1/+1 counter on Trophy Hunter. - this.addAbility(new DealtDamageAndDiedTriggeredAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance()), false, filter)); + this.addAbility(new DealtDamageAndDiedTriggeredAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance()), false, StaticFilters.FILTER_CREATURE_FLYING)); } private TrophyHunter(final TrophyHunter card) { diff --git a/Mage.Sets/src/mage/cards/t/TropicalStorm.java b/Mage.Sets/src/mage/cards/t/TropicalStorm.java index d1b8392b927..83576fd861a 100644 --- a/Mage.Sets/src/mage/cards/t/TropicalStorm.java +++ b/Mage.Sets/src/mage/cards/t/TropicalStorm.java @@ -1,29 +1,26 @@ package mage.cards.t; -import java.util.UUID; import mage.ObjectColor; import mage.abilities.dynamicvalue.common.GetXValue; import mage.abilities.effects.common.DamageAllEffect; -import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; +import mage.filter.StaticFilters; import mage.filter.common.FilterCreaturePermanent; -import mage.filter.predicate.mageobject.AbilityPredicate; import mage.filter.predicate.mageobject.ColorPredicate; +import java.util.UUID; + /** - * * @author TheElk801 */ public final class TropicalStorm extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature with flying"); private static final FilterCreaturePermanent filter2 = new FilterCreaturePermanent("blue creature"); static { - filter.add(new AbilityPredicate(FlyingAbility.class)); filter2.add(new ColorPredicate(ObjectColor.BLUE)); } @@ -31,7 +28,7 @@ public final class TropicalStorm extends CardImpl { super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{X}{G}"); // Tropical Storm deals X damage to each creature with flying and 1 additional damage to each blue creature. - this.getSpellAbility().addEffect(new DamageAllEffect(GetXValue.instance, filter)); + this.getSpellAbility().addEffect(new DamageAllEffect(GetXValue.instance, StaticFilters.FILTER_CREATURE_FLYING)); this.getSpellAbility().addEffect(new DamageAllEffect(1, filter2).setText("and 1 additional damage to each blue creature")); } diff --git a/Mage.Sets/src/mage/cards/v/Vertigo.java b/Mage.Sets/src/mage/cards/v/Vertigo.java index 4e51ad30f95..819f70d54da 100644 --- a/Mage.Sets/src/mage/cards/v/Vertigo.java +++ b/Mage.Sets/src/mage/cards/v/Vertigo.java @@ -1,7 +1,6 @@ package mage.cards.v; -import java.util.UUID; import mage.abilities.effects.common.DamageTargetEffect; import mage.abilities.effects.common.continuous.LoseAbilityTargetEffect; import mage.abilities.keyword.FlyingAbility; @@ -9,32 +8,24 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Duration; -import mage.filter.common.FilterCreaturePermanent; -import mage.filter.predicate.mageobject.AbilityPredicate; +import mage.filter.StaticFilters; import mage.target.TargetPermanent; -import mage.target.common.TargetCreaturePermanent; + +import java.util.UUID; /** - * * @author Quercitron */ public final class Vertigo extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature with flying"); - - static { - filter.add(new AbilityPredicate(FlyingAbility.class)); - } - public Vertigo(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{R}"); - + super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{R}"); // Vertigo deals 2 damage to target creature with flying. That creature loses flying until end of turn. this.getSpellAbility().addEffect(new DamageTargetEffect(2)); this.getSpellAbility().addEffect(new LoseAbilityTargetEffect(FlyingAbility.getInstance(), Duration.EndOfTurn) .setText("That creature loses flying until end of turn")); - this.getSpellAbility().addTarget(new TargetPermanent(filter)); + this.getSpellAbility().addTarget(new TargetPermanent(StaticFilters.FILTER_CREATURE_FLYING)); } private Vertigo(final Vertigo card) { diff --git a/Mage.Sets/src/mage/cards/v/ViridianScout.java b/Mage.Sets/src/mage/cards/v/ViridianScout.java index 3cbf66865ef..5cf039985b4 100644 --- a/Mage.Sets/src/mage/cards/v/ViridianScout.java +++ b/Mage.Sets/src/mage/cards/v/ViridianScout.java @@ -1,36 +1,28 @@ package mage.cards.v; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.common.SacrificeSourceCost; import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.effects.common.DamageTargetEffect; -import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; -import mage.constants.Zone; -import mage.filter.common.FilterCreaturePermanent; -import mage.filter.predicate.mageobject.AbilityPredicate; +import mage.filter.StaticFilters; import mage.target.TargetPermanent; -import mage.target.common.TargetCreaturePermanent; + +import java.util.UUID; /** - * * @author Plopman */ public final class ViridianScout extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature with flying"); - static{ - filter.add(new AbilityPredicate(FlyingAbility.class)); - } public ViridianScout(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); this.subtype.add(SubType.SCOUT); @@ -41,7 +33,7 @@ public final class ViridianScout extends CardImpl { // {2}{G}, Sacrifice Viridian Scout: Viridian Scout deals 2 damage to target creature with flying. Ability ability = new SimpleActivatedAbility(new DamageTargetEffect(2, "it"), new ManaCostsImpl<>("{2}{G}")); ability.addCost(new SacrificeSourceCost()); - ability.addTarget(new TargetPermanent(filter)); + ability.addTarget(new TargetPermanent(StaticFilters.FILTER_CREATURE_FLYING)); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/w/WhirlingCatapult.java b/Mage.Sets/src/mage/cards/w/WhirlingCatapult.java index 902b9b8eb09..895d5a1344b 100644 --- a/Mage.Sets/src/mage/cards/w/WhirlingCatapult.java +++ b/Mage.Sets/src/mage/cards/w/WhirlingCatapult.java @@ -1,36 +1,28 @@ package mage.cards.w; -import java.util.UUID; import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.common.ExileFromTopOfLibraryCost; import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.effects.common.DamageEverythingEffect; -import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.constants.Zone; -import mage.filter.common.FilterCreaturePermanent; -import mage.filter.predicate.mageobject.AbilityPredicate; +import mage.filter.StaticFilters; + +import java.util.UUID; /** - * * @author L_J */ public final class WhirlingCatapult extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature with flying"); - static { - filter.add(new AbilityPredicate(FlyingAbility.class)); - } - public WhirlingCatapult(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT},"{4}"); + super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{4}"); // {2}, Exile the top two cards of your library: Whirling Catapult deals 1 damage to each creature with flying and each player. - Ability ability = new SimpleActivatedAbility(new DamageEverythingEffect(1, filter), new ManaCostsImpl<>("{2}")); + Ability ability = new SimpleActivatedAbility(new DamageEverythingEffect(1, StaticFilters.FILTER_CREATURE_FLYING), new ManaCostsImpl<>("{2}")); ability.addCost(new ExileFromTopOfLibraryCost(2)); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/w/Windstorm.java b/Mage.Sets/src/mage/cards/w/Windstorm.java index bd29496642c..e88c2055c77 100644 --- a/Mage.Sets/src/mage/cards/w/Windstorm.java +++ b/Mage.Sets/src/mage/cards/w/Windstorm.java @@ -1,33 +1,24 @@ package mage.cards.w; -import java.util.UUID; import mage.abilities.dynamicvalue.common.GetXValue; import mage.abilities.effects.common.DamageAllEffect; -import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.filter.common.FilterCreaturePermanent; -import mage.filter.predicate.mageobject.AbilityPredicate; +import mage.filter.StaticFilters; + +import java.util.UUID; /** - * * @author North */ public final class Windstorm extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature with flying"); - - static { - filter.add(new AbilityPredicate(FlyingAbility.class)); - } - public Windstorm(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{X}{G}"); + super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{X}{G}"); - - this.getSpellAbility().addEffect(new DamageAllEffect(GetXValue.instance, filter)); + this.getSpellAbility().addEffect(new DamageAllEffect(GetXValue.instance, StaticFilters.FILTER_CREATURE_FLYING)); } private Windstorm(final Windstorm card) { diff --git a/Mage.Sets/src/mage/cards/w/WingPuncture.java b/Mage.Sets/src/mage/cards/w/WingPuncture.java index 33c8f39bdcd..618e51e6b80 100644 --- a/Mage.Sets/src/mage/cards/w/WingPuncture.java +++ b/Mage.Sets/src/mage/cards/w/WingPuncture.java @@ -1,42 +1,33 @@ package mage.cards.w; -import java.util.UUID; import mage.abilities.Ability; import mage.abilities.effects.OneShotEffect; -import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Outcome; import mage.constants.Zone; -import mage.filter.common.FilterCreaturePermanent; -import mage.filter.predicate.mageobject.AbilityPredicate; +import mage.filter.StaticFilters; import mage.game.Game; import mage.game.permanent.Permanent; import mage.target.TargetPermanent; import mage.target.common.TargetControlledCreaturePermanent; -import mage.target.common.TargetCreaturePermanent; + +import java.util.UUID; /** - * * @author North */ public final class WingPuncture extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature with flying"); - - static { - filter.add(new AbilityPredicate(FlyingAbility.class)); - } - public WingPuncture(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{G}"); + super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{G}"); // Target creature you control deals damage equal to its power to target creature with flying. - this.getSpellAbility().addTarget(new TargetControlledCreaturePermanent()); - this.getSpellAbility().addTarget(new TargetPermanent(filter)); this.getSpellAbility().addEffect(new WingPunctureEffect()); + this.getSpellAbility().addTarget(new TargetControlledCreaturePermanent()); + this.getSpellAbility().addTarget(new TargetPermanent(StaticFilters.FILTER_CREATURE_FLYING)); } private WingPuncture(final WingPuncture card) { @@ -54,7 +45,7 @@ class WingPunctureEffect extends OneShotEffect { WingPunctureEffect() { super(Outcome.Damage); staticText = "Target creature you control deals damage equal to its power to target creature with flying"; - } + } private WingPunctureEffect(final WingPunctureEffect effect) { super(effect); diff --git a/Mage.Sets/src/mage/cards/w/WingSnare.java b/Mage.Sets/src/mage/cards/w/WingSnare.java index f041ce1f5ea..fc4974d233b 100644 --- a/Mage.Sets/src/mage/cards/w/WingSnare.java +++ b/Mage.Sets/src/mage/cards/w/WingSnare.java @@ -1,36 +1,26 @@ package mage.cards.w; -import java.util.UUID; import mage.abilities.effects.common.DestroyTargetEffect; -import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.filter.common.FilterCreaturePermanent; -import mage.filter.predicate.mageobject.AbilityPredicate; +import mage.filter.StaticFilters; import mage.target.TargetPermanent; -import mage.target.common.TargetCreaturePermanent; + +import java.util.UUID; /** - * * @author Plopman */ public final class WingSnare extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature with flying"); - - static { - filter.add(new AbilityPredicate(FlyingAbility.class)); - } - public WingSnare(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{2}{G}"); - + super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{2}{G}"); // Destroy target creature with flying. this.getSpellAbility().addEffect(new DestroyTargetEffect()); - this.getSpellAbility().addTarget(new TargetPermanent(filter)); + this.getSpellAbility().addTarget(new TargetPermanent(StaticFilters.FILTER_CREATURE_FLYING)); } private WingSnare(final WingSnare card) { diff --git a/Mage.Sets/src/mage/cards/w/WoollySpider.java b/Mage.Sets/src/mage/cards/w/WoollySpider.java index c0674ac5a21..54f02d7284a 100644 --- a/Mage.Sets/src/mage/cards/w/WoollySpider.java +++ b/Mage.Sets/src/mage/cards/w/WoollySpider.java @@ -1,34 +1,25 @@ - package mage.cards.w; -import java.util.UUID; import mage.MageInt; import mage.abilities.common.BlocksCreatureTriggeredAbility; import mage.abilities.effects.common.continuous.BoostSourceEffect; -import mage.abilities.keyword.FlyingAbility; import mage.abilities.keyword.ReachAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.constants.SubType; import mage.constants.Duration; -import mage.filter.common.FilterCreaturePermanent; -import mage.filter.predicate.mageobject.AbilityPredicate; +import mage.constants.SubType; +import mage.filter.StaticFilters; + +import java.util.UUID; /** - * * @author tcontis */ public final class WoollySpider extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature with flying"); - - static { - filter.add(new AbilityPredicate(FlyingAbility.class)); - } - public WoollySpider(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{G}{G}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{G}{G}"); this.subtype.add(SubType.SPIDER); this.power = new MageInt(2); @@ -38,7 +29,7 @@ public final class WoollySpider extends CardImpl { this.addAbility(ReachAbility.getInstance()); // Whenever Woolly Spider blocks a creature with flying, Woolly Spider gets +0/+2 until end of turn. - this.addAbility(new BlocksCreatureTriggeredAbility(new BoostSourceEffect(0, 2, Duration.EndOfTurn), filter, false)); + this.addAbility(new BlocksCreatureTriggeredAbility(new BoostSourceEffect(0, 2, Duration.EndOfTurn), StaticFilters.FILTER_CREATURE_FLYING, false)); } private WoollySpider(final WoollySpider card) { @@ -49,4 +40,4 @@ public final class WoollySpider extends CardImpl { public WoollySpider copy() { return new WoollySpider(this); } -} \ No newline at end of file +} diff --git a/Mage/src/main/java/mage/filter/StaticFilters.java b/Mage/src/main/java/mage/filter/StaticFilters.java index a46d0371d51..0a5b6fdf79a 100644 --- a/Mage/src/main/java/mage/filter/StaticFilters.java +++ b/Mage/src/main/java/mage/filter/StaticFilters.java @@ -1,6 +1,7 @@ package mage.filter; import mage.ObjectColor; +import mage.abilities.keyword.FlyingAbility; import mage.constants.*; import mage.counters.CounterType; import mage.filter.common.*; @@ -1159,6 +1160,13 @@ public final class StaticFilters { FILTER_CREATURES_NON_TOKEN.setLockedFilter(true); } + public static final FilterCreaturePermanent FILTER_CREATURE_FLYING = new FilterCreaturePermanent("creature with flying"); + + static { + FILTER_CREATURE_FLYING.add(new AbilityPredicate(FlyingAbility.class)); + FILTER_CREATURE_FLYING.setLockedFilter(true); + } + public static final FilterControlledCreaturePermanent FILTER_A_CONTROLLED_CREATURE_P1P1 = new FilterControlledCreaturePermanent("a creature you control with a +1/+1 counter on it"); static {