use more specific type in magicTargetFilter

master
melvin 2012-10-14 22:08:26 +08:00
parent 05899c560a
commit c1f679c4bd
12 changed files with 81 additions and 74 deletions

View File

@ -62,8 +62,8 @@ public class AEther_Vial {
@Override
public MagicEvent getPermanentEvent(final MagicPermanent source,final MagicPayedCost payedCost) {
final MagicTargetFilter<MagicTarget> targetFilter =
new MagicTargetFilter.MagicCMCTargetFilter<MagicTarget>(
final MagicTargetFilter<MagicCard> targetFilter =
new MagicTargetFilter.MagicCMCTargetFilter<MagicCard>(
MagicTargetFilter.TARGET_CREATURE_CARD_FROM_HAND,
MagicTargetFilter.Operator.EQUAL,
source.getCounters(MagicCounterType.Charge)

View File

@ -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);

View File

@ -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);

View File

@ -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);

View File

@ -105,8 +105,8 @@ public class Grimoire_of_the_Dead {
final MagicEvent event,
final Object[] choiceResults) {
final MagicPlayer player = event.getPlayer();
final Collection<MagicTarget> targets =
game.filterTargets(player,MagicTargetFilter.TARGET_CREATURE_CARD_FROM_ALL_GRAVEYARDS);
final Collection<MagicCard> 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)) {

View File

@ -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<MagicTarget> targetFilter =
new MagicTargetFilter.MagicCMCTargetFilter<MagicTarget>(
final MagicTargetFilter<MagicCard> targetFilter =
new MagicTargetFilter.MagicCMCTargetFilter<MagicCard>(
MagicTargetFilter.TARGET_SPIRIT_CARD_FROM_GRAVEYARD,
MagicTargetFilter.Operator.LESS_THAN_OR_EQUAL,
cmc

View File

@ -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);
}
};

View File

@ -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);

View File

@ -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);
}
};

View File

@ -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);

View File

@ -83,8 +83,8 @@ public interface MagicTargetFilter<T extends MagicTarget> {
}
};
MagicTargetFilter<MagicTarget> TARGET_PLAYER=new MagicTargetFilter<MagicTarget>() {
public boolean accept(final MagicGame game,final MagicPlayer player,final MagicTarget target) {
MagicTargetFilter<MagicPlayer> TARGET_PLAYER=new MagicTargetFilter<MagicPlayer>() {
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<T extends MagicTarget> {
}
};
MagicTargetFilter<MagicTarget> TARGET_OPPONENT=new MagicTargetFilter<MagicTarget>() {
public boolean accept(final MagicGame game,final MagicPlayer player,final MagicTarget target) {
MagicTargetFilter<MagicPlayer> TARGET_OPPONENT=new MagicTargetFilter<MagicPlayer>() {
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<T extends MagicTarget> {
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<T extends MagicTarget> {
}
};
MagicTargetFilter<MagicTarget> TARGET_NONCREATURE=new MagicTargetFilter<MagicTarget>() {
public boolean accept(final MagicGame game,final MagicPlayer player,final MagicTarget target) {
MagicTargetFilter<MagicPermanent> TARGET_NONCREATURE=new MagicTargetFilter<MagicPermanent>() {
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<T extends MagicTarget> {
}
};
MagicTargetFilter<MagicTarget> TARGET_CARD_FROM_ALL_GRAVEYARDs = new MagicTargetFilter<MagicTarget>() {
public boolean accept(final MagicGame game,final MagicPlayer player,final MagicTarget target) {
MagicTargetFilter<MagicCard> TARGET_CARD_FROM_ALL_GRAVEYARDs = new MagicTargetFilter<MagicCard>() {
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<T extends MagicTarget> {
}
};
MagicTargetFilter<MagicTarget> TARGET_CREATURE_CARD_WITH_INFECT_FROM_GRAVEYARD = new MagicTargetFilter<MagicTarget>() {
public boolean accept(final MagicGame game,final MagicPlayer player,final MagicTarget target) {
MagicTargetFilter<MagicCard> TARGET_CREATURE_CARD_WITH_INFECT_FROM_GRAVEYARD = new MagicTargetFilter<MagicCard>() {
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<MagicTarget> TARGET_PERMANENT_CARD_FROM_GRAVEYARD = new MagicTargetFilter<MagicTarget>() {
public boolean accept(final MagicGame game,final MagicPlayer player,final MagicTarget target) {
MagicTargetFilter<MagicCard> TARGET_PERMANENT_CARD_FROM_GRAVEYARD = new MagicTargetFilter<MagicCard>() {
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<T extends MagicTarget> {
}
};
MagicTargetFilter<MagicTarget> TARGET_PERMANENT_CARD_CMC_LEQ_3_FROM_GRAVEYARD=new MagicTargetFilter<MagicTarget>() {
public boolean accept(final MagicGame game,final MagicPlayer player,final MagicTarget target) {
MagicTargetFilter<MagicCard> TARGET_PERMANENT_CARD_CMC_LEQ_3_FROM_GRAVEYARD=new MagicTargetFilter<MagicCard>() {
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<T extends MagicTarget> {
}
};
MagicTargetFilter<MagicTarget> TARGET_CREATURE_CARD_FROM_OPPONENTS_GRAVEYARD=new MagicTargetFilter<MagicTarget>() {
public boolean accept(final MagicGame game,final MagicPlayer player,final MagicTarget target) {
MagicTargetFilter<MagicCard> TARGET_CREATURE_CARD_FROM_OPPONENTS_GRAVEYARD=new MagicTargetFilter<MagicCard>() {
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<T extends MagicTarget> {
}
};
MagicTargetFilter<MagicTarget> TARGET_INSTANT_OR_SORCERY_CARD_FROM_OPPONENTS_GRAVEYARD=new MagicTargetFilter<MagicTarget>() {
public boolean accept(final MagicGame game,final MagicPlayer player,final MagicTarget target) {
MagicTargetFilter<MagicCard> TARGET_INSTANT_OR_SORCERY_CARD_FROM_OPPONENTS_GRAVEYARD=new MagicTargetFilter<MagicCard>() {
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<T extends MagicTarget> {
}
};
MagicTargetFilter<MagicTarget> TARGET_ENCHANTMENT_CARD_FROM_GRAVEYARD = new MagicTargetFilter<MagicTarget>() {
public boolean accept(final MagicGame game,final MagicPlayer player,final MagicTarget target) {
MagicTargetFilter<MagicCard> TARGET_ENCHANTMENT_CARD_FROM_GRAVEYARD = new MagicTargetFilter<MagicCard>() {
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<T extends MagicTarget> {
}
};
MagicTargetFilter<MagicTarget> TARGET_ARTIFACT_CARD_FROM_GRAVEYARD = new MagicTargetFilter<MagicTarget>() {
public boolean accept(final MagicGame game,final MagicPlayer player,final MagicTarget target) {
MagicTargetFilter<MagicCard> TARGET_ARTIFACT_CARD_FROM_GRAVEYARD = new MagicTargetFilter<MagicCard>() {
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<T extends MagicTarget> {
}
};
MagicTargetFilter<MagicTarget> TARGET_CREATURE_CARD_FROM_ALL_GRAVEYARDS=new MagicTargetFilter<MagicTarget>() {
public boolean accept(final MagicGame game,final MagicPlayer player,final MagicTarget target) {
MagicTargetFilter<MagicCard> TARGET_CREATURE_CARD_FROM_ALL_GRAVEYARDS=new MagicTargetFilter<MagicCard>() {
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<MagicTarget> TARGET_ENCHANTMENT_CARD_FROM_ALL_GRAVEYARDS=new MagicTargetFilter<MagicTarget>() {
public boolean accept(final MagicGame game,final MagicPlayer player,final MagicTarget target) {
MagicTargetFilter<MagicCard> TARGET_ENCHANTMENT_CARD_FROM_ALL_GRAVEYARDS=new MagicTargetFilter<MagicCard>() {
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<MagicTarget> TARGET_INSTANT_CARD_FROM_ALL_GRAVEYARDS=new MagicTargetFilter<MagicTarget>() {
public boolean accept(final MagicGame game,final MagicPlayer player,final MagicTarget target) {
MagicTargetFilter<MagicCard> TARGET_INSTANT_CARD_FROM_ALL_GRAVEYARDS=new MagicTargetFilter<MagicCard>() {
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<MagicTarget> TARGET_SORCERY_CARD_FROM_ALL_GRAVEYARDS=new MagicTargetFilter<MagicTarget>() {
public boolean accept(final MagicGame game,final MagicPlayer player,final MagicTarget target) {
MagicTargetFilter<MagicCard> TARGET_SORCERY_CARD_FROM_ALL_GRAVEYARDS=new MagicTargetFilter<MagicCard>() {
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<MagicTarget> TARGET_LAND_CARD_FROM_ALL_GRAVEYARDS=new MagicTargetFilter<MagicTarget>() {
public boolean accept(final MagicGame game,final MagicPlayer player,final MagicTarget target) {
MagicTargetFilter<MagicCard> TARGET_LAND_CARD_FROM_ALL_GRAVEYARDS=new MagicTargetFilter<MagicCard>() {
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<MagicTarget> TARGET_ARTIFACT_OR_CREATURE_CARD_FROM_ALL_GRAVEYARDS=new MagicTargetFilter<MagicTarget>() {
public boolean accept(final MagicGame game,final MagicPlayer player,final MagicTarget target) {
MagicTargetFilter<MagicCard> TARGET_ARTIFACT_OR_CREATURE_CARD_FROM_ALL_GRAVEYARDS=new MagicTargetFilter<MagicCard>() {
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<MagicTarget> TARGET_GOBLIN_CARD_FROM_GRAVEYARD=new MagicTargetFilter<MagicTarget>() {
public boolean accept(final MagicGame game,final MagicPlayer player,final MagicTarget target) {
MagicTargetFilter<MagicCard> TARGET_GOBLIN_CARD_FROM_GRAVEYARD=new MagicTargetFilter<MagicCard>() {
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<T extends MagicTarget> {
}
};
MagicTargetFilter<MagicTarget> TARGET_SPIRIT_CARD_FROM_GRAVEYARD = new MagicTargetFilter<MagicTarget>() {
public boolean accept(final MagicGame game,final MagicPlayer player,final MagicTarget target) {
MagicTargetFilter<MagicCard> TARGET_SPIRIT_CARD_FROM_GRAVEYARD = new MagicTargetFilter<MagicCard>() {
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<T extends MagicTarget> {
}
};
MagicTargetFilter<MagicTarget> TARGET_CARD_FROM_HAND = new MagicTargetFilter<MagicTarget>() {
public boolean accept(final MagicGame game,final MagicPlayer player,final MagicTarget target) {
MagicTargetFilter<MagicCard> TARGET_CARD_FROM_HAND = new MagicTargetFilter<MagicCard>() {
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<T extends MagicTarget> {
}
};
MagicTargetFilter<MagicTarget> TARGET_CREATURE_CARD_FROM_HAND = new MagicTargetFilter<MagicTarget>() {
public boolean accept(final MagicGame game,final MagicPlayer player,final MagicTarget target) {
MagicTargetFilter<MagicCard> TARGET_CREATURE_CARD_FROM_HAND = new MagicTargetFilter<MagicCard>() {
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<T extends MagicTarget> {
}
};
MagicTargetFilter<MagicTarget> TARGET_GREEN_CREATURE_CARD_FROM_HAND = new MagicTargetFilter<MagicTarget>() {
public boolean accept(final MagicGame game,final MagicPlayer player,final MagicTarget target) {
MagicTargetFilter<MagicCard> TARGET_GREEN_CREATURE_CARD_FROM_HAND = new MagicTargetFilter<MagicCard>() {
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<T extends MagicTarget> {
}
};
MagicTargetFilter<MagicTarget> TARGET_BASIC_LAND_CARD_FROM_HAND = new MagicTargetFilter<MagicTarget>() {
public boolean accept(final MagicGame game,final MagicPlayer player,final MagicTarget target) {
MagicTargetFilter<MagicCard> TARGET_BASIC_LAND_CARD_FROM_HAND = new MagicTargetFilter<MagicCard>() {
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<T extends MagicTarget> {
}
};
MagicTargetFilter<MagicTarget> TARGET_LAND_CARD_FROM_HAND = new MagicTargetFilter<MagicTarget>() {
public boolean accept(final MagicGame game,final MagicPlayer player,final MagicTarget target) {
MagicTargetFilter<MagicCard> TARGET_LAND_CARD_FROM_HAND = new MagicTargetFilter<MagicCard>() {
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<T extends MagicTarget> {
}
};
MagicTargetFilter<MagicTarget> TARGET_GOBLIN_CARD_FROM_HAND = new MagicTargetFilter<MagicTarget>() {
public boolean accept(final MagicGame game,final MagicPlayer player,final MagicTarget target) {
MagicTargetFilter<MagicCard> TARGET_GOBLIN_CARD_FROM_HAND = new MagicTargetFilter<MagicCard>() {
public boolean accept(final MagicGame game,final MagicPlayer player,final MagicCard target) {
final MagicCardDefinition cardDefinition = target.getCardDefinition();
return cardDefinition.hasSubType(MagicSubType.Goblin);
}

View File

@ -31,8 +31,8 @@ public class MagicSoulshiftTrigger extends MagicWhenPutIntoGraveyardTrigger {
final MagicGraveyardTriggerData triggerData) {
if (triggerData.fromLocation == MagicLocationType.Play) {
final MagicPlayer player = permanent.getController();
final MagicTargetFilter<MagicTarget> targetFilter =
new MagicTargetFilter.MagicCMCTargetFilter<MagicTarget>(
final MagicTargetFilter<MagicCard> targetFilter =
new MagicTargetFilter.MagicCMCTargetFilter<MagicCard>(
MagicTargetFilter.TARGET_SPIRIT_CARD_FROM_GRAVEYARD,
MagicTargetFilter.Operator.LESS_THAN_OR_EQUAL,
cmc