diff --git a/Mage.Sets/src/mage/cards/a/AbstergoEntertainment.java b/Mage.Sets/src/mage/cards/a/AbstergoEntertainment.java
index 6027d609d90..f405a13545b 100644
--- a/Mage.Sets/src/mage/cards/a/AbstergoEntertainment.java
+++ b/Mage.Sets/src/mage/cards/a/AbstergoEntertainment.java
@@ -14,7 +14,7 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SuperType;
import mage.filter.FilterCard;
-import mage.filter.common.FilterHistoricCard;
+import mage.filter.predicate.mageobject.HistoricPredicate;
import mage.target.common.TargetCardInYourGraveyard;
import java.util.UUID;
@@ -24,7 +24,10 @@ import java.util.UUID;
*/
public final class AbstergoEntertainment extends CardImpl {
- private static final FilterCard filter = new FilterHistoricCard("historic card from your graveyard");
+ private static final FilterCard filter = new FilterCard("historic card from your graveyard");
+ static {
+ filter.add(HistoricPredicate.instance);
+ }
public AbstergoEntertainment(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.LAND}, "");
diff --git a/Mage.Sets/src/mage/cards/a/AlistairTheBrigadier.java b/Mage.Sets/src/mage/cards/a/AlistairTheBrigadier.java
index 0f5254018f9..1bb1e497add 100644
--- a/Mage.Sets/src/mage/cards/a/AlistairTheBrigadier.java
+++ b/Mage.Sets/src/mage/cards/a/AlistairTheBrigadier.java
@@ -18,9 +18,8 @@ import mage.constants.Duration;
import mage.constants.SubType;
import mage.constants.SuperType;
import mage.filter.FilterPermanent;
-import mage.filter.FilterSpell;
+import mage.filter.StaticFilters;
import mage.filter.common.FilterControlledPermanent;
-import mage.filter.common.FilterHistoricSpell;
import mage.filter.predicate.mageobject.HistoricPredicate;
import mage.game.permanent.token.SoldierToken;
@@ -31,7 +30,6 @@ import java.util.UUID;
*/
public final class AlistairTheBrigadier extends CardImpl {
- private static final FilterSpell filter = new FilterHistoricSpell();
private static final FilterPermanent filter2 = new FilterControlledPermanent("historic permanents you control");
static {
@@ -52,7 +50,7 @@ public final class AlistairTheBrigadier extends CardImpl {
// Whenever you cast a historic spell, create a 1/1 white Soldier creature token.
this.addAbility(new SpellCastControllerTriggeredAbility(
- new CreateTokenEffect(new SoldierToken()), filter, false
+ new CreateTokenEffect(new SoldierToken()), StaticFilters.FILTER_SPELL_HISTORIC, false
));
// Whenever Alistair attacks, you may pay {8}. If you do, creatures you control get +X/+X until end of turn, where X is the number of historic permanents you control.
diff --git a/Mage.Sets/src/mage/cards/a/ArcumDagsson.java b/Mage.Sets/src/mage/cards/a/ArcumDagsson.java
index 4bf9142e155..82a5bfb9ee0 100644
--- a/Mage.Sets/src/mage/cards/a/ArcumDagsson.java
+++ b/Mage.Sets/src/mage/cards/a/ArcumDagsson.java
@@ -12,7 +12,7 @@ import mage.cards.CardSetInfo;
import mage.constants.*;
import mage.filter.FilterCard;
import mage.filter.StaticFilters;
-import mage.filter.common.FilterNoncreatureCard;
+import mage.filter.predicate.Predicates;
import mage.target.TargetPermanent;
import mage.target.common.TargetCardInLibrary;
@@ -22,9 +22,10 @@ import mage.target.common.TargetCardInLibrary;
*/
public final class ArcumDagsson extends CardImpl {
- private static final FilterCard filter = new FilterNoncreatureCard("noncreature artifact card");
+ private static final FilterCard filter = new FilterCard("noncreature artifact card");
static {
+ filter.add(Predicates.not(CardType.CREATURE.getPredicate()));
filter.add(CardType.ARTIFACT.getPredicate());
}
diff --git a/Mage.Sets/src/mage/cards/a/ArtifactBlast.java b/Mage.Sets/src/mage/cards/a/ArtifactBlast.java
index 7de47c81c49..f1a79cc3ac8 100644
--- a/Mage.Sets/src/mage/cards/a/ArtifactBlast.java
+++ b/Mage.Sets/src/mage/cards/a/ArtifactBlast.java
@@ -1,24 +1,30 @@
-
package mage.cards.a;
-import java.util.UUID;
import mage.abilities.effects.common.CounterTargetEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
-import mage.filter.common.FilterArtifactSpell;
+import mage.filter.FilterSpell;
import mage.target.TargetSpell;
+import java.util.UUID;
+
/**
*
* @author Jgod
*/
public final class ArtifactBlast extends CardImpl {
+
+ private static final FilterSpell filter = new FilterSpell("artifact spell");
+ static {
+ filter.add(CardType.ARTIFACT.getPredicate());
+ }
+
public ArtifactBlast(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{R}");
// Counter target artifact spell.
- this.getSpellAbility().addTarget(new TargetSpell(new FilterArtifactSpell()));
+ this.getSpellAbility().addTarget(new TargetSpell(filter));
this.getSpellAbility().addEffect(new CounterTargetEffect());
}
diff --git a/Mage.Sets/src/mage/cards/a/ArtistsTalent.java b/Mage.Sets/src/mage/cards/a/ArtistsTalent.java
index 6e7235eb89c..3eb826b7ab6 100644
--- a/Mage.Sets/src/mage/cards/a/ArtistsTalent.java
+++ b/Mage.Sets/src/mage/cards/a/ArtistsTalent.java
@@ -19,7 +19,7 @@ import mage.constants.Outcome;
import mage.constants.SubType;
import mage.filter.FilterCard;
import mage.filter.StaticFilters;
-import mage.filter.common.FilterNoncreatureCard;
+import mage.filter.predicate.Predicates;
import mage.game.Game;
import mage.game.events.DamageEvent;
import mage.game.events.GameEvent;
@@ -33,7 +33,11 @@ import java.util.UUID;
*/
public final class ArtistsTalent extends CardImpl {
- private static final FilterCard filter = new FilterNoncreatureCard("noncreature spells");
+ private static final FilterCard filter = new FilterCard("noncreature spells");
+
+ static {
+ filter.add(Predicates.not(CardType.CREATURE.getPredicate()));
+ }
public ArtistsTalent(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{R}");
diff --git a/Mage.Sets/src/mage/cards/b/BakuAltar.java b/Mage.Sets/src/mage/cards/b/BakuAltar.java
index 5ef5bead80f..d74b22c6999 100644
--- a/Mage.Sets/src/mage/cards/b/BakuAltar.java
+++ b/Mage.Sets/src/mage/cards/b/BakuAltar.java
@@ -13,7 +13,6 @@ import mage.abilities.effects.common.counter.AddCountersSourceEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
-import mage.constants.Zone;
import mage.counters.CounterType;
import mage.filter.StaticFilters;
import mage.game.permanent.token.SpiritToken;
@@ -27,7 +26,7 @@ public final class BakuAltar extends CardImpl {
public BakuAltar(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT},"{2}");
// Whenever you cast a Spirit or Arcane spell, you may put a ki counter on Baku Altar.
- this.addAbility(new SpellCastControllerTriggeredAbility(new AddCountersSourceEffect(CounterType.KI.createInstance(1)), StaticFilters.FILTER_SPIRIT_OR_ARCANE_CARD, true));
+ this.addAbility(new SpellCastControllerTriggeredAbility(new AddCountersSourceEffect(CounterType.KI.createInstance(1)), StaticFilters.FILTER_SPELL_SPIRIT_OR_ARCANE, true));
// {2}, {tap}, Remove a ki counter from Baku Altar: Create a 1/1 colorless Spirit creature token.
Ability ability = new SimpleActivatedAbility(new CreateTokenEffect(new SpiritToken(), 1), new GenericManaCost(2));
ability.addCost(new TapSourceCost());
diff --git a/Mage.Sets/src/mage/cards/b/BalladOfTheBlackFlag.java b/Mage.Sets/src/mage/cards/b/BalladOfTheBlackFlag.java
index 8129e6229d3..a6a9df732da 100644
--- a/Mage.Sets/src/mage/cards/b/BalladOfTheBlackFlag.java
+++ b/Mage.Sets/src/mage/cards/b/BalladOfTheBlackFlag.java
@@ -9,7 +9,7 @@ import mage.constants.CardType;
import mage.constants.SagaChapter;
import mage.constants.SubType;
import mage.filter.FilterCard;
-import mage.filter.common.FilterHistoricCard;
+import mage.filter.predicate.mageobject.HistoricPredicate;
import java.util.UUID;
@@ -18,7 +18,10 @@ import java.util.UUID;
*/
public final class BalladOfTheBlackFlag extends CardImpl {
- private static final FilterCard filter = new FilterHistoricCard();
+ private static final FilterCard filter = new FilterCard("historic card");
+ static {
+ filter.add(HistoricPredicate.instance);
+ }
public BalladOfTheBlackFlag(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{U}{U}");
diff --git a/Mage.Sets/src/mage/cards/b/BatteryBearer.java b/Mage.Sets/src/mage/cards/b/BatteryBearer.java
index 52363581bf5..96f2d2d5f96 100644
--- a/Mage.Sets/src/mage/cards/b/BatteryBearer.java
+++ b/Mage.Sets/src/mage/cards/b/BatteryBearer.java
@@ -14,7 +14,6 @@ import mage.constants.Duration;
import mage.constants.SubType;
import mage.filter.FilterSpell;
import mage.filter.StaticFilters;
-import mage.filter.common.FilterArtifactSpell;
import mage.filter.predicate.mageobject.ManaValuePredicate;
import mage.game.permanent.token.PowerstoneToken;
@@ -26,9 +25,10 @@ import java.util.UUID;
public final class BatteryBearer extends CardImpl {
private static final FilterSpell filter
- = new FilterArtifactSpell("an artifact spell with mana value 6 or greater");
+ = new FilterSpell("an artifact spell with mana value 6 or greater");
static {
+ filter.add(CardType.ARTIFACT.getPredicate());
filter.add(new ManaValuePredicate(ComparisonType.MORE_THAN, 5));
}
diff --git a/Mage.Sets/src/mage/cards/b/BlademaneBaku.java b/Mage.Sets/src/mage/cards/b/BlademaneBaku.java
index 3538121037b..f0c57416e82 100644
--- a/Mage.Sets/src/mage/cards/b/BlademaneBaku.java
+++ b/Mage.Sets/src/mage/cards/b/BlademaneBaku.java
@@ -37,7 +37,7 @@ public final class BlademaneBaku extends CardImpl {
this.toughness = new MageInt(1);
// Whenever you cast a Spirit or Arcane spell, you may put a ki counter on Blademane Baku.
- this.addAbility(new SpellCastControllerTriggeredAbility(new AddCountersSourceEffect(CounterType.KI.createInstance()), StaticFilters.FILTER_SPIRIT_OR_ARCANE_CARD, true));
+ this.addAbility(new SpellCastControllerTriggeredAbility(new AddCountersSourceEffect(CounterType.KI.createInstance()), StaticFilters.FILTER_SPELL_SPIRIT_OR_ARCANE, true));
// {1}, Remove X ki counters from Blademane Baku: For each counter removed, Blademane Baku gets +2/+0 until end of turn.
Effect effect = new BoostSourceEffect(xValue, StaticValue.get(0), Duration.EndOfTurn);
diff --git a/Mage.Sets/src/mage/cards/b/BlotOut.java b/Mage.Sets/src/mage/cards/b/BlotOut.java
index 65abb8e9870..cff566f0886 100644
--- a/Mage.Sets/src/mage/cards/b/BlotOut.java
+++ b/Mage.Sets/src/mage/cards/b/BlotOut.java
@@ -10,9 +10,10 @@ import mage.constants.Outcome;
import mage.constants.Zone;
import mage.filter.FilterPermanent;
import mage.filter.StaticFilters;
-import mage.filter.common.FilterControlledCreatureOrPlaneswalkerPermanent;
+import mage.filter.common.FilterControlledPermanent;
import mage.filter.predicate.ObjectSourcePlayer;
import mage.filter.predicate.ObjectSourcePlayerPredicate;
+import mage.filter.predicate.Predicates;
import mage.game.Game;
import mage.game.permanent.Permanent;
import mage.players.Player;
@@ -67,11 +68,15 @@ class BlotOutEffect extends OneShotEffect {
}
}
- private static final FilterPermanent filter = new FilterControlledCreatureOrPlaneswalkerPermanent(
+ private static final FilterPermanent filter = new FilterControlledPermanent(
"creature or planeswalker you control with the greatest mana value"
);
static {
+ filter.add(Predicates.or(
+ CardType.CREATURE.getPredicate(),
+ CardType.PLANESWALKER.getPredicate()
+ ));
filter.add(BlotOutPredicate.instance);
}
diff --git a/Mage.Sets/src/mage/cards/b/BounteousKirin.java b/Mage.Sets/src/mage/cards/b/BounteousKirin.java
index aa4cb58e370..eb6700bb3cb 100644
--- a/Mage.Sets/src/mage/cards/b/BounteousKirin.java
+++ b/Mage.Sets/src/mage/cards/b/BounteousKirin.java
@@ -33,7 +33,7 @@ public final class BounteousKirin extends CardImpl {
this.addAbility(FlyingAbility.getInstance());
// Whenever you cast a Spirit or Arcane spell, you may gain life equal to that spell's converted mana cost.
this.addAbility(new SpellCastControllerTriggeredAbility(
- new BounteousKirinEffect(), StaticFilters.FILTER_SPIRIT_OR_ARCANE_CARD,
+ new BounteousKirinEffect(), StaticFilters.FILTER_SPELL_SPIRIT_OR_ARCANE,
true, SetTargetPointer.SPELL
));
}
diff --git a/Mage.Sets/src/mage/cards/b/BriarknitKami.java b/Mage.Sets/src/mage/cards/b/BriarknitKami.java
index fedf9683a7a..961faa6a646 100644
--- a/Mage.Sets/src/mage/cards/b/BriarknitKami.java
+++ b/Mage.Sets/src/mage/cards/b/BriarknitKami.java
@@ -27,7 +27,7 @@ public final class BriarknitKami extends CardImpl {
this.power = new MageInt(3);
this.toughness = new MageInt(3);
// Whenever you cast a Spirit or Arcane spell, put a +1/+1 counter on target creature.
- Ability ability = new SpellCastControllerTriggeredAbility(new AddCountersTargetEffect(CounterType.P1P1.createInstance()), StaticFilters.FILTER_SPIRIT_OR_ARCANE_CARD, false);
+ Ability ability = new SpellCastControllerTriggeredAbility(new AddCountersTargetEffect(CounterType.P1P1.createInstance()), StaticFilters.FILTER_SPELL_SPIRIT_OR_ARCANE, false);
ability.addTarget(new TargetCreaturePermanent());
this.addAbility(ability);
}
diff --git a/Mage.Sets/src/mage/cards/b/BudokaPupil.java b/Mage.Sets/src/mage/cards/b/BudokaPupil.java
index 56b7571f36f..1abf18db01e 100644
--- a/Mage.Sets/src/mage/cards/b/BudokaPupil.java
+++ b/Mage.Sets/src/mage/cards/b/BudokaPupil.java
@@ -40,7 +40,7 @@ public final class BudokaPupil extends CardImpl {
this.flipCardName = "Ichiga, Who Topples Oaks";
// Whenever you cast a Spirit or Arcane spell, you may put a ki counter on Budoka Pupil.
- this.addAbility(new SpellCastControllerTriggeredAbility(new AddCountersSourceEffect(CounterType.KI.createInstance()), StaticFilters.FILTER_SPIRIT_OR_ARCANE_CARD, true));
+ this.addAbility(new SpellCastControllerTriggeredAbility(new AddCountersSourceEffect(CounterType.KI.createInstance()), StaticFilters.FILTER_SPELL_SPIRIT_OR_ARCANE, true));
// At the beginning of the end step, if there are two or more ki counters on Budoka Pupil, you may flip it.
this.addAbility(new BeginningOfEndStepTriggeredAbility(
diff --git a/Mage.Sets/src/mage/cards/c/CabalPaladin.java b/Mage.Sets/src/mage/cards/c/CabalPaladin.java
index 5f47303d4e7..ccb8d01a016 100644
--- a/Mage.Sets/src/mage/cards/c/CabalPaladin.java
+++ b/Mage.Sets/src/mage/cards/c/CabalPaladin.java
@@ -12,7 +12,7 @@ import mage.constants.CardType;
import mage.constants.Outcome;
import mage.constants.SubType;
import mage.constants.TargetController;
-import mage.filter.common.FilterHistoricSpell;
+import mage.filter.StaticFilters;
/**
*
@@ -32,7 +32,7 @@ public final class CabalPaladin extends CardImpl {
this.addAbility(new SpellCastControllerTriggeredAbility(
new DamagePlayersEffect(Outcome.Damage, StaticValue.get(2), TargetController.OPPONENT)
.setText("{this} deals 2 damage to each opponent. (Artifacts, legendaries, and Sagas are historic.)"),
- new FilterHistoricSpell(), false
+ StaticFilters.FILTER_SPELL_HISTORIC, false
));
}
diff --git a/Mage.Sets/src/mage/cards/c/CallowJushi.java b/Mage.Sets/src/mage/cards/c/CallowJushi.java
index 7543d5d2fad..2abe3c35a17 100644
--- a/Mage.Sets/src/mage/cards/c/CallowJushi.java
+++ b/Mage.Sets/src/mage/cards/c/CallowJushi.java
@@ -43,7 +43,7 @@ public final class CallowJushi extends CardImpl {
this.flipCardName = "Jaraku the Interloper";
// Whenever you cast a Spirit or Arcane spell, you may put a ki counter on Callow Jushi.
- this.addAbility(new SpellCastControllerTriggeredAbility(new AddCountersSourceEffect(CounterType.KI.createInstance()), StaticFilters.FILTER_SPIRIT_OR_ARCANE_CARD, true));
+ this.addAbility(new SpellCastControllerTriggeredAbility(new AddCountersSourceEffect(CounterType.KI.createInstance()), StaticFilters.FILTER_SPELL_SPIRIT_OR_ARCANE, true));
// At the beginning of the end step, if there are two or more ki counters on Callow Jushi, you may flip it.
this.addAbility(new BeginningOfEndStepTriggeredAbility(
diff --git a/Mage.Sets/src/mage/cards/c/CelestialKirin.java b/Mage.Sets/src/mage/cards/c/CelestialKirin.java
index a385158f633..40b576b47ab 100644
--- a/Mage.Sets/src/mage/cards/c/CelestialKirin.java
+++ b/Mage.Sets/src/mage/cards/c/CelestialKirin.java
@@ -36,7 +36,7 @@ public final class CelestialKirin extends CardImpl {
this.addAbility(FlyingAbility.getInstance());
// Whenever you cast a Spirit or Arcane spell, destroy all permanents with that spell's converted mana cost.
this.addAbility(new SpellCastControllerTriggeredAbility(
- new CelestialKirinEffect(), StaticFilters.FILTER_SPIRIT_OR_ARCANE_CARD,
+ new CelestialKirinEffect(), StaticFilters.FILTER_SPELL_SPIRIT_OR_ARCANE,
false, SetTargetPointer.SPELL
));
}
diff --git a/Mage.Sets/src/mage/cards/c/CloudhoofKirin.java b/Mage.Sets/src/mage/cards/c/CloudhoofKirin.java
index 2bb33d307e4..696872e5154 100644
--- a/Mage.Sets/src/mage/cards/c/CloudhoofKirin.java
+++ b/Mage.Sets/src/mage/cards/c/CloudhoofKirin.java
@@ -35,7 +35,7 @@ public final class CloudhoofKirin extends CardImpl {
// Flying
this.addAbility(FlyingAbility.getInstance());
// Whenever you cast a Spirit or Arcane spell, you may have target player put the top X cards of their library into their graveyard, where X is that spell's converted mana cost.
- Ability ability = new SpellCastControllerTriggeredAbility(Zone.BATTLEFIELD, new CloudhoofKirinEffect(), StaticFilters.FILTER_SPIRIT_OR_ARCANE_CARD, true, SetTargetPointer.SPELL);
+ Ability ability = new SpellCastControllerTriggeredAbility(Zone.BATTLEFIELD, new CloudhoofKirinEffect(), StaticFilters.FILTER_SPELL_SPIRIT_OR_ARCANE, true, SetTargetPointer.SPELL);
ability.addTarget(new TargetPlayer());
this.addAbility(ability);
}
diff --git a/Mage.Sets/src/mage/cards/c/CrystalSkullIsuSpyglass.java b/Mage.Sets/src/mage/cards/c/CrystalSkullIsuSpyglass.java
index 211e4f7b20e..e2805739d01 100644
--- a/Mage.Sets/src/mage/cards/c/CrystalSkullIsuSpyglass.java
+++ b/Mage.Sets/src/mage/cards/c/CrystalSkullIsuSpyglass.java
@@ -9,7 +9,7 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SuperType;
import mage.filter.FilterCard;
-import mage.filter.common.FilterHistoricCard;
+import mage.filter.predicate.mageobject.HistoricPredicate;
import java.util.UUID;
@@ -18,7 +18,10 @@ import java.util.UUID;
*/
public final class CrystalSkullIsuSpyglass extends CardImpl {
- private static final FilterCard filter = new FilterHistoricCard("play historic lands and cast historic spells");
+ private static final FilterCard filter = new FilterCard("play historic lands and cast historic spells");
+ static {
+ filter.add(HistoricPredicate.instance);
+ }
public CrystalSkullIsuSpyglass(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{2}{U}{U}");
diff --git a/Mage.Sets/src/mage/cards/c/CunningBandit.java b/Mage.Sets/src/mage/cards/c/CunningBandit.java
index 1c9386c2ef5..47586c5af03 100644
--- a/Mage.Sets/src/mage/cards/c/CunningBandit.java
+++ b/Mage.Sets/src/mage/cards/c/CunningBandit.java
@@ -39,7 +39,7 @@ public final class CunningBandit extends CardImpl {
this.flipCardName = "Azamuki, Treachery Incarnate";
// Whenever you cast a Spirit or Arcane spell, you may put a ki counter on Cunning Bandit.
- this.addAbility(new SpellCastControllerTriggeredAbility(new AddCountersSourceEffect(CounterType.KI.createInstance()), StaticFilters.FILTER_SPIRIT_OR_ARCANE_CARD, true));
+ this.addAbility(new SpellCastControllerTriggeredAbility(new AddCountersSourceEffect(CounterType.KI.createInstance()), StaticFilters.FILTER_SPELL_SPIRIT_OR_ARCANE, true));
// At the beginning of the end step, if there are two or more ki counters on Cunning Bandit, you may flip it.
this.addAbility(new BeginningOfEndStepTriggeredAbility(
diff --git a/Mage.Sets/src/mage/cards/d/DrafnaFounderOfLatNam.java b/Mage.Sets/src/mage/cards/d/DrafnaFounderOfLatNam.java
index 0468bbfe187..caa730ab411 100644
--- a/Mage.Sets/src/mage/cards/d/DrafnaFounderOfLatNam.java
+++ b/Mage.Sets/src/mage/cards/d/DrafnaFounderOfLatNam.java
@@ -16,7 +16,6 @@ import mage.constants.SuperType;
import mage.constants.TargetController;
import mage.filter.FilterSpell;
import mage.filter.StaticFilters;
-import mage.filter.common.FilterArtifactSpell;
import mage.target.TargetPermanent;
import mage.target.TargetSpell;
@@ -27,9 +26,10 @@ import java.util.UUID;
*/
public final class DrafnaFounderOfLatNam extends CardImpl {
- private static final FilterSpell filter = new FilterArtifactSpell("artifact spell you control");
+ private static final FilterSpell filter = new FilterSpell("artifact spell you control");
static {
+ filter.add(CardType.ARTIFACT.getPredicate());
filter.add(TargetController.YOU.getControllerPredicate());
}
diff --git a/Mage.Sets/src/mage/cards/d/Dreamcatcher.java b/Mage.Sets/src/mage/cards/d/Dreamcatcher.java
index ac4f20ac4c6..c6c05467045 100644
--- a/Mage.Sets/src/mage/cards/d/Dreamcatcher.java
+++ b/Mage.Sets/src/mage/cards/d/Dreamcatcher.java
@@ -28,7 +28,7 @@ public final class Dreamcatcher extends CardImpl {
// Whenever you cast a Spirit or Arcane spell, you may sacrifice Dreamcatcher. If you do, draw a card.
this.addAbility(new SpellCastControllerTriggeredAbility(new DoIfCostPaid(
new DrawCardSourceControllerEffect(1), new SacrificeSourceCost()
- ), StaticFilters.FILTER_SPIRIT_OR_ARCANE_CARD, false));
+ ), StaticFilters.FILTER_SPELL_SPIRIT_OR_ARCANE, false));
}
private Dreamcatcher(final Dreamcatcher card) {
diff --git a/Mage.Sets/src/mage/cards/e/Earthshaker.java b/Mage.Sets/src/mage/cards/e/Earthshaker.java
index f1d7f811176..059c8d14fdb 100644
--- a/Mage.Sets/src/mage/cards/e/Earthshaker.java
+++ b/Mage.Sets/src/mage/cards/e/Earthshaker.java
@@ -34,7 +34,7 @@ public final class Earthshaker extends CardImpl {
this.power = new MageInt(4);
this.toughness = new MageInt(5);
// Whenever you cast a Spirit or Arcane spell, Earthshaker deals 2 damage to each creature without flying.
- this.addAbility(new SpellCastControllerTriggeredAbility(new DamageAllEffect(StaticValue.get(2) , creatureFilter), StaticFilters.FILTER_SPIRIT_OR_ARCANE_CARD, false));
+ this.addAbility(new SpellCastControllerTriggeredAbility(new DamageAllEffect(StaticValue.get(2) , creatureFilter), StaticFilters.FILTER_SPELL_SPIRIT_OR_ARCANE, false));
}
private Earthshaker(final Earthshaker card) {
diff --git a/Mage.Sets/src/mage/cards/e/ElderPineOfJukai.java b/Mage.Sets/src/mage/cards/e/ElderPineOfJukai.java
index 78a76519a6c..d0186a3e41a 100644
--- a/Mage.Sets/src/mage/cards/e/ElderPineOfJukai.java
+++ b/Mage.Sets/src/mage/cards/e/ElderPineOfJukai.java
@@ -27,7 +27,7 @@ public final class ElderPineOfJukai extends CardImpl {
this.toughness = new MageInt(1);
// Whenever you cast a Spirit or Arcane spell, reveal the top three cards of your library. Put all land cards revealed this way into your hand and the rest on the bottom of your library in any order.
- this.addAbility(new SpellCastControllerTriggeredAbility(new RevealLibraryPutIntoHandEffect(3, StaticFilters.FILTER_CARD_LANDS, Zone.LIBRARY), StaticFilters.FILTER_SPIRIT_OR_ARCANE_CARD, false));
+ this.addAbility(new SpellCastControllerTriggeredAbility(new RevealLibraryPutIntoHandEffect(3, StaticFilters.FILTER_CARD_LANDS, Zone.LIBRARY), StaticFilters.FILTER_SPELL_SPIRIT_OR_ARCANE, false));
// Soulshift 2
this.addAbility(new SoulshiftAbility(2));
diff --git a/Mage.Sets/src/mage/cards/e/ElenaTurkRecruit.java b/Mage.Sets/src/mage/cards/e/ElenaTurkRecruit.java
index c5fbea1f82f..950294a67a6 100644
--- a/Mage.Sets/src/mage/cards/e/ElenaTurkRecruit.java
+++ b/Mage.Sets/src/mage/cards/e/ElenaTurkRecruit.java
@@ -13,10 +13,9 @@ import mage.constants.SubType;
import mage.constants.SuperType;
import mage.counters.CounterType;
import mage.filter.FilterCard;
-import mage.filter.FilterSpell;
-import mage.filter.common.FilterHistoricCard;
-import mage.filter.common.FilterHistoricSpell;
+import mage.filter.StaticFilters;
import mage.filter.predicate.Predicates;
+import mage.filter.predicate.mageobject.HistoricPredicate;
import mage.target.common.TargetCardInYourGraveyard;
import java.util.UUID;
@@ -26,10 +25,10 @@ import java.util.UUID;
*/
public final class ElenaTurkRecruit extends CardImpl {
- private static final FilterCard filter = new FilterHistoricCard("non-Assassin historic card from your graveyard");
- private static final FilterSpell filter2 = new FilterHistoricSpell();
+ private static final FilterCard filter = new FilterCard("non-Assassin historic card from your graveyard");
static {
+ filter.add(HistoricPredicate.instance);
filter.add(Predicates.not(SubType.ASSASSIN.getPredicate()));
}
@@ -49,7 +48,7 @@ public final class ElenaTurkRecruit extends CardImpl {
// Whenever you cast a historic spell, put a +1/+1 counter on Elena.
this.addAbility(new SpellCastControllerTriggeredAbility(
- new AddCountersSourceEffect(CounterType.P1P1.createInstance()), filter2, false
+ new AddCountersSourceEffect(CounterType.P1P1.createInstance()), StaticFilters.FILTER_SPELL_HISTORIC, false
));
}
diff --git a/Mage.Sets/src/mage/cards/f/FaithfulSquire.java b/Mage.Sets/src/mage/cards/f/FaithfulSquire.java
index a92ed567844..afdf306f44c 100644
--- a/Mage.Sets/src/mage/cards/f/FaithfulSquire.java
+++ b/Mage.Sets/src/mage/cards/f/FaithfulSquire.java
@@ -42,7 +42,7 @@ public final class FaithfulSquire extends CardImpl {
// Whenever you cast a Spirit or Arcane spell, you may put a ki counter on Faithful Squire.
this.addAbility(new SpellCastControllerTriggeredAbility(
new AddCountersSourceEffect(CounterType.KI.createInstance()),
- StaticFilters.FILTER_SPIRIT_OR_ARCANE_CARD, true
+ StaticFilters.FILTER_SPELL_SPIRIT_OR_ARCANE, true
));
// At the beginning of the end step, if there are two or more ki counters on Faithful Squire, you may flip it
diff --git a/Mage.Sets/src/mage/cards/f/FiddleheadKami.java b/Mage.Sets/src/mage/cards/f/FiddleheadKami.java
index 6017d582d04..3e843e39d52 100644
--- a/Mage.Sets/src/mage/cards/f/FiddleheadKami.java
+++ b/Mage.Sets/src/mage/cards/f/FiddleheadKami.java
@@ -25,7 +25,7 @@ public final class FiddleheadKami extends CardImpl {
this.toughness = new MageInt(3);
// Whenever you cast a Spirit or Arcane spell, regenerate Fiddlehead Kami.
- this.addAbility(new SpellCastControllerTriggeredAbility(new RegenerateSourceEffect(), StaticFilters.FILTER_SPIRIT_OR_ARCANE_CARD, false));
+ this.addAbility(new SpellCastControllerTriggeredAbility(new RegenerateSourceEffect(), StaticFilters.FILTER_SPELL_SPIRIT_OR_ARCANE, false));
}
private FiddleheadKami(final FiddleheadKami card) {
diff --git a/Mage.Sets/src/mage/cards/g/GloinDwarfEmissary.java b/Mage.Sets/src/mage/cards/g/GloinDwarfEmissary.java
index a305271e9a5..f8124235f41 100644
--- a/Mage.Sets/src/mage/cards/g/GloinDwarfEmissary.java
+++ b/Mage.Sets/src/mage/cards/g/GloinDwarfEmissary.java
@@ -13,9 +13,8 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.SuperType;
-import mage.filter.FilterSpell;
+import mage.filter.StaticFilters;
import mage.filter.common.FilterControlledPermanent;
-import mage.filter.common.FilterHistoricSpell;
import mage.game.permanent.token.TreasureToken;
import mage.target.common.TargetCreaturePermanent;
@@ -26,7 +25,6 @@ import java.util.UUID;
*/
public final class GloinDwarfEmissary extends CardImpl {
- private static final FilterSpell filter = new FilterHistoricSpell();
private static final FilterControlledPermanent filter2 = new FilterControlledPermanent(SubType.TREASURE, "a Treasure");
public GloinDwarfEmissary(UUID ownerId, CardSetInfo setInfo) {
@@ -40,7 +38,7 @@ public final class GloinDwarfEmissary extends CardImpl {
// Whenever you cast a historic spell, create a Treasure token. This ability triggers only once each turn.
this.addAbility(new SpellCastControllerTriggeredAbility(
- new CreateTokenEffect(new TreasureToken()), filter, false
+ new CreateTokenEffect(new TreasureToken()), StaticFilters.FILTER_SPELL_HISTORIC, false
).setTriggersLimitEachTurn(1));
// {T}, Sacrifice a Treasure: Goad target creature.
diff --git a/Mage.Sets/src/mage/cards/g/GoblinArtisans.java b/Mage.Sets/src/mage/cards/g/GoblinArtisans.java
index e9f7d247e3a..d134b26b94b 100644
--- a/Mage.Sets/src/mage/cards/g/GoblinArtisans.java
+++ b/Mage.Sets/src/mage/cards/g/GoblinArtisans.java
@@ -14,7 +14,6 @@ import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.TargetController;
import mage.filter.FilterSpell;
-import mage.filter.common.FilterArtifactSpell;
import mage.game.Game;
import mage.game.permanent.Permanent;
import mage.game.stack.Spell;
@@ -58,17 +57,18 @@ public final class GoblinArtisans extends CardImpl {
class GoblinArtisansTarget extends TargetSpell {
- private static final FilterSpell filter = new FilterArtifactSpell(
+ private static final FilterSpell filterSpell = new FilterSpell(
"target artifact spell you control that isn't the target " +
"of an ability from another creature named Goblin Artisans"
);
static {
- filter.add(TargetController.YOU.getOwnerPredicate());
+ filterSpell.add(CardType.ARTIFACT.getPredicate());
+ filterSpell.add(TargetController.YOU.getOwnerPredicate());
}
GoblinArtisansTarget() {
- super(filter);
+ super(filterSpell);
}
private GoblinArtisansTarget(final GoblinArtisansTarget target) {
diff --git a/Mage.Sets/src/mage/cards/g/GuardianOfSolitude.java b/Mage.Sets/src/mage/cards/g/GuardianOfSolitude.java
index 0782d6fa957..f05935cace1 100644
--- a/Mage.Sets/src/mage/cards/g/GuardianOfSolitude.java
+++ b/Mage.Sets/src/mage/cards/g/GuardianOfSolitude.java
@@ -27,7 +27,7 @@ public final class GuardianOfSolitude extends CardImpl {
this.power = new MageInt(1);
this.toughness = new MageInt(2);
- Ability ability = new SpellCastControllerTriggeredAbility(new GainAbilityTargetEffect(FlyingAbility.getInstance(), Duration.EndOfTurn), StaticFilters.FILTER_SPIRIT_OR_ARCANE_CARD, false);
+ Ability ability = new SpellCastControllerTriggeredAbility(new GainAbilityTargetEffect(FlyingAbility.getInstance(), Duration.EndOfTurn), StaticFilters.FILTER_SPELL_SPIRIT_OR_ARCANE, false);
ability.addTarget(new TargetCreaturePermanent());
this.addAbility(ability);
}
diff --git a/Mage.Sets/src/mage/cards/h/HaltOrder.java b/Mage.Sets/src/mage/cards/h/HaltOrder.java
index 9152886692a..51c9a15d69c 100644
--- a/Mage.Sets/src/mage/cards/h/HaltOrder.java
+++ b/Mage.Sets/src/mage/cards/h/HaltOrder.java
@@ -1,25 +1,31 @@
-
package mage.cards.h;
-import java.util.UUID;
import mage.abilities.effects.common.CounterTargetEffect;
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
-import mage.filter.common.FilterArtifactSpell;
+import mage.filter.FilterSpell;
import mage.target.TargetSpell;
+import java.util.UUID;
+
/**
*
* @author Loki
*/
public final class HaltOrder extends CardImpl {
+
+ private static final FilterSpell filter = new FilterSpell("artifact spell");
+ static {
+ filter.add(CardType.ARTIFACT.getPredicate());
+ }
+
public HaltOrder (UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{2}{U}");
// Counter target artifact spell. Draw a card.
- this.getSpellAbility().addTarget(new TargetSpell(new FilterArtifactSpell()));
+ this.getSpellAbility().addTarget(new TargetSpell(filter));
this.getSpellAbility().addEffect(new CounterTargetEffect());
this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1).concatBy("
"));
}
diff --git a/Mage.Sets/src/mage/cards/h/HaruOnna.java b/Mage.Sets/src/mage/cards/h/HaruOnna.java
index 718971ba425..3c8c988759e 100644
--- a/Mage.Sets/src/mage/cards/h/HaruOnna.java
+++ b/Mage.Sets/src/mage/cards/h/HaruOnna.java
@@ -29,7 +29,7 @@ public final class HaruOnna extends CardImpl {
// When Haru-Onna enters the battlefield, draw a card.
this.addAbility(new EntersBattlefieldTriggeredAbility(new DrawCardSourceControllerEffect(1)));
// Whenever you cast a Spirit or Arcane spell, you may return Haru-Onna to its owner's hand.
- this.addAbility(new SpellCastControllerTriggeredAbility(new ReturnToHandSourceEffect(true), StaticFilters.FILTER_SPIRIT_OR_ARCANE_CARD, true));
+ this.addAbility(new SpellCastControllerTriggeredAbility(new ReturnToHandSourceEffect(true), StaticFilters.FILTER_SPELL_SPIRIT_OR_ARCANE, true));
}
private HaruOnna(final HaruOnna card) {
diff --git a/Mage.Sets/src/mage/cards/h/HaviTheAllFather.java b/Mage.Sets/src/mage/cards/h/HaviTheAllFather.java
index e79e460bb93..f5d28e0b4d2 100644
--- a/Mage.Sets/src/mage/cards/h/HaviTheAllFather.java
+++ b/Mage.Sets/src/mage/cards/h/HaviTheAllFather.java
@@ -23,9 +23,9 @@ import mage.constants.SuperType;
import mage.filter.FilterCard;
import mage.filter.StaticFilters;
import mage.filter.common.FilterCreatureCard;
-import mage.filter.common.FilterHistoricCard;
import mage.filter.predicate.ObjectSourcePlayer;
import mage.filter.predicate.ObjectSourcePlayerPredicate;
+import mage.filter.predicate.mageobject.HistoricPredicate;
import mage.game.Game;
import mage.game.permanent.Permanent;
import mage.target.common.TargetCardInYourGraveyard;
@@ -38,19 +38,20 @@ import java.util.UUID;
*/
public final class HaviTheAllFather extends CardImpl {
- private static final Condition condition = new CardsInControllerGraveyardCondition(
- 4, new FilterHistoricCard("historic cards")
- );
- private static final Hint hint = new ValueHint(
- "Historic cards in your graveyard", new CardsInControllerGraveyardCount(new FilterHistoricCard())
- );
+ private static final FilterCard filterHistoric = new FilterCard("historic cards");
private static final FilterCard filter = new FilterCreatureCard("legendary creature card with lesser mana value from your graveyard");
static {
+ filterHistoric.add(HistoricPredicate.instance);
filter.add(SuperType.LEGENDARY.getPredicate());
filter.add(HaviTheAllFatherPredicate.instance);
}
+ private static final Condition condition = new CardsInControllerGraveyardCondition(4, filterHistoric);
+ private static final Hint hint = new ValueHint(
+ "Historic cards in your graveyard", new CardsInControllerGraveyardCount(filterHistoric)
+ );
+
public HaviTheAllFather(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{R}{G}{W}");
diff --git a/Mage.Sets/src/mage/cards/h/HiddenGuerrillas.java b/Mage.Sets/src/mage/cards/h/HiddenGuerrillas.java
index 142ac9511d6..04110c2ed4d 100644
--- a/Mage.Sets/src/mage/cards/h/HiddenGuerrillas.java
+++ b/Mage.Sets/src/mage/cards/h/HiddenGuerrillas.java
@@ -1,4 +1,3 @@
-
package mage.cards.h;
import mage.MageInt;
@@ -11,10 +10,10 @@ import mage.abilities.keyword.TrampleAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
-import mage.constants.SubType;
import mage.constants.Duration;
+import mage.constants.SubType;
+import mage.filter.FilterSpell;
import mage.filter.StaticFilters;
-import mage.filter.common.FilterArtifactSpell;
import mage.game.permanent.token.TokenImpl;
import java.util.UUID;
@@ -26,12 +25,18 @@ import java.util.UUID;
*/
public final class HiddenGuerrillas extends CardImpl {
+
+ private static final FilterSpell filter = new FilterSpell("an artifact spell");
+ static {
+ filter.add(CardType.ARTIFACT.getPredicate());
+ }
+
public HiddenGuerrillas(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{G}");
// When an opponent casts an artifact spell, if Hidden Guerrillas is an enchantment, Hidden Guerrillas becomes a 5/3 Soldier creature with trample.
TriggeredAbility ability = new SpellCastOpponentTriggeredAbility(new BecomesCreatureSourceEffect(new HiddenGuerrillasSoldier(), null, Duration.WhileOnBattlefield),
- new FilterArtifactSpell(), false);
+ filter, false);
this.addAbility(new ConditionalInterveningIfTriggeredAbility(ability, new SourceMatchesFilterCondition(StaticFilters.FILTER_PERMANENT_ENCHANTMENT),
"When an opponent casts an artifact spell, if {this} is an enchantment, {this} becomes a 5/3 Soldier creature with trample."));
}
diff --git a/Mage.Sets/src/mage/cards/h/HikariTwilightGuardian.java b/Mage.Sets/src/mage/cards/h/HikariTwilightGuardian.java
index db8f86378b5..8574ca9249d 100644
--- a/Mage.Sets/src/mage/cards/h/HikariTwilightGuardian.java
+++ b/Mage.Sets/src/mage/cards/h/HikariTwilightGuardian.java
@@ -33,7 +33,7 @@ public final class HikariTwilightGuardian extends CardImpl {
// Whenever you cast a Spirit or Arcane spell, you may exile Hikari, Twilight Guardian. If you do, return it to the battlefield under its owner's control at the beginning of the next end step.
Effect effect = new ExileReturnBattlefieldOwnerNextEndStepSourceEffect();
effect.setText("you may exile {this}. If you do, return it to the battlefield under its owner's control at the beginning of the next end step");
- this.addAbility(new SpellCastControllerTriggeredAbility(effect, StaticFilters.FILTER_SPIRIT_OR_ARCANE_CARD, true));
+ this.addAbility(new SpellCastControllerTriggeredAbility(effect, StaticFilters.FILTER_SPELL_SPIRIT_OR_ARCANE, true));
}
private HikariTwilightGuardian(final HikariTwilightGuardian card) {
diff --git a/Mage.Sets/src/mage/cards/h/HiredMuscle.java b/Mage.Sets/src/mage/cards/h/HiredMuscle.java
index 37146b6c462..b9d9947d089 100644
--- a/Mage.Sets/src/mage/cards/h/HiredMuscle.java
+++ b/Mage.Sets/src/mage/cards/h/HiredMuscle.java
@@ -43,7 +43,7 @@ public final class HiredMuscle extends CardImpl {
// Whenever you cast a Spirit or Arcane spell, you may put a ki counter on Hired Muscle.
this.addAbility(new SpellCastControllerTriggeredAbility(
new AddCountersSourceEffect(CounterType.KI.createInstance()),
- StaticFilters.FILTER_SPIRIT_OR_ARCANE_CARD, true
+ StaticFilters.FILTER_SPELL_SPIRIT_OR_ARCANE, true
));
// At the beginning of the end step, if there are two or more ki counters on Hired Muscle, you may flip it.
diff --git a/Mage.Sets/src/mage/cards/h/HorizonSeed.java b/Mage.Sets/src/mage/cards/h/HorizonSeed.java
index be6ed2dfa74..68803b5f947 100644
--- a/Mage.Sets/src/mage/cards/h/HorizonSeed.java
+++ b/Mage.Sets/src/mage/cards/h/HorizonSeed.java
@@ -25,7 +25,7 @@ public final class HorizonSeed extends CardImpl {
this.power = new MageInt(2);
this.toughness = new MageInt(1);
- Ability ability = new SpellCastControllerTriggeredAbility(new RegenerateTargetEffect(), StaticFilters.FILTER_SPIRIT_OR_ARCANE_CARD, false);
+ Ability ability = new SpellCastControllerTriggeredAbility(new RegenerateTargetEffect(), StaticFilters.FILTER_SPELL_SPIRIT_OR_ARCANE, false);
ability.addTarget(new TargetCreaturePermanent());
this.addAbility(ability);
}
diff --git a/Mage.Sets/src/mage/cards/i/InfernalKirin.java b/Mage.Sets/src/mage/cards/i/InfernalKirin.java
index cd98eedc89a..32bf5bf9e7a 100644
--- a/Mage.Sets/src/mage/cards/i/InfernalKirin.java
+++ b/Mage.Sets/src/mage/cards/i/InfernalKirin.java
@@ -37,7 +37,7 @@ public final class InfernalKirin extends CardImpl {
// Whenever you cast a Spirit or Arcane spell, target player reveals their hand and discards all cards with that spell's converted mana cost.
Ability ability = new SpellCastControllerTriggeredAbility(
- new InfernalKirinEffect(), StaticFilters.FILTER_SPIRIT_OR_ARCANE_CARD,
+ new InfernalKirinEffect(), StaticFilters.FILTER_SPELL_SPIRIT_OR_ARCANE,
false, SetTargetPointer.SPELL
);
ability.addTarget(new TargetPlayer());
diff --git a/Mage.Sets/src/mage/cards/i/InnocenceKami.java b/Mage.Sets/src/mage/cards/i/InnocenceKami.java
index 9c6479f242c..cc2e3ae2e6e 100644
--- a/Mage.Sets/src/mage/cards/i/InnocenceKami.java
+++ b/Mage.Sets/src/mage/cards/i/InnocenceKami.java
@@ -16,7 +16,6 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.ColoredManaSymbol;
-import mage.constants.Zone;
import mage.filter.StaticFilters;
import mage.target.common.TargetCreaturePermanent;
@@ -35,7 +34,7 @@ public final class InnocenceKami extends CardImpl {
ability.addCost(new TapSourceCost());
ability.addTarget(new TargetCreaturePermanent());
this.addAbility(ability);
- this.addAbility(new SpellCastControllerTriggeredAbility(new UntapSourceEffect(), StaticFilters.FILTER_SPIRIT_OR_ARCANE_CARD, false));
+ this.addAbility(new SpellCastControllerTriggeredAbility(new UntapSourceEffect(), StaticFilters.FILTER_SPELL_SPIRIT_OR_ARCANE, false));
}
private InnocenceKami(final InnocenceKami card) {
diff --git a/Mage.Sets/src/mage/cards/i/IshiIshiAkkiCrackshot.java b/Mage.Sets/src/mage/cards/i/IshiIshiAkkiCrackshot.java
index 127a351a1a7..6cbc709eefb 100644
--- a/Mage.Sets/src/mage/cards/i/IshiIshiAkkiCrackshot.java
+++ b/Mage.Sets/src/mage/cards/i/IshiIshiAkkiCrackshot.java
@@ -1,14 +1,15 @@
package mage.cards.i;
-import java.util.UUID;
import mage.MageInt;
import mage.abilities.common.SpellCastOpponentTriggeredAbility;
import mage.abilities.effects.common.DamageTargetEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.*;
-import mage.filter.common.FilterSpiritOrArcaneCard;
+import mage.filter.StaticFilters;
+
+import java.util.UUID;
/**
*
@@ -16,12 +17,6 @@ import mage.filter.common.FilterSpiritOrArcaneCard;
*/
public final class IshiIshiAkkiCrackshot extends CardImpl {
- private static final FilterSpiritOrArcaneCard filter = new FilterSpiritOrArcaneCard();
-
- static {
- filter.add(TargetController.OPPONENT.getControllerPredicate());
- }
-
public IshiIshiAkkiCrackshot(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{R}");
this.supertype.add(SuperType.LEGENDARY);
@@ -32,7 +27,9 @@ public final class IshiIshiAkkiCrackshot extends CardImpl {
this.toughness = new MageInt(1);
// Whenever an opponent casts a Spirit or Arcane spell, Ishi-Ishi, Akki Crackshot deals 2 damage to that player.
- this.addAbility(new SpellCastOpponentTriggeredAbility(Zone.BATTLEFIELD, new DamageTargetEffect(2, true, "that player"), filter, false, SetTargetPointer.PLAYER));
+ this.addAbility(new SpellCastOpponentTriggeredAbility(Zone.BATTLEFIELD,
+ new DamageTargetEffect(2, true, "that player"),
+ StaticFilters.FILTER_SPELL_SPIRIT_OR_ARCANE, false, SetTargetPointer.PLAYER));
}
private IshiIshiAkkiCrackshot(final IshiIshiAkkiCrackshot card) {
diff --git a/Mage.Sets/src/mage/cards/j/JadeIdol.java b/Mage.Sets/src/mage/cards/j/JadeIdol.java
index c4d4978df9f..d978bf4e6de 100644
--- a/Mage.Sets/src/mage/cards/j/JadeIdol.java
+++ b/Mage.Sets/src/mage/cards/j/JadeIdol.java
@@ -21,7 +21,7 @@ public final class JadeIdol extends CardImpl {
public JadeIdol(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{4}");
- this.addAbility(new SpellCastControllerTriggeredAbility(new BecomesCreatureSourceEffect(new JadeIdolToken(), CardType.ARTIFACT, Duration.EndOfTurn), StaticFilters.FILTER_SPIRIT_OR_ARCANE_CARD, false));
+ this.addAbility(new SpellCastControllerTriggeredAbility(new BecomesCreatureSourceEffect(new JadeIdolToken(), CardType.ARTIFACT, Duration.EndOfTurn), StaticFilters.FILTER_SPELL_SPIRIT_OR_ARCANE, false));
}
private JadeIdol(final JadeIdol card) {
diff --git a/Mage.Sets/src/mage/cards/j/JamieMcCrimmon.java b/Mage.Sets/src/mage/cards/j/JamieMcCrimmon.java
index fccac5fa7f9..f33a8d92d67 100644
--- a/Mage.Sets/src/mage/cards/j/JamieMcCrimmon.java
+++ b/Mage.Sets/src/mage/cards/j/JamieMcCrimmon.java
@@ -14,8 +14,7 @@ import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.SubType;
import mage.constants.SuperType;
-import mage.filter.FilterSpell;
-import mage.filter.common.FilterHistoricSpell;
+import mage.filter.StaticFilters;
import mage.game.Game;
import mage.game.stack.Spell;
@@ -28,8 +27,6 @@ import java.util.UUID;
*/
public final class JamieMcCrimmon extends CardImpl {
- private static final FilterSpell filter = new FilterHistoricSpell();
-
public JamieMcCrimmon(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{G}");
@@ -45,7 +42,7 @@ public final class JamieMcCrimmon extends CardImpl {
// Whenever you cast a historic spell, Jamie McCrimmon gets +X/+X until end of turn, where X is that spell's mana value.
this.addAbility(new SpellCastControllerTriggeredAbility(new BoostSourceEffect(
JamieMcCrimmonValue.instance, JamieMcCrimmonValue.instance, Duration.EndOfTurn
- ), filter, false));
+ ), StaticFilters.FILTER_SPELL_HISTORIC, false));
// Doctor's companion
this.addAbility(DoctorsCompanionAbility.getInstance());
diff --git a/Mage.Sets/src/mage/cards/j/JhoiraWeatherlightCaptain.java b/Mage.Sets/src/mage/cards/j/JhoiraWeatherlightCaptain.java
index 2607fa6334d..b1290ef5049 100644
--- a/Mage.Sets/src/mage/cards/j/JhoiraWeatherlightCaptain.java
+++ b/Mage.Sets/src/mage/cards/j/JhoiraWeatherlightCaptain.java
@@ -8,15 +8,12 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.SuperType;
-import mage.filter.FilterSpell;
-import mage.filter.common.FilterHistoricSpell;
+import mage.filter.StaticFilters;
import java.util.UUID;
public final class JhoiraWeatherlightCaptain extends CardImpl {
- private static final FilterSpell filter = new FilterHistoricSpell();
-
public JhoiraWeatherlightCaptain(UUID ownerId, CardSetInfo cardSetInfo) {
super(ownerId, cardSetInfo, new CardType[]{CardType.CREATURE}, "{2}{U}{R}");
this.supertype.add(SuperType.LEGENDARY);
@@ -28,7 +25,7 @@ public final class JhoiraWeatherlightCaptain extends CardImpl {
this.addAbility(new SpellCastControllerTriggeredAbility(
new DrawCardSourceControllerEffect(1)
.setText("draw a card. (Artifacts, legendaries, and Sagas are historic.)"),
- filter, false
+ StaticFilters.FILTER_SPELL_HISTORIC, false
));
}
diff --git a/Mage.Sets/src/mage/cards/j/JhoirasFamiliar.java b/Mage.Sets/src/mage/cards/j/JhoirasFamiliar.java
index 9d1c4a37870..c22a762c16e 100644
--- a/Mage.Sets/src/mage/cards/j/JhoirasFamiliar.java
+++ b/Mage.Sets/src/mage/cards/j/JhoirasFamiliar.java
@@ -1,7 +1,6 @@
package mage.cards.j;
-import java.util.UUID;
import mage.MageInt;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.common.cost.SpellsCostReductionControllerEffect;
@@ -10,8 +9,10 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
-import mage.constants.Zone;
-import mage.filter.common.FilterHistoricCard;
+import mage.filter.FilterCard;
+import mage.filter.predicate.mageobject.HistoricPredicate;
+
+import java.util.UUID;
/**
*
@@ -19,6 +20,11 @@ import mage.filter.common.FilterHistoricCard;
*/
public final class JhoirasFamiliar extends CardImpl {
+ private static final FilterCard filter = new FilterCard("historic spells");
+ static {
+ filter.add(HistoricPredicate.instance);
+ }
+
public JhoirasFamiliar(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{4}");
@@ -31,7 +37,7 @@ public final class JhoirasFamiliar extends CardImpl {
// Historic spells you cast cost {1} less to cast.
this.addAbility(new SimpleStaticAbility(
- new SpellsCostReductionControllerEffect(new FilterHistoricCard(), 1)
+ new SpellsCostReductionControllerEffect(filter, 1)
.setText("Historic spells you cast cost {1} less to cast. (Artifacts, legendaries, and Sagas are historic.)")));
}
diff --git a/Mage.Sets/src/mage/cards/j/JoGrant.java b/Mage.Sets/src/mage/cards/j/JoGrant.java
index d6c4ef8593e..2fc65909432 100644
--- a/Mage.Sets/src/mage/cards/j/JoGrant.java
+++ b/Mage.Sets/src/mage/cards/j/JoGrant.java
@@ -15,7 +15,7 @@ import mage.cards.CardSetInfo;
import mage.constants.*;
import mage.counters.CounterType;
import mage.filter.FilterCard;
-import mage.filter.common.FilterHistoricCard;
+import mage.filter.predicate.mageobject.HistoricPredicate;
import mage.game.Game;
import mage.players.Player;
@@ -59,7 +59,10 @@ public final class JoGrant extends CardImpl {
class JoGrantEffect extends ContinuousEffectImpl {
- private static final FilterCard filter = new FilterHistoricCard();
+ private static final FilterCard filter = new FilterCard("historic card");
+ static {
+ filter.add(HistoricPredicate.instance);
+ }
JoGrantEffect() {
super(Duration.WhileOnBattlefield, Layer.AbilityAddingRemovingEffects_6, SubLayer.NA, Outcome.AddAbility);
diff --git a/Mage.Sets/src/mage/cards/k/KalamaxTheStormsire.java b/Mage.Sets/src/mage/cards/k/KalamaxTheStormsire.java
index 6cec34514c2..6cffb041ca4 100644
--- a/Mage.Sets/src/mage/cards/k/KalamaxTheStormsire.java
+++ b/Mage.Sets/src/mage/cards/k/KalamaxTheStormsire.java
@@ -13,7 +13,7 @@ import mage.constants.SubType;
import mage.constants.SuperType;
import mage.constants.Zone;
import mage.counters.CounterType;
-import mage.filter.common.FilterInstantSpell;
+import mage.filter.FilterSpell;
import mage.game.Game;
import mage.game.events.GameEvent;
import mage.game.permanent.Permanent;
@@ -55,8 +55,14 @@ public final class KalamaxTheStormsire extends CardImpl {
}
class KalamaxTheStormsireSpellCastAbility extends SpellCastControllerTriggeredAbility {
+
+ private static final FilterSpell filterInstant = new FilterSpell();
+ static {
+ filterInstant.add(CardType.INSTANT.getPredicate());
+ }
+
KalamaxTheStormsireSpellCastAbility() {
- super(new CopyTargetStackObjectEffect(true), new FilterInstantSpell(), false);
+ super(new CopyTargetStackObjectEffect(true), filterInstant, false);
}
private KalamaxTheStormsireSpellCastAbility(final KalamaxTheStormsireSpellCastAbility ability) {
diff --git a/Mage.Sets/src/mage/cards/k/KamiOfFiresRoar.java b/Mage.Sets/src/mage/cards/k/KamiOfFiresRoar.java
index c1786031541..98290b3d4b1 100644
--- a/Mage.Sets/src/mage/cards/k/KamiOfFiresRoar.java
+++ b/Mage.Sets/src/mage/cards/k/KamiOfFiresRoar.java
@@ -28,7 +28,7 @@ public final class KamiOfFiresRoar extends CardImpl {
this.toughness = new MageInt(3);
// Whenever you cast a Spirit or Arcane spell, target creature can't block this turn.
- Ability ability = new SpellCastControllerTriggeredAbility(new CantBlockTargetEffect(Duration.EndOfTurn), StaticFilters.FILTER_SPIRIT_OR_ARCANE_CARD, false);
+ Ability ability = new SpellCastControllerTriggeredAbility(new CantBlockTargetEffect(Duration.EndOfTurn), StaticFilters.FILTER_SPELL_SPIRIT_OR_ARCANE, false);
ability.addTarget(new TargetCreaturePermanent());
this.addAbility(ability);
}
diff --git a/Mage.Sets/src/mage/cards/k/KamiOfTatteredShoji.java b/Mage.Sets/src/mage/cards/k/KamiOfTatteredShoji.java
index 8ef007fa0cc..800b79ba3b1 100644
--- a/Mage.Sets/src/mage/cards/k/KamiOfTatteredShoji.java
+++ b/Mage.Sets/src/mage/cards/k/KamiOfTatteredShoji.java
@@ -26,7 +26,7 @@ public final class KamiOfTatteredShoji extends CardImpl {
this.power = new MageInt(2);
this.toughness = new MageInt(5);
// Whenever you cast a Spirit or Arcane spell, Kami of Tattered Shoji gains flying until end of turn.
- this.addAbility(new SpellCastControllerTriggeredAbility(new GainAbilitySourceEffect(FlyingAbility.getInstance(), Duration.EndOfTurn), StaticFilters.FILTER_SPIRIT_OR_ARCANE_CARD, false));
+ this.addAbility(new SpellCastControllerTriggeredAbility(new GainAbilitySourceEffect(FlyingAbility.getInstance(), Duration.EndOfTurn), StaticFilters.FILTER_SPELL_SPIRIT_OR_ARCANE, false));
}
private KamiOfTatteredShoji(final KamiOfTatteredShoji card) {
diff --git a/Mage.Sets/src/mage/cards/k/KamiOfTheHunt.java b/Mage.Sets/src/mage/cards/k/KamiOfTheHunt.java
index 81d1d7666aa..cc7d3610941 100644
--- a/Mage.Sets/src/mage/cards/k/KamiOfTheHunt.java
+++ b/Mage.Sets/src/mage/cards/k/KamiOfTheHunt.java
@@ -24,7 +24,7 @@ public final class KamiOfTheHunt extends CardImpl {
this.power = new MageInt(2);
this.toughness = new MageInt(2);
- this.addAbility(new SpellCastControllerTriggeredAbility(new BoostSourceEffect(1, 1, Duration.EndOfTurn), StaticFilters.FILTER_SPIRIT_OR_ARCANE_CARD, false));
+ this.addAbility(new SpellCastControllerTriggeredAbility(new BoostSourceEffect(1, 1, Duration.EndOfTurn), StaticFilters.FILTER_SPELL_SPIRIT_OR_ARCANE, false));
}
private KamiOfTheHunt(final KamiOfTheHunt card) {
diff --git a/Mage.Sets/src/mage/cards/k/KamiOfThePaintedRoad.java b/Mage.Sets/src/mage/cards/k/KamiOfThePaintedRoad.java
index eb3e982a985..3eec67e8e27 100644
--- a/Mage.Sets/src/mage/cards/k/KamiOfThePaintedRoad.java
+++ b/Mage.Sets/src/mage/cards/k/KamiOfThePaintedRoad.java
@@ -26,7 +26,7 @@ public final class KamiOfThePaintedRoad extends CardImpl {
this.toughness = new MageInt(3);
// Whenever you cast a Spirit or Arcane spell, Kami of the Painted Road gains protection from the color of your choice until end of turn.
- this.addAbility(new SpellCastControllerTriggeredAbility(new GainProtectionFromColorSourceEffect(Duration.EndOfTurn), StaticFilters.FILTER_SPIRIT_OR_ARCANE_CARD, false));
+ this.addAbility(new SpellCastControllerTriggeredAbility(new GainProtectionFromColorSourceEffect(Duration.EndOfTurn), StaticFilters.FILTER_SPELL_SPIRIT_OR_ARCANE, false));
}
diff --git a/Mage.Sets/src/mage/cards/k/KamiOfTheWaningMoon.java b/Mage.Sets/src/mage/cards/k/KamiOfTheWaningMoon.java
index 84a3858e174..a115270f7e0 100644
--- a/Mage.Sets/src/mage/cards/k/KamiOfTheWaningMoon.java
+++ b/Mage.Sets/src/mage/cards/k/KamiOfTheWaningMoon.java
@@ -29,7 +29,7 @@ public final class KamiOfTheWaningMoon extends CardImpl {
this.power = new MageInt(1);
this.toughness = new MageInt(1);
this.addAbility(FlyingAbility.getInstance());
- Ability ability = new SpellCastControllerTriggeredAbility(new GainAbilityTargetEffect(FearAbility.getInstance(), Duration.EndOfTurn), StaticFilters.FILTER_SPIRIT_OR_ARCANE_CARD, false);
+ Ability ability = new SpellCastControllerTriggeredAbility(new GainAbilityTargetEffect(FearAbility.getInstance(), Duration.EndOfTurn), StaticFilters.FILTER_SPELL_SPIRIT_OR_ARCANE, false);
ability.addTarget(new TargetCreaturePermanent());
this.addAbility(ability);
}
diff --git a/Mage.Sets/src/mage/cards/k/KemuriOnna.java b/Mage.Sets/src/mage/cards/k/KemuriOnna.java
index ac916b867b4..96189a95f97 100644
--- a/Mage.Sets/src/mage/cards/k/KemuriOnna.java
+++ b/Mage.Sets/src/mage/cards/k/KemuriOnna.java
@@ -33,7 +33,7 @@ public final class KemuriOnna extends CardImpl {
ability.addTarget(new TargetPlayer());
this.addAbility(ability);
// Whenever you cast a Spirit or Arcane spell, you may return Kemuri-Onna to its owner's hand.
- this.addAbility(new SpellCastControllerTriggeredAbility(new ReturnToHandSourceEffect(true), StaticFilters.FILTER_SPIRIT_OR_ARCANE_CARD, true));
+ this.addAbility(new SpellCastControllerTriggeredAbility(new ReturnToHandSourceEffect(true), StaticFilters.FILTER_SPELL_SPIRIT_OR_ARCANE, true));
}
private KemuriOnna(final KemuriOnna card) {
diff --git a/Mage.Sets/src/mage/cards/k/KiriOnna.java b/Mage.Sets/src/mage/cards/k/KiriOnna.java
index 8328d3b120d..8a0a715f536 100644
--- a/Mage.Sets/src/mage/cards/k/KiriOnna.java
+++ b/Mage.Sets/src/mage/cards/k/KiriOnna.java
@@ -33,7 +33,7 @@ public final class KiriOnna extends CardImpl {
ability.addTarget(new TargetCreaturePermanent());
this.addAbility(ability);
// Whenever you cast a Spirit or Arcane spell, you may return Kiri-Onna to its owner's hand.
- this.addAbility(new SpellCastControllerTriggeredAbility(new ReturnToHandSourceEffect(true), StaticFilters.FILTER_SPIRIT_OR_ARCANE_CARD, true));
+ this.addAbility(new SpellCastControllerTriggeredAbility(new ReturnToHandSourceEffect(true), StaticFilters.FILTER_SPELL_SPIRIT_OR_ARCANE, true));
}
private KiriOnna(final KiriOnna card) {
diff --git a/Mage.Sets/src/mage/cards/k/KirinTouchedOrochi.java b/Mage.Sets/src/mage/cards/k/KirinTouchedOrochi.java
index 09d03710924..254d48fc2e5 100644
--- a/Mage.Sets/src/mage/cards/k/KirinTouchedOrochi.java
+++ b/Mage.Sets/src/mage/cards/k/KirinTouchedOrochi.java
@@ -17,9 +17,9 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Zone;
import mage.counters.CounterType;
+import mage.filter.FilterCard;
import mage.filter.StaticFilters;
-import mage.filter.common.FilterCreatureCard;
-import mage.filter.common.FilterNoncreatureCard;
+import mage.filter.predicate.Predicates;
import mage.game.Game;
import mage.game.permanent.token.SpiritToken;
import mage.players.Player;
@@ -32,7 +32,10 @@ import mage.target.common.TargetControlledCreaturePermanent;
*/
public final class KirinTouchedOrochi extends CardImpl {
- private static final FilterNoncreatureCard filter2 = new FilterNoncreatureCard("noncreature card from a graveyard");
+ private static final FilterCard filter = new FilterCard("noncreature card from a graveyard");
+ static {
+ filter.add(Predicates.not(CardType.CREATURE.getPredicate()));
+ }
public KirinTouchedOrochi(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT, CardType.CREATURE}, "");
@@ -51,7 +54,7 @@ public final class KirinTouchedOrochi extends CardImpl {
// • Exile target noncreature card from a graveyard. When you do, put a +1/+1 counter on target creature you control.
Mode mode = new Mode(new KirinTouchedOrochiCounterEffect());
- mode.addTarget(new TargetCardInGraveyard(filter2));
+ mode.addTarget(new TargetCardInGraveyard(filter));
ability.addMode(mode);
this.addAbility(ability);
}
diff --git a/Mage.Sets/src/mage/cards/k/KodamaOfTheSouthTree.java b/Mage.Sets/src/mage/cards/k/KodamaOfTheSouthTree.java
index b0562ec0d0d..8c00fb6b64c 100644
--- a/Mage.Sets/src/mage/cards/k/KodamaOfTheSouthTree.java
+++ b/Mage.Sets/src/mage/cards/k/KodamaOfTheSouthTree.java
@@ -29,7 +29,7 @@ public final class KodamaOfTheSouthTree extends CardImpl {
this.power = new MageInt(4);
this.toughness = new MageInt(4);
- Ability ability = new SpellCastControllerTriggeredAbility(new BoostControlledEffect(1, 1, Duration.EndOfTurn, StaticFilters.FILTER_PERMANENT_CREATURE, true), StaticFilters.FILTER_SPIRIT_OR_ARCANE_CARD, false);
+ Ability ability = new SpellCastControllerTriggeredAbility(new BoostControlledEffect(1, 1, Duration.EndOfTurn, StaticFilters.FILTER_PERMANENT_CREATURE, true), StaticFilters.FILTER_SPELL_SPIRIT_OR_ARCANE, false);
ability.addEffect(new GainAbilityControlledEffect(TrampleAbility.getInstance(), Duration.EndOfTurn, StaticFilters.FILTER_PERMANENT_CREATURE, true));
this.addAbility(ability);
}
diff --git a/Mage.Sets/src/mage/cards/k/KyokiSanitysEclipse.java b/Mage.Sets/src/mage/cards/k/KyokiSanitysEclipse.java
index 80ad8e4e972..1395961e371 100644
--- a/Mage.Sets/src/mage/cards/k/KyokiSanitysEclipse.java
+++ b/Mage.Sets/src/mage/cards/k/KyokiSanitysEclipse.java
@@ -32,7 +32,7 @@ public final class KyokiSanitysEclipse extends CardImpl {
// Whenever you cast a Spirit or Arcane spell, target opponent exiles a card from their hand.
Ability ability = new SpellCastControllerTriggeredAbility(
new ExileFromZoneTargetEffect(Zone.HAND, false),
- StaticFilters.FILTER_SPIRIT_OR_ARCANE_CARD, false
+ StaticFilters.FILTER_SPELL_SPIRIT_OR_ARCANE, false
);
ability.addTarget(new TargetOpponent());
this.addAbility(ability);
diff --git a/Mage.Sets/src/mage/cards/l/LaylaHassan.java b/Mage.Sets/src/mage/cards/l/LaylaHassan.java
index b3eaf7c2a2e..d18f44ca3b6 100644
--- a/Mage.Sets/src/mage/cards/l/LaylaHassan.java
+++ b/Mage.Sets/src/mage/cards/l/LaylaHassan.java
@@ -1,19 +1,7 @@
package mage.cards.l;
-import java.util.UUID;
import mage.MageInt;
-import mage.constants.SubType;
-import mage.constants.SuperType;
-import mage.constants.Zone;
-import mage.filter.common.FilterCreaturePermanent;
-import mage.filter.common.FilterHistoricCard;
-import mage.game.Game;
-import mage.game.events.DamagedBatchForOnePlayerEvent;
-import mage.game.events.GameEvent;
-import mage.game.permanent.Permanent;
-import mage.target.common.TargetCardInYourGraveyard;
import mage.abilities.Ability;
-import mage.abilities.TriggeredAbilityImpl;
import mage.abilities.common.OneOrMoreDamagePlayerTriggeredAbility;
import mage.abilities.effects.Effect;
import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect;
@@ -21,13 +9,26 @@ import mage.abilities.keyword.FirstStrikeAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
+import mage.constants.SubType;
+import mage.constants.SuperType;
+import mage.filter.FilterCard;
+import mage.filter.common.FilterCreaturePermanent;
+import mage.filter.predicate.mageobject.HistoricPredicate;
+import mage.game.Game;
+import mage.game.events.GameEvent;
+import mage.target.common.TargetCardInYourGraveyard;
+
+import java.util.UUID;
/**
* @author balazskristof
*/
public final class LaylaHassan extends CardImpl {
- private static final FilterHistoricCard filter = new FilterHistoricCard("historic card from your graveyard");
+ private static final FilterCard filter = new FilterCard("historic card from your graveyard");
+ static {
+ filter.add(HistoricPredicate.instance);
+ }
public LaylaHassan(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{W}");
diff --git a/Mage.Sets/src/mage/cards/l/LoamDweller.java b/Mage.Sets/src/mage/cards/l/LoamDweller.java
index 989ea0a8066..6aaad407200 100644
--- a/Mage.Sets/src/mage/cards/l/LoamDweller.java
+++ b/Mage.Sets/src/mage/cards/l/LoamDweller.java
@@ -27,7 +27,7 @@ public final class LoamDweller extends CardImpl {
// Whenever you cast a Spirit or Arcane spell, you may put a land card from your hand onto the battlefield tapped.
this.addAbility(new SpellCastControllerTriggeredAbility(
new PutCardFromHandOntoBattlefieldEffect(StaticFilters.FILTER_CARD_LAND_A, false, true),
- StaticFilters.FILTER_SPIRIT_OR_ARCANE_CARD, true));
+ StaticFilters.FILTER_SPELL_SPIRIT_OR_ARCANE, true));
}
private LoamDweller(final LoamDweller card) {
diff --git a/Mage.Sets/src/mage/cards/l/LyseHext.java b/Mage.Sets/src/mage/cards/l/LyseHext.java
index a86f4394891..a32865238c9 100644
--- a/Mage.Sets/src/mage/cards/l/LyseHext.java
+++ b/Mage.Sets/src/mage/cards/l/LyseHext.java
@@ -20,7 +20,7 @@ import mage.constants.Duration;
import mage.constants.SubType;
import mage.constants.SuperType;
import mage.filter.FilterCard;
-import mage.filter.common.FilterNoncreatureCard;
+import mage.filter.predicate.Predicates;
import mage.game.Game;
import mage.watchers.common.SpellsCastWatcher;
@@ -31,7 +31,10 @@ import java.util.UUID;
*/
public final class LyseHext extends CardImpl {
- private static final FilterCard filter = new FilterNoncreatureCard("noncreature spells");
+ private static final FilterCard filter = new FilterCard("noncreature spells");
+ static {
+ filter.add(Predicates.not(CardType.CREATURE.getPredicate()));
+ }
public LyseHext(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{W}{U}");
diff --git a/Mage.Sets/src/mage/cards/m/MendicantCoreGuidelight.java b/Mage.Sets/src/mage/cards/m/MendicantCoreGuidelight.java
index c88230090a1..452594e3917 100644
--- a/Mage.Sets/src/mage/cards/m/MendicantCoreGuidelight.java
+++ b/Mage.Sets/src/mage/cards/m/MendicantCoreGuidelight.java
@@ -16,9 +16,7 @@ import mage.abilities.keyword.StartYourEnginesAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.*;
-import mage.filter.FilterSpell;
import mage.filter.StaticFilters;
-import mage.filter.common.FilterArtifactSpell;
import java.util.UUID;
@@ -27,7 +25,6 @@ import java.util.UUID;
*/
public final class MendicantCoreGuidelight extends CardImpl {
- private static final FilterSpell filter = new FilterArtifactSpell("an artifact spell");
private static final DynamicValue xValue = new PermanentsOnBattlefieldCount(StaticFilters.FILTER_CONTROLLED_PERMANENT_ARTIFACTS);
public MendicantCoreGuidelight(UUID ownerId, CardSetInfo setInfo) {
@@ -47,7 +44,7 @@ public final class MendicantCoreGuidelight extends CardImpl {
Effect copyEffect = new CopyTargetStackObjectEffect(true)
.setText("copy it. (The copy becomes a token.)");
Effect doIfEffect = new DoIfCostPaid(copyEffect, new ManaCostsImpl<>("{1}"));
- Ability ability = new SpellCastControllerTriggeredAbility(doIfEffect, filter, false, SetTargetPointer.SPELL);
+ Ability ability = new SpellCastControllerTriggeredAbility(doIfEffect, StaticFilters.FILTER_SPELL_AN_ARTIFACT, false, SetTargetPointer.SPELL);
this.addAbility(new MaxSpeedAbility(ability));
}
diff --git a/Mage.Sets/src/mage/cards/m/MishrasWorkshop.java b/Mage.Sets/src/mage/cards/m/MishrasWorkshop.java
index 907f02c9c13..4ab48ee0610 100644
--- a/Mage.Sets/src/mage/cards/m/MishrasWorkshop.java
+++ b/Mage.Sets/src/mage/cards/m/MishrasWorkshop.java
@@ -1,4 +1,3 @@
-
package mage.cards.m;
import java.util.UUID;
@@ -8,7 +7,7 @@ import mage.abilities.mana.conditional.ConditionalSpellManaBuilder;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
-import mage.filter.common.FilterArtifactSpell;
+import mage.filter.FilterSpell;
/**
*
@@ -16,12 +15,17 @@ import mage.filter.common.FilterArtifactSpell;
*/
public final class MishrasWorkshop extends CardImpl {
+ private static final FilterSpell filter = new FilterSpell("artifact spells");
+ static {
+ filter.add(CardType.ARTIFACT.getPredicate());
+ }
+
public MishrasWorkshop(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.LAND},"");
// {tap}: Add {C}{C}{C}. Spend this mana only to cast artifact spells.
this.addAbility(new ConditionalColorlessManaAbility(new TapSourceCost(), 3,
- new ConditionalSpellManaBuilder(new FilterArtifactSpell("artifact spells"))));
+ new ConditionalSpellManaBuilder(filter)));
}
diff --git a/Mage.Sets/src/mage/cards/m/MoiraAndTeshar.java b/Mage.Sets/src/mage/cards/m/MoiraAndTeshar.java
index 2abe1bb1625..7af8132d513 100644
--- a/Mage.Sets/src/mage/cards/m/MoiraAndTeshar.java
+++ b/Mage.Sets/src/mage/cards/m/MoiraAndTeshar.java
@@ -16,8 +16,7 @@ import mage.cards.Card;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.*;
-import mage.filter.FilterSpell;
-import mage.filter.common.FilterHistoricSpell;
+import mage.filter.StaticFilters;
import mage.filter.common.FilterPermanentCard;
import mage.game.Game;
import mage.game.permanent.Permanent;
@@ -30,7 +29,6 @@ import java.util.UUID;
public final class MoiraAndTeshar extends CardImpl {
- private static final FilterSpell filter = new FilterHistoricSpell();
private static final FilterPermanentCard targetFilter = new FilterPermanentCard(
"nonland permanent card from your graveyard");
@@ -51,7 +49,7 @@ public final class MoiraAndTeshar extends CardImpl {
// Whenever you cast a historic spell, return target nonland permanent card from
// your graveyard to the battlefield. It gains haste. Exile it at the beginning
// of the next end step.
- Ability ability = new SpellCastControllerTriggeredAbility(new MoiraAndTesharEffect(), filter, false);
+ Ability ability = new SpellCastControllerTriggeredAbility(new MoiraAndTesharEffect(), StaticFilters.FILTER_SPELL_HISTORIC, false);
ability.addTarget(new TargetCardInYourGraveyard(targetFilter));
// If it would leave the battlefield, exile it instead of putting it anywhere
diff --git a/Mage.Sets/src/mage/cards/m/MonasteryMessenger.java b/Mage.Sets/src/mage/cards/m/MonasteryMessenger.java
index cf0872e16b9..f4fecac108f 100644
--- a/Mage.Sets/src/mage/cards/m/MonasteryMessenger.java
+++ b/Mage.Sets/src/mage/cards/m/MonasteryMessenger.java
@@ -11,7 +11,7 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.filter.FilterCard;
-import mage.filter.common.FilterNoncreatureCard;
+import mage.filter.common.FilterNonlandCard;
import mage.filter.predicate.Predicates;
import mage.target.common.TargetCardInYourGraveyard;
@@ -22,10 +22,10 @@ import java.util.UUID;
*/
public final class MonasteryMessenger extends CardImpl {
- private static final FilterCard filter = new FilterNoncreatureCard("noncreature, nonland card from your graveyard");
+ private static final FilterCard filter = new FilterNonlandCard("noncreature, nonland card from your graveyard");
static {
- filter.add(Predicates.not(CardType.LAND.getPredicate()));
+ filter.add(Predicates.not(CardType.CREATURE.getPredicate()));
}
public MonasteryMessenger(UUID ownerId, CardSetInfo setInfo) {
diff --git a/Mage.Sets/src/mage/cards/n/NikkoOnna.java b/Mage.Sets/src/mage/cards/n/NikkoOnna.java
index 0db75a430b1..67a6bbf9035 100644
--- a/Mage.Sets/src/mage/cards/n/NikkoOnna.java
+++ b/Mage.Sets/src/mage/cards/n/NikkoOnna.java
@@ -33,7 +33,7 @@ public final class NikkoOnna extends CardImpl {
this.addAbility(ability);
// Whenever you cast a Spirit or Arcane spell, you may return Nikko-Onna to its owner's hand.
- this.addAbility(new SpellCastControllerTriggeredAbility(new ReturnToHandSourceEffect(true), StaticFilters.FILTER_SPIRIT_OR_ARCANE_CARD, true));
+ this.addAbility(new SpellCastControllerTriggeredAbility(new ReturnToHandSourceEffect(true), StaticFilters.FILTER_SPELL_SPIRIT_OR_ARCANE, true));
}
private NikkoOnna(final NikkoOnna card) {
diff --git a/Mage.Sets/src/mage/cards/o/OrbweaverKumo.java b/Mage.Sets/src/mage/cards/o/OrbweaverKumo.java
index 0fbaddcd627..5a700426460 100644
--- a/Mage.Sets/src/mage/cards/o/OrbweaverKumo.java
+++ b/Mage.Sets/src/mage/cards/o/OrbweaverKumo.java
@@ -27,7 +27,7 @@ public final class OrbweaverKumo extends CardImpl {
this.power = new MageInt(3);
this.toughness = new MageInt(4);
this.addAbility(ReachAbility.getInstance());
- this.addAbility(new SpellCastControllerTriggeredAbility(new GainAbilitySourceEffect(new ForestwalkAbility(), Duration.EndOfTurn), StaticFilters.FILTER_SPIRIT_OR_ARCANE_CARD, false));
+ this.addAbility(new SpellCastControllerTriggeredAbility(new GainAbilitySourceEffect(new ForestwalkAbility(), Duration.EndOfTurn), StaticFilters.FILTER_SPELL_SPIRIT_OR_ARCANE, false));
}
private OrbweaverKumo(final OrbweaverKumo card) {
diff --git a/Mage.Sets/src/mage/cards/o/OreGorger.java b/Mage.Sets/src/mage/cards/o/OreGorger.java
index 19a5014d5df..b593719d0ff 100644
--- a/Mage.Sets/src/mage/cards/o/OreGorger.java
+++ b/Mage.Sets/src/mage/cards/o/OreGorger.java
@@ -25,7 +25,7 @@ public final class OreGorger extends CardImpl {
this.power = new MageInt(3);
this.toughness = new MageInt(1);
- Ability ability = new SpellCastControllerTriggeredAbility(new DestroyTargetEffect(), StaticFilters.FILTER_SPIRIT_OR_ARCANE_CARD, true);
+ Ability ability = new SpellCastControllerTriggeredAbility(new DestroyTargetEffect(), StaticFilters.FILTER_SPELL_SPIRIT_OR_ARCANE, true);
ability.addTarget(new TargetNonBasicLandPermanent());
this.addAbility(ability);
}
diff --git a/Mage.Sets/src/mage/cards/o/OyobiWhoSplitTheHeavens.java b/Mage.Sets/src/mage/cards/o/OyobiWhoSplitTheHeavens.java
index ddfb7efc877..2840bfb6b6f 100644
--- a/Mage.Sets/src/mage/cards/o/OyobiWhoSplitTheHeavens.java
+++ b/Mage.Sets/src/mage/cards/o/OyobiWhoSplitTheHeavens.java
@@ -29,7 +29,7 @@ public final class OyobiWhoSplitTheHeavens extends CardImpl {
this.addAbility(FlyingAbility.getInstance());
// Whenever you cast a Spirit or Arcane spell, create a 3/3 white Spirit creature token with flying.
- this.addAbility(new SpellCastControllerTriggeredAbility(new CreateTokenEffect(new AnotherSpiritToken()), StaticFilters.FILTER_SPIRIT_OR_ARCANE_CARD, false));
+ this.addAbility(new SpellCastControllerTriggeredAbility(new CreateTokenEffect(new AnotherSpiritToken()), StaticFilters.FILTER_SPELL_SPIRIT_OR_ARCANE, false));
}
private OyobiWhoSplitTheHeavens(final OyobiWhoSplitTheHeavens card) {
diff --git a/Mage.Sets/src/mage/cards/p/PetalmaneBaku.java b/Mage.Sets/src/mage/cards/p/PetalmaneBaku.java
index 4f75542a530..456de66e613 100644
--- a/Mage.Sets/src/mage/cards/p/PetalmaneBaku.java
+++ b/Mage.Sets/src/mage/cards/p/PetalmaneBaku.java
@@ -31,7 +31,7 @@ public final class PetalmaneBaku extends CardImpl {
this.toughness = new MageInt(2);
// Whenever you cast a Spirit or Arcane spell, you may put a ki counter on Petalmane Baku.
- this.addAbility(new SpellCastControllerTriggeredAbility(new AddCountersSourceEffect(CounterType.KI.createInstance()), StaticFilters.FILTER_SPIRIT_OR_ARCANE_CARD, true));
+ this.addAbility(new SpellCastControllerTriggeredAbility(new AddCountersSourceEffect(CounterType.KI.createInstance()), StaticFilters.FILTER_SPELL_SPIRIT_OR_ARCANE, true));
// {1}, Remove X ki counters from Petalmane Baku: Add X mana of any one color.
Ability ability = new DynamicManaAbility(
diff --git a/Mage.Sets/src/mage/cards/q/QuillmaneBaku.java b/Mage.Sets/src/mage/cards/q/QuillmaneBaku.java
index 1df63b3abe7..ffd15b4f2cf 100644
--- a/Mage.Sets/src/mage/cards/q/QuillmaneBaku.java
+++ b/Mage.Sets/src/mage/cards/q/QuillmaneBaku.java
@@ -37,7 +37,7 @@ public final class QuillmaneBaku extends CardImpl {
this.toughness = new MageInt(3);
// Whenever you cast a Spirit or Arcane spell, you may put a ki counter on Quillmane Baku.
- this.addAbility(new SpellCastControllerTriggeredAbility(new AddCountersSourceEffect(CounterType.KI.createInstance()), StaticFilters.FILTER_SPIRIT_OR_ARCANE_CARD, true));
+ this.addAbility(new SpellCastControllerTriggeredAbility(new AddCountersSourceEffect(CounterType.KI.createInstance()), StaticFilters.FILTER_SPELL_SPIRIT_OR_ARCANE, true));
// {1}, {T}, Remove X ki counters from Quillmane Baku: Return target creature with mana value X or less to its owner's hand.
Ability ability = new SimpleActivatedAbility(new ReturnToHandTargetEffect(), new GenericManaCost(1));
diff --git a/Mage.Sets/src/mage/cards/r/RonaDiscipleOfGix.java b/Mage.Sets/src/mage/cards/r/RonaDiscipleOfGix.java
index e3b85be0f7a..c1aee4820f0 100644
--- a/Mage.Sets/src/mage/cards/r/RonaDiscipleOfGix.java
+++ b/Mage.Sets/src/mage/cards/r/RonaDiscipleOfGix.java
@@ -1,4 +1,3 @@
-
package mage.cards.r;
import mage.MageInt;
@@ -16,7 +15,8 @@ import mage.cards.Card;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.*;
-import mage.filter.common.FilterHistoricCard;
+import mage.filter.FilterCard;
+import mage.filter.predicate.mageobject.HistoricPredicate;
import mage.game.ExileZone;
import mage.game.Game;
import mage.target.common.TargetCardInYourGraveyard;
@@ -29,6 +29,11 @@ import java.util.UUID;
*/
public final class RonaDiscipleOfGix extends CardImpl {
+ private static final FilterCard filter = new FilterCard("historic card from your graveyard");
+ static {
+ filter.add(HistoricPredicate.instance);
+ }
+
public RonaDiscipleOfGix(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{U}{B}");
@@ -45,7 +50,7 @@ public final class RonaDiscipleOfGix extends CardImpl {
.setText("exile target historic card from your graveyard. (Artifacts, legendaries, and Sagas are historic.)"),
true
);
- ability.addTarget(new TargetCardInYourGraveyard(new FilterHistoricCard("historic card from your graveyard")));
+ ability.addTarget(new TargetCardInYourGraveyard(filter));
this.addAbility(ability);
// You may cast nonland cards exiled with Rona.
diff --git a/Mage.Sets/src/mage/cards/s/SamutTheDrivingForce.java b/Mage.Sets/src/mage/cards/s/SamutTheDrivingForce.java
index 23211469d08..9c982004f92 100644
--- a/Mage.Sets/src/mage/cards/s/SamutTheDrivingForce.java
+++ b/Mage.Sets/src/mage/cards/s/SamutTheDrivingForce.java
@@ -18,7 +18,7 @@ import mage.constants.SubType;
import mage.constants.SuperType;
import mage.filter.FilterCard;
import mage.filter.StaticFilters;
-import mage.filter.common.FilterNoncreatureCard;
+import mage.filter.predicate.Predicates;
import java.util.UUID;
@@ -27,7 +27,10 @@ import java.util.UUID;
*/
public final class SamutTheDrivingForce extends CardImpl {
- private static final FilterCard filter = new FilterNoncreatureCard("noncreature spells");
+ private static final FilterCard filter = new FilterCard("noncreature spells");
+ static {
+ filter.add(Predicates.not(CardType.CREATURE.getPredicate()));
+ }
public SamutTheDrivingForce(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{R}{G}{W}");
diff --git a/Mage.Sets/src/mage/cards/s/SamwiseGamgee.java b/Mage.Sets/src/mage/cards/s/SamwiseGamgee.java
index e5108ef9fd4..87c4fb3fe9d 100644
--- a/Mage.Sets/src/mage/cards/s/SamwiseGamgee.java
+++ b/Mage.Sets/src/mage/cards/s/SamwiseGamgee.java
@@ -16,12 +16,11 @@ import mage.filter.FilterCard;
import mage.filter.FilterPermanent;
import mage.filter.common.FilterControlledCreaturePermanent;
import mage.filter.common.FilterControlledPermanent;
-import mage.filter.common.FilterHistoricCard;
import mage.filter.predicate.mageobject.AnotherPredicate;
+import mage.filter.predicate.mageobject.HistoricPredicate;
import mage.filter.predicate.permanent.TokenPredicate;
import mage.game.permanent.token.FoodToken;
import mage.target.common.TargetCardInYourGraveyard;
-import mage.target.common.TargetControlledPermanent;
import java.util.UUID;
@@ -32,11 +31,12 @@ public final class SamwiseGamgee extends CardImpl {
private static final FilterPermanent filter = new FilterControlledCreaturePermanent("another nontoken creature");
private static final FilterControlledPermanent filter2 = new FilterControlledPermanent(SubType.FOOD, "Foods");
- private static final FilterCard filter3 = new FilterHistoricCard("historic card from your graveyard");
+ private static final FilterCard filter3 = new FilterCard("historic card from your graveyard");
static {
filter.add(AnotherPredicate.instance);
filter.add(TokenPredicate.FALSE);
+ filter3.add(HistoricPredicate.instance);
}
public SamwiseGamgee(UUID ownerId, CardSetInfo setInfo) {
diff --git a/Mage.Sets/src/mage/cards/s/SanctumSpirit.java b/Mage.Sets/src/mage/cards/s/SanctumSpirit.java
index cfc17b42039..0faca217120 100644
--- a/Mage.Sets/src/mage/cards/s/SanctumSpirit.java
+++ b/Mage.Sets/src/mage/cards/s/SanctumSpirit.java
@@ -1,20 +1,20 @@
-
package mage.cards.s;
-import java.util.UUID;
import mage.MageInt;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.common.DiscardCardCost;
import mage.abilities.effects.common.continuous.GainAbilitySourceEffect;
import mage.abilities.keyword.IndestructibleAbility;
-import mage.constants.SubType;
import mage.abilities.keyword.LifelinkAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
-import mage.constants.Zone;
-import mage.filter.common.FilterHistoricCard;
+import mage.constants.SubType;
+import mage.filter.FilterCard;
+import mage.filter.predicate.mageobject.HistoricPredicate;
+
+import java.util.UUID;
/**
*
@@ -22,6 +22,11 @@ import mage.filter.common.FilterHistoricCard;
*/
public final class SanctumSpirit extends CardImpl {
+ private static final FilterCard filter = new FilterCard("a historic card");
+ static {
+ filter.add(HistoricPredicate.instance);
+ }
+
public SanctumSpirit(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{W}");
@@ -36,7 +41,7 @@ public final class SanctumSpirit extends CardImpl {
this.addAbility(
new SimpleActivatedAbility(
new GainAbilitySourceEffect(IndestructibleAbility.getInstance(), Duration.EndOfTurn),
- new DiscardCardCost(new FilterHistoricCard())
+ new DiscardCardCost(filter)
)
);
}
diff --git a/Mage.Sets/src/mage/cards/s/SarahJaneSmith.java b/Mage.Sets/src/mage/cards/s/SarahJaneSmith.java
index 7e7144c1c9e..799f88f9693 100644
--- a/Mage.Sets/src/mage/cards/s/SarahJaneSmith.java
+++ b/Mage.Sets/src/mage/cards/s/SarahJaneSmith.java
@@ -9,8 +9,7 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.SuperType;
-import mage.filter.FilterSpell;
-import mage.filter.common.FilterHistoricSpell;
+import mage.filter.StaticFilters;
import java.util.UUID;
@@ -19,8 +18,6 @@ import java.util.UUID;
*/
public final class SarahJaneSmith extends CardImpl {
- private static final FilterSpell filter = new FilterHistoricSpell();
-
public SarahJaneSmith(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{W}");
@@ -32,7 +29,7 @@ public final class SarahJaneSmith extends CardImpl {
// Whenever you cast a historic spell, investigate. This ability triggers only once each turn.
this.addAbility(new SpellCastControllerTriggeredAbility(
- new InvestigateEffect(), filter, false
+ new InvestigateEffect(), StaticFilters.FILTER_SPELL_HISTORIC, false
).setTriggersLimitEachTurn(1));
// Doctor's companion
diff --git a/Mage.Sets/src/mage/cards/s/ScaledHulk.java b/Mage.Sets/src/mage/cards/s/ScaledHulk.java
index 1bb3ca44ed0..778add52960 100644
--- a/Mage.Sets/src/mage/cards/s/ScaledHulk.java
+++ b/Mage.Sets/src/mage/cards/s/ScaledHulk.java
@@ -25,7 +25,7 @@ public final class ScaledHulk extends CardImpl {
this.power = new MageInt(4);
this.toughness = new MageInt(4);
// Whenever you cast a Spirit or Arcane spell, Scaled Hulk gets +2/+2 until end of turn.
- this.addAbility(new SpellCastControllerTriggeredAbility(new BoostSourceEffect(2, 2, Duration.EndOfTurn), StaticFilters.FILTER_SPIRIT_OR_ARCANE_CARD, false));
+ this.addAbility(new SpellCastControllerTriggeredAbility(new BoostSourceEffect(2, 2, Duration.EndOfTurn), StaticFilters.FILTER_SPELL_SPIRIT_OR_ARCANE, false));
}
private ScaledHulk(final ScaledHulk card) {
diff --git a/Mage.Sets/src/mage/cards/s/SerraDisciple.java b/Mage.Sets/src/mage/cards/s/SerraDisciple.java
index 3b301726f7f..65784381b24 100644
--- a/Mage.Sets/src/mage/cards/s/SerraDisciple.java
+++ b/Mage.Sets/src/mage/cards/s/SerraDisciple.java
@@ -10,15 +10,12 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.SubType;
-import mage.filter.FilterSpell;
-import mage.filter.common.FilterHistoricSpell;
+import mage.filter.StaticFilters;
import java.util.UUID;
public final class SerraDisciple extends CardImpl {
- private static final FilterSpell filter = new FilterHistoricSpell();
-
public SerraDisciple(UUID ownerId, CardSetInfo cardSetInfo) {
super(ownerId, cardSetInfo, new CardType[]{CardType.CREATURE}, "{1}{W}");
subtype.add(SubType.BIRD, SubType.CLERIC);
@@ -31,7 +28,7 @@ public final class SerraDisciple extends CardImpl {
// Whenever you cast a historic spell, Serra Disciple gets +1/+1 until end of turn
addAbility(new SpellCastControllerTriggeredAbility(
- new BoostSourceEffect(1, 1, Duration.EndOfTurn), filter, false
+ new BoostSourceEffect(1, 1, Duration.EndOfTurn), StaticFilters.FILTER_SPELL_HISTORIC, false
));
}
diff --git a/Mage.Sets/src/mage/cards/s/SireOfTheStorm.java b/Mage.Sets/src/mage/cards/s/SireOfTheStorm.java
index 5f0d1e4df7d..ef3142f4e9a 100644
--- a/Mage.Sets/src/mage/cards/s/SireOfTheStorm.java
+++ b/Mage.Sets/src/mage/cards/s/SireOfTheStorm.java
@@ -26,7 +26,7 @@ public final class SireOfTheStorm extends CardImpl {
this.power = new MageInt(3);
this.toughness = new MageInt(3);
this.addAbility(FlyingAbility.getInstance());
- this.addAbility(new SpellCastControllerTriggeredAbility(new DrawCardSourceControllerEffect(1), StaticFilters.FILTER_SPIRIT_OR_ARCANE_CARD, true));
+ this.addAbility(new SpellCastControllerTriggeredAbility(new DrawCardSourceControllerEffect(1), StaticFilters.FILTER_SPELL_SPIRIT_OR_ARCANE, true));
}
private SireOfTheStorm(final SireOfTheStorm card) {
diff --git a/Mage.Sets/src/mage/cards/s/SkullmaneBaku.java b/Mage.Sets/src/mage/cards/s/SkullmaneBaku.java
index 2ae43cc87df..c6f1edcd178 100644
--- a/Mage.Sets/src/mage/cards/s/SkullmaneBaku.java
+++ b/Mage.Sets/src/mage/cards/s/SkullmaneBaku.java
@@ -37,7 +37,7 @@ public final class SkullmaneBaku extends CardImpl {
this.toughness = new MageInt(1);
// Whenever you cast a Spirit or Arcane spell, you may put a ki counter on Skullmane Baku.
- this.addAbility(new SpellCastControllerTriggeredAbility(new AddCountersSourceEffect(CounterType.KI.createInstance()), StaticFilters.FILTER_SPIRIT_OR_ARCANE_CARD, true));
+ this.addAbility(new SpellCastControllerTriggeredAbility(new AddCountersSourceEffect(CounterType.KI.createInstance()), StaticFilters.FILTER_SPELL_SPIRIT_OR_ARCANE, true));
// {1}, {T}, Remove X ki counters from Skullmane Baku: Target creature gets -X/-X until end of turn.
Ability ability = new SimpleActivatedAbility(new BoostTargetEffect(xValue, xValue, Duration.EndOfTurn), new GenericManaCost(1));
diff --git a/Mage.Sets/src/mage/cards/s/SkyfireKirin.java b/Mage.Sets/src/mage/cards/s/SkyfireKirin.java
index 384c0a73074..b9e313ac4b3 100644
--- a/Mage.Sets/src/mage/cards/s/SkyfireKirin.java
+++ b/Mage.Sets/src/mage/cards/s/SkyfireKirin.java
@@ -44,7 +44,7 @@ public final class SkyfireKirin extends CardImpl {
// Whenever you cast a Spirit or Arcane spell, you may gain control of target creature with that spell's converted mana cost until end of turn.
Ability ability = new SpellCastControllerTriggeredAbility(
new SkyfireKirinEffect(),
- StaticFilters.FILTER_SPIRIT_OR_ARCANE_CARD,
+ StaticFilters.FILTER_SPELL_SPIRIT_OR_ARCANE,
true, SetTargetPointer.SPELL
);
ability.addTarget(new TargetCreaturePermanent());
diff --git a/Mage.Sets/src/mage/cards/s/Soilshaper.java b/Mage.Sets/src/mage/cards/s/Soilshaper.java
index 57d2bb86c5b..0ef7ce7f28e 100644
--- a/Mage.Sets/src/mage/cards/s/Soilshaper.java
+++ b/Mage.Sets/src/mage/cards/s/Soilshaper.java
@@ -30,7 +30,7 @@ public final class Soilshaper extends CardImpl {
this.toughness = new MageInt(1);
// Whenever you cast a Spirit or Arcane spell, target land becomes a 3/3 creature until end of turn. It's still a land.
- Ability ability = new SpellCastControllerTriggeredAbility(new BecomesCreatureTargetEffect(new CreatureToken(3, 3), false, true, Duration.EndOfTurn), StaticFilters.FILTER_SPIRIT_OR_ARCANE_CARD, false);
+ Ability ability = new SpellCastControllerTriggeredAbility(new BecomesCreatureTargetEffect(new CreatureToken(3, 3), false, true, Duration.EndOfTurn), StaticFilters.FILTER_SPELL_SPIRIT_OR_ARCANE, false);
ability.addTarget(new TargetLandPermanent());
this.addAbility(ability);
}
@@ -44,4 +44,4 @@ public final class Soilshaper extends CardImpl {
return new Soilshaper(this);
}
-}
\ No newline at end of file
+}
diff --git a/Mage.Sets/src/mage/cards/s/SoulOfMagma.java b/Mage.Sets/src/mage/cards/s/SoulOfMagma.java
index fa7299d412a..fa59ca5f2d0 100644
--- a/Mage.Sets/src/mage/cards/s/SoulOfMagma.java
+++ b/Mage.Sets/src/mage/cards/s/SoulOfMagma.java
@@ -25,7 +25,7 @@ public final class SoulOfMagma extends CardImpl {
this.power = new MageInt(2);
this.toughness = new MageInt(2);
- Ability ability = new SpellCastControllerTriggeredAbility(new DamageTargetEffect(1), StaticFilters.FILTER_SPIRIT_OR_ARCANE_CARD, false);
+ Ability ability = new SpellCastControllerTriggeredAbility(new DamageTargetEffect(1), StaticFilters.FILTER_SPELL_SPIRIT_OR_ARCANE, false);
ability.addTarget(new TargetCreaturePermanent());
this.addAbility(ability);
}
diff --git a/Mage.Sets/src/mage/cards/s/SteelSabotage.java b/Mage.Sets/src/mage/cards/s/SteelSabotage.java
index bafd92e25c0..82b0acc36cb 100644
--- a/Mage.Sets/src/mage/cards/s/SteelSabotage.java
+++ b/Mage.Sets/src/mage/cards/s/SteelSabotage.java
@@ -1,28 +1,34 @@
-
package mage.cards.s;
-import java.util.UUID;
import mage.abilities.Mode;
import mage.abilities.effects.common.CounterTargetEffect;
import mage.abilities.effects.common.ReturnToHandTargetEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
-import mage.filter.common.FilterArtifactSpell;
+import mage.filter.FilterSpell;
import mage.target.TargetSpell;
import mage.target.common.TargetArtifactPermanent;
+import java.util.UUID;
+
/**
*
* @author North
*/
public final class SteelSabotage extends CardImpl {
+
+ private static final FilterSpell filter = new FilterSpell("artifact spell");
+ static {
+ filter.add(CardType.ARTIFACT.getPredicate());
+ }
+
public SteelSabotage(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{U}");
// Choose one - Counter target artifact spell; or return target artifact to its owner's hand.
this.getSpellAbility().addEffect(new CounterTargetEffect());
- this.getSpellAbility().addTarget(new TargetSpell(new FilterArtifactSpell()));
+ this.getSpellAbility().addTarget(new TargetSpell(filter));
Mode mode = new Mode(new ReturnToHandTargetEffect());
mode.addTarget(new TargetArtifactPermanent());
this.getSpellAbility().addMode(mode);
diff --git a/Mage.Sets/src/mage/cards/s/SurtrFieryJotun.java b/Mage.Sets/src/mage/cards/s/SurtrFieryJotun.java
index c775f00f854..1f8f6eec934 100644
--- a/Mage.Sets/src/mage/cards/s/SurtrFieryJotun.java
+++ b/Mage.Sets/src/mage/cards/s/SurtrFieryJotun.java
@@ -10,8 +10,7 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.SuperType;
-import mage.filter.FilterSpell;
-import mage.filter.common.FilterHistoricSpell;
+import mage.filter.StaticFilters;
import mage.target.common.TargetAnyTarget;
import java.util.UUID;
@@ -21,8 +20,6 @@ import java.util.UUID;
*/
public final class SurtrFieryJotun extends CardImpl {
- private static final FilterSpell filter = new FilterHistoricSpell();
-
public SurtrFieryJotun(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{R}{R}");
@@ -37,7 +34,7 @@ public final class SurtrFieryJotun extends CardImpl {
this.addAbility(TrampleAbility.getInstance());
// Whenever you cast a historic spell, Surtr, Fiery Jotun deals 3 damage to any target.
- Ability ability = new SpellCastControllerTriggeredAbility(new DamageTargetEffect(3), filter, false);
+ Ability ability = new SpellCastControllerTriggeredAbility(new DamageTargetEffect(3), StaticFilters.FILTER_SPELL_HISTORIC, false);
ability.addTarget(new TargetAnyTarget());
this.addAbility(ability);
}
diff --git a/Mage.Sets/src/mage/cards/t/Tallowisp.java b/Mage.Sets/src/mage/cards/t/Tallowisp.java
index f56734c047d..bf8df5cd6e2 100644
--- a/Mage.Sets/src/mage/cards/t/Tallowisp.java
+++ b/Mage.Sets/src/mage/cards/t/Tallowisp.java
@@ -1,10 +1,7 @@
-
package mage.cards.t;
-import java.util.UUID;
import mage.MageInt;
import mage.MageObject;
-import mage.abilities.Abilities;
import mage.abilities.Ability;
import mage.abilities.common.SpellCastControllerTriggeredAbility;
import mage.abilities.effects.common.search.SearchLibraryPutInHandEffect;
@@ -19,6 +16,8 @@ import mage.filter.predicate.Predicate;
import mage.game.Game;
import mage.target.common.TargetCardInLibrary;
+import java.util.UUID;
+
/**
*
* @author LevelX2
@@ -30,7 +29,7 @@ public final class Tallowisp extends CardImpl {
static {
filterAura.add(CardType.ENCHANTMENT.getPredicate());
filterAura.add(SubType.AURA.getPredicate());
- filterAura.add(new TallowispAbilityPredicate());
+ filterAura.add(TallowispAbilityPredicate.instance);
}
public Tallowisp(UUID ownerId, CardSetInfo setInfo) {
@@ -41,7 +40,7 @@ public final class Tallowisp extends CardImpl {
this.toughness = new MageInt(3);
// Whenever you cast a Spirit or Arcane spell, you may search your library for an Aura card with enchant creature, reveal it, and put it into your hand. If you do, shuffle your library.
- this.addAbility(new SpellCastControllerTriggeredAbility(new SearchLibraryPutInHandEffect(new TargetCardInLibrary(filterAura), true), StaticFilters.FILTER_SPIRIT_OR_ARCANE_CARD, true));
+ this.addAbility(new SpellCastControllerTriggeredAbility(new SearchLibraryPutInHandEffect(new TargetCardInLibrary(filterAura), true), StaticFilters.FILTER_SPELL_SPIRIT_OR_ARCANE, true));
}
private Tallowisp(final Tallowisp card) {
@@ -54,20 +53,14 @@ public final class Tallowisp extends CardImpl {
}
}
-class TallowispAbilityPredicate implements Predicate {
-
- public TallowispAbilityPredicate() {
- }
+enum TallowispAbilityPredicate implements Predicate {
+ instance;
@Override
public boolean apply(MageObject input, Game game) {
- Abilities abilities = input.getAbilities();
- for (int i = 0; i < abilities.size(); i++) {
- if (abilities.get(i) instanceof EnchantAbility) {
- String enchantText = abilities.get(i).getRule();
- if (enchantText.contentEquals("Enchant creature")) {
- return true;
- }
+ for (Ability ability : input.getAbilities()) {
+ if (ability instanceof EnchantAbility && ability.getRule().contentEquals("Enchant creature")) {
+ return true;
}
}
return false;
diff --git a/Mage.Sets/src/mage/cards/t/TellerOfTales.java b/Mage.Sets/src/mage/cards/t/TellerOfTales.java
index 3a7f5768061..f4c3b6670ba 100644
--- a/Mage.Sets/src/mage/cards/t/TellerOfTales.java
+++ b/Mage.Sets/src/mage/cards/t/TellerOfTales.java
@@ -30,7 +30,7 @@ public final class TellerOfTales extends CardImpl {
// Flying
this.addAbility(FlyingAbility.getInstance());
// Whenever you cast a Spirit or Arcane spell, you may tap or untap target creature.
- Ability ability = new SpellCastControllerTriggeredAbility(new MayTapOrUntapTargetEffect(), StaticFilters.FILTER_SPIRIT_OR_ARCANE_CARD, true);
+ Ability ability = new SpellCastControllerTriggeredAbility(new MayTapOrUntapTargetEffect(), StaticFilters.FILTER_SPELL_SPIRIT_OR_ARCANE, true);
ability.addTarget(new TargetCreaturePermanent());
this.addAbility(ability);
}
diff --git a/Mage.Sets/src/mage/cards/t/TesharAncestorsApostle.java b/Mage.Sets/src/mage/cards/t/TesharAncestorsApostle.java
index 10463db3189..5cf8715a3ce 100644
--- a/Mage.Sets/src/mage/cards/t/TesharAncestorsApostle.java
+++ b/Mage.Sets/src/mage/cards/t/TesharAncestorsApostle.java
@@ -1,7 +1,6 @@
package mage.cards.t;
-import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.SpellCastControllerTriggeredAbility;
@@ -14,11 +13,13 @@ import mage.constants.ComparisonType;
import mage.constants.SubType;
import mage.constants.SuperType;
import mage.filter.FilterCard;
+import mage.filter.StaticFilters;
import mage.filter.common.FilterCreatureCard;
-import mage.filter.common.FilterHistoricSpell;
import mage.filter.predicate.mageobject.ManaValuePredicate;
import mage.target.common.TargetCardInYourGraveyard;
+import java.util.UUID;
+
/**
*
* @author L_J
@@ -46,14 +47,14 @@ public final class TesharAncestorsApostle extends CardImpl {
// Whenever you cast a historic spell, return target creature card with converted mana cost 3 or less from your graveyard to the battlefield.
Ability ability = new SpellCastControllerTriggeredAbility(new ReturnFromGraveyardToBattlefieldTargetEffect()
.setText("return target creature card with mana value 3 or less from your graveyard to the battlefield. "
- + "(Artifacts, legendaries, and Sagas are historic.)"), new FilterHistoricSpell(), false);
+ + "(Artifacts, legendaries, and Sagas are historic.)"), StaticFilters.FILTER_SPELL_HISTORIC, false);
ability.addTarget(new TargetCardInYourGraveyard(filter));
this.addAbility(ability);
}
- private TesharAncestorsApostle(final TesharAncestorsApostle TesharAncestorsApostle) {
- super(TesharAncestorsApostle);
+ private TesharAncestorsApostle(final TesharAncestorsApostle card) {
+ super(card);
}
public TesharAncestorsApostle copy() {
diff --git a/Mage.Sets/src/mage/cards/t/ThiefOfHope.java b/Mage.Sets/src/mage/cards/t/ThiefOfHope.java
index 9f1eda77e5a..32baeef0f98 100644
--- a/Mage.Sets/src/mage/cards/t/ThiefOfHope.java
+++ b/Mage.Sets/src/mage/cards/t/ThiefOfHope.java
@@ -27,7 +27,7 @@ public final class ThiefOfHope extends CardImpl {
this.power = new MageInt(2);
this.toughness = new MageInt(2);
- Ability ability = new SpellCastControllerTriggeredAbility(new LoseLifeTargetEffect(1), StaticFilters.FILTER_SPIRIT_OR_ARCANE_CARD, false);
+ Ability ability = new SpellCastControllerTriggeredAbility(new LoseLifeTargetEffect(1), StaticFilters.FILTER_SPELL_SPIRIT_OR_ARCANE, false);
ability.addEffect(new GainLifeEffect(1).concatBy("and"));
ability.addTarget(new TargetOpponent());
this.addAbility(ability);
diff --git a/Mage.Sets/src/mage/cards/t/TraxosScourgeOfKroog.java b/Mage.Sets/src/mage/cards/t/TraxosScourgeOfKroog.java
index 11b6b09c7bc..87c266ddf40 100644
--- a/Mage.Sets/src/mage/cards/t/TraxosScourgeOfKroog.java
+++ b/Mage.Sets/src/mage/cards/t/TraxosScourgeOfKroog.java
@@ -14,7 +14,7 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.SuperType;
-import mage.filter.common.FilterHistoricSpell;
+import mage.filter.StaticFilters;
/**
*
@@ -39,7 +39,7 @@ public final class TraxosScourgeOfKroog extends CardImpl {
ability.addEffect(new DontUntapInControllersUntapStepSourceEffect());
this.addAbility(ability);
// Whenever you cast a historic spell untap Traxos.
- this.addAbility(new SpellCastControllerTriggeredAbility(new UntapSourceEffect(), new FilterHistoricSpell(), false));
+ this.addAbility(new SpellCastControllerTriggeredAbility(new UntapSourceEffect(), StaticFilters.FILTER_SPELL_HISTORIC, false));
}
private TraxosScourgeOfKroog(final TraxosScourgeOfKroog card) {
diff --git a/Mage.Sets/src/mage/cards/u/UrzasTome.java b/Mage.Sets/src/mage/cards/u/UrzasTome.java
index 7d33e6178d9..919ae0dd24a 100644
--- a/Mage.Sets/src/mage/cards/u/UrzasTome.java
+++ b/Mage.Sets/src/mage/cards/u/UrzasTome.java
@@ -12,8 +12,8 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Outcome;
-import mage.constants.Zone;
-import mage.filter.common.FilterHistoricCard;
+import mage.filter.FilterCard;
+import mage.filter.predicate.mageobject.HistoricPredicate;
import mage.game.Game;
import mage.players.Player;
import mage.target.common.TargetCardInYourGraveyard;
@@ -25,11 +25,17 @@ import java.util.UUID;
*/
public final class UrzasTome extends CardImpl {
+ private static final FilterCard filter = new FilterCard("historic card");
+ static {
+ filter.add(HistoricPredicate.instance);
+ }
+
public UrzasTome(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{2}");
// {3}, {T}: Draw a card. Then discard a card unless you exile a historic card from your graveyard.
- Ability ability = new SimpleActivatedAbility(new UrzasTomeEffect(), new GenericManaCost(3));
+ Ability ability = new SimpleActivatedAbility(new DrawCardSourceControllerEffect(1), new GenericManaCost(3));
+ ability.addEffect(new UrzasTomeEffect());
ability.addCost(new TapSourceCost());
this.addAbility(ability);
}
@@ -46,9 +52,14 @@ public final class UrzasTome extends CardImpl {
class UrzasTomeEffect extends OneShotEffect {
+ private static final FilterCard filter = new FilterCard("a historic card");
+ static {
+ filter.add(HistoricPredicate.instance);
+ }
+
UrzasTomeEffect() {
super(Outcome.Discard);
- staticText = "Draw a card. Then discard a card unless you exile a historic card from your graveyard";
+ staticText = "Then discard a card unless you exile a historic card from your graveyard";
}
private UrzasTomeEffect(final UrzasTomeEffect effect) {
@@ -63,20 +74,17 @@ class UrzasTomeEffect extends OneShotEffect {
@Override
public boolean apply(Game game, Ability source) {
Player controller = game.getPlayer(source.getControllerId());
- new DrawCardSourceControllerEffect(1).apply(game, source);
- if (controller != null
- && controller.chooseUse(Outcome.Exile, "Exile a historic card from your graveyard?", source, game)) {
- Cost cost = new ExileFromGraveCost(new TargetCardInYourGraveyard(new FilterHistoricCard()));
- if (cost.canPay(source, source, controller.getId(), game)) {
- if (cost.pay(source, game, source, controller.getId(), false, null)) {
- return true;
- }
+ if (controller == null) {
+ return false;
+ }
+ if (controller.chooseUse(Outcome.Exile, "Exile a historic card from your graveyard?", source, game)) {
+ Cost cost = new ExileFromGraveCost(new TargetCardInYourGraveyard(filter));
+ if (cost.canPay(source, source, controller.getId(), game)
+ && cost.pay(source, game, source, controller.getId(), false, null)) {
+ return true;
}
}
- if (controller != null) {
- controller.discard(1, false, false, source, game);
- return true;
- }
- return false;
+ controller.discard(1, false, false, source, game);
+ return true;
}
}
diff --git a/Mage.Sets/src/mage/cards/v/VadrokApexOfThunder.java b/Mage.Sets/src/mage/cards/v/VadrokApexOfThunder.java
index 8983c563218..cfc26c54b96 100644
--- a/Mage.Sets/src/mage/cards/v/VadrokApexOfThunder.java
+++ b/Mage.Sets/src/mage/cards/v/VadrokApexOfThunder.java
@@ -11,7 +11,7 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.*;
import mage.filter.FilterCard;
-import mage.filter.common.FilterNoncreatureCard;
+import mage.filter.predicate.Predicates;
import mage.filter.predicate.mageobject.ManaValuePredicate;
import mage.target.common.TargetCardInYourGraveyard;
@@ -22,11 +22,12 @@ import java.util.UUID;
*/
public final class VadrokApexOfThunder extends CardImpl {
- private static final FilterCard filter = new FilterNoncreatureCard(
+ private static final FilterCard filter = new FilterCard(
"noncreature card with mana value 3 or less from your graveyard"
);
static {
+ filter.add(Predicates.not(CardType.CREATURE.getPredicate()));
filter.add(new ManaValuePredicate(ComparisonType.FEWER_THAN, 4));
}
diff --git a/Mage.Sets/src/mage/cards/v/ValleyFloodcaller.java b/Mage.Sets/src/mage/cards/v/ValleyFloodcaller.java
index 093df79bfed..c29f61e1303 100644
--- a/Mage.Sets/src/mage/cards/v/ValleyFloodcaller.java
+++ b/Mage.Sets/src/mage/cards/v/ValleyFloodcaller.java
@@ -18,7 +18,6 @@ import mage.constants.TargetController;
import mage.filter.FilterCard;
import mage.filter.StaticFilters;
import mage.filter.common.FilterCreaturePermanent;
-import mage.filter.common.FilterNoncreatureCard;
import mage.filter.predicate.Predicates;
/**
@@ -27,12 +26,13 @@ import mage.filter.predicate.Predicates;
*/
public final class ValleyFloodcaller extends CardImpl {
- private static final FilterCard nonCreatureFilter = new FilterNoncreatureCard("noncreature spells");
+ private static final FilterCard nonCreatureFilter = new FilterCard("noncreature spells");
private static final FilterCreaturePermanent creatureFilter =
new FilterCreaturePermanent("Birds, Frogs, Otters, and Rats");
static {
+ nonCreatureFilter.add(Predicates.not(CardType.CREATURE.getPredicate()));
creatureFilter.add(TargetController.YOU.getControllerPredicate());
creatureFilter.add(Predicates.or(
SubType.BIRD.getPredicate(),
diff --git a/Mage.Sets/src/mage/cards/w/WaxmaneBaku.java b/Mage.Sets/src/mage/cards/w/WaxmaneBaku.java
index a1b9525baf1..ee721ad93cf 100644
--- a/Mage.Sets/src/mage/cards/w/WaxmaneBaku.java
+++ b/Mage.Sets/src/mage/cards/w/WaxmaneBaku.java
@@ -33,7 +33,7 @@ public final class WaxmaneBaku extends CardImpl {
this.toughness = new MageInt(2);
// Whenever you cast a Spirit or Arcane spell, you may put a ki counter on Waxmane Baku.
- this.addAbility(new SpellCastControllerTriggeredAbility(new AddCountersSourceEffect(CounterType.KI.createInstance()), StaticFilters.FILTER_SPIRIT_OR_ARCANE_CARD, true));
+ this.addAbility(new SpellCastControllerTriggeredAbility(new AddCountersSourceEffect(CounterType.KI.createInstance()), StaticFilters.FILTER_SPELL_SPIRIT_OR_ARCANE, true));
// {1}, Remove X ki counters from Waxmane Baku: Tap X target creatures.
Ability ability = new SimpleActivatedAbility(new TapTargetEffect("tap X target creatures"), new GenericManaCost(1));
diff --git a/Mage.Sets/src/mage/cards/y/YukiOnna.java b/Mage.Sets/src/mage/cards/y/YukiOnna.java
index cd765b28e73..b47c617e53e 100644
--- a/Mage.Sets/src/mage/cards/y/YukiOnna.java
+++ b/Mage.Sets/src/mage/cards/y/YukiOnna.java
@@ -32,7 +32,7 @@ public final class YukiOnna extends CardImpl {
ability.addTarget(new TargetArtifactPermanent());
this.addAbility(ability);
// Whenever you cast a Spirit or Arcane spell, you may return Yuki-Onna to its owner's hand.
- this.addAbility(new SpellCastControllerTriggeredAbility(new ReturnToHandSourceEffect(true), StaticFilters.FILTER_SPIRIT_OR_ARCANE_CARD, true));
+ this.addAbility(new SpellCastControllerTriggeredAbility(new ReturnToHandSourceEffect(true), StaticFilters.FILTER_SPELL_SPIRIT_OR_ARCANE, true));
}
private YukiOnna(final YukiOnna card) {
diff --git a/Mage/src/main/java/mage/filter/StaticFilters.java b/Mage/src/main/java/mage/filter/StaticFilters.java
index 33903843f47..201c60fc726 100644
--- a/Mage/src/main/java/mage/filter/StaticFilters.java
+++ b/Mage/src/main/java/mage/filter/StaticFilters.java
@@ -24,12 +24,6 @@ public final class StaticFilters {
private StaticFilters() {
}
- public static final FilterSpiritOrArcaneCard FILTER_SPIRIT_OR_ARCANE_CARD = new FilterSpiritOrArcaneCard();
-
- static {
- FILTER_SPIRIT_OR_ARCANE_CARD.setLockedFilter(true);
- }
-
public static final FilterCard FILTER_CARD = new FilterCard("card");
static {
@@ -158,24 +152,20 @@ public final class StaticFilters {
FILTER_CARD_CREATURE_A_GRAVEYARD.setLockedFilter(true);
}
- public static final FilterNoncreatureCard FILTER_CARD_NON_CREATURE = new FilterNoncreatureCard();
+ public static final FilterCard FILTER_CARD_NON_CREATURE = new FilterCard();
static {
+ FILTER_CARD_NON_CREATURE.add(Predicates.not(CardType.CREATURE.getPredicate()));
FILTER_CARD_NON_CREATURE.setLockedFilter(true);
}
- public static final FilterNoncreatureCard FILTER_CARD_A_NON_CREATURE = new FilterNoncreatureCard("a noncreature card");
+ public static final FilterCard FILTER_CARD_A_NON_CREATURE = new FilterCard("a noncreature card");
static {
+ FILTER_CARD_A_NON_CREATURE.add(Predicates.not(CardType.CREATURE.getPredicate()));
FILTER_CARD_A_NON_CREATURE.setLockedFilter(true);
}
- public static final FilterNoncreatureCard FILTER_CARDS_NON_CREATURE = new FilterNoncreatureCard("noncreature cards");
-
- static {
- FILTER_CARDS_NON_CREATURE.setLockedFilter(true);
- }
-
public static final FilterLandCard FILTER_CARD_LAND = new FilterLandCard();
static {
@@ -520,9 +510,13 @@ public final class StaticFilters {
FILTER_CONTROLLED_PERMANENT_LANDS.setLockedFilter(true);
}
- public static final FilterPermanent FILTER_CONTROLLED_PERMANENT_CREATURE_OR_PLANESWALKER = new FilterControlledCreatureOrPlaneswalkerPermanent("creature or planeswalker you control");
+ public static final FilterPermanent FILTER_CONTROLLED_PERMANENT_CREATURE_OR_PLANESWALKER = new FilterControlledPermanent("creature or planeswalker you control");
static {
+ FILTER_CONTROLLED_PERMANENT_CREATURE_OR_PLANESWALKER.add(Predicates.or(
+ CardType.CREATURE.getPredicate(),
+ CardType.PLANESWALKER.getPredicate()
+ ));
FILTER_CONTROLLED_PERMANENT_CREATURE_OR_PLANESWALKER.setLockedFilter(true);
}
@@ -1047,12 +1041,30 @@ public final class StaticFilters {
FILTER_SPELL_AN_ENCHANTMENT.setLockedFilter(true);
}
- public static final FilterSpell FILTER_SPELL_AN_ARTIFACT = new FilterArtifactSpell("an artifact spell");
+ public static final FilterSpell FILTER_SPELL_AN_ARTIFACT = new FilterSpell("an artifact spell");
static {
+ FILTER_SPELL_AN_ARTIFACT.add(CardType.ARTIFACT.getPredicate());
FILTER_SPELL_AN_ARTIFACT.setLockedFilter(true);
}
+ public static final FilterSpell FILTER_SPELL_SPIRIT_OR_ARCANE = new FilterSpell("a Spirit or Arcane spell");
+
+ static {
+ FILTER_SPELL_SPIRIT_OR_ARCANE.add(Predicates.or(
+ SubType.SPIRIT.getPredicate(),
+ SubType.ARCANE.getPredicate()
+ ));
+ FILTER_SPELL_SPIRIT_OR_ARCANE.setLockedFilter(true);
+ }
+
+ public static final FilterSpell FILTER_SPELL_HISTORIC = new FilterSpell("a historic spell");
+
+ static {
+ FILTER_SPELL_HISTORIC.add(HistoricPredicate.instance);
+ FILTER_SPELL_HISTORIC.setLockedFilter(true);
+ }
+
public static final FilterSpell FILTER_SPELL_KICKED_A = new FilterSpell("a kicked spell");
static {
diff --git a/Mage/src/main/java/mage/filter/common/FilterArtifactSpell.java b/Mage/src/main/java/mage/filter/common/FilterArtifactSpell.java
deleted file mode 100644
index dda5d74a7fb..00000000000
--- a/Mage/src/main/java/mage/filter/common/FilterArtifactSpell.java
+++ /dev/null
@@ -1,21 +0,0 @@
-
-package mage.filter.common;
-
-import mage.constants.CardType;
-import mage.filter.FilterSpell;
-
-/**
- *
- * @author Jgod
- */
-public class FilterArtifactSpell extends FilterSpell {
-
- public FilterArtifactSpell() {
- this("artifact spell");
- }
-
- public FilterArtifactSpell(String name) {
- super(name);
- this.add(CardType.ARTIFACT.getPredicate());
- }
-}
diff --git a/Mage/src/main/java/mage/filter/common/FilterControlledCreatureOrPlaneswalkerPermanent.java b/Mage/src/main/java/mage/filter/common/FilterControlledCreatureOrPlaneswalkerPermanent.java
deleted file mode 100644
index 44c62344baf..00000000000
--- a/Mage/src/main/java/mage/filter/common/FilterControlledCreatureOrPlaneswalkerPermanent.java
+++ /dev/null
@@ -1,46 +0,0 @@
-package mage.filter.common;
-
-import mage.constants.CardType;
-import mage.constants.SubType;
-import mage.filter.predicate.Predicates;
-
-/**
- * @author LevelX2
- */
-public class FilterControlledCreatureOrPlaneswalkerPermanent extends FilterControlledPermanent {
-
- public FilterControlledCreatureOrPlaneswalkerPermanent() {
- this("creature or planeswalker you control");
- }
-
- public FilterControlledCreatureOrPlaneswalkerPermanent(SubType subType) {
- this(subType, "a " + subType + " creature or a " + subType + " planeswalker");
- }
-
- public FilterControlledCreatureOrPlaneswalkerPermanent(SubType subType, String name) {
- super(name);
- this.add(Predicates.or(
- CardType.CREATURE.getPredicate(),
- CardType.PLANESWALKER.getPredicate()
- ));
- this.add(subType.getPredicate());
- }
-
- public FilterControlledCreatureOrPlaneswalkerPermanent(String name) {
- super(name);
- this.add(Predicates.or(
- CardType.CREATURE.getPredicate(),
- CardType.PLANESWALKER.getPredicate()
- ));
- }
-
- protected FilterControlledCreatureOrPlaneswalkerPermanent(final FilterControlledCreatureOrPlaneswalkerPermanent filter) {
- super(filter);
- }
-
- @Override
- public FilterControlledCreatureOrPlaneswalkerPermanent copy() {
- return new FilterControlledCreatureOrPlaneswalkerPermanent(this);
- }
-
-}
diff --git a/Mage/src/main/java/mage/filter/common/FilterHistoricCard.java b/Mage/src/main/java/mage/filter/common/FilterHistoricCard.java
deleted file mode 100644
index 159fef4a66b..00000000000
--- a/Mage/src/main/java/mage/filter/common/FilterHistoricCard.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package mage.filter.common;
-
-import mage.filter.FilterCard;
-import mage.filter.predicate.mageobject.HistoricPredicate;
-
-/**
- * @author LevelX2
- */
-public class FilterHistoricCard extends FilterCard {
-
- public FilterHistoricCard() {
- this("historic card");
- }
-
- public FilterHistoricCard(String name) {
- super(name);
- this.add(HistoricPredicate.instance);
- }
-
- protected FilterHistoricCard(final FilterHistoricCard filter) {
- super(filter);
- }
-
- @Override
- public FilterHistoricCard copy() {
- return new FilterHistoricCard(this);
- }
-}
diff --git a/Mage/src/main/java/mage/filter/common/FilterHistoricSpell.java b/Mage/src/main/java/mage/filter/common/FilterHistoricSpell.java
deleted file mode 100644
index df3cb607d1a..00000000000
--- a/Mage/src/main/java/mage/filter/common/FilterHistoricSpell.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package mage.filter.common;
-
-import mage.filter.FilterSpell;
-import mage.filter.predicate.mageobject.HistoricPredicate;
-
-/**
- * @author igoudt
- */
-public class FilterHistoricSpell extends FilterSpell {
-
- public FilterHistoricSpell() {
- super("a historic spell");
- this.add(HistoricPredicate.instance);
- }
-
- protected FilterHistoricSpell(final FilterHistoricSpell filter) {
- super(filter);
- }
-
- @Override
- public FilterHistoricSpell copy() {
- return new FilterHistoricSpell(this);
- }
-}
diff --git a/Mage/src/main/java/mage/filter/common/FilterInstantSpell.java b/Mage/src/main/java/mage/filter/common/FilterInstantSpell.java
deleted file mode 100644
index 0982049952b..00000000000
--- a/Mage/src/main/java/mage/filter/common/FilterInstantSpell.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package mage.filter.common;
-
-import mage.constants.CardType;
-import mage.filter.FilterSpell;
-
-public class FilterInstantSpell extends FilterSpell {
-
- public FilterInstantSpell() {
- this("instant spell");
- }
-
- public FilterInstantSpell(String name) {
- super(name);
- this.add(CardType.INSTANT.getPredicate());
- }
-
- protected FilterInstantSpell(final FilterInstantSpell filter) {
- super(filter);
- }
-
- @Override
- public FilterInstantSpell copy() {
- return new FilterInstantSpell(this);
- }
-
-}
\ No newline at end of file
diff --git a/Mage/src/main/java/mage/filter/common/FilterNoncreatureCard.java b/Mage/src/main/java/mage/filter/common/FilterNoncreatureCard.java
deleted file mode 100644
index 496b26863c2..00000000000
--- a/Mage/src/main/java/mage/filter/common/FilterNoncreatureCard.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package mage.filter.common;
-
-import mage.constants.CardType;
-import mage.filter.FilterCard;
-import mage.filter.predicate.Predicates;
-
-/**
- * @author ssouders412
- */
-public class FilterNoncreatureCard extends FilterCard {
-
- public FilterNoncreatureCard() {
- this("noncreature card");
- }
-
- public FilterNoncreatureCard(String name) {
- super(name);
- this.add(Predicates.not(CardType.CREATURE.getPredicate()));
- }
-
- protected FilterNoncreatureCard(final FilterNoncreatureCard filter) {
- super(filter);
- }
-
- @Override
- public FilterNoncreatureCard copy() {
- return new FilterNoncreatureCard(this);
- }
-}
diff --git a/Mage/src/main/java/mage/filter/common/FilterSpiritOrArcaneCard.java b/Mage/src/main/java/mage/filter/common/FilterSpiritOrArcaneCard.java
deleted file mode 100644
index ce187aefdc1..00000000000
--- a/Mage/src/main/java/mage/filter/common/FilterSpiritOrArcaneCard.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package mage.filter.common;
-
-import mage.constants.SubType;
-import mage.filter.FilterSpell;
-import mage.filter.predicate.Predicates;
-
-public class FilterSpiritOrArcaneCard extends FilterSpell {
-
- public FilterSpiritOrArcaneCard() {
- this("a Spirit or Arcane spell");
- }
-
- public FilterSpiritOrArcaneCard(String name) {
- super(name);
- this.add(Predicates.or(SubType.SPIRIT.getPredicate(), SubType.ARCANE.getPredicate()));
- }
-
- protected FilterSpiritOrArcaneCard(final FilterSpiritOrArcaneCard filter) {
- super(filter);
- }
-
- @Override
- public FilterSpiritOrArcaneCard copy() {
- return new FilterSpiritOrArcaneCard(this);
- }
-}
diff --git a/Mage/src/main/java/mage/target/common/TargetCreatureOrPlaneswalkerAmount.java b/Mage/src/main/java/mage/target/common/TargetCreatureOrPlaneswalkerAmount.java
index a508ead9533..6a8ffe544b7 100644
--- a/Mage/src/main/java/mage/target/common/TargetCreatureOrPlaneswalkerAmount.java
+++ b/Mage/src/main/java/mage/target/common/TargetCreatureOrPlaneswalkerAmount.java
@@ -1,6 +1,5 @@
package mage.target.common;
-import mage.filter.common.FilterControlledCreatureOrPlaneswalkerPermanent;
import mage.filter.common.FilterCreatureOrPlaneswalkerPermanent;
/**
@@ -53,22 +52,6 @@ public class TargetCreatureOrPlaneswalkerAmount extends TargetPermanentAmount {
super(amount, minNumberOfTargets, maxNumberOfTargets, filter);
}
- /**
- * IMPORTANT: Use more specific constructor if {@code amount} is not always the same number!
- *
- * @see TargetCreatureOrPlaneswalkerAmount#TargetCreatureOrPlaneswalkerAmount(int, FilterCreatureOrPlaneswalkerPermanent)
- */
- public TargetCreatureOrPlaneswalkerAmount(int amount, FilterControlledCreatureOrPlaneswalkerPermanent filter) {
- this(amount, amount > 3 ? 0 : 1, amount, filter);
- }
-
- /**
- * @see TargetCreatureOrPlaneswalkerAmount#TargetCreatureOrPlaneswalkerAmount(int, int, int, FilterCreatureOrPlaneswalkerPermanent)
- */
- public TargetCreatureOrPlaneswalkerAmount(int amount, int minNumberOfTargets, int maxNumberOfTargets, FilterControlledCreatureOrPlaneswalkerPermanent filter) {
- super(amount, minNumberOfTargets, maxNumberOfTargets, filter);
- }
-
private TargetCreatureOrPlaneswalkerAmount(final TargetCreatureOrPlaneswalkerAmount target) {
super(target);
}