Implemented Aven Wind Mage

This commit is contained in:
Evan Kranzler 2018-06-11 19:43:23 -04:00
parent 90afb57a2b
commit 19768424c1
38 changed files with 114 additions and 71 deletions

View file

@ -48,7 +48,7 @@ public final class AdelizTheCinderWind extends CardImpl {
// Whenever you cast an instant or sorcery spell, Wizards you control get +1/+1 until end of turn.
Effect effect = new BoostControlledEffect(1, 1, Duration.EndOfTurn, filter);
Ability ability = new SpellCastControllerTriggeredAbility(effect, StaticFilters.FILTER_INSTANT_OR_SORCERY_SPELL, false);
Ability ability = new SpellCastControllerTriggeredAbility(effect, StaticFilters.FILTER_SPELL_INSTANT_OR_SORCERY, false);
this.addAbility(ability);
}

View file

@ -0,0 +1,48 @@
package mage.cards.a;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.common.SpellCastControllerTriggeredAbility;
import mage.abilities.effects.common.continuous.BoostSourceEffect;
import mage.constants.SubType;
import mage.abilities.keyword.FlyingAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.filter.StaticFilters;
/**
*
* @author TheElk801
*/
public final class AvenWindMage extends CardImpl {
public AvenWindMage(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{U}");
this.subtype.add(SubType.BIRD);
this.subtype.add(SubType.WIZARD);
this.power = new MageInt(2);
this.toughness = new MageInt(2);
// Flying
this.addAbility(FlyingAbility.getInstance());
// Whenever you cast an instant or sorcery spell, Aven Wind Mage gets +1/+1 until end of turn.
this.addAbility(new SpellCastControllerTriggeredAbility(
new BoostSourceEffect(1, 1, Duration.EndOfTurn),
StaticFilters.FILTER_SPELL_AN_INSTANT_OR_SORCERY,
false
));
}
public AvenWindMage(final AvenWindMage card) {
super(card);
}
@Override
public AvenWindMage copy() {
return new AvenWindMage(this);
}
}

View file

@ -82,7 +82,7 @@ class BattlefieldThaumaturgeSpellsCostReductionEffect extends CostModificationEf
if ((abilityToModify instanceof SpellAbility)
&& abilityToModify.getControllerId().equals(source.getControllerId())) {
Spell spell = (Spell) game.getStack().getStackObject(abilityToModify.getId());
return spell != null && StaticFilters.FILTER_INSTANT_OR_SORCERY_SPELL.match(spell, game);
return spell != null && StaticFilters.FILTER_SPELL_INSTANT_OR_SORCERY.match(spell, game);
}
return false;
}

View file

@ -29,7 +29,7 @@ public final class BlistercoilWeird extends CardImpl {
this.toughness = new MageInt(1);
// Whenever you cast an instant or sorcery spell, Blistercoil Weird gets +1/+1 until end of turn. Untap it.
Ability ability = new SpellCastControllerTriggeredAbility(new BoostSourceEffect(1, 1, Duration.EndOfTurn), StaticFilters.FILTER_INSTANT_OR_SORCERY_SPELL, false);
Ability ability = new SpellCastControllerTriggeredAbility(new BoostSourceEffect(1, 1, Duration.EndOfTurn), StaticFilters.FILTER_SPELL_INSTANT_OR_SORCERY, false);
ability.addEffect(new UntapSourceEffect());
this.addAbility(ability);

View file

@ -33,7 +33,7 @@ public final class Cursecatcher extends CardImpl {
SimpleActivatedAbility ability = new SimpleActivatedAbility(Zone.BATTLEFIELD,
new CounterUnlessPaysEffect(new GenericManaCost(1)),
new SacrificeSourceCost());
ability.addTarget(new TargetSpell(StaticFilters.FILTER_INSTANT_OR_SORCERY_SPELL));
ability.addTarget(new TargetSpell(StaticFilters.FILTER_SPELL_INSTANT_OR_SORCERY));
this.addAbility(ability);
}

View file

@ -22,7 +22,7 @@ public final class Disrupt extends CardImpl {
super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{U}");
// Counter target instant or sorcery spell unless its controller pays {1}.
this.getSpellAbility().addTarget(new TargetSpell(StaticFilters.FILTER_INSTANT_OR_SORCERY_SPELL));
this.getSpellAbility().addTarget(new TargetSpell(StaticFilters.FILTER_SPELL_INSTANT_OR_SORCERY));
this.getSpellAbility().addEffect(new CounterUnlessPaysEffect(new GenericManaCost(1)));
// Draw a card.
this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1));

View file

@ -33,7 +33,7 @@ public final class DualcasterMage extends CardImpl {
// When Dualcaster Mage enters the battlefield, copy target instant or sorcery spell. You may choose new targets for the copy.
Ability ability = new EntersBattlefieldTriggeredAbility(new CopyTargetSpellEffect(), false);
ability.addTarget(new TargetSpell(StaticFilters.FILTER_INSTANT_OR_SORCERY_SPELL));
ability.addTarget(new TargetSpell(StaticFilters.FILTER_SPELL_INSTANT_OR_SORCERY));
this.addAbility(ability);
}

View file

@ -46,7 +46,7 @@ public final class EchoMage extends LevelerCard {
// {U}{U}, {tap}: Copy target instant or sorcery spell. You may choose new targets for the copy.
Abilities<Ability> abilities1 = new AbilitiesImpl<>();
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new CopyTargetSpellEffect(), new ManaCostsImpl("{U}{U}"));
ability.addTarget(new TargetSpell(StaticFilters.FILTER_INSTANT_OR_SORCERY_SPELL));
ability.addTarget(new TargetSpell(StaticFilters.FILTER_SPELL_INSTANT_OR_SORCERY));
ability.addCost(new TapSourceCost());
abilities1.add(ability);
// LEVEL 4+
@ -54,7 +54,7 @@ public final class EchoMage extends LevelerCard {
// {U}{U}, {tap}: Copy target instant or sorcery spell twice. You may choose new targets for the copies.
Abilities<Ability> abilities2 = new AbilitiesImpl<>();
ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new EchoMageEffect(), new ManaCostsImpl("{U}{U}"));
ability.addTarget(new TargetSpell(StaticFilters.FILTER_INSTANT_OR_SORCERY_SPELL));
ability.addTarget(new TargetSpell(StaticFilters.FILTER_SPELL_INSTANT_OR_SORCERY));
ability.addCost(new TapSourceCost());
abilities2.add(ability);

View file

@ -38,7 +38,7 @@ public final class EnergyStorm extends CardImpl {
// Prevent all damage that would be dealt by instant and sorcery spells.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD,
new PreventAllDamageByAllObjectsEffect(StaticFilters.FILTER_INSTANT_OR_SORCERY_SPELLS, Duration.WhileOnBattlefield, false)
new PreventAllDamageByAllObjectsEffect(StaticFilters.FILTER_SPELLS_INSTANT_OR_SORCERY, Duration.WhileOnBattlefield, false)
));
// Creatures with flying don't untap during their controllers' untap steps.

View file

@ -111,7 +111,7 @@ class EyeOfTheStormEffect1 extends OneShotEffect {
Card card = spell.getCard();
if (spellController == null
|| card == null
|| !StaticFilters.FILTER_INSTANT_OR_SORCERY_SPELL.match(spell, game)) {
|| !StaticFilters.FILTER_SPELL_INSTANT_OR_SORCERY.match(spell, game)) {
return false;
}
if (!noLongerOnStack) {// the spell is still on the stack, so exile it

View file

@ -39,7 +39,7 @@ public final class FerocityOfTheUnderworld extends CardImpl {
// Copy target instant or sorcery spell. You may choose new targets for the copy.
Mode mode = new Mode();
mode.getEffects().add(new CopyTargetSpellEffect());
mode.getTargets().add(new TargetSpell(StaticFilters.FILTER_INSTANT_OR_SORCERY_SPELL));
mode.getTargets().add(new TargetSpell(StaticFilters.FILTER_SPELL_INSTANT_OR_SORCERY));
this.getSpellAbility().addMode(mode);
// Return target card from your graveyard to your hand.

View file

@ -22,7 +22,7 @@ public final class Flusterstorm extends CardImpl {
// Counter target instant or sorcery spell unless its controller pays {1}.
this.getSpellAbility().addEffect(new CounterUnlessPaysEffect(new ManaCostsImpl("{1}")));
this.getSpellAbility().addTarget(new TargetSpell(StaticFilters.FILTER_INSTANT_OR_SORCERY_SPELL));
this.getSpellAbility().addTarget(new TargetSpell(StaticFilters.FILTER_SPELL_INSTANT_OR_SORCERY));
// Storm
this.addAbility(new StormAbility());
}

View file

@ -29,7 +29,7 @@ public final class Fluxcharger extends CardImpl {
// Flying
this.addAbility(FlyingAbility.getInstance());
// Whenever you cast an instant or sorcery spell, you may switch Fluxcharger's power and toughness until end of turn.
this.addAbility(new SpellCastControllerTriggeredAbility(new SwitchPowerToughnessSourceEffect(Duration.EndOfTurn), StaticFilters.FILTER_INSTANT_OR_SORCERY_SPELL, true));
this.addAbility(new SpellCastControllerTriggeredAbility(new SwitchPowerToughnessSourceEffect(Duration.EndOfTurn), StaticFilters.FILTER_SPELL_INSTANT_OR_SORCERY, true));
}

View file

@ -29,7 +29,7 @@ public final class Fork extends CardImpl {
// Copy target instant or sorcery spell, except that the copy is red. You may choose new targets for the copy.
this.getSpellAbility().addEffect(new ForkEffect());
this.getSpellAbility().addTarget(new TargetSpell(StaticFilters.FILTER_INSTANT_OR_SORCERY_SPELL));
this.getSpellAbility().addTarget(new TargetSpell(StaticFilters.FILTER_SPELL_INSTANT_OR_SORCERY));
}

View file

@ -38,7 +38,7 @@ public final class InsidiousWill extends CardImpl {
// Copy target instant or sorcery spell. You may choose new targets for the copy.
mode = new Mode();
mode.getEffects().add(new CopyTargetSpellEffect());
mode.getTargets().add(new TargetSpell(StaticFilters.FILTER_INSTANT_OR_SORCERY_SPELL));
mode.getTargets().add(new TargetSpell(StaticFilters.FILTER_SPELL_INSTANT_OR_SORCERY));
this.getSpellAbility().getModes().addMode(mode);
}

View file

@ -37,7 +37,7 @@ public final class JudgesFamiliar extends CardImpl {
SimpleActivatedAbility ability = new SimpleActivatedAbility(Zone.BATTLEFIELD,
new CounterUnlessPaysEffect(new GenericManaCost(1)),
new SacrificeSourceCost());
ability.addTarget(new TargetSpell(StaticFilters.FILTER_INSTANT_OR_SORCERY_SPELL));
ability.addTarget(new TargetSpell(StaticFilters.FILTER_SPELL_INSTANT_OR_SORCERY));
this.addAbility(ability);
}

View file

@ -1,4 +1,3 @@
package mage.cards.k;
import java.util.UUID;
@ -10,9 +9,7 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.Duration;
import mage.filter.FilterSpell;
import mage.filter.predicate.Predicates;
import mage.filter.predicate.mageobject.CardTypePredicate;
import mage.filter.StaticFilters;
/**
*
@ -20,22 +17,19 @@ import mage.filter.predicate.mageobject.CardTypePredicate;
*/
public final class KilnFiend extends CardImpl {
private static final FilterSpell filter = new FilterSpell("an instant or sorcery spell");
static {
filter.add(Predicates.or(
new CardTypePredicate(CardType.INSTANT),
new CardTypePredicate(CardType.SORCERY)));
}
public KilnFiend(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{R}");
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{R}");
this.subtype.add(SubType.ELEMENTAL);
this.subtype.add(SubType.BEAST);
this.power = new MageInt(1);
this.toughness = new MageInt(2);
this.addAbility(new SpellCastControllerTriggeredAbility(new BoostSourceEffect(3, 0, Duration.EndOfTurn), filter, false));
this.addAbility(new SpellCastControllerTriggeredAbility(
new BoostSourceEffect(3, 0, Duration.EndOfTurn),
StaticFilters.FILTER_SPELL_AN_INSTANT_OR_SORCERY,
false
));
}
public KilnFiend(final KilnFiend card) {

View file

@ -39,7 +39,7 @@ public final class MeletisCharlatan extends CardImpl {
// {2}{U}, {T}: The controller of target instant or sorcery spell copies it. That player may choose new targets for the copy.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new MeletisCharlatanCopyTargetSpellEffect(), new ManaCostsImpl("{2}{U}"));
ability.addCost(new TapSourceCost());
Target target = new TargetSpell(StaticFilters.FILTER_INSTANT_OR_SORCERY_SPELL);
Target target = new TargetSpell(StaticFilters.FILTER_SPELL_INSTANT_OR_SORCERY);
ability.addTarget(target);
this.addAbility(ability);
}

View file

@ -29,7 +29,7 @@ public final class MercurialGeists extends CardImpl {
this.addAbility(FlyingAbility.getInstance());
// Whenever you cast an instant or sorcery spell, Mercurial Geists gets +3/+0 until end of turn.
this.addAbility(new SpellCastControllerTriggeredAbility(new BoostSourceEffect(3, 0, Duration.EndOfTurn), StaticFilters.FILTER_INSTANT_OR_SORCERY_SPELL, false));
this.addAbility(new SpellCastControllerTriggeredAbility(new BoostSourceEffect(3, 0, Duration.EndOfTurn), StaticFilters.FILTER_SPELL_INSTANT_OR_SORCERY, false));
}
public MercurialGeists(final MercurialGeists card) {

View file

@ -44,7 +44,7 @@ public final class MischievousQuanar extends CardImpl {
Effect effect2 = new CopyTargetSpellEffect();
effect2.setText("copy target instant or sorcery spell. You may choose new targets for that copy");
Ability ability = new TurnedFaceUpSourceTriggeredAbility(effect2);
ability.addTarget(new TargetSpell(StaticFilters.FILTER_INSTANT_OR_SORCERY_SPELL));
ability.addTarget(new TargetSpell(StaticFilters.FILTER_SPELL_INSTANT_OR_SORCERY));
this.addAbility(ability);
}

View file

@ -24,7 +24,7 @@ public final class MoltenInfluence extends CardImpl {
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{1}{R}");
// Counter target instant or sorcery spell unless its controller has Molten Influence deal 4 damage to him or her.
this.getSpellAbility().addTarget(new TargetSpell(StaticFilters.FILTER_INSTANT_OR_SORCERY_SPELL));
this.getSpellAbility().addTarget(new TargetSpell(StaticFilters.FILTER_SPELL_INSTANT_OR_SORCERY));
this.getSpellAbility().addEffect(new MoltenInfluenceEffect());
}

View file

@ -43,7 +43,7 @@ public final class NiblisOfFrost extends CardImpl {
this.addAbility(new ProwessAbility());
// Whenever you cast an instant or sorcery spell, tap target creature an opponent controls. That creature doesn't untap during its controller's next untap step.
Ability ability = new SpellCastControllerTriggeredAbility(new TapTargetEffect(), StaticFilters.FILTER_INSTANT_OR_SORCERY_SPELL, false);
Ability ability = new SpellCastControllerTriggeredAbility(new TapTargetEffect(), StaticFilters.FILTER_SPELL_INSTANT_OR_SORCERY, false);
ability.addTarget(new TargetCreaturePermanent(filterCreature));
ability.addEffect(new DontUntapInControllersNextUntapStepTargetEffect("That creature"));
this.addAbility(ability);

View file

@ -1,4 +1,3 @@
package mage.cards.n;
import java.util.UUID;
@ -15,9 +14,7 @@ import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.Duration;
import mage.constants.Outcome;
import mage.filter.FilterSpell;
import mage.filter.predicate.Predicates;
import mage.filter.predicate.mageobject.CardTypePredicate;
import mage.filter.StaticFilters;
import mage.game.Game;
import mage.game.permanent.Permanent;
@ -27,16 +24,8 @@ import mage.game.permanent.Permanent;
*/
public final class NivixCyclops extends CardImpl {
private static final FilterSpell filter = new FilterSpell("an instant or sorcery spell");
static {
filter.add(Predicates.or(
new CardTypePredicate(CardType.INSTANT),
new CardTypePredicate(CardType.SORCERY)));
}
public NivixCyclops(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{U}{R}");
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{U}{R}");
this.subtype.add(SubType.CYCLOPS);
this.power = new MageInt(1);
@ -46,7 +35,11 @@ public final class NivixCyclops extends CardImpl {
this.addAbility(DefenderAbility.getInstance());
// Whenever you cast an instant or sorcery spell, Nivix Cyclops gets +3/+0 until end of turn and can attack this turn as though it didn't have defender.
Ability ability = new SpellCastControllerTriggeredAbility(new BoostSourceEffect(3, 0, Duration.EndOfTurn), filter, false);
Ability ability = new SpellCastControllerTriggeredAbility(
new BoostSourceEffect(3, 0, Duration.EndOfTurn),
StaticFilters.FILTER_SPELL_AN_INSTANT_OR_SORCERY,
false
);
ability.addEffect(new AsThoughNoDefenderEffect());
this.addAbility(ability);
@ -59,14 +52,14 @@ public final class NivixCyclops extends CardImpl {
@Override
public NivixCyclops copy() {
return new NivixCyclops(this);
}
}
}
class AsThoughNoDefenderEffect extends AsThoughEffectImpl {
public AsThoughNoDefenderEffect() {
super(AsThoughEffectType.ATTACK, Duration.EndOfTurn, Outcome.Benefit);
staticText ="and it can attack as though it didn't have defender";
staticText = "and it can attack as though it didn't have defender";
}
public AsThoughNoDefenderEffect(final AsThoughNoDefenderEffect effect) {
@ -93,5 +86,3 @@ class AsThoughNoDefenderEffect extends AsThoughEffectImpl {
return false;
}
}

View file

@ -26,7 +26,7 @@ public final class OddsEnds extends SplitCard {
// Odds
// Flip a coin. If it comes up heads, counter target instant or sorcery spell. If it comes up tails, copy that spell and you may choose new targets for the copy.
getLeftHalfCard().getSpellAbility().addEffect(new OddsEffect());
getLeftHalfCard().getSpellAbility().addTarget(new TargetSpell(StaticFilters.FILTER_INSTANT_OR_SORCERY_SPELL));
getLeftHalfCard().getSpellAbility().addTarget(new TargetSpell(StaticFilters.FILTER_SPELL_INSTANT_OR_SORCERY));
// Ends
// Target player sacrifices two attacking creatures.

View file

@ -28,7 +28,7 @@ public final class PrescientChimera extends CardImpl {
// Flying
this.addAbility(FlyingAbility.getInstance());
// Whenever you cast an instant or sorcery spell, scry 1.
this.addAbility(new SpellCastControllerTriggeredAbility(new ScryEffect(1), StaticFilters.FILTER_INSTANT_OR_SORCERY_SPELL, false));
this.addAbility(new SpellCastControllerTriggeredAbility(new ScryEffect(1), StaticFilters.FILTER_SPELL_INSTANT_OR_SORCERY, false));
}
public PrescientChimera(final PrescientChimera card) {

View file

@ -21,7 +21,7 @@ public final class Quash extends CardImpl {
// Counter target instant or sorcery spell.
// Search its controller's graveyard, hand, and library for all cards with the same name as that spell and exile them. Then that player shuffles their library.
this.getSpellAbility().addTarget(new TargetSpell(StaticFilters.FILTER_INSTANT_OR_SORCERY_SPELL));
this.getSpellAbility().addTarget(new TargetSpell(StaticFilters.FILTER_SPELL_INSTANT_OR_SORCERY));
this.getSpellAbility().addEffect(new CounterTargetAndSearchGraveyardHandLibraryEffect());
}

View file

@ -23,7 +23,7 @@ public final class Reiterate extends CardImpl {
this.addAbility(new BuybackAbility("{3}"));
// Copy target instant or sorcery spell. You may choose new targets for the copy.
this.getSpellAbility().addTarget(new TargetSpell(StaticFilters.FILTER_INSTANT_OR_SORCERY_SPELL));
this.getSpellAbility().addTarget(new TargetSpell(StaticFilters.FILTER_SPELL_INSTANT_OR_SORCERY));
this.getSpellAbility().addEffect(new CopyTargetSpellEffect());
}

View file

@ -46,7 +46,7 @@ public final class SentinelTower extends CardImpl {
class SentinelTowerTriggeredAbility extends SpellCastAllTriggeredAbility {
SentinelTowerTriggeredAbility() {
super(new DamageTargetEffect(0), StaticFilters.FILTER_INSTANT_OR_SORCERY_SPELL, false);
super(new DamageTargetEffect(0), StaticFilters.FILTER_SPELL_INSTANT_OR_SORCERY, false);
this.addTarget(new TargetAnyTarget());
}

View file

@ -43,7 +43,7 @@ public final class SigilTracer extends CardImpl {
// {1}{U}, Tap two untapped Wizards you control: Copy target instant or sorcery spell. You may choose new targets for the copy.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new CopyTargetSpellEffect(), new ManaCostsImpl("{1}{U}"));
ability.addTarget(new TargetSpell(StaticFilters.FILTER_INSTANT_OR_SORCERY_SPELL));
ability.addTarget(new TargetSpell(StaticFilters.FILTER_SPELL_INSTANT_OR_SORCERY));
ability.addCost(new TapTargetCost(new TargetControlledCreaturePermanent(2, 2, filter, false)));
this.addAbility(ability);
}

View file

@ -25,7 +25,7 @@ public final class SplitDecision extends CardImpl {
// Will of the council - Choose target instant or sorcery spell. Starting with you, each player votes for denial or duplication. If denial gets more votes, counter the spell. If duplication gets more votes or the vote is tied, copy the spell. You may choose new targets for the copy.
this.getSpellAbility().addEffect(new SplitDecisionEffect());
this.getSpellAbility().addTarget(new TargetSpell(StaticFilters.FILTER_INSTANT_OR_SORCERY_SPELL));
this.getSpellAbility().addTarget(new TargetSpell(StaticFilters.FILTER_SPELL_INSTANT_OR_SORCERY));
}
public SplitDecision(final SplitDecision card) {

View file

@ -40,7 +40,7 @@ public final class StratusDancer extends CardImpl {
Effect effect = new CounterTargetEffect();
effect.setText("counter target instant or sorcery spell");
Ability ability = new TurnedFaceUpSourceTriggeredAbility(effect, false);
ability.addTarget(new TargetSpell(StaticFilters.FILTER_INSTANT_OR_SORCERY_SPELL));
ability.addTarget(new TargetSpell(StaticFilters.FILTER_SPELL_INSTANT_OR_SORCERY));
this.addAbility(ability);
}

View file

@ -20,7 +20,7 @@ public final class Twincast extends CardImpl {
// Copy target instant or sorcery spell. You may choose new targets for the copy.
this.getSpellAbility().addEffect(new CopyTargetSpellEffect());
this.getSpellAbility().addTarget(new TargetSpell(StaticFilters.FILTER_INSTANT_OR_SORCERY_SPELL));
this.getSpellAbility().addTarget(new TargetSpell(StaticFilters.FILTER_SPELL_INSTANT_OR_SORCERY));
}
public Twincast(final Twincast card) {

View file

@ -40,7 +40,7 @@ public final class UyoSilentProphet extends CardImpl {
// {2}, Return two lands you control to their owner's hand: Copy target instant or sorcery spell. You may choose new targets for the copy.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new CopyTargetSpellEffect(), new GenericManaCost(2));
ability.addCost(new ReturnToHandChosenControlledPermanentCost(new TargetControlledPermanent(2, 2, new FilterControlledLandPermanent("lands"), false)));
ability.addTarget(new TargetSpell(StaticFilters.FILTER_INSTANT_OR_SORCERY_SPELL));
ability.addTarget(new TargetSpell(StaticFilters.FILTER_SPELL_INSTANT_OR_SORCERY));
this.addAbility(ability);
}

View file

@ -31,7 +31,7 @@ public final class VodalianMystic extends CardImpl {
// {T}: Target instant or sorcery spell becomes the color of your choice.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new BecomesColorTargetEffect(Duration.WhileOnStack), new TapSourceCost());
ability.addTarget(new TargetSpell(StaticFilters.FILTER_INSTANT_OR_SORCERY_SPELL));
ability.addTarget(new TargetSpell(StaticFilters.FILTER_SPELL_INSTANT_OR_SORCERY));
this.addAbility(ability);
}

View file

@ -27,7 +27,7 @@ public final class YoungPyromancer extends CardImpl {
this.toughness = new MageInt(1);
// Whenever you cast an instant or sorcery spell, create a 1/1 red Elemental creature token.
this.addAbility(new SpellCastControllerTriggeredAbility(new CreateTokenEffect(new YoungPyromancerElementalToken()), StaticFilters.FILTER_INSTANT_OR_SORCERY_SPELL, false));
this.addAbility(new SpellCastControllerTriggeredAbility(new CreateTokenEffect(new YoungPyromancerElementalToken()), StaticFilters.FILTER_SPELL_INSTANT_OR_SORCERY, false));
}

View file

@ -29,6 +29,7 @@ public final class CoreSet2019 extends ExpansionSet {
cards.add(new SetCardInfo("Air Elemental", 308, Rarity.UNCOMMON, mage.cards.a.AirElemental.class));
cards.add(new SetCardInfo("Anticipate", 44, Rarity.COMMON, mage.cards.a.Anticipate.class));
cards.add(new SetCardInfo("Apex of Power", 129, Rarity.MYTHIC, mage.cards.a.ApexOfPower.class));
cards.add(new SetCardInfo("Aven Wind Mage", 45, Rarity.COMMON, mage.cards.a.AvenWindMage.class));
cards.add(new SetCardInfo("Befuddle", 309, Rarity.COMMON, mage.cards.b.Befuddle.class));
cards.add(new SetCardInfo("Cancel", 48, Rarity.COMMON, mage.cards.c.Cancel.class));
cards.add(new SetCardInfo("Catalyst Elemental", 132, Rarity.COMMON, mage.cards.c.CatalystElemental.class));

View file

@ -424,24 +424,33 @@ public final class StaticFilters {
FILTER_SPELL_A_MULTICOLORED.setLockedFilter(true);
}
public static final FilterSpell FILTER_INSTANT_OR_SORCERY_SPELL = new FilterSpell("instant or sorcery spell");
public static final FilterSpell FILTER_SPELL_AN_INSTANT_OR_SORCERY = new FilterSpell("an instant or sorcery spell");
static {
FILTER_INSTANT_OR_SORCERY_SPELL.add(Predicates.or(
FILTER_SPELL_AN_INSTANT_OR_SORCERY.add(Predicates.or(
new CardTypePredicate(CardType.INSTANT),
new CardTypePredicate(CardType.SORCERY)
));
FILTER_INSTANT_OR_SORCERY_SPELL.setLockedFilter(true);
FILTER_SPELL_AN_INSTANT_OR_SORCERY.setLockedFilter(true);
}
public static final FilterSpell FILTER_SPELL_INSTANT_OR_SORCERY = new FilterSpell("instant or sorcery spell");
static {
FILTER_SPELL_INSTANT_OR_SORCERY.add(Predicates.or(
new CardTypePredicate(CardType.INSTANT),
new CardTypePredicate(CardType.SORCERY)
));
FILTER_SPELL_INSTANT_OR_SORCERY.setLockedFilter(true);
}
public static final FilterSpell FILTER_INSTANT_OR_SORCERY_SPELLS = new FilterSpell("instant or sorcery spells");
public static final FilterSpell FILTER_SPELLS_INSTANT_OR_SORCERY = new FilterSpell("instant or sorcery spells");
static {
FILTER_INSTANT_OR_SORCERY_SPELLS.add(Predicates.or(
FILTER_SPELLS_INSTANT_OR_SORCERY.add(Predicates.or(
new CardTypePredicate(CardType.INSTANT),
new CardTypePredicate(CardType.SORCERY)
));
FILTER_INSTANT_OR_SORCERY_SPELLS.setLockedFilter(true);
FILTER_SPELLS_INSTANT_OR_SORCERY.setLockedFilter(true);
}
public static final FilterPermanent FILTER_CREATURE_TOKENS = new FilterCreaturePermanent("creature tokens");

View file

@ -20,7 +20,7 @@ public class WillKenrithEmblem extends Emblem {
Zone.COMMAND,
new CopyTargetSpellEffect(true)
.setText("copy that spell. You may choose new targets for the copy"),
StaticFilters.FILTER_INSTANT_OR_SORCERY_SPELL,
StaticFilters.FILTER_SPELL_INSTANT_OR_SORCERY,
false,
true
));