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.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SubType; import mage.constants.SubType;
import mage.filter.FilterCard;
import mage.filter.FilterPermanent; import mage.filter.FilterPermanent;
import mage.filter.StaticFilters; import mage.filter.StaticFilters;
import mage.filter.common.FilterBasicLandCard;
import mage.filter.common.FilterLandPermanent; import mage.filter.common.FilterLandPermanent;
import mage.filter.predicate.permanent.DefendingPlayerControlsSourceAttackingPredicate; import mage.filter.predicate.permanent.DefendingPlayerControlsSourceAttackingPredicate;
import mage.game.Controllable; import mage.game.Controllable;
@ -32,8 +30,6 @@ import java.util.stream.Collectors;
*/ */
public final class AerialSurveyor extends CardImpl { public final class AerialSurveyor extends CardImpl {
private static final FilterCard filter = new FilterBasicLandCard(SubType.PLAINS);
public AerialSurveyor(UUID ownerId, CardSetInfo setInfo) { public AerialSurveyor(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{2}{W}"); super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{2}{W}");
@ -45,7 +41,7 @@ public final class AerialSurveyor extends CardImpl {
this.addAbility(FlyingAbility.getInstance()); 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. // 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) .withInterveningIf(AerialSurveyorCondition.instance)
.addHint(LandsYouControlHint.instance) .addHint(LandsYouControlHint.instance)
.addHint(AerialSurveyorHint.instance)); .addHint(AerialSurveyorHint.instance));

View file

@ -14,8 +14,7 @@ import mage.cards.CardSetInfo;
import mage.constants.AbilityWord; import mage.constants.AbilityWord;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SubType; import mage.constants.SubType;
import mage.constants.SuperType; import mage.filter.StaticFilters;
import mage.filter.FilterCard;
import mage.target.common.TargetCardInLibrary; import mage.target.common.TargetCardInLibrary;
import java.util.UUID; import java.util.UUID;
@ -25,13 +24,6 @@ import java.util.UUID;
*/ */
public final class AmbitiousFarmhand extends CardImpl { 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) { public AmbitiousFarmhand(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{W}"); 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. // 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( 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. // 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.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.SuperType;
import mage.constants.TargetController; import mage.constants.TargetController;
import mage.filter.FilterCard;
import mage.filter.FilterPermanent; import mage.filter.FilterPermanent;
import mage.filter.StaticFilters; import mage.filter.StaticFilters;
import mage.filter.common.FilterLandPermanent; import mage.filter.common.FilterLandPermanent;
@ -26,13 +23,10 @@ import java.util.UUID;
*/ */
public final class ArchaeomancersMap extends CardImpl { public final class ArchaeomancersMap extends CardImpl {
private static final FilterCard filter = new FilterCard("basic Plains cards"); private static final FilterPermanent filter = new FilterLandPermanent("a land an opponent controls");
private static final FilterPermanent filter2 = new FilterLandPermanent("a land an opponent controls");
static { static {
filter.add(SubType.PLAINS.getPredicate()); filter.add(TargetController.OPPONENT.getControllerPredicate());
filter.add(SuperType.BASIC.getPredicate());
filter2.add(TargetController.OPPONENT.getControllerPredicate());
} }
public ArchaeomancersMap(UUID ownerId, CardSetInfo setInfo) { 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. // 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( 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. // 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( this.addAbility(new EntersBattlefieldAllTriggeredAbility(
new PutCardFromHandOntoBattlefieldEffect(StaticFilters.FILTER_CARD_LAND_A), filter2 new PutCardFromHandOntoBattlefieldEffect(StaticFilters.FILTER_CARD_LAND_A), filter
).withInterveningIf(ArchaeomancersMapCondition.instance)); ).withInterveningIf(ArchaeomancersMapCondition.instance));
} }

View file

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

View file

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

View file

@ -10,9 +10,9 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SagaChapter; import mage.constants.SagaChapter;
import mage.constants.SubType; import mage.constants.SubType;
import mage.constants.SuperType;
import mage.filter.FilterCard; 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.TargetCardInLibrary;
import mage.target.common.TargetCardInYourGraveyard; import mage.target.common.TargetCardInYourGraveyard;
@ -23,13 +23,7 @@ import java.util.UUID;
*/ */
public final class BoseijuReachesSkyward extends CardImpl { public final class BoseijuReachesSkyward 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 FilterCard filter2 = new FilterLandCard("land card from your graveyard");
static {
filter.add(SuperType.BASIC.getPredicate());
filter.add(SubType.FOREST.getPredicate());
}
public BoseijuReachesSkyward(UUID ownerId, CardSetInfo setInfo) { public BoseijuReachesSkyward(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{3}{G}"); super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{3}{G}");
@ -52,7 +46,7 @@ public final class BoseijuReachesSkyward extends CardImpl {
sagaAbility.addChapterEffect( sagaAbility.addChapterEffect(
this, SagaChapter.CHAPTER_II, SagaChapter.CHAPTER_II, this, SagaChapter.CHAPTER_II, SagaChapter.CHAPTER_II,
new PutOnLibraryTargetEffect(true), 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. // 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.CardType;
import mage.constants.SubType; import mage.constants.SubType;
import mage.filter.FilterCard; import mage.filter.FilterCard;
import mage.filter.common.FilterBasicLandCard; import mage.filter.common.FilterBasicCard;
import mage.filter.predicate.Predicates; import mage.filter.predicate.Predicates;
import mage.target.common.TargetCardInLibrary; import mage.target.common.TargetCardInLibrary;
@ -25,7 +25,7 @@ import java.util.UUID;
*/ */
public final class BountifulLandscape extends CardImpl { 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 { static {
filter.add(Predicates.or( filter.add(Predicates.or(

View file

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

View file

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

View file

@ -8,9 +8,7 @@ import mage.abilities.keyword.CraftAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SubType; import mage.filter.StaticFilters;
import mage.filter.FilterCard;
import mage.filter.common.FilterBasicLandCard;
import mage.target.common.TargetCardInLibrary; import mage.target.common.TargetCardInLibrary;
import java.util.UUID; import java.util.UUID;
@ -20,15 +18,13 @@ import java.util.UUID;
*/ */
public final class ClayFiredBricks extends CardImpl { public final class ClayFiredBricks extends CardImpl {
private static final FilterCard filter = new FilterBasicLandCard(SubType.PLAINS);
public ClayFiredBricks(UUID ownerId, CardSetInfo setInfo) { public ClayFiredBricks(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{1}{W}"); super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{1}{W}");
this.secondSideCardClazz = mage.cards.c.CosmiumKiln.class; 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. // 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( 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)); ability.addEffect(new GainLifeEffect(2));
this.addAbility(ability); this.addAbility(ability);

View file

@ -14,7 +14,7 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SubType; import mage.constants.SubType;
import mage.filter.FilterCard; import mage.filter.FilterCard;
import mage.filter.common.FilterBasicLandCard; import mage.filter.common.FilterBasicCard;
import mage.filter.predicate.Predicates; import mage.filter.predicate.Predicates;
import mage.target.common.TargetCardInLibrary; import mage.target.common.TargetCardInLibrary;
@ -25,7 +25,7 @@ import java.util.UUID;
*/ */
public final class ContaminatedLandscape extends CardImpl { 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 { static {
filter.add(Predicates.or( filter.add(Predicates.or(

View file

@ -14,7 +14,7 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SubType; import mage.constants.SubType;
import mage.filter.FilterCard; import mage.filter.FilterCard;
import mage.filter.common.FilterBasicLandCard; import mage.filter.common.FilterBasicCard;
import mage.filter.predicate.Predicates; import mage.filter.predicate.Predicates;
import mage.target.common.TargetCardInLibrary; import mage.target.common.TargetCardInLibrary;
@ -25,7 +25,7 @@ import java.util.UUID;
*/ */
public final class DeceptiveLandscape extends CardImpl { 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 { static {
filter.add(Predicates.or( filter.add(Predicates.or(

View file

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

View file

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

View file

@ -9,8 +9,12 @@ import mage.abilities.effects.common.PutCardFromHandOntoBattlefieldEffect;
import mage.abilities.mana.SimpleManaAbility; import mage.abilities.mana.SimpleManaAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; 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.FilterCard;
import mage.filter.common.FilterBasicCard;
import java.util.UUID; import java.util.UUID;
@ -19,12 +23,7 @@ import java.util.UUID;
*/ */
public final class GaeasTouch extends CardImpl { public final class GaeasTouch extends CardImpl {
private static final FilterCard filter = new FilterCard("a basic Forest card"); private static final FilterCard filter = new FilterBasicCard(SubType.FOREST);
static {
filter.add(SuperType.BASIC.getPredicate());
filter.add(SubType.FOREST.getPredicate());
}
public GaeasTouch(UUID ownerId, CardSetInfo setInfo) { public GaeasTouch(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{G}{G}"); 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.CardType;
import mage.constants.SubType; import mage.constants.SubType;
import mage.filter.FilterCard; import mage.filter.FilterCard;
import mage.filter.common.FilterBasicLandCard; import mage.filter.common.FilterBasicCard;
import mage.target.common.TargetCardInLibrary; import mage.target.common.TargetCardInLibrary;
import mage.target.common.TargetCardInYourGraveyard; import mage.target.common.TargetCardInYourGraveyard;
@ -19,7 +19,7 @@ import java.util.UUID;
*/ */
public final class GlimpseTheCore extends CardImpl { 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"); private static final FilterCard filter2 = new FilterCard("Cave card from your graveyard");
static { static {

View file

@ -9,8 +9,7 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SubType; import mage.constants.SubType;
import mage.constants.SuperType; import mage.filter.StaticFilters;
import mage.filter.FilterCard;
import mage.target.common.TargetCardInLibrary; import mage.target.common.TargetCardInLibrary;
import java.util.UUID; import java.util.UUID;
@ -20,13 +19,6 @@ import java.util.UUID;
*/ */
public final class GloryheathLynx extends CardImpl { 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) { public GloryheathLynx(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{W}"); 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. // 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( this.addAbility(new AttacksWhileSaddledTriggeredAbility(
new SearchLibraryPutInHandEffect(new TargetCardInLibrary(filter), true) new SearchLibraryPutInHandEffect(new TargetCardInLibrary(StaticFilters.FILTER_CARD_BASIC_PLAINS), true)
)); ));
// Saddle 2 // Saddle 2

View file

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

View file

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

View file

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

View file

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

View file

@ -10,11 +10,11 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SubType; import mage.constants.SubType;
import mage.constants.SuperType;
import mage.constants.TargetController; import mage.constants.TargetController;
import mage.filter.FilterCard; import mage.filter.FilterCard;
import mage.filter.FilterPermanent; import mage.filter.FilterPermanent;
import mage.filter.StaticFilters; import mage.filter.StaticFilters;
import mage.filter.common.FilterBasicCard;
import mage.game.Game; import mage.game.Game;
import mage.game.permanent.token.SoldierToken; import mage.game.permanent.token.SoldierToken;
import mage.target.common.TargetCardInLibrary; import mage.target.common.TargetCardInLibrary;
@ -26,13 +26,6 @@ import java.util.UUID;
*/ */
public final class KeeperOfTheAccord extends CardImpl { 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) { public KeeperOfTheAccord(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{W}"); 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.Ability;
import mage.abilities.LoyaltyAbility; import mage.abilities.LoyaltyAbility;
import mage.abilities.dynamicvalue.DynamicValue;
import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount; import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount;
import mage.abilities.effects.common.DamageTargetEffect; import mage.abilities.effects.common.DamageTargetEffect;
import mage.abilities.effects.common.GetEmblemEffect; import mage.abilities.effects.common.GetEmblemEffect;
import mage.abilities.effects.common.search.SearchLibraryPutInHandEffect; import mage.abilities.effects.common.search.SearchLibraryPutInHandEffect;
import mage.abilities.hint.Hint;
import mage.abilities.hint.ValueHint;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SubType; import mage.constants.SubType;
import mage.constants.SuperType; import mage.constants.SuperType;
import mage.filter.FilterCard; import mage.filter.FilterCard;
import mage.filter.common.FilterBasicCard;
import mage.filter.common.FilterControlledPermanent; import mage.filter.common.FilterControlledPermanent;
import mage.game.command.emblems.KothFireOfResistanceEmblem; import mage.game.command.emblems.KothFireOfResistanceEmblem;
import mage.target.common.TargetCardInLibrary; import mage.target.common.TargetCardInLibrary;
@ -24,14 +28,11 @@ import java.util.UUID;
*/ */
public final class KothFireOfResistance extends CardImpl { public final class KothFireOfResistance extends CardImpl {
private static final FilterCard filter = new FilterCard("basic Mountain card"); private static final FilterCard filter = new FilterBasicCard(SubType.MOUNTAIN);
private static final FilterControlledPermanent filter2 = new FilterControlledPermanent("Mountains you control"); private static final DynamicValue xValue = new PermanentsOnBattlefieldCount(
new FilterControlledPermanent(SubType.MOUNTAIN, "Mountains you control")
static { );
filter.add(SuperType.BASIC.getPredicate()); private static final Hint hint = new ValueHint(xValue.getMessage(), xValue);
filter.add(SubType.MOUNTAIN.getPredicate());
filter2.add(SubType.MOUNTAIN.getPredicate());
}
public KothFireOfResistance(UUID ownerId, CardSetInfo setInfo) { public KothFireOfResistance(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.PLANESWALKER}, "{2}{R}{R}"); 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)); 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. // 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); .setText("{this} deals damage to target creature equal to the number of Mountains you control"), -3);
ability.addTarget(new TargetCreaturePermanent()); 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." // 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)); this.addAbility(new LoyaltyAbility(new GetEmblemEffect(new KothFireOfResistanceEmblem()), -7));

View file

@ -1,8 +1,6 @@
package mage.cards.l; package mage.cards.l;
import java.util.List;
import java.util.UUID;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.DelayedTriggeredAbility; import mage.abilities.DelayedTriggeredAbility;
import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SimpleActivatedAbility;
@ -14,23 +12,21 @@ import mage.abilities.dynamicvalue.common.StaticValue;
import mage.abilities.effects.Effect; import mage.abilities.effects.Effect;
import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.DrawCardTargetEffect; import mage.abilities.effects.common.DrawCardTargetEffect;
import mage.cards.Card; import mage.cards.*;
import mage.cards.Cards;
import mage.cards.CardImpl;
import mage.cards.CardsImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.Outcome; import mage.constants.Outcome;
import mage.constants.Zone; import mage.constants.Zone;
import mage.filter.common.FilterBasicLandCard; import mage.filter.StaticFilters;
import mage.game.Game; import mage.game.Game;
import mage.players.Player; import mage.players.Player;
import mage.target.TargetPlayer; import mage.target.TargetPlayer;
import mage.target.common.TargetCardInGraveyard; import mage.target.common.TargetCardInGraveyard;
import mage.target.targetpointer.FixedTarget; import mage.target.targetpointer.FixedTarget;
import java.util.List;
import java.util.UUID;
/** /**
*
* @author ThomasLerner, LevelX2 & L_J * @author ThomasLerner, LevelX2 & L_J
*/ */
public final class LodestoneBauble extends CardImpl { public final class LodestoneBauble extends CardImpl {
@ -61,7 +57,7 @@ public final class LodestoneBauble extends CardImpl {
class LodestoneBaubleTarget extends TargetCardInGraveyard { class LodestoneBaubleTarget extends TargetCardInGraveyard {
public LodestoneBaubleTarget() { 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) { private LodestoneBaubleTarget(final LodestoneBaubleTarget target) {
@ -87,7 +83,7 @@ class LodestoneBaubleTarget extends TargetCardInGraveyard {
} }
class LodestoneBaubleEffect extends OneShotEffect { class LodestoneBaubleEffect extends OneShotEffect {
LodestoneBaubleEffect() { LodestoneBaubleEffect() {
super(Outcome.Detriment); 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"; 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.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SubType; import mage.constants.SubType;
import mage.filter.FilterCard;
import mage.filter.StaticFilters; import mage.filter.StaticFilters;
import mage.filter.common.FilterBasicLandCard;
import mage.target.common.TargetCardInLibrary; import mage.target.common.TargetCardInLibrary;
import java.util.UUID; import java.util.UUID;
@ -22,7 +20,6 @@ import java.util.UUID;
*/ */
public final class LoyalWarhound extends CardImpl { 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); private static final Condition condition = new OpponentControlsMoreCondition(StaticFilters.FILTER_LANDS);
public LoyalWarhound(UUID ownerId, CardSetInfo setInfo) { 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, // 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. // search your library for a basic Plains card, put it onto the battlefield tapped, then shuffle.
this.addAbility(new EntersBattlefieldTriggeredAbility( this.addAbility(new EntersBattlefieldTriggeredAbility(
new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(filter), true) new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(StaticFilters.FILTER_CARD_BASIC_PLAINS), true)
).withInterveningIf(condition)); ).withInterveningIf(condition));
} }

View file

@ -6,8 +6,7 @@ import mage.abilities.keyword.CyclingAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.filter.FilterCard; import mage.filter.StaticFilters;
import mage.filter.common.FilterBasicLandCard;
import mage.target.common.TargetCardInLibrary; import mage.target.common.TargetCardInLibrary;
import java.util.UUID; import java.util.UUID;
@ -17,14 +16,12 @@ import java.util.UUID;
*/ */
public final class MigrationPath extends CardImpl { public final class MigrationPath extends CardImpl {
private static final FilterCard filter = new FilterBasicLandCard("basic land cards");
public MigrationPath(UUID ownerId, CardSetInfo setInfo) { public MigrationPath(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{3}{G}"); 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. // 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( this.getSpellAbility().addEffect(new SearchLibraryPutInPlayEffect(
new TargetCardInLibrary(0, 2, filter), true new TargetCardInLibrary(0, 2, StaticFilters.FILTER_CARD_BASIC_LANDS), true
)); ));
// Cycling {2} // Cycling {2}

View file

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

View file

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

View file

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

View file

@ -1,10 +1,6 @@
package mage.cards.o; package mage.cards.o;
import java.util.HashSet;
import java.util.Set;
import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.common.EntersBattlefieldTriggeredAbility;
@ -16,13 +12,16 @@ import mage.constants.CardType;
import mage.constants.Outcome; import mage.constants.Outcome;
import mage.constants.SubType; import mage.constants.SubType;
import mage.constants.Zone; import mage.constants.Zone;
import mage.filter.common.FilterBasicLandCard; import mage.filter.StaticFilters;
import mage.game.Game; import mage.game.Game;
import mage.players.Player; import mage.players.Player;
import mage.target.common.TargetCardInLibrary; import mage.target.common.TargetCardInLibrary;
import java.util.HashSet;
import java.util.Set;
import java.util.UUID;
/** /**
*
* @author TheElk801 * @author TheElk801
*/ */
public final class OldGrowthDryads extends CardImpl { public final class OldGrowthDryads extends CardImpl {
@ -70,7 +69,7 @@ class OldGrowthDryadsEffect extends OneShotEffect {
for (UUID opponentId : game.getOpponents(source.getControllerId())) { for (UUID opponentId : game.getOpponents(source.getControllerId())) {
Player opponent = game.getPlayer(opponentId); 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)) { 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)) { if (opponent.searchLibrary(target, source, game)) {
Card targetCard = opponent.getLibrary().getCard(target.getFirstTarget(), game); Card targetCard = opponent.getLibrary().getCard(target.getFirstTarget(), game);
if (targetCard != null) { if (targetCard != null) {

View file

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

View file

@ -14,7 +14,7 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SubType; import mage.constants.SubType;
import mage.filter.FilterCard; import mage.filter.FilterCard;
import mage.filter.common.FilterBasicLandCard; import mage.filter.common.FilterBasicCard;
import mage.filter.predicate.Predicates; import mage.filter.predicate.Predicates;
import mage.target.common.TargetCardInLibrary; import mage.target.common.TargetCardInLibrary;
@ -25,7 +25,7 @@ import java.util.UUID;
*/ */
public final class PerilousLandscape extends CardImpl { 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 { static {
filter.add(Predicates.or( filter.add(Predicates.or(

View file

@ -10,9 +10,8 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SubType; import mage.constants.SubType;
import mage.constants.SuperType;
import mage.constants.Zone; import mage.constants.Zone;
import mage.filter.FilterCard; import mage.filter.StaticFilters;
import mage.target.common.TargetCardInLibrary; import mage.target.common.TargetCardInLibrary;
import java.util.UUID; import java.util.UUID;
@ -22,13 +21,6 @@ import java.util.UUID;
*/ */
public final class PilgrimOfTheAges extends CardImpl { 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) { public PilgrimOfTheAges(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{W}"); 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. // 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( this.addAbility(new EntersBattlefieldTriggeredAbility(new SearchLibraryPutInHandEffect(
new TargetCardInLibrary(filter), true new TargetCardInLibrary(StaticFilters.FILTER_CARD_BASIC_PLAINS), true
), true)); ), true));
// {6}: Return Pilgrim of the Ages from your graveyard to your hand. // {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.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SubType; import mage.constants.SubType;
import mage.constants.SuperType;
import mage.filter.FilterCard; import mage.filter.FilterCard;
import mage.filter.common.FilterBasicCard;
import mage.target.common.TargetCardInLibrary; import mage.target.common.TargetCardInLibrary;
import java.util.UUID; import java.util.UUID;
@ -19,12 +19,7 @@ import java.util.UUID;
*/ */
public final class Plasmancer extends CardImpl { public final class Plasmancer extends CardImpl {
private static final FilterCard filter = new FilterCard("a basic Swamp card"); private static final FilterCard filter = new FilterBasicCard(SubType.SWAMP);
static {
filter.add(SuperType.BASIC.getPredicate());
filter.add(SubType.SWAMP.getPredicate());
}
public Plasmancer(UUID ownerId, CardSetInfo setInfo) { public Plasmancer(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{2}{B}{B}"); 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.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.filter.FilterCard;
import mage.filter.StaticFilters; import mage.filter.StaticFilters;
import mage.filter.common.FilterBasicLandCard;
import mage.target.common.TargetCardInLibrary; import mage.target.common.TargetCardInLibrary;
import java.util.UUID; import java.util.UUID;
@ -17,8 +15,6 @@ import java.util.UUID;
*/ */
public final class RoilingRegrowth extends CardImpl { public final class RoilingRegrowth extends CardImpl {
private static final FilterCard filter = new FilterBasicLandCard("basic land cards");
public RoilingRegrowth(UUID ownerId, CardSetInfo setInfo) { public RoilingRegrowth(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{2}{G}"); super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{2}{G}");
@ -27,7 +23,7 @@ public final class RoilingRegrowth extends CardImpl {
StaticFilters.FILTER_LAND, 1, null StaticFilters.FILTER_LAND, 1, null
).setText("Sacrifice a land.")); ).setText("Sacrifice a land."));
this.getSpellAbility().addEffect(new SearchLibraryPutInPlayEffect( 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; package mage.cards.s;
import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.common.EntersBattlefieldTriggeredAbility;
import mage.abilities.effects.common.GainLifeEffect; import mage.abilities.effects.common.GainLifeEffect;
import mage.abilities.effects.common.search.SearchLibraryPutInHandEffect; import mage.abilities.effects.common.search.SearchLibraryPutInHandEffect;
import mage.cards.OmenCard;
import mage.constants.SubType;
import mage.abilities.keyword.FlyingAbility; import mage.abilities.keyword.FlyingAbility;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.cards.OmenCard;
import mage.constants.CardType; import mage.constants.CardType;
import mage.filter.common.FilterBasicLandCard; import mage.constants.SubType;
import mage.filter.StaticFilters;
import mage.target.common.TargetCardInLibrary; import mage.target.common.TargetCardInLibrary;
import java.util.UUID;
/** /**
*
* @author Jmlundeen * @author Jmlundeen
*/ */
public final class SaguWildling extends OmenCard { public final class SaguWildling extends OmenCard {
public SaguWildling(UUID ownerId, CardSetInfo setInfo) { 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.subtype.add(SubType.DRAGON);
this.power = new MageInt(3); this.power = new MageInt(3);
this.toughness = new MageInt(3); this.toughness = new MageInt(3);
@ -34,7 +34,7 @@ public final class SaguWildling extends OmenCard {
// Roost Seek // Roost Seek
// Search your library for a basic land card, reveal it, put it into your hand, then shuffle. // 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.getSpellCard().getSpellAbility().addEffect(new SearchLibraryPutInHandEffect(target, true));
this.finalizeOmen(); this.finalizeOmen();
} }

View file

@ -10,8 +10,6 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SubType; import mage.constants.SubType;
import mage.constants.SuperType;
import mage.filter.FilterCard;
import mage.filter.StaticFilters; import mage.filter.StaticFilters;
import mage.target.common.TargetCardInLibrary; import mage.target.common.TargetCardInLibrary;
@ -22,13 +20,6 @@ import java.util.UUID;
*/ */
public final class ScoutingHawk extends CardImpl { 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); private static final Condition condition = new OpponentControlsMoreCondition(StaticFilters.FILTER_LANDS);
public ScoutingHawk(UUID ownerId, CardSetInfo setInfo) { 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. // 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( 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")); ).withInterveningIf(condition).withFlavorWord("Keen Sight"));
} }

View file

@ -14,7 +14,7 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SubType; import mage.constants.SubType;
import mage.filter.FilterCard; import mage.filter.FilterCard;
import mage.filter.common.FilterBasicLandCard; import mage.filter.common.FilterBasicCard;
import mage.filter.predicate.Predicates; import mage.filter.predicate.Predicates;
import mage.target.common.TargetCardInLibrary; import mage.target.common.TargetCardInLibrary;
@ -25,7 +25,7 @@ import java.util.UUID;
*/ */
public final class SeethingLandscape extends CardImpl { 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 { static {
filter.add(Predicates.or( filter.add(Predicates.or(

View file

@ -14,7 +14,7 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SubType; import mage.constants.SubType;
import mage.filter.FilterCard; import mage.filter.FilterCard;
import mage.filter.common.FilterBasicLandCard; import mage.filter.common.FilterBasicCard;
import mage.filter.predicate.Predicates; import mage.filter.predicate.Predicates;
import mage.target.common.TargetCardInLibrary; import mage.target.common.TargetCardInLibrary;
@ -25,7 +25,7 @@ import java.util.UUID;
*/ */
public final class ShatteredLandscape extends CardImpl { 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 { static {
filter.add(Predicates.or( filter.add(Predicates.or(

View file

@ -14,7 +14,7 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SubType; import mage.constants.SubType;
import mage.filter.FilterCard; import mage.filter.FilterCard;
import mage.filter.common.FilterBasicLandCard; import mage.filter.common.FilterBasicCard;
import mage.filter.predicate.Predicates; import mage.filter.predicate.Predicates;
import mage.target.common.TargetCardInLibrary; import mage.target.common.TargetCardInLibrary;
@ -25,7 +25,7 @@ import java.util.UUID;
*/ */
public final class ShelteringLandscape extends CardImpl { 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 { static {
filter.add(Predicates.or( filter.add(Predicates.or(

View file

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

View file

@ -10,7 +10,6 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SubType; import mage.constants.SubType;
import mage.constants.SuperType;
import mage.filter.FilterCard; import mage.filter.FilterCard;
import mage.target.common.TargetCardInLibrary; import mage.target.common.TargetCardInLibrary;
@ -21,12 +20,7 @@ import java.util.UUID;
*/ */
public final class SunbladeSamurai extends CardImpl { public final class SunbladeSamurai extends CardImpl {
private static final FilterCard filter = new FilterCard("a basic Plains card"); private static final FilterCard filter = new FilterCard(SubType.PLAINS);
static {
filter.add(SubType.PLAINS.getPredicate());
filter.add(SuperType.BASIC.getPredicate());
}
public SunbladeSamurai(UUID ownerId, CardSetInfo setInfo) { public SunbladeSamurai(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT, CardType.CREATURE}, "{4}{W}"); 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.CardType;
import mage.constants.SagaChapter; import mage.constants.SagaChapter;
import mage.constants.SubType; import mage.constants.SubType;
import mage.constants.SuperType; import mage.filter.StaticFilters;
import mage.filter.FilterCard;
import mage.game.permanent.token.ArtifactWallToken; import mage.game.permanent.token.ArtifactWallToken;
import mage.target.common.TargetCardInLibrary; import mage.target.common.TargetCardInLibrary;
@ -21,13 +20,6 @@ import java.util.UUID;
*/ */
public final class TheBirthOfMeletis extends CardImpl { 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) { public TheBirthOfMeletis(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{W}"); 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. // I Search your library for a basic Plains card, reveal it, put it into your hand, then shuffle your library.
sagaAbility.addChapterEffect( sagaAbility.addChapterEffect(
this, SagaChapter.CHAPTER_I, new SearchLibraryPutInHandEffect( 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.abilities.keyword.TransformAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; 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.FilterCard;
import mage.filter.StaticFilters;
import mage.filter.common.FilterPermanentCard; import mage.filter.common.FilterPermanentCard;
import mage.filter.predicate.mageobject.ManaValuePredicate; import mage.filter.predicate.mageobject.ManaValuePredicate;
import mage.target.common.TargetCardInLibrary; import mage.target.common.TargetCardInLibrary;
@ -24,14 +28,10 @@ import java.util.UUID;
*/ */
public final class TheRestorationOfEiganjo extends CardImpl { public final class TheRestorationOfEiganjo extends CardImpl {
private static final FilterCard filter
= new FilterCard("a basic Plains card");
private static final FilterCard filter2 private static final FilterCard filter2
= new FilterPermanentCard("permanent card with mana value 2 or less from your graveyard"); = new FilterPermanentCard("permanent card with mana value 2 or less from your graveyard");
static { static {
filter.add(SubType.PLAINS.getPredicate());
filter.add(SuperType.BASIC.getPredicate());
filter2.add(new ManaValuePredicate(ComparisonType.FEWER_THAN, 3)); 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. // I - Search your library for a basic Plains card, reveal it, put it into your hand, then shuffle.
sagaAbility.addChapterEffect( sagaAbility.addChapterEffect(
this, SagaChapter.CHAPTER_I, new SearchLibraryPutInHandEffect( 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.CardType;
import mage.constants.SubType; import mage.constants.SubType;
import mage.filter.FilterCard; import mage.filter.FilterCard;
import mage.filter.common.FilterBasicLandCard; import mage.filter.common.FilterBasicCard;
import mage.filter.predicate.Predicates; import mage.filter.predicate.Predicates;
import mage.target.common.TargetCardInLibrary; import mage.target.common.TargetCardInLibrary;
@ -25,7 +25,7 @@ import java.util.UUID;
*/ */
public final class TranquilLandscape extends CardImpl { 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 { static {
filter.add(Predicates.or( filter.add(Predicates.or(

View file

@ -14,7 +14,7 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SubType; import mage.constants.SubType;
import mage.filter.FilterCard; import mage.filter.FilterCard;
import mage.filter.common.FilterBasicLandCard; import mage.filter.common.FilterBasicCard;
import mage.filter.predicate.Predicates; import mage.filter.predicate.Predicates;
import mage.target.common.TargetCardInLibrary; import mage.target.common.TargetCardInLibrary;
@ -25,7 +25,7 @@ import java.util.UUID;
*/ */
public final class TwistedLandscape extends CardImpl { 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 { static {
filter.add(Predicates.or( filter.add(Predicates.or(

View file

@ -9,9 +9,7 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.counters.CounterType; import mage.counters.CounterType;
import mage.filter.FilterCard;
import mage.filter.StaticFilters; import mage.filter.StaticFilters;
import mage.filter.common.FilterBasicLandCard;
import mage.target.common.TargetCardInLibrary; import mage.target.common.TargetCardInLibrary;
import java.util.UUID; import java.util.UUID;
@ -21,8 +19,6 @@ import java.util.UUID;
*/ */
public final class VastwoodSurge extends CardImpl { public final class VastwoodSurge extends CardImpl {
private static final FilterCard filter = new FilterBasicLandCard("basic land cards");
public VastwoodSurge(UUID ownerId, CardSetInfo setInfo) { public VastwoodSurge(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{3}{G}"); 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. // 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( 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( this.getSpellAbility().addEffect(new ConditionalOneShotEffect(
new AddCountersAllEffect( new AddCountersAllEffect(

View file

@ -185,24 +185,33 @@ public final class StaticFilters {
FILTER_CARD_LAND_A.setLockedFilter(true); 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 { static {
FILTER_CARD_BASIC_LAND.add(SuperType.BASIC.getPredicate());
FILTER_CARD_BASIC_LAND.setLockedFilter(true); 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 { static {
FILTER_CARD_BASIC_LANDS.add(SuperType.BASIC.getPredicate());
FILTER_CARD_BASIC_LANDS.setLockedFilter(true); 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 { static {
FILTER_CARD_BASIC_LAND_A.add(SuperType.BASIC.getPredicate());
FILTER_CARD_BASIC_LAND_A.setLockedFilter(true); 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(); public static final FilterNonlandCard FILTER_CARD_NON_LAND = new FilterNonlandCard();
static { 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);
}
}