diff --git a/src/magic/card/AEther_Vial.java b/src/magic/card/AEther_Vial.java index 24471a5ab3..69488a6906 100644 --- a/src/magic/card/AEther_Vial.java +++ b/src/magic/card/AEther_Vial.java @@ -62,8 +62,8 @@ public class AEther_Vial { @Override public MagicEvent getPermanentEvent(final MagicPermanent source,final MagicPayedCost payedCost) { - final MagicTargetFilter targetFilter = - new MagicTargetFilter.MagicCMCTargetFilter( + final MagicTargetFilter targetFilter = + new MagicTargetFilter.MagicCMCTargetFilter( MagicTargetFilter.TARGET_CREATURE_CARD_FROM_HAND, MagicTargetFilter.Operator.EQUAL, source.getCounters(MagicCounterType.Charge) diff --git a/src/magic/card/Bonehoard.java b/src/magic/card/Bonehoard.java index 6fc784a2a6..30842c3429 100644 --- a/src/magic/card/Bonehoard.java +++ b/src/magic/card/Bonehoard.java @@ -15,7 +15,7 @@ public class Bonehoard { @Override public void modPowerToughness(final MagicPermanent source,final MagicPermanent permanent,final MagicPowerToughness pt) { final MagicGame game = source.getGame(); - final int amount = game.filterTargets( + final int amount = game.filterCards( permanent.getController(), MagicTargetFilter.TARGET_CREATURE_CARD_FROM_ALL_GRAVEYARDS).size(); pt.add(amount,amount); diff --git a/src/magic/card/Cantivore.java b/src/magic/card/Cantivore.java index 67b3165ed3..e3fca796de 100644 --- a/src/magic/card/Cantivore.java +++ b/src/magic/card/Cantivore.java @@ -13,7 +13,7 @@ public class Cantivore { final MagicGame game, final MagicPlayer player, final MagicPowerToughness pt) { - final int size = game.filterTargets( + final int size = game.filterCards( player, MagicTargetFilter.TARGET_ENCHANTMENT_CARD_FROM_ALL_GRAVEYARDS).size(); pt.set(size, size); diff --git a/src/magic/card/Cognivore.java b/src/magic/card/Cognivore.java index ecf127cb7a..74e0eda3eb 100644 --- a/src/magic/card/Cognivore.java +++ b/src/magic/card/Cognivore.java @@ -13,7 +13,7 @@ public class Cognivore { final MagicGame game, final MagicPlayer player, final MagicPowerToughness pt) { - final int size = game.filterTargets( + final int size = game.filterCards( player, MagicTargetFilter.TARGET_INSTANT_CARD_FROM_ALL_GRAVEYARDS).size(); pt.set(size, size); diff --git a/src/magic/card/Grimoire_of_the_Dead.java b/src/magic/card/Grimoire_of_the_Dead.java index d39efba360..2fa0524de6 100644 --- a/src/magic/card/Grimoire_of_the_Dead.java +++ b/src/magic/card/Grimoire_of_the_Dead.java @@ -105,8 +105,8 @@ public class Grimoire_of_the_Dead { final MagicEvent event, final Object[] choiceResults) { final MagicPlayer player = event.getPlayer(); - final Collection targets = - game.filterTargets(player,MagicTargetFilter.TARGET_CREATURE_CARD_FROM_ALL_GRAVEYARDS); + final Collection targets = + game.filterCards(player,MagicTargetFilter.TARGET_CREATURE_CARD_FROM_ALL_GRAVEYARDS); for (final MagicTarget target : targets) { final MagicCard card = (MagicCard) target; if (card.getOwner().getGraveyard().contains(card)) { diff --git a/src/magic/card/Kodama_of_the_Center_Tree.java b/src/magic/card/Kodama_of_the_Center_Tree.java index 68b71bca9e..cb4fb60039 100644 --- a/src/magic/card/Kodama_of_the_Center_Tree.java +++ b/src/magic/card/Kodama_of_the_Center_Tree.java @@ -39,8 +39,8 @@ public class Kodama_of_the_Center_Tree { final MagicPlayer player = permanent.getController(); final int cmc = game.filterPermanents(player, MagicTargetFilter.TARGET_SPIRIT_YOU_CONTROL).size()+1; - final MagicTargetFilter targetFilter = - new MagicTargetFilter.MagicCMCTargetFilter( + final MagicTargetFilter targetFilter = + new MagicTargetFilter.MagicCMCTargetFilter( MagicTargetFilter.TARGET_SPIRIT_CARD_FROM_GRAVEYARD, MagicTargetFilter.Operator.LESS_THAN_OR_EQUAL, cmc diff --git a/src/magic/card/Lhurgoyf.java b/src/magic/card/Lhurgoyf.java index 1a5f42db4e..1aae1b04e9 100644 --- a/src/magic/card/Lhurgoyf.java +++ b/src/magic/card/Lhurgoyf.java @@ -10,7 +10,7 @@ public class Lhurgoyf { public static final MagicCDA CDA = new MagicCDA() { @Override public void modPowerToughness(final MagicGame game,final MagicPlayer player,final MagicPowerToughness pt) { - final int size = game.filterTargets(player,MagicTargetFilter.TARGET_CREATURE_CARD_FROM_ALL_GRAVEYARDS).size(); + final int size = game.filterCards(player,MagicTargetFilter.TARGET_CREATURE_CARD_FROM_ALL_GRAVEYARDS).size(); pt.set(size, size + 1); } }; diff --git a/src/magic/card/Magnivore.java b/src/magic/card/Magnivore.java index abf70a02e2..25042e79a0 100644 --- a/src/magic/card/Magnivore.java +++ b/src/magic/card/Magnivore.java @@ -13,7 +13,7 @@ public class Magnivore { final MagicGame game, final MagicPlayer player, final MagicPowerToughness pt) { - final int size = game.filterTargets( + final int size = game.filterCards( player, MagicTargetFilter.TARGET_SORCERY_CARD_FROM_ALL_GRAVEYARDS).size(); pt.set(size, size); diff --git a/src/magic/card/Mortivore.java b/src/magic/card/Mortivore.java index aa0f32b190..9afc6a5e31 100644 --- a/src/magic/card/Mortivore.java +++ b/src/magic/card/Mortivore.java @@ -11,7 +11,7 @@ public class Mortivore { @Override public void modPowerToughness(final MagicGame game,final MagicPlayer player,final MagicPowerToughness pt) { final int size = - game.filterTargets(player,MagicTargetFilter.TARGET_CREATURE_CARD_FROM_ALL_GRAVEYARDS).size(); + game.filterCards(player,MagicTargetFilter.TARGET_CREATURE_CARD_FROM_ALL_GRAVEYARDS).size(); pt.set(size, size); } }; diff --git a/src/magic/card/Terravore.java b/src/magic/card/Terravore.java index ee9c494547..fece604fa7 100644 --- a/src/magic/card/Terravore.java +++ b/src/magic/card/Terravore.java @@ -13,7 +13,7 @@ public class Terravore { final MagicGame game, final MagicPlayer player, final MagicPowerToughness pt) { - final int size = game.filterTargets( + final int size = game.filterCards( player, MagicTargetFilter.TARGET_LAND_CARD_FROM_ALL_GRAVEYARDS).size(); pt.set(size, size); diff --git a/src/magic/model/target/MagicTargetFilter.java b/src/magic/model/target/MagicTargetFilter.java index 24befae1d8..445958e4be 100644 --- a/src/magic/model/target/MagicTargetFilter.java +++ b/src/magic/model/target/MagicTargetFilter.java @@ -83,8 +83,8 @@ public interface MagicTargetFilter { } }; - MagicTargetFilter TARGET_PLAYER=new MagicTargetFilter() { - public boolean accept(final MagicGame game,final MagicPlayer player,final MagicTarget target) { + MagicTargetFilter TARGET_PLAYER=new MagicTargetFilter() { + public boolean accept(final MagicGame game,final MagicPlayer player,final MagicPlayer target) { return true; } public boolean acceptType(final MagicTargetType targetType) { @@ -92,8 +92,8 @@ public interface MagicTargetFilter { } }; - MagicTargetFilter TARGET_OPPONENT=new MagicTargetFilter() { - public boolean accept(final MagicGame game,final MagicPlayer player,final MagicTarget target) { + MagicTargetFilter TARGET_OPPONENT=new MagicTargetFilter() { + public boolean accept(final MagicGame game,final MagicPlayer player,final MagicPlayer target) { return target!=player; } public boolean acceptType(final MagicTargetType targetType) { @@ -106,7 +106,8 @@ public interface MagicTargetFilter { return target.isSpell()||target.isPermanent(); } public boolean acceptType(final MagicTargetType targetType) { - return targetType==MagicTargetType.Stack||targetType==MagicTargetType.Permanent; + return targetType==MagicTargetType.Stack || + targetType==MagicTargetType.Permanent; } }; @@ -261,8 +262,8 @@ public interface MagicTargetFilter { } }; - MagicTargetFilter TARGET_NONCREATURE=new MagicTargetFilter() { - public boolean accept(final MagicGame game,final MagicPlayer player,final MagicTarget target) { + MagicTargetFilter TARGET_NONCREATURE=new MagicTargetFilter() { + public boolean accept(final MagicGame game,final MagicPlayer player,final MagicPermanent target) { return !target.isCreature(); } public boolean acceptType(final MagicTargetType targetType) { @@ -814,13 +815,13 @@ public interface MagicTargetFilter { } }; - MagicTargetFilter TARGET_CARD_FROM_ALL_GRAVEYARDs = new MagicTargetFilter() { - public boolean accept(final MagicGame game,final MagicPlayer player,final MagicTarget target) { + MagicTargetFilter TARGET_CARD_FROM_ALL_GRAVEYARDs = new MagicTargetFilter() { + public boolean accept(final MagicGame game,final MagicPlayer player,final MagicCard target) { return true; } public boolean acceptType(final MagicTargetType targetType) { return targetType == MagicTargetType.Graveyard || - targetType == MagicTargetType.OpponentsGraveyard; + targetType == MagicTargetType.OpponentsGraveyard; } }; @@ -833,19 +834,19 @@ public interface MagicTargetFilter { } }; - MagicTargetFilter TARGET_CREATURE_CARD_WITH_INFECT_FROM_GRAVEYARD = new MagicTargetFilter() { - public boolean accept(final MagicGame game,final MagicPlayer player,final MagicTarget target) { + MagicTargetFilter TARGET_CREATURE_CARD_WITH_INFECT_FROM_GRAVEYARD = new MagicTargetFilter() { + public boolean accept(final MagicGame game,final MagicPlayer player,final MagicCard target) { final MagicCardDefinition cardDefinition = target.getCardDefinition(); return cardDefinition.isCreature() && - cardDefinition.hasAbility(MagicAbility.Infect); + cardDefinition.hasAbility(MagicAbility.Infect); } public boolean acceptType(final MagicTargetType targetType) { return targetType == MagicTargetType.Graveyard; } }; - MagicTargetFilter TARGET_PERMANENT_CARD_FROM_GRAVEYARD = new MagicTargetFilter() { - public boolean accept(final MagicGame game,final MagicPlayer player,final MagicTarget target) { + MagicTargetFilter TARGET_PERMANENT_CARD_FROM_GRAVEYARD = new MagicTargetFilter() { + public boolean accept(final MagicGame game,final MagicPlayer player,final MagicCard target) { return !target.getCardDefinition().isSpell(); } public boolean acceptType(final MagicTargetType targetType) { @@ -853,8 +854,8 @@ public interface MagicTargetFilter { } }; - MagicTargetFilter TARGET_PERMANENT_CARD_CMC_LEQ_3_FROM_GRAVEYARD=new MagicTargetFilter() { - public boolean accept(final MagicGame game,final MagicPlayer player,final MagicTarget target) { + MagicTargetFilter TARGET_PERMANENT_CARD_CMC_LEQ_3_FROM_GRAVEYARD=new MagicTargetFilter() { + public boolean accept(final MagicGame game,final MagicPlayer player,final MagicCard target) { final MagicCardDefinition cardDefinition = target.getCardDefinition(); return cardDefinition.getConvertedCost() <= 3 && !cardDefinition.isSpell(); } @@ -863,8 +864,8 @@ public interface MagicTargetFilter { } }; - MagicTargetFilter TARGET_CREATURE_CARD_FROM_OPPONENTS_GRAVEYARD=new MagicTargetFilter() { - public boolean accept(final MagicGame game,final MagicPlayer player,final MagicTarget target) { + MagicTargetFilter TARGET_CREATURE_CARD_FROM_OPPONENTS_GRAVEYARD=new MagicTargetFilter() { + public boolean accept(final MagicGame game,final MagicPlayer player,final MagicCard target) { return target.getCardDefinition().isCreature(); } public boolean acceptType(final MagicTargetType targetType) { @@ -883,8 +884,8 @@ public interface MagicTargetFilter { } }; - MagicTargetFilter TARGET_INSTANT_OR_SORCERY_CARD_FROM_OPPONENTS_GRAVEYARD=new MagicTargetFilter() { - public boolean accept(final MagicGame game,final MagicPlayer player,final MagicTarget target) { + MagicTargetFilter TARGET_INSTANT_OR_SORCERY_CARD_FROM_OPPONENTS_GRAVEYARD=new MagicTargetFilter() { + public boolean accept(final MagicGame game,final MagicPlayer player,final MagicCard target) { final MagicCardDefinition cardDefinition= target.getCardDefinition(); return cardDefinition.hasType(MagicType.Instant)||cardDefinition.hasType(MagicType.Sorcery); } @@ -893,8 +894,8 @@ public interface MagicTargetFilter { } }; - MagicTargetFilter TARGET_ENCHANTMENT_CARD_FROM_GRAVEYARD = new MagicTargetFilter() { - public boolean accept(final MagicGame game,final MagicPlayer player,final MagicTarget target) { + MagicTargetFilter TARGET_ENCHANTMENT_CARD_FROM_GRAVEYARD = new MagicTargetFilter() { + public boolean accept(final MagicGame game,final MagicPlayer player,final MagicCard target) { return target.getCardDefinition().hasType(MagicType.Enchantment); } public boolean acceptType(final MagicTargetType targetType) { @@ -902,8 +903,8 @@ public interface MagicTargetFilter { } }; - MagicTargetFilter TARGET_ARTIFACT_CARD_FROM_GRAVEYARD = new MagicTargetFilter() { - public boolean accept(final MagicGame game,final MagicPlayer player,final MagicTarget target) { + MagicTargetFilter TARGET_ARTIFACT_CARD_FROM_GRAVEYARD = new MagicTargetFilter() { + public boolean accept(final MagicGame game,final MagicPlayer player,final MagicCard target) { return target.getCardDefinition().hasType(MagicType.Artifact); } public boolean acceptType(final MagicTargetType targetType) { @@ -911,63 +912,69 @@ public interface MagicTargetFilter { } }; - MagicTargetFilter TARGET_CREATURE_CARD_FROM_ALL_GRAVEYARDS=new MagicTargetFilter() { - public boolean accept(final MagicGame game,final MagicPlayer player,final MagicTarget target) { + MagicTargetFilter TARGET_CREATURE_CARD_FROM_ALL_GRAVEYARDS=new MagicTargetFilter() { + public boolean accept(final MagicGame game,final MagicPlayer player,final MagicCard target) { return target.getCardDefinition().isCreature(); } public boolean acceptType(final MagicTargetType targetType) { - return targetType==MagicTargetType.Graveyard||targetType==MagicTargetType.OpponentsGraveyard; + return targetType==MagicTargetType.Graveyard || + targetType==MagicTargetType.OpponentsGraveyard; } }; - MagicTargetFilter TARGET_ENCHANTMENT_CARD_FROM_ALL_GRAVEYARDS=new MagicTargetFilter() { - public boolean accept(final MagicGame game,final MagicPlayer player,final MagicTarget target) { + MagicTargetFilter TARGET_ENCHANTMENT_CARD_FROM_ALL_GRAVEYARDS=new MagicTargetFilter() { + public boolean accept(final MagicGame game,final MagicPlayer player,final MagicCard target) { return target.getCardDefinition().isEnchantment(); } public boolean acceptType(final MagicTargetType targetType) { - return targetType==MagicTargetType.Graveyard||targetType==MagicTargetType.OpponentsGraveyard; + return targetType==MagicTargetType.Graveyard || + targetType==MagicTargetType.OpponentsGraveyard; } }; - MagicTargetFilter TARGET_INSTANT_CARD_FROM_ALL_GRAVEYARDS=new MagicTargetFilter() { - public boolean accept(final MagicGame game,final MagicPlayer player,final MagicTarget target) { + MagicTargetFilter TARGET_INSTANT_CARD_FROM_ALL_GRAVEYARDS=new MagicTargetFilter() { + public boolean accept(final MagicGame game,final MagicPlayer player,final MagicCard target) { return target.getCardDefinition().isInstant(); } public boolean acceptType(final MagicTargetType targetType) { - return targetType==MagicTargetType.Graveyard||targetType==MagicTargetType.OpponentsGraveyard; + return targetType==MagicTargetType.Graveyard || + targetType==MagicTargetType.OpponentsGraveyard; } }; - MagicTargetFilter TARGET_SORCERY_CARD_FROM_ALL_GRAVEYARDS=new MagicTargetFilter() { - public boolean accept(final MagicGame game,final MagicPlayer player,final MagicTarget target) { + MagicTargetFilter TARGET_SORCERY_CARD_FROM_ALL_GRAVEYARDS=new MagicTargetFilter() { + public boolean accept(final MagicGame game,final MagicPlayer player,final MagicCard target) { return target.getCardDefinition().isSorcery(); } public boolean acceptType(final MagicTargetType targetType) { - return targetType==MagicTargetType.Graveyard||targetType==MagicTargetType.OpponentsGraveyard; + return targetType==MagicTargetType.Graveyard || + targetType==MagicTargetType.OpponentsGraveyard; } }; - MagicTargetFilter TARGET_LAND_CARD_FROM_ALL_GRAVEYARDS=new MagicTargetFilter() { - public boolean accept(final MagicGame game,final MagicPlayer player,final MagicTarget target) { + MagicTargetFilter TARGET_LAND_CARD_FROM_ALL_GRAVEYARDS=new MagicTargetFilter() { + public boolean accept(final MagicGame game,final MagicPlayer player,final MagicCard target) { return target.getCardDefinition().isLand(); } public boolean acceptType(final MagicTargetType targetType) { - return targetType==MagicTargetType.Graveyard||targetType==MagicTargetType.OpponentsGraveyard; + return targetType==MagicTargetType.Graveyard || + targetType==MagicTargetType.OpponentsGraveyard; } }; - MagicTargetFilter TARGET_ARTIFACT_OR_CREATURE_CARD_FROM_ALL_GRAVEYARDS=new MagicTargetFilter() { - public boolean accept(final MagicGame game,final MagicPlayer player,final MagicTarget target) { + MagicTargetFilter TARGET_ARTIFACT_OR_CREATURE_CARD_FROM_ALL_GRAVEYARDS=new MagicTargetFilter() { + public boolean accept(final MagicGame game,final MagicPlayer player,final MagicCard target) { final MagicCardDefinition cardDefinition= target.getCardDefinition(); return cardDefinition.isCreature()||cardDefinition.isArtifact(); } public boolean acceptType(final MagicTargetType targetType) { - return targetType==MagicTargetType.Graveyard||targetType==MagicTargetType.OpponentsGraveyard; + return targetType==MagicTargetType.Graveyard || + targetType==MagicTargetType.OpponentsGraveyard; } }; - MagicTargetFilter TARGET_GOBLIN_CARD_FROM_GRAVEYARD=new MagicTargetFilter() { - public boolean accept(final MagicGame game,final MagicPlayer player,final MagicTarget target) { + MagicTargetFilter TARGET_GOBLIN_CARD_FROM_GRAVEYARD=new MagicTargetFilter() { + public boolean accept(final MagicGame game,final MagicPlayer player,final MagicCard target) { return target.getCardDefinition().hasSubType(MagicSubType.Goblin); } public boolean acceptType(final MagicTargetType targetType) { @@ -984,8 +991,8 @@ public interface MagicTargetFilter { } }; - MagicTargetFilter TARGET_SPIRIT_CARD_FROM_GRAVEYARD = new MagicTargetFilter() { - public boolean accept(final MagicGame game,final MagicPlayer player,final MagicTarget target) { + MagicTargetFilter TARGET_SPIRIT_CARD_FROM_GRAVEYARD = new MagicTargetFilter() { + public boolean accept(final MagicGame game,final MagicPlayer player,final MagicCard target) { return target.getCardDefinition().hasSubType(MagicSubType.Spirit); } public boolean acceptType(final MagicTargetType targetType) { @@ -1002,8 +1009,8 @@ public interface MagicTargetFilter { } }; - MagicTargetFilter TARGET_CARD_FROM_HAND = new MagicTargetFilter() { - public boolean accept(final MagicGame game,final MagicPlayer player,final MagicTarget target) { + MagicTargetFilter TARGET_CARD_FROM_HAND = new MagicTargetFilter() { + public boolean accept(final MagicGame game,final MagicPlayer player,final MagicCard target) { return true; } public boolean acceptType(final MagicTargetType targetType) { @@ -1011,8 +1018,8 @@ public interface MagicTargetFilter { } }; - MagicTargetFilter TARGET_CREATURE_CARD_FROM_HAND = new MagicTargetFilter() { - public boolean accept(final MagicGame game,final MagicPlayer player,final MagicTarget target) { + MagicTargetFilter TARGET_CREATURE_CARD_FROM_HAND = new MagicTargetFilter() { + public boolean accept(final MagicGame game,final MagicPlayer player,final MagicCard target) { return target.getCardDefinition().isCreature(); } public boolean acceptType(final MagicTargetType targetType) { @@ -1020,8 +1027,8 @@ public interface MagicTargetFilter { } }; - MagicTargetFilter TARGET_GREEN_CREATURE_CARD_FROM_HAND = new MagicTargetFilter() { - public boolean accept(final MagicGame game,final MagicPlayer player,final MagicTarget target) { + MagicTargetFilter TARGET_GREEN_CREATURE_CARD_FROM_HAND = new MagicTargetFilter() { + public boolean accept(final MagicGame game,final MagicPlayer player,final MagicCard target) { final MagicCardDefinition cardDefinition = target.getCardDefinition(); return cardDefinition.isCreature() && MagicColor.Green.hasColor(cardDefinition.getColorFlags()); } @@ -1040,8 +1047,8 @@ public interface MagicTargetFilter { } }; - MagicTargetFilter TARGET_BASIC_LAND_CARD_FROM_HAND = new MagicTargetFilter() { - public boolean accept(final MagicGame game,final MagicPlayer player,final MagicTarget target) { + MagicTargetFilter TARGET_BASIC_LAND_CARD_FROM_HAND = new MagicTargetFilter() { + public boolean accept(final MagicGame game,final MagicPlayer player,final MagicCard target) { final MagicCardDefinition cardDefinition = target.getCardDefinition(); return cardDefinition.isLand()&&cardDefinition.isBasic(); } @@ -1050,8 +1057,8 @@ public interface MagicTargetFilter { } }; - MagicTargetFilter TARGET_LAND_CARD_FROM_HAND = new MagicTargetFilter() { - public boolean accept(final MagicGame game,final MagicPlayer player,final MagicTarget target) { + MagicTargetFilter TARGET_LAND_CARD_FROM_HAND = new MagicTargetFilter() { + public boolean accept(final MagicGame game,final MagicPlayer player,final MagicCard target) { final MagicCardDefinition cardDefinition = target.getCardDefinition(); return cardDefinition.isLand(); } @@ -1060,8 +1067,8 @@ public interface MagicTargetFilter { } }; - MagicTargetFilter TARGET_GOBLIN_CARD_FROM_HAND = new MagicTargetFilter() { - public boolean accept(final MagicGame game,final MagicPlayer player,final MagicTarget target) { + MagicTargetFilter TARGET_GOBLIN_CARD_FROM_HAND = new MagicTargetFilter() { + public boolean accept(final MagicGame game,final MagicPlayer player,final MagicCard target) { final MagicCardDefinition cardDefinition = target.getCardDefinition(); return cardDefinition.hasSubType(MagicSubType.Goblin); } diff --git a/src/magic/model/trigger/MagicSoulshiftTrigger.java b/src/magic/model/trigger/MagicSoulshiftTrigger.java index ef356b9204..93aebc1bba 100644 --- a/src/magic/model/trigger/MagicSoulshiftTrigger.java +++ b/src/magic/model/trigger/MagicSoulshiftTrigger.java @@ -31,8 +31,8 @@ public class MagicSoulshiftTrigger extends MagicWhenPutIntoGraveyardTrigger { final MagicGraveyardTriggerData triggerData) { if (triggerData.fromLocation == MagicLocationType.Play) { final MagicPlayer player = permanent.getController(); - final MagicTargetFilter targetFilter = - new MagicTargetFilter.MagicCMCTargetFilter( + final MagicTargetFilter targetFilter = + new MagicTargetFilter.MagicCMCTargetFilter( MagicTargetFilter.TARGET_SPIRIT_CARD_FROM_GRAVEYARD, MagicTargetFilter.Operator.LESS_THAN_OR_EQUAL, cmc