Replaced several created filters inside card classes with pre-built static filters and simplified 3 cards (#8612)

This commit is contained in:
Alex Vasile 2022-01-29 00:05:12 -05:00 committed by GitHub
parent 140be70fb8
commit d24dc008a8
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
213 changed files with 604 additions and 1668 deletions

View file

@ -10,8 +10,7 @@ import mage.abilities.keyword.OutlastAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.*; import mage.constants.*;
import mage.counters.CounterType; import mage.filter.StaticFilters;
import mage.filter.FilterPermanent;
import java.util.UUID; import java.util.UUID;
@ -20,14 +19,6 @@ import java.util.UUID;
*/ */
public final class AbzanBattlePriest extends CardImpl { public final class AbzanBattlePriest extends CardImpl {
private static final FilterPermanent filter = new FilterPermanent();
static {
filter.add(CardType.CREATURE.getPredicate());
filter.add(TargetController.YOU.getControllerPredicate());
filter.add(CounterType.P1P1.getPredicate());
}
public AbzanBattlePriest(UUID ownerId, CardSetInfo setInfo) { public AbzanBattlePriest(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{W}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{W}");
this.subtype.add(SubType.HUMAN); this.subtype.add(SubType.HUMAN);
@ -44,7 +35,8 @@ public final class AbzanBattlePriest extends CardImpl {
Zone.BATTLEFIELD, Zone.BATTLEFIELD,
new GainAbilityAllEffect( new GainAbilityAllEffect(
LifelinkAbility.getInstance(), Duration.WhileOnBattlefield, LifelinkAbility.getInstance(), Duration.WhileOnBattlefield,
filter, "Each creature you control with a +1/+1 counter on it has lifelink" StaticFilters.FILTER_EACH_CONTROLLED_CREATURE_P1P1,
"Each creature you control with a +1/+1 counter on it has lifelink"
) )
)); ));
} }

View file

@ -11,21 +11,13 @@ import mage.abilities.keyword.OutlastAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.*; import mage.constants.*;
import mage.counters.CounterType; import mage.filter.StaticFilters;
import mage.filter.FilterPermanent;
/** /**
* *
* @author emerald000 * @author emerald000
*/ */
public final class AbzanFalconer extends CardImpl { public final class AbzanFalconer extends CardImpl {
private static final FilterPermanent filter = new FilterPermanent();
static {
filter.add(CardType.CREATURE.getPredicate());
filter.add(TargetController.YOU.getControllerPredicate());
filter.add(CounterType.P1P1.getPredicate());
}
public AbzanFalconer(UUID ownerId, CardSetInfo setInfo) { public AbzanFalconer(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{W}"); super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{W}");
@ -39,7 +31,11 @@ public final class AbzanFalconer extends CardImpl {
this.addAbility(new OutlastAbility(new ColoredManaCost(ColoredManaSymbol.W))); this.addAbility(new OutlastAbility(new ColoredManaCost(ColoredManaSymbol.W)));
// Each creature you control with a +1/+1 counter on it has flying. // Each creature you control with a +1/+1 counter on it has flying.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAllEffect(FlyingAbility.getInstance(), Duration.WhileOnBattlefield, filter, "Each creature you control with a +1/+1 counter on it has flying"))); this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAllEffect(
FlyingAbility.getInstance(),
Duration.WhileOnBattlefield,
StaticFilters.FILTER_EACH_CONTROLLED_CREATURE_P1P1)
));
} }
private AbzanFalconer(final AbzanFalconer card) { private AbzanFalconer(final AbzanFalconer card) {

View file

@ -10,8 +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.Duration; import mage.constants.Duration;
import mage.constants.TargetController; import mage.filter.StaticFilters;
import mage.filter.common.FilterCreaturePermanent;
import mage.target.common.TargetCreaturePermanent; import mage.target.common.TargetCreaturePermanent;
/** /**
@ -20,15 +19,9 @@ import mage.target.common.TargetCreaturePermanent;
*/ */
public final class ActOfAggression extends CardImpl { public final class ActOfAggression extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature an opponent controls");
static {
filter.add(TargetController.OPPONENT.getControllerPredicate());
}
public ActOfAggression(UUID ownerId, CardSetInfo setInfo) { public ActOfAggression(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{3}{R/P}{R/P}"); super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{3}{R/P}{R/P}");
this.getSpellAbility().addTarget(new TargetCreaturePermanent(filter)); this.getSpellAbility().addTarget(new TargetCreaturePermanent(StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURE));
this.getSpellAbility().addEffect(new GainControlTargetEffect(Duration.EndOfTurn)); this.getSpellAbility().addEffect(new GainControlTargetEffect(Duration.EndOfTurn));
this.getSpellAbility().addEffect(new UntapTargetEffect().setText("Untap that creature")); this.getSpellAbility().addEffect(new UntapTargetEffect().setText("Untap that creature"));
this.getSpellAbility().addEffect(new GainAbilityTargetEffect(HasteAbility.getInstance(), Duration.EndOfTurn).setText("It gains haste until end of turn.")); this.getSpellAbility().addEffect(new GainAbilityTargetEffect(HasteAbility.getInstance(), Duration.EndOfTurn).setText("It gains haste until end of turn."));

View file

@ -10,7 +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.common.FilterControlledCreaturePermanent; import mage.filter.StaticFilters;
/** /**
* *
@ -26,7 +26,7 @@ public final class AhnCropChampion extends CardImpl {
this.toughness = new MageInt(4); this.toughness = new MageInt(4);
// You may exert Ahn-Crop Champion as it attacks. When you do, untap all other creatures you control. // You may exert Ahn-Crop Champion as it attacks. When you do, untap all other creatures you control.
addAbility(new ExertAbility(new BecomesExertSourceTriggeredAbility(new UntapAllControllerEffect(new FilterControlledCreaturePermanent("creatures you control"), null, false)))); addAbility(new ExertAbility(new BecomesExertSourceTriggeredAbility(new UntapAllControllerEffect(StaticFilters.FILTER_CONTROLLED_CREATURES, null, false))));
} }
private AhnCropChampion(final AhnCropChampion card) { private AhnCropChampion(final AhnCropChampion card) {

View file

@ -11,8 +11,7 @@ import mage.abilities.keyword.OutlastAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.*; import mage.constants.*;
import mage.counters.CounterType; import mage.filter.StaticFilters;
import mage.filter.FilterPermanent;
/** /**
* *
@ -20,16 +19,6 @@ import mage.filter.FilterPermanent;
*/ */
public final class AinokBondKin extends CardImpl { public final class AinokBondKin extends CardImpl {
private static final FilterPermanent filter = new FilterPermanent();
static {
filter.add(CardType.CREATURE.getPredicate());
filter.add(TargetController.YOU.getControllerPredicate());
filter.add(CounterType.P1P1.getPredicate());
}
static final String rule = "Each creature you control with a +1/+1 counter on it has first strike";
public AinokBondKin(UUID ownerId, CardSetInfo setInfo) { public AinokBondKin(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{W}"); super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{W}");
this.subtype.add(SubType.DOG); this.subtype.add(SubType.DOG);
@ -42,8 +31,10 @@ public final class AinokBondKin extends CardImpl {
this.addAbility(new OutlastAbility(new ManaCostsImpl("{1}{W}"))); this.addAbility(new OutlastAbility(new ManaCostsImpl("{1}{W}")));
// Each creature you control with a +1/+1 counter on it has first strike. // Each creature you control with a +1/+1 counter on it has first strike.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAllEffect(FirstStrikeAbility.getInstance(), Duration.WhileOnBattlefield, filter, rule))); this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAllEffect(
FirstStrikeAbility.getInstance(),
Duration.WhileOnBattlefield,
StaticFilters.FILTER_EACH_CONTROLLED_CREATURE_P1P1)));
} }
private AinokBondKin(final AinokBondKin card) { private AinokBondKin(final AinokBondKin card) {

View file

@ -9,7 +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.Duration; import mage.constants.Duration;
import mage.filter.common.FilterControlledCreaturePermanent; import mage.filter.StaticFilters;
/** /**
@ -23,7 +23,7 @@ public final class AkromasBlessing extends CardImpl {
// Choose a color. Creatures you control gain protection from the chosen color until end of turn. // Choose a color. Creatures you control gain protection from the chosen color until end of turn.
this.getSpellAbility().addEffect(new GainProtectionFromColorAllEffect(Duration.EndOfTurn, new FilterControlledCreaturePermanent("Creatures you control"))); this.getSpellAbility().addEffect(new GainProtectionFromColorAllEffect(Duration.EndOfTurn, StaticFilters.FILTER_CONTROLLED_CREATURES));
// Cycling {W} // Cycling {W}
this.addAbility(new CyclingAbility(new ManaCostsImpl("{W}"))); this.addAbility(new CyclingAbility(new ManaCostsImpl("{W}")));
} }

View file

@ -11,7 +11,7 @@ import mage.abilities.effects.common.combat.AttacksIfAbleTargetEffect;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.*; import mage.constants.*;
import mage.filter.common.FilterCreaturePermanent; import mage.filter.StaticFilters;
import mage.target.common.TargetCreaturePermanent; import mage.target.common.TargetCreaturePermanent;
/** /**
@ -20,12 +20,6 @@ import mage.target.common.TargetCreaturePermanent;
*/ */
public final class AlluringSiren extends CardImpl { public final class AlluringSiren extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature an opponent controls");
static {
filter.add(TargetController.OPPONENT.getControllerPredicate());
}
public AlluringSiren(UUID ownerId, CardSetInfo setInfo) { public AlluringSiren(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{U}"); super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{U}");
@ -33,7 +27,7 @@ public final class AlluringSiren extends CardImpl {
this.power = new MageInt(1); this.power = new MageInt(1);
this.toughness = new MageInt(1); this.toughness = new MageInt(1);
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new AttacksIfAbleTargetEffect(Duration.EndOfTurn), new TapSourceCost()); Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new AttacksIfAbleTargetEffect(Duration.EndOfTurn), new TapSourceCost());
ability.addTarget(new TargetCreaturePermanent(filter)); ability.addTarget(new TargetCreaturePermanent(StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURE));
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -15,20 +15,13 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.Duration; import mage.constants.Duration;
import mage.constants.SubType; import mage.constants.SubType;
import mage.constants.TargetController; import mage.filter.StaticFilters;
import mage.filter.common.FilterCreaturePermanent;
/** /**
* *
* @author Quercitron * @author Quercitron
*/ */
public final class AltacBloodseeker extends CardImpl { public final class AltacBloodseeker extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature an opponent controls");
static {
filter.add(TargetController.OPPONENT.getControllerPredicate());
}
public AltacBloodseeker(UUID ownerId, CardSetInfo setInfo) { public AltacBloodseeker(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{R}"); super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{R}");
@ -41,7 +34,7 @@ public final class AltacBloodseeker extends CardImpl {
// Whenever a creature an opponent controls dies, Altac Bloodseeker gets +2/+0 and gains first strike and haste until end of turn. // Whenever a creature an opponent controls dies, Altac Bloodseeker gets +2/+0 and gains first strike and haste until end of turn.
Effect effect = new BoostSourceEffect(2, 0, Duration.EndOfTurn); Effect effect = new BoostSourceEffect(2, 0, Duration.EndOfTurn);
effect.setText("{this} gets +2/+0"); effect.setText("{this} gets +2/+0");
Ability ability = new DiesCreatureTriggeredAbility(effect, false, filter); Ability ability = new DiesCreatureTriggeredAbility(effect, false, StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURE);
effect = new GainAbilitySourceEffect(FirstStrikeAbility.getInstance(), Duration.EndOfTurn); effect = new GainAbilitySourceEffect(FirstStrikeAbility.getInstance(), Duration.EndOfTurn);
effect.setText("and gains first strike"); effect.setText("and gains first strike");

View file

@ -15,9 +15,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.TargetController;
import mage.constants.Zone; import mage.constants.Zone;
import mage.filter.common.FilterCreaturePermanent; import mage.filter.StaticFilters;
import mage.game.Game; import mage.game.Game;
import mage.game.events.GameEvent; import mage.game.events.GameEvent;
import mage.target.common.TargetCreaturePermanent; import mage.target.common.TargetCreaturePermanent;
@ -27,12 +26,6 @@ import mage.target.common.TargetCreaturePermanent;
*/ */
public final class AngelOfDeliverance extends CardImpl { public final class AngelOfDeliverance extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature an opponent controls");
static {
filter.add(TargetController.OPPONENT.getControllerPredicate());
}
public AngelOfDeliverance(UUID ownerId, CardSetInfo setInfo) { public AngelOfDeliverance(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{6}{W}{W}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{6}{W}{W}");
this.subtype.add(SubType.ANGEL); this.subtype.add(SubType.ANGEL);
@ -49,7 +42,7 @@ public final class AngelOfDeliverance extends CardImpl {
DeliriumCondition.instance, DeliriumCondition.instance,
"<i>Delirium</i> &mdash; Whenever {this} deals damage, if there are four or more card types among cards in your graveyard, exile target creature an opponent controls" "<i>Delirium</i> &mdash; Whenever {this} deals damage, if there are four or more card types among cards in your graveyard, exile target creature an opponent controls"
); );
ability.addTarget(new TargetCreaturePermanent(filter)); ability.addTarget(new TargetCreaturePermanent(StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURE));
ability.addHint(CardTypesInGraveyardHint.YOU); ability.addHint(CardTypesInGraveyardHint.YOU);
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -7,7 +7,7 @@ import mage.abilities.effects.common.ReturnToBattlefieldUnderOwnerControlTargetE
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.common.FilterCreaturePermanent; import mage.filter.StaticFilters;
import java.util.UUID; import java.util.UUID;
@ -22,7 +22,7 @@ public final class AngelicRenewal extends CardImpl {
// Whenever a creature is put into your graveyard from the battlefield, you may sacrifice Angelic Renewal. If you do, return that card to the battlefield. // Whenever a creature is put into your graveyard from the battlefield, you may sacrifice Angelic Renewal. If you do, return that card to the battlefield.
this.addAbility(new PutIntoGraveFromBattlefieldAllTriggeredAbility(new DoIfCostPaid( this.addAbility(new PutIntoGraveFromBattlefieldAllTriggeredAbility(new DoIfCostPaid(
new ReturnToBattlefieldUnderOwnerControlTargetEffect(false, false), new SacrificeSourceCost()), false, new ReturnToBattlefieldUnderOwnerControlTargetEffect(false, false), new SacrificeSourceCost()), false,
new FilterCreaturePermanent("a creature"), true, true)); StaticFilters.FILTER_PERMANENT_A_CREATURE, true, true));
} }
private AngelicRenewal(final AngelicRenewal card) { private AngelicRenewal(final AngelicRenewal card) {

View file

@ -15,8 +15,7 @@ import mage.constants.Duration;
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.counters.CounterType; import mage.filter.StaticFilters;
import mage.filter.common.FilterCreaturePermanent;
import mage.target.common.TargetCreaturePermanent; import mage.target.common.TargetCreaturePermanent;
/** /**
@ -24,14 +23,7 @@ import mage.target.common.TargetCreaturePermanent;
* @author JotaPeRL * @author JotaPeRL
*/ */
public final class AquastrandSpider extends CardImpl { public final class AquastrandSpider extends CardImpl {
private static final FilterCreaturePermanent filter
= new FilterCreaturePermanent("creature with a +1/+1 counter on it");
static {
filter.add(CounterType.P1P1.getPredicate());
}
public AquastrandSpider(UUID ownerId, CardSetInfo setInfo) { public AquastrandSpider(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{G}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{G}");
this.subtype.add(SubType.SPIDER); this.subtype.add(SubType.SPIDER);
@ -46,7 +38,7 @@ public final class AquastrandSpider extends CardImpl {
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD,
new GainAbilityTargetEffect(ReachAbility.getInstance(), new GainAbilityTargetEffect(ReachAbility.getInstance(),
Duration.EndOfTurn), new ManaCostsImpl("{G}")); Duration.EndOfTurn), new ManaCostsImpl("{G}"));
ability.addTarget(new TargetCreaturePermanent(filter)); ability.addTarget(new TargetCreaturePermanent(StaticFilters.FILTER_CREATURE_P1P1));
this.addAbility(ability.addCustomOutcome(Outcome.Benefit)); this.addAbility(ability.addCustomOutcome(Outcome.Benefit));
} }

View file

@ -11,8 +11,7 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.Duration; import mage.constants.Duration;
import mage.constants.SubType; import mage.constants.SubType;
import mage.constants.TargetController; import mage.filter.StaticFilters;
import mage.filter.common.FilterCreaturePermanent;
import mage.target.common.TargetCreaturePermanent; import mage.target.common.TargetCreaturePermanent;
/** /**
@ -20,12 +19,6 @@ import mage.target.common.TargetCreaturePermanent;
* @author Plopman * @author Plopman
*/ */
public final class ArenaAthlete extends CardImpl { public final class ArenaAthlete extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature an opponent controls");
static {
filter.add(TargetController.OPPONENT.getControllerPredicate());
}
public ArenaAthlete(UUID ownerId, CardSetInfo setInfo) { public ArenaAthlete(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{R}"); super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{R}");
@ -36,7 +29,7 @@ public final class ArenaAthlete extends CardImpl {
// <i>Heroic</i> Whenever you cast a spell that targets Arena Athlete, target creature an opponent controls can't block this turn. // <i>Heroic</i> Whenever you cast a spell that targets Arena Athlete, target creature an opponent controls can't block this turn.
Ability ability = new HeroicAbility(new CantBlockTargetEffect(Duration.EndOfTurn)); Ability ability = new HeroicAbility(new CantBlockTargetEffect(Duration.EndOfTurn));
TargetCreaturePermanent target = new TargetCreaturePermanent(filter); TargetCreaturePermanent target = new TargetCreaturePermanent(StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURE);
ability.addTarget(target); ability.addTarget(target);
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -10,8 +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.counters.CounterType; import mage.filter.StaticFilters;
import mage.filter.common.FilterControlledCreaturePermanent;
/** /**
* *
@ -19,12 +18,6 @@ import mage.filter.common.FilterControlledCreaturePermanent;
*/ */
public final class ArmorcraftJudge extends CardImpl { public final class ArmorcraftJudge extends CardImpl {
private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("creature you control with a +1/+1 counter on it");
static {
filter.add(CounterType.P1P1.getPredicate());
}
public ArmorcraftJudge(UUID ownerId, CardSetInfo setInfo) { public ArmorcraftJudge(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{G}"); super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{G}");
this.subtype.add(SubType.ELF); this.subtype.add(SubType.ELF);
@ -33,7 +26,9 @@ public final class ArmorcraftJudge extends CardImpl {
this.toughness = new MageInt(3); this.toughness = new MageInt(3);
// When Armorcraft Judge enters the battlefield, draw a card for each creature you control with a +1/+1 counter on it. // When Armorcraft Judge enters the battlefield, draw a card for each creature you control with a +1/+1 counter on it.
this.addAbility(new EntersBattlefieldTriggeredAbility(new DrawCardSourceControllerEffect(new PermanentsOnBattlefieldCount(filter)))); this.addAbility(new EntersBattlefieldTriggeredAbility(new DrawCardSourceControllerEffect(
new PermanentsOnBattlefieldCount(StaticFilters.FILTER_CONTROLLED_CREATURE_P1P1))
));
} }
private ArmorcraftJudge(final ArmorcraftJudge card) { private ArmorcraftJudge(final ArmorcraftJudge card) {

View file

@ -14,21 +14,13 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SubType; import mage.constants.SubType;
import mage.counters.CounterType; import mage.counters.CounterType;
import mage.filter.common.FilterControlledCreaturePermanent; import mage.filter.StaticFilters;
import mage.filter.predicate.mageobject.AnotherPredicate;
/** /**
* *
* @author jeffwadsworth * @author jeffwadsworth
*/ */
public final class AvatarOfTheResolute extends CardImpl { public final class AvatarOfTheResolute extends CardImpl {
private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("other creature you control with a +1/+1 counter on it");
static {
filter.add(CounterType.P1P1.getPredicate());
filter.add(AnotherPredicate.instance);
}
public AvatarOfTheResolute(UUID ownerId, CardSetInfo setInfo) { public AvatarOfTheResolute(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{G}{G}"); super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{G}{G}");
@ -43,9 +35,11 @@ public final class AvatarOfTheResolute extends CardImpl {
this.addAbility(TrampleAbility.getInstance()); this.addAbility(TrampleAbility.getInstance());
// Avatar of the Resolute enters the battlefield with a +1/+1 counter on it for each other creature you control with a +1/+1 counter on it. // Avatar of the Resolute enters the battlefield with a +1/+1 counter on it for each other creature you control with a +1/+1 counter on it.
DynamicValue numberCounters = new PermanentsOnBattlefieldCount(filter); DynamicValue numberCounters = new PermanentsOnBattlefieldCount(StaticFilters.FILTER_OTHER_CONTROLLED_CREATURE_P1P1);
this.addAbility(new EntersBattlefieldAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance(0), numberCounters, true), this.addAbility(new EntersBattlefieldAbility(new AddCountersSourceEffect(
"with a +1/+1 counter on it for each other creature you control with a +1/+1 counter on it")); CounterType.P1P1.createInstance(0), numberCounters, true),
"with a +1/+1 counter on it for each other creature you control with a +1/+1 counter on it")
);
} }

View file

@ -10,8 +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.constants.TargetController; import mage.filter.StaticFilters;
import mage.filter.common.FilterCreaturePermanent;
import mage.target.common.TargetCreaturePermanent; import mage.target.common.TargetCreaturePermanent;
/** /**
@ -19,12 +18,6 @@ import mage.target.common.TargetCreaturePermanent;
* @author LevelX2 * @author LevelX2
*/ */
public final class AzoriusArrester extends CardImpl { public final class AzoriusArrester extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature an opponent controls");
static {
filter.add(TargetController.OPPONENT.getControllerPredicate());
}
public AzoriusArrester(UUID ownerId, CardSetInfo setInfo) { public AzoriusArrester(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{W}"); super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{W}");
@ -36,7 +29,7 @@ public final class AzoriusArrester extends CardImpl {
// When Azorius Arrester enters the battlefield, detain target creature an opponent controls. // When Azorius Arrester enters the battlefield, detain target creature an opponent controls.
Ability ability = new EntersBattlefieldTriggeredAbility(new DetainTargetEffect(), false); Ability ability = new EntersBattlefieldTriggeredAbility(new DetainTargetEffect(), false);
TargetCreaturePermanent target = new TargetCreaturePermanent(filter); TargetCreaturePermanent target = new TargetCreaturePermanent(StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURE);
ability.addTarget(target); ability.addTarget(target);
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -14,8 +14,7 @@ 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.SubType;
import mage.constants.TargetController; import mage.filter.StaticFilters;
import mage.filter.common.FilterCreaturePermanent;
import mage.game.Game; import mage.game.Game;
import mage.game.permanent.Permanent; import mage.game.permanent.Permanent;
import mage.target.common.TargetCreaturePermanent; import mage.target.common.TargetCreaturePermanent;
@ -27,12 +26,6 @@ import mage.util.CardUtil;
*/ */
public final class BanisherPriest extends CardImpl { public final class BanisherPriest extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature an opponent controls");
static {
filter.add(TargetController.OPPONENT.getControllerPredicate());
}
public BanisherPriest(UUID ownerId, CardSetInfo setInfo) { public BanisherPriest(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{W}{W}"); super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{W}{W}");
this.subtype.add(SubType.HUMAN, SubType.CLERIC); this.subtype.add(SubType.HUMAN, SubType.CLERIC);
@ -42,7 +35,7 @@ public final class BanisherPriest extends CardImpl {
// When Banisher Priest enters the battlefield, exile target creature an opponent controls until Banisher Priest leaves the battlefield. // When Banisher Priest enters the battlefield, exile target creature an opponent controls until Banisher Priest leaves the battlefield.
Ability ability = new EntersBattlefieldTriggeredAbility(new BanisherPriestExileEffect()); Ability ability = new EntersBattlefieldTriggeredAbility(new BanisherPriestExileEffect());
ability.addTarget(new TargetCreaturePermanent(filter)); ability.addTarget(new TargetCreaturePermanent(StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURE));
ability.addEffect(new CreateDelayedTriggeredAbilityEffect(new OnLeaveReturnExiledToBattlefieldAbility())); ability.addEffect(new CreateDelayedTriggeredAbilityEffect(new OnLeaveReturnExiledToBattlefieldAbility()));
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -11,6 +11,7 @@ import mage.constants.CardType;
import mage.constants.SubType; import mage.constants.SubType;
import mage.constants.Zone; import mage.constants.Zone;
import mage.counters.CounterType; import mage.counters.CounterType;
import mage.filter.StaticFilters;
import mage.filter.common.FilterControlledCreaturePermanent; import mage.filter.common.FilterControlledCreaturePermanent;
import java.util.UUID; import java.util.UUID;
@ -21,12 +22,6 @@ import java.util.UUID;
*/ */
public final class BattlefrontKrushok extends CardImpl { public final class BattlefrontKrushok extends CardImpl {
private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("creature you control with a +1/+1 counter on it");
static {
filter.add(CounterType.P1P1.getPredicate());
}
public BattlefrontKrushok(UUID ownerId, CardSetInfo setInfo) { public BattlefrontKrushok(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{4}{G}"); super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{4}{G}");
this.subtype.add(SubType.BEAST); this.subtype.add(SubType.BEAST);
@ -37,7 +32,9 @@ public final class BattlefrontKrushok extends CardImpl {
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new CantBeBlockedByMoreThanOneSourceEffect())); this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new CantBeBlockedByMoreThanOneSourceEffect()));
// Each creature you control with a +1/+1 counter on it can't be blocked by more than one creature. // Each creature you control with a +1/+1 counter on it can't be blocked by more than one creature.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new CantBeBlockedByMoreThanOneAllEffect(filter))); this.addAbility(new SimpleStaticAbility(
Zone.BATTLEFIELD,
new CantBeBlockedByMoreThanOneAllEffect(StaticFilters.FILTER_CONTROLLED_CREATURE_P1P1)));
} }
private BattlefrontKrushok(final BattlefrontKrushok card) { private BattlefrontKrushok(final BattlefrontKrushok card) {

View file

@ -10,8 +10,7 @@ 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.SubType;
import mage.constants.TargetController; import mage.filter.StaticFilters;
import mage.filter.common.FilterCreaturePermanent;
import mage.target.TargetPermanent; import mage.target.TargetPermanent;
import mage.target.common.TargetCreaturePermanent; import mage.target.common.TargetCreaturePermanent;
@ -22,18 +21,12 @@ import java.util.UUID;
*/ */
public final class Betrayal extends CardImpl { public final class Betrayal extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature an opponent controls");
static {
filter.add(TargetController.OPPONENT.getControllerPredicate());
}
public Betrayal(UUID ownerId, CardSetInfo setInfo) { public Betrayal(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{U}"); super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{U}");
this.subtype.add(SubType.AURA); this.subtype.add(SubType.AURA);
// Enchant creature an opponent controls // Enchant creature an opponent controls
TargetPermanent auraTarget = new TargetCreaturePermanent(filter); TargetPermanent auraTarget = new TargetCreaturePermanent(StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURE);
this.getSpellAbility().addTarget(auraTarget); this.getSpellAbility().addTarget(auraTarget);
this.getSpellAbility().addEffect(new AttachEffect(Outcome.Detriment)); this.getSpellAbility().addEffect(new AttachEffect(Outcome.Detriment));
Ability ability = new EnchantAbility(auraTarget.getTargetName()); Ability ability = new EnchantAbility(auraTarget.getTargetName());

View file

@ -20,7 +20,7 @@ import mage.constants.CardType;
import mage.constants.Duration; import mage.constants.Duration;
import mage.constants.Outcome; import mage.constants.Outcome;
import mage.constants.SubType; import mage.constants.SubType;
import mage.constants.TargetController; import mage.filter.StaticFilters;
import mage.filter.common.FilterCreaturePermanent; import mage.filter.common.FilterCreaturePermanent;
import mage.game.ExileZone; import mage.game.ExileZone;
import mage.game.Game; import mage.game.Game;
@ -34,12 +34,6 @@ import mage.util.CardUtil;
*/ */
public final class BishopOfBinding extends CardImpl { public final class BishopOfBinding extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature an opponent controls");
static {
filter.add(TargetController.OPPONENT.getControllerPredicate());
}
public BishopOfBinding(UUID ownerId, CardSetInfo setInfo) { public BishopOfBinding(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{W}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{W}");
@ -50,7 +44,7 @@ public final class BishopOfBinding extends CardImpl {
// When Bishop of Binding enters the battlefield, exile target creature an opponent controls until Bishop of Binding leaves the battlefield. // When Bishop of Binding enters the battlefield, exile target creature an opponent controls until Bishop of Binding leaves the battlefield.
Ability ability = new EntersBattlefieldTriggeredAbility(new BishopOfBindingExileEffect()); Ability ability = new EntersBattlefieldTriggeredAbility(new BishopOfBindingExileEffect());
ability.addTarget(new TargetCreaturePermanent(filter)); ability.addTarget(new TargetCreaturePermanent(StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURE));
ability.addEffect(new CreateDelayedTriggeredAbilityEffect(new OnLeaveReturnExiledToBattlefieldAbility())); ability.addEffect(new CreateDelayedTriggeredAbilityEffect(new OnLeaveReturnExiledToBattlefieldAbility()));
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.Zone; import mage.constants.Zone;
import static mage.filter.StaticFilters.FILTER_CONTROLLED_CREATURE_SHORT_TEXT; import static mage.filter.StaticFilters.FILTER_CONTROLLED_CREATURE_SHORT_TEXT;
import mage.filter.common.FilterCreaturePermanent; import mage.filter.StaticFilters;
import mage.target.common.TargetControlledCreaturePermanent; import mage.target.common.TargetControlledCreaturePermanent;
import mage.target.common.TargetAnyTarget; import mage.target.common.TargetAnyTarget;
@ -32,8 +32,9 @@ public final class BlastingStation extends CardImpl {
ability.addCost(new SacrificeTargetCost(new TargetControlledCreaturePermanent(FILTER_CONTROLLED_CREATURE_SHORT_TEXT))); ability.addCost(new SacrificeTargetCost(new TargetControlledCreaturePermanent(FILTER_CONTROLLED_CREATURE_SHORT_TEXT)));
ability.addTarget(new TargetAnyTarget()); ability.addTarget(new TargetAnyTarget());
this.addAbility(ability); this.addAbility(ability);
// Whenever a creature enters the battlefield, you may untap Blasting Station. // Whenever a creature enters the battlefield, you may untap Blasting Station.
this.addAbility(new EntersBattlefieldAllTriggeredAbility(Zone.BATTLEFIELD, new UntapSourceEffect(), new FilterCreaturePermanent("a creature"), true)); this.addAbility(new EntersBattlefieldAllTriggeredAbility(Zone.BATTLEFIELD, new UntapSourceEffect(), StaticFilters.FILTER_PERMANENT_A_CREATURE, true));
} }

View file

@ -8,9 +8,8 @@ import mage.abilities.keyword.ReboundAbility;
import mage.cards.*; import mage.cards.*;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.Outcome; import mage.constants.Outcome;
import mage.constants.TargetController;
import mage.constants.Zone; import mage.constants.Zone;
import mage.filter.common.FilterCreaturePermanent; import mage.filter.StaticFilters;
import mage.game.Game; import mage.game.Game;
import mage.game.permanent.Permanent; import mage.game.permanent.Permanent;
import mage.players.Library; import mage.players.Library;
@ -23,12 +22,6 @@ import mage.target.common.TargetCreaturePermanent;
*/ */
public final class BlessedReincarnation extends CardImpl { public final class BlessedReincarnation extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature an opponent controls");
static {
filter.add(TargetController.OPPONENT.getControllerPredicate());
}
public BlessedReincarnation(UUID ownerId, CardSetInfo setInfo) { public BlessedReincarnation(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{3}{U}"); super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{3}{U}");
@ -36,7 +29,7 @@ public final class BlessedReincarnation extends CardImpl {
// That player reveals cards from the top of their library until a creature card is revealed. // That player reveals cards from the top of their library until a creature card is revealed.
// The player puts that card onto the battlefield, then shuffles the rest into their library. // The player puts that card onto the battlefield, then shuffles the rest into their library.
this.getSpellAbility().addEffect(new BlessedReincarnationEffect()); this.getSpellAbility().addEffect(new BlessedReincarnationEffect());
this.getSpellAbility().addTarget(new TargetCreaturePermanent(filter)); this.getSpellAbility().addTarget(new TargetCreaturePermanent(StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURE));
// Rebound // Rebound
this.addAbility(new ReboundAbility()); this.addAbility(new ReboundAbility());

View file

@ -9,7 +9,7 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.Duration; import mage.constants.Duration;
import mage.constants.Zone; import mage.constants.Zone;
import mage.filter.FilterPermanent; import mage.filter.StaticFilters;
import mage.filter.common.FilterControlledCreaturePermanent; import mage.filter.common.FilterControlledCreaturePermanent;
import mage.filter.predicate.permanent.TokenPredicate; import mage.filter.predicate.permanent.TokenPredicate;
import mage.game.permanent.token.UnicornToken; import mage.game.permanent.token.UnicornToken;
@ -18,7 +18,6 @@ import java.util.UUID;
public class BlessedSanctuary extends CardImpl { public class BlessedSanctuary extends CardImpl {
private static final FilterPermanent filterYourCreatures = new FilterControlledCreaturePermanent("creatures you control");
private static final FilterControlledCreaturePermanent filterNontoken = new FilterControlledCreaturePermanent("a nontoken creature"); private static final FilterControlledCreaturePermanent filterNontoken = new FilterControlledCreaturePermanent("a nontoken creature");
static { static {
@ -30,7 +29,7 @@ public class BlessedSanctuary extends CardImpl {
//Prevent all noncombat damage that would be dealt to you and creatures you control. //Prevent all noncombat damage that would be dealt to you and creatures you control.
this.addAbility(new SimpleStaticAbility(new PreventAllNonCombatDamageToAllEffect( this.addAbility(new SimpleStaticAbility(new PreventAllNonCombatDamageToAllEffect(
Duration.WhileOnBattlefield, filterYourCreatures, true))); Duration.WhileOnBattlefield, StaticFilters.FILTER_CONTROLLED_CREATURES, true)));
//Whenever a nontoken creature enters the battlefield under your control, create a 2/2 white Unicorn creature token. //Whenever a nontoken creature enters the battlefield under your control, create a 2/2 white Unicorn creature token.
this.addAbility(new EntersBattlefieldControlledTriggeredAbility(Zone.BATTLEFIELD, this.addAbility(new EntersBattlefieldControlledTriggeredAbility(Zone.BATTLEFIELD,

View file

@ -12,13 +12,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.TargetController;
import mage.constants.Zone; import mage.constants.Zone;
import mage.counters.CounterType; import mage.counters.CounterType;
import mage.filter.common.FilterCreaturePermanent; import mage.filter.StaticFilters;
import mage.game.Game; import mage.game.Game;
import mage.game.events.GameEvent; import mage.game.events.GameEvent;
import mage.game.events.GameEvent.EventType;
import mage.target.common.TargetCreaturePermanent; import mage.target.common.TargetCreaturePermanent;
/** /**
@ -27,12 +25,6 @@ import mage.target.common.TargetCreaturePermanent;
*/ */
public final class BloodcrazedHoplite extends CardImpl { public final class BloodcrazedHoplite extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature an opponent controls");
static {
filter.add(TargetController.OPPONENT.getControllerPredicate());
}
public BloodcrazedHoplite(UUID ownerId, CardSetInfo setInfo) { public BloodcrazedHoplite(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{B}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{B}");
this.subtype.add(SubType.HUMAN, SubType.SOLDIER); this.subtype.add(SubType.HUMAN, SubType.SOLDIER);
@ -44,7 +36,7 @@ public final class BloodcrazedHoplite extends CardImpl {
this.addAbility(new HeroicAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance(), false))); this.addAbility(new HeroicAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance(), false)));
// Whenever a +1/+1 counter is put on Bloodcrazed Hoplite, remove a +1/+1 counter from target creature an opponent controls. // Whenever a +1/+1 counter is put on Bloodcrazed Hoplite, remove a +1/+1 counter from target creature an opponent controls.
Ability ability = new BloodcrazedHopliteTriggeredAbility(); Ability ability = new BloodcrazedHopliteTriggeredAbility();
ability.addTarget(new TargetCreaturePermanent(filter)); ability.addTarget(new TargetCreaturePermanent(StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURE));
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -12,7 +12,7 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.*; import mage.constants.*;
import mage.counters.CounterType; import mage.counters.CounterType;
import mage.filter.common.FilterControlledCreaturePermanent; import mage.filter.StaticFilters;
import mage.game.Game; import mage.game.Game;
import mage.game.events.EntersTheBattlefieldEvent; import mage.game.events.EntersTheBattlefieldEvent;
import mage.game.events.GameEvent; import mage.game.events.GameEvent;
@ -24,12 +24,6 @@ import mage.game.permanent.Permanent;
*/ */
public final class BramblewoodParagon extends CardImpl { public final class BramblewoodParagon extends CardImpl {
private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("Each creature you control with a +1/+1 counter on it");
static {
filter.add(CounterType.P1P1.getPredicate());
}
public BramblewoodParagon(UUID ownerId, CardSetInfo setInfo) { public BramblewoodParagon(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{G}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{G}");
this.subtype.add(SubType.ELF, SubType.WARRIOR); this.subtype.add(SubType.ELF, SubType.WARRIOR);
@ -45,7 +39,9 @@ public final class BramblewoodParagon extends CardImpl {
new GainAbilityAllEffect( new GainAbilityAllEffect(
TrampleAbility.getInstance(), TrampleAbility.getInstance(),
Duration.WhileOnBattlefield, Duration.WhileOnBattlefield,
filter))); StaticFilters.FILTER_EACH_CONTROLLED_CREATURE_P1P1)
)
);
} }

View file

@ -16,9 +16,8 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.Duration; import mage.constants.Duration;
import mage.constants.TargetController;
import mage.constants.Zone; import mage.constants.Zone;
import mage.filter.common.FilterCreaturePermanent; import mage.filter.StaticFilters;
import mage.target.common.TargetCreaturePermanent; import mage.target.common.TargetCreaturePermanent;
/** /**
@ -27,12 +26,6 @@ import mage.target.common.TargetCreaturePermanent;
*/ */
public final class CaptivatingCrew extends CardImpl { public final class CaptivatingCrew extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature an opponent controls");
static {
filter.add(TargetController.OPPONENT.getControllerPredicate());
}
public CaptivatingCrew(UUID ownerId, CardSetInfo setInfo) { public CaptivatingCrew(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{R}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{R}");
@ -49,7 +42,7 @@ public final class CaptivatingCrew extends CardImpl {
effect = new GainAbilityTargetEffect(HasteAbility.getInstance(), Duration.EndOfTurn); effect = new GainAbilityTargetEffect(HasteAbility.getInstance(), Duration.EndOfTurn);
effect.setText("It gains haste until end of turn"); effect.setText("It gains haste until end of turn");
ability.addEffect(effect); ability.addEffect(effect);
ability.addTarget(new TargetCreaturePermanent(filter)); ability.addTarget(new TargetCreaturePermanent(StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURE));
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -13,7 +13,7 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SetTargetPointer; import mage.constants.SetTargetPointer;
import mage.constants.Zone; import mage.constants.Zone;
import mage.filter.common.FilterCreaturePermanent; import mage.filter.StaticFilters;
/** /**
* *
@ -23,11 +23,10 @@ public final class CarnivalOfSouls extends CardImpl {
public CarnivalOfSouls(UUID ownerId, CardSetInfo setInfo) { public CarnivalOfSouls(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{B}"); super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{B}");
// Whenever a creature enters the battlefield, you lose 1 life and add {B}. // Whenever a creature enters the battlefield, you lose 1 life and add {B}.
Ability ability = new EntersBattlefieldAllTriggeredAbility(Zone.BATTLEFIELD, new LoseLifeSourceControllerEffect(1), Ability ability = new EntersBattlefieldAllTriggeredAbility(Zone.BATTLEFIELD, new LoseLifeSourceControllerEffect(1),
new FilterCreaturePermanent("a creature"), false, SetTargetPointer.PERMANENT, null, false); StaticFilters.FILTER_PERMANENT_A_CREATURE, false, SetTargetPointer.PERMANENT, null, false);
Effect effect = new AddManaToManaPoolSourceControllerEffect(Mana.BlackMana(1)); Effect effect = new AddManaToManaPoolSourceControllerEffect(Mana.BlackMana(1));
effect.setText("and add {B}."); effect.setText("and add {B}.");
ability.addEffect(effect); ability.addEffect(effect);

View file

@ -15,6 +15,7 @@ import mage.constants.CardType;
import mage.constants.SubType; import mage.constants.SubType;
import mage.constants.Duration; import mage.constants.Duration;
import mage.constants.Outcome; import mage.constants.Outcome;
import mage.filter.StaticFilters;
import mage.filter.common.FilterCreaturePermanent; import mage.filter.common.FilterCreaturePermanent;
import mage.game.Game; import mage.game.Game;
import mage.game.permanent.Permanent; import mage.game.permanent.Permanent;
@ -35,8 +36,11 @@ public final class CemeteryPuca extends CardImpl {
this.toughness = new MageInt(2); this.toughness = new MageInt(2);
// Whenever a creature dies, you may pay {1}. If you do, Cemetery Puca becomes a copy of that creature, except it has this ability. // Whenever a creature dies, you may pay {1}. If you do, Cemetery Puca becomes a copy of that creature, except it has this ability.
this.addAbility(new DiesCreatureTriggeredAbility(new DoIfCostPaid(new CemeteryPucaEffect(), new ManaCostsImpl("{1}")), false, new FilterCreaturePermanent("a creature"), true)); this.addAbility(new DiesCreatureTriggeredAbility(
new DoIfCostPaid(new CemeteryPucaEffect(), new ManaCostsImpl("{1}")),
false,
StaticFilters.FILTER_PERMANENT_A_CREATURE,
true));
} }
private CemeteryPuca(final CemeteryPuca card) { private CemeteryPuca(final CemeteryPuca card) {
@ -72,7 +76,7 @@ class CemeteryPucaEffect extends OneShotEffect {
Permanent copyFromCreature = getTargetPointer().getFirstTargetPermanentOrLKI(game, source); Permanent copyFromCreature = getTargetPointer().getFirstTargetPermanentOrLKI(game, source);
if (copyFromCreature != null) { if (copyFromCreature != null) {
game.copyPermanent(Duration.WhileOnBattlefield, copyFromCreature, copyToCreature.getId(), source, new EmptyCopyApplier()); game.copyPermanent(Duration.WhileOnBattlefield, copyFromCreature, copyToCreature.getId(), source, new EmptyCopyApplier());
ContinuousEffect effect = new GainAbilityTargetEffect(new DiesCreatureTriggeredAbility(new DoIfCostPaid(new CemeteryPucaEffect(), new ManaCostsImpl("{1}")), false, new FilterCreaturePermanent("a creature"), true), Duration.WhileOnBattlefield); ContinuousEffect effect = new GainAbilityTargetEffect(new DiesCreatureTriggeredAbility(new DoIfCostPaid(new CemeteryPucaEffect(), new ManaCostsImpl("{1}")), false, StaticFilters.FILTER_PERMANENT_A_CREATURE, true), Duration.WhileOnBattlefield);
effect.setTargetPointer(new FixedTarget(copyToCreature.getId(), game)); effect.setTargetPointer(new FixedTarget(copyToCreature.getId(), game));
game.addEffect(effect, source); game.addEffect(effect, source);
return true; return true;

View file

@ -14,7 +14,7 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.*; import mage.constants.*;
import mage.counters.CounterType; import mage.counters.CounterType;
import mage.filter.common.FilterControlledCreaturePermanent; import mage.filter.StaticFilters;
import mage.filter.common.FilterCreaturePermanent; import mage.filter.common.FilterCreaturePermanent;
import mage.target.common.TargetCreaturePermanent; import mage.target.common.TargetCreaturePermanent;
@ -25,10 +25,8 @@ import mage.target.common.TargetCreaturePermanent;
public final class CennsTactician extends CardImpl { public final class CennsTactician extends CardImpl {
private static final FilterCreaturePermanent filterSoldier = new FilterCreaturePermanent("Soldier creature"); private static final FilterCreaturePermanent filterSoldier = new FilterCreaturePermanent("Soldier creature");
private static final FilterControlledCreaturePermanent filterCounter = new FilterControlledCreaturePermanent("Each creature you control with a +1/+1 counter on it");
static { static {
filterSoldier.add(SubType.SOLDIER.getPredicate()); filterSoldier.add(SubType.SOLDIER.getPredicate());
filterCounter.add(CounterType.P1P1.getPredicate());
} }
public CennsTactician(UUID ownerId, CardSetInfo setInfo) { public CennsTactician(UUID ownerId, CardSetInfo setInfo) {
@ -45,7 +43,14 @@ public final class CennsTactician extends CardImpl {
this.addAbility(ability); this.addAbility(ability);
// Each creature you control with a +1/+1 counter on it can block an additional creature each combat. // Each creature you control with a +1/+1 counter on it can block an additional creature each combat.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new CanBlockAdditionalCreatureAllEffect(1, filterCounter, Duration.WhileOnBattlefield))); this.addAbility(new SimpleStaticAbility(
Zone.BATTLEFIELD,
new CanBlockAdditionalCreatureAllEffect(
1,
StaticFilters.FILTER_EACH_CONTROLLED_CREATURE_P1P1,
Duration.WhileOnBattlefield)
)
);
} }
private CennsTactician(final CennsTactician card) { private CennsTactician(final CennsTactician card) {

View file

@ -15,9 +15,8 @@ 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.SubType;
import mage.constants.TargetController; import mage.filter.StaticFilters;
import mage.filter.common.FilterControlledLandPermanent; import mage.filter.common.FilterControlledLandPermanent;
import mage.filter.common.FilterCreaturePermanent;
import mage.game.Game; import mage.game.Game;
import mage.game.permanent.Permanent; import mage.game.permanent.Permanent;
import mage.target.TargetPermanent; import mage.target.TargetPermanent;
@ -62,11 +61,9 @@ import mage.util.CardUtil;
public final class ChainedToTheRocks extends CardImpl { public final class ChainedToTheRocks extends CardImpl {
private static final FilterControlledLandPermanent filter = new FilterControlledLandPermanent("Mountain you control"); private static final FilterControlledLandPermanent filter = new FilterControlledLandPermanent("Mountain you control");
private static final FilterCreaturePermanent filterTarget = new FilterCreaturePermanent("creature an opponent controls");
static { static {
filter.add(SubType.MOUNTAIN.getPredicate()); filter.add(SubType.MOUNTAIN.getPredicate());
filterTarget.add(TargetController.OPPONENT.getControllerPredicate());
} }
public ChainedToTheRocks(UUID ownerId, CardSetInfo setInfo) { public ChainedToTheRocks(UUID ownerId, CardSetInfo setInfo) {
@ -82,7 +79,7 @@ public final class ChainedToTheRocks extends CardImpl {
// When Chained to the Rocks enters the battlefield, exile target creature an opponent controls until Chained to the Rocks leaves the battlefield. (That creature returns under its owner's control.) // When Chained to the Rocks enters the battlefield, exile target creature an opponent controls until Chained to the Rocks leaves the battlefield. (That creature returns under its owner's control.)
ability = new EntersBattlefieldTriggeredAbility(new ChainedToTheRocksEffect()); ability = new EntersBattlefieldTriggeredAbility(new ChainedToTheRocksEffect());
ability.addTarget(new TargetCreaturePermanent(filterTarget)); ability.addTarget(new TargetCreaturePermanent(StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURE));
ability.addEffect(new CreateDelayedTriggeredAbilityEffect(new OnLeaveReturnExiledToBattlefieldAbility())); ability.addEffect(new CreateDelayedTriggeredAbilityEffect(new OnLeaveReturnExiledToBattlefieldAbility()));
this.addAbility(ability); this.addAbility(ability);

View file

@ -14,8 +14,7 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SubType; import mage.constants.SubType;
import mage.constants.Duration; import mage.constants.Duration;
import mage.constants.TargetController; import mage.filter.StaticFilters;
import mage.filter.common.FilterCreaturePermanent;
import mage.target.common.TargetControlledCreaturePermanent; import mage.target.common.TargetControlledCreaturePermanent;
import mage.target.common.TargetCreaturePermanent; import mage.target.common.TargetCreaturePermanent;
@ -26,12 +25,6 @@ import mage.target.common.TargetCreaturePermanent;
public final class ChromeshellCrab extends CardImpl { public final class ChromeshellCrab extends CardImpl {
private static final String rule = "you may exchange control of target creature you control and target creature an opponent controls"; private static final String rule = "you may exchange control of target creature you control and target creature an opponent controls";
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature an opponent controls");
static {
filter.add(TargetController.OPPONENT.getControllerPredicate());
}
public ChromeshellCrab(UUID ownerId, CardSetInfo setInfo) { public ChromeshellCrab(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{4}{U}"); super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{4}{U}");
@ -48,7 +41,7 @@ public final class ChromeshellCrab extends CardImpl {
effect.setText("exchange control of target creature you control and target creature an opponent controls"); effect.setText("exchange control of target creature you control and target creature an opponent controls");
Ability ability = new TurnedFaceUpSourceTriggeredAbility(effect, false, true); Ability ability = new TurnedFaceUpSourceTriggeredAbility(effect, false, true);
ability.addTarget(new TargetControlledCreaturePermanent()); ability.addTarget(new TargetControlledCreaturePermanent());
ability.addTarget(new TargetCreaturePermanent(filter)); ability.addTarget(new TargetCreaturePermanent(StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURE));
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -11,9 +11,7 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SubType; import mage.constants.SubType;
import mage.constants.Outcome; import mage.constants.Outcome;
import mage.constants.TargetController; import mage.filter.StaticFilters;
import mage.counters.CounterType;
import mage.filter.common.FilterCreaturePermanent;
import mage.game.Game; import mage.game.Game;
import mage.players.Player; import mage.players.Player;
@ -49,12 +47,6 @@ public final class ChroniclerOfHeroes extends CardImpl {
class ChroniclerOfHeroesEffect extends OneShotEffect { class ChroniclerOfHeroesEffect extends OneShotEffect {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("a creature with a +1/+1 counter on it");
static {
filter.add(TargetController.YOU.getControllerPredicate());
filter.add(CounterType.P1P1.getPredicate());
}
public ChroniclerOfHeroesEffect() { public ChroniclerOfHeroesEffect() {
super(Outcome.DrawCard); super(Outcome.DrawCard);
this.staticText = "draw a card if you control a creature with a +1/+1 counter on it"; this.staticText = "draw a card if you control a creature with a +1/+1 counter on it";
@ -73,7 +65,7 @@ class ChroniclerOfHeroesEffect extends OneShotEffect {
public boolean apply(Game game, Ability source) { public boolean apply(Game game, Ability source) {
Player controller = game.getPlayer(source.getControllerId()); Player controller = game.getPlayer(source.getControllerId());
if (controller != null) { if (controller != null) {
if (new PermanentsOnTheBattlefieldCondition(filter).apply(game, source)) { if (new PermanentsOnTheBattlefieldCondition(StaticFilters.FILTER_A_CREATURE_P1P1).apply(game, source)) {
controller.drawCards(1, source, game); controller.drawCards(1, source, game);
} }
return true; return true;

View file

@ -17,7 +17,7 @@ import mage.target.common.TargetAnyTarget;
* @author fireshoes * @author fireshoes
*/ */
public final class CloseQuarters extends CardImpl { public final class CloseQuarters extends CardImpl {
static final private FilterCreaturePermanent filter = new FilterCreaturePermanent("a creature you control"); static final private FilterCreaturePermanent filter = new FilterCreaturePermanent("a creature you control");
static { static {

View file

@ -15,8 +15,7 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SubType; import mage.constants.SubType;
import mage.constants.Duration; import mage.constants.Duration;
import mage.constants.TargetController; import mage.filter.StaticFilters;
import mage.filter.common.FilterCreaturePermanent;
import mage.target.common.TargetCreaturePermanent; import mage.target.common.TargetCreaturePermanent;
/** /**
@ -25,12 +24,6 @@ import mage.target.common.TargetCreaturePermanent;
*/ */
public final class ConqueringManticore extends CardImpl { public final class ConqueringManticore extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature an opponent controls");
static {
filter.add(TargetController.OPPONENT.getControllerPredicate());
}
public ConqueringManticore(UUID ownerId, CardSetInfo setInfo) { public ConqueringManticore(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{R}{R}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{R}{R}");
this.subtype.add(SubType.MANTICORE); this.subtype.add(SubType.MANTICORE);
@ -43,7 +36,7 @@ public final class ConqueringManticore extends CardImpl {
Ability ability = new EntersBattlefieldTriggeredAbility(new GainControlTargetEffect(Duration.EndOfTurn), false); Ability ability = new EntersBattlefieldTriggeredAbility(new GainControlTargetEffect(Duration.EndOfTurn), false);
ability.addEffect(new UntapTargetEffect().setText("Untap that creature")); ability.addEffect(new UntapTargetEffect().setText("Untap that creature"));
ability.addEffect(new GainAbilityTargetEffect(HasteAbility.getInstance(), Duration.EndOfTurn).setText("It gains haste until end of turn.")); ability.addEffect(new GainAbilityTargetEffect(HasteAbility.getInstance(), Duration.EndOfTurn).setText("It gains haste until end of turn."));
ability.addTarget(new TargetCreaturePermanent(filter)); ability.addTarget(new TargetCreaturePermanent(StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURE));
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -14,7 +14,6 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.*; import mage.constants.*;
import mage.filter.StaticFilters; import mage.filter.StaticFilters;
import mage.filter.common.FilterCreaturePermanent;
import mage.game.Game; import mage.game.Game;
import mage.game.permanent.Permanent; import mage.game.permanent.Permanent;
import mage.target.common.TargetCreaturePermanent; import mage.target.common.TargetCreaturePermanent;
@ -26,12 +25,6 @@ import mage.util.CardUtil;
*/ */
public final class ConstrictingSliver extends CardImpl { public final class ConstrictingSliver extends CardImpl {
private static final FilterCreaturePermanent filterTarget = new FilterCreaturePermanent("creature an opponent controls");
static {
filterTarget.add(TargetController.OPPONENT.getControllerPredicate());
}
public ConstrictingSliver(UUID ownerId, CardSetInfo setInfo) { public ConstrictingSliver(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{5}{W}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{5}{W}");
this.subtype.add(SubType.SLIVER); this.subtype.add(SubType.SLIVER);
@ -42,7 +35,7 @@ public final class ConstrictingSliver extends CardImpl {
// Sliver creatures you control have "When this creature enters the battlefield, you may exile target creature an opponent controls // Sliver creatures you control have "When this creature enters the battlefield, you may exile target creature an opponent controls
// until this creature leaves the battlefield." // until this creature leaves the battlefield."
Ability ability = new EntersBattlefieldTriggeredAbility(new ConstrictingSliverExileEffect(), true); Ability ability = new EntersBattlefieldTriggeredAbility(new ConstrictingSliverExileEffect(), true);
ability.addTarget(new TargetCreaturePermanent(filterTarget)); ability.addTarget(new TargetCreaturePermanent(StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURE));
ability.addEffect(new CreateDelayedTriggeredAbilityEffect(new OnLeaveReturnExiledToBattlefieldAbility())); ability.addEffect(new CreateDelayedTriggeredAbilityEffect(new OnLeaveReturnExiledToBattlefieldAbility()));
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD,
new GainAbilityControlledEffect(ability, new GainAbilityControlledEffect(ability,

View file

@ -15,6 +15,7 @@ import mage.constants.CardType;
import mage.constants.SubType; import mage.constants.SubType;
import mage.constants.TargetController; import mage.constants.TargetController;
import mage.constants.Zone; import mage.constants.Zone;
import mage.filter.StaticFilters;
import mage.filter.common.FilterCreaturePermanent; import mage.filter.common.FilterCreaturePermanent;
import mage.target.Target; import mage.target.Target;
import mage.target.common.TargetCreaturePermanent; import mage.target.common.TargetCreaturePermanent;
@ -26,11 +27,9 @@ import mage.target.common.TargetCreaturePermanent;
public final class ContestedCliffs extends CardImpl { public final class ContestedCliffs extends CardImpl {
private static final FilterCreaturePermanent filter1 = new FilterCreaturePermanent("Beast creature you control"); private static final FilterCreaturePermanent filter1 = new FilterCreaturePermanent("Beast creature you control");
private static final FilterCreaturePermanent filter2 = new FilterCreaturePermanent("creature an opponent controls");
static { static {
filter1.add(TargetController.YOU.getControllerPredicate()); filter1.add(TargetController.YOU.getControllerPredicate());
filter1.add(SubType.BEAST.getPredicate()); filter1.add(SubType.BEAST.getPredicate());
filter2.add(TargetController.OPPONENT.getControllerPredicate());
} }
public ContestedCliffs(UUID ownerId, CardSetInfo setInfo) { public ContestedCliffs(UUID ownerId, CardSetInfo setInfo) {
@ -38,16 +37,16 @@ public final class ContestedCliffs extends CardImpl {
// {tap}: Add {C}. // {tap}: Add {C}.
this.addAbility(new ColorlessManaAbility()); this.addAbility(new ColorlessManaAbility());
// {R}{G}, {tap}: Choose target Beast creature you control and target creature an opponent controls. Those creatures fight each other. // {R}{G}, {tap}: Choose target Beast creature you control and target creature an opponent controls. Those creatures fight each other.
Effect effect = new FightTargetsEffect(); Effect effect = new FightTargetsEffect();
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, effect, new ManaCostsImpl("{R}{G}")); Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, effect, new ManaCostsImpl("{R}{G}"));
ability.addCost(new TapSourceCost()); ability.addCost(new TapSourceCost());
Target target1 = new TargetCreaturePermanent(filter1); Target target1 = new TargetCreaturePermanent(filter1);
ability.addTarget(target1); ability.addTarget(target1);
Target target2 = new TargetCreaturePermanent(filter2); Target target2 = new TargetCreaturePermanent(StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURE);
ability.addTarget(target2); ability.addTarget(target2);
this.addAbility(ability); this.addAbility(ability);
} }
private ContestedCliffs(final ContestedCliffs card) { private ContestedCliffs(final ContestedCliffs card) {

View file

@ -11,10 +11,8 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SubType; import mage.constants.SubType;
import mage.constants.Duration; import mage.constants.Duration;
import mage.constants.TargetController;
import mage.constants.Zone; import mage.constants.Zone;
import mage.counters.CounterType; import mage.filter.StaticFilters;
import mage.filter.common.FilterCreaturePermanent;
/** /**
* *
@ -22,12 +20,6 @@ import mage.filter.common.FilterCreaturePermanent;
*/ */
public final class CrownedCeratok extends CardImpl { public final class CrownedCeratok extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Each creature you control with a +1/+1 counter on it");
static {
filter.add(CounterType.P1P1.getPredicate());
filter.add(TargetController.YOU.getControllerPredicate());
}
public CrownedCeratok(UUID ownerId, CardSetInfo setInfo) { public CrownedCeratok(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{G}"); super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{G}");
this.subtype.add(SubType.RHINO); this.subtype.add(SubType.RHINO);
@ -39,8 +31,14 @@ public final class CrownedCeratok extends CardImpl {
this.addAbility(TrampleAbility.getInstance()); this.addAbility(TrampleAbility.getInstance());
// Each creature you control with a +1/+1 counter on it has trample. // Each creature you control with a +1/+1 counter on it has trample.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAllEffect(TrampleAbility.getInstance(), Duration.WhileOnBattlefield, filter))); this.addAbility(new SimpleStaticAbility(
Zone.BATTLEFIELD,
new GainAbilityAllEffect(
TrampleAbility.getInstance(),
Duration.WhileOnBattlefield,
StaticFilters.FILTER_EACH_CONTROLLED_CREATURE_P1P1)
)
);
} }
private CrownedCeratok(final CrownedCeratok card) { private CrownedCeratok(final CrownedCeratok card) {

View file

@ -12,8 +12,7 @@ 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.TargetController; import mage.filter.StaticFilters;
import mage.filter.common.FilterCreaturePermanent;
import mage.game.Game; import mage.game.Game;
import mage.game.permanent.Permanent; import mage.game.permanent.Permanent;
import mage.players.Player; import mage.players.Player;
@ -68,12 +67,6 @@ public final class CrypticCommand extends CardImpl {
class CrypticCommandEffect extends OneShotEffect { class CrypticCommandEffect extends OneShotEffect {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature an opponent controls");
static {
filter.add(TargetController.OPPONENT.getControllerPredicate());
}
public CrypticCommandEffect() { public CrypticCommandEffect() {
super(Outcome.Tap); super(Outcome.Tap);
staticText = "Tap all creatures your opponents control"; staticText = "Tap all creatures your opponents control";
@ -89,7 +82,7 @@ class CrypticCommandEffect extends OneShotEffect {
if (player == null) { if (player == null) {
return false; return false;
} }
for (Permanent creature : game.getBattlefield().getActivePermanents(filter, player.getId(), source.getSourceId(), game)) { for (Permanent creature : game.getBattlefield().getActivePermanents(StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURE, player.getId(), source.getSourceId(), game)) {
creature.tap(source, game); creature.tap(source, game);
} }
return true; return true;

View file

@ -17,8 +17,7 @@ import mage.constants.CardType;
import mage.constants.SubType; import mage.constants.SubType;
import mage.constants.Duration; import mage.constants.Duration;
import mage.constants.Zone; import mage.constants.Zone;
import mage.counters.CounterType; import mage.filter.StaticFilters;
import mage.filter.common.FilterCreaturePermanent;
import mage.target.common.TargetCreaturePermanent; import mage.target.common.TargetCreaturePermanent;
/** /**
@ -26,11 +25,6 @@ import mage.target.common.TargetCreaturePermanent;
* @author JotaPeRL * @author JotaPeRL
*/ */
public final class CytoplastManipulator extends CardImpl { public final class CytoplastManipulator extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("a creature with a +1/+1 counter on it");
static {
filter.add(CounterType.P1P1.getPredicate());
}
public CytoplastManipulator(UUID ownerId, CardSetInfo setInfo) { public CytoplastManipulator(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{U}{U}"); super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{U}{U}");
@ -50,7 +44,7 @@ public final class CytoplastManipulator extends CardImpl {
"gain control of target creature with a +1/+1 counter on it for as long as {this} remains on the battlefield"); "gain control of target creature with a +1/+1 counter on it for as long as {this} remains on the battlefield");
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, effect, new ManaCostsImpl("{U}")); Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, effect, new ManaCostsImpl("{U}"));
ability.addCost(new TapSourceCost()); ability.addCost(new TapSourceCost());
ability.addTarget(new TargetCreaturePermanent(filter)); ability.addTarget(new TargetCreaturePermanent(StaticFilters.FILTER_CREATURE_P1P1));
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -17,8 +17,7 @@ import mage.constants.SubType;
import mage.constants.Outcome; import mage.constants.Outcome;
import mage.constants.Zone; import mage.constants.Zone;
import mage.counters.CounterType; import mage.counters.CounterType;
import mage.filter.common.FilterControlledCreaturePermanent; import mage.filter.StaticFilters;
import mage.filter.predicate.mageobject.AnotherPredicate;
import mage.game.Game; import mage.game.Game;
import mage.game.permanent.Permanent; import mage.game.permanent.Permanent;
import mage.target.common.TargetControlledCreaturePermanent; import mage.target.common.TargetControlledCreaturePermanent;
@ -28,12 +27,6 @@ import mage.target.common.TargetControlledCreaturePermanent;
* @author emerald000 * @author emerald000
*/ */
public final class CytoplastRootKin extends CardImpl { public final class CytoplastRootKin extends CardImpl {
private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("other creature you control that has a +1/+1 counter on it");
static {
filter.add(AnotherPredicate.instance);
filter.add(CounterType.P1P1.getPredicate());
}
public CytoplastRootKin(UUID ownerId, CardSetInfo setInfo) { public CytoplastRootKin(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{G}{G}"); super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{G}{G}");
@ -45,8 +38,8 @@ public final class CytoplastRootKin extends CardImpl {
// Graft 4 // Graft 4
this.addAbility(new GraftAbility(this, 4)); this.addAbility(new GraftAbility(this, 4));
// When Cytoplast Root-Kin enters the battlefield, put a +1/+1 counter on each other creature you control that has a +1/+1 counter on it. // When Cytoplast Root-Kin enters the battlefield, put a +1/+1 counter on each other creature you control with a +1/+1 counter on it.
this.addAbility(new EntersBattlefieldTriggeredAbility(new AddCountersAllEffect(CounterType.P1P1.createInstance(), filter))); this.addAbility(new EntersBattlefieldTriggeredAbility(new AddCountersAllEffect(CounterType.P1P1.createInstance(), StaticFilters.FILTER_OTHER_CONTROLLED_CREATURE_P1P1)));
// {2}: Move a +1/+1 counter from target creature you control onto Cytoplast Root-Kin. // {2}: Move a +1/+1 counter from target creature you control onto Cytoplast Root-Kin.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new CytoplastRootKinEffect(), new GenericManaCost(2)); Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new CytoplastRootKinEffect(), new GenericManaCost(2));

View file

@ -15,8 +15,7 @@ import mage.constants.CardType;
import mage.constants.SubType; import mage.constants.SubType;
import mage.constants.Duration; import mage.constants.Duration;
import mage.constants.Zone; import mage.constants.Zone;
import mage.counters.CounterType; import mage.filter.StaticFilters;
import mage.filter.common.FilterCreaturePermanent;
import mage.target.common.TargetCreaturePermanent; import mage.target.common.TargetCreaturePermanent;
/** /**
@ -24,11 +23,6 @@ import mage.target.common.TargetCreaturePermanent;
* @author JotaPeRL * @author JotaPeRL
*/ */
public final class CytospawnShambler extends CardImpl { public final class CytospawnShambler extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("a creature with a +1/+1 counter on it");
static {
filter.add(CounterType.P1P1.getPredicate());
}
public CytospawnShambler(UUID ownerId, CardSetInfo setInfo) { public CytospawnShambler(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{6}{G}"); super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{6}{G}");
@ -42,7 +36,7 @@ public final class CytospawnShambler extends CardImpl {
// {G}: Target creature with a +1/+1 counter on it gains trample until end of turn. // {G}: Target creature with a +1/+1 counter on it gains trample until end of turn.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new GainAbilityTargetEffect(TrampleAbility.getInstance(), Duration.EndOfTurn), new ManaCostsImpl("{G}")); Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new GainAbilityTargetEffect(TrampleAbility.getInstance(), Duration.EndOfTurn), new ManaCostsImpl("{G}"));
ability.addTarget(new TargetCreaturePermanent(filter)); ability.addTarget(new TargetCreaturePermanent(StaticFilters.FILTER_CREATURE_P1P1));
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -9,6 +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.TargetController; import mage.constants.TargetController;
import mage.filter.StaticFilters;
import mage.filter.common.FilterCreaturePermanent; import mage.filter.common.FilterCreaturePermanent;
import java.util.UUID; import java.util.UUID;
@ -18,18 +19,12 @@ import java.util.UUID;
*/ */
public final class DarkProphecy extends CardImpl { public final class DarkProphecy extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("a creature you control");
static {
filter.add(TargetController.YOU.getControllerPredicate());
}
public DarkProphecy(UUID ownerId, CardSetInfo setInfo) { public DarkProphecy(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{B}{B}{B}"); super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{B}{B}{B}");
// Whenever a creature you control dies, you draw a card and you lose 1 life. // Whenever a creature you control dies, you draw a card and you lose 1 life.
Effect effect = new DrawCardSourceControllerEffect(1, "you"); Effect effect = new DrawCardSourceControllerEffect(1, "you");
Ability ability = new DiesCreatureTriggeredAbility(effect, false, filter); Ability ability = new DiesCreatureTriggeredAbility(effect, false, StaticFilters.FILTER_CONTROLLED_A_CREATURE);
effect = new LoseLifeSourceControllerEffect(1); effect = new LoseLifeSourceControllerEffect(1);
ability.addEffect(effect.concatBy("and")); ability.addEffect(effect.concatBy("and"));
this.addAbility(ability); this.addAbility(ability);

View file

@ -14,8 +14,7 @@ import mage.constants.CardType;
import mage.constants.SubType; import mage.constants.SubType;
import mage.constants.Duration; import mage.constants.Duration;
import mage.constants.Zone; import mage.constants.Zone;
import mage.filter.FilterPermanent; import mage.filter.StaticFilters;
import mage.filter.common.FilterControlledCreaturePermanent;
/** /**
* *
@ -34,8 +33,7 @@ public final class DauntlessEscort extends CardImpl {
this.toughness = new MageInt(3); this.toughness = new MageInt(3);
// Sacrifice Dauntless Escort: Creatures you control are indestructible this turn. // Sacrifice Dauntless Escort: Creatures you control are indestructible this turn.
FilterPermanent filter = new FilterControlledCreaturePermanent("Creatures you control"); Effect effect = new GainAbilityAllEffect(IndestructibleAbility.getInstance(), Duration.EndOfTurn, StaticFilters.FILTER_CONTROLLED_CREATURES, false);
Effect effect = new GainAbilityAllEffect(IndestructibleAbility.getInstance(), Duration.EndOfTurn, filter, false);
effect.setText("Creatures you control are indestructible this turn"); effect.setText("Creatures you control are indestructible this turn");
this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, effect, new SacrificeSourceCost())); this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, effect, new SacrificeSourceCost()));
} }

View file

@ -14,7 +14,7 @@ import mage.cards.Card;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.*; import mage.constants.*;
import mage.filter.common.FilterCreaturePermanent; import mage.filter.StaticFilters;
import mage.game.Game; import mage.game.Game;
import mage.game.permanent.Permanent; import mage.game.permanent.Permanent;
import mage.players.ManaPoolItem; import mage.players.ManaPoolItem;
@ -31,19 +31,13 @@ import java.util.UUID;
*/ */
public final class DeadMansChest extends CardImpl { public final class DeadMansChest extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature an opponent controls");
static {
filter.add(TargetController.OPPONENT.getControllerPredicate());
}
public DeadMansChest(UUID ownerId, CardSetInfo setInfo) { public DeadMansChest(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{B}"); super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{B}");
this.subtype.add(SubType.AURA); this.subtype.add(SubType.AURA);
// Enchant creature an opponent controls // Enchant creature an opponent controls
TargetPermanent auraTarget = new TargetPermanent(filter); TargetPermanent auraTarget = new TargetPermanent(StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURE);
this.getSpellAbility().addTarget(auraTarget); this.getSpellAbility().addTarget(auraTarget);
this.getSpellAbility().addEffect(new AttachEffect(Outcome.Benefit)); this.getSpellAbility().addEffect(new AttachEffect(Outcome.Benefit));
Ability ability = new EnchantAbility(auraTarget.getTargetName()); Ability ability = new EnchantAbility(auraTarget.getTargetName());

View file

@ -11,8 +11,7 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SubType; import mage.constants.SubType;
import mage.constants.Duration; import mage.constants.Duration;
import mage.constants.TargetController; import mage.filter.StaticFilters;
import mage.filter.common.FilterCreaturePermanent;
import mage.target.common.TargetCreaturePermanent; import mage.target.common.TargetCreaturePermanent;
/** /**
@ -20,13 +19,6 @@ import mage.target.common.TargetCreaturePermanent;
* @author LevelX2 * @author LevelX2
*/ */
public final class DeepwaterHypnotist extends CardImpl { public final class DeepwaterHypnotist extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature an opponent controls");
static {
filter.add(TargetController.OPPONENT.getControllerPredicate());
}
public DeepwaterHypnotist(UUID ownerId, CardSetInfo setInfo) { public DeepwaterHypnotist(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{U}"); super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{U}");
@ -38,7 +30,7 @@ public final class DeepwaterHypnotist extends CardImpl {
// <i>Inspired</i> &mdash; Whenever Deepwater Hypnotist becomes untapped, target creature an opponent controls gets -3/-0 until end of turn. // <i>Inspired</i> &mdash; Whenever Deepwater Hypnotist becomes untapped, target creature an opponent controls gets -3/-0 until end of turn.
Ability ability = new InspiredAbility(new BoostTargetEffect(-3,0,Duration.EndOfTurn)); Ability ability = new InspiredAbility(new BoostTargetEffect(-3,0,Duration.EndOfTurn));
ability.addTarget(new TargetCreaturePermanent(filter)); ability.addTarget(new TargetCreaturePermanent(StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURE));
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -7,13 +7,12 @@ import mage.abilities.common.BeginningOfUpkeepTriggeredAbility;
import mage.abilities.common.SimpleStaticAbility; import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.common.AttachEffect; import mage.abilities.effects.common.AttachEffect;
import mage.abilities.effects.common.SacrificeControllerEffect; import mage.abilities.effects.common.SacrificeControllerEffect;
import mage.abilities.effects.common.SacrificeTargetEffect;
import mage.abilities.effects.common.continuous.BoostEnchantedEffect; import mage.abilities.effects.common.continuous.BoostEnchantedEffect;
import mage.abilities.keyword.EnchantAbility; import mage.abilities.keyword.EnchantAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.*; import mage.constants.*;
import mage.filter.common.FilterCreaturePermanent; import mage.filter.StaticFilters;
import mage.target.TargetPermanent; import mage.target.TargetPermanent;
import mage.target.common.TargetControlledCreaturePermanent; import mage.target.common.TargetControlledCreaturePermanent;
@ -38,7 +37,7 @@ public final class DemonicAppetite extends CardImpl {
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEnchantedEffect(3, 3, Duration.WhileOnBattlefield))); this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEnchantedEffect(3, 3, Duration.WhileOnBattlefield)));
// At the beginning of your upkeep, sacrifice a creature. // At the beginning of your upkeep, sacrifice a creature.
this.addAbility(new BeginningOfUpkeepTriggeredAbility(new SacrificeControllerEffect(new FilterCreaturePermanent("a creature"), 1, ""), this.addAbility(new BeginningOfUpkeepTriggeredAbility(new SacrificeControllerEffect(StaticFilters.FILTER_PERMANENT_A_CREATURE, 1, ""),
TargetController.YOU, false)); TargetController.YOU, false));
} }

View file

@ -9,6 +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.TargetController; import mage.constants.TargetController;
import mage.filter.StaticFilters;
import mage.filter.common.FilterControlledCreaturePermanent; import mage.filter.common.FilterControlledCreaturePermanent;
import mage.filter.common.FilterCreaturePermanent; import mage.filter.common.FilterCreaturePermanent;
@ -18,19 +19,13 @@ import mage.filter.common.FilterCreaturePermanent;
*/ */
public final class DictateOfErebos extends CardImpl { public final class DictateOfErebos extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("a creature you control");
static {
filter.add(TargetController.YOU.getControllerPredicate());
}
public DictateOfErebos(UUID ownerId, CardSetInfo setInfo) { public DictateOfErebos(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{3}{B}{B}"); super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{3}{B}{B}");
// Flash // Flash
this.addAbility(FlashAbility.getInstance()); this.addAbility(FlashAbility.getInstance());
// Whenever a creature you control dies, each opponent sacrifices a creature. // Whenever a creature you control dies, each opponent sacrifices a creature.
this.addAbility(new DiesCreatureTriggeredAbility(new SacrificeOpponentsEffect(new FilterControlledCreaturePermanent("creature")), false, filter)); this.addAbility(new DiesCreatureTriggeredAbility(new SacrificeOpponentsEffect(new FilterControlledCreaturePermanent("creature")), false, StaticFilters.FILTER_CONTROLLED_A_CREATURE));
} }
private DictateOfErebos(final DictateOfErebos card) { private DictateOfErebos(final DictateOfErebos card) {

View file

@ -6,7 +6,7 @@ import mage.abilities.effects.common.ReturnToBattlefieldUnderOwnerControlTargetE
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.common.FilterControlledCreaturePermanent; import mage.filter.StaticFilters;
import mage.target.common.TargetControlledCreaturePermanent; import mage.target.common.TargetControlledCreaturePermanent;
import java.util.UUID; import java.util.UUID;
@ -20,7 +20,7 @@ public final class Displace extends CardImpl {
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{2}{U}"); super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{2}{U}");
// Exile up to two target creatures you control, then return those cards to the battlefield under their owner's control. // Exile up to two target creatures you control, then return those cards to the battlefield under their owner's control.
this.getSpellAbility().addTarget(new TargetControlledCreaturePermanent(0, 2, new FilterControlledCreaturePermanent("creatures you control"), false)); this.getSpellAbility().addTarget(new TargetControlledCreaturePermanent(0, 2, StaticFilters.FILTER_CONTROLLED_CREATURES, false));
this.getSpellAbility().addEffect(new ExileTargetForSourceEffect()); this.getSpellAbility().addEffect(new ExileTargetForSourceEffect());
this.getSpellAbility().addEffect(new ReturnToBattlefieldUnderOwnerControlTargetEffect(false, false) this.getSpellAbility().addEffect(new ReturnToBattlefieldUnderOwnerControlTargetEffect(false, false)
.withReturnNames("those cards", "their owner's").concatBy(", then")); .withReturnNames("those cards", "their owner's").concatBy(", then"));

View file

@ -7,7 +7,7 @@ import mage.abilities.effects.OneShotEffect;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.*; import mage.constants.*;
import mage.filter.common.FilterCreaturePermanent; import mage.filter.StaticFilters;
import mage.game.Game; import mage.game.Game;
import mage.game.permanent.Permanent; import mage.game.permanent.Permanent;
import mage.players.Player; import mage.players.Player;
@ -20,12 +20,6 @@ import java.util.UUID;
*/ */
public final class DongZhouTheTyrant extends CardImpl { public final class DongZhouTheTyrant extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature an opponent controls");
static {
filter.add(TargetController.OPPONENT.getControllerPredicate());
}
public DongZhouTheTyrant(UUID ownerId, CardSetInfo setInfo) { public DongZhouTheTyrant(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{R}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{R}");
addSuperType(SuperType.LEGENDARY); addSuperType(SuperType.LEGENDARY);
@ -36,7 +30,7 @@ public final class DongZhouTheTyrant extends CardImpl {
// When Dong Zhou, the Tyrant enters the battlefield, target creature an opponent controls deals damage equal to its power to that player. // When Dong Zhou, the Tyrant enters the battlefield, target creature an opponent controls deals damage equal to its power to that player.
Ability ability = new EntersBattlefieldTriggeredAbility(new DongZhouTheTyrantEffect(), false); Ability ability = new EntersBattlefieldTriggeredAbility(new DongZhouTheTyrantEffect(), false);
ability.addTarget(new TargetCreaturePermanent(filter)); ability.addTarget(new TargetCreaturePermanent(StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURE));
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -13,8 +13,7 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SubType; import mage.constants.SubType;
import mage.counters.CounterType; import mage.counters.CounterType;
import mage.filter.FilterPermanent; import mage.filter.StaticFilters;
import mage.filter.common.FilterControlledCreaturePermanent;
import mage.target.common.TargetCreaturePermanent; import mage.target.common.TargetCreaturePermanent;
import java.util.UUID; import java.util.UUID;
@ -24,13 +23,6 @@ import java.util.UUID;
*/ */
public final class DuelingCoach extends CardImpl { public final class DuelingCoach extends CardImpl {
private static final FilterPermanent filter
= new FilterControlledCreaturePermanent("creature you control with a +1/+1 counter on it");
static {
filter.add(CounterType.P1P1.getPredicate());
}
public DuelingCoach(UUID ownerId, CardSetInfo setInfo) { public DuelingCoach(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{W}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{W}");
@ -48,7 +40,10 @@ public final class DuelingCoach extends CardImpl {
// {4}{W}, {T}: Put a +1/+1 counter on each creature you control with a +1/+1 counter on it. // {4}{W}, {T}: Put a +1/+1 counter on each creature you control with a +1/+1 counter on it.
ability = new SimpleActivatedAbility( ability = new SimpleActivatedAbility(
new AddCountersAllEffect(CounterType.P1P1.createInstance(), filter), new ManaCostsImpl("{4}{W}") new AddCountersAllEffect(
CounterType.P1P1.createInstance(),
StaticFilters.FILTER_CONTROLLED_CREATURE_P1P1),
new ManaCostsImpl("{4}{W}")
); );
ability.addCost(new TapSourceCost()); ability.addCost(new TapSourceCost());
this.addAbility(ability); this.addAbility(ability);

View file

@ -12,7 +12,7 @@ import mage.abilities.keyword.FlyingAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.*; import mage.constants.*;
import mage.filter.common.FilterCreaturePermanent; import mage.filter.StaticFilters;
import mage.game.Game; import mage.game.Game;
import mage.game.events.GameEvent; import mage.game.events.GameEvent;
import mage.game.events.ZoneChangeEvent; import mage.game.events.ZoneChangeEvent;
@ -27,12 +27,6 @@ import mage.watchers.Watcher;
*/ */
public final class DungeonGeists extends CardImpl { public final class DungeonGeists extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature an opponent controls");
static {
filter.add(TargetController.OPPONENT.getControllerPredicate());
}
public DungeonGeists(UUID ownerId, CardSetInfo setInfo) { public DungeonGeists(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{U}{U}"); super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{U}{U}");
this.subtype.add(SubType.SPIRIT); this.subtype.add(SubType.SPIRIT);
@ -45,7 +39,7 @@ public final class DungeonGeists extends CardImpl {
// When Dungeon Geists enters the battlefield, tap target creature an opponent controls. That creature doesn't untap during its controller's untap step for as long as you control Dungeon Geists. // When Dungeon Geists enters the battlefield, tap target creature an opponent controls. That creature doesn't untap during its controller's untap step for as long as you control Dungeon Geists.
Ability ability = new EntersBattlefieldTriggeredAbility(new TapTargetEffect(), false); Ability ability = new EntersBattlefieldTriggeredAbility(new TapTargetEffect(), false);
ability.addEffect(new DungeonGeistsEffect()); ability.addEffect(new DungeonGeistsEffect());
Target target = new TargetCreaturePermanent(filter); Target target = new TargetCreaturePermanent(StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURE);
ability.addTarget(target); ability.addTarget(target);
this.addAbility(ability, new DungeonGeistsWatcher()); this.addAbility(ability, new DungeonGeistsWatcher());
// watcher needed to send normal events to Dungeon Geists ReplacementEffect // watcher needed to send normal events to Dungeon Geists ReplacementEffect

View file

@ -5,7 +5,7 @@ import mage.MageInt;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.common.EntersBattlefieldTriggeredAbility;
import mage.abilities.common.SimpleStaticAbility; import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.common.continuous.GainAbilityControlledEffect; import mage.abilities.effects.common.continuous.GainAbilityAllEffect;
import mage.abilities.effects.common.counter.AddCountersTargetEffect; import mage.abilities.effects.common.counter.AddCountersTargetEffect;
import mage.abilities.keyword.TrampleAbility; import mage.abilities.keyword.TrampleAbility;
import mage.constants.Duration; import mage.constants.Duration;
@ -14,7 +14,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.common.FilterCreaturePermanent; import mage.filter.StaticFilters;
import mage.target.common.TargetCreaturePermanent; import mage.target.common.TargetCreaturePermanent;
/** /**
@ -23,12 +23,6 @@ import mage.target.common.TargetCreaturePermanent;
*/ */
public final class DuskshellCrawler extends CardImpl { public final class DuskshellCrawler extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent();
static {
filter.add(CounterType.P1P1.getPredicate());
}
public DuskshellCrawler(UUID ownerId, CardSetInfo setInfo) { public DuskshellCrawler(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{G}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{G}");
@ -43,9 +37,12 @@ public final class DuskshellCrawler extends CardImpl {
// Each creature you control with a +1/+1 counter on it has trample. // Each creature you control with a +1/+1 counter on it has trample.
this.addAbility(new SimpleStaticAbility( this.addAbility(new SimpleStaticAbility(
new GainAbilityControlledEffect(TrampleAbility.getInstance(), Duration.WhileOnBattlefield, filter) new GainAbilityAllEffect(
.setText("Each creature you control with a +1/+1 counter on it has trample") TrampleAbility.getInstance(),
)); Duration.WhileOnBattlefield,
StaticFilters.FILTER_EACH_CONTROLLED_CREATURE_P1P1)
)
);
} }
private DuskshellCrawler(final DuskshellCrawler card) { private DuskshellCrawler(final DuskshellCrawler card) {

View file

@ -12,8 +12,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.counters.CounterType; import mage.filter.StaticFilters;
import mage.filter.common.FilterControlledCreaturePermanent;
import mage.filter.common.FilterCreaturePermanent; import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.permanent.ControllerIdPredicate; import mage.filter.predicate.permanent.ControllerIdPredicate;
import mage.game.Game; import mage.game.Game;
@ -26,12 +25,6 @@ import mage.target.targetpointer.FirstTargetPointer;
*/ */
public final class EliteScaleguard extends CardImpl { public final class EliteScaleguard extends CardImpl {
private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("creature you control with a +1/+1 counter on it");
static {
filter.add(CounterType.P1P1.getPredicate());
}
public EliteScaleguard(UUID ownerId, CardSetInfo setInfo) { public EliteScaleguard(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{W}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{W}");
this.subtype.add(SubType.HUMAN); this.subtype.add(SubType.HUMAN);
@ -43,7 +36,11 @@ public final class EliteScaleguard extends CardImpl {
this.addAbility(new EntersBattlefieldTriggeredAbility(new BolsterEffect(2))); this.addAbility(new EntersBattlefieldTriggeredAbility(new BolsterEffect(2)));
// Whenever a creature you control with a +1/+1 counter on it attacks, tap target creature defending player controls. // Whenever a creature you control with a +1/+1 counter on it attacks, tap target creature defending player controls.
Ability ability = new AttacksCreatureYouControlTriggeredAbility(new TapTargetEffect(), false, filter, true); Ability ability = new AttacksCreatureYouControlTriggeredAbility(
new TapTargetEffect(),
false,
StaticFilters.FILTER_CONTROLLED_CREATURE_P1P1,
true);
ability.addTarget(new TargetCreaturePermanent(new FilterCreaturePermanent("creature defending player controls"))); ability.addTarget(new TargetCreaturePermanent(new FilterCreaturePermanent("creature defending player controls")));
ability.setTargetAdjuster(EliteScaleguardTargetAdjuster.instance); ability.setTargetAdjuster(EliteScaleguardTargetAdjuster.instance);
this.addAbility(ability); this.addAbility(ability);

View file

@ -8,8 +8,7 @@ import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect;
import mage.abilities.effects.common.continuous.PlayWithHandRevealedEffect; import mage.abilities.effects.common.continuous.PlayWithHandRevealedEffect;
import mage.cards.*; import mage.cards.*;
import mage.constants.*; import mage.constants.*;
import mage.filter.FilterPermanent; import mage.filter.StaticFilters;
import mage.filter.common.FilterCreaturePermanent;
import mage.game.Game; import mage.game.Game;
import mage.game.events.GameEvent; import mage.game.events.GameEvent;
import mage.players.Player; import mage.players.Player;
@ -21,8 +20,6 @@ import java.util.UUID;
*/ */
public final class EnduringRenewal extends CardImpl { public final class EnduringRenewal extends CardImpl {
private static final FilterPermanent filter = new FilterCreaturePermanent("a creature");
public EnduringRenewal(UUID ownerId, CardSetInfo setInfo) { public EnduringRenewal(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{2}{W}{W}"); super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{2}{W}{W}");
@ -35,7 +32,7 @@ public final class EnduringRenewal extends CardImpl {
// Whenever a creature is put into your graveyard from the battlefield, return it to your hand. // Whenever a creature is put into your graveyard from the battlefield, return it to your hand.
this.addAbility(new PutIntoGraveFromBattlefieldAllTriggeredAbility( this.addAbility(new PutIntoGraveFromBattlefieldAllTriggeredAbility(
new ReturnFromGraveyardToHandTargetEffect().setText("return it to your hand"), new ReturnFromGraveyardToHandTargetEffect().setText("return it to your hand"),
false, filter, true, true false, StaticFilters.FILTER_PERMANENT_A_CREATURE, true, true
)); ));
} }

View file

@ -20,7 +20,7 @@ import mage.constants.SubType;
import mage.constants.Outcome; import mage.constants.Outcome;
import mage.constants.Zone; import mage.constants.Zone;
import mage.counters.CounterType; import mage.counters.CounterType;
import mage.filter.common.FilterCreaturePermanent; import mage.filter.StaticFilters;
import mage.target.TargetPermanent; import mage.target.TargetPermanent;
import mage.target.common.TargetCreaturePermanent; import mage.target.common.TargetCreaturePermanent;
@ -47,8 +47,8 @@ public final class EpharasEnlightenment extends CardImpl {
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAttachedEffect(FlyingAbility.getInstance(), AttachmentType.AURA))); this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAttachedEffect(FlyingAbility.getInstance(), AttachmentType.AURA)));
// Whenever a creature enters the battlefield under your control, you may return Ephara's Enlightenment to its owner's hand. // Whenever a creature enters the battlefield under your control, you may return Ephara's Enlightenment to its owner's hand.
this.addAbility(new EntersBattlefieldControlledTriggeredAbility(Zone.BATTLEFIELD, this.addAbility(new EntersBattlefieldControlledTriggeredAbility(Zone.BATTLEFIELD,
new ReturnToHandSourceEffect(true), new ReturnToHandSourceEffect(true),
new FilterCreaturePermanent("a creature"), StaticFilters.FILTER_PERMANENT_A_CREATURE,
true)); true));
} }

View file

@ -15,7 +15,7 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.*; import mage.constants.*;
import mage.counters.CounterType; import mage.counters.CounterType;
import mage.filter.common.FilterCreaturePermanent; import mage.filter.StaticFilters;
import mage.target.TargetPermanent; import mage.target.TargetPermanent;
import mage.target.common.TargetCreaturePermanent; import mage.target.common.TargetCreaturePermanent;
@ -24,17 +24,11 @@ import mage.target.common.TargetCreaturePermanent;
* @author emerald000 * @author emerald000
*/ */
public final class EternalThirst extends CardImpl { public final class EternalThirst extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("a creature an opponent controls");
static {
filter.add(TargetController.OPPONENT.getControllerPredicate());
}
public EternalThirst(UUID ownerId, CardSetInfo setInfo) { public EternalThirst(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{1}{B}"); super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{1}{B}");
this.subtype.add(SubType.AURA); this.subtype.add(SubType.AURA);
// Enchant creature // Enchant creature
TargetPermanent auraTarget = new TargetCreaturePermanent(); TargetPermanent auraTarget = new TargetCreaturePermanent();
this.getSpellAbility().addTarget(auraTarget); this.getSpellAbility().addTarget(auraTarget);
@ -47,12 +41,10 @@ public final class EternalThirst extends CardImpl {
effect.setText("Enchanted creature has lifelink"); effect.setText("Enchanted creature has lifelink");
ability = new SimpleStaticAbility(Zone.BATTLEFIELD, effect); ability = new SimpleStaticAbility(Zone.BATTLEFIELD, effect);
// and "Whenever a creature an opponent controls dies, put a +1/+1 counter on this creature." // and "Whenever a creature an opponent controls dies, put a +1/+1 counter on this creature."
effect = new GainAbilityAttachedEffect(new DiesCreatureTriggeredAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance()), false, filter), AttachmentType.AURA); effect = new GainAbilityAttachedEffect(new DiesCreatureTriggeredAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance()), false, StaticFilters.FILTER_OPPONENTS_PERMANENT_A_CREATURE), AttachmentType.AURA);
ability.addEffect(effect); ability.addEffect(effect);
effect.setText("and \"Whenever a creature an opponent controls dies, put a +1/+1 counter on this creature.\""); effect.setText("and \"Whenever a creature an opponent controls dies, put a +1/+1 counter on this creature.\"");
this.addAbility(ability); this.addAbility(ability);
} }
private EternalThirst(final EternalThirst card) { private EternalThirst(final EternalThirst card) {

View file

@ -12,7 +12,7 @@ import mage.constants.Outcome;
import mage.constants.TargetController; import mage.constants.TargetController;
import mage.counters.Counter; import mage.counters.Counter;
import mage.counters.CounterType; import mage.counters.CounterType;
import mage.filter.common.FilterCreaturePermanent; import mage.filter.StaticFilters;
import mage.game.Game; import mage.game.Game;
import mage.game.permanent.Permanent; import mage.game.permanent.Permanent;
import mage.target.Target; import mage.target.Target;
@ -24,11 +24,6 @@ import mage.target.common.TargetCreaturePermanent;
* @author spjspj * @author spjspj
*/ */
public final class EvolutionaryEscalation extends CardImpl { public final class EvolutionaryEscalation extends CardImpl {
private static final FilterCreaturePermanent filterOpponentCreature = new FilterCreaturePermanent("creature an opponent controls");
static {
filterOpponentCreature.add(TargetController.OPPONENT.getControllerPredicate());
}
public EvolutionaryEscalation(UUID ownerId, CardSetInfo setInfo) { public EvolutionaryEscalation(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{G}"); super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{G}");
@ -37,7 +32,7 @@ public final class EvolutionaryEscalation extends CardImpl {
EvolutionaryEscalationEffect effect = new EvolutionaryEscalationEffect(); EvolutionaryEscalationEffect effect = new EvolutionaryEscalationEffect();
Ability ability = new BeginningOfUpkeepTriggeredAbility(effect, TargetController.YOU, false); Ability ability = new BeginningOfUpkeepTriggeredAbility(effect, TargetController.YOU, false);
ability.addTarget(new TargetControlledCreaturePermanent()); ability.addTarget(new TargetControlledCreaturePermanent());
ability.addTarget(new TargetCreaturePermanent(filterOpponentCreature)); ability.addTarget(new TargetCreaturePermanent(StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURE));
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -11,9 +11,7 @@ import mage.abilities.keyword.UnleashAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.*; import mage.constants.*;
import mage.counters.CounterType; import mage.filter.StaticFilters;
import mage.filter.FilterPermanent;
import mage.filter.predicate.mageobject.AnotherPredicate;
/** /**
* *
@ -21,14 +19,6 @@ import mage.filter.predicate.mageobject.AnotherPredicate;
*/ */
public final class ExavaRakdosBloodWitch extends CardImpl { public final class ExavaRakdosBloodWitch extends CardImpl {
private static final FilterPermanent filter = new FilterPermanent();
static {
filter.add(CardType.CREATURE.getPredicate());
filter.add(TargetController.YOU.getControllerPredicate());
filter.add(CounterType.P1P1.getPredicate());
filter.add(AnotherPredicate.instance);
}
static final String rule = "Each other creature you control with a +1/+1 counter on it has haste"; static final String rule = "Each other creature you control with a +1/+1 counter on it has haste";
public ExavaRakdosBloodWitch(UUID ownerId, CardSetInfo setInfo) { public ExavaRakdosBloodWitch(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{B}{R}"); super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{B}{R}");
@ -46,7 +36,11 @@ public final class ExavaRakdosBloodWitch extends CardImpl {
// Unleash // Unleash
this.addAbility(new UnleashAbility()); this.addAbility(new UnleashAbility());
// Each other creature you control with a +1/+1 counter on it has haste. // Each other creature you control with a +1/+1 counter on it has haste.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAllEffect(HasteAbility.getInstance(), Duration.WhileOnBattlefield, filter, rule))); this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAllEffect(
HasteAbility.getInstance(),
Duration.WhileOnBattlefield,
StaticFilters.FILTER_OTHER_CONTROLLED_CREATURE_P1P1,
rule)));
} }

View file

@ -14,6 +14,7 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.*; import mage.constants.*;
import mage.counters.CounterType; import mage.counters.CounterType;
import mage.filter.StaticFilters;
import mage.filter.common.FilterCreaturePermanent; import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.mageobject.AnotherPredicate; import mage.filter.predicate.mageobject.AnotherPredicate;
import mage.game.Game; import mage.game.Game;
@ -57,6 +58,7 @@ public final class ExperimentKraj extends CardImpl {
class ExperimentKrajEffect extends ContinuousEffectImpl { class ExperimentKrajEffect extends ContinuousEffectImpl {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent(); private static final FilterCreaturePermanent filter = new FilterCreaturePermanent();
static { static {
filter.add(CounterType.P1P1.getPredicate()); filter.add(CounterType.P1P1.getPredicate());
filter.add(AnotherPredicate.instance); filter.add(AnotherPredicate.instance);

View file

@ -11,8 +11,7 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SubType; import mage.constants.SubType;
import mage.constants.Duration; import mage.constants.Duration;
import mage.constants.TargetController; import mage.filter.StaticFilters;
import mage.filter.common.FilterCreaturePermanent;
import mage.target.common.TargetCreaturePermanent; import mage.target.common.TargetCreaturePermanent;
/** /**
@ -20,12 +19,6 @@ import mage.target.common.TargetCreaturePermanent;
* @author fireshoes * @author fireshoes
*/ */
public final class EyeblightAssassin extends CardImpl { public final class EyeblightAssassin extends CardImpl {
private static final FilterCreaturePermanent filterOpponentCreature = new FilterCreaturePermanent("creature an opponent controls");
static {
filterOpponentCreature.add(TargetController.OPPONENT.getControllerPredicate());
}
public EyeblightAssassin(UUID ownerId, CardSetInfo setInfo) { public EyeblightAssassin(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{B}"); super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{B}");
@ -36,7 +29,7 @@ public final class EyeblightAssassin extends CardImpl {
// When Eyeblight Assassin enters the battlefield, target creature an opponent controls gets -1/-1 until end of turn. // When Eyeblight Assassin enters the battlefield, target creature an opponent controls gets -1/-1 until end of turn.
Ability ability = new EntersBattlefieldTriggeredAbility(new BoostTargetEffect(-1,-1, Duration.EndOfTurn)); Ability ability = new EntersBattlefieldTriggeredAbility(new BoostTargetEffect(-1,-1, Duration.EndOfTurn));
ability.addTarget(new TargetCreaturePermanent(filterOpponentCreature)); ability.addTarget(new TargetCreaturePermanent(StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURE));
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -14,8 +14,7 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SubType; import mage.constants.SubType;
import mage.constants.Outcome; import mage.constants.Outcome;
import mage.constants.TargetController; import mage.filter.StaticFilters;
import mage.filter.common.FilterCreaturePermanent;
import mage.game.Game; import mage.game.Game;
import mage.game.permanent.Permanent; import mage.game.permanent.Permanent;
import mage.target.common.TargetCreaturePermanent; import mage.target.common.TargetCreaturePermanent;
@ -27,12 +26,6 @@ import mage.util.CardUtil;
*/ */
public final class FairgroundsWarden extends CardImpl { public final class FairgroundsWarden extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature an opponent controls");
static {
filter.add(TargetController.OPPONENT.getControllerPredicate());
}
public FairgroundsWarden(UUID ownerId, CardSetInfo setInfo) { public FairgroundsWarden(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{W}"); super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{W}");
this.subtype.add(SubType.DWARF); this.subtype.add(SubType.DWARF);
@ -42,7 +35,7 @@ public final class FairgroundsWarden extends CardImpl {
// When Fairgrounds Warden enters the battlefield, exile target creature an opponent controls until Fairgrounds Warden leaves the battlefield. // When Fairgrounds Warden enters the battlefield, exile target creature an opponent controls until Fairgrounds Warden leaves the battlefield.
Ability ability = new EntersBattlefieldTriggeredAbility(new FairsgroundsWardenExileEffect()); Ability ability = new EntersBattlefieldTriggeredAbility(new FairsgroundsWardenExileEffect());
ability.addTarget(new TargetCreaturePermanent(filter)); ability.addTarget(new TargetCreaturePermanent(StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURE));
ability.addEffect(new CreateDelayedTriggeredAbilityEffect(new OnLeaveReturnExiledToBattlefieldAbility())); ability.addEffect(new CreateDelayedTriggeredAbilityEffect(new OnLeaveReturnExiledToBattlefieldAbility()));
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -15,7 +15,7 @@ import mage.abilities.keyword.EnchantAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.*; import mage.constants.*;
import mage.filter.common.FilterCreaturePermanent; import mage.filter.StaticFilters;
import mage.game.Game; import mage.game.Game;
import mage.game.permanent.Permanent; import mage.game.permanent.Permanent;
import mage.target.TargetPermanent; import mage.target.TargetPermanent;
@ -29,12 +29,6 @@ import mage.util.CardUtil;
*/ */
public final class FaithUnbroken extends CardImpl { public final class FaithUnbroken extends CardImpl {
private static final FilterCreaturePermanent filterTarget = new FilterCreaturePermanent("creature an opponent controls");
static {
filterTarget.add(TargetController.OPPONENT.getControllerPredicate());
}
public FaithUnbroken(UUID ownerId, CardSetInfo setInfo) { public FaithUnbroken(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{3}{W}"); super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{3}{W}");
this.subtype.add(SubType.AURA); this.subtype.add(SubType.AURA);
@ -48,7 +42,7 @@ public final class FaithUnbroken extends CardImpl {
// When Faith Unbroken enters the battlefield, exile target creature an opponent controls until Faith Unbroken leaves the battlefield. // When Faith Unbroken enters the battlefield, exile target creature an opponent controls until Faith Unbroken leaves the battlefield.
ability = new EntersBattlefieldTriggeredAbility(new FaithUnbrokenEffect()); ability = new EntersBattlefieldTriggeredAbility(new FaithUnbrokenEffect());
ability.addTarget(new TargetCreaturePermanent(filterTarget)); ability.addTarget(new TargetCreaturePermanent(StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURE));
ability.addEffect(new CreateDelayedTriggeredAbilityEffect(new OnLeaveReturnExiledToBattlefieldAbility())); ability.addEffect(new CreateDelayedTriggeredAbilityEffect(new OnLeaveReturnExiledToBattlefieldAbility()));
this.addAbility(ability); this.addAbility(ability);

View file

@ -15,7 +15,7 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SubType; import mage.constants.SubType;
import mage.constants.Duration; import mage.constants.Duration;
import mage.constants.TargetController; import mage.filter.StaticFilters;
import mage.filter.common.FilterCreaturePermanent; import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.mageobject.NamePredicate; import mage.filter.predicate.mageobject.NamePredicate;
import mage.target.common.TargetCreaturePermanent; import mage.target.common.TargetCreaturePermanent;
@ -26,12 +26,12 @@ import mage.target.common.TargetCreaturePermanent;
*/ */
public final class FesteringNewt extends CardImpl { public final class FesteringNewt extends CardImpl {
private static final FilterCreaturePermanent filterCreature = new FilterCreaturePermanent("creature an opponent controls");
private static final FilterCreaturePermanent filterBogbrewWitch = new FilterCreaturePermanent(); private static final FilterCreaturePermanent filterBogbrewWitch = new FilterCreaturePermanent();
static { static {
filterCreature.add(TargetController.OPPONENT.getControllerPredicate());
filterBogbrewWitch.add(new NamePredicate("Bogbrew Witch")); filterBogbrewWitch.add(new NamePredicate("Bogbrew Witch"));
} }
public FesteringNewt(UUID ownerId, CardSetInfo setInfo) { public FesteringNewt(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{B}"); super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{B}");
this.subtype.add(SubType.SALAMANDER); this.subtype.add(SubType.SALAMANDER);
@ -46,7 +46,7 @@ public final class FesteringNewt extends CardImpl {
new LockedInCondition(new PermanentsOnTheBattlefieldCondition(filterBogbrewWitch)), new LockedInCondition(new PermanentsOnTheBattlefieldCondition(filterBogbrewWitch)),
"target creature an opponent controls gets -1/-1 until end of turn. That creature gets -4/-4 instead if you control a creature named Bogbrew Witch"); "target creature an opponent controls gets -1/-1 until end of turn. That creature gets -4/-4 instead if you control a creature named Bogbrew Witch");
Ability ability = new DiesSourceTriggeredAbility(effect); Ability ability = new DiesSourceTriggeredAbility(effect);
ability.addTarget(new TargetCreaturePermanent(filterCreature)); ability.addTarget(new TargetCreaturePermanent(StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURE));
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -13,9 +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.Duration; import mage.constants.Duration;
import mage.constants.TargetController;
import mage.constants.Zone; import mage.constants.Zone;
import mage.filter.common.FilterControlledCreaturePermanent; import mage.filter.StaticFilters;
import mage.target.common.TargetCreaturePermanent; import mage.target.common.TargetCreaturePermanent;
/** /**
@ -24,17 +23,11 @@ import mage.target.common.TargetCreaturePermanent;
*/ */
public final class FiresOfYavimaya extends CardImpl { public final class FiresOfYavimaya extends CardImpl {
private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("Creatures you control");
static {
filter.add(TargetController.YOU.getControllerPredicate());
}
public FiresOfYavimaya(UUID ownerId, CardSetInfo setInfo) { public FiresOfYavimaya(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{1}{R}{G}"); super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{1}{R}{G}");
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAllEffect(HasteAbility.getInstance(), Duration.WhileOnBattlefield, filter, false))); this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAllEffect(HasteAbility.getInstance(), Duration.WhileOnBattlefield, StaticFilters.FILTER_CONTROLLED_CREATURES, false)));
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostTargetEffect(2, 2, Duration.EndOfTurn), new SacrificeSourceCost()); Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostTargetEffect(2, 2, Duration.EndOfTurn), new SacrificeSourceCost());
ability.addTarget(new TargetCreaturePermanent()); ability.addTarget(new TargetCreaturePermanent());
this.addAbility(ability); this.addAbility(ability);

View file

@ -13,7 +13,7 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SubType; import mage.constants.SubType;
import mage.constants.Duration; import mage.constants.Duration;
import mage.filter.common.FilterCreaturePermanent; import mage.filter.StaticFilters;
/** /**
* *
@ -32,7 +32,7 @@ public final class FlailingDrake extends CardImpl {
// Whenever Flailing Drake blocks or becomes blocked by a creature, that creature gets +1/+1 until end of turn. // Whenever Flailing Drake blocks or becomes blocked by a creature, that creature gets +1/+1 until end of turn.
Effect effect = new BoostTargetEffect(+1, +1, Duration.EndOfTurn); Effect effect = new BoostTargetEffect(+1, +1, Duration.EndOfTurn);
effect.setText("that creature gets +1/+1 until end of turn"); effect.setText("that creature gets +1/+1 until end of turn");
Ability ability = new BlocksOrBecomesBlockedSourceTriggeredAbility(effect, new FilterCreaturePermanent("a creature"), false, null, true); Ability ability = new BlocksOrBecomesBlockedSourceTriggeredAbility(effect, StaticFilters.FILTER_PERMANENT_A_CREATURE, false, null, true);
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -10,8 +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.constants.TargetController; import mage.filter.StaticFilters;
import mage.filter.common.FilterCreaturePermanent;
import mage.target.common.TargetCreaturePermanent; import mage.target.common.TargetCreaturePermanent;
/** /**
@ -20,12 +19,6 @@ import mage.target.common.TargetCreaturePermanent;
*/ */
public final class Fogwalker extends CardImpl { public final class Fogwalker extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature an opponent controls");
static {
filter.add(TargetController.OPPONENT.getControllerPredicate());
}
public Fogwalker(UUID ownerId, CardSetInfo setInfo) { public Fogwalker(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{U}"); super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{U}");
this.subtype.add(SubType.SPIRIT); this.subtype.add(SubType.SPIRIT);
@ -36,7 +29,7 @@ public final class Fogwalker extends CardImpl {
this.addAbility(new SkulkAbility()); this.addAbility(new SkulkAbility());
// When Fogwalker enters the battlefield, target creature an opponent controls doesn't untap during it controler's next untap step. // When Fogwalker enters the battlefield, target creature an opponent controls doesn't untap during it controler's next untap step.
EntersBattlefieldTriggeredAbility ability = new EntersBattlefieldTriggeredAbility(new DontUntapInControllersNextUntapStepTargetEffect()); EntersBattlefieldTriggeredAbility ability = new EntersBattlefieldTriggeredAbility(new DontUntapInControllersNextUntapStepTargetEffect());
ability.addTarget(new TargetCreaturePermanent(filter)); ability.addTarget(new TargetCreaturePermanent(StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURE));
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -14,10 +14,7 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SubType; import mage.constants.SubType;
import mage.constants.Duration; import mage.constants.Duration;
import mage.constants.TargetController; import mage.filter.StaticFilters;
import mage.counters.CounterType;
import mage.filter.common.FilterControlledCreaturePermanent;
import mage.filter.common.FilterCreaturePermanent;
/** /**
* *
@ -25,14 +22,6 @@ import mage.filter.common.FilterCreaturePermanent;
*/ */
public final class FoundryHornet extends CardImpl { public final class FoundryHornet extends CardImpl {
private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("a creature with a +1/+1 counter on it");
private static final FilterCreaturePermanent filterOpponent = new FilterCreaturePermanent();
static {
filter.add(CounterType.P1P1.getPredicate());
filterOpponent.add(TargetController.OPPONENT.getControllerPredicate());
}
private static final String rule = "When {this} enters the battlefield, if you control a creature with a +1/+1 counter on it, creatures your opponents control get -1/-1 until end of turn."; private static final String rule = "When {this} enters the battlefield, if you control a creature with a +1/+1 counter on it, creatures your opponents control get -1/-1 until end of turn.";
public FoundryHornet(UUID ownerId, CardSetInfo setInfo) { public FoundryHornet(UUID ownerId, CardSetInfo setInfo) {
@ -46,8 +35,8 @@ public final class FoundryHornet extends CardImpl {
this.addAbility(FlyingAbility.getInstance()); this.addAbility(FlyingAbility.getInstance());
// When Foundry Hornet enters the battlefield, if you control a creature with a +1/+1 counter on it, creatures your opponents control get -1/-1 until end of turn. // When Foundry Hornet enters the battlefield, if you control a creature with a +1/+1 counter on it, creatures your opponents control get -1/-1 until end of turn.
TriggeredAbility ability = new EntersBattlefieldTriggeredAbility(new BoostAllEffect(-1, -1, Duration.EndOfTurn, filterOpponent, false), false); TriggeredAbility ability = new EntersBattlefieldTriggeredAbility(new BoostAllEffect(-1, -1, Duration.EndOfTurn, StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURE, false), false);
this.addAbility(new ConditionalInterveningIfTriggeredAbility(ability, new PermanentsOnTheBattlefieldCondition(filter), rule)); this.addAbility(new ConditionalInterveningIfTriggeredAbility(ability, new PermanentsOnTheBattlefieldCondition(StaticFilters.FILTER_A_CREATURE_P1P1), rule));
} }
private FoundryHornet(final FoundryHornet card) { private FoundryHornet(final FoundryHornet card) {

View file

@ -14,9 +14,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.TargetController;
import mage.constants.Zone; import mage.constants.Zone;
import mage.filter.common.FilterCreaturePermanent; import mage.filter.StaticFilters;
import mage.game.Game; import mage.game.Game;
import mage.game.events.GameEvent; import mage.game.events.GameEvent;
import mage.game.permanent.Permanent; import mage.game.permanent.Permanent;
@ -32,18 +31,12 @@ import java.util.UUID;
*/ */
public final class GOTOJAIL extends CardImpl { public final class GOTOJAIL extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature an opponent controls");
static {
filter.add(TargetController.OPPONENT.getControllerPredicate());
}
public GOTOJAIL(UUID ownerId, CardSetInfo setInfo) { public GOTOJAIL(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{W}"); super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{W}");
// When GO TO JAIL enters the battlefield, exile target creature an opponent controls until GO TO JAIL leaves the battlefield. // When GO TO JAIL enters the battlefield, exile target creature an opponent controls until GO TO JAIL leaves the battlefield.
Ability ability = new EntersBattlefieldTriggeredAbility(new GoToJailExileEffect()); Ability ability = new EntersBattlefieldTriggeredAbility(new GoToJailExileEffect());
ability.addTarget(new TargetCreaturePermanent(filter)); ability.addTarget(new TargetCreaturePermanent(StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURE));
ability.addEffect(new CreateDelayedTriggeredAbilityEffect(new OnLeaveReturnExiledToBattlefieldAbility())); ability.addEffect(new CreateDelayedTriggeredAbilityEffect(new OnLeaveReturnExiledToBattlefieldAbility()));
this.addAbility(ability); this.addAbility(ability);

View file

@ -9,9 +9,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.TargetController;
import mage.counters.CounterType; import mage.counters.CounterType;
import mage.filter.common.FilterCreaturePermanent; import mage.filter.StaticFilters;
/** /**
* *
@ -19,12 +18,6 @@ import mage.filter.common.FilterCreaturePermanent;
*/ */
public final class GideonsAvenger extends CardImpl { public final class GideonsAvenger extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("a creature an opponent controls");
static {
filter.add(TargetController.OPPONENT.getControllerPredicate());
}
public GideonsAvenger(UUID ownerId, CardSetInfo setInfo) { public GideonsAvenger(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{W}{W}"); super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{W}{W}");
this.subtype.add(SubType.HUMAN); this.subtype.add(SubType.HUMAN);
@ -34,7 +27,7 @@ public final class GideonsAvenger extends CardImpl {
this.toughness = new MageInt(2); this.toughness = new MageInt(2);
// Whenever a creature an opponent controls becomes tapped, put a +1/+1 counter on Gideon's Avenger. // Whenever a creature an opponent controls becomes tapped, put a +1/+1 counter on Gideon's Avenger.
this.addAbility(new BecomesTappedTriggeredAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance()), false, filter)); this.addAbility(new BecomesTappedTriggeredAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance()), false, StaticFilters.FILTER_OPPONENTS_PERMANENT_A_CREATURE));
} }
private GideonsAvenger(final GideonsAvenger card) { private GideonsAvenger(final GideonsAvenger card) {

View file

@ -15,8 +15,7 @@ import mage.constants.CardType;
import mage.constants.SubType; import mage.constants.SubType;
import mage.constants.Duration; import mage.constants.Duration;
import mage.constants.Outcome; import mage.constants.Outcome;
import mage.constants.TargetController; import mage.filter.StaticFilters;
import mage.filter.common.FilterCreaturePermanent;
import mage.game.Game; import mage.game.Game;
import mage.game.permanent.Permanent; import mage.game.permanent.Permanent;
import mage.players.Player; import mage.players.Player;
@ -28,12 +27,6 @@ import mage.target.common.TargetCreaturePermanent;
*/ */
public final class GildedDrake extends CardImpl { public final class GildedDrake extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature an opponent controls");
static {
filter.add(TargetController.OPPONENT.getControllerPredicate());
}
public GildedDrake(UUID ownerId, CardSetInfo setInfo) { public GildedDrake(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{U}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{U}");
this.subtype.add(SubType.DRAKE); this.subtype.add(SubType.DRAKE);
@ -47,7 +40,7 @@ public final class GildedDrake extends CardImpl {
// This ability can't be countered except by spells and abilities. // This ability can't be countered except by spells and abilities.
Ability ability = new EntersBattlefieldTriggeredAbility(new GildedDrakeEffect()); Ability ability = new EntersBattlefieldTriggeredAbility(new GildedDrakeEffect());
ability.setCanFizzle(false); ability.setCanFizzle(false);
ability.addTarget(new TargetCreaturePermanent(0, 1, filter, false)); ability.addTarget(new TargetCreaturePermanent(0, 1, StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURE, false));
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -12,7 +12,7 @@ import mage.abilities.keyword.EnchantAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.*; import mage.constants.*;
import mage.filter.common.FilterCreaturePermanent; import mage.filter.StaticFilters;
import mage.target.TargetPermanent; import mage.target.TargetPermanent;
import mage.target.common.TargetCreaturePermanent; import mage.target.common.TargetCreaturePermanent;
@ -21,12 +21,6 @@ import mage.target.common.TargetCreaturePermanent;
* @author fireshoes * @author fireshoes
*/ */
public final class GlaringAegis extends CardImpl { public final class GlaringAegis extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature an opponent controls");
static {
filter.add(TargetController.OPPONENT.getControllerPredicate());
}
public GlaringAegis(UUID ownerId, CardSetInfo setInfo) { public GlaringAegis(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{W}"); super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{W}");
@ -41,7 +35,7 @@ public final class GlaringAegis extends CardImpl {
// When Glaring Aegis enters the battlefield, tap target creature an opponent controls. // When Glaring Aegis enters the battlefield, tap target creature an opponent controls.
Ability ability2 = new EntersBattlefieldTriggeredAbility(new TapTargetEffect()); Ability ability2 = new EntersBattlefieldTriggeredAbility(new TapTargetEffect());
ability2.addTarget(new TargetCreaturePermanent(filter)); ability2.addTarget(new TargetCreaturePermanent(StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURE));
this.addAbility(ability2); this.addAbility(ability2);
// Enchanted creature gets +1/+3. // Enchanted creature gets +1/+3.

View file

@ -14,7 +14,7 @@ import mage.constants.CardType;
import mage.constants.SubType; import mage.constants.SubType;
import mage.constants.Duration; import mage.constants.Duration;
import mage.constants.Zone; import mage.constants.Zone;
import mage.filter.common.FilterControlledCreaturePermanent; import mage.filter.StaticFilters;
/** /**
* *
@ -31,7 +31,7 @@ public final class Glory extends CardImpl {
// Flying // Flying
this.addAbility(FlyingAbility.getInstance()); this.addAbility(FlyingAbility.getInstance());
// {2}{W}: Choose a color. Creatures you control gain protection from the chosen color until end of turn. Activate this ability only if Glory is in your graveyard. // {2}{W}: Choose a color. Creatures you control gain protection from the chosen color until end of turn. Activate this ability only if Glory is in your graveyard.
Effect effect = new GainProtectionFromColorAllEffect(Duration.EndOfTurn, new FilterControlledCreaturePermanent("Creatures you control")); Effect effect = new GainProtectionFromColorAllEffect(Duration.EndOfTurn, StaticFilters.FILTER_CONTROLLED_CREATURES);
effect.setText("Choose a color. Creatures you control gain protection from the chosen color until end of turn. Activate only if {this} is in your graveyard."); effect.setText("Choose a color. Creatures you control gain protection from the chosen color until end of turn. Activate only if {this} is in your graveyard.");
this.addAbility(new SimpleActivatedAbility(Zone.GRAVEYARD, effect, new ManaCostsImpl("{2}{W}"))); this.addAbility(new SimpleActivatedAbility(Zone.GRAVEYARD, effect, new ManaCostsImpl("{2}{W}")));
} }

View file

@ -14,8 +14,7 @@ import mage.constants.CardType;
import mage.constants.Duration; import mage.constants.Duration;
import mage.constants.SubType; import mage.constants.SubType;
import mage.counters.CounterType; import mage.counters.CounterType;
import mage.filter.FilterPermanent; import mage.filter.StaticFilters;
import mage.filter.common.FilterControlledCreaturePermanent;
import java.util.UUID; import java.util.UUID;
@ -24,12 +23,6 @@ import java.util.UUID;
*/ */
public final class GnarlidColony extends CardImpl { public final class GnarlidColony extends CardImpl {
private static final FilterPermanent filter = new FilterControlledCreaturePermanent();
static {
filter.add(CounterType.P1P1.getPredicate());
}
public GnarlidColony(UUID ownerId, CardSetInfo setInfo) { public GnarlidColony(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{G}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{G}");
@ -48,9 +41,10 @@ public final class GnarlidColony extends CardImpl {
// Each creature you control with a +1/+1 counter on it has trample. // Each creature you control with a +1/+1 counter on it has trample.
this.addAbility(new SimpleStaticAbility(new GainAbilityAllEffect( this.addAbility(new SimpleStaticAbility(new GainAbilityAllEffect(
TrampleAbility.getInstance(), Duration.WhileOnBattlefield, filter, TrampleAbility.getInstance(),
"Each creature you control with a +1/+1 counter on it has trample" Duration.WhileOnBattlefield,
))); StaticFilters.FILTER_EACH_CONTROLLED_CREATURE_P1P1))
);
} }
private GnarlidColony(final GnarlidColony card) { private GnarlidColony(final GnarlidColony card) {

View file

@ -12,7 +12,7 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.*; import mage.constants.*;
import mage.filter.FilterPermanent; import mage.filter.FilterPermanent;
import mage.filter.common.FilterCreaturePermanent; import mage.filter.StaticFilters;
import mage.game.Game; import mage.game.Game;
import mage.game.permanent.Permanent; import mage.game.permanent.Permanent;
import mage.target.TargetPermanent; import mage.target.TargetPermanent;
@ -47,8 +47,6 @@ public final class GriffinCanyon extends CardImpl {
} }
class GriffinCanyonEffect extends OneShotEffect { class GriffinCanyonEffect extends OneShotEffect {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("a creature");
public GriffinCanyonEffect() { public GriffinCanyonEffect() {
super(Outcome.Benefit); super(Outcome.Benefit);
@ -69,7 +67,7 @@ class GriffinCanyonEffect extends OneShotEffect {
Permanent targetCreature = game.getPermanent(source.getFirstTarget()); Permanent targetCreature = game.getPermanent(source.getFirstTarget());
if (targetCreature != null) { if (targetCreature != null) {
targetCreature.untap(game); targetCreature.untap(game);
if (filter.match(targetCreature, game)) { if (StaticFilters.FILTER_PERMANENT_A_CREATURE.match(targetCreature, game)) {
game.addEffect(new BoostTargetEffect(1, 1, Duration.EndOfTurn), source); game.addEffect(new BoostTargetEffect(1, 1, Duration.EndOfTurn), source);
} }
return true; return true;

View file

@ -8,8 +8,7 @@ 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.TargetController; import mage.filter.StaticFilters;
import mage.filter.common.FilterCreaturePermanent;
import mage.game.Game; import mage.game.Game;
import mage.game.permanent.Permanent; import mage.game.permanent.Permanent;
import mage.players.Player; import mage.players.Player;
@ -22,19 +21,13 @@ import mage.target.common.TargetControlledCreaturePermanent;
*/ */
public final class GrimContest extends CardImpl { public final class GrimContest extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature an opponent controls");
static {
filter.add(TargetController.OPPONENT.getControllerPredicate());
}
public GrimContest(UUID ownerId, CardSetInfo setInfo) { public GrimContest(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{1}{B}{G}"); super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{1}{B}{G}");
// Choose target creature you control and target creature an opponent controls. Each of those creatures deals damage equal to its toughness to the other. // Choose target creature you control and target creature an opponent controls. Each of those creatures deals damage equal to its toughness to the other.
this.getSpellAbility().addEffect(new GrimContestEffect()); this.getSpellAbility().addEffect(new GrimContestEffect());
this.getSpellAbility().addTarget(new TargetControlledCreaturePermanent()); this.getSpellAbility().addTarget(new TargetControlledCreaturePermanent());
this.getSpellAbility().addTarget(new TargetPermanent(filter)); this.getSpellAbility().addTarget(new TargetPermanent(StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURE));
} }
private GrimContest(final GrimContest card) { private GrimContest(final GrimContest card) {

View file

@ -8,19 +8,12 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.TargetController; import mage.constants.TargetController;
import mage.filter.common.FilterCreaturePermanent;
/** /**
* @author LevelX2 * @author LevelX2
*/ */
public final class GrowingRanks extends CardImpl { public final class GrowingRanks extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature an opponent controls");
static {
filter.add(TargetController.OPPONENT.getControllerPredicate());
}
public GrowingRanks(UUID ownerId, CardSetInfo setInfo) { public GrowingRanks(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{2}{G/W}{G/W}"); super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{2}{G/W}{G/W}");

View file

@ -14,7 +14,7 @@ import mage.abilities.keyword.FlyingAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.*; import mage.constants.*;
import mage.filter.common.FilterCreaturePermanent; import mage.filter.StaticFilters;
import mage.game.Game; import mage.game.Game;
import mage.game.events.GameEvent; import mage.game.events.GameEvent;
import mage.game.permanent.Permanent; import mage.game.permanent.Permanent;
@ -27,12 +27,6 @@ import mage.target.targetpointer.FixedTarget;
*/ */
public final class GuardianOfTazeem extends CardImpl { public final class GuardianOfTazeem extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature an opponent controls");
static {
filter.add(TargetController.OPPONENT.getControllerPredicate());
}
public GuardianOfTazeem(UUID ownerId, CardSetInfo setInfo) { public GuardianOfTazeem(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{U}{U}"); super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{U}{U}");
this.subtype.add(SubType.SPHINX); this.subtype.add(SubType.SPHINX);
@ -44,7 +38,7 @@ public final class GuardianOfTazeem extends CardImpl {
// <i>Landfall</i> &mdash; Whenever a land enters the battlefield under you control, tap target creature an opponent controls. If that land is an Island, that creature doesn't untap during its controller's next untap step. // <i>Landfall</i> &mdash; Whenever a land enters the battlefield under you control, tap target creature an opponent controls. If that land is an Island, that creature doesn't untap during its controller's next untap step.
Ability ability = new GuardianOfTazeemTriggeredAbility(); Ability ability = new GuardianOfTazeemTriggeredAbility();
ability.addTarget(new TargetCreaturePermanent(filter)); ability.addTarget(new TargetCreaturePermanent(StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURE));
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -12,8 +12,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.TargetController; import mage.filter.StaticFilters;
import mage.filter.common.FilterCreaturePermanent;
import mage.target.Target; import mage.target.Target;
import mage.target.common.TargetCreaturePermanent; import mage.target.common.TargetCreaturePermanent;
@ -27,11 +26,6 @@ import java.util.UUID;
public final class HaazdaSnareSquad extends CardImpl { public final class HaazdaSnareSquad extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature an opponent controls");
static {
filter.add(TargetController.OPPONENT.getControllerPredicate());
}
public HaazdaSnareSquad (UUID ownerId, CardSetInfo setInfo) { public HaazdaSnareSquad (UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{W}"); super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{W}");
this.subtype.add(SubType.HUMAN); this.subtype.add(SubType.HUMAN);
@ -43,7 +37,7 @@ public final class HaazdaSnareSquad extends CardImpl {
// Whenever Haazda Snare Squad attacks you may pay {W}. If you do, tap target creature an opponent controls. // Whenever Haazda Snare Squad attacks you may pay {W}. If you do, tap target creature an opponent controls.
Ability ability = new AttacksTriggeredAbility(new DoIfCostPaid(new TapTargetEffect(), new ManaCostsImpl("{W}")),false, Ability ability = new AttacksTriggeredAbility(new DoIfCostPaid(new TapTargetEffect(), new ManaCostsImpl("{W}")),false,
"Whenever {this} attacks, you may pay {W}. If you do, tap target creature an opponent controls."); "Whenever {this} attacks, you may pay {W}. If you do, tap target creature an opponent controls.");
Target target = new TargetCreaturePermanent(filter); Target target = new TargetCreaturePermanent(StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURE);
ability.addTarget(target); ability.addTarget(target);
this.addAbility(ability); this.addAbility(ability);

View file

@ -12,8 +12,7 @@ import mage.constants.CardType;
import mage.constants.Duration; import mage.constants.Duration;
import mage.constants.SubType; import mage.constants.SubType;
import mage.counters.CounterType; import mage.counters.CounterType;
import mage.filter.FilterPermanent; import mage.filter.StaticFilters;
import mage.filter.common.FilterControlledCreaturePermanent;
import java.util.UUID; import java.util.UUID;
@ -22,12 +21,6 @@ import java.util.UUID;
*/ */
public final class HagraConstrictor extends CardImpl { public final class HagraConstrictor extends CardImpl {
private static final FilterPermanent filter = new FilterControlledCreaturePermanent();
static {
filter.add(CounterType.P1P1.getPredicate());
}
public HagraConstrictor(UUID ownerId, CardSetInfo setInfo) { public HagraConstrictor(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{B}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{B}");
@ -43,7 +36,9 @@ public final class HagraConstrictor extends CardImpl {
// Each creature you control with a +1/+1 counter on it has menace. // Each creature you control with a +1/+1 counter on it has menace.
this.addAbility(new SimpleStaticAbility(new GainAbilityAllEffect( this.addAbility(new SimpleStaticAbility(new GainAbilityAllEffect(
new MenaceAbility(), Duration.WhileOnBattlefield, filter, new MenaceAbility(),
Duration.WhileOnBattlefield,
StaticFilters.FILTER_EACH_CONTROLLED_CREATURE_P1P1,
"Each creature you control with a +1/+1 counter on it has menace. " + "Each creature you control with a +1/+1 counter on it has menace. " +
"<i>(A creature with menace can't be blocked except by two or more creatures.)</i>" "<i>(A creature with menace can't be blocked except by two or more creatures.)</i>"
))); )));

View file

@ -14,9 +14,7 @@ import mage.cards.Card;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.*; import mage.constants.*;
import mage.counters.CounterType; import mage.filter.StaticFilters;
import mage.filter.FilterPermanent;
import mage.filter.common.FilterControlledCreaturePermanent;
import mage.game.Game; import mage.game.Game;
import mage.util.CardUtil; import mage.util.CardUtil;
@ -27,14 +25,7 @@ import java.util.UUID;
*/ */
public final class HamzaGuardianOfArashin extends CardImpl { public final class HamzaGuardianOfArashin extends CardImpl {
private static final FilterPermanent filter private static final DynamicValue xValue = new PermanentsOnBattlefieldCount(StaticFilters.FILTER_CONTROLLED_CREATURE_P1P1);
= new FilterControlledCreaturePermanent("creature you control with a +1/+1 counter on it");
static {
filter.add(CounterType.P1P1.getPredicate());
}
private static final DynamicValue xValue = new PermanentsOnBattlefieldCount(filter);
private static final Hint hint = new ValueHint("Creatures you control with +1/+1 counter on them", xValue); private static final Hint hint = new ValueHint("Creatures you control with +1/+1 counter on them", xValue);
public HamzaGuardianOfArashin(UUID ownerId, CardSetInfo setInfo) { public HamzaGuardianOfArashin(UUID ownerId, CardSetInfo setInfo) {

View file

@ -10,8 +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.constants.TargetController; import mage.filter.StaticFilters;
import mage.filter.common.FilterCreaturePermanent;
import mage.target.common.TargetCreaturePermanent; import mage.target.common.TargetCreaturePermanent;
/** /**
@ -20,12 +19,6 @@ import mage.target.common.TargetCreaturePermanent;
*/ */
public final class HeavyInfantry extends CardImpl { public final class HeavyInfantry extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature an opponent controls");
static {
filter.add(TargetController.OPPONENT.getControllerPredicate());
}
public HeavyInfantry(UUID ownerId, CardSetInfo setInfo) { public HeavyInfantry(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{4}{W}"); super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{4}{W}");
this.subtype.add(SubType.HUMAN); this.subtype.add(SubType.HUMAN);
@ -35,7 +28,7 @@ public final class HeavyInfantry extends CardImpl {
// When Heavy Infantry enters the battlefield, tap target creature an opponent controls. // When Heavy Infantry enters the battlefield, tap target creature an opponent controls.
Ability ability = new EntersBattlefieldTriggeredAbility(new TapTargetEffect()); Ability ability = new EntersBattlefieldTriggeredAbility(new TapTargetEffect());
ability.addTarget(new TargetCreaturePermanent(filter)); ability.addTarget(new TargetCreaturePermanent(StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURE));
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -16,9 +16,8 @@ import mage.constants.AttachmentType;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SubType; import mage.constants.SubType;
import mage.constants.Duration; import mage.constants.Duration;
import mage.constants.TargetController;
import mage.constants.Zone; import mage.constants.Zone;
import mage.filter.common.FilterCreaturePermanent; import mage.filter.StaticFilters;
import mage.target.Target; import mage.target.Target;
import mage.target.common.TargetCreaturePermanent; import mage.target.common.TargetCreaturePermanent;
@ -28,11 +27,6 @@ import mage.target.common.TargetCreaturePermanent;
*/ */
public final class HeliodsEmissary extends CardImpl { public final class HeliodsEmissary extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature an opponent controls");
static {
filter.add(TargetController.OPPONENT.getControllerPredicate());
}
public HeliodsEmissary(UUID ownerId, CardSetInfo setInfo) { public HeliodsEmissary(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT,CardType.CREATURE},"{3}{W}"); super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT,CardType.CREATURE},"{3}{W}");
this.subtype.add(SubType.ELK); this.subtype.add(SubType.ELK);
@ -44,11 +38,11 @@ public final class HeliodsEmissary extends CardImpl {
this.addAbility(new BestowAbility(this, "{6}{W}")); this.addAbility(new BestowAbility(this, "{6}{W}"));
// Whenever Heliod's Emissary or enchanted creature attacks, tap target creature an opponent controls. // Whenever Heliod's Emissary or enchanted creature attacks, tap target creature an opponent controls.
Ability ability = new AttacksTriggeredAbility(new TapTargetEffect(), false); Ability ability = new AttacksTriggeredAbility(new TapTargetEffect(), false);
Target target = new TargetCreaturePermanent(filter); Target target = new TargetCreaturePermanent(StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURE);
ability.addTarget(target); ability.addTarget(target);
this.addAbility(ability); this.addAbility(ability);
ability = new AttacksAttachedTriggeredAbility(new TapTargetEffect(), AttachmentType.AURA, false); ability = new AttacksAttachedTriggeredAbility(new TapTargetEffect(), AttachmentType.AURA, false);
target = new TargetCreaturePermanent(filter); target = new TargetCreaturePermanent(StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURE);
ability.addTarget(target); ability.addTarget(target);
this.addAbility(ability); this.addAbility(ability);
// Enchanted creature gets +3/+3. // Enchanted creature gets +3/+3.

View file

@ -15,8 +15,7 @@ import mage.constants.CardType;
import mage.constants.SubType; import mage.constants.SubType;
import mage.constants.Duration; import mage.constants.Duration;
import mage.constants.Zone; import mage.constants.Zone;
import mage.counters.CounterType; import mage.filter.StaticFilters;
import mage.filter.common.FilterCreaturePermanent;
import mage.target.common.TargetCreaturePermanent; import mage.target.common.TargetCreaturePermanent;
/** /**
@ -24,11 +23,6 @@ import mage.target.common.TargetCreaturePermanent;
* @author JotaPeRL * @author JotaPeRL
*/ */
public final class HeliumSquirter extends CardImpl { public final class HeliumSquirter extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("a creature with a +1/+1 counter on it");
static {
filter.add(CounterType.P1P1.getPredicate());
}
public HeliumSquirter(UUID ownerId, CardSetInfo setInfo) { public HeliumSquirter(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{4}{U}"); super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{4}{U}");
@ -42,7 +36,7 @@ public final class HeliumSquirter extends CardImpl {
// {1}: Target creature with a +1/+1 counter on it gains flying until end of turn. // {1}: Target creature with a +1/+1 counter on it gains flying until end of turn.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new GainAbilityTargetEffect(FlyingAbility.getInstance(), Duration.EndOfTurn), new GenericManaCost(1)); Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new GainAbilityTargetEffect(FlyingAbility.getInstance(), Duration.EndOfTurn), new GenericManaCost(1));
ability.addTarget(new TargetCreaturePermanent(filter)); ability.addTarget(new TargetCreaturePermanent(StaticFilters.FILTER_CREATURE_P1P1));
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -12,7 +12,7 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SubType; import mage.constants.SubType;
import mage.constants.Duration; import mage.constants.Duration;
import mage.filter.common.FilterControlledCreaturePermanent; import mage.filter.StaticFilters;
/** /**
* *
@ -31,7 +31,7 @@ public final class HeroOfGomaFada extends CardImpl {
// <i>Rally</i> &mdash; Whenever Hero of Goma Fada or another Ally enters the battlefield under your control, creatures you control gain indestructible until end of turn. // <i>Rally</i> &mdash; Whenever Hero of Goma Fada or another Ally enters the battlefield under your control, creatures you control gain indestructible until end of turn.
Ability ability = new AllyEntersBattlefieldTriggeredAbility( Ability ability = new AllyEntersBattlefieldTriggeredAbility(
new GainAbilityAllEffect(IndestructibleAbility.getInstance(), Duration.EndOfTurn, new GainAbilityAllEffect(IndestructibleAbility.getInstance(), Duration.EndOfTurn,
new FilterControlledCreaturePermanent("creatures you control")), false); StaticFilters.FILTER_CONTROLLED_CREATURES), false);
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -19,8 +19,7 @@ import mage.constants.SubType;
import mage.constants.Duration; import mage.constants.Duration;
import mage.constants.Zone; import mage.constants.Zone;
import mage.counters.CounterType; import mage.counters.CounterType;
import mage.filter.common.FilterControlledCreaturePermanent; import mage.filter.StaticFilters;
import mage.filter.predicate.mageobject.AnotherPredicate;
import mage.target.common.TargetCreaturePermanent; import mage.target.common.TargetCreaturePermanent;
/** /**
@ -28,12 +27,6 @@ import mage.target.common.TargetCreaturePermanent;
* @author emerald000 * @author emerald000
*/ */
public final class HighSentinelsOfArashin extends CardImpl { public final class HighSentinelsOfArashin extends CardImpl {
private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("other creature you control with a +1/+1 counter on it");
static {
filter.add(AnotherPredicate.instance);
filter.add(CounterType.P1P1.getPredicate());
}
public HighSentinelsOfArashin(UUID ownerId, CardSetInfo setInfo) { public HighSentinelsOfArashin(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{W}"); super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{W}");
@ -47,7 +40,7 @@ public final class HighSentinelsOfArashin extends CardImpl {
this.addAbility(FlyingAbility.getInstance()); this.addAbility(FlyingAbility.getInstance());
// High Sentinels of Arashin gets +1/+1 for each other creature you control with a +1/+1 counter on it. // High Sentinels of Arashin gets +1/+1 for each other creature you control with a +1/+1 counter on it.
DynamicValue count = new PermanentsOnBattlefieldCount(filter); DynamicValue count = new PermanentsOnBattlefieldCount(StaticFilters.FILTER_OTHER_CONTROLLED_CREATURE_P1P1);
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostSourceEffect(count, count, Duration.WhileOnBattlefield))); this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostSourceEffect(count, count, Duration.WhileOnBattlefield)));
// {3}{W}: Put a +1/+1 counter on target creature. // {3}{W}: Put a +1/+1 counter on target creature.

View file

@ -12,7 +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.FilterCreaturePermanent; import mage.filter.StaticFilters;
import mage.game.Game; import mage.game.Game;
import mage.game.events.GameEvent; import mage.game.events.GameEvent;
import mage.game.events.ZoneChangeEvent; import mage.game.events.ZoneChangeEvent;
@ -28,12 +28,6 @@ import java.util.UUID;
*/ */
public final class IcefallRegent extends CardImpl { public final class IcefallRegent extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature an opponent controls");
static {
filter.add(TargetController.OPPONENT.getControllerPredicate());
}
public IcefallRegent(UUID ownerId, CardSetInfo setInfo) { public IcefallRegent(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{U}{U}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{U}{U}");
this.subtype.add(SubType.DRAGON); this.subtype.add(SubType.DRAGON);
@ -43,10 +37,11 @@ public final class IcefallRegent extends CardImpl {
// Flying // Flying
this.addAbility(FlyingAbility.getInstance()); this.addAbility(FlyingAbility.getInstance());
// When Icefall Regent enters the battlefield, tap target creature an opponent controls. That creature doesn't untap during its controller's untap step for as long as you control Icefall Regent. // When Icefall Regent enters the battlefield, tap target creature an opponent controls.
// That creature doesn't untap during its controller's untap step for as long as you control Icefall Regent.
Ability ability = new EntersBattlefieldTriggeredAbility(new TapTargetEffect(), false); Ability ability = new EntersBattlefieldTriggeredAbility(new TapTargetEffect(), false);
ability.addEffect(new IcefallRegentEffect()); ability.addEffect(new IcefallRegentEffect());
Target target = new TargetCreaturePermanent(filter); Target target = new TargetCreaturePermanent(StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURE);
ability.addTarget(target); ability.addTarget(target);
this.addAbility(ability, new IcefallRegentWatcher()); this.addAbility(ability, new IcefallRegentWatcher());

View file

@ -6,7 +6,7 @@ import mage.abilities.effects.common.ReturnToBattlefieldUnderYourControlTargetEf
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.common.FilterControlledCreaturePermanent; import mage.filter.StaticFilters;
import mage.target.common.TargetControlledCreaturePermanent; import mage.target.common.TargetControlledCreaturePermanent;
import java.util.UUID; import java.util.UUID;
@ -24,7 +24,7 @@ public final class IllusionistsStratagem extends CardImpl {
this.getSpellAbility().addEffect(new ReturnToBattlefieldUnderYourControlTargetEffect(false) this.getSpellAbility().addEffect(new ReturnToBattlefieldUnderYourControlTargetEffect(false)
.withReturnNames("those cards", "their owner's").concatBy(", then")); .withReturnNames("those cards", "their owner's").concatBy(", then"));
this.getSpellAbility().addTarget(new TargetControlledCreaturePermanent(0, 2, this.getSpellAbility().addTarget(new TargetControlledCreaturePermanent(0, 2,
new FilterControlledCreaturePermanent("creatures you control"), false)); StaticFilters.FILTER_CONTROLLED_CREATURES, false));
// Draw a card. // Draw a card.
this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1)); this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1));

View file

@ -11,7 +11,7 @@ import mage.constants.CardType;
import mage.constants.Outcome; import mage.constants.Outcome;
import mage.constants.TargetController; import mage.constants.TargetController;
import mage.constants.Zone; import mage.constants.Zone;
import mage.filter.common.FilterCreaturePermanent; import mage.filter.StaticFilters;
/** /**
* *
@ -25,7 +25,7 @@ public final class ImpactTremors extends CardImpl {
// Whenever a creature enters the battlefield under your control, Impact Tremors deals 1 damage to each opponent. // Whenever a creature enters the battlefield under your control, Impact Tremors deals 1 damage to each opponent.
this.addAbility(new EntersBattlefieldControlledTriggeredAbility(Zone.BATTLEFIELD, this.addAbility(new EntersBattlefieldControlledTriggeredAbility(Zone.BATTLEFIELD,
new DamagePlayersEffect(Outcome.Damage, StaticValue.get(1), TargetController.OPPONENT), new DamagePlayersEffect(Outcome.Damage, StaticValue.get(1), TargetController.OPPONENT),
new FilterCreaturePermanent("a creature"), StaticFilters.FILTER_PERMANENT_A_CREATURE,
false)); false));
} }

View file

@ -14,6 +14,7 @@ import mage.constants.CardType;
import mage.constants.Duration; import mage.constants.Duration;
import mage.constants.SetTargetPointer; import mage.constants.SetTargetPointer;
import mage.constants.Zone; import mage.constants.Zone;
import mage.filter.StaticFilters;
import mage.filter.common.FilterCreaturePermanent; import mage.filter.common.FilterCreaturePermanent;
/** /**
@ -22,16 +23,13 @@ import mage.filter.common.FilterCreaturePermanent;
*/ */
public final class InTheWebOfWar extends CardImpl { public final class InTheWebOfWar extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("a creature");
public InTheWebOfWar(UUID ownerId, CardSetInfo setInfo) { public InTheWebOfWar(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{3}{R}{R}"); super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{3}{R}{R}");
// Whenever a creature enters the battlefield under your control, it gets +2/+0 and gains haste until end of turn. // Whenever a creature enters the battlefield under your control, it gets +2/+0 and gains haste until end of turn.
Effect effect = new BoostTargetEffect(2,0, Duration.EndOfTurn); Effect effect = new BoostTargetEffect(2,0, Duration.EndOfTurn);
effect.setText("it gets +2/+0"); effect.setText("it gets +2/+0");
Ability ability = new EntersBattlefieldControlledTriggeredAbility(Zone.BATTLEFIELD, effect, filter, false, SetTargetPointer.PERMANENT, null); Ability ability = new EntersBattlefieldControlledTriggeredAbility(Zone.BATTLEFIELD, effect, StaticFilters.FILTER_PERMANENT_A_CREATURE, false, SetTargetPointer.PERMANENT, null);
effect = new GainAbilityTargetEffect(HasteAbility.getInstance(), Duration.EndOfTurn); effect = new GainAbilityTargetEffect(HasteAbility.getInstance(), Duration.EndOfTurn);
effect.setText("and gains haste until end of turn"); effect.setText("and gains haste until end of turn");
ability.addEffect(effect); ability.addEffect(effect);

View file

@ -7,8 +7,7 @@ import mage.abilities.effects.common.DrawCardSourceControllerEffect;
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.TargetController; import mage.filter.StaticFilters;
import mage.filter.common.FilterCreaturePermanent;
import mage.target.common.TargetCreaturePermanent; import mage.target.common.TargetCreaturePermanent;
/** /**
@ -17,26 +16,17 @@ import mage.target.common.TargetCreaturePermanent;
*/ */
public final class InactionInjunction extends CardImpl { public final class InactionInjunction extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature an opponent controls");
static {
filter.add(TargetController.OPPONENT.getControllerPredicate());
}
public InactionInjunction(UUID ownerId, CardSetInfo setInfo) { public InactionInjunction(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{1}{U}"); super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{1}{U}");
// Detain target creature an opponent controls. // Detain target creature an opponent controls.
// (Until your next turn, that creature can't attack or block and its activated abilities can't be activated.) // (Until your next turn, that creature can't attack or block and its activated abilities can't be activated.)
this.getSpellAbility().addEffect(new DetainTargetEffect()); this.getSpellAbility().addEffect(new DetainTargetEffect());
TargetCreaturePermanent target = new TargetCreaturePermanent(filter); TargetCreaturePermanent target = new TargetCreaturePermanent(StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURE);
this.getSpellAbility().addTarget(target); this.getSpellAbility().addTarget(target);
// Draw a card. // Draw a card.
this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1)); this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1));
} }
private InactionInjunction(final InactionInjunction card) { private InactionInjunction(final InactionInjunction card) {

View file

@ -11,8 +11,7 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.Duration; import mage.constants.Duration;
import mage.counters.CounterType; import mage.filter.StaticFilters;
import mage.filter.common.FilterControlledCreaturePermanent;
/** /**
* *
@ -20,19 +19,18 @@ import mage.filter.common.FilterControlledCreaturePermanent;
*/ */
public final class InspiringCall extends CardImpl { public final class InspiringCall extends CardImpl {
private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("creature you control with a +1/+1 counter on it");
static {
filter.add(CounterType.P1P1.getPredicate());
}
public InspiringCall(UUID ownerId, CardSetInfo setInfo) { public InspiringCall(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{2}{G}"); super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{2}{G}");
// Draw a card for each creature you control with a +1/+1 counter on it. Those creatures gain indestructible until end of turn. <i>(Damage and effects that say "destroy" don't destroy them.) // Draw a card for each creature you control with a +1/+1 counter on it.
this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(new PermanentsOnBattlefieldCount(filter))); // Those creatures gain indestructible until end of turn.
Effect effect = new GainAbilityControlledEffect(IndestructibleAbility.getInstance(), Duration.EndOfTurn, filter); // <i>(Damage and effects that say "destroy" don't destroy them.)
effect.setText("Those creatures gain indestructible until end of turn. <i>(Damage and effects that say \"destroy\" don't destroy them.)</i>"); this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(
new PermanentsOnBattlefieldCount(StaticFilters.FILTER_CONTROLLED_CREATURE_P1P1)));
Effect effect = new GainAbilityControlledEffect(
IndestructibleAbility.getInstance(), Duration.EndOfTurn, StaticFilters.FILTER_CONTROLLED_CREATURE_P1P1);
effect.setText("Those creatures gain indestructible until end of turn. " +
"<i>(Damage and effects that say \"destroy\" don't destroy them.)</i>");
this.getSpellAbility().addEffect(effect); this.getSpellAbility().addEffect(effect);
} }

View file

@ -13,7 +13,7 @@ import mage.constants.Duration;
import mage.constants.TargetController; import mage.constants.TargetController;
import mage.constants.Zone; import mage.constants.Zone;
import static mage.filter.StaticFilters.FILTER_PERMANENT_CREATURES; import static mage.filter.StaticFilters.FILTER_PERMANENT_CREATURES;
import mage.filter.common.FilterCreaturePermanent; import mage.filter.StaticFilters;
/** /**
* *
@ -27,7 +27,7 @@ public final class IntruderAlarm extends CardImpl {
// Creatures don't untap during their controllers' untap steps. // Creatures don't untap during their controllers' untap steps.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new DontUntapInControllersUntapStepAllEffect(Duration.WhileOnBattlefield, TargetController.ANY, FILTER_PERMANENT_CREATURES))); this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new DontUntapInControllersUntapStepAllEffect(Duration.WhileOnBattlefield, TargetController.ANY, FILTER_PERMANENT_CREATURES)));
// Whenever a creature enters the battlefield, untap all creatures. // Whenever a creature enters the battlefield, untap all creatures.
this.addAbility(new EntersBattlefieldAllTriggeredAbility(new UntapAllEffect(FILTER_PERMANENT_CREATURES), new FilterCreaturePermanent("a creature"))); this.addAbility(new EntersBattlefieldAllTriggeredAbility(new UntapAllEffect(FILTER_PERMANENT_CREATURES), StaticFilters.FILTER_PERMANENT_A_CREATURE));
} }
private IntruderAlarm(final IntruderAlarm card) { private IntruderAlarm(final IntruderAlarm card) {

View file

@ -11,8 +11,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.TargetController; import mage.filter.StaticFilters;
import mage.filter.common.FilterCreaturePermanent;
import mage.target.common.TargetCreaturePermanent; import mage.target.common.TargetCreaturePermanent;
/** /**
@ -20,12 +19,6 @@ import mage.target.common.TargetCreaturePermanent;
* @author LevelX2 * @author LevelX2
*/ */
public final class IsperiasSkywatch extends CardImpl { public final class IsperiasSkywatch extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature an opponent controls");
static {
filter.add(TargetController.OPPONENT.getControllerPredicate());
}
public IsperiasSkywatch(UUID ownerId, CardSetInfo setInfo) { public IsperiasSkywatch(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{5}{U}"); super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{5}{U}");
@ -41,7 +34,7 @@ public final class IsperiasSkywatch extends CardImpl {
// When Isperia's Skywatch enters the battlefield, detain target creature an opponent controls. // When Isperia's Skywatch enters the battlefield, detain target creature an opponent controls.
// (Until your next turn, that creature can't attack or block and its activated abilities can't be activated.) // (Until your next turn, that creature can't attack or block and its activated abilities can't be activated.)
Ability ability = new EntersBattlefieldTriggeredAbility(new DetainTargetEffect()); Ability ability = new EntersBattlefieldTriggeredAbility(new DetainTargetEffect());
TargetCreaturePermanent target = new TargetCreaturePermanent(filter); TargetCreaturePermanent target = new TargetCreaturePermanent(StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURE);
ability.addTarget(target); ability.addTarget(target);
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -10,8 +10,7 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SubType; import mage.constants.SubType;
import mage.constants.Zone; import mage.constants.Zone;
import mage.counters.CounterType; import mage.filter.StaticFilters;
import mage.filter.common.FilterCreaturePermanent;
/** /**
* *
@ -19,12 +18,6 @@ import mage.filter.common.FilterCreaturePermanent;
*/ */
public final class IvorytuskFortress extends CardImpl { public final class IvorytuskFortress extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("each creature you control with a +1/+1 counter on it");
static {
filter.add(CounterType.P1P1.getPredicate());
}
public IvorytuskFortress(UUID ownerId, CardSetInfo setInfo) { public IvorytuskFortress(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{W}{B}{G}"); super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{W}{B}{G}");
this.subtype.add(SubType.ELEPHANT); this.subtype.add(SubType.ELEPHANT);
@ -33,7 +26,8 @@ public final class IvorytuskFortress extends CardImpl {
this.toughness = new MageInt(7); this.toughness = new MageInt(7);
// Untap each creature you control with a +1/+1 counter on it during each other player's untap step. // Untap each creature you control with a +1/+1 counter on it during each other player's untap step.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new UntapAllDuringEachOtherPlayersUntapStepEffect(filter))); this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD,
new UntapAllDuringEachOtherPlayersUntapStepEffect(StaticFilters.FILTER_EACH_CONTROLLED_CREATURE_P1P1)));
} }
private IvorytuskFortress(final IvorytuskFortress card) { private IvorytuskFortress(final IvorytuskFortress card) {

View file

@ -14,8 +14,7 @@ import mage.constants.Duration;
import mage.constants.SubType; import mage.constants.SubType;
import mage.constants.SuperType; import mage.constants.SuperType;
import mage.counters.CounterType; import mage.counters.CounterType;
import mage.filter.FilterPermanent; import mage.filter.StaticFilters;
import mage.filter.common.FilterControlledCreaturePermanent;
import mage.target.common.TargetCreaturePermanent; import mage.target.common.TargetCreaturePermanent;
import java.util.UUID; import java.util.UUID;
@ -25,13 +24,6 @@ import java.util.UUID;
*/ */
public final class JiangYangguWildcrafter extends CardImpl { public final class JiangYangguWildcrafter extends CardImpl {
private static final FilterPermanent filter
= new FilterControlledCreaturePermanent("Each creature you control with a +1/+1 counter on it");
static {
filter.add(CounterType.P1P1.getPredicate());
}
public JiangYangguWildcrafter(UUID ownerId, CardSetInfo setInfo) { public JiangYangguWildcrafter(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.PLANESWALKER}, "{2}{G}"); super(ownerId, setInfo, new CardType[]{CardType.PLANESWALKER}, "{2}{G}");
@ -41,7 +33,7 @@ public final class JiangYangguWildcrafter extends CardImpl {
// Each creature you control with a +1/+1 counter on it has "{T}: Add one mana of any color." // Each creature you control with a +1/+1 counter on it has "{T}: Add one mana of any color."
this.addAbility(new SimpleStaticAbility(new GainAbilityControlledEffect( this.addAbility(new SimpleStaticAbility(new GainAbilityControlledEffect(
new AnyColorManaAbility(), Duration.WhileOnBattlefield, filter new AnyColorManaAbility(), Duration.WhileOnBattlefield, StaticFilters.FILTER_EACH_CONTROLLED_CREATURE_P1P1
))); )));
// -1: Put a +1/+1 counter on target creature. // -1: Put a +1/+1 counter on target creature.

View file

@ -17,6 +17,7 @@ import mage.constants.SubType;
import mage.constants.Outcome; import mage.constants.Outcome;
import mage.constants.TargetController; import mage.constants.TargetController;
import mage.counters.CounterType; import mage.counters.CounterType;
import mage.filter.StaticFilters;
import mage.filter.common.FilterCreaturePermanent; import mage.filter.common.FilterCreaturePermanent;
import mage.game.Game; import mage.game.Game;
import mage.game.permanent.Permanent; import mage.game.permanent.Permanent;
@ -56,12 +57,6 @@ public final class KalonianHydra extends CardImpl {
class KalonianHydraEffect extends OneShotEffect { class KalonianHydraEffect extends OneShotEffect {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent();
static {
filter.add(TargetController.YOU.getControllerPredicate());
filter.add(CounterType.P1P1.getPredicate());
}
public KalonianHydraEffect() { public KalonianHydraEffect() {
super(Outcome.BoostCreature); super(Outcome.BoostCreature);
this.staticText = "double the number of +1/+1 counters on each creature you control"; this.staticText = "double the number of +1/+1 counters on each creature you control";
@ -78,7 +73,7 @@ class KalonianHydraEffect extends OneShotEffect {
@Override @Override
public boolean apply(Game game, Ability source) { public boolean apply(Game game, Ability source) {
List<Permanent> permanents = game.getBattlefield().getActivePermanents(filter, source.getControllerId(), source.getSourceId(), game); List<Permanent> permanents = game.getBattlefield().getActivePermanents(StaticFilters.FILTER_CONTROLLED_CREATURE_P1P1, source.getControllerId(), source.getSourceId(), game);
for (Permanent permanent : permanents) { for (Permanent permanent : permanents) {
int existingCounters = permanent.getCounters(game).getCount(CounterType.P1P1); int existingCounters = permanent.getCounters(game).getCount(CounterType.P1P1);
if (existingCounters > 0) { if (existingCounters > 0) {

View file

@ -16,7 +16,7 @@ import mage.constants.SubType;
import mage.constants.Duration; import mage.constants.Duration;
import mage.constants.TargetController; import mage.constants.TargetController;
import mage.constants.Zone; import mage.constants.Zone;
import mage.filter.common.FilterControlledCreaturePermanent; import mage.filter.StaticFilters;
/** /**
* *
@ -38,7 +38,7 @@ public final class KeeperOfKeys extends CardImpl {
// At the beginning of your upkeep, if you're the monarch, creatures you control can't be blocked this turn. // At the beginning of your upkeep, if you're the monarch, creatures you control can't be blocked this turn.
this.addAbility(new ConditionalInterveningIfTriggeredAbility(new BeginningOfUpkeepTriggeredAbility(Zone.BATTLEFIELD, this.addAbility(new ConditionalInterveningIfTriggeredAbility(new BeginningOfUpkeepTriggeredAbility(Zone.BATTLEFIELD,
new CantBeBlockedAllEffect(new FilterControlledCreaturePermanent("creatures you control"), Duration.EndOfTurn), new CantBeBlockedAllEffect(StaticFilters.FILTER_CONTROLLED_CREATURES, Duration.EndOfTurn),
TargetController.YOU, false), MonarchIsSourceControllerCondition.instance, TargetController.YOU, false), MonarchIsSourceControllerCondition.instance,
"At the beginning of your upkeep, if you're the monarch, creatures you control can't be blocked this turn.")); "At the beginning of your upkeep, if you're the monarch, creatures you control can't be blocked this turn."));
} }

View file

@ -12,11 +12,10 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SuperType; import mage.constants.SuperType;
import mage.constants.TargetController;
import mage.constants.Zone; import mage.constants.Zone;
import mage.filter.FilterCard; import mage.filter.FilterCard;
import mage.filter.FilterSpell; import mage.filter.FilterSpell;
import mage.filter.common.FilterCreaturePermanent; import mage.filter.StaticFilters;
import mage.filter.predicate.Predicates; import mage.filter.predicate.Predicates;
import mage.filter.predicate.mageobject.ColorPredicate; import mage.filter.predicate.mageobject.ColorPredicate;
import mage.target.common.TargetCreaturePermanent; import mage.target.common.TargetCreaturePermanent;
@ -29,18 +28,11 @@ public final class KefnetsMonument extends CardImpl {
private static final FilterCard filter = new FilterCard("Blue creature spells"); private static final FilterCard filter = new FilterCard("Blue creature spells");
private static final FilterSpell filter2 = new FilterSpell("a creature spell"); private static final FilterSpell filter2 = new FilterSpell("a creature spell");
private static final FilterCreaturePermanent filter3 = new FilterCreaturePermanent("creature an opponent controls");
static { static {
filter.add(Predicates.and(new ColorPredicate(ObjectColor.BLUE), CardType.CREATURE.getPredicate())); filter.add(Predicates.and(new ColorPredicate(ObjectColor.BLUE), CardType.CREATURE.getPredicate()));
}
static {
filter2.add(CardType.CREATURE.getPredicate()); filter2.add(CardType.CREATURE.getPredicate());
} }
static {
filter3.add(TargetController.OPPONENT.getControllerPredicate());
}
public KefnetsMonument(UUID ownerId, CardSetInfo setInfo) { public KefnetsMonument(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{3}"); super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{3}");
@ -52,7 +44,7 @@ public final class KefnetsMonument extends CardImpl {
// Whenever you cast a creature spell, target creature an opponent controls doesn't untap during its controller's next untap step. // Whenever you cast a creature spell, target creature an opponent controls doesn't untap during its controller's next untap step.
Ability ability = new SpellCastControllerTriggeredAbility(new DontUntapInControllersNextUntapStepTargetEffect(), filter2, false); Ability ability = new SpellCastControllerTriggeredAbility(new DontUntapInControllersNextUntapStepTargetEffect(), filter2, false);
ability.addTarget(new TargetCreaturePermanent(filter3)); ability.addTarget(new TargetCreaturePermanent(StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURE));
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -14,7 +14,7 @@ import mage.constants.CardType;
import mage.constants.Duration; import mage.constants.Duration;
import mage.constants.SubType; import mage.constants.SubType;
import mage.constants.Zone; import mage.constants.Zone;
import mage.filter.common.FilterControlledCreaturePermanent; import mage.filter.StaticFilters;
import java.util.UUID; import java.util.UUID;
@ -34,7 +34,7 @@ public final class KolaghanForerunners extends CardImpl {
this.addAbility(TrampleAbility.getInstance()); this.addAbility(TrampleAbility.getInstance());
// Kolaghan Forerunners' power is equal to the number of creatures you control. // Kolaghan Forerunners' power is equal to the number of creatures you control.
Effect effect = new SetPowerSourceEffect(new PermanentsOnBattlefieldCount(new FilterControlledCreaturePermanent("creatures you control")), Duration.EndOfGame); Effect effect = new SetPowerSourceEffect(new PermanentsOnBattlefieldCount(StaticFilters.FILTER_CONTROLLED_CREATURES), Duration.EndOfGame);
this.addAbility(new SimpleStaticAbility(Zone.ALL, effect).addHint(CreaturesYouControlHint.instance)); this.addAbility(new SimpleStaticAbility(Zone.ALL, effect).addHint(CreaturesYouControlHint.instance));
// Dash {2}{R} <i.(You may cast this spell for its dash cost. If you do it gains haste and it's returned to its owner's hand at the beginning of the next end step.)</i> // Dash {2}{R} <i.(You may cast this spell for its dash cost. If you do it gains haste and it's returned to its owner's hand at the beginning of the next end step.)</i>

View file

@ -10,8 +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.constants.TargetController; import mage.filter.StaticFilters;
import mage.filter.common.FilterCreaturePermanent;
import mage.target.common.TargetCreaturePermanent; import mage.target.common.TargetCreaturePermanent;
/** /**
@ -20,12 +19,6 @@ import mage.target.common.TargetCreaturePermanent;
*/ */
public final class KorEntanglers extends CardImpl { public final class KorEntanglers extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature an opponent controls");
static {
filter.add(TargetController.OPPONENT.getControllerPredicate());
}
public KorEntanglers(UUID ownerId, CardSetInfo setInfo) { public KorEntanglers(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{4}{W}"); super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{4}{W}");
this.subtype.add(SubType.KOR); this.subtype.add(SubType.KOR);
@ -36,7 +29,7 @@ public final class KorEntanglers extends CardImpl {
// <i>Rally</i> &mdash; Whenever Kor Entanglers or another Ally enters the battlefield under your control, tap target creature an opponent controls. // <i>Rally</i> &mdash; Whenever Kor Entanglers or another Ally enters the battlefield under your control, tap target creature an opponent controls.
Ability ability = new AllyEntersBattlefieldTriggeredAbility(new TapTargetEffect(), false); Ability ability = new AllyEntersBattlefieldTriggeredAbility(new TapTargetEffect(), false);
ability.addTarget(new TargetCreaturePermanent(filter)); ability.addTarget(new TargetCreaturePermanent(StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURE));
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -10,8 +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.constants.TargetController; import mage.filter.StaticFilters;
import mage.filter.common.FilterCreaturePermanent;
import mage.target.common.TargetCreaturePermanent; import mage.target.common.TargetCreaturePermanent;
/** /**
@ -20,12 +19,6 @@ import mage.target.common.TargetCreaturePermanent;
*/ */
public final class KorHookmaster extends CardImpl { public final class KorHookmaster extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature an opponent controls");
static {
filter.add(TargetController.OPPONENT.getControllerPredicate());
}
public KorHookmaster(UUID ownerId, CardSetInfo setInfo) { public KorHookmaster(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{W}"); super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{W}");
this.subtype.add(SubType.KOR); this.subtype.add(SubType.KOR);
@ -38,7 +31,7 @@ public final class KorHookmaster extends CardImpl {
// That creature doesn't untap during its controller's next untap step. // That creature doesn't untap during its controller's next untap step.
EntersBattlefieldTriggeredAbility ability = new EntersBattlefieldTriggeredAbility(new TapTargetEffect()); EntersBattlefieldTriggeredAbility ability = new EntersBattlefieldTriggeredAbility(new TapTargetEffect());
ability.addEffect(new DontUntapInControllersNextUntapStepTargetEffect()); ability.addEffect(new DontUntapInControllersNextUntapStepTargetEffect());
ability.addTarget(new TargetCreaturePermanent(filter)); ability.addTarget(new TargetCreaturePermanent(StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURE));
this.addAbility(ability); this.addAbility(ability);
} }

Some files were not shown because too many files have changed in this diff Show more