refactor FilterBasicLandCard

This commit is contained in:
theelk801 2025-07-25 11:36:56 -04:00
parent 68f2d7468c
commit 8f4e8645fa
52 changed files with 214 additions and 365 deletions

View file

@ -13,10 +13,8 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.filter.FilterCard;
import mage.filter.FilterPermanent;
import mage.filter.StaticFilters;
import mage.filter.common.FilterBasicLandCard;
import mage.filter.common.FilterLandPermanent;
import mage.filter.predicate.permanent.DefendingPlayerControlsSourceAttackingPredicate;
import mage.game.Controllable;
@ -32,8 +30,6 @@ import java.util.stream.Collectors;
*/
public final class AerialSurveyor extends CardImpl {
private static final FilterCard filter = new FilterBasicLandCard(SubType.PLAINS);
public AerialSurveyor(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{2}{W}");
@ -45,7 +41,7 @@ public final class AerialSurveyor extends CardImpl {
this.addAbility(FlyingAbility.getInstance());
// Whenever Aerial Surveyor attacks, if defending player controls more lands than you, search your library for a basic Plains card, put it onto the battlefield tapped, then shuffle.
this.addAbility(new AttacksTriggeredAbility(new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(filter), true))
this.addAbility(new AttacksTriggeredAbility(new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(StaticFilters.FILTER_CARD_BASIC_PLAINS), true))
.withInterveningIf(AerialSurveyorCondition.instance)
.addHint(LandsYouControlHint.instance)
.addHint(AerialSurveyorHint.instance));

View file

@ -14,8 +14,7 @@ import mage.cards.CardSetInfo;
import mage.constants.AbilityWord;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.SuperType;
import mage.filter.FilterCard;
import mage.filter.StaticFilters;
import mage.target.common.TargetCardInLibrary;
import java.util.UUID;
@ -25,13 +24,6 @@ import java.util.UUID;
*/
public final class AmbitiousFarmhand extends CardImpl {
private static final FilterCard filter = new FilterCard("basic Plains card");
static {
filter.add(SuperType.BASIC.getPredicate());
filter.add(SubType.PLAINS.getPredicate());
}
public AmbitiousFarmhand(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{W}");
@ -43,7 +35,7 @@ public final class AmbitiousFarmhand extends CardImpl {
// When Ambitious Farmhand enters the battlefield, you may search your library for a basic Plains card, reveal it, put it into your hand, then shuffle.
this.addAbility(new EntersBattlefieldTriggeredAbility(
new SearchLibraryPutInHandEffect(new TargetCardInLibrary(filter), true), true
new SearchLibraryPutInHandEffect(new TargetCardInLibrary(StaticFilters.FILTER_CARD_BASIC_PLAINS), true), true
));
// Coven{1}{W}{W}: Transform Ambitious Farmhand. Activate only if you control three or more creatures with different powers.

View file

@ -9,10 +9,7 @@ import mage.abilities.effects.common.search.SearchLibraryPutInHandEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.SuperType;
import mage.constants.TargetController;
import mage.filter.FilterCard;
import mage.filter.FilterPermanent;
import mage.filter.StaticFilters;
import mage.filter.common.FilterLandPermanent;
@ -26,13 +23,10 @@ import java.util.UUID;
*/
public final class ArchaeomancersMap extends CardImpl {
private static final FilterCard filter = new FilterCard("basic Plains cards");
private static final FilterPermanent filter2 = new FilterLandPermanent("a land an opponent controls");
private static final FilterPermanent filter = new FilterLandPermanent("a land an opponent controls");
static {
filter.add(SubType.PLAINS.getPredicate());
filter.add(SuperType.BASIC.getPredicate());
filter2.add(TargetController.OPPONENT.getControllerPredicate());
filter.add(TargetController.OPPONENT.getControllerPredicate());
}
public ArchaeomancersMap(UUID ownerId, CardSetInfo setInfo) {
@ -40,12 +34,12 @@ public final class ArchaeomancersMap extends CardImpl {
// When Archaeomancer's Map enters the battlefield, search your library for up to two basic Plains cards, reveal them, put them into your hand, then shuffle.
this.addAbility(new EntersBattlefieldTriggeredAbility(
new SearchLibraryPutInHandEffect(new TargetCardInLibrary(0, 2, filter), true)
new SearchLibraryPutInHandEffect(new TargetCardInLibrary(0, 2, StaticFilters.FILTER_CARD_BASIC_PLAINS), true)
));
// Whenever a land enters the battlefield under an opponent's control, if that player controls more lands than you, you may put a land card from your hand onto the battlefield.
this.addAbility(new EntersBattlefieldAllTriggeredAbility(
new PutCardFromHandOntoBattlefieldEffect(StaticFilters.FILTER_CARD_LAND_A), filter2
new PutCardFromHandOntoBattlefieldEffect(StaticFilters.FILTER_CARD_LAND_A), filter
).withInterveningIf(ArchaeomancersMapCondition.instance));
}

View file

@ -1,7 +1,5 @@
package mage.cards.b;
import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.common.SacrificeSourceCost;
@ -11,11 +9,15 @@ import mage.abilities.effects.common.search.SearchLibraryPutInPlayEffect;
import mage.abilities.mana.ColorlessManaAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.*;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.SuperType;
import mage.filter.FilterCard;
import mage.filter.predicate.Predicates;
import mage.target.common.TargetCardInLibrary;
import java.util.UUID;
/**
* @author North
*/
@ -24,7 +26,6 @@ public final class BantPanorama extends CardImpl {
private static final FilterCard filter = new FilterCard("a basic Forest, Plains, or Island card");
static {
filter.add(CardType.LAND.getPredicate());
filter.add(SuperType.BASIC.getPredicate());
filter.add(Predicates.or(
SubType.FOREST.getPredicate(),

View file

@ -1,40 +1,31 @@
package mage.cards.b;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.common.EntersBattlefieldThisOrAnotherTriggeredAbility;
import mage.abilities.effects.common.GainLifeEffect;
import mage.abilities.effects.common.search.SearchLibraryPutOntoBattlefieldTappedRestInHandEffect;
import mage.cards.OmenCard;
import mage.constants.SubType;
import mage.abilities.keyword.FlyingAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.cards.OmenCard;
import mage.constants.CardType;
import mage.constants.SuperType;
import mage.constants.SubType;
import mage.filter.FilterCard;
import mage.filter.common.FilterBasicLandCard;
import mage.filter.common.FilterControlledCreaturePermanent;
import mage.filter.common.FilterBasicCard;
import mage.filter.common.FilterCreaturePermanent;
import mage.target.Target;
import mage.target.common.TargetCardInLibrary;
import java.util.UUID;
/**
*
* @author Jmlundeen
*/
public final class BloomvineRegent extends OmenCard {
private static final FilterCard filter = new FilterCard("basic Forest cards");
static {
filter.add(SubType.FOREST.getPredicate());
filter.add(SuperType.BASIC.getPredicate());
}
private static final FilterCard filter = new FilterBasicCard(SubType.FOREST, "basic Forest cards");
public BloomvineRegent(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, new CardType[]{CardType.SORCERY}, "{3}{G}{G}", "Claim Territory", "{2}{G}");
this.subtype.add(SubType.DRAGON);
this.power = new MageInt(4);
this.toughness = new MageInt(5);

View file

@ -10,9 +10,9 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SagaChapter;
import mage.constants.SubType;
import mage.constants.SuperType;
import mage.filter.FilterCard;
import mage.filter.common.FilterLandCard;
import mage.filter.StaticFilters;
import mage.filter.common.FilterBasicCard;
import mage.target.common.TargetCardInLibrary;
import mage.target.common.TargetCardInYourGraveyard;
@ -23,13 +23,7 @@ import java.util.UUID;
*/
public final class BoseijuReachesSkyward extends CardImpl {
private static final FilterCard filter = new FilterCard("basic Forest cards");
private static final FilterCard filter2 = new FilterLandCard("land card from your graveyard");
static {
filter.add(SuperType.BASIC.getPredicate());
filter.add(SubType.FOREST.getPredicate());
}
private static final FilterCard filter = new FilterBasicCard(SubType.FOREST, "basic Forest cards");
public BoseijuReachesSkyward(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{3}{G}");
@ -52,7 +46,7 @@ public final class BoseijuReachesSkyward extends CardImpl {
sagaAbility.addChapterEffect(
this, SagaChapter.CHAPTER_II, SagaChapter.CHAPTER_II,
new PutOnLibraryTargetEffect(true),
new TargetCardInYourGraveyard(0, 1, filter2)
new TargetCardInYourGraveyard(0, 1, StaticFilters.FILTER_CARD_LAND_FROM_YOUR_GRAVEYARD)
);
// III Exile this Saga, then return it to the battlefield transformed under your control.

View file

@ -14,7 +14,7 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.filter.FilterCard;
import mage.filter.common.FilterBasicLandCard;
import mage.filter.common.FilterBasicCard;
import mage.filter.predicate.Predicates;
import mage.target.common.TargetCardInLibrary;
@ -25,7 +25,7 @@ import java.util.UUID;
*/
public final class BountifulLandscape extends CardImpl {
private static final FilterCard filter = new FilterBasicLandCard("a basic Forest, Island, or Mountain card");
private static final FilterCard filter = new FilterBasicCard("a basic Forest, Island, or Mountain card");
static {
filter.add(Predicates.or(

View file

@ -1,13 +1,12 @@
package mage.cards.c;
import java.util.UUID;
import mage.Mana;
import mage.abilities.Ability;
import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.costs.mana.GenericManaCost;
import mage.abilities.dynamicvalue.DynamicValue;
import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount;
import mage.abilities.hint.Hint;
import mage.abilities.hint.ValueHint;
import mage.abilities.mana.ColorlessManaAbility;
import mage.abilities.mana.DynamicManaAbility;
@ -16,21 +15,26 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.SuperType;
import mage.filter.common.FilterControlledLandPermanent;
import mage.filter.FilterPermanent;
import mage.filter.common.FilterControlledPermanent;
import java.util.UUID;
/**
* @author JRHerlehy
* Created on 4/7/18.
* Created on 4/7/18.
*/
public final class CabalStronghold extends CardImpl {
private static final FilterControlledLandPermanent filter = new FilterControlledLandPermanent("basic Swamp you control");
private static final FilterPermanent filter = new FilterControlledPermanent(SubType.SWAMP, "basic Swamp you control");
static {
filter.add(SuperType.BASIC.getPredicate());
filter.add(SubType.SWAMP.getPredicate());
}
private static final DynamicValue xValue = new PermanentsOnBattlefieldCount(filter);
private static final Hint hint = new ValueHint("Basic Swamps you control", xValue);
public CabalStronghold(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.LAND}, "");
@ -38,9 +42,9 @@ public final class CabalStronghold extends CardImpl {
this.addAbility(new ColorlessManaAbility());
// {3}, {T}: Add {B} for each basic Swamp you control.
Ability ability = new DynamicManaAbility(Mana.BlackMana(1), new PermanentsOnBattlefieldCount(filter), new GenericManaCost(3));
Ability ability = new DynamicManaAbility(Mana.BlackMana(1), xValue, new GenericManaCost(3));
ability.addCost(new TapSourceCost());
this.addAbility(ability.addHint(new ValueHint("Basic Swamps you control", new PermanentsOnBattlefieldCount(filter))));
this.addAbility(ability.addHint(hint));
}
private CabalStronghold(final CabalStronghold card) {

View file

@ -12,13 +12,10 @@ import mage.abilities.keyword.CantBeBlockedSourceAbility;
import mage.cards.Card;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Outcome;
import mage.constants.SubType;
import mage.constants.Zone;
import mage.constants.*;
import mage.filter.FilterCard;
import mage.filter.StaticFilters;
import mage.filter.common.FilterBasicLandCard;
import mage.filter.common.FilterLandCard;
import mage.filter.predicate.Predicate;
import mage.game.Game;
import mage.game.permanent.Permanent;
@ -101,7 +98,8 @@ class CanoptekWraithEffect extends OneShotEffect {
if (permanent == null) {
return false;
}
FilterCard filter = new FilterBasicLandCard("basic land cards with the same name as the chosen land");
FilterCard filter = new FilterLandCard("basic land cards with the same name as the chosen land");
filter.add(SuperType.BASIC.getPredicate());
filter.add(new CanoptekWraithPredicate(permanent));
TargetCardInLibrary targetCard = new TargetCardInLibrary(0, 2, filter);
player.searchLibrary(targetCard, source, game);
@ -129,4 +127,4 @@ class CanoptekWraithPredicate implements Predicate<Card> {
public boolean apply(Card input, Game game) {
return CardUtil.haveSameNames(permanent, input);
}
}
}

View file

@ -8,9 +8,7 @@ import mage.abilities.keyword.CraftAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.filter.FilterCard;
import mage.filter.common.FilterBasicLandCard;
import mage.filter.StaticFilters;
import mage.target.common.TargetCardInLibrary;
import java.util.UUID;
@ -20,15 +18,13 @@ import java.util.UUID;
*/
public final class ClayFiredBricks extends CardImpl {
private static final FilterCard filter = new FilterBasicLandCard(SubType.PLAINS);
public ClayFiredBricks(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{1}{W}");
this.secondSideCardClazz = mage.cards.c.CosmiumKiln.class;
// When Clay-Fired Bricks enters the battlefield, search your library for a basic Plains card, reveal it, put it into your hand, then shuffle. You gain 2 life.
Ability ability = new EntersBattlefieldTriggeredAbility(
new SearchLibraryPutInHandEffect(new TargetCardInLibrary(filter), true)
new SearchLibraryPutInHandEffect(new TargetCardInLibrary(StaticFilters.FILTER_CARD_BASIC_PLAINS), true)
);
ability.addEffect(new GainLifeEffect(2));
this.addAbility(ability);

View file

@ -14,7 +14,7 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.filter.FilterCard;
import mage.filter.common.FilterBasicLandCard;
import mage.filter.common.FilterBasicCard;
import mage.filter.predicate.Predicates;
import mage.target.common.TargetCardInLibrary;
@ -25,7 +25,7 @@ import java.util.UUID;
*/
public final class ContaminatedLandscape extends CardImpl {
private static final FilterCard filter = new FilterBasicLandCard("a basic Plains, Island, or Swamp card");
private static final FilterCard filter = new FilterBasicCard("a basic Plains, Island, or Swamp card");
static {
filter.add(Predicates.or(

View file

@ -14,7 +14,7 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.filter.FilterCard;
import mage.filter.common.FilterBasicLandCard;
import mage.filter.common.FilterBasicCard;
import mage.filter.predicate.Predicates;
import mage.target.common.TargetCardInLibrary;
@ -25,7 +25,7 @@ import java.util.UUID;
*/
public final class DeceptiveLandscape extends CardImpl {
private static final FilterCard filter = new FilterBasicLandCard("a basic Plains, Swamp, or Forest card");
private static final FilterCard filter = new FilterBasicCard("a basic Plains, Swamp, or Forest card");
static {
filter.add(Predicates.or(

View file

@ -1,7 +1,5 @@
package mage.cards.e;
import java.util.UUID;
import mage.abilities.condition.common.FerociousCondition;
import mage.abilities.decorator.ConditionalOneShotEffect;
import mage.abilities.effects.common.SacrificeControllerEffect;
@ -9,23 +7,20 @@ import mage.abilities.effects.common.search.SearchLibraryPutInPlayEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.filter.FilterCard;
import mage.filter.StaticFilters;
import mage.filter.common.FilterBasicLandCard;
import mage.target.common.TargetCardInLibrary;
import java.util.UUID;
/**
*
* @author Susucr
*/
public final class EntishRestoration extends CardImpl {
private static final FilterCard filter = new FilterBasicLandCard("basic land cards");
private static final String rule = "Search your library for up to two basic land cards, " +
"put them onto the battlefield tapped, then shuffle. " +
"If " + FerociousCondition.instance.toString() + ", instead search your library for up " +
"to three basic land cards, put them onto the battlefield tapped, then shuffle.";
"put them onto the battlefield tapped, then shuffle. " +
"If " + FerociousCondition.instance + ", instead search your library for up " +
"to three basic land cards, put them onto the battlefield tapped, then shuffle.";
public EntishRestoration(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{2}{G}");
@ -35,14 +30,14 @@ public final class EntishRestoration extends CardImpl {
// creature with power 4 or greater, instead search your library for up
// to three basic land cards, put them onto the battlefield tapped, then shuffle.
this.getSpellAbility().addEffect(new SacrificeControllerEffect(
StaticFilters.FILTER_LAND, 1, null
StaticFilters.FILTER_LAND, 1, null
).setText("Sacrifice a land."));
this.getSpellAbility().addEffect(
new ConditionalOneShotEffect(
new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(0, 3, filter), true),
new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(0, 2, filter), true),
FerociousCondition.instance, rule
)
new ConditionalOneShotEffect(
new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(0, 3, StaticFilters.FILTER_CARD_BASIC_LANDS), true),
new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(0, 2, StaticFilters.FILTER_CARD_BASIC_LANDS), true),
FerociousCondition.instance, rule
)
);
}

View file

@ -7,8 +7,8 @@ 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.FilterBasicCard;
import mage.target.common.TargetCardInLibrary;
import java.util.UUID;
@ -18,12 +18,7 @@ import java.util.UUID;
*/
public final class FieldTrip extends CardImpl {
private static final FilterCard filter = new FilterCard("basic Forest card");
static {
filter.add(SuperType.BASIC.getPredicate());
filter.add(SubType.FOREST.getPredicate());
}
private static final FilterCard filter = new FilterBasicCard(SubType.FOREST);
public FieldTrip(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{2}{G}");

View file

@ -14,7 +14,7 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.filter.FilterCard;
import mage.filter.common.FilterBasicLandCard;
import mage.filter.common.FilterBasicCard;
import mage.filter.predicate.Predicates;
import mage.target.common.TargetCardInLibrary;
@ -25,7 +25,7 @@ import java.util.UUID;
*/
public final class ForebodingLandscape extends CardImpl {
private static final FilterCard filter = new FilterBasicLandCard("a basic Swamp, Forest, or Island card");
private static final FilterCard filter = new FilterBasicCard("a basic Swamp, Forest, or Island card");
static {
filter.add(Predicates.or(

View file

@ -9,8 +9,12 @@ import mage.abilities.effects.common.PutCardFromHandOntoBattlefieldEffect;
import mage.abilities.mana.SimpleManaAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.*;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.TimingRule;
import mage.constants.Zone;
import mage.filter.FilterCard;
import mage.filter.common.FilterBasicCard;
import java.util.UUID;
@ -19,12 +23,7 @@ import java.util.UUID;
*/
public final class GaeasTouch extends CardImpl {
private static final FilterCard filter = new FilterCard("a basic Forest card");
static {
filter.add(SuperType.BASIC.getPredicate());
filter.add(SubType.FOREST.getPredicate());
}
private static final FilterCard filter = new FilterBasicCard(SubType.FOREST);
public GaeasTouch(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{G}{G}");

View file

@ -8,7 +8,7 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.filter.FilterCard;
import mage.filter.common.FilterBasicLandCard;
import mage.filter.common.FilterBasicCard;
import mage.target.common.TargetCardInLibrary;
import mage.target.common.TargetCardInYourGraveyard;
@ -19,7 +19,7 @@ import java.util.UUID;
*/
public final class GlimpseTheCore extends CardImpl {
private static final FilterCard filter = new FilterBasicLandCard(SubType.FOREST);
private static final FilterCard filter = new FilterBasicCard(SubType.FOREST);
private static final FilterCard filter2 = new FilterCard("Cave card from your graveyard");
static {

View file

@ -9,8 +9,7 @@ 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.StaticFilters;
import mage.target.common.TargetCardInLibrary;
import java.util.UUID;
@ -20,13 +19,6 @@ import java.util.UUID;
*/
public final class GloryheathLynx extends CardImpl {
private static final FilterCard filter = new FilterCard("basic Plains card");
static {
filter.add(SuperType.BASIC.getPredicate());
filter.add(SubType.PLAINS.getPredicate());
}
public GloryheathLynx(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{W}");
@ -40,7 +32,7 @@ public final class GloryheathLynx extends CardImpl {
// Whenever this creature attacks while saddled, search your library for a basic Plains card, reveal it, put it into your hand, then shuffle.
this.addAbility(new AttacksWhileSaddledTriggeredAbility(
new SearchLibraryPutInHandEffect(new TargetCardInLibrary(filter), true)
new SearchLibraryPutInHandEffect(new TargetCardInLibrary(StaticFilters.FILTER_CARD_BASIC_PLAINS), true)
));
// Saddle 2

View file

@ -1,7 +1,5 @@
package mage.cards.g;
import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.common.SacrificeSourceCost;
@ -11,13 +9,16 @@ import mage.abilities.effects.common.search.SearchLibraryPutInPlayEffect;
import mage.abilities.mana.ColorlessManaAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.*;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.SuperType;
import mage.filter.FilterCard;
import mage.filter.predicate.Predicates;
import mage.target.common.TargetCardInLibrary;
import java.util.UUID;
/**
*
* @author North
*/
public final class GrixisPanorama extends CardImpl {
@ -25,7 +26,6 @@ public final class GrixisPanorama extends CardImpl {
private static final FilterCard filter = new FilterCard("a basic Island, Swamp, or Mountain card");
static {
filter.add(CardType.LAND.getPredicate());
filter.add(SuperType.BASIC.getPredicate());
filter.add(Predicates.or(
SubType.ISLAND.getPredicate(),
@ -34,7 +34,7 @@ public final class GrixisPanorama extends CardImpl {
}
public GrixisPanorama(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.LAND},"");
super(ownerId, setInfo, new CardType[]{CardType.LAND}, "");
this.addAbility(new ColorlessManaAbility());
TargetCardInLibrary target = new TargetCardInLibrary(filter);

View file

@ -9,8 +9,7 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.filter.FilterCard;
import mage.filter.common.FilterBasicLandCard;
import mage.filter.StaticFilters;
import mage.target.common.TargetCardInYourGraveyard;
import java.util.UUID;
@ -20,8 +19,6 @@ import java.util.UUID;
*/
public final class Groundskeeper extends CardImpl {
private static final FilterCard filter = new FilterBasicLandCard("basic land card from your graveyard");
public Groundskeeper(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{G}");
this.subtype.add(SubType.HUMAN);
@ -31,7 +28,7 @@ public final class Groundskeeper extends CardImpl {
// {1}{G}: Return target basic land card from your graveyard to your hand.
Ability ability = new SimpleActivatedAbility(new ReturnFromGraveyardToHandTargetEffect(), new ManaCostsImpl<>("{1}{G}"));
ability.addTarget(new TargetCardInYourGraveyard(filter));
ability.addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_BASIC_LAND));
this.addAbility(ability);
}

View file

@ -2,7 +2,6 @@
package mage.cards.j;
import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.common.SacrificeSourceCost;
@ -12,21 +11,23 @@ import mage.abilities.effects.common.search.SearchLibraryPutInPlayEffect;
import mage.abilities.mana.ColorlessManaAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.*;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.SuperType;
import mage.filter.FilterCard;
import mage.filter.predicate.Predicates;
import mage.target.common.TargetCardInLibrary;
import java.util.UUID;
/**
*
* @author BetaSteward_at_googlemail.com
*/
public final class JundPanorama extends CardImpl {
private static final FilterCard filter = new FilterCard("a basic Swamp, Mountain, or Forest card");
private static final FilterCard filter = new FilterCard("a basic Swamp, Mountain, or Forest card");
static {
filter.add(CardType.LAND.getPredicate());
filter.add(SuperType.BASIC.getPredicate());
filter.add(Predicates.or(
SubType.SWAMP.getPredicate(),
@ -35,7 +36,7 @@ public final class JundPanorama extends CardImpl {
}
public JundPanorama(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.LAND},null);
super(ownerId, setInfo, new CardType[]{CardType.LAND}, null);
this.addAbility(new ColorlessManaAbility());
TargetCardInLibrary target = new TargetCardInLibrary(filter);
Ability ability = new SimpleActivatedAbility(new SearchLibraryPutInPlayEffect(target, true), new GenericManaCost(1));

View file

@ -1,7 +1,5 @@
package mage.cards.k;
import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.Mode;
import mage.abilities.effects.OneShotEffect;
@ -15,10 +13,8 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Outcome;
import mage.constants.SubType;
import mage.constants.SuperType;
import mage.counters.CounterType;
import mage.filter.FilterCard;
import mage.filter.StaticFilters;
import mage.game.Game;
import mage.game.permanent.Permanent;
import mage.game.permanent.token.Construct2Token;
@ -27,20 +23,13 @@ import mage.target.common.TargetCardInLibrary;
import mage.target.common.TargetControlledCreaturePermanent;
import mage.target.targetpointer.FixedTarget;
import java.util.UUID;
/**
*
* @author weirddan455
*/
public final class KaylasCommand extends CardImpl {
private static final FilterCard filter
= new FilterCard("a basic Plains card");
static {
filter.add(SubType.PLAINS.getPredicate());
filter.add(SuperType.BASIC.getPredicate());
}
public KaylasCommand(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{1}{W}{W}");
@ -55,7 +44,7 @@ public final class KaylasCommand extends CardImpl {
this.getSpellAbility().addMode(new Mode(new KaylasCommandCounterEffect()));
// * Search your library for a basic Plains card, reveal it, put it into your hand, then shuffle.
this.getSpellAbility().addMode(new Mode(new SearchLibraryPutInHandEffect(new TargetCardInLibrary(filter), true)));
this.getSpellAbility().addMode(new Mode(new SearchLibraryPutInHandEffect(new TargetCardInLibrary(StaticFilters.FILTER_CARD_BASIC_PLAINS), true)));
// * You gain 2 life and scry 2.
Mode mode = new Mode(new GainLifeEffect(2));

View file

@ -10,11 +10,11 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.SuperType;
import mage.constants.TargetController;
import mage.filter.FilterCard;
import mage.filter.FilterPermanent;
import mage.filter.StaticFilters;
import mage.filter.common.FilterBasicCard;
import mage.game.Game;
import mage.game.permanent.token.SoldierToken;
import mage.target.common.TargetCardInLibrary;
@ -26,13 +26,6 @@ import java.util.UUID;
*/
public final class KeeperOfTheAccord extends CardImpl {
private static final FilterCard filter = new FilterCard("basic Plains card");
static {
filter.add(SuperType.BASIC.getPredicate());
filter.add(SubType.PLAINS.getPredicate());
}
public KeeperOfTheAccord(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{W}");

View file

@ -2,16 +2,20 @@ package mage.cards.k;
import mage.abilities.Ability;
import mage.abilities.LoyaltyAbility;
import mage.abilities.dynamicvalue.DynamicValue;
import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount;
import mage.abilities.effects.common.DamageTargetEffect;
import mage.abilities.effects.common.GetEmblemEffect;
import mage.abilities.effects.common.search.SearchLibraryPutInHandEffect;
import mage.abilities.hint.Hint;
import mage.abilities.hint.ValueHint;
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.FilterBasicCard;
import mage.filter.common.FilterControlledPermanent;
import mage.game.command.emblems.KothFireOfResistanceEmblem;
import mage.target.common.TargetCardInLibrary;
@ -24,14 +28,11 @@ import java.util.UUID;
*/
public final class KothFireOfResistance extends CardImpl {
private static final FilterCard filter = new FilterCard("basic Mountain card");
private static final FilterControlledPermanent filter2 = new FilterControlledPermanent("Mountains you control");
static {
filter.add(SuperType.BASIC.getPredicate());
filter.add(SubType.MOUNTAIN.getPredicate());
filter2.add(SubType.MOUNTAIN.getPredicate());
}
private static final FilterCard filter = new FilterBasicCard(SubType.MOUNTAIN);
private static final DynamicValue xValue = new PermanentsOnBattlefieldCount(
new FilterControlledPermanent(SubType.MOUNTAIN, "Mountains you control")
);
private static final Hint hint = new ValueHint(xValue.getMessage(), xValue);
public KothFireOfResistance(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.PLANESWALKER}, "{2}{R}{R}");
@ -44,10 +45,10 @@ public final class KothFireOfResistance extends CardImpl {
this.addAbility(new LoyaltyAbility(new SearchLibraryPutInHandEffect(new TargetCardInLibrary(filter), true), 2));
// 3: Koth, Fire of Resistance deals damage to target creature equal to the number of Mountains you control.
Ability ability = new LoyaltyAbility(new DamageTargetEffect(new PermanentsOnBattlefieldCount(filter2))
Ability ability = new LoyaltyAbility(new DamageTargetEffect(xValue)
.setText("{this} deals damage to target creature equal to the number of Mountains you control"), -3);
ability.addTarget(new TargetCreaturePermanent());
this.addAbility(ability);
this.addAbility(ability.addHint(hint));
// 7: You get an emblem with "Whenever a Mountain you control enters, this emblem deals 4 damage to any target."
this.addAbility(new LoyaltyAbility(new GetEmblemEffect(new KothFireOfResistanceEmblem()), -7));

View file

@ -1,8 +1,6 @@
package mage.cards.l;
import java.util.List;
import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.DelayedTriggeredAbility;
import mage.abilities.common.SimpleActivatedAbility;
@ -14,23 +12,21 @@ import mage.abilities.dynamicvalue.common.StaticValue;
import mage.abilities.effects.Effect;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.DrawCardTargetEffect;
import mage.cards.Card;
import mage.cards.Cards;
import mage.cards.CardImpl;
import mage.cards.CardsImpl;
import mage.cards.CardSetInfo;
import mage.cards.*;
import mage.constants.CardType;
import mage.constants.Outcome;
import mage.constants.Zone;
import mage.filter.common.FilterBasicLandCard;
import mage.filter.StaticFilters;
import mage.game.Game;
import mage.players.Player;
import mage.target.TargetPlayer;
import mage.target.common.TargetCardInGraveyard;
import mage.target.targetpointer.FixedTarget;
import java.util.List;
import java.util.UUID;
/**
*
* @author ThomasLerner, LevelX2 & L_J
*/
public final class LodestoneBauble extends CardImpl {
@ -61,7 +57,7 @@ public final class LodestoneBauble extends CardImpl {
class LodestoneBaubleTarget extends TargetCardInGraveyard {
public LodestoneBaubleTarget() {
super(0, 4, new FilterBasicLandCard("basic land cards from a player's graveyard"));
super(0, 4, StaticFilters.FILTER_CARD_BASIC_LANDS);
}
private LodestoneBaubleTarget(final LodestoneBaubleTarget target) {
@ -87,7 +83,7 @@ class LodestoneBaubleTarget extends TargetCardInGraveyard {
}
class LodestoneBaubleEffect extends OneShotEffect {
LodestoneBaubleEffect() {
super(Outcome.Detriment);
this.staticText = "Put up to four target basic land cards from a player's graveyard on top of their library in any order";

View file

@ -10,9 +10,7 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.filter.FilterCard;
import mage.filter.StaticFilters;
import mage.filter.common.FilterBasicLandCard;
import mage.target.common.TargetCardInLibrary;
import java.util.UUID;
@ -22,7 +20,6 @@ import java.util.UUID;
*/
public final class LoyalWarhound extends CardImpl {
private static final FilterCard filter = new FilterBasicLandCard(SubType.PLAINS);
private static final Condition condition = new OpponentControlsMoreCondition(StaticFilters.FILTER_LANDS);
public LoyalWarhound(UUID ownerId, CardSetInfo setInfo) {
@ -38,7 +35,7 @@ public final class LoyalWarhound extends CardImpl {
// When Loyal Warhound enters the battlefield, if an opponent controls more lands than you,
// search your library for a basic Plains card, put it onto the battlefield tapped, then shuffle.
this.addAbility(new EntersBattlefieldTriggeredAbility(
new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(filter), true)
new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(StaticFilters.FILTER_CARD_BASIC_PLAINS), true)
).withInterveningIf(condition));
}

View file

@ -6,8 +6,7 @@ import mage.abilities.keyword.CyclingAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.filter.FilterCard;
import mage.filter.common.FilterBasicLandCard;
import mage.filter.StaticFilters;
import mage.target.common.TargetCardInLibrary;
import java.util.UUID;
@ -17,14 +16,12 @@ import java.util.UUID;
*/
public final class MigrationPath extends CardImpl {
private static final FilterCard filter = new FilterBasicLandCard("basic land cards");
public MigrationPath(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{3}{G}");
// Search your library for up to two basic land cards, put them onto the battlefield tapped, then shuffle your library.
this.getSpellAbility().addEffect(new SearchLibraryPutInPlayEffect(
new TargetCardInLibrary(0, 2, filter), true
new TargetCardInLibrary(0, 2, StaticFilters.FILTER_CARD_BASIC_LANDS), true
));
// Cycling {2}

View file

@ -10,8 +10,8 @@ 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.FilterBasicCard;
import mage.target.common.TargetCardInLibrary;
import java.util.UUID;
@ -21,12 +21,7 @@ import java.util.UUID;
*/
public final class NeverwinterDryad extends CardImpl {
private static final FilterCard filter = new FilterCard("a basic Forest card");
static {
filter.add(SuperType.BASIC.getPredicate());
filter.add(SubType.FOREST.getPredicate());
}
private static final FilterCard filter = new FilterBasicCard(SubType.FOREST);
public NeverwinterDryad(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{G}");

View file

@ -12,6 +12,7 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.*;
import mage.filter.FilterCard;
import mage.filter.common.FilterBasicCard;
import mage.filter.common.FilterLandPermanent;
import mage.target.common.TargetCardInLibrary;
@ -22,12 +23,7 @@ import java.util.UUID;
*/
public final class NissaVastwoodSeer extends CardImpl {
private static final FilterCard filter = new FilterCard("basic Forest card");
static {
filter.add(SuperType.BASIC.getPredicate());
filter.add(SubType.FOREST.getPredicate());
}
private static final FilterCard filter = new FilterBasicCard(SubType.FOREST);
private static final Condition condition = new PermanentsOnTheBattlefieldCondition(
new FilterLandPermanent("you control seven or more lands"),

View file

@ -1,7 +1,6 @@
package mage.cards.n;
import java.util.UUID;
import mage.abilities.condition.common.SpellMasteryCondition;
import mage.abilities.decorator.ConditionalOneShotEffect;
import mage.abilities.effects.common.search.SearchLibraryPutOntoBattlefieldTappedRestInHandEffect;
@ -9,22 +8,18 @@ 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.FilterBasicCard;
import mage.target.common.TargetCardInLibrary;
import java.util.UUID;
/**
*
* @author LevelX2
*/
public final class NissasPilgrimage extends CardImpl {
private static final FilterCard filter = new FilterCard("basic Forest cards");
static {
filter.add(SuperType.BASIC.getPredicate());
filter.add(SubType.FOREST.getPredicate());
}
private static final FilterCard filter = new FilterBasicCard(SubType.FOREST, "basic Forest cards");
public NissasPilgrimage(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{2}{G}");

View file

@ -8,10 +8,10 @@ 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.FilterPermanent;
import mage.filter.StaticFilters;
import mage.filter.common.FilterBasicCard;
import mage.filter.common.FilterControlledPlaneswalkerPermanent;
import mage.target.common.TargetCardInLibrary;
@ -22,14 +22,9 @@ import java.util.UUID;
*/
public final class NissasTriumph extends CardImpl {
private static final FilterCard filter = new FilterCard("basic Forest cards");
private static final FilterCard filter = new FilterBasicCard(SubType.FOREST, "basic Forest cards");
private static final FilterPermanent filter2 = new FilterControlledPlaneswalkerPermanent(SubType.NISSA);
static {
filter.add(SuperType.BASIC.getPredicate());
filter.add(SubType.FOREST.getPredicate());
}
private static final Condition condition = new PermanentsOnTheBattlefieldCondition(filter2);
public NissasTriumph(UUID ownerId, CardSetInfo setInfo) {

View file

@ -1,10 +1,6 @@
package mage.cards.o;
import java.util.HashSet;
import java.util.Set;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
@ -16,13 +12,16 @@ import mage.constants.CardType;
import mage.constants.Outcome;
import mage.constants.SubType;
import mage.constants.Zone;
import mage.filter.common.FilterBasicLandCard;
import mage.filter.StaticFilters;
import mage.game.Game;
import mage.players.Player;
import mage.target.common.TargetCardInLibrary;
import java.util.HashSet;
import java.util.Set;
import java.util.UUID;
/**
*
* @author TheElk801
*/
public final class OldGrowthDryads extends CardImpl {
@ -70,7 +69,7 @@ class OldGrowthDryadsEffect extends OneShotEffect {
for (UUID opponentId : game.getOpponents(source.getControllerId())) {
Player opponent = game.getPlayer(opponentId);
if (opponent != null && opponent.chooseUse(Outcome.PutLandInPlay, "Search your library for a basic land card and put it onto the battlefield tapped?", source, game)) {
TargetCardInLibrary target = new TargetCardInLibrary(new FilterBasicLandCard());
TargetCardInLibrary target = new TargetCardInLibrary(StaticFilters.FILTER_CARD_BASIC_LAND);
if (opponent.searchLibrary(target, source, game)) {
Card targetCard = opponent.getLibrary().getCard(target.getFirstTarget(), game);
if (targetCard != null) {

View file

@ -8,7 +8,6 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.filter.StaticFilters;
import mage.filter.common.FilterBasicLandCard;
import mage.target.common.TargetCardInLibrary;
/**

View file

@ -14,7 +14,7 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.filter.FilterCard;
import mage.filter.common.FilterBasicLandCard;
import mage.filter.common.FilterBasicCard;
import mage.filter.predicate.Predicates;
import mage.target.common.TargetCardInLibrary;
@ -25,7 +25,7 @@ import java.util.UUID;
*/
public final class PerilousLandscape extends CardImpl {
private static final FilterCard filter = new FilterBasicLandCard("a basic Island, Mountain, or Plains card");
private static final FilterCard filter = new FilterBasicCard("a basic Island, Mountain, or Plains card");
static {
filter.add(Predicates.or(

View file

@ -10,9 +10,8 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.SuperType;
import mage.constants.Zone;
import mage.filter.FilterCard;
import mage.filter.StaticFilters;
import mage.target.common.TargetCardInLibrary;
import java.util.UUID;
@ -22,13 +21,6 @@ import java.util.UUID;
*/
public final class PilgrimOfTheAges extends CardImpl {
private static final FilterCard filter = new FilterCard("a basic Plains card");
static {
filter.add(SuperType.BASIC.getPredicate());
filter.add(SubType.PLAINS.getPredicate());
}
public PilgrimOfTheAges(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{W}");
@ -38,7 +30,7 @@ public final class PilgrimOfTheAges extends CardImpl {
// When Pilgrim of the Ages enters the battlefield, you may search your library for a basic Plains card, reveal it, put it into your hand, then shuffle.
this.addAbility(new EntersBattlefieldTriggeredAbility(new SearchLibraryPutInHandEffect(
new TargetCardInLibrary(filter), true
new TargetCardInLibrary(StaticFilters.FILTER_CARD_BASIC_PLAINS), true
), true));
// {6}: Return Pilgrim of the Ages from your graveyard to your hand.

View file

@ -8,8 +8,8 @@ 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.FilterBasicCard;
import mage.target.common.TargetCardInLibrary;
import java.util.UUID;
@ -19,12 +19,7 @@ import java.util.UUID;
*/
public final class Plasmancer extends CardImpl {
private static final FilterCard filter = new FilterCard("a basic Swamp card");
static {
filter.add(SuperType.BASIC.getPredicate());
filter.add(SubType.SWAMP.getPredicate());
}
private static final FilterCard filter = new FilterBasicCard(SubType.SWAMP);
public Plasmancer(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{2}{B}{B}");

View file

@ -5,9 +5,7 @@ import mage.abilities.effects.common.search.SearchLibraryPutInPlayEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.filter.FilterCard;
import mage.filter.StaticFilters;
import mage.filter.common.FilterBasicLandCard;
import mage.target.common.TargetCardInLibrary;
import java.util.UUID;
@ -17,8 +15,6 @@ import java.util.UUID;
*/
public final class RoilingRegrowth extends CardImpl {
private static final FilterCard filter = new FilterBasicLandCard("basic land cards");
public RoilingRegrowth(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{2}{G}");
@ -27,7 +23,7 @@ public final class RoilingRegrowth extends CardImpl {
StaticFilters.FILTER_LAND, 1, null
).setText("Sacrifice a land."));
this.getSpellAbility().addEffect(new SearchLibraryPutInPlayEffect(
new TargetCardInLibrary(0, 2, filter), true
new TargetCardInLibrary(0, 2, StaticFilters.FILTER_CARD_BASIC_LANDS), true
));
}

View file

@ -1,27 +1,27 @@
package mage.cards.s;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
import mage.abilities.effects.common.GainLifeEffect;
import mage.abilities.effects.common.search.SearchLibraryPutInHandEffect;
import mage.cards.OmenCard;
import mage.constants.SubType;
import mage.abilities.keyword.FlyingAbility;
import mage.cards.CardSetInfo;
import mage.cards.OmenCard;
import mage.constants.CardType;
import mage.filter.common.FilterBasicLandCard;
import mage.constants.SubType;
import mage.filter.StaticFilters;
import mage.target.common.TargetCardInLibrary;
import java.util.UUID;
/**
*
* @author Jmlundeen
*/
public final class SaguWildling extends OmenCard {
public SaguWildling(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, new CardType[]{CardType.SORCERY}, "{4}{G}", "Roost Seek", "{G}");
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, new CardType[]{CardType.SORCERY}, "{4}{G}", "Roost Seek", "{G}");
this.subtype.add(SubType.DRAGON);
this.power = new MageInt(3);
this.toughness = new MageInt(3);
@ -34,7 +34,7 @@ public final class SaguWildling extends OmenCard {
// Roost Seek
// Search your library for a basic land card, reveal it, put it into your hand, then shuffle.
TargetCardInLibrary target = new TargetCardInLibrary(new FilterBasicLandCard());
TargetCardInLibrary target = new TargetCardInLibrary(StaticFilters.FILTER_CARD_BASIC_LAND);
this.getSpellCard().getSpellAbility().addEffect(new SearchLibraryPutInHandEffect(target, true));
this.finalizeOmen();
}

View file

@ -10,8 +10,6 @@ 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.StaticFilters;
import mage.target.common.TargetCardInLibrary;
@ -22,13 +20,6 @@ import java.util.UUID;
*/
public final class ScoutingHawk extends CardImpl {
private static final FilterCard filter = new FilterCard("a basic Plains card");
static {
filter.add(SuperType.BASIC.getPredicate());
filter.add(SubType.PLAINS.getPredicate());
}
private static final Condition condition = new OpponentControlsMoreCondition(StaticFilters.FILTER_LANDS);
public ScoutingHawk(UUID ownerId, CardSetInfo setInfo) {
@ -43,7 +34,7 @@ public final class ScoutingHawk extends CardImpl {
// Keen Sight When Scouting Hawk enters the battlefield, if an opponent controls more lands than you, search your library for a basic Plains card, put it onto the battlefield tapped, then shuffle.
this.addAbility(new EntersBattlefieldTriggeredAbility(
new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(filter), true)
new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(StaticFilters.FILTER_CARD_BASIC_PLAINS), true)
).withInterveningIf(condition).withFlavorWord("Keen Sight"));
}

View file

@ -14,7 +14,7 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.filter.FilterCard;
import mage.filter.common.FilterBasicLandCard;
import mage.filter.common.FilterBasicCard;
import mage.filter.predicate.Predicates;
import mage.target.common.TargetCardInLibrary;
@ -25,7 +25,7 @@ import java.util.UUID;
*/
public final class SeethingLandscape extends CardImpl {
private static final FilterCard filter = new FilterBasicLandCard("a basic Island, Swamp, or Mountain card");
private static final FilterCard filter = new FilterBasicCard("a basic Island, Swamp, or Mountain card");
static {
filter.add(Predicates.or(

View file

@ -14,7 +14,7 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.filter.FilterCard;
import mage.filter.common.FilterBasicLandCard;
import mage.filter.common.FilterBasicCard;
import mage.filter.predicate.Predicates;
import mage.target.common.TargetCardInLibrary;
@ -25,7 +25,7 @@ import java.util.UUID;
*/
public final class ShatteredLandscape extends CardImpl {
private static final FilterCard filter = new FilterBasicLandCard("a basic Mountain, Plains, or Swamp card");
private static final FilterCard filter = new FilterBasicCard("a basic Mountain, Plains, or Swamp card");
static {
filter.add(Predicates.or(

View file

@ -14,7 +14,7 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.filter.FilterCard;
import mage.filter.common.FilterBasicLandCard;
import mage.filter.common.FilterBasicCard;
import mage.filter.predicate.Predicates;
import mage.target.common.TargetCardInLibrary;
@ -25,7 +25,7 @@ import java.util.UUID;
*/
public final class ShelteringLandscape extends CardImpl {
private static final FilterCard filter = new FilterBasicLandCard("a basic Mountain, Forest, or Plains card");
private static final FilterCard filter = new FilterBasicCard("a basic Mountain, Forest, or Plains card");
static {
filter.add(Predicates.or(

View file

@ -12,8 +12,6 @@ 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.StaticFilters;
import mage.target.common.TargetCardInLibrary;
@ -24,13 +22,6 @@ import java.util.UUID;
*/
public final class StoicFarmer extends CardImpl {
private static final FilterCard filter = new FilterCard("a basic Plains card");
static {
filter.add(SuperType.BASIC.getPredicate());
filter.add(SubType.PLAINS.getPredicate());
}
private static final Condition condition = new OpponentControlsMoreCondition(StaticFilters.FILTER_LANDS);
public StoicFarmer(UUID ownerId, CardSetInfo setInfo) {
@ -44,8 +35,8 @@ public final class StoicFarmer extends CardImpl {
// When Stoic Farmer enters the battlefield, search your library for a basic Plains card and reveal it. If an opponent controls more lands than you, put it onto the battlefield tapped. Otherwise, put it into your hand. Then shuffle your library.
this.addAbility(new EntersBattlefieldTriggeredAbility(
new ConditionalOneShotEffect(
new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(filter), true),
new SearchLibraryPutInHandEffect(new TargetCardInLibrary(filter), true),
new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(StaticFilters.FILTER_CARD_BASIC_PLAINS), true),
new SearchLibraryPutInHandEffect(new TargetCardInLibrary(StaticFilters.FILTER_CARD_BASIC_PLAINS), true),
condition, "search your library for a basic Plains card and reveal it. " +
"If an opponent controls more lands than you, put it onto the battlefield tapped. " +
"Otherwise put it into your hand. Then shuffle"

View file

@ -10,7 +10,6 @@ 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.target.common.TargetCardInLibrary;
@ -21,12 +20,7 @@ import java.util.UUID;
*/
public final class SunbladeSamurai extends CardImpl {
private static final FilterCard filter = new FilterCard("a basic Plains card");
static {
filter.add(SubType.PLAINS.getPredicate());
filter.add(SuperType.BASIC.getPredicate());
}
private static final FilterCard filter = new FilterCard(SubType.PLAINS);
public SunbladeSamurai(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT, CardType.CREATURE}, "{4}{W}");

View file

@ -9,8 +9,7 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SagaChapter;
import mage.constants.SubType;
import mage.constants.SuperType;
import mage.filter.FilterCard;
import mage.filter.StaticFilters;
import mage.game.permanent.token.ArtifactWallToken;
import mage.target.common.TargetCardInLibrary;
@ -21,13 +20,6 @@ import java.util.UUID;
*/
public final class TheBirthOfMeletis extends CardImpl {
private static final FilterCard filter = new FilterCard("a basic Plains card");
static {
filter.add(SubType.PLAINS.getPredicate());
filter.add(SuperType.BASIC.getPredicate());
}
public TheBirthOfMeletis(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{W}");
@ -39,7 +31,7 @@ public final class TheBirthOfMeletis extends CardImpl {
// I Search your library for a basic Plains card, reveal it, put it into your hand, then shuffle your library.
sagaAbility.addChapterEffect(
this, SagaChapter.CHAPTER_I, new SearchLibraryPutInHandEffect(
new TargetCardInLibrary(filter), true
new TargetCardInLibrary(StaticFilters.FILTER_CARD_BASIC_PLAINS), true
)
);

View file

@ -10,8 +10,12 @@ import mage.abilities.effects.common.search.SearchLibraryPutInHandEffect;
import mage.abilities.keyword.TransformAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.*;
import mage.constants.CardType;
import mage.constants.ComparisonType;
import mage.constants.SagaChapter;
import mage.constants.SubType;
import mage.filter.FilterCard;
import mage.filter.StaticFilters;
import mage.filter.common.FilterPermanentCard;
import mage.filter.predicate.mageobject.ManaValuePredicate;
import mage.target.common.TargetCardInLibrary;
@ -24,14 +28,10 @@ import java.util.UUID;
*/
public final class TheRestorationOfEiganjo extends CardImpl {
private static final FilterCard filter
= new FilterCard("a basic Plains card");
private static final FilterCard filter2
= new FilterPermanentCard("permanent card with mana value 2 or less from your graveyard");
static {
filter.add(SubType.PLAINS.getPredicate());
filter.add(SuperType.BASIC.getPredicate());
filter2.add(new ManaValuePredicate(ComparisonType.FEWER_THAN, 3));
}
@ -47,7 +47,7 @@ public final class TheRestorationOfEiganjo extends CardImpl {
// I - Search your library for a basic Plains card, reveal it, put it into your hand, then shuffle.
sagaAbility.addChapterEffect(
this, SagaChapter.CHAPTER_I, new SearchLibraryPutInHandEffect(
new TargetCardInLibrary(filter), true
new TargetCardInLibrary(StaticFilters.FILTER_CARD_BASIC_PLAINS), true
)
);

View file

@ -14,7 +14,7 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.filter.FilterCard;
import mage.filter.common.FilterBasicLandCard;
import mage.filter.common.FilterBasicCard;
import mage.filter.predicate.Predicates;
import mage.target.common.TargetCardInLibrary;
@ -25,7 +25,7 @@ import java.util.UUID;
*/
public final class TranquilLandscape extends CardImpl {
private static final FilterCard filter = new FilterBasicLandCard("a basic Forest, Plains, or Island card");
private static final FilterCard filter = new FilterBasicCard("a basic Forest, Plains, or Island card");
static {
filter.add(Predicates.or(

View file

@ -14,7 +14,7 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.filter.FilterCard;
import mage.filter.common.FilterBasicLandCard;
import mage.filter.common.FilterBasicCard;
import mage.filter.predicate.Predicates;
import mage.target.common.TargetCardInLibrary;
@ -25,7 +25,7 @@ import java.util.UUID;
*/
public final class TwistedLandscape extends CardImpl {
private static final FilterCard filter = new FilterBasicLandCard("a basic Swamp, Mountain, or Forest card");
private static final FilterCard filter = new FilterBasicCard("a basic Swamp, Mountain, or Forest card");
static {
filter.add(Predicates.or(

View file

@ -9,9 +9,7 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.counters.CounterType;
import mage.filter.FilterCard;
import mage.filter.StaticFilters;
import mage.filter.common.FilterBasicLandCard;
import mage.target.common.TargetCardInLibrary;
import java.util.UUID;
@ -21,8 +19,6 @@ import java.util.UUID;
*/
public final class VastwoodSurge extends CardImpl {
private static final FilterCard filter = new FilterBasicLandCard("basic land cards");
public VastwoodSurge(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{3}{G}");
@ -31,7 +27,7 @@ public final class VastwoodSurge extends CardImpl {
// Search your library for up to two basic land cards, put them onto the battlefield tapped, then shuffle your library. If this spell was kicked, put two +1/+1 counters on each creature you control.
this.getSpellAbility().addEffect(new SearchLibraryPutInPlayEffect(
new TargetCardInLibrary(0, 2, filter), true
new TargetCardInLibrary(0, 2, StaticFilters.FILTER_CARD_BASIC_LANDS), true
));
this.getSpellAbility().addEffect(new ConditionalOneShotEffect(
new AddCountersAllEffect(

View file

@ -185,24 +185,33 @@ public final class StaticFilters {
FILTER_CARD_LAND_A.setLockedFilter(true);
}
public static final FilterBasicLandCard FILTER_CARD_BASIC_LAND = new FilterBasicLandCard();
public static final FilterLandCard FILTER_CARD_BASIC_LAND = new FilterLandCard("basic land card");
static {
FILTER_CARD_BASIC_LAND.add(SuperType.BASIC.getPredicate());
FILTER_CARD_BASIC_LAND.setLockedFilter(true);
}
public static final FilterBasicLandCard FILTER_CARD_BASIC_LANDS = new FilterBasicLandCard("basic land cards");
public static final FilterLandCard FILTER_CARD_BASIC_LANDS = new FilterLandCard("basic land cards");
static {
FILTER_CARD_BASIC_LANDS.add(SuperType.BASIC.getPredicate());
FILTER_CARD_BASIC_LANDS.setLockedFilter(true);
}
public static final FilterBasicLandCard FILTER_CARD_BASIC_LAND_A = new FilterBasicLandCard("a basic land card");
public static final FilterLandCard FILTER_CARD_BASIC_LAND_A = new FilterLandCard("a basic land card");
static {
FILTER_CARD_BASIC_LAND_A.add(SuperType.BASIC.getPredicate());
FILTER_CARD_BASIC_LAND_A.setLockedFilter(true);
}
public static final FilterBasicCard FILTER_CARD_BASIC_PLAINS = new FilterBasicCard(SubType.PLAINS);
static {
FILTER_CARD_BASIC_PLAINS.setLockedFilter(true);
}
public static final FilterNonlandCard FILTER_CARD_NON_LAND = new FilterNonlandCard();
static {

View file

@ -0,0 +1,33 @@
package mage.filter.common;
import mage.constants.SubType;
import mage.constants.SuperType;
import mage.filter.FilterCard;
/**
* @author BetaSteward_at_googlemail.com
*/
public class FilterBasicCard extends FilterCard {
public FilterBasicCard(SubType subType) {
this(subType, "basic " + subType + " card");
}
public FilterBasicCard(String name) {
this(null, name);
}
public FilterBasicCard(SubType subType, String name) {
super(subType, name);
this.add(SuperType.BASIC.getPredicate());
}
protected FilterBasicCard(final FilterBasicCard filter) {
super(filter);
}
@Override
public FilterBasicCard copy() {
return new FilterBasicCard(this);
}
}

View file

@ -1,37 +0,0 @@
package mage.filter.common;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.SuperType;
import mage.filter.FilterCard;
/**
* @author BetaSteward_at_googlemail.com
*/
public class FilterBasicLandCard extends FilterCard {
public FilterBasicLandCard() {
this("basic land card");
}
public FilterBasicLandCard(SubType subType) {
this("basic " + subType + " card");
this.add(subType.getPredicate());
}
public FilterBasicLandCard(String name) {
super(name);
this.add(CardType.LAND.getPredicate());
this.add(SuperType.BASIC.getPredicate());
}
protected FilterBasicLandCard(final FilterBasicLandCard filter) {
super(filter);
}
@Override
public FilterBasicLandCard copy() {
return new FilterBasicLandCard(this);
}
}