new StaticFilters.FILTER_CARD_CREATURE_A_GRAVEYARD

This commit is contained in:
xenohedron 2024-02-04 18:37:30 -05:00
parent cc6d49074f
commit cbb56c2248
40 changed files with 80 additions and 80 deletions

View file

@ -10,9 +10,8 @@ import mage.abilities.effects.common.continuous.GainControlAllEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.*;
import mage.filter.FilterCard;
import mage.filter.FilterPermanent;
import mage.filter.common.FilterCreatureCard;
import mage.filter.StaticFilters;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.permanent.ControllerIdPredicate;
import mage.game.Game;
@ -26,8 +25,6 @@ import java.util.UUID;
*/
public final class AshiokSculptorOfFears extends CardImpl {
private static final FilterCard filter = new FilterCreatureCard("creature card from a graveyard");
public AshiokSculptorOfFears(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.PLANESWALKER}, "{4}{U}{B}");
@ -45,7 +42,7 @@ public final class AshiokSculptorOfFears extends CardImpl {
// 5: Put target creature card from a graveyard onto the battlefield under your control.
ability = new LoyaltyAbility(new ReturnFromGraveyardToBattlefieldTargetEffect()
.setText("put target creature card from a graveyard onto the battlefield under your control"), -5);
ability.addTarget(new TargetCardInGraveyard(filter));
ability.addTarget(new TargetCardInGraveyard(StaticFilters.FILTER_CARD_CREATURE_A_GRAVEYARD));
this.addAbility(ability);
// 11: Gain control of all creatures target opponent controls.

View file

@ -9,7 +9,7 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.filter.common.FilterCreatureCard;
import mage.filter.StaticFilters;
import mage.game.permanent.token.ZombieToken;
import mage.target.common.TargetCardInGraveyard;
@ -20,8 +20,6 @@ import java.util.UUID;
*/
public final class BonecladNecromancer extends CardImpl {
private static final FilterCreatureCard filter = new FilterCreatureCard("creature card from a graveyard");
public BonecladNecromancer(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{B}{B}");
@ -32,7 +30,7 @@ public final class BonecladNecromancer extends CardImpl {
// When Boneclad Necromancer enters the battlefield, you may exile target creature card from a graveyard. If you do, create a 2/2 black Zombie creature token.
Ability ability = new EntersBattlefieldTriggeredAbility(new ExileTargetEffect(), true);
ability.addTarget(new TargetCardInGraveyard(filter));
ability.addTarget(new TargetCardInGraveyard(StaticFilters.FILTER_CARD_CREATURE_A_GRAVEYARD));
ability.addEffect(new CreateTokenEffect(new ZombieToken()).concatBy("If you do,"));
this.addAbility(ability);
}

View file

@ -10,8 +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.common.FilterCreatureCard;
import mage.filter.StaticFilters;
import mage.target.common.TargetCardInGraveyard;
import java.util.UUID;
@ -21,8 +20,6 @@ import java.util.UUID;
*/
public final class CarrionImp extends CardImpl {
private static final FilterCard filter = new FilterCreatureCard("creature card from a graveyard");
public CarrionImp(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{B}");
@ -36,7 +33,7 @@ public final class CarrionImp extends CardImpl {
// When Carrion Imp enters the battlefield, you may exile target creature card from a graveyard. If you do, you gain 2 life.
Ability ability = new EntersBattlefieldTriggeredAbility(new ExileTargetEffect(), true);
ability.addEffect(new GainLifeEffect(2).concatBy("If you do,"));
ability.addTarget(new TargetCardInGraveyard(filter));
ability.addTarget(new TargetCardInGraveyard(StaticFilters.FILTER_CARD_CREATURE_A_GRAVEYARD));
this.addAbility(ability);
}

View file

@ -17,6 +17,7 @@ import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.SubType;
import mage.constants.Zone;
import mage.filter.StaticFilters;
import mage.filter.common.FilterCreatureCard;
import mage.filter.common.FilterCreaturePermanent;
import mage.game.permanent.token.ZombieToken;
@ -46,7 +47,7 @@ public final class CemeteryReaper extends CardImpl {
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new ExileTargetEffect(), new ManaCostsImpl<>("{2}{B}"));
ability.addCost(new TapSourceCost());
ability.addEffect(new CreateTokenEffect(new ZombieToken()));
ability.addTarget(new TargetCardInGraveyard(new FilterCreatureCard("creature card from a graveyard")));
ability.addTarget(new TargetCardInGraveyard(StaticFilters.FILTER_CARD_CREATURE_A_GRAVEYARD));
this.addAbility(ability);
}

View file

@ -21,6 +21,7 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.*;
import mage.filter.FilterPermanent;
import mage.filter.StaticFilters;
import mage.filter.common.FilterCreatureCard;
import mage.filter.common.FilterCreaturePermanent;
import mage.game.Game;
@ -56,7 +57,7 @@ public final class ChainerDementiaMaster extends CardImpl {
// {B}{B}{B}, Pay 3 life: Put target creature card from a graveyard onto the battlefield under your control. That creature is black and is a Nightmare in addition to its other creature types.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new ChainerDementiaMasterEffect(), new ManaCostsImpl<>("{B}{B}{B}"));
ability.addCost(new PayLifeCost(3));
ability.addTarget(new TargetCardInGraveyard(new FilterCreatureCard("creature card from a graveyard")));
ability.addTarget(new TargetCardInGraveyard(StaticFilters.FILTER_CARD_CREATURE_A_GRAVEYARD));
this.addAbility(ability);
// When Chainer, Dementia Master leaves the battlefield, exile all Nightmares.

View file

@ -18,6 +18,7 @@ import mage.constants.Duration;
import mage.constants.Outcome;
import mage.constants.SubType;
import mage.constants.Zone;
import mage.filter.StaticFilters;
import mage.filter.common.FilterCreatureCard;
import mage.game.Game;
import mage.game.events.GameEvent;
@ -45,7 +46,7 @@ public final class CoffinQueen extends CardImpl {
// {2}{B}, {tap}: Put target creature card from a graveyard onto the battlefield under your control. When Coffin Queen becomes untapped or you lose control of Coffin Queen, exile that creature.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new ReturnFromGraveyardToBattlefieldTargetEffect(), new ManaCostsImpl<>("{2}{B}"));
ability.addCost(new TapSourceCost());
ability.addTarget(new TargetCardInGraveyard(new FilterCreatureCard("creature card from a graveyard")));
ability.addTarget(new TargetCardInGraveyard(StaticFilters.FILTER_CARD_CREATURE_A_GRAVEYARD));
ability.addEffect(new CoffinQueenCreateDelayedTriggerEffect());
this.addAbility(ability);

View file

@ -65,7 +65,7 @@ public final class DeathriteShaman extends CardImpl {
ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new ExileTargetEffect(), new ManaCostsImpl<>("{G}"));
ability.addCost(new TapSourceCost());
ability.addEffect(new GainLifeEffect(2));
ability.addTarget(new TargetCardInGraveyard(new FilterCreatureCard("creature card from a graveyard")));
ability.addTarget(new TargetCardInGraveyard(StaticFilters.FILTER_CARD_CREATURE_A_GRAVEYARD));
this.addAbility(ability);
}

View file

@ -10,6 +10,7 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.TargetController;
import mage.constants.Zone;
import mage.filter.StaticFilters;
import mage.filter.common.FilterCreatureCard;
import mage.target.common.TargetCardInGraveyard;
@ -26,7 +27,7 @@ public final class DebtorsKnell extends CardImpl {
// <i>({WB} can be paid with either {W} or {B}.)</i>
// At the beginning of your upkeep, put target creature card from a graveyard onto the battlefield under your control.
Ability ability = new BeginningOfUpkeepTriggeredAbility(Zone.BATTLEFIELD, new ReturnFromGraveyardToBattlefieldTargetEffect(), TargetController.YOU, false);
ability.addTarget(new TargetCardInGraveyard(new FilterCreatureCard("creature card from a graveyard")));
ability.addTarget(new TargetCardInGraveyard(StaticFilters.FILTER_CARD_CREATURE_A_GRAVEYARD));
this.addAbility(ability);
}

View file

@ -20,6 +20,7 @@ import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.Duration;
import mage.constants.Zone;
import mage.filter.StaticFilters;
import mage.filter.common.FilterCreatureCard;
import mage.target.common.TargetCardInGraveyard;
@ -51,7 +52,7 @@ public final class DemonOfDarkSchemes extends CardImpl {
effect.setText("Put target creature card from a graveyard onto the battlefield under your control tapped");
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, effect, new ManaCostsImpl<>("{2}{B}"));
ability.addCost(new PayEnergyCost(4));
ability.addTarget(new TargetCardInGraveyard(new FilterCreatureCard("creature card from a graveyard")));
ability.addTarget(new TargetCardInGraveyard(StaticFilters.FILTER_CARD_CREATURE_A_GRAVEYARD));
this.addAbility(ability);
}

View file

@ -6,6 +6,7 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.filter.FilterCard;
import mage.filter.StaticFilters;
import mage.filter.common.FilterCreatureCard;
import mage.target.common.TargetCardInGraveyard;
@ -16,14 +17,12 @@ import java.util.UUID;
*/
public final class DisturbingPlot extends CardImpl {
private static final FilterCard filter = new FilterCreatureCard("creature card from a graveyard");
public DisturbingPlot(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{1}{B}");
// Return target creature card from a graveyard to its owner's hand.
this.getSpellAbility().addEffect(new ReturnToHandTargetEffect());
this.getSpellAbility().addTarget(new TargetCardInGraveyard(filter));
this.getSpellAbility().addTarget(new TargetCardInGraveyard(StaticFilters.FILTER_CARD_CREATURE_A_GRAVEYARD));
// Conspire
this.addAbility(new ConspireAbility(ConspireAbility.ConspireTargets.ONE));

View file

@ -7,6 +7,7 @@ import mage.abilities.keyword.ConvokeAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.filter.StaticFilters;
import mage.filter.common.FilterCreatureCard;
import mage.target.common.TargetCardInGraveyard;
@ -24,7 +25,7 @@ public final class EndlessObedience extends CardImpl {
this.addAbility(new ConvokeAbility());
// Put target creature card from a graveyard onto the battlefield under your control.
this.getSpellAbility().addTarget(new TargetCardInGraveyard(new FilterCreatureCard("creature card from a graveyard")));
this.getSpellAbility().addTarget(new TargetCardInGraveyard(StaticFilters.FILTER_CARD_CREATURE_A_GRAVEYARD));
this.getSpellAbility().addEffect(new ReturnFromGraveyardToBattlefieldTargetEffect());
}

View file

@ -9,6 +9,7 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.*;
import mage.counters.CounterType;
import mage.filter.StaticFilters;
import mage.filter.common.FilterCreatureCard;
import mage.game.Game;
import mage.game.permanent.Permanent;
@ -47,8 +48,6 @@ public final class EntrailsFeaster extends CardImpl {
class EntrailsFeasterEffect extends OneShotEffect {
private static final FilterCreatureCard filter = new FilterCreatureCard("creature card from a graveyard");
public EntrailsFeasterEffect() {
super(Outcome.Detriment);
this.staticText = "you may exile a creature card from a graveyard. If you do, put a +1/+1 counter on {this}. If you don't, tap {this}";
@ -68,7 +67,7 @@ class EntrailsFeasterEffect extends OneShotEffect {
Player controller = game.getPlayer(source.getControllerId());
if (controller != null && source.getSourceId() != null) {
Permanent sourceObject = source.getSourcePermanentIfItStillExists(game);
TargetCardInGraveyard target = new TargetCardInGraveyard(filter);
TargetCardInGraveyard target = new TargetCardInGraveyard(StaticFilters.FILTER_CARD_CREATURE_A_GRAVEYARD);
target.withNotTarget(true);
if (target.canChoose(controller.getId(), source, game) && controller.chooseUse(outcome, "Exile a creature card from a graveyard?", source, game)) {
if (controller.choose(Outcome.Exile, target, source, game)) {

View file

@ -11,6 +11,7 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.filter.StaticFilters;
import mage.filter.common.FilterCreatureCard;
import mage.target.common.TargetCardInGraveyard;
@ -27,7 +28,7 @@ public final class FatedReturn extends CardImpl {
// Put target creature card from a graveyard onto the battlefield under your control. It gains indestructible. If it's your turn, scry 2.
this.getSpellAbility().addEffect(new ReturnFromGraveyardToBattlefieldTargetEffect());
this.getSpellAbility().addTarget(new TargetCardInGraveyard(new FilterCreatureCard("creature card from a graveyard")));
this.getSpellAbility().addTarget(new TargetCardInGraveyard(StaticFilters.FILTER_CARD_CREATURE_A_GRAVEYARD));
this.getSpellAbility().addEffect(new GainAbilityTargetEffect(IndestructibleAbility.getInstance(), Duration.Custom,
"It gains indestructible"));
this.getSpellAbility().addEffect(new ConditionalOneShotEffect(new ScryEffect(2), MyTurnCondition.instance,

View file

@ -10,6 +10,7 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.counters.CounterType;
import mage.filter.FilterCard;
import mage.filter.StaticFilters;
import mage.filter.common.FilterCreatureCard;
import mage.target.common.TargetCardInGraveyard;
@ -20,15 +21,13 @@ import java.util.UUID;
*/
public final class FromTheCatacombs extends CardImpl {
private static final FilterCard filter = new FilterCreatureCard("creature card from a graveyard");
public FromTheCatacombs(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{3}{B}{B}");
// Return target creature card from a graveyard to the battlefield with a corpse counter on it. If that creature would leave the battlefield, exile it instead of putting it anywhere else.
this.getSpellAbility().addEffect(new ReturnFromGraveyardToBattlefieldWithCounterTargetEffect(CounterType.CORPSE.createInstance()));
this.getSpellAbility().addEffect(new LeaveBattlefieldExileTargetReplacementEffect("that creature"));
this.getSpellAbility().addTarget(new TargetCardInGraveyard(filter));
this.getSpellAbility().addTarget(new TargetCardInGraveyard(StaticFilters.FILTER_CARD_CREATURE_A_GRAVEYARD));
// You take the initiative.
this.getSpellAbility().addEffect(new TakeTheInitiativeEffect().concatBy("<br>"));

View file

@ -12,6 +12,7 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.Zone;
import mage.filter.StaticFilters;
import mage.filter.common.FilterControlledCreaturePermanent;
import mage.filter.common.FilterCreatureCard;
import mage.filter.predicate.permanent.TappedPredicate;
@ -39,7 +40,7 @@ public final class GravespawnSovereign extends CardImpl {
// Tap five untapped Zombies you control: Put target creature card from a graveyard onto the battlefield under your control.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new ReturnFromGraveyardToBattlefieldTargetEffect(), new TapTargetCost(new TargetControlledCreaturePermanent(5, 5, filter, true)));
ability.addTarget(new TargetCardInGraveyard(new FilterCreatureCard("creature card from a graveyard")));
ability.addTarget(new TargetCardInGraveyard(StaticFilters.FILTER_CARD_CREATURE_A_GRAVEYARD));
this.addAbility(ability);
}

View file

@ -6,6 +6,7 @@ import mage.abilities.effects.common.ReturnFromGraveyardToBattlefieldTargetEffec
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.filter.StaticFilters;
import mage.filter.common.FilterCreatureCard;
import mage.target.common.TargetCardInGraveyard;
@ -19,7 +20,7 @@ public final class HymnOfRebirth extends CardImpl {
super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{3}{G}{W}");
// Put target creature card from a graveyard onto the battlefield under your control.
this.getSpellAbility().addTarget(new TargetCardInGraveyard(new FilterCreatureCard("creature card from a graveyard")));
this.getSpellAbility().addTarget(new TargetCardInGraveyard(StaticFilters.FILTER_CARD_CREATURE_A_GRAVEYARD));
this.getSpellAbility().addEffect(new ReturnFromGraveyardToBattlefieldTargetEffect());
}

View file

@ -13,6 +13,7 @@ import mage.constants.CardType;
import mage.constants.SubType;
import mage.counters.CounterType;
import mage.filter.FilterCard;
import mage.filter.StaticFilters;
import mage.filter.common.FilterCreatureCard;
import mage.target.common.TargetCardInGraveyard;
@ -23,8 +24,6 @@ import java.util.UUID;
*/
public final class InheritedFiend extends CardImpl {
private static final FilterCard filter = new FilterCreatureCard("creature card from a graveyard");
public InheritedFiend(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "");
@ -40,7 +39,7 @@ public final class InheritedFiend extends CardImpl {
// {2}{B}: Exile target creature card from a graveyard. Put a +1/+1 counter on Inherited Fiend.
Ability ability = new SimpleActivatedAbility(new ExileTargetEffect(), new ManaCostsImpl<>("{2}{B}"));
ability.addEffect(new AddCountersSourceEffect(CounterType.P1P1.createInstance()).concatBy("."));
ability.addTarget(new TargetCardInGraveyard(filter));
ability.addTarget(new TargetCardInGraveyard(StaticFilters.FILTER_CARD_CREATURE_A_GRAVEYARD));
this.addAbility(ability);
}

View file

@ -17,6 +17,7 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Zone;
import mage.counters.CounterType;
import mage.filter.StaticFilters;
import mage.filter.common.FilterCreatureCard;
import mage.filter.common.FilterNoncreatureCard;
import mage.game.Game;
@ -31,7 +32,6 @@ import mage.target.common.TargetControlledCreaturePermanent;
*/
public final class KirinTouchedOrochi extends CardImpl {
private static final FilterCreatureCard filter = new FilterCreatureCard("creature card from a graveyard");
private static final FilterNoncreatureCard filter2 = new FilterNoncreatureCard("noncreature card from a graveyard");
public KirinTouchedOrochi(UUID ownerId, CardSetInfo setInfo) {
@ -47,7 +47,7 @@ public final class KirinTouchedOrochi extends CardImpl {
// Whenever Kirin-Touched Orochi attacks, choose one
// Exile target creature card from a graveyard. When you do, create a 1/1 colorless Spirit creature token.
Ability ability = new AttacksTriggeredAbility(new KirinTouchedOrochiTokenEffect());
ability.addTarget(new TargetCardInGraveyard(filter));
ability.addTarget(new TargetCardInGraveyard(StaticFilters.FILTER_CARD_CREATURE_A_GRAVEYARD));
// Exile target noncreature card from a graveyard. When you do, put a +1/+1 counter on target creature you control.
Mode mode = new Mode(new KirinTouchedOrochiCounterEffect());

View file

@ -9,6 +9,7 @@ import mage.constants.CardType;
import mage.constants.Outcome;
import mage.constants.Zone;
import mage.filter.FilterCard;
import mage.filter.StaticFilters;
import mage.filter.common.FilterCreatureCard;
import mage.game.Game;
import mage.game.permanent.token.SaprolingToken;
@ -22,14 +23,12 @@ import java.util.UUID;
*/
public final class MorbidBloom extends CardImpl {
private static final FilterCard filter = new FilterCreatureCard("creature card from a graveyard");
public MorbidBloom(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{4}{B}{G}");
// Exile target creature card from a graveyard, then create X 1/1 green Saproling creature tokens, where X is the exiled card's toughness.
this.getSpellAbility().addEffect(new MorbidBloomEffect());
this.getSpellAbility().addTarget(new TargetCardInGraveyard(filter));
this.getSpellAbility().addTarget(new TargetCardInGraveyard(StaticFilters.FILTER_CARD_CREATURE_A_GRAVEYARD));
}
private MorbidBloom(final MorbidBloom card) {

View file

@ -11,7 +11,7 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Zone;
import mage.filter.common.FilterCreatureCard;
import mage.filter.StaticFilters;
import mage.game.permanent.token.SaprolingToken;
import mage.target.common.TargetCardInGraveyard;
@ -26,7 +26,7 @@ public final class Necrogenesis extends CardImpl {
// {2}: Exile target creature card from a graveyard. Create a 1/1 green Saproling creature token.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new ExileTargetEffect(), new GenericManaCost(2));
ability.addTarget(new TargetCardInGraveyard(new FilterCreatureCard("creature card from a graveyard")));
ability.addTarget(new TargetCardInGraveyard(StaticFilters.FILTER_CARD_CREATURE_A_GRAVEYARD));
ability.addEffect(new CreateTokenEffect(new SaprolingToken()));
this.addAbility(ability);
}

View file

@ -10,6 +10,7 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.Zone;
import mage.filter.StaticFilters;
import mage.filter.common.FilterCreatureCard;
import mage.target.common.TargetCardInGraveyard;
@ -20,8 +21,6 @@ import java.util.UUID;
*/
public final class Necromancy extends CardImpl {
private static final FilterCreatureCard filter = new FilterCreatureCard("creature card from a graveyard");
public Necromancy(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{2}{B}");
@ -35,7 +34,7 @@ public final class Necromancy extends CardImpl {
// a graveyard onto the battlefield under your control and attach Necromancy to it. When Necromancy
// leaves the battlefield, that creature's controller sacrifices it.
Ability ability = new AnimateDeadTriggeredAbility(true);
ability.addTarget(new TargetCardInGraveyard(filter));
ability.addTarget(new TargetCardInGraveyard(StaticFilters.FILTER_CARD_CREATURE_A_GRAVEYARD));
this.addAbility(ability);
}

View file

@ -12,7 +12,7 @@ import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.Outcome;
import mage.counters.CounterType;
import mage.filter.common.FilterCreatureCard;
import mage.filter.StaticFilters;
import mage.game.Game;
import mage.game.events.EntersTheBattlefieldEvent;
import mage.game.events.GameEvent;
@ -31,7 +31,7 @@ public final class NecromanticSummons extends CardImpl {
this.getSpellAbility().addEffect(new NecromanticSummoningReplacementEffect());// has to be added before the moving effect
// Put target creature card from a graveyard onto the battlefield under your control.
this.getSpellAbility().addEffect(new ReturnFromGraveyardToBattlefieldTargetEffect());
this.getSpellAbility().addTarget(new TargetCardInGraveyard(new FilterCreatureCard("creature card from a graveyard")));
this.getSpellAbility().addTarget(new TargetCardInGraveyard(StaticFilters.FILTER_CARD_CREATURE_A_GRAVEYARD));
// <i>Spell mastery</i> &mdash; If there are two or more instant and/or sorcery cards in your graveyard,
// that creature enters the battlefield with two additional +1/+1 counters on it.

View file

@ -19,6 +19,7 @@ import mage.constants.Outcome;
import mage.constants.SuperType;
import mage.constants.Zone;
import mage.filter.FilterCard;
import mage.filter.StaticFilters;
import mage.filter.common.FilterCreatureCard;
import mage.game.Game;
import mage.game.permanent.token.TokenImpl;
@ -105,7 +106,7 @@ class NighteyesTheDesecratorToken extends TokenImpl {
toughness = new MageInt(2);
// {4}{B}: Put target creature card from a graveyard onto the battlefield under your control.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new ReturnFromGraveyardToBattlefieldTargetEffect(), new ManaCostsImpl<>("{4}{B}"));
ability.addTarget(new TargetCardInGraveyard(new FilterCreatureCard("creature card from a graveyard")));
ability.addTarget(new TargetCardInGraveyard(StaticFilters.FILTER_CARD_CREATURE_A_GRAVEYARD));
this.addAbility(ability);
}
private NighteyesTheDesecratorToken(final NighteyesTheDesecratorToken token) {

View file

@ -23,8 +23,6 @@ import java.util.UUID;
*/
public final class PortalToPhyrexia extends CardImpl {
private static final FilterCard filter = new FilterCreatureCard("creature card from a graveyard");
public PortalToPhyrexia(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{9}");
@ -38,7 +36,7 @@ public final class PortalToPhyrexia extends CardImpl {
new ReturnFromGraveyardToBattlefieldTargetEffect(), TargetController.YOU, false
);
ability.addEffect(new AddCreatureTypeAdditionEffect(SubType.PHYREXIAN, false));
ability.addTarget(new TargetCardInGraveyard(filter));
ability.addTarget(new TargetCardInGraveyard(StaticFilters.FILTER_CARD_CREATURE_A_GRAVEYARD));
this.addAbility(ability);
}

View file

@ -9,6 +9,7 @@ import mage.abilities.effects.common.ReturnToHandTargetEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.filter.StaticFilters;
import mage.filter.common.FilterCreatureCard;
import mage.target.common.TargetCardInGraveyard;
@ -23,7 +24,7 @@ public final class ReviveTheFallen extends CardImpl {
// Return target creature card from a graveyard to its owner's hand.
this.getSpellAbility().addEffect(new ReturnToHandTargetEffect());
this.getSpellAbility().addTarget(new TargetCardInGraveyard(new FilterCreatureCard("creature card from a graveyard")));
this.getSpellAbility().addTarget(new TargetCardInGraveyard(StaticFilters.FILTER_CARD_CREATURE_A_GRAVEYARD));
// Clash with an opponent. If you win, return Revive the Fallen to its owner's hand.
this.getSpellAbility().addEffect(new DoIfClashWonEffect(ReturnToHandSpellEffect.getInstance()));
}

View file

@ -25,15 +25,13 @@ import java.util.UUID;
*/
public final class RiseFall extends SplitCard {
private static final FilterCard filter = new FilterCreatureCard("creature card from a graveyard");
public RiseFall(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{U}{B}", "{B}{R}", SpellAbilityType.SPLIT);
// Rise
// Return target creature card from a graveyard and target creature on the battlefield to their owners' hands.
getLeftHalfCard().getSpellAbility().addEffect(new RiseEffect());
getLeftHalfCard().getSpellAbility().addTarget(new TargetCardInGraveyard(filter));
getLeftHalfCard().getSpellAbility().addTarget(new TargetCardInGraveyard(StaticFilters.FILTER_CARD_CREATURE_A_GRAVEYARD));
getLeftHalfCard().getSpellAbility().addTarget(new TargetCreaturePermanent());
// Fall

View file

@ -8,6 +8,7 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.filter.StaticFilters;
import mage.filter.common.FilterCreatureCard;
import mage.target.common.TargetCardInGraveyard;
@ -22,7 +23,7 @@ public final class RiseFromTheGrave extends CardImpl {
// Put target creature card from a graveyard onto the battlefield under your control. That creature is a black Zombie in addition to its other colors and types.
this.getSpellAbility().addTarget(new TargetCardInGraveyard(new FilterCreatureCard("creature card from a graveyard")));
this.getSpellAbility().addTarget(new TargetCardInGraveyard(StaticFilters.FILTER_CARD_CREATURE_A_GRAVEYARD));
this.getSpellAbility().addEffect(new ReturnFromGraveyardToBattlefieldTargetEffect());
this.getSpellAbility().addEffect(new AddCreatureTypeAdditionEffect(SubType.ZOMBIE, true));
}

View file

@ -13,7 +13,7 @@ import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.Outcome;
import mage.constants.Zone;
import mage.filter.common.FilterCreatureCard;
import mage.filter.StaticFilters;
import mage.game.Game;
import mage.players.Player;
import mage.target.common.TargetCardInGraveyard;
@ -33,7 +33,7 @@ public final class RotfeasterMaggot extends CardImpl {
// When Rotfeaster Maggot enters the battlefield, exile target creature card from a graveyard. You gain life equal to that card's toughness.
Ability ability = new EntersBattlefieldTriggeredAbility(new RotfeasterMaggotExileEffect(), false);
ability.addTarget(new TargetCardInGraveyard(new FilterCreatureCard("creature card from a graveyard")));
ability.addTarget(new TargetCardInGraveyard(StaticFilters.FILTER_CARD_CREATURE_A_GRAVEYARD));
this.addAbility(ability);
}

View file

@ -13,6 +13,7 @@ import mage.constants.Outcome;
import mage.constants.SubType;
import mage.constants.Zone;
import mage.filter.FilterCard;
import mage.filter.StaticFilters;
import mage.filter.common.FilterCreatureCard;
import mage.game.Game;
import mage.game.permanent.Permanent;
@ -26,8 +27,6 @@ import java.util.UUID;
*/
public final class SelflessExorcist extends CardImpl {
private static final FilterCard filter = new FilterCreatureCard("creature card from a graveyard");
public SelflessExorcist(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{W}{W}");
@ -38,7 +37,7 @@ public final class SelflessExorcist extends CardImpl {
// {tap}: Exile target creature card from a graveyard. That card deals damage equal to its power to Selfless Exorcist.
Ability ability = new SimpleActivatedAbility(new SelflessExorcistEffect(), new TapSourceCost());
ability.addTarget(new TargetCardInGraveyard(filter));
ability.addTarget(new TargetCardInGraveyard(StaticFilters.FILTER_CARD_CREATURE_A_GRAVEYARD));
this.addAbility(ability);
}

View file

@ -8,6 +8,7 @@ import mage.abilities.effects.common.GainLifeEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.filter.StaticFilters;
import mage.filter.common.FilterCreatureCard;
import mage.game.permanent.token.ZombieToken;
import mage.target.common.TargetCardInGraveyard;
@ -23,7 +24,7 @@ public final class ShambleBack extends CardImpl {
// Exile target creature card from a graveyard. Create a 2/2 black Zombie creature token. You gain 2 life.
this.getSpellAbility().addEffect(new ExileTargetEffect());
this.getSpellAbility().addTarget(new TargetCardInGraveyard(new FilterCreatureCard("creature card from a graveyard")));
this.getSpellAbility().addTarget(new TargetCardInGraveyard(StaticFilters.FILTER_CARD_CREATURE_A_GRAVEYARD));
this.getSpellAbility().addEffect(new CreateTokenEffect(new ZombieToken()));
this.getSpellAbility().addEffect(new GainLifeEffect(2));
}

View file

@ -14,6 +14,7 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.SuperType;
import mage.filter.StaticFilters;
import mage.filter.common.FilterCreatureCard;
import mage.target.Target;
import mage.target.common.TargetCardInGraveyard;
@ -37,7 +38,7 @@ public final class TenebTheHarvester extends CardImpl {
// Whenever Teneb, the Harvester deals combat damage to a player, you may pay {2}{B}. If you do, put target creature card from a graveyard onto the battlefield under your control.
Ability ability = new DealsCombatDamageToAPlayerTriggeredAbility(
new DoIfCostPaid(new ReturnFromGraveyardToBattlefieldTargetEffect(), new ManaCostsImpl<>("{2}{B}")), false);
Target target = new TargetCardInGraveyard(new FilterCreatureCard("creature card from a graveyard"));
Target target = new TargetCardInGraveyard(StaticFilters.FILTER_CARD_CREATURE_A_GRAVEYARD);
ability.addTarget(target);
this.addAbility(ability);
}

View file

@ -13,6 +13,7 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.filter.FilterCard;
import mage.filter.StaticFilters;
import mage.filter.common.FilterCreatureCard;
import mage.filter.predicate.Predicates;
import mage.target.common.TargetCardInGraveyard;
@ -26,7 +27,6 @@ import mage.target.common.TargetOpponent;
public final class TheCrueltyOfGix extends CardImpl {
private static final FilterCard filter = new FilterCard("creature or planeswalker card");
private static final FilterCreatureCard filter2 = new FilterCreatureCard("creature card from a graveyard");
static {
filter.add(Predicates.or(
@ -60,7 +60,7 @@ public final class TheCrueltyOfGix extends CardImpl {
sagaAbility.addChapterEffect(
this, SagaChapter.CHAPTER_III, SagaChapter.CHAPTER_III,
new ReturnFromGraveyardToBattlefieldTargetEffect(),
new TargetCardInGraveyard(filter2)
new TargetCardInGraveyard(StaticFilters.FILTER_CARD_CREATURE_A_GRAVEYARD)
);
this.addAbility(sagaAbility);
}

View file

@ -28,6 +28,7 @@ import mage.constants.SubType;
import mage.constants.SuperType;
import mage.constants.TargetController;
import mage.constants.Zone;
import mage.filter.StaticFilters;
import mage.filter.common.FilterControlledCreaturePermanent;
import mage.filter.common.FilterCreatureCard;
import mage.game.Game;
@ -60,7 +61,7 @@ public final class TheScarabGod extends CardImpl {
// {2}{U}{B}: Exile target creature card from a graveyard. Create a token that's a copy of it, except it's a 4/4 black Zombie.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new TheScarabGodEffect2(), new ManaCostsImpl<>("{2}{U}{B}"));
ability.addTarget(new TargetCardInGraveyard(1, 1, new FilterCreatureCard("creature card from a graveyard")));
ability.addTarget(new TargetCardInGraveyard(StaticFilters.FILTER_CARD_CREATURE_A_GRAVEYARD));
this.addAbility(ability);
// When The Scarab God dies, return it to its owner's hand at the beginning of the next end step.

View file

@ -12,6 +12,7 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.Zone;
import mage.filter.StaticFilters;
import mage.filter.common.FilterCreatureCard;
import mage.target.common.TargetCardInGraveyard;
@ -31,7 +32,7 @@ public final class ThrabenHeretic extends CardImpl {
// {tap}: Exile target creature card from a graveyard.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new ExileTargetEffect(), new TapSourceCost());
ability.addTarget(new TargetCardInGraveyard(new FilterCreatureCard("creature card from a graveyard")));
ability.addTarget(new TargetCardInGraveyard(StaticFilters.FILTER_CARD_CREATURE_A_GRAVEYARD));
this.addAbility(ability);
}

View file

@ -23,14 +23,12 @@ import java.util.UUID;
*/
public final class TooGreedilyTooDeep extends CardImpl {
private static final FilterCard filter = new FilterCreatureCard("creature card from a graveyard");
public TooGreedilyTooDeep(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{5}{B}{R}");
// Put target creature card from a graveyard onto the battlefield under your control. That creature deals damage equal to its power to each other creature.
this.getSpellAbility().addEffect(new TooGreedilyTooDeepEffect());
this.getSpellAbility().addTarget(new TargetCardInGraveyard(filter));
this.getSpellAbility().addTarget(new TargetCardInGraveyard(StaticFilters.FILTER_CARD_CREATURE_A_GRAVEYARD));
}
private TooGreedilyTooDeep(final TooGreedilyTooDeep card) {

View file

@ -6,6 +6,7 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.filter.FilterCard;
import mage.filter.StaticFilters;
import mage.filter.common.FilterCreatureCard;
import mage.target.common.TargetCardInGraveyard;
@ -16,14 +17,12 @@ import java.util.UUID;
*/
public final class VatEmergence extends CardImpl {
private static final FilterCard filter = new FilterCreatureCard("creature card from a graveyard");
public VatEmergence(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{4}{B}");
// Put target creature card from a graveyard onto the battlefield under your control. Proliferate.
this.getSpellAbility().addEffect(new ReturnFromGraveyardToBattlefieldTargetEffect());
this.getSpellAbility().addTarget(new TargetCardInGraveyard(filter));
this.getSpellAbility().addTarget(new TargetCardInGraveyard(StaticFilters.FILTER_CARD_CREATURE_A_GRAVEYARD));
this.getSpellAbility().addEffect(new ProliferateEffect());
}

View file

@ -7,6 +7,7 @@ import mage.abilities.effects.common.ExileTargetEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.filter.StaticFilters;
import mage.filter.common.FilterCreatureCard;
import mage.game.permanent.token.ZombieToken;
import mage.target.common.TargetCardInGraveyard;
@ -22,7 +23,7 @@ public final class VileRebirth extends CardImpl {
// Exile target creature card from a graveyard.
this.getSpellAbility().addEffect(new ExileTargetEffect());
this.getSpellAbility().addTarget(new TargetCardInGraveyard(new FilterCreatureCard("creature card from a graveyard")));
this.getSpellAbility().addTarget(new TargetCardInGraveyard(StaticFilters.FILTER_CARD_CREATURE_A_GRAVEYARD));
// Create a 2/2 black Zombie creature token.
this.getSpellAbility().addEffect(new CreateTokenEffect(new ZombieToken()));

View file

@ -11,6 +11,7 @@ import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.TargetController;
import mage.filter.FilterCard;
import mage.filter.StaticFilters;
import mage.filter.common.FilterCreatureCard;
import mage.target.common.TargetCardInGraveyard;
import mage.target.common.TargetCreaturePermanent;
@ -22,8 +23,6 @@ import java.util.UUID;
*/
public final class VirtueOfPersistence extends AdventureCard {
private static final FilterCard filter = new FilterCreatureCard("creature card from a graveyard");
public VirtueOfPersistence(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, new CardType[]{CardType.SORCERY}, "{5}{B}{B}", "Locthwain Scorn", "{1}{B}");
@ -31,7 +30,7 @@ public final class VirtueOfPersistence extends AdventureCard {
Ability ability = new BeginningOfUpkeepTriggeredAbility(
new ReturnFromGraveyardToBattlefieldTargetEffect(), TargetController.YOU, false
);
ability.addTarget(new TargetCardInGraveyard(filter));
ability.addTarget(new TargetCardInGraveyard(StaticFilters.FILTER_CARD_CREATURE_A_GRAVEYARD));
this.addAbility(ability);
// Locthwain Scorn

View file

@ -139,6 +139,12 @@ public final class StaticFilters {
FILTER_CARD_ARTIFACT_FROM_YOUR_GRAVEYARD.setLockedFilter(true);
}
public static final FilterCreatureCard FILTER_CARD_CREATURE_A_GRAVEYARD = new FilterCreatureCard("creature card from a graveyard");
static {
FILTER_CARD_CREATURE_A_GRAVEYARD.setLockedFilter(true);
}
public static final FilterNoncreatureCard FILTER_CARD_NON_CREATURE = new FilterNoncreatureCard();
static {

View file

@ -11,7 +11,7 @@ import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.SuperType;
import mage.constants.Zone;
import mage.filter.common.FilterCreatureCard;
import mage.filter.StaticFilters;
import mage.target.common.TargetCardInGraveyard;
/**
@ -30,7 +30,7 @@ public final class NighteyesTheDesecratorToken extends TokenImpl {
toughness = new MageInt(2);
// {4}{B}: Put target creature card from a graveyard onto the battlefield under your control.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new ReturnFromGraveyardToBattlefieldTargetEffect(), new ManaCostsImpl<>("{4}{B}"));
ability.addTarget(new TargetCardInGraveyard(new FilterCreatureCard("creature card from a graveyard")));
ability.addTarget(new TargetCardInGraveyard(StaticFilters.FILTER_CARD_CREATURE_A_GRAVEYARD));
this.addAbility(ability);
}