From b7159d7d2c3e0b9ef49ea128cc2e36d0b78628ec Mon Sep 17 00:00:00 2001 From: igoudt Date: Mon, 10 Jul 2017 15:45:19 +0200 Subject: [PATCH] update spellfilters to staticfilters --- .../mage/cards/b/BattlefieldThaumaturge.java | 11 ++-------- .../src/mage/cards/b/BlistercoilWeird.java | 14 ++----------- .../mage/cards/c/ChancellorOfTheAnnex.java | 4 ++-- .../src/mage/cards/c/Counterbalance.java | 5 ++--- Mage.Sets/src/mage/cards/c/Countermand.java | 4 ++-- Mage.Sets/src/mage/cards/c/Cursecatcher.java | 14 ++----------- .../src/mage/cards/d/DecreeOfSilence.java | 4 ++-- Mage.Sets/src/mage/cards/d/Disrupt.java | 14 ++----------- .../src/mage/cards/d/DoubleNegative.java | 4 ++-- .../src/mage/cards/d/DualcasterMage.java | 14 ++----------- Mage.Sets/src/mage/cards/e/EchoMage.java | 16 +++------------ .../mage/cards/f/FerocityOfTheUnderworld.java | 10 +++------- Mage.Sets/src/mage/cards/f/Flusterstorm.java | 12 ++--------- Mage.Sets/src/mage/cards/f/Fluxcharger.java | 13 ++---------- .../src/mage/cards/f/ForcedFruition.java | 4 ++-- .../src/mage/cards/g/GlimpseOfNature.java | 10 ++-------- Mage.Sets/src/mage/cards/i/IceCave.java | 8 ++++---- Mage.Sets/src/mage/cards/i/InsidiousWill.java | 17 ++++------------ .../src/mage/cards/j/JudgesFamiliar.java | 20 +++++-------------- .../src/mage/cards/k/KaervekTheMerciless.java | 4 ++-- Mage.Sets/src/mage/cards/m/ManaBreach.java | 7 ++++--- .../src/mage/cards/m/MeletisCharlatan.java | 17 ++++------------ .../src/mage/cards/m/MercurialGeists.java | 17 ++++------------ .../src/mage/cards/m/MinamosMeddling.java | 10 +++------- Mage.Sets/src/mage/cards/m/MindsDilation.java | 9 +++++---- .../src/mage/cards/m/MischievousQuanar.java | 17 ++++------------ .../src/mage/cards/m/MoltenInfluence.java | 17 ++++------------ Mage.Sets/src/mage/cards/n/NiblisOfFrost.java | 14 ++++--------- Mage.Sets/src/mage/cards/o/OddsEnds.java | 17 ++++------------ Mage.Sets/src/mage/cards/o/Outwit.java | 3 ++- .../src/mage/cards/p/PainfulQuandary.java | 7 ++++--- Mage.Sets/src/mage/cards/p/PardicDragon.java | 4 ++-- .../src/mage/cards/p/PrescientChimera.java | 16 ++++----------- Mage.Sets/src/mage/cards/p/PsychicStrike.java | 13 ++++++------ .../src/mage/cards/p/PunishIgnorance.java | 9 +++++---- Mage.Sets/src/mage/cards/q/Quash.java | 19 +++++------------- Mage.Sets/src/mage/cards/r/RhysticStudy.java | 7 ++++--- Mage.Sets/src/mage/cards/s/SigilTracer.java | 12 ++++------- Mage.Sets/src/mage/cards/s/SoulBarrier.java | 10 +++++----- .../src/mage/cards/s/SpelltitheEnforcer.java | 7 ++++--- Mage.Sets/src/mage/cards/s/SplitDecision.java | 17 ++++------------ Mage.Sets/src/mage/cards/s/StratusDancer.java | 16 ++++----------- Mage.Sets/src/mage/cards/t/Tephraderm.java | 9 ++++----- Mage.Sets/src/mage/cards/t/Twincast.java | 19 +++++------------- Mage.Sets/src/mage/cards/u/Undermine.java | 7 ++++--- .../src/mage/cards/u/UyoSilentProphet.java | 14 ++----------- .../src/mage/cards/v/VodalianMystic.java | 17 ++++------------ .../src/mage/cards/y/YoungPyromancer.java | 17 ++++------------ .../main/java/mage/filter/StaticFilters.java | 9 +++++++++ .../main/java/mage/target/TargetSpell.java | 3 ++- 50 files changed, 173 insertions(+), 389 deletions(-) diff --git a/Mage.Sets/src/mage/cards/b/BattlefieldThaumaturge.java b/Mage.Sets/src/mage/cards/b/BattlefieldThaumaturge.java index a635efd686f..34db5229735 100644 --- a/Mage.Sets/src/mage/cards/b/BattlefieldThaumaturge.java +++ b/Mage.Sets/src/mage/cards/b/BattlefieldThaumaturge.java @@ -38,9 +38,7 @@ import mage.abilities.keyword.HexproofAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.*; -import mage.filter.FilterSpell; -import mage.filter.predicate.Predicates; -import mage.filter.predicate.mageobject.CardTypePredicate; +import mage.filter.StaticFilters; import mage.game.Game; import mage.game.permanent.Permanent; import mage.game.stack.Spell; @@ -83,11 +81,6 @@ public class BattlefieldThaumaturge extends CardImpl { class BattlefieldThaumaturgeSpellsCostReductionEffect extends CostModificationEffectImpl { - private static final FilterSpell filter = new FilterSpell("instant and sorcery spell"); - - static { - filter.add(Predicates.or(new CardTypePredicate(CardType.INSTANT), new CardTypePredicate(CardType.SORCERY))); - } public BattlefieldThaumaturgeSpellsCostReductionEffect() { super(Duration.WhileOnBattlefield, Outcome.Benefit, CostModificationType.REDUCE_COST); @@ -118,7 +111,7 @@ class BattlefieldThaumaturgeSpellsCostReductionEffect extends CostModificationEf if ((abilityToModify instanceof SpellAbility) && abilityToModify.getControllerId().equals(source.getControllerId())) { Spell spell = (Spell) game.getStack().getStackObject(abilityToModify.getId()); - return spell != null && BattlefieldThaumaturgeSpellsCostReductionEffect.filter.match(spell, game); + return spell != null && StaticFilters.FILTER_INSTANT_OR_SORCERY_SPELL.match(spell, game); } return false; } diff --git a/Mage.Sets/src/mage/cards/b/BlistercoilWeird.java b/Mage.Sets/src/mage/cards/b/BlistercoilWeird.java index 93ec6c1ad16..782100a79e5 100644 --- a/Mage.Sets/src/mage/cards/b/BlistercoilWeird.java +++ b/Mage.Sets/src/mage/cards/b/BlistercoilWeird.java @@ -36,9 +36,7 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Duration; -import mage.filter.FilterSpell; -import mage.filter.predicate.Predicates; -import mage.filter.predicate.mageobject.CardTypePredicate; +import mage.filter.StaticFilters; import java.util.UUID; @@ -47,14 +45,6 @@ import java.util.UUID; */ public class BlistercoilWeird extends CardImpl { - private static final FilterSpell filter = new FilterSpell("instant or sorcery spell"); - - static { - filter.add(Predicates.or( - new CardTypePredicate(CardType.INSTANT), - new CardTypePredicate(CardType.SORCERY))); - } - public BlistercoilWeird(UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{U/R}"); this.subtype.add("Weird"); @@ -65,7 +55,7 @@ public class BlistercoilWeird extends CardImpl { this.toughness = new MageInt(1); // Whenever you cast an instant or sorcery spell, Blistercoil Weird gets +1/+1 until end of turn. Untap it. - Ability ability = new SpellCastControllerTriggeredAbility(new BoostSourceEffect(1, 1, Duration.EndOfTurn), filter, false); + Ability ability = new SpellCastControllerTriggeredAbility(new BoostSourceEffect(1, 1, Duration.EndOfTurn), StaticFilters.FILTER_INSTANT_OR_SORCERY_SPELL, false); ability.addEffect(new UntapSourceEffect()); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/cards/c/ChancellorOfTheAnnex.java b/Mage.Sets/src/mage/cards/c/ChancellorOfTheAnnex.java index e8706998b94..4b08d66a0c9 100644 --- a/Mage.Sets/src/mage/cards/c/ChancellorOfTheAnnex.java +++ b/Mage.Sets/src/mage/cards/c/ChancellorOfTheAnnex.java @@ -42,7 +42,7 @@ import mage.constants.CardType; import mage.constants.Outcome; import mage.constants.SetTargetPointer; import mage.constants.Zone; -import mage.filter.FilterSpell; +import mage.filter.StaticFilters; import mage.game.Game; import mage.game.events.GameEvent; import mage.game.events.GameEvent.EventType; @@ -69,7 +69,7 @@ public class ChancellorOfTheAnnex extends CardImpl { this.addAbility(FlyingAbility.getInstance()); // Whenever an opponent casts a spell, counter it unless that player pays {1}. - this.addAbility(new SpellCastOpponentTriggeredAbility(Zone.BATTLEFIELD, new CounterUnlessPaysEffect(new GenericManaCost(1)), new FilterSpell(), false, SetTargetPointer.SPELL)); + this.addAbility(new SpellCastOpponentTriggeredAbility(Zone.BATTLEFIELD, new CounterUnlessPaysEffect(new GenericManaCost(1)), StaticFilters.FILTER_SPELL, false, SetTargetPointer.SPELL)); } public ChancellorOfTheAnnex(final ChancellorOfTheAnnex card) { diff --git a/Mage.Sets/src/mage/cards/c/Counterbalance.java b/Mage.Sets/src/mage/cards/c/Counterbalance.java index 7149248f742..9fb3fc60a8c 100644 --- a/Mage.Sets/src/mage/cards/c/Counterbalance.java +++ b/Mage.Sets/src/mage/cards/c/Counterbalance.java @@ -38,12 +38,11 @@ import mage.constants.CardType; import mage.constants.Outcome; import mage.constants.SetTargetPointer; import mage.constants.Zone; -import mage.filter.FilterSpell; +import mage.filter.StaticFilters; import mage.game.Game; import mage.game.permanent.Permanent; import mage.game.stack.Spell; import mage.players.Player; -import mage.util.CardUtil; import java.util.UUID; @@ -58,7 +57,7 @@ public class Counterbalance extends CardImpl { // Whenever an opponent casts a spell, you may reveal the top card of your library. If you do, counter that spell if it has the same converted mana cost as the revealed card. - this.addAbility(new SpellCastOpponentTriggeredAbility(Zone.BATTLEFIELD, new CounterbalanceEffect(), new FilterSpell(), true, SetTargetPointer.SPELL)); + this.addAbility(new SpellCastOpponentTriggeredAbility(Zone.BATTLEFIELD, new CounterbalanceEffect(), StaticFilters.FILTER_SPELL, true, SetTargetPointer.SPELL)); } public Counterbalance(final Counterbalance card) { diff --git a/Mage.Sets/src/mage/cards/c/Countermand.java b/Mage.Sets/src/mage/cards/c/Countermand.java index c87687b8ed2..1a239cfa7d7 100644 --- a/Mage.Sets/src/mage/cards/c/Countermand.java +++ b/Mage.Sets/src/mage/cards/c/Countermand.java @@ -34,7 +34,7 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Outcome; import mage.constants.Zone; -import mage.filter.FilterSpell; +import mage.filter.StaticFilters; import mage.game.Game; import mage.game.stack.StackObject; import mage.players.Player; @@ -53,7 +53,7 @@ public class Countermand extends CardImpl { // Counter target spell. Its controller puts the top four cards of his or her library into his or her graveyard. - this.getSpellAbility().addTarget(new TargetSpell(new FilterSpell())); + this.getSpellAbility().addTarget(new TargetSpell(StaticFilters.FILTER_SPELL)); this.getSpellAbility().addEffect(new CountermandEffect()); } diff --git a/Mage.Sets/src/mage/cards/c/Cursecatcher.java b/Mage.Sets/src/mage/cards/c/Cursecatcher.java index 78352a704d0..5aebc0c8c2c 100644 --- a/Mage.Sets/src/mage/cards/c/Cursecatcher.java +++ b/Mage.Sets/src/mage/cards/c/Cursecatcher.java @@ -36,9 +36,7 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Zone; -import mage.filter.FilterSpell; -import mage.filter.predicate.Predicates; -import mage.filter.predicate.mageobject.CardTypePredicate; +import mage.filter.StaticFilters; import mage.target.TargetSpell; import java.util.UUID; @@ -49,14 +47,6 @@ import java.util.UUID; */ public class Cursecatcher extends CardImpl { - private static final FilterSpell filter = new FilterSpell("instant or sorcery spell"); - - static { - filter.add(Predicates.or( - new CardTypePredicate(CardType.INSTANT), - new CardTypePredicate(CardType.SORCERY))); - } - public Cursecatcher(UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{U}"); this.subtype.add("Merfolk"); @@ -69,7 +59,7 @@ public class Cursecatcher extends CardImpl { SimpleActivatedAbility ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new CounterUnlessPaysEffect(new GenericManaCost(1)), new SacrificeSourceCost()); - ability.addTarget(new TargetSpell(filter)); + ability.addTarget(new TargetSpell(StaticFilters.FILTER_INSTANT_OR_SORCERY_SPELL)); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/d/DecreeOfSilence.java b/Mage.Sets/src/mage/cards/d/DecreeOfSilence.java index 15b7c6c5e7b..8c4627e3401 100644 --- a/Mage.Sets/src/mage/cards/d/DecreeOfSilence.java +++ b/Mage.Sets/src/mage/cards/d/DecreeOfSilence.java @@ -44,7 +44,7 @@ import mage.constants.CardType; import mage.constants.SetTargetPointer; import mage.constants.Zone; import mage.counters.CounterType; -import mage.filter.FilterSpell; +import mage.filter.StaticFilters; import mage.target.TargetSpell; import java.util.UUID; @@ -61,7 +61,7 @@ public class DecreeOfSilence extends CardImpl { // Whenever an opponent casts a spell, counter that spell and put a depletion counter on Decree of Silence. If there are three or more depletion counters on Decree of Silence, sacrifice it. Effect effect = new CounterTargetEffect(); effect.setText("counter that spell"); - Ability ability = new SpellCastOpponentTriggeredAbility(Zone.BATTLEFIELD, effect, new FilterSpell(), + Ability ability = new SpellCastOpponentTriggeredAbility(Zone.BATTLEFIELD, effect, StaticFilters.FILTER_SPELL, false, SetTargetPointer.SPELL); effect = new AddCountersSourceEffect(CounterType.DEPLETION.createInstance()); effect.setText("and put a depletion counter on {this}."); diff --git a/Mage.Sets/src/mage/cards/d/Disrupt.java b/Mage.Sets/src/mage/cards/d/Disrupt.java index 9b571fcfac6..348fc635c3f 100644 --- a/Mage.Sets/src/mage/cards/d/Disrupt.java +++ b/Mage.Sets/src/mage/cards/d/Disrupt.java @@ -33,9 +33,7 @@ import mage.abilities.effects.common.DrawCardSourceControllerEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.filter.FilterSpell; -import mage.filter.predicate.Predicates; -import mage.filter.predicate.mageobject.CardTypePredicate; +import mage.filter.StaticFilters; import mage.target.TargetSpell; import java.util.UUID; @@ -47,19 +45,11 @@ import java.util.UUID; */ public class Disrupt extends CardImpl { - private static final FilterSpell filter = new FilterSpell("instant or sorcery spell"); - - static { - filter.add(Predicates.or( - new CardTypePredicate(CardType.INSTANT), - new CardTypePredicate(CardType.SORCERY))); - } - public Disrupt(UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{U}"); // Counter target instant or sorcery spell unless its controller pays {1}. - this.getSpellAbility().addTarget(new TargetSpell(filter)); + this.getSpellAbility().addTarget(new TargetSpell(StaticFilters.FILTER_INSTANT_OR_SORCERY_SPELL)); this.getSpellAbility().addEffect(new CounterUnlessPaysEffect(new GenericManaCost(1))); // Draw a card. this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1)); diff --git a/Mage.Sets/src/mage/cards/d/DoubleNegative.java b/Mage.Sets/src/mage/cards/d/DoubleNegative.java index d31cc9aaa8b..8032e12df6c 100644 --- a/Mage.Sets/src/mage/cards/d/DoubleNegative.java +++ b/Mage.Sets/src/mage/cards/d/DoubleNegative.java @@ -32,7 +32,7 @@ import mage.abilities.effects.common.CounterTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.filter.FilterSpell; +import mage.filter.StaticFilters; import mage.target.TargetSpell; import java.util.UUID; @@ -53,7 +53,7 @@ public class DoubleNegative extends CardImpl { Effect effect = new CounterTargetEffect(); effect.setText("Counter up to two target spells"); this.getSpellAbility().addEffect(effect); - this.getSpellAbility().addTarget(new TargetSpell(0, 2, new FilterSpell())); + this.getSpellAbility().addTarget(new TargetSpell(0, 2, StaticFilters.FILTER_SPELL)); } public DoubleNegative(final DoubleNegative card) { diff --git a/Mage.Sets/src/mage/cards/d/DualcasterMage.java b/Mage.Sets/src/mage/cards/d/DualcasterMage.java index af01feff424..3d88c72193c 100644 --- a/Mage.Sets/src/mage/cards/d/DualcasterMage.java +++ b/Mage.Sets/src/mage/cards/d/DualcasterMage.java @@ -35,9 +35,7 @@ import mage.abilities.keyword.FlashAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.filter.FilterSpell; -import mage.filter.predicate.Predicates; -import mage.filter.predicate.mageobject.CardTypePredicate; +import mage.filter.StaticFilters; import mage.target.TargetSpell; import java.util.UUID; @@ -48,14 +46,6 @@ import java.util.UUID; */ public class DualcasterMage extends CardImpl { - private static final FilterSpell filter = new FilterSpell("instant or sorcery spell"); - - static { - filter.add(Predicates.or( - new CardTypePredicate(CardType.INSTANT), - new CardTypePredicate(CardType.SORCERY))); - } - public DualcasterMage(UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{R}{R}"); this.subtype.add("Human"); @@ -69,7 +59,7 @@ public class DualcasterMage extends CardImpl { // When Dualcaster Mage enters the battlefield, copy target instant or sorcery spell. You may choose new targets for the copy. Ability ability = new EntersBattlefieldTriggeredAbility(new CopyTargetSpellEffect(), false); - ability.addTarget(new TargetSpell(filter)); + ability.addTarget(new TargetSpell(StaticFilters.FILTER_INSTANT_OR_SORCERY_SPELL)); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/e/EchoMage.java b/Mage.Sets/src/mage/cards/e/EchoMage.java index 1edc7da3ad8..1253ba42847 100644 --- a/Mage.Sets/src/mage/cards/e/EchoMage.java +++ b/Mage.Sets/src/mage/cards/e/EchoMage.java @@ -43,9 +43,7 @@ import mage.cards.LevelerCard; import mage.constants.CardType; import mage.constants.Outcome; import mage.constants.Zone; -import mage.filter.FilterSpell; -import mage.filter.predicate.Predicates; -import mage.filter.predicate.mageobject.CardTypePredicate; +import mage.filter.StaticFilters; import mage.game.Game; import mage.game.stack.Spell; import mage.target.TargetSpell; @@ -58,14 +56,6 @@ import java.util.UUID; */ public class EchoMage extends LevelerCard { - private static final FilterSpell filter = new FilterSpell("instant or sorcery spell"); - - static { - filter.add(Predicates.or( - new CardTypePredicate(CardType.INSTANT), - new CardTypePredicate(CardType.SORCERY))); - } - public EchoMage(UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{U}{U}"); this.subtype.add("Human"); @@ -82,7 +72,7 @@ public class EchoMage extends LevelerCard { // {U}{U}, {tap}: Copy target instant or sorcery spell. You may choose new targets for the copy. Abilities abilities1 = new AbilitiesImpl<>(); Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new CopyTargetSpellEffect(), new ManaCostsImpl("{U}{U}")); - ability.addTarget(new TargetSpell(filter)); + ability.addTarget(new TargetSpell(StaticFilters.FILTER_INSTANT_OR_SORCERY_SPELL)); ability.addCost(new TapSourceCost()); abilities1.add(ability); // LEVEL 4+ @@ -90,7 +80,7 @@ public class EchoMage extends LevelerCard { // {U}{U}, {tap}: Copy target instant or sorcery spell twice. You may choose new targets for the copies. Abilities abilities2 = new AbilitiesImpl<>(); ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new EchoMageEffect(), new ManaCostsImpl("{U}{U}")); - ability.addTarget(new TargetSpell(filter)); + ability.addTarget(new TargetSpell(StaticFilters.FILTER_INSTANT_OR_SORCERY_SPELL)); ability.addCost(new TapSourceCost()); abilities2.add(ability); diff --git a/Mage.Sets/src/mage/cards/f/FerocityOfTheUnderworld.java b/Mage.Sets/src/mage/cards/f/FerocityOfTheUnderworld.java index c24504a8618..a871e01b1e2 100644 --- a/Mage.Sets/src/mage/cards/f/FerocityOfTheUnderworld.java +++ b/Mage.Sets/src/mage/cards/f/FerocityOfTheUnderworld.java @@ -27,7 +27,6 @@ */ package mage.cards.f; -import mage.constants.ComparisonType; import mage.abilities.Mode; import mage.abilities.effects.common.CopyTargetSpellEffect; import mage.abilities.effects.common.DestroyTargetEffect; @@ -35,10 +34,9 @@ import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.filter.FilterSpell; +import mage.constants.ComparisonType; +import mage.filter.StaticFilters; import mage.filter.common.FilterNonlandPermanent; -import mage.filter.predicate.Predicates; -import mage.filter.predicate.mageobject.CardTypePredicate; import mage.filter.predicate.mageobject.ConvertedManaCostPredicate; import mage.target.TargetSpell; import mage.target.common.TargetCardInYourGraveyard; @@ -53,11 +51,9 @@ import java.util.UUID; public class FerocityOfTheUnderworld extends CardImpl { private static final FilterNonlandPermanent filterMode1 = new FilterNonlandPermanent("nonland permanent with converted mana cost 3 or less"); - private static final FilterSpell filterMode2 = new FilterSpell("instant or sorcery spell"); static { filterMode1.add(new ConvertedManaCostPredicate(ComparisonType.FEWER_THAN, 4)); - filterMode2.add(Predicates.or(new CardTypePredicate(CardType.INSTANT), new CardTypePredicate(CardType.SORCERY))); } public FerocityOfTheUnderworld(UUID ownerId, CardSetInfo setInfo) { @@ -70,7 +66,7 @@ public class FerocityOfTheUnderworld extends CardImpl { // Copy target instant or sorcery spell. You may choose new targets for the copy. Mode mode = new Mode(); mode.getEffects().add(new CopyTargetSpellEffect()); - mode.getTargets().add(new TargetSpell(filterMode2)); + mode.getTargets().add(new TargetSpell(StaticFilters.FILTER_INSTANT_OR_SORCERY_SPELL)); this.getSpellAbility().addMode(mode); // Return target card from your graveyard to your hand. diff --git a/Mage.Sets/src/mage/cards/f/Flusterstorm.java b/Mage.Sets/src/mage/cards/f/Flusterstorm.java index 6e79c2bae10..dee404d226a 100644 --- a/Mage.Sets/src/mage/cards/f/Flusterstorm.java +++ b/Mage.Sets/src/mage/cards/f/Flusterstorm.java @@ -33,9 +33,7 @@ import mage.abilities.keyword.StormAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.filter.FilterSpell; -import mage.filter.predicate.Predicates; -import mage.filter.predicate.mageobject.CardTypePredicate; +import mage.filter.StaticFilters; import mage.target.TargetSpell; import java.util.UUID; @@ -46,18 +44,12 @@ import java.util.UUID; */ public class Flusterstorm extends CardImpl { - private static final FilterSpell filter = new FilterSpell("instant or sorcery spell"); - - static { - filter.add(Predicates.or(new CardTypePredicate(CardType.INSTANT), new CardTypePredicate(CardType.SORCERY))); - } - public Flusterstorm(UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{U}"); // Counter target instant or sorcery spell unless its controller pays {1}. this.getSpellAbility().addEffect(new CounterUnlessPaysEffect(new ManaCostsImpl("{1}"))); - this.getSpellAbility().addTarget(new TargetSpell(filter)); + this.getSpellAbility().addTarget(new TargetSpell(StaticFilters.FILTER_INSTANT_OR_SORCERY_SPELL)); // Storm this.addAbility(new StormAbility()); } diff --git a/Mage.Sets/src/mage/cards/f/Fluxcharger.java b/Mage.Sets/src/mage/cards/f/Fluxcharger.java index 6fae10adb52..749116f8301 100644 --- a/Mage.Sets/src/mage/cards/f/Fluxcharger.java +++ b/Mage.Sets/src/mage/cards/f/Fluxcharger.java @@ -35,9 +35,7 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Duration; -import mage.filter.FilterSpell; -import mage.filter.predicate.Predicates; -import mage.filter.predicate.mageobject.CardTypePredicate; +import mage.filter.StaticFilters; import java.util.UUID; @@ -47,13 +45,6 @@ import java.util.UUID; */ public class Fluxcharger extends CardImpl { - private static final FilterSpell filter = new FilterSpell("instant or sorcery spell"); - static { - filter.add(Predicates.or( - new CardTypePredicate(CardType.INSTANT), - new CardTypePredicate(CardType.SORCERY))); - } - public Fluxcharger(UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{U}{R}"); this.subtype.add("Weird"); @@ -64,7 +55,7 @@ public class Fluxcharger extends CardImpl { // Flying this.addAbility(FlyingAbility.getInstance()); // Whenever you cast an instant or sorcery spell, you may switch Fluxcharger's power and toughness until end of turn. - this.addAbility(new SpellCastControllerTriggeredAbility(new SwitchPowerToughnessSourceEffect(Duration.EndOfTurn), filter, true)); + this.addAbility(new SpellCastControllerTriggeredAbility(new SwitchPowerToughnessSourceEffect(Duration.EndOfTurn), StaticFilters.FILTER_INSTANT_OR_SORCERY_SPELL, true)); } diff --git a/Mage.Sets/src/mage/cards/f/ForcedFruition.java b/Mage.Sets/src/mage/cards/f/ForcedFruition.java index 0e7ca4589cf..7d27a9c7710 100644 --- a/Mage.Sets/src/mage/cards/f/ForcedFruition.java +++ b/Mage.Sets/src/mage/cards/f/ForcedFruition.java @@ -34,7 +34,7 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SetTargetPointer; import mage.constants.Zone; -import mage.filter.FilterSpell; +import mage.filter.StaticFilters; import java.util.UUID; @@ -50,7 +50,7 @@ public class ForcedFruition extends CardImpl { // Whenever an opponent casts a spell, that player draws seven cards. this.addAbility(new SpellCastOpponentTriggeredAbility(Zone.BATTLEFIELD, new DrawCardTargetEffect(7), - new FilterSpell(), false, SetTargetPointer.PLAYER)); + StaticFilters.FILTER_SPELL, false, SetTargetPointer.PLAYER)); } public ForcedFruition(final ForcedFruition card) { diff --git a/Mage.Sets/src/mage/cards/g/GlimpseOfNature.java b/Mage.Sets/src/mage/cards/g/GlimpseOfNature.java index 22d51adfcea..b95b15662b3 100644 --- a/Mage.Sets/src/mage/cards/g/GlimpseOfNature.java +++ b/Mage.Sets/src/mage/cards/g/GlimpseOfNature.java @@ -34,8 +34,7 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Duration; -import mage.filter.FilterSpell; -import mage.filter.predicate.mageobject.CardTypePredicate; +import mage.filter.StaticFilters; import mage.game.Game; import mage.game.events.GameEvent; import mage.game.events.GameEvent.EventType; @@ -66,11 +65,6 @@ public class GlimpseOfNature extends CardImpl { class GlimpseOfNatureTriggeredAbility extends DelayedTriggeredAbility { - private static final FilterSpell filter = new FilterSpell(); - static { - filter.add(new CardTypePredicate(CardType.CREATURE)); - } - public GlimpseOfNatureTriggeredAbility() { super(new DrawCardSourceControllerEffect(1), Duration.EndOfTurn, false); } @@ -88,7 +82,7 @@ class GlimpseOfNatureTriggeredAbility extends DelayedTriggeredAbility { public boolean checkTrigger(GameEvent event, Game game) { if (event.getPlayerId().equals(this.getControllerId())) { Spell spell = game.getStack().getSpell(event.getTargetId()); - if (spell != null && filter.match(spell, game)) { + if (spell != null && StaticFilters.FILTER_SPELL_A_CREATURE.match(spell, game)) { return true; } } diff --git a/Mage.Sets/src/mage/cards/i/IceCave.java b/Mage.Sets/src/mage/cards/i/IceCave.java index 228e2d6d4d0..009dc048e89 100644 --- a/Mage.Sets/src/mage/cards/i/IceCave.java +++ b/Mage.Sets/src/mage/cards/i/IceCave.java @@ -29,6 +29,8 @@ package mage.cards.i; import mage.abilities.Ability; import mage.abilities.common.SpellCastAllTriggeredAbility; +import mage.abilities.costs.Cost; +import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.effects.OneShotEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; @@ -36,13 +38,11 @@ import mage.constants.CardType; import mage.constants.Outcome; import mage.constants.SetTargetPointer; import mage.constants.Zone; -import mage.filter.FilterSpell; +import mage.filter.StaticFilters; import mage.game.Game; import mage.game.permanent.Permanent; import mage.game.stack.Spell; import mage.players.Player; -import mage.abilities.costs.Cost; -import mage.abilities.costs.mana.ManaCostsImpl; import java.util.UUID; @@ -57,7 +57,7 @@ public class IceCave extends CardImpl { // Whenever a player casts a spell, any other player may pay that spell's mana cost. If a player does, counter the spell. (Mana cost includes color.) - this.addAbility(new SpellCastAllTriggeredAbility(Zone.BATTLEFIELD, new IceCaveEffect(), new FilterSpell(), false, SetTargetPointer.SPELL)); + this.addAbility(new SpellCastAllTriggeredAbility(Zone.BATTLEFIELD, new IceCaveEffect(), StaticFilters.FILTER_SPELL, false, SetTargetPointer.SPELL)); } public IceCave(final IceCave card) { diff --git a/Mage.Sets/src/mage/cards/i/InsidiousWill.java b/Mage.Sets/src/mage/cards/i/InsidiousWill.java index d7e7d0fa903..63838c28118 100644 --- a/Mage.Sets/src/mage/cards/i/InsidiousWill.java +++ b/Mage.Sets/src/mage/cards/i/InsidiousWill.java @@ -27,7 +27,6 @@ */ package mage.cards.i; -import java.util.UUID; import mage.abilities.Mode; import mage.abilities.effects.common.ChooseNewTargetsTargetEffect; import mage.abilities.effects.common.CopyTargetSpellEffect; @@ -35,25 +34,17 @@ import mage.abilities.effects.common.CounterTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.filter.FilterSpell; -import mage.filter.predicate.Predicates; -import mage.filter.predicate.mageobject.CardTypePredicate; +import mage.filter.StaticFilters; import mage.target.TargetSpell; +import java.util.UUID; + /** * * @author fireshoes */ public class InsidiousWill extends CardImpl { - private static final FilterSpell filter = new FilterSpell("instant or sorcery spell"); - - static { - filter.add(Predicates.or( - new CardTypePredicate(CardType.INSTANT), - new CardTypePredicate(CardType.SORCERY))); - } - public InsidiousWill(UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{2}{U}{U}"); @@ -74,7 +65,7 @@ public class InsidiousWill extends CardImpl { // Copy target instant or sorcery spell. You may choose new targets for the copy. mode = new Mode(); mode.getEffects().add(new CopyTargetSpellEffect()); - mode.getTargets().add(new TargetSpell(filter)); + mode.getTargets().add(new TargetSpell(StaticFilters.FILTER_INSTANT_OR_SORCERY_SPELL)); this.getSpellAbility().getModes().addMode(mode); } diff --git a/Mage.Sets/src/mage/cards/j/JudgesFamiliar.java b/Mage.Sets/src/mage/cards/j/JudgesFamiliar.java index d69e52b9c1d..faa3ac8d003 100644 --- a/Mage.Sets/src/mage/cards/j/JudgesFamiliar.java +++ b/Mage.Sets/src/mage/cards/j/JudgesFamiliar.java @@ -27,9 +27,6 @@ */ package mage.cards.j; -import java.util.UUID; - -import mage.constants.CardType; import mage.MageInt; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.common.SacrificeSourceCost; @@ -38,26 +35,19 @@ import mage.abilities.effects.common.CounterUnlessPaysEffect; import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; +import mage.constants.CardType; import mage.constants.Zone; -import mage.filter.FilterSpell; -import mage.filter.predicate.Predicates; -import mage.filter.predicate.mageobject.CardTypePredicate; +import mage.filter.StaticFilters; import mage.target.TargetSpell; +import java.util.UUID; + /** * * @author LevelX2 */ public class JudgesFamiliar extends CardImpl { - private static final FilterSpell filter = new FilterSpell("instant or sorcery spell"); - - static { - filter.add(Predicates.or( - new CardTypePredicate(CardType.INSTANT), - new CardTypePredicate(CardType.SORCERY))); - } - public JudgesFamiliar(UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{W/U}"); this.subtype.add("Bird"); @@ -73,7 +63,7 @@ public class JudgesFamiliar extends CardImpl { SimpleActivatedAbility ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new CounterUnlessPaysEffect(new GenericManaCost(1)), new SacrificeSourceCost()); - ability.addTarget(new TargetSpell(filter)); + ability.addTarget(new TargetSpell(StaticFilters.FILTER_INSTANT_OR_SORCERY_SPELL)); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/k/KaervekTheMerciless.java b/Mage.Sets/src/mage/cards/k/KaervekTheMerciless.java index e711a881bf1..c01971b28bf 100644 --- a/Mage.Sets/src/mage/cards/k/KaervekTheMerciless.java +++ b/Mage.Sets/src/mage/cards/k/KaervekTheMerciless.java @@ -35,7 +35,7 @@ import mage.abilities.effects.OneShotEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.*; -import mage.filter.FilterSpell; +import mage.filter.StaticFilters; import mage.game.Game; import mage.game.permanent.Permanent; import mage.game.stack.Spell; @@ -61,7 +61,7 @@ public class KaervekTheMerciless extends CardImpl { this.toughness = new MageInt(4); // Whenever an opponent casts a spell, Kaervek the Merciless deals damage to target creature or player equal to that spell's converted mana cost. - Ability ability = new SpellCastOpponentTriggeredAbility(Zone.BATTLEFIELD, new KaervekTheMercilessEffect(), new FilterSpell(), false, SetTargetPointer.SPELL); + Ability ability = new SpellCastOpponentTriggeredAbility(Zone.BATTLEFIELD, new KaervekTheMercilessEffect(), StaticFilters.FILTER_SPELL, false, SetTargetPointer.SPELL); ability.addTarget(new TargetCreatureOrPlayer()); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/cards/m/ManaBreach.java b/Mage.Sets/src/mage/cards/m/ManaBreach.java index 7ce760a31b7..9318ff04875 100644 --- a/Mage.Sets/src/mage/cards/m/ManaBreach.java +++ b/Mage.Sets/src/mage/cards/m/ManaBreach.java @@ -27,7 +27,6 @@ */ package mage.cards.m; -import java.util.UUID; import mage.abilities.Ability; import mage.abilities.common.SpellCastAllTriggeredAbility; import mage.abilities.effects.OneShotEffect; @@ -37,7 +36,7 @@ import mage.constants.CardType; import mage.constants.Outcome; import mage.constants.SetTargetPointer; import mage.constants.Zone; -import mage.filter.FilterSpell; +import mage.filter.StaticFilters; import mage.filter.common.FilterLandPermanent; import mage.filter.predicate.permanent.ControllerIdPredicate; import mage.game.Game; @@ -45,6 +44,8 @@ import mage.game.permanent.Permanent; import mage.players.Player; import mage.target.common.TargetLandPermanent; +import java.util.UUID; + /** * * @author LoneFox @@ -56,7 +57,7 @@ public class ManaBreach extends CardImpl { super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{2}{U}"); // Whenever a player casts a spell, that player returns a land he or she controls to its owner's hand. - this.addAbility(new SpellCastAllTriggeredAbility(new ManaBreachEffect(), new FilterSpell(), false, SetTargetPointer.PLAYER)); + this.addAbility(new SpellCastAllTriggeredAbility(new ManaBreachEffect(), StaticFilters.FILTER_SPELL, false, SetTargetPointer.PLAYER)); } public ManaBreach(final ManaBreach card) { diff --git a/Mage.Sets/src/mage/cards/m/MeletisCharlatan.java b/Mage.Sets/src/mage/cards/m/MeletisCharlatan.java index d500fa27a5a..079bd0d6923 100644 --- a/Mage.Sets/src/mage/cards/m/MeletisCharlatan.java +++ b/Mage.Sets/src/mage/cards/m/MeletisCharlatan.java @@ -27,7 +27,6 @@ */ package mage.cards.m; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; @@ -39,9 +38,7 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Outcome; import mage.constants.Zone; -import mage.filter.FilterSpell; -import mage.filter.predicate.Predicates; -import mage.filter.predicate.mageobject.CardTypePredicate; +import mage.filter.StaticFilters; import mage.game.Game; import mage.game.stack.Spell; import mage.game.stack.StackObject; @@ -49,20 +46,14 @@ import mage.players.Player; import mage.target.Target; import mage.target.TargetSpell; +import java.util.UUID; + /** * * @author LevelX2 */ public class MeletisCharlatan extends CardImpl { - private static final FilterSpell filter = new FilterSpell("instant or sorcery spell"); - - static { - filter.add(Predicates.or( - new CardTypePredicate(CardType.INSTANT), - new CardTypePredicate(CardType.SORCERY))); - } - public MeletisCharlatan(UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{U}"); this.subtype.add("Human"); @@ -74,7 +65,7 @@ public class MeletisCharlatan extends CardImpl { // {2}{U}, {T}: The controller of target instant or sorcery spell copies it. That player may choose new targets for the copy. Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new MeletisCharlatanCopyTargetSpellEffect(), new ManaCostsImpl("{2}{U}")); ability.addCost(new TapSourceCost()); - Target target = new TargetSpell(filter); + Target target = new TargetSpell(StaticFilters.FILTER_INSTANT_OR_SORCERY_SPELL); ability.addTarget(target); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/m/MercurialGeists.java b/Mage.Sets/src/mage/cards/m/MercurialGeists.java index afff551fbbd..4c3c3410eea 100644 --- a/Mage.Sets/src/mage/cards/m/MercurialGeists.java +++ b/Mage.Sets/src/mage/cards/m/MercurialGeists.java @@ -27,7 +27,6 @@ */ package mage.cards.m; -import java.util.UUID; import mage.MageInt; import mage.abilities.common.SpellCastControllerTriggeredAbility; import mage.abilities.effects.common.continuous.BoostSourceEffect; @@ -36,9 +35,9 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Duration; -import mage.filter.FilterSpell; -import mage.filter.predicate.Predicates; -import mage.filter.predicate.mageobject.CardTypePredicate; +import mage.filter.StaticFilters; + +import java.util.UUID; /** * @@ -46,14 +45,6 @@ import mage.filter.predicate.mageobject.CardTypePredicate; */ public class MercurialGeists extends CardImpl { - private static final FilterSpell filter = new FilterSpell("instant or sorcery spell"); - - static { - filter.add(Predicates.or( - new CardTypePredicate(CardType.INSTANT), - new CardTypePredicate(CardType.SORCERY))); - } - public MercurialGeists(UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{U}{R}"); this.subtype.add("Spirit"); @@ -64,7 +55,7 @@ public class MercurialGeists extends CardImpl { this.addAbility(FlyingAbility.getInstance()); // Whenever you cast an instant or sorcery spell, Mercurial Geists gets +3/+0 until end of turn. - this.addAbility(new SpellCastControllerTriggeredAbility(new BoostSourceEffect(3, 0, Duration.EndOfTurn), filter, false)); + this.addAbility(new SpellCastControllerTriggeredAbility(new BoostSourceEffect(3, 0, Duration.EndOfTurn), StaticFilters.FILTER_INSTANT_OR_SORCERY_SPELL, false)); } public MercurialGeists(final MercurialGeists card) { diff --git a/Mage.Sets/src/mage/cards/m/MinamosMeddling.java b/Mage.Sets/src/mage/cards/m/MinamosMeddling.java index 5aed0d2d4b3..609b657ce45 100644 --- a/Mage.Sets/src/mage/cards/m/MinamosMeddling.java +++ b/Mage.Sets/src/mage/cards/m/MinamosMeddling.java @@ -31,15 +31,11 @@ import mage.MageObject; import mage.abilities.Ability; import mage.abilities.SpellAbility; import mage.abilities.effects.OneShotEffect; -import mage.cards.Card; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.cards.Cards; -import mage.cards.CardsImpl; +import mage.cards.*; import mage.constants.CardType; import mage.constants.Outcome; import mage.constants.SpellAbilityType; -import mage.filter.FilterSpell; +import mage.filter.StaticFilters; import mage.game.Game; import mage.game.stack.Spell; import mage.players.Player; @@ -59,7 +55,7 @@ public class MinamosMeddling extends CardImpl { // Counter target spell. That spell's controller reveals his or her hand, then discards each card with the same name as a card spliced onto that spell. - this.getSpellAbility().addTarget(new TargetSpell(new FilterSpell())); + this.getSpellAbility().addTarget(new TargetSpell(StaticFilters.FILTER_SPELL)); this.getSpellAbility().addEffect(new MinamosMeddlingCounterTargetEffect()); } diff --git a/Mage.Sets/src/mage/cards/m/MindsDilation.java b/Mage.Sets/src/mage/cards/m/MindsDilation.java index 3d5ad7e4b2e..aad9499b1d6 100644 --- a/Mage.Sets/src/mage/cards/m/MindsDilation.java +++ b/Mage.Sets/src/mage/cards/m/MindsDilation.java @@ -27,8 +27,6 @@ */ package mage.cards.m; -import java.util.List; -import java.util.UUID; import mage.MageObject; import mage.abilities.Ability; import mage.abilities.common.SpellCastOpponentTriggeredAbility; @@ -40,7 +38,7 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Outcome; import mage.constants.Zone; -import mage.filter.FilterSpell; +import mage.filter.StaticFilters; import mage.game.Game; import mage.game.events.GameEvent; import mage.game.stack.Spell; @@ -48,6 +46,9 @@ import mage.players.Player; import mage.target.targetpointer.FixedTarget; import mage.watchers.common.SpellsCastWatcher; +import java.util.List; +import java.util.UUID; + /** * * @author fireshoes @@ -75,7 +76,7 @@ public class MindsDilation extends CardImpl { class MindsDilationTriggeredAbility extends SpellCastOpponentTriggeredAbility { public MindsDilationTriggeredAbility(Effect effect, boolean optional) { - super(Zone.BATTLEFIELD, effect, new FilterSpell(), optional); + super(Zone.BATTLEFIELD, effect, StaticFilters.FILTER_SPELL, optional); } public MindsDilationTriggeredAbility(SpellCastOpponentTriggeredAbility ability) { diff --git a/Mage.Sets/src/mage/cards/m/MischievousQuanar.java b/Mage.Sets/src/mage/cards/m/MischievousQuanar.java index 3d20a6cc9cd..936d6f739c4 100644 --- a/Mage.Sets/src/mage/cards/m/MischievousQuanar.java +++ b/Mage.Sets/src/mage/cards/m/MischievousQuanar.java @@ -27,7 +27,6 @@ */ package mage.cards.m; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; @@ -42,24 +41,16 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Duration; import mage.constants.Zone; -import mage.filter.FilterSpell; -import mage.filter.predicate.Predicates; -import mage.filter.predicate.mageobject.CardTypePredicate; +import mage.filter.StaticFilters; import mage.target.TargetSpell; +import java.util.UUID; + /** * * @author fireshoes */ public class MischievousQuanar extends CardImpl { - - private static final FilterSpell filter = new FilterSpell("instant or sorcery spell"); - - static { - filter.add(Predicates.or( - new CardTypePredicate(CardType.INSTANT), - new CardTypePredicate(CardType.SORCERY))); - } public MischievousQuanar(UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{4}{U}"); @@ -79,7 +70,7 @@ public class MischievousQuanar extends CardImpl { Effect effect2 = new CopyTargetSpellEffect(); effect2.setText("copy target instant or sorcery spell. You may choose new targets for that copy"); Ability ability = new TurnedFaceUpSourceTriggeredAbility(effect2); - ability.addTarget(new TargetSpell(filter)); + ability.addTarget(new TargetSpell(StaticFilters.FILTER_INSTANT_OR_SORCERY_SPELL)); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/m/MoltenInfluence.java b/Mage.Sets/src/mage/cards/m/MoltenInfluence.java index f1e02c3fb74..ae998627326 100644 --- a/Mage.Sets/src/mage/cards/m/MoltenInfluence.java +++ b/Mage.Sets/src/mage/cards/m/MoltenInfluence.java @@ -27,40 +27,31 @@ */ package mage.cards.m; -import java.util.UUID; import mage.abilities.Ability; import mage.abilities.effects.OneShotEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Outcome; -import mage.filter.FilterSpell; -import mage.filter.predicate.Predicates; -import mage.filter.predicate.mageobject.CardTypePredicate; +import mage.filter.StaticFilters; import mage.game.Game; import mage.game.stack.Spell; import mage.players.Player; import mage.target.TargetSpell; +import java.util.UUID; + /** * * @author cbt33, LevelX2 (Quash) */ public class MoltenInfluence extends CardImpl { - private static final FilterSpell filter = new FilterSpell("instant or sorcery spell"); - - static { - Predicates.or( - new CardTypePredicate(CardType.INSTANT), - new CardTypePredicate(CardType.SORCERY)); - } - public MoltenInfluence(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{1}{R}"); // Counter target instant or sorcery spell unless its controller has Molten Influence deal 4 damage to him or her. - this.getSpellAbility().addTarget(new TargetSpell(filter)); + this.getSpellAbility().addTarget(new TargetSpell(StaticFilters.FILTER_INSTANT_OR_SORCERY_SPELL)); this.getSpellAbility().addEffect(new MoltenInfluenceEffect()); } diff --git a/Mage.Sets/src/mage/cards/n/NiblisOfFrost.java b/Mage.Sets/src/mage/cards/n/NiblisOfFrost.java index 120870dedd1..3e22f958494 100644 --- a/Mage.Sets/src/mage/cards/n/NiblisOfFrost.java +++ b/Mage.Sets/src/mage/cards/n/NiblisOfFrost.java @@ -27,7 +27,6 @@ */ package mage.cards.n; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.SpellCastControllerTriggeredAbility; @@ -39,27 +38,22 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.TargetController; -import mage.filter.FilterSpell; +import mage.filter.StaticFilters; import mage.filter.common.FilterCreaturePermanent; -import mage.filter.predicate.Predicates; -import mage.filter.predicate.mageobject.CardTypePredicate; import mage.filter.predicate.permanent.ControllerPredicate; import mage.target.common.TargetCreaturePermanent; +import java.util.UUID; + /** * * @author fireshoes */ public class NiblisOfFrost extends CardImpl { - - private static final FilterSpell filterSpell = new FilterSpell("instant or sorcery spell"); private static final FilterCreaturePermanent filterCreature = new FilterCreaturePermanent("creature an opponent controls"); static { filterCreature.add(new ControllerPredicate(TargetController.OPPONENT)); - filterSpell.add(Predicates.or( - new CardTypePredicate(CardType.INSTANT), - new CardTypePredicate(CardType.SORCERY))); } public NiblisOfFrost(UUID ownerId, CardSetInfo setInfo) { @@ -75,7 +69,7 @@ public class NiblisOfFrost extends CardImpl { this.addAbility(new ProwessAbility()); // Whenever you cast an instant or sorcery spell, tap target creature an opponent controls. That creature doesn't untap during its controller's next untap step. - Ability ability = new SpellCastControllerTriggeredAbility(new TapTargetEffect(), filterSpell, false); + Ability ability = new SpellCastControllerTriggeredAbility(new TapTargetEffect(), StaticFilters.FILTER_INSTANT_OR_SORCERY_SPELL, false); ability.addTarget(new TargetCreaturePermanent(filterCreature)); ability.addEffect(new DontUntapInControllersNextUntapStepTargetEffect("That creature")); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/cards/o/OddsEnds.java b/Mage.Sets/src/mage/cards/o/OddsEnds.java index e7e0fd23916..3445100988d 100644 --- a/Mage.Sets/src/mage/cards/o/OddsEnds.java +++ b/Mage.Sets/src/mage/cards/o/OddsEnds.java @@ -27,7 +27,6 @@ */ package mage.cards.o; -import java.util.UUID; import mage.abilities.Ability; import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.common.CopyTargetSpellEffect; @@ -37,32 +36,24 @@ import mage.cards.SplitCard; import mage.constants.CardType; import mage.constants.Outcome; import mage.constants.SpellAbilityType; -import mage.filter.FilterSpell; +import mage.filter.StaticFilters; import mage.filter.common.FilterAttackingCreature; -import mage.filter.predicate.Predicates; -import mage.filter.predicate.mageobject.CardTypePredicate; import mage.game.Game; import mage.players.Player; import mage.target.TargetPlayer; import mage.target.TargetSpell; +import java.util.UUID; + public class OddsEnds extends SplitCard { - private static final FilterSpell filter = new FilterSpell("instant or sorcery spell"); - - static { - filter.add(Predicates.or( - new CardTypePredicate(CardType.INSTANT), - new CardTypePredicate(CardType.SORCERY))); - } - public OddsEnds(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{U}{R}", "{3}{R}{W}", SpellAbilityType.SPLIT); // Odds // Flip a coin. If it comes up heads, counter target instant or sorcery spell. If it comes up tails, copy that spell and you may choose new targets for the copy. getLeftHalfCard().getSpellAbility().addEffect(new OddsEffect()); - getLeftHalfCard().getSpellAbility().addTarget(new TargetSpell(filter)); + getLeftHalfCard().getSpellAbility().addTarget(new TargetSpell(StaticFilters.FILTER_INSTANT_OR_SORCERY_SPELL)); // Ends // Target player sacrifices two attacking creatures. diff --git a/Mage.Sets/src/mage/cards/o/Outwit.java b/Mage.Sets/src/mage/cards/o/Outwit.java index 0d0d0156dbd..5722bfad1ed 100644 --- a/Mage.Sets/src/mage/cards/o/Outwit.java +++ b/Mage.Sets/src/mage/cards/o/Outwit.java @@ -35,6 +35,7 @@ import mage.constants.CardType; import mage.constants.Zone; import mage.filter.Filter; import mage.filter.FilterSpell; +import mage.filter.StaticFilters; import mage.game.Game; import mage.game.stack.Spell; import mage.game.stack.StackObject; @@ -79,7 +80,7 @@ public class Outwit extends CardImpl { protected FilterSpell filter; public CustomTargetSpell() { - this(1, 1, new FilterSpell()); + this(1, 1, StaticFilters.FILTER_SPELL); } public CustomTargetSpell(FilterSpell filter) { diff --git a/Mage.Sets/src/mage/cards/p/PainfulQuandary.java b/Mage.Sets/src/mage/cards/p/PainfulQuandary.java index 2dfae425b46..b48b1210e36 100644 --- a/Mage.Sets/src/mage/cards/p/PainfulQuandary.java +++ b/Mage.Sets/src/mage/cards/p/PainfulQuandary.java @@ -27,7 +27,6 @@ */ package mage.cards.p; -import java.util.UUID; import mage.abilities.Ability; import mage.abilities.common.SpellCastOpponentTriggeredAbility; import mage.abilities.costs.Cost; @@ -39,11 +38,13 @@ import mage.constants.CardType; import mage.constants.Outcome; import mage.constants.SetTargetPointer; import mage.constants.Zone; -import mage.filter.FilterSpell; +import mage.filter.StaticFilters; import mage.game.Game; import mage.players.Player; import mage.target.common.TargetCardInHand; +import java.util.UUID; + /** * * @author BetaSteward_at_googlemail.com @@ -54,7 +55,7 @@ public class PainfulQuandary extends CardImpl { super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{3}{B}{B}"); // Whenever an opponent casts a spell, that player loses 5 life unless he or she discards a card. - this.addAbility(new SpellCastOpponentTriggeredAbility(Zone.BATTLEFIELD, new PainfulQuandryEffect(), new FilterSpell(), false, SetTargetPointer.PLAYER)); + this.addAbility(new SpellCastOpponentTriggeredAbility(Zone.BATTLEFIELD, new PainfulQuandryEffect(), StaticFilters.FILTER_SPELL, false, SetTargetPointer.PLAYER)); } public PainfulQuandary(final PainfulQuandary card) { diff --git a/Mage.Sets/src/mage/cards/p/PardicDragon.java b/Mage.Sets/src/mage/cards/p/PardicDragon.java index 159adf9793d..74f85021159 100644 --- a/Mage.Sets/src/mage/cards/p/PardicDragon.java +++ b/Mage.Sets/src/mage/cards/p/PardicDragon.java @@ -44,7 +44,7 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.*; import mage.counters.CounterType; -import mage.filter.FilterSpell; +import mage.filter.StaticFilters; import mage.game.Game; import mage.players.Player; @@ -71,7 +71,7 @@ public class PardicDragon extends CardImpl { this.addAbility(new SuspendAbility(2, new ManaCostsImpl("{R}{R}"), this, true)); // Whenever an opponent casts a spell, if Pardic Dragon is suspended, that player may put a time counter on Pardic Dragon. this.addAbility(new ConditionalTriggeredAbility( - new SpellCastOpponentTriggeredAbility(Zone.EXILED, new PardicDragonEffect(), new FilterSpell(), false, SetTargetPointer.PLAYER), + new SpellCastOpponentTriggeredAbility(Zone.EXILED, new PardicDragonEffect(), StaticFilters.FILTER_SPELL, false, SetTargetPointer.PLAYER), SuspendedCondition.instance, "Whenever an opponent casts a spell, if {this} is suspended, that player may put a time counter on {this}." )); diff --git a/Mage.Sets/src/mage/cards/p/PrescientChimera.java b/Mage.Sets/src/mage/cards/p/PrescientChimera.java index 926310998b2..ed7939845e0 100644 --- a/Mage.Sets/src/mage/cards/p/PrescientChimera.java +++ b/Mage.Sets/src/mage/cards/p/PrescientChimera.java @@ -27,7 +27,6 @@ */ package mage.cards.p; -import java.util.UUID; import mage.MageInt; import mage.abilities.common.SpellCastControllerTriggeredAbility; import mage.abilities.effects.keyword.ScryEffect; @@ -35,9 +34,9 @@ import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.filter.FilterSpell; -import mage.filter.predicate.Predicates; -import mage.filter.predicate.mageobject.CardTypePredicate; +import mage.filter.StaticFilters; + +import java.util.UUID; /** * @@ -45,13 +44,6 @@ import mage.filter.predicate.mageobject.CardTypePredicate; */ public class PrescientChimera extends CardImpl { - private static final FilterSpell filter = new FilterSpell("instant or sorcery spell"); - static { - filter.add(Predicates.or( - new CardTypePredicate(CardType.INSTANT), - new CardTypePredicate(CardType.SORCERY))); - } - public PrescientChimera(UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{U}{U}"); this.subtype.add("Chimera"); @@ -62,7 +54,7 @@ public class PrescientChimera extends CardImpl { // Flying this.addAbility(FlyingAbility.getInstance()); // Whenever you cast an instant or sorcery spell, scry 1. - this.addAbility(new SpellCastControllerTriggeredAbility(new ScryEffect(1), filter, false)); + this.addAbility(new SpellCastControllerTriggeredAbility(new ScryEffect(1), StaticFilters.FILTER_INSTANT_OR_SORCERY_SPELL, false)); } public PrescientChimera(final PrescientChimera card) { diff --git a/Mage.Sets/src/mage/cards/p/PsychicStrike.java b/Mage.Sets/src/mage/cards/p/PsychicStrike.java index d4df7478e78..694897aee70 100644 --- a/Mage.Sets/src/mage/cards/p/PsychicStrike.java +++ b/Mage.Sets/src/mage/cards/p/PsychicStrike.java @@ -27,20 +27,21 @@ */ package mage.cards.p; -import java.util.UUID; -import mage.constants.CardType; -import mage.constants.Outcome; -import mage.constants.Zone; import mage.abilities.Ability; import mage.abilities.effects.OneShotEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; -import mage.filter.FilterSpell; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.Zone; +import mage.filter.StaticFilters; import mage.game.Game; import mage.game.stack.StackObject; import mage.players.Player; import mage.target.TargetSpell; +import java.util.UUID; + /** * * @author LevelX2 @@ -52,7 +53,7 @@ public class PsychicStrike extends CardImpl { // Counter target spell. Its controller puts the top two cards of his or her library into his or her graveyard. - this.getSpellAbility().addTarget(new TargetSpell(new FilterSpell())); + this.getSpellAbility().addTarget(new TargetSpell(StaticFilters.FILTER_SPELL)); this.getSpellAbility().addEffect(new PsychicStrikeEffect()); } diff --git a/Mage.Sets/src/mage/cards/p/PunishIgnorance.java b/Mage.Sets/src/mage/cards/p/PunishIgnorance.java index 6cecac6dfd3..b740fa6d505 100644 --- a/Mage.Sets/src/mage/cards/p/PunishIgnorance.java +++ b/Mage.Sets/src/mage/cards/p/PunishIgnorance.java @@ -27,17 +27,18 @@ */ package mage.cards.p; -import java.util.UUID; import mage.abilities.effects.Effect; -import mage.constants.CardType; import mage.abilities.effects.common.CounterTargetEffect; import mage.abilities.effects.common.GainLifeEffect; import mage.abilities.effects.common.LoseLifeTargetControllerEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; -import mage.filter.FilterSpell; +import mage.constants.CardType; +import mage.filter.StaticFilters; import mage.target.TargetSpell; +import java.util.UUID; + /** * * @author North @@ -49,7 +50,7 @@ public class PunishIgnorance extends CardImpl { // Counter target spell. Its controller loses 3 life and you gain 3 life. - this.getSpellAbility().addTarget(new TargetSpell(new FilterSpell())); + this.getSpellAbility().addTarget(new TargetSpell(StaticFilters.FILTER_SPELL)); this.getSpellAbility().addEffect(new CounterTargetEffect()); this.getSpellAbility().addEffect(new LoseLifeTargetControllerEffect(3)); Effect effect = new GainLifeEffect(3); diff --git a/Mage.Sets/src/mage/cards/q/Quash.java b/Mage.Sets/src/mage/cards/q/Quash.java index 4d1340e534f..f377c144e62 100644 --- a/Mage.Sets/src/mage/cards/q/Quash.java +++ b/Mage.Sets/src/mage/cards/q/Quash.java @@ -27,37 +27,28 @@ */ package mage.cards.q; -import java.util.UUID; -import mage.constants.CardType; import mage.abilities.effects.common.CounterTargetAndSearchGraveyardHandLibraryEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; -import mage.filter.FilterSpell; -import mage.filter.predicate.Predicates; -import mage.filter.predicate.mageobject.CardTypePredicate; +import mage.constants.CardType; +import mage.filter.StaticFilters; import mage.target.TargetSpell; +import java.util.UUID; + /** * * @author LevelX2 */ public class Quash extends CardImpl { - private static final FilterSpell filter = new FilterSpell("instant or sorcery spell"); - - static { - Predicates.or( - new CardTypePredicate(CardType.INSTANT), - new CardTypePredicate(CardType.SORCERY)); - } - public Quash(UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{2}{U}{U}"); // Counter target instant or sorcery spell. // Search its controller's graveyard, hand, and library for all cards with the same name as that spell and exile them. Then that player shuffles his or her library. - this.getSpellAbility().addTarget(new TargetSpell(filter)); + this.getSpellAbility().addTarget(new TargetSpell(StaticFilters.FILTER_INSTANT_OR_SORCERY_SPELL)); this.getSpellAbility().addEffect(new CounterTargetAndSearchGraveyardHandLibraryEffect()); } diff --git a/Mage.Sets/src/mage/cards/r/RhysticStudy.java b/Mage.Sets/src/mage/cards/r/RhysticStudy.java index 41e2e18fda5..c1a45897116 100644 --- a/Mage.Sets/src/mage/cards/r/RhysticStudy.java +++ b/Mage.Sets/src/mage/cards/r/RhysticStudy.java @@ -27,7 +27,6 @@ */ package mage.cards.r; -import java.util.UUID; import mage.MageObject; import mage.abilities.Ability; import mage.abilities.common.SpellCastOpponentTriggeredAbility; @@ -40,10 +39,12 @@ import mage.constants.CardType; import mage.constants.Outcome; import mage.constants.SetTargetPointer; import mage.constants.Zone; -import mage.filter.FilterSpell; +import mage.filter.StaticFilters; import mage.game.Game; import mage.players.Player; +import java.util.UUID; + /** * * @author Quercitron @@ -54,7 +55,7 @@ public class RhysticStudy extends CardImpl { super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{2}{U}"); // Whenever an opponent casts a spell, you may draw a card unless that player pays {1}. - this.addAbility(new SpellCastOpponentTriggeredAbility(Zone.BATTLEFIELD, new RhysticStudyDrawEffect(), new FilterSpell(), false, SetTargetPointer.PLAYER)); + this.addAbility(new SpellCastOpponentTriggeredAbility(Zone.BATTLEFIELD, new RhysticStudyDrawEffect(), StaticFilters.FILTER_SPELL, false, SetTargetPointer.PLAYER)); } public RhysticStudy(final RhysticStudy card) { diff --git a/Mage.Sets/src/mage/cards/s/SigilTracer.java b/Mage.Sets/src/mage/cards/s/SigilTracer.java index 4db7443ecef..694f562c3fe 100644 --- a/Mage.Sets/src/mage/cards/s/SigilTracer.java +++ b/Mage.Sets/src/mage/cards/s/SigilTracer.java @@ -27,7 +27,6 @@ */ package mage.cards.s; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; @@ -39,29 +38,26 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; import mage.constants.Zone; -import mage.filter.FilterSpell; +import mage.filter.StaticFilters; import mage.filter.common.FilterControlledCreaturePermanent; import mage.filter.predicate.Predicates; -import mage.filter.predicate.mageobject.CardTypePredicate; import mage.filter.predicate.mageobject.SubtypePredicate; import mage.filter.predicate.permanent.TappedPredicate; import mage.target.TargetSpell; import mage.target.common.TargetControlledCreaturePermanent; +import java.util.UUID; + /** * @author Loki */ public class SigilTracer extends CardImpl { private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("untapped Wizards you control"); - private static final FilterSpell filterInstorSorc = new FilterSpell("instant or sorcery spell"); static { filter.add(Predicates.not(new TappedPredicate())); filter.add(new SubtypePredicate(SubType.WIZARD)); - filterInstorSorc.add(Predicates.or( - new CardTypePredicate(CardType.INSTANT), - new CardTypePredicate(CardType.SORCERY))); } public SigilTracer(UUID ownerId, CardSetInfo setInfo) { @@ -74,7 +70,7 @@ public class SigilTracer extends CardImpl { // {1}{U}, Tap two untapped Wizards you control: Copy target instant or sorcery spell. You may choose new targets for the copy. Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new CopyTargetSpellEffect(), new ManaCostsImpl("{1}{U}")); - ability.addTarget(new TargetSpell(filterInstorSorc)); + ability.addTarget(new TargetSpell(StaticFilters.FILTER_INSTANT_OR_SORCERY_SPELL)); ability.addCost(new TapTargetCost(new TargetControlledCreaturePermanent(2, 2, filter, false))); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/s/SoulBarrier.java b/Mage.Sets/src/mage/cards/s/SoulBarrier.java index 050153f01ab..b93b14dafe9 100644 --- a/Mage.Sets/src/mage/cards/s/SoulBarrier.java +++ b/Mage.Sets/src/mage/cards/s/SoulBarrier.java @@ -27,8 +27,6 @@ */ package mage.cards.s; -import java.util.UUID; - import mage.abilities.Ability; import mage.abilities.common.SpellCastOpponentTriggeredAbility; import mage.abilities.costs.mana.GenericManaCost; @@ -39,10 +37,12 @@ import mage.constants.CardType; import mage.constants.Outcome; import mage.constants.SetTargetPointer; import mage.constants.Zone; -import mage.filter.FilterSpell; +import mage.filter.StaticFilters; import mage.game.Game; import mage.players.Player; +import java.util.UUID; + /** * * @author Galatolol @@ -53,8 +53,8 @@ public class SoulBarrier extends CardImpl { super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{2}{U}"); // Whenever an opponent casts a creature spell, Soul Barrier deals 2 damage to that player unless he or she pays {2}. - this.addAbility(new SpellCastOpponentTriggeredAbility(Zone.BATTLEFIELD, new SoulBarrierEffect(), - new FilterSpell(),false, SetTargetPointer.PLAYER)); + this.addAbility(new SpellCastOpponentTriggeredAbility(Zone.BATTLEFIELD, new SoulBarrierEffect(), + StaticFilters.FILTER_SPELL,false, SetTargetPointer.PLAYER)); } public SoulBarrier(final SoulBarrier card) { diff --git a/Mage.Sets/src/mage/cards/s/SpelltitheEnforcer.java b/Mage.Sets/src/mage/cards/s/SpelltitheEnforcer.java index d2c05e3b0f2..f8ffdb87296 100644 --- a/Mage.Sets/src/mage/cards/s/SpelltitheEnforcer.java +++ b/Mage.Sets/src/mage/cards/s/SpelltitheEnforcer.java @@ -27,7 +27,6 @@ */ package mage.cards.s; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.SpellCastOpponentTriggeredAbility; @@ -39,10 +38,12 @@ import mage.constants.CardType; import mage.constants.SetTargetPointer; import mage.constants.Zone; import mage.filter.FilterPermanent; -import mage.filter.FilterSpell; +import mage.filter.StaticFilters; import mage.game.Game; import mage.players.Player; +import java.util.UUID; + /** * * @author LevelX2 @@ -60,7 +61,7 @@ public class SpelltitheEnforcer extends CardImpl { this.addAbility(new SpellCastOpponentTriggeredAbility( Zone.BATTLEFIELD, new SpelltitheEnforcerEffect(), - new FilterSpell(), + StaticFilters.FILTER_SPELL, false, SetTargetPointer.PLAYER )); diff --git a/Mage.Sets/src/mage/cards/s/SplitDecision.java b/Mage.Sets/src/mage/cards/s/SplitDecision.java index cb123a7ef93..1fa440fc0c8 100644 --- a/Mage.Sets/src/mage/cards/s/SplitDecision.java +++ b/Mage.Sets/src/mage/cards/s/SplitDecision.java @@ -27,7 +27,6 @@ */ package mage.cards.s; -import java.util.UUID; import mage.abilities.Ability; import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.common.CopyTargetSpellEffect; @@ -35,33 +34,25 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Outcome; -import mage.filter.FilterSpell; -import mage.filter.predicate.Predicates; -import mage.filter.predicate.mageobject.CardTypePredicate; +import mage.filter.StaticFilters; import mage.game.Game; import mage.players.Player; import mage.target.TargetSpell; +import java.util.UUID; + /** * * @author fireshoes */ public class SplitDecision extends CardImpl { - private static final FilterSpell filter = new FilterSpell("instant or sorcery spell"); - - static { - filter.add(Predicates.or( - new CardTypePredicate(CardType.INSTANT), - new CardTypePredicate(CardType.SORCERY))); - } - public SplitDecision(UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{1}{U}"); // Will of the council - Choose target instant or sorcery spell. Starting with you, each player votes for denial or duplication. If denial gets more votes, counter the spell. If duplication gets more votes or the vote is tied, copy the spell. You may choose new targets for the copy. this.getSpellAbility().addEffect(new SplitDecisionEffect()); - this.getSpellAbility().addTarget(new TargetSpell(filter)); + this.getSpellAbility().addTarget(new TargetSpell(StaticFilters.FILTER_INSTANT_OR_SORCERY_SPELL)); } public SplitDecision(final SplitDecision card) { diff --git a/Mage.Sets/src/mage/cards/s/StratusDancer.java b/Mage.Sets/src/mage/cards/s/StratusDancer.java index dd3b1c2df50..0018b7cf585 100644 --- a/Mage.Sets/src/mage/cards/s/StratusDancer.java +++ b/Mage.Sets/src/mage/cards/s/StratusDancer.java @@ -27,7 +27,6 @@ */ package mage.cards.s; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.TurnedFaceUpSourceTriggeredAbility; @@ -39,23 +38,16 @@ import mage.abilities.keyword.MorphAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.filter.FilterSpell; -import mage.filter.predicate.Predicates; -import mage.filter.predicate.mageobject.CardTypePredicate; +import mage.filter.StaticFilters; import mage.target.TargetSpell; +import java.util.UUID; + /** * * @author jeffwadsworth */ public class StratusDancer extends CardImpl { - - private final static FilterSpell filter = new FilterSpell("instant or sorcery spell"); - - static { - filter.add(Predicates.or(new CardTypePredicate(CardType.INSTANT), - new CardTypePredicate(CardType.SORCERY))); - } public StratusDancer(UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{U}"); @@ -74,7 +66,7 @@ public class StratusDancer extends CardImpl { Effect effect = new CounterTargetEffect(); effect.setText("counter target instant or sorcery spell"); Ability ability = new TurnedFaceUpSourceTriggeredAbility(effect, false); - ability.addTarget(new TargetSpell(filter)); + ability.addTarget(new TargetSpell(StaticFilters.FILTER_INSTANT_OR_SORCERY_SPELL)); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/t/Tephraderm.java b/Mage.Sets/src/mage/cards/t/Tephraderm.java index 8b08f37e3c7..3191fc5d81d 100644 --- a/Mage.Sets/src/mage/cards/t/Tephraderm.java +++ b/Mage.Sets/src/mage/cards/t/Tephraderm.java @@ -27,7 +27,6 @@ */ package mage.cards.t; -import java.util.UUID; import mage.MageInt; import mage.abilities.TriggeredAbility; import mage.abilities.TriggeredAbilityImpl; @@ -38,7 +37,7 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Zone; -import mage.filter.FilterSpell; +import mage.filter.StaticFilters; import mage.filter.common.FilterCreaturePermanent; import mage.game.Game; import mage.game.events.GameEvent; @@ -46,6 +45,8 @@ import mage.game.permanent.Permanent; import mage.game.stack.StackObject; import mage.target.targetpointer.FixedTarget; +import java.util.UUID; + /** * * @author Quercitron @@ -125,8 +126,6 @@ class TephradermCreatureDamageTriggeredAbility extends TriggeredAbilityImpl { class TephradermSpellDamageTriggeredAbility extends TriggeredAbilityImpl { - private static final FilterSpell FILTER_SPELL = new FilterSpell(); - public TephradermSpellDamageTriggeredAbility() { super(Zone.BATTLEFIELD, new DamageTargetEffect(0)); } @@ -147,7 +146,7 @@ class TephradermSpellDamageTriggeredAbility extends TriggeredAbilityImpl { } StackObject sourceSpell = game.getStack().getStackObject(event.getSourceId()); - if (sourceSpell != null && FILTER_SPELL.match(sourceSpell, getSourceId(), getControllerId(), game)) { + if (sourceSpell != null && StaticFilters.FILTER_SPELL.match(sourceSpell, getSourceId(), getControllerId(), game)) { for (Effect effect : getEffects()) { if (effect instanceof DamageTargetEffect) { effect.setTargetPointer(new FixedTarget(sourceSpell.getControllerId())); diff --git a/Mage.Sets/src/mage/cards/t/Twincast.java b/Mage.Sets/src/mage/cards/t/Twincast.java index f7748ec571d..3af0001537a 100644 --- a/Mage.Sets/src/mage/cards/t/Twincast.java +++ b/Mage.Sets/src/mage/cards/t/Twincast.java @@ -27,36 +27,27 @@ */ package mage.cards.t; -import java.util.UUID; -import mage.constants.CardType; import mage.abilities.effects.common.CopyTargetSpellEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; -import mage.filter.FilterSpell; -import mage.filter.predicate.Predicates; -import mage.filter.predicate.mageobject.CardTypePredicate; +import mage.constants.CardType; +import mage.filter.StaticFilters; import mage.target.TargetSpell; +import java.util.UUID; + /** * * @author Loki */ public class Twincast extends CardImpl { - private static final FilterSpell filter = new FilterSpell("instant or sorcery spell"); - - static { - filter.add(Predicates.or( - new CardTypePredicate(CardType.INSTANT), - new CardTypePredicate(CardType.SORCERY))); - } - public Twincast(UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{U}{U}"); // Copy target instant or sorcery spell. You may choose new targets for the copy. this.getSpellAbility().addEffect(new CopyTargetSpellEffect()); - this.getSpellAbility().addTarget(new TargetSpell(filter)); + this.getSpellAbility().addTarget(new TargetSpell(StaticFilters.FILTER_INSTANT_OR_SORCERY_SPELL)); } public Twincast(final Twincast card) { diff --git a/Mage.Sets/src/mage/cards/u/Undermine.java b/Mage.Sets/src/mage/cards/u/Undermine.java index 13965dc7135..9f6910dc9e7 100644 --- a/Mage.Sets/src/mage/cards/u/Undermine.java +++ b/Mage.Sets/src/mage/cards/u/Undermine.java @@ -27,15 +27,16 @@ */ package mage.cards.u; -import java.util.UUID; import mage.abilities.effects.common.CounterTargetEffect; import mage.abilities.effects.common.LoseLifeTargetControllerEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.filter.FilterSpell; +import mage.filter.StaticFilters; import mage.target.TargetSpell; +import java.util.UUID; + /** * * @author LevelX2 @@ -47,7 +48,7 @@ public class Undermine extends CardImpl { // Counter target spell. Its controller loses 3 life. - this.getSpellAbility().addTarget(new TargetSpell(new FilterSpell())); + this.getSpellAbility().addTarget(new TargetSpell(StaticFilters.FILTER_SPELL)); this.getSpellAbility().addEffect(new CounterTargetEffect()); this.getSpellAbility().addEffect(new LoseLifeTargetControllerEffect(3)); diff --git a/Mage.Sets/src/mage/cards/u/UyoSilentProphet.java b/Mage.Sets/src/mage/cards/u/UyoSilentProphet.java index 62b3693d690..ecb14a3d781 100644 --- a/Mage.Sets/src/mage/cards/u/UyoSilentProphet.java +++ b/Mage.Sets/src/mage/cards/u/UyoSilentProphet.java @@ -39,10 +39,8 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SuperType; import mage.constants.Zone; -import mage.filter.FilterSpell; +import mage.filter.StaticFilters; import mage.filter.common.FilterControlledLandPermanent; -import mage.filter.predicate.Predicates; -import mage.filter.predicate.mageobject.CardTypePredicate; import mage.target.TargetSpell; import mage.target.common.TargetControlledPermanent; @@ -54,14 +52,6 @@ import java.util.UUID; */ public class UyoSilentProphet extends CardImpl { - private static final FilterSpell filter = new FilterSpell("instant or sorcery spell"); - - static { - filter.add(Predicates.or( - new CardTypePredicate(CardType.INSTANT), - new CardTypePredicate(CardType.SORCERY))); - } - public UyoSilentProphet(UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{4}{U}{U}"); addSuperType(SuperType.LEGENDARY); @@ -76,7 +66,7 @@ public class UyoSilentProphet extends CardImpl { // {2}, Return two lands you control to their owner's hand: Copy target instant or sorcery spell. You may choose new targets for the copy. Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new CopyTargetSpellEffect(), new GenericManaCost(2)); ability.addCost(new ReturnToHandChosenControlledPermanentCost(new TargetControlledPermanent(2, 2, new FilterControlledLandPermanent("lands"), false))); - ability.addTarget(new TargetSpell(filter)); + ability.addTarget(new TargetSpell(StaticFilters.FILTER_INSTANT_OR_SORCERY_SPELL)); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/v/VodalianMystic.java b/Mage.Sets/src/mage/cards/v/VodalianMystic.java index f9418d1ebe1..937160a3d35 100644 --- a/Mage.Sets/src/mage/cards/v/VodalianMystic.java +++ b/Mage.Sets/src/mage/cards/v/VodalianMystic.java @@ -27,7 +27,6 @@ */ package mage.cards.v; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; @@ -38,25 +37,17 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Duration; import mage.constants.Zone; -import mage.filter.FilterSpell; -import mage.filter.predicate.Predicates; -import mage.filter.predicate.mageobject.CardTypePredicate; +import mage.filter.StaticFilters; import mage.target.TargetSpell; +import java.util.UUID; + /** * * @author LoneFox */ public class VodalianMystic extends CardImpl { - private static final FilterSpell filter = new FilterSpell("instant or sorcery spell"); - - static { - filter.add(Predicates.or( - new CardTypePredicate(CardType.INSTANT), - new CardTypePredicate(CardType.SORCERY))); - } - public VodalianMystic(UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{U}"); this.subtype.add("Merfolk"); @@ -66,7 +57,7 @@ public class VodalianMystic extends CardImpl { // {T}: Target instant or sorcery spell becomes the color of your choice. Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new BecomesColorTargetEffect(Duration.WhileOnStack), new TapSourceCost()); - ability.addTarget(new TargetSpell(filter)); + ability.addTarget(new TargetSpell(StaticFilters.FILTER_INSTANT_OR_SORCERY_SPELL)); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/y/YoungPyromancer.java b/Mage.Sets/src/mage/cards/y/YoungPyromancer.java index 84f2f5867f2..5e14f37823f 100644 --- a/Mage.Sets/src/mage/cards/y/YoungPyromancer.java +++ b/Mage.Sets/src/mage/cards/y/YoungPyromancer.java @@ -27,32 +27,23 @@ */ package mage.cards.y; -import java.util.UUID; import mage.MageInt; import mage.abilities.common.SpellCastControllerTriggeredAbility; import mage.abilities.effects.common.CreateTokenEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.filter.FilterSpell; -import mage.filter.predicate.Predicates; -import mage.filter.predicate.mageobject.CardTypePredicate; +import mage.filter.StaticFilters; import mage.game.permanent.token.YoungPyromancerElementalToken; +import java.util.UUID; + /** * * @author jeffwadsworth */ public class YoungPyromancer extends CardImpl { - private static final FilterSpell filter = new FilterSpell("instant or sorcery spell"); - - static { - filter.add(Predicates.or( - new CardTypePredicate(CardType.INSTANT), - new CardTypePredicate(CardType.SORCERY))); - } - public YoungPyromancer(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{R}"); this.subtype.add("Human"); @@ -62,7 +53,7 @@ public class YoungPyromancer extends CardImpl { this.toughness = new MageInt(1); // Whenever you cast an instant or sorcery spell, create a 1/1 red Elemental creature token. - this.addAbility(new SpellCastControllerTriggeredAbility(new CreateTokenEffect(new YoungPyromancerElementalToken()), filter, false)); + this.addAbility(new SpellCastControllerTriggeredAbility(new CreateTokenEffect(new YoungPyromancerElementalToken()), StaticFilters.FILTER_INSTANT_OR_SORCERY_SPELL, false)); } diff --git a/Mage/src/main/java/mage/filter/StaticFilters.java b/Mage/src/main/java/mage/filter/StaticFilters.java index 29845d96e5b..c1e483585b9 100644 --- a/Mage/src/main/java/mage/filter/StaticFilters.java +++ b/Mage/src/main/java/mage/filter/StaticFilters.java @@ -51,6 +51,10 @@ public final class StaticFilters { public static final FilterSpell FILTER_SPELL_NON_CREATURE = (FilterSpell) new FilterSpell("noncreature spell").add(Predicates.not(new CardTypePredicate(CardType.CREATURE))); + public static final FilterSpell FILTER_SPELL = new FilterSpell(); + + public static final FilterSpell FILTER_INSTANT_OR_SORCERY_SPELL = new FilterSpell("instant or sorcery spell"); + public static final FilterPermanent FILTER_CREATURE_TOKENS = new FilterCreaturePermanent("creature tokens"); public static final FilterPermanent FILTER_ATTACKING_CREATURES = new FilterCreaturePermanent("attacking creatures"); @@ -87,6 +91,11 @@ public final class StaticFilters { new CardTypePredicate(CardType.ARTIFACT), new CardTypePredicate(CardType.CREATURE) )); + + FILTER_INSTANT_OR_SORCERY_SPELL.add(Predicates.or( + new CardTypePredicate(CardType.INSTANT), + new CardTypePredicate(CardType.SORCERY) + )); } } diff --git a/Mage/src/main/java/mage/target/TargetSpell.java b/Mage/src/main/java/mage/target/TargetSpell.java index 9495b4dbec4..bc11f5e28c4 100644 --- a/Mage/src/main/java/mage/target/TargetSpell.java +++ b/Mage/src/main/java/mage/target/TargetSpell.java @@ -30,6 +30,7 @@ package mage.target; import mage.abilities.Ability; import mage.constants.Zone; import mage.filter.FilterSpell; +import mage.filter.StaticFilters; import mage.game.Game; import mage.game.stack.Spell; import mage.game.stack.StackObject; @@ -49,7 +50,7 @@ public class TargetSpell extends TargetObject { private final Set sourceIds = new HashSet<>(); public TargetSpell() { - this(1, 1, new FilterSpell()); + this(1, 1, StaticFilters.FILTER_SPELL); } public TargetSpell(FilterSpell filter) {