Various text fixes found while closing #6885

This commit is contained in:
Alex W. Jackson 2022-01-24 00:40:25 -05:00
parent faf2e4ec82
commit 26a2e0a5ed
113 changed files with 384 additions and 618 deletions

View file

@ -35,7 +35,7 @@ public final class AetherwindBasker extends CardImpl {
this.addAbility(TrampleAbility.getInstance());
// Whenever Aetherwind Basker enters the battlefield or attacks, you get {E} for each creature you control.
this.addAbility(new EntersBattlefieldOrAttacksSourceTriggeredAbility(new GetEnergyCountersControllerEffect(new PermanentsOnBattlefieldCount(StaticFilters.FILTER_PERMANENT_CREATURE_CONTROLLED, null))));
this.addAbility(new EntersBattlefieldOrAttacksSourceTriggeredAbility(new GetEnergyCountersControllerEffect(new PermanentsOnBattlefieldCount(StaticFilters.FILTER_PERMANENT_CREATURE_CONTROLLED))));
// Pay {E}: Aetherwind Basker gets +1/+1 until end of turn.
this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostSourceEffect(1, 1, Duration.EndOfTurn), new PayEnergyCost(1)));

View file

@ -1,9 +1,9 @@
package mage.cards.a;
import java.util.UUID;
import mage.MageInt;
import mage.ObjectColor;
import mage.abilities.Ability;
import mage.abilities.common.AttacksTriggeredAbility;
import mage.abilities.effects.common.continuous.BoostAllEffect;
import mage.cards.CardImpl;
@ -27,7 +27,6 @@ public final class AgrusKosWojekVeteran extends CardImpl {
static {
filterRed.add(new ColorPredicate(ObjectColor.RED));
filterWhite.add(new ColorPredicate(ObjectColor.WHITE));
}
public AgrusKosWojekVeteran(UUID ownerId, CardSetInfo setInfo) {
@ -40,8 +39,9 @@ public final class AgrusKosWojekVeteran extends CardImpl {
this.power = new MageInt(3);
this.toughness = new MageInt(3);
// Whenever Agrus Kos, Wojek Veteran attacks, attacking red creatures get +2/+0 and attacking white creatures get +0/+2 until end of turn.
this.addAbility(new AttacksTriggeredAbility(new BoostAllEffect(2, 0, Duration.EndOfTurn, filterRed, false), false));
this.addAbility(new AttacksTriggeredAbility(new BoostAllEffect(0, 2, Duration.EndOfTurn, filterWhite, false), false));
Ability ability = new AttacksTriggeredAbility(new BoostAllEffect(2, 0, Duration.EndOfTurn, filterRed, false), false);
ability.addEffect(new BoostAllEffect(0, 2, Duration.EndOfTurn, filterWhite, false).concatBy("and"));
this.addAbility(ability);
}
private AgrusKosWojekVeteran(final AgrusKosWojekVeteran card) {

View file

@ -1,4 +1,3 @@
package mage.cards.a;
import java.util.UUID;
@ -13,7 +12,7 @@ import mage.abilities.keyword.FirstStrikeAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.*;
import mage.filter.common.FilterAttackingCreature;
import mage.filter.StaticFilters;
/**
*
@ -29,9 +28,8 @@ public final class AkkiCoalflinger extends CardImpl {
this.power = new MageInt(2);
this.toughness = new MageInt(2);
this.addAbility(FirstStrikeAbility.getInstance());
Effect effect = new GainAbilityAllEffect(FirstStrikeAbility.getInstance(), Duration.EndOfTurn, new FilterAttackingCreature());
effect.setText("Attacking creatures gain first strike until end of turn");
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, effect, new ColoredManaCost(ColoredManaSymbol.R));
Effect effect = new GainAbilityAllEffect(FirstStrikeAbility.getInstance(), Duration.EndOfTurn, StaticFilters.FILTER_ATTACKING_CREATURES);
Ability ability = new SimpleActivatedAbility(effect, new ColoredManaCost(ColoredManaSymbol.R));
ability.addCost(new TapSourceCost());
this.addAbility(ability);
}

View file

@ -1,9 +1,9 @@
package mage.cards.a;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.common.AttacksTriggeredAbility;
import mage.abilities.dynamicvalue.DynamicValue;
import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount;
import mage.abilities.dynamicvalue.common.StaticValue;
import mage.abilities.effects.common.continuous.BoostSourceEffect;
@ -13,8 +13,7 @@ import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.SubType;
import mage.constants.TargetController;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.permanent.AttackingPredicate;
import mage.filter.common.FilterAttackingCreature;
/**
*
@ -22,13 +21,14 @@ import mage.filter.predicate.permanent.AttackingPredicate;
*/
public final class AkroanHoplite extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("attacking creatures you control");
private static final FilterAttackingCreature filter = new FilterAttackingCreature("attacking creatures you control");
static {
filter.add(TargetController.YOU.getControllerPredicate());
filter.add(AttackingPredicate.instance);
}
private static final DynamicValue xValue = new PermanentsOnBattlefieldCount(filter, null);
public AkroanHoplite(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{R}{W}");
this.subtype.add(SubType.HUMAN);
@ -38,7 +38,7 @@ public final class AkroanHoplite extends CardImpl {
this.toughness = new MageInt(2);
// Whenever Akroan Hoplite attacks, it gets +X/+0 until end of turn, where X is the number of attacking creatures you control.
this.addAbility(new AttacksTriggeredAbility(new BoostSourceEffect(new PermanentsOnBattlefieldCount(filter), StaticValue.get(0), Duration.EndOfTurn, true), false));
this.addAbility(new AttacksTriggeredAbility(new BoostSourceEffect(xValue, StaticValue.get(0), Duration.EndOfTurn, true, "it"), false));
}
private AkroanHoplite(final AkroanHoplite card) {

View file

@ -13,7 +13,6 @@ import mage.abilities.effects.common.continuous.BoostSourceEffect;
import mage.cards.*;
import mage.constants.*;
import mage.filter.FilterCard;
import mage.filter.FilterPermanent;
import mage.filter.common.FilterAttackingCreature;
import mage.filter.predicate.Predicates;
import mage.filter.predicate.mageobject.NamePredicate;
@ -29,7 +28,7 @@ import java.util.UUID;
*/
public final class AlpineHoundmaster extends CardImpl {
private static final FilterPermanent filter = new FilterAttackingCreature("the number of other attacking creatures");
private static final FilterAttackingCreature filter = new FilterAttackingCreature("other attacking creatures");
static {
filter.add(AnotherPredicate.instance);
@ -49,9 +48,7 @@ public final class AlpineHoundmaster extends CardImpl {
this.addAbility(new EntersBattlefieldTriggeredAbility(new AlpineHoundmasterEffect(), true));
// Whenever Alpine Houndmaster attacks, it gets +X/+0 until end of turn, where X is the number of other attacking creatures.
this.addAbility(new AttacksTriggeredAbility(new BoostSourceEffect(
xValue, StaticValue.get(0), Duration.EndOfTurn, true
).setText("it gets +X/+0 until end of turn, where X is the number of other attacking creatures"), false));
this.addAbility(new AttacksTriggeredAbility(new BoostSourceEffect(xValue, StaticValue.get(0), Duration.EndOfTurn, true, "it"), false));
}
private AlpineHoundmaster(final AlpineHoundmaster card) {

View file

@ -8,21 +8,19 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.filter.common.FilterBlockingCreature;
import mage.filter.StaticFilters;
/**
*
* @author fireshoes
*/
public final class Ambush extends CardImpl {
private static final FilterBlockingCreature filter = new FilterBlockingCreature("Blocking creatures");
public Ambush(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{3}{R}");
// Blocking creatures gain first strike until end of turn.
this.getSpellAbility().addEffect(new GainAbilityAllEffect(FirstStrikeAbility.getInstance(), Duration.EndOfTurn, filter, false));
this.getSpellAbility().addEffect(new GainAbilityAllEffect(FirstStrikeAbility.getInstance(), Duration.EndOfTurn, StaticFilters.FILTER_BLOCKING_CREATURES, false));
}
private Ambush(final Ambush card) {

View file

@ -13,7 +13,7 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.filter.common.FilterAttackingCreature;
import mage.filter.StaticFilters;
import mage.watchers.common.CastFromHandWatcher;
/**
@ -35,7 +35,7 @@ public final class AngelOfTheDireHour extends CardImpl {
this.addAbility(FlyingAbility.getInstance());
// When Angel of the Dire Hour enters the battlefield, if you cast it from your hand, exile all attacking creatures.
this.addAbility(new ConditionalInterveningIfTriggeredAbility(
new EntersBattlefieldTriggeredAbility(new ExileAllEffect(new FilterAttackingCreature("attacking creatures")), false),
new EntersBattlefieldTriggeredAbility(new ExileAllEffect(StaticFilters.FILTER_ATTACKING_CREATURES), false),
CastFromHandSourcePermanentCondition.instance,
"When {this} enters the battlefield, if you cast it from your hand, exile all attacking creatures."),
new CastFromHandWatcher());

View file

@ -1,9 +1,9 @@
package mage.cards.a;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.common.AttacksTriggeredAbility;
import mage.abilities.dynamicvalue.DynamicValue;
import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount;
import mage.abilities.effects.common.continuous.BoostSourceEffect;
import mage.abilities.keyword.FlyingAbility;
@ -28,6 +28,8 @@ public final class AngelicCaptain extends CardImpl {
filter.add(AnotherPredicate.instance);
}
private static final DynamicValue xValue = new PermanentsOnBattlefieldCount(filter);
public AngelicCaptain(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{R}{W}");
this.subtype.add(SubType.ANGEL);
@ -39,8 +41,7 @@ public final class AngelicCaptain extends CardImpl {
this.addAbility(FlyingAbility.getInstance());
// Whenever Angelic Captain attacks, it gets +1/+1 until end of turn for each other attacking Ally.
PermanentsOnBattlefieldCount value = new PermanentsOnBattlefieldCount(filter);
this.addAbility(new AttacksTriggeredAbility(new BoostSourceEffect(value, value, Duration.EndOfTurn, true), false));
this.addAbility(new AttacksTriggeredAbility(new BoostSourceEffect(xValue, xValue, Duration.EndOfTurn, true, "it"), false));
}
private AngelicCaptain(final AngelicCaptain card) {

View file

@ -7,21 +7,19 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.filter.common.FilterAttackingCreature;
import mage.filter.StaticFilters;
/**
*
* @author fireshoes
*/
public final class ArmyOfAllah extends CardImpl {
private static final FilterAttackingCreature filter = new FilterAttackingCreature("Attacking creatures");
public ArmyOfAllah(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{1}{W}{W}");
// Attacking creatures get +2/+0 until end of turn.
this.getSpellAbility().addEffect(new BoostAllEffect(2, 0, Duration.EndOfTurn, filter, false));
this.getSpellAbility().addEffect(new BoostAllEffect(2, 0, Duration.EndOfTurn, StaticFilters.FILTER_ATTACKING_CREATURES, false));
}
private ArmyOfAllah(final ArmyOfAllah card) {

View file

@ -1,9 +1,9 @@
package mage.cards.a;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.common.AttacksTriggeredAbility;
import mage.abilities.dynamicvalue.DynamicValue;
import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount;
import mage.abilities.dynamicvalue.common.StaticValue;
import mage.abilities.effects.common.continuous.BoostSourceEffect;
@ -22,13 +22,15 @@ import mage.filter.predicate.mageobject.AnotherPredicate;
*/
public final class Aurochs extends CardImpl {
private static final FilterAttackingCreature filter1 = new FilterAttackingCreature("other attacking Aurochs");
private static final FilterAttackingCreature filter = new FilterAttackingCreature("other attacking Aurochs");
static {
filter1.add(SubType.AUROCHS.getPredicate());
filter1.add(AnotherPredicate.instance);
filter.add(SubType.AUROCHS.getPredicate());
filter.add(AnotherPredicate.instance);
}
private static final DynamicValue xValue = new PermanentsOnBattlefieldCount(filter);
public Aurochs(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{G}");
this.subtype.add(SubType.AUROCHS);
@ -38,8 +40,7 @@ public final class Aurochs extends CardImpl {
// Trample
this.addAbility(TrampleAbility.getInstance());
// Whenever Aurochs attacks, it gets +1/+0 until end of turn for each other attacking Aurochs.
PermanentsOnBattlefieldCount value = new PermanentsOnBattlefieldCount(filter1, 1);
this.addAbility(new AttacksTriggeredAbility(new BoostSourceEffect(value, StaticValue.get(0), Duration.EndOfTurn, true), false));
this.addAbility(new AttacksTriggeredAbility(new BoostSourceEffect(xValue, StaticValue.get(0), Duration.EndOfTurn, true, "it"), false));
}
private Aurochs(final Aurochs card) {

View file

@ -1,10 +1,10 @@
package mage.cards.a;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.common.AttacksTriggeredAbility;
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
import mage.abilities.dynamicvalue.DynamicValue;
import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount;
import mage.abilities.dynamicvalue.common.StaticValue;
import mage.abilities.effects.common.continuous.BoostSourceEffect;
@ -35,6 +35,8 @@ public final class AurochsHerd extends CardImpl {
filter2.add(AnotherPredicate.instance);
}
private static final DynamicValue xValue = new PermanentsOnBattlefieldCount(filter2);
public AurochsHerd(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{5}{G}");
this.subtype.add(SubType.AUROCHS);
@ -47,8 +49,7 @@ public final class AurochsHerd extends CardImpl {
this.addAbility(new EntersBattlefieldTriggeredAbility(new SearchLibraryPutInHandEffect(
new TargetCardInLibrary(filter1), true), true));
// Whenever Aurochs Herd attacks, it gets +1/+0 until end of turn for each other attacking Aurochs.
PermanentsOnBattlefieldCount value = new PermanentsOnBattlefieldCount(filter2, 1);
this.addAbility(new AttacksTriggeredAbility(new BoostSourceEffect(value, StaticValue.get(0), Duration.EndOfTurn, true), false));
this.addAbility(new AttacksTriggeredAbility(new BoostSourceEffect(xValue, StaticValue.get(0), Duration.EndOfTurn, true, "it"), false));
}
private AurochsHerd(final AurochsHerd card) {

View file

@ -1,4 +1,3 @@
package mage.cards.b;
import java.util.UUID;
@ -15,7 +14,7 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.SubType;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.StaticFilters;
/**
*
@ -23,6 +22,8 @@ import mage.filter.common.FilterCreaturePermanent;
*/
public final class BaneOfTheLiving extends CardImpl {
private static final DynamicValue morphX = new SignInversionDynamicValue(MorphManacostVariableValue.instance);
public BaneOfTheLiving(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{B}{B}");
this.subtype.add(SubType.INSECT);
@ -31,9 +32,9 @@ public final class BaneOfTheLiving extends CardImpl {
// Morph {X}{B}{B}
this.addAbility(new MorphAbility(this, new ManaCostsImpl("{X}{B}{B}")));
// When Bane of the Living is turned face up, all creatures get -X/-X until end of turn.
DynamicValue morphX = new SignInversionDynamicValue(MorphManacostVariableValue.instance);
this.addAbility(new TurnedFaceUpSourceTriggeredAbility(new BoostAllEffect(morphX, morphX, Duration.EndOfTurn, new FilterCreaturePermanent("all creatures"), false, "", true)));
this.addAbility(new TurnedFaceUpSourceTriggeredAbility(new BoostAllEffect(morphX, morphX, Duration.EndOfTurn, StaticFilters.FILTER_PERMANENT_ALL_CREATURES, false, null, true)));
}
private BaneOfTheLiving(final BaneOfTheLiving card) {

View file

@ -1,22 +1,18 @@
package mage.cards.b;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.AttacksTriggeredAbility;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.UntapTargetEffect;
import mage.abilities.effects.common.continuous.BoostTargetEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.Outcome;
import mage.constants.SubType;
import mage.filter.common.FilterAttackingCreature;
import mage.filter.predicate.mageobject.AnotherPredicate;
import mage.game.Game;
import mage.game.permanent.Permanent;
import mage.target.common.TargetAttackingCreature;
/**
@ -39,7 +35,8 @@ public final class BazaarKrovod extends CardImpl {
this.toughness = new MageInt(5);
// Whenever Bazaar Krovod attacks, another target attacking creature gets +0/+2 until end of turn. Untap that creature.
Ability ability = new AttacksTriggeredAbility(new BazaarKrovodEffect(), false);
Ability ability = new AttacksTriggeredAbility(new BoostTargetEffect(0, 2, Duration.EndOfTurn), false);
ability.addEffect(new UntapTargetEffect().setText("Untap that creature"));
ability.addTarget(new TargetAttackingCreature(1, 1, filter, false));
this.addAbility(ability);
}
@ -53,32 +50,3 @@ public final class BazaarKrovod extends CardImpl {
return new BazaarKrovod(this);
}
}
class BazaarKrovodEffect extends OneShotEffect {
public BazaarKrovodEffect() {
super(Outcome.Benefit);
staticText = "another target attacking creature gets +0/+2 until end of turn. Untap that creature";
}
public BazaarKrovodEffect(BazaarKrovodEffect effect) {
super(effect);
}
@Override
public boolean apply(Game game, Ability source) {
Permanent permanent = game.getPermanent(source.getFirstTarget());
if (permanent != null) {
game.addEffect(new BoostTargetEffect(0, 2, Duration.EndOfTurn), source);
permanent.untap(game);
return true;
}
return false;
}
@Override
public BazaarKrovodEffect copy() {
return new BazaarKrovodEffect(this);
}
}

View file

@ -11,7 +11,7 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Zone;
import mage.filter.FilterCard;
import mage.filter.StaticFilters;
import mage.game.permanent.token.BearToken;
import mage.target.common.TargetCardInYourGraveyard;
@ -27,7 +27,7 @@ public final class Bearscape extends CardImpl {
// {1}{G}, Exile two cards from your graveyard: Create a 2/2 green Bear creature token.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new CreateTokenEffect(new BearToken()), new ManaCostsImpl("{1}{G}"));
ability.addCost(new ExileFromGraveCost(new TargetCardInYourGraveyard(2, new FilterCard("cards from your graveyard"))));
ability.addCost(new ExileFromGraveCost(new TargetCardInYourGraveyard(2, StaticFilters.FILTER_CARDS_FROM_YOUR_GRAVEYARD)));
this.addAbility(ability);
}

View file

@ -1,4 +1,3 @@
package mage.cards.b;
import java.util.UUID;
@ -9,8 +8,7 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.Zone;
import mage.filter.common.FilterAttackingCreature;
import mage.filter.StaticFilters;
/**
*
@ -22,9 +20,7 @@ public final class BerserkersOnslaught extends CardImpl {
super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{3}{R}{R}");
// Attacking creatures you control have double strike.
GainAbilityControlledEffect gainEffect = new GainAbilityControlledEffect(DoubleStrikeAbility.getInstance(), Duration.WhileOnBattlefield, new FilterAttackingCreature("Attacking creatures"), false);
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, gainEffect));
this.addAbility(new SimpleStaticAbility(new GainAbilityControlledEffect(DoubleStrikeAbility.getInstance(), Duration.WhileOnBattlefield, StaticFilters.FILTER_ATTACKING_CREATURES, false)));
}
private BerserkersOnslaught(final BerserkersOnslaught card) {

View file

@ -1,4 +1,3 @@
package mage.cards.b;
import java.util.UUID;
@ -8,9 +7,9 @@ import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.DamageTargetEffect;
import mage.abilities.effects.common.GainLifeEffect;
import mage.abilities.effects.common.PutOnLibraryTargetEffect;
import mage.abilities.effects.common.continuous.GainAbilityControlledEffect;
import mage.abilities.effects.common.counter.AddCountersTargetEffect;
import mage.abilities.keyword.DeathtouchAbility;
@ -18,13 +17,9 @@ import mage.abilities.keyword.FlyingAbility;
import mage.cards.*;
import mage.constants.*;
import mage.counters.CounterType;
import mage.filter.FilterCard;
import mage.filter.common.FilterAttackingCreature;
import mage.filter.StaticFilters;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.mageobject.AbilityPredicate;
import mage.game.Game;
import mage.players.Player;
import mage.target.Target;
import mage.target.common.TargetCardInYourGraveyard;
import mage.target.common.TargetCreaturePermanent;
@ -43,13 +38,11 @@ public final class BowOfNylea extends CardImpl {
super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT,CardType.ARTIFACT},"{1}{G}{G}");
addSuperType(SuperType.LEGENDARY);
// Attacking creatures you control have deathtouch.
GainAbilityControlledEffect gainEffect = new GainAbilityControlledEffect(DeathtouchAbility.getInstance(), Duration.WhileOnBattlefield, new FilterAttackingCreature("Attacking creatures"), false);
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, gainEffect));
this.addAbility(new SimpleStaticAbility(new GainAbilityControlledEffect(DeathtouchAbility.getInstance(), Duration.WhileOnBattlefield, StaticFilters.FILTER_ATTACKING_CREATURES, false)));
// {1}{G}, {T}: Choose one - Put a +1/+1 counter on target creature;
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD,
Ability ability = new SimpleActivatedAbility(
new AddCountersTargetEffect(CounterType.P1P1.createInstance()),
new ManaCostsImpl("{1}{G}"));
ability.addTarget(new TargetCreaturePermanent());
@ -57,8 +50,7 @@ public final class BowOfNylea extends CardImpl {
// or Bow of Nylea deals 2 damage to target creature with flying;
Mode mode = new Mode();
mode.addEffect(new DamageTargetEffect(2));
Target target = new TargetCreaturePermanent(filterFlying);
mode.addTarget(target);
mode.addTarget(new TargetCreaturePermanent(filterFlying));
ability.addMode(mode);
// or you gain 3 life;
mode = new Mode();
@ -66,12 +58,11 @@ public final class BowOfNylea extends CardImpl {
ability.addMode(mode);
// or put up to four target cards from your graveyard on the bottom of your library in any order.
mode = new Mode();
mode.addEffect(new PutCardsFromGraveyardToLibraryEffect());
mode.addTarget(new TargetCardInYourGraveyard(0,4, new FilterCard()));
mode.addEffect(new PutOnLibraryTargetEffect(false, "put up to four target cards from your graveyard on the bottom of your library in any order"));
mode.addTarget(new TargetCardInYourGraveyard(0, 4, StaticFilters.FILTER_CARDS_FROM_YOUR_GRAVEYARD));
ability.addMode(mode);
this.addAbility(ability);
}
private BowOfNylea(final BowOfNylea card) {
@ -83,36 +74,3 @@ public final class BowOfNylea extends CardImpl {
return new BowOfNylea(this);
}
}
class PutCardsFromGraveyardToLibraryEffect extends OneShotEffect {
public PutCardsFromGraveyardToLibraryEffect() {
super(Outcome.Detriment);
this.staticText = "put up to four target cards from your graveyard on the bottom of your library in any order";
}
public PutCardsFromGraveyardToLibraryEffect(final PutCardsFromGraveyardToLibraryEffect effect) {
super(effect);
}
@Override
public PutCardsFromGraveyardToLibraryEffect copy() {
return new PutCardsFromGraveyardToLibraryEffect(this);
}
@Override
public boolean apply(Game game, Ability source) {
Player controller = game.getPlayer(source.getControllerId());
if (controller != null) {
Cards cards = new CardsImpl();
for (UUID cardId : this.getTargetPointer().getTargets(game, source)) {
Card card = controller.getGraveyard().get(cardId, game);
if (card != null) {
cards.add(card);
}
}
return controller.putCardsOnBottomOfLibrary(cards, game, source, true);
}
return false;
}
}

View file

@ -1,9 +1,9 @@
package mage.cards.b;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.common.AttacksTriggeredAbility;
import mage.abilities.dynamicvalue.DynamicValue;
import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount;
import mage.abilities.dynamicvalue.common.StaticValue;
import mage.abilities.effects.common.continuous.BoostSourceEffect;
@ -29,6 +29,8 @@ public final class BullAurochs extends CardImpl {
filter.add(AnotherPredicate.instance);
}
private static final DynamicValue xValue = new PermanentsOnBattlefieldCount(filter);
public BullAurochs(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{G}");
this.subtype.add(SubType.AUROCHS);
@ -37,9 +39,9 @@ public final class BullAurochs extends CardImpl {
// Trample
this.addAbility(TrampleAbility.getInstance());
// Whenever Bull Aurochs attacks, it gets +1/+0 until end of turn for each other attacking Aurochs.
PermanentsOnBattlefieldCount value = new PermanentsOnBattlefieldCount(filter, 1);
this.addAbility(new AttacksTriggeredAbility(new BoostSourceEffect(value, StaticValue.get(0), Duration.EndOfTurn, true), false));
this.addAbility(new AttacksTriggeredAbility(new BoostSourceEffect(xValue, StaticValue.get(0), Duration.EndOfTurn, true, "it"), false));
}
private BullAurochs(final BullAurochs card) {

View file

@ -22,7 +22,7 @@ public final class BurstOfStrength extends CardImpl {
// Put a +1/+1 counter on target creature and untap it.
this.getSpellAbility().addEffect(new AddCountersTargetEffect(CounterType.P1P1.createInstance(1)));
this.getSpellAbility().addEffect(new UntapTargetEffect());
this.getSpellAbility().addEffect(new UntapTargetEffect().setText("and untap it"));
this.getSpellAbility().addTarget(new TargetCreaturePermanent());
}

View file

@ -17,7 +17,7 @@ import mage.abilities.effects.common.discard.DiscardTargetEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.*;
import mage.filter.FilterCard;
import mage.filter.StaticFilters;
import mage.game.Game;
import mage.target.TargetPlayer;
import mage.target.common.TargetCardInYourGraveyard;
@ -40,7 +40,7 @@ public final class CabalInquisitor extends CardImpl {
Ability ability = new ActivateAsSorceryConditionalActivatedAbility(Zone.BATTLEFIELD, new DiscardTargetEffect(1), new ManaCostsImpl("{1}{B}"), new CardsInControllerGraveyardCondition(7));
ability.addTarget(new TargetPlayer());
ability.addCost(new TapSourceCost());
ability.addCost(new ExileFromGraveCost(new TargetCardInYourGraveyard(2, new FilterCard("cards from your graveyard"))));
ability.addCost(new ExileFromGraveCost(new TargetCardInYourGraveyard(2, StaticFilters.FILTER_CARDS_FROM_YOUR_GRAVEYARD)));
ability.setAbilityWord(AbilityWord.THRESHOLD);
this.addAbility(ability);
}

View file

@ -14,7 +14,6 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.Zone;
import mage.filter.FilterCard;
import mage.filter.StaticFilters;
import mage.target.common.TargetCardInYourGraveyard;
@ -35,7 +34,7 @@ public final class CabalSurgeon extends CardImpl {
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new ReturnToHandTargetEffect(), new ManaCostsImpl("{2}{B}{B}"));
ability.addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_CREATURE_YOUR_GRAVEYARD));
ability.addCost(new TapSourceCost());
ability.addCost(new ExileFromGraveCost(new TargetCardInYourGraveyard(2, new FilterCard("cards from your graveyard"))));
ability.addCost(new ExileFromGraveCost(new TargetCardInYourGraveyard(2, StaticFilters.FILTER_CARDS_FROM_YOUR_GRAVEYARD)));
this.addAbility(ability);
}

View file

@ -43,7 +43,7 @@ public final class CarnifexDemon extends CardImpl {
this.addAbility(new EntersBattlefieldAbility(
new AddCountersSourceEffect(CounterType.M1M1.createInstance(2)),
"{this} enters the battlefield with two -1/-1 counters on it"
"with two -1/-1 counters on it"
));
Ability ability = new SimpleActivatedAbility(

View file

@ -1,9 +1,9 @@
package mage.cards.c;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.common.AttacksTriggeredAbility;
import mage.abilities.dynamicvalue.DynamicValue;
import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount;
import mage.abilities.effects.common.continuous.BoostSourceEffect;
import mage.cards.CardImpl;
@ -27,6 +27,8 @@ public final class CennsHeir extends CardImpl {
filter.add(AnotherPredicate.instance);
}
private static final DynamicValue xValue = new PermanentsOnBattlefieldCount(filter);
public CennsHeir(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{W}");
this.subtype.add(SubType.KITHKIN);
@ -35,8 +37,7 @@ public final class CennsHeir extends CardImpl {
this.toughness = new MageInt(1);
// Whenever Cenn's Heir attacks, it gets +1/+1 until end of turn for each other attacking Kithkin.
PermanentsOnBattlefieldCount count = new PermanentsOnBattlefieldCount(filter);
this.addAbility(new AttacksTriggeredAbility(new BoostSourceEffect(count, count, Duration.EndOfTurn, true), false));
this.addAbility(new AttacksTriggeredAbility(new BoostSourceEffect(xValue, xValue, Duration.EndOfTurn, true, "it"), false));
}
private CennsHeir(final CennsHeir card) {

View file

@ -25,7 +25,7 @@ public final class CeruleanWisps extends CardImpl {
// Target creature becomes blue until end of turn. Untap that creature.
this.getSpellAbility().addTarget(new TargetCreaturePermanent());
this.getSpellAbility().addEffect(new BecomesColorTargetEffect(ObjectColor.BLUE, Duration.EndOfTurn));
this.getSpellAbility().addEffect(new UntapTargetEffect());
this.getSpellAbility().addEffect(new UntapTargetEffect().setText("Untap that creature"));
// Draw a card.
this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1));

View file

@ -12,7 +12,7 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.Outcome;
import mage.filter.common.FilterAttackingCreature;
import mage.filter.StaticFilters;
import mage.game.Game;
import mage.game.permanent.Permanent;
import mage.target.targetpointer.FixedTargets;
@ -51,8 +51,6 @@ public final class ClingingMists extends CardImpl {
class ClingingMistsEffect extends OneShotEffect {
private static final FilterAttackingCreature filter = new FilterAttackingCreature("attacking creatures");
public ClingingMistsEffect() {
super(Outcome.Tap);
staticText = "tap all attacking creatures. Those creatures don't untap during their controller's next untap step";
@ -65,7 +63,7 @@ class ClingingMistsEffect extends OneShotEffect {
@Override
public boolean apply(Game game, Ability source) {
List<Permanent> doNotUntapNextUntapStep = new ArrayList<>();
for (Permanent creature : game.getBattlefield().getActivePermanents(filter, source.getControllerId(), source.getSourceId(), game)) {
for (Permanent creature : game.getBattlefield().getActivePermanents(StaticFilters.FILTER_ATTACKING_CREATURES, source.getControllerId(), source.getSourceId(), game)) {
creature.tap(source, game);
doNotUntapNextUntapStep.add(creature);
}
@ -81,5 +79,4 @@ class ClingingMistsEffect extends OneShotEffect {
public ClingingMistsEffect copy() {
return new ClingingMistsEffect(this);
}
}

View file

@ -12,8 +12,9 @@ import mage.abilities.keyword.RenownAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.Duration;
import mage.constants.SubType;
import mage.constants.TargetController;
import mage.filter.common.FilterAttackingCreature;
/**
@ -22,6 +23,12 @@ import mage.filter.common.FilterAttackingCreature;
*/
public final class ConsulsLieutenant extends CardImpl {
private static final FilterAttackingCreature filter = new FilterAttackingCreature("attacking creatures you control");
static {
filter.add(TargetController.YOU.getControllerPredicate());
}
public ConsulsLieutenant(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{W}{W}");
this.subtype.add(SubType.HUMAN);
@ -35,10 +42,9 @@ public final class ConsulsLieutenant extends CardImpl {
this.addAbility(new RenownAbility(1));
// Whenever Consul's Lieutenant attacks, if it's renowned, other attacking creatures you control get +1/+1 until end of turn.
this.addAbility(new ConditionalInterveningIfTriggeredAbility(new AttacksTriggeredAbility(
new BoostControlledEffect(1, 1, Duration.EndOfTurn, new FilterAttackingCreature("other attacking creatures you control"), true), false),
new BoostControlledEffect(1, 1, Duration.EndOfTurn, filter, true), false),
RenownedSourceCondition.instance,
"Whenever Consul's Lieutenant attacks, if it's renowned, other attacking creatures you control get +1/+1 until end of turn."));
}
private ConsulsLieutenant(final ConsulsLieutenant card) {

View file

@ -25,7 +25,7 @@ import java.util.UUID;
*/
public final class ConsulsShieldguard extends CardImpl {
private static final FilterAttackingCreature filter = new FilterAttackingCreature();
private static final FilterAttackingCreature filter = new FilterAttackingCreature("another target attacking creature");
static {
filter.add(AnotherPredicate.instance);
@ -41,13 +41,10 @@ public final class ConsulsShieldguard extends CardImpl {
// When Consul's Shieldguard enters the battlefield, you get {E}{E}.
this.addAbility(new EntersBattlefieldTriggeredAbility(new GetEnergyCountersControllerEffect(2)));
// Whenever Consul's Shiedguard attacks, you may pay {E}. If you do, another target attacking creature gets indestructible until end of turn.
DoIfCostPaid doIfCostPaidEffect = new DoIfCostPaid(new GainAbilityTargetEffect(IndestructibleAbility.getInstance(), Duration.EndOfTurn), new PayEnergyCost(1));
Ability ability = new AttacksTriggeredAbility(doIfCostPaidEffect, false,
"Whenever {this} attacks, you may pay {E}. If you do, another target attacking creature gets indestructible until end of turn.");
// Whenever Consul's Shieldguard attacks, you may pay {E}. If you do, another target attacking creature gains indestructible until end of turn.
Ability ability = new AttacksTriggeredAbility(new DoIfCostPaid(new GainAbilityTargetEffect(IndestructibleAbility.getInstance(), Duration.EndOfTurn), new PayEnergyCost(1)));
ability.addTarget(new TargetCreaturePermanent(filter));
this.addAbility(ability);
}
private ConsulsShieldguard(final ConsulsShieldguard card) {

View file

@ -1,4 +1,3 @@
package mage.cards.c;
import java.util.UUID;
@ -7,14 +6,14 @@ import mage.abilities.Mode;
import mage.abilities.TriggeredAbilityImpl;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.costs.mana.GenericManaCost;
import mage.abilities.effects.ContinuousEffectImpl;
import mage.abilities.effects.common.continuous.BoostAllEffect;
import mage.abilities.mana.ColorlessManaAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.*;
import mage.filter.common.FilterAttackingCreature;
import mage.filter.StaticFilters;
import mage.game.Game;
import mage.game.events.DamagedPlayerEvent;
import mage.game.events.GameEvent;
@ -26,8 +25,6 @@ import mage.game.permanent.Permanent;
*/
public final class ContestedWarZone extends CardImpl {
private static final FilterAttackingCreature filter = new FilterAttackingCreature("Attacking creatures");
public ContestedWarZone(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.LAND}, null);
@ -38,7 +35,7 @@ public final class ContestedWarZone extends CardImpl {
this.addAbility(new ColorlessManaAbility());
// {1}, {T}: Attacking creatures get +1/+0 until end of turn.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostAllEffect(1, 0, Duration.EndOfTurn, filter, false), new ManaCostsImpl("{1}"));
Ability ability = new SimpleActivatedAbility(new BoostAllEffect(1, 0, Duration.EndOfTurn, StaticFilters.FILTER_ATTACKING_CREATURES, false), new GenericManaCost(1));
ability.addCost(new TapSourceCost());
this.addAbility(ability);
}

View file

@ -1,4 +1,3 @@
package mage.cards.c;
import java.util.UUID;
@ -16,8 +15,7 @@ import mage.constants.Duration;
import mage.constants.TargetController;
import mage.constants.Zone;
import mage.counters.CounterType;
import mage.filter.common.FilterAttackingCreature;
import mage.filter.common.FilterBlockingCreature;
import mage.filter.StaticFilters;
/**
*
@ -25,6 +23,8 @@ import mage.filter.common.FilterBlockingCreature;
*/
public final class CrescendoOfWar extends CardImpl {
private static final CountersSourceCount xValue = new CountersSourceCount(CounterType.STRIFE);
public CrescendoOfWar(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{3}{W}");
@ -32,12 +32,12 @@ public final class CrescendoOfWar extends CardImpl {
this.addAbility(new BeginningOfUpkeepTriggeredAbility(new AddCountersSourceEffect(CounterType.STRIFE.createInstance(1), true), TargetController.ANY, false));
// Attacking creatures get +1/+0 for each strife counter on Crescendo of War.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostAllEffect(new CountersSourceCount(CounterType.STRIFE), StaticValue.get(0),
Duration.WhileOnBattlefield, new FilterAttackingCreature(), false)));
this.addAbility(new SimpleStaticAbility(new BoostAllEffect(xValue, StaticValue.get(0),
Duration.WhileOnBattlefield, StaticFilters.FILTER_ATTACKING_CREATURES, false)));
// Blocking creatures you control get +1/+0 for each strife counter on Crescendo of War.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostControlledEffect(new CountersSourceCount(CounterType.STRIFE), StaticValue.get(0),
Duration.WhileOnBattlefield, new FilterBlockingCreature(), false)));
this.addAbility(new SimpleStaticAbility(new BoostControlledEffect(xValue, StaticValue.get(0),
Duration.WhileOnBattlefield, StaticFilters.FILTER_BLOCKING_CREATURES, false)));
}
private CrescendoOfWar(final CrescendoOfWar card) {

View file

@ -1,4 +1,3 @@
package mage.cards.c;
import java.util.UUID;
@ -6,14 +5,14 @@ import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.costs.mana.ColoredManaCost;
import mage.abilities.effects.common.continuous.BoostTargetEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.ColoredManaSymbol;
import mage.constants.Duration;
import mage.constants.SubType;
import mage.constants.Zone;
import mage.filter.common.FilterAttackingCreature;
import mage.target.common.TargetAttackingCreature;
@ -37,7 +36,7 @@ public final class CrossroadsConsecrator extends CardImpl {
this.toughness = new MageInt(2);
// {G}, {T}: Target attacking Human gets +1/+1 until end of turn.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostTargetEffect(1, 1, Duration.EndOfTurn), new ManaCostsImpl<>("{G}"));
Ability ability = new SimpleActivatedAbility(new BoostTargetEffect(1, 1, Duration.EndOfTurn), new ColoredManaCost(ColoredManaSymbol.G));
ability.addTarget(new TargetAttackingCreature(1, 1, filter, false));
ability.addCost(new TapSourceCost());
this.addAbility(ability);

View file

@ -1,4 +1,3 @@
package mage.cards.d;
import java.util.UUID;
@ -11,7 +10,6 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.filter.StaticFilters;
import mage.filter.common.FilterCreaturePermanent;
import mage.game.Game;
import mage.game.events.GameEvent;
import mage.game.events.ZoneChangeEvent;
@ -25,9 +23,8 @@ public final class DeathFrenzy extends CardImpl {
public DeathFrenzy(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{3}{B}{G}");
// All creatures get -2/-2 until end of turn. Whenever a creature dies this turn, you gain 1 life.
this.getSpellAbility().addEffect(new BoostAllEffect(-2, -2, Duration.EndOfTurn, new FilterCreaturePermanent("All creatures"), false));
this.getSpellAbility().addEffect(new BoostAllEffect(-2, -2, Duration.EndOfTurn));
this.getSpellAbility().addEffect(new CreateDelayedTriggeredAbilityEffect(new DeathFrenzyDelayedTriggeredAbility()));
}

View file

@ -1,8 +1,6 @@
package mage.cards.d;
import java.util.UUID;
import mage.abilities.effects.Effect;
import mage.abilities.effects.common.continuous.BoostAllEffect;
import mage.abilities.effects.common.continuous.GainAbilityControlledEffect;
import mage.abilities.keyword.TrampleAbility;
@ -11,8 +9,7 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.SubType;
import mage.constants.TargetController;
import mage.filter.common.FilterAttackingCreature;
import mage.filter.StaticFilters;
import mage.filter.common.FilterCreaturePermanent;
/**
@ -21,22 +18,14 @@ import mage.filter.common.FilterCreaturePermanent;
*/
public final class DinosaurStampede extends CardImpl {
private static final FilterAttackingCreature filter = new FilterAttackingCreature("Attacking creatures");
private static final FilterCreaturePermanent filter2 = new FilterCreaturePermanent("Dinosaurs you control");
static {
filter2.add(SubType.DINOSAUR.getPredicate());
filter2.add(TargetController.YOU.getControllerPredicate());
}
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent(SubType.DINOSAUR, "Dinosaurs");
public DinosaurStampede(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{2}{R}");
// Attacking creatures get +2/+0 until end of turn. Dinosaurs you control gain trample until end of turn.
this.getSpellAbility().addEffect(new BoostAllEffect(2, 0, Duration.EndOfTurn, filter, false));
Effect effect = new GainAbilityControlledEffect(TrampleAbility.getInstance(), Duration.EndOfTurn, filter2);
effect.setText("Dinosaurs you control gain trample until end of turn.");
this.getSpellAbility().addEffect(effect);
this.getSpellAbility().addEffect(new BoostAllEffect(2, 0, Duration.EndOfTurn, StaticFilters.FILTER_ATTACKING_CREATURES, false));
this.getSpellAbility().addEffect(new GainAbilityControlledEffect(TrampleAbility.getInstance(), Duration.EndOfTurn, filter));
}
private DinosaurStampede(final DinosaurStampede card) {

View file

@ -1,9 +1,9 @@
package mage.cards.d;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.common.AttacksTriggeredAbility;
import mage.abilities.dynamicvalue.DynamicValue;
import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount;
import mage.abilities.effects.common.continuous.BoostSourceEffect;
import mage.cards.CardImpl;
@ -27,6 +27,8 @@ public final class DireFleetCaptain extends CardImpl {
filter.add(AnotherPredicate.instance);
}
private static final DynamicValue xValue = new PermanentsOnBattlefieldCount(filter);
public DireFleetCaptain(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{B}{R}");
@ -36,9 +38,7 @@ public final class DireFleetCaptain extends CardImpl {
this.toughness = new MageInt(2);
// Whenever Dire Fleet Captain attacks, it gets +1/+1 until end of turn for each other attacking Pirate.
PermanentsOnBattlefieldCount value = new PermanentsOnBattlefieldCount(filter);
this.addAbility(new AttacksTriggeredAbility(new BoostSourceEffect(value, value, Duration.EndOfTurn, true)
.setText("it gets +1/+1 until end of turn for each other attacking Pirate"), false));
this.addAbility(new AttacksTriggeredAbility(new BoostSourceEffect(xValue, xValue, Duration.EndOfTurn, true, "it"), false));
}
private DireFleetCaptain(final DireFleetCaptain card) {

View file

@ -1,15 +1,16 @@
package mage.cards.d;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.common.continuous.BoostSourceEffect;
import mage.abilities.effects.common.continuous.GainAbilityControlledEffect;
import mage.constants.*;
import mage.abilities.effects.common.continuous.BoostControlledEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.filter.common.FilterAttackingCreature;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.SubType;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.permanent.AttackingPredicate;
/**
*
@ -17,10 +18,10 @@ import mage.filter.common.FilterAttackingCreature;
*/
public final class DireFleetNeckbreaker extends CardImpl {
private static final FilterAttackingCreature filterYourAttackingPirates = new FilterAttackingCreature("Attacking Pirates");
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent(SubType.PIRATE, "attacking Pirates");
static {
filterYourAttackingPirates.add(TargetController.YOU.getControllerPredicate());
filterYourAttackingPirates.add(SubType.PIRATE.getPredicate());
filter.add(AttackingPredicate.instance);
}
public DireFleetNeckbreaker(UUID ownerId, CardSetInfo setInfo) {
@ -32,14 +33,7 @@ public final class DireFleetNeckbreaker extends CardImpl {
this.toughness = new MageInt(2);
// Attacking Pirates you control get +2/+0.
GainAbilityControlledEffect gainEffect = new GainAbilityControlledEffect(
new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostSourceEffect(2, 0, Duration.Custom)),
Duration.WhileOnBattlefield,
filterYourAttackingPirates,
false
);
gainEffect.setText("Attacking Pirates you control get +2/+0.");
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, gainEffect));
this.addAbility(new SimpleStaticAbility(new BoostControlledEffect(2, 0, Duration.WhileOnBattlefield, filter)));
}
private DireFleetNeckbreaker(final DireFleetNeckbreaker card) {
@ -50,4 +44,4 @@ public final class DireFleetNeckbreaker extends CardImpl {
public DireFleetNeckbreaker copy() {
return new DireFleetNeckbreaker(this);
}
}
}

View file

@ -13,7 +13,7 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.StaticFilters;
import mage.target.common.TargetCreaturePermanent;
/**
@ -25,9 +25,8 @@ public final class DirgeOfDread extends CardImpl {
public DirgeOfDread(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{2}{B}");
// All creatures gain fear until end of turn.
this.getSpellAbility().addEffect(new GainAbilityAllEffect(FearAbility.getInstance(), Duration.EndOfTurn, new FilterCreaturePermanent("All creatures")));
this.getSpellAbility().addEffect(new GainAbilityAllEffect(FearAbility.getInstance(), Duration.EndOfTurn, StaticFilters.FILTER_PERMANENT_ALL_CREATURES));
// Cycling {1}{B}
this.addAbility(new CyclingAbility(new ManaCostsImpl("{1}{B}")));
// When you cycle Dirge of Dread, you may have target creature gain fear until end of turn.

View file

@ -1,4 +1,3 @@
package mage.cards.d;
import java.util.UUID;
@ -22,7 +21,7 @@ import mage.filter.common.FilterAttackingCreature;
*/
public final class DranaLiberatorOfMalakir extends CardImpl {
private static final FilterAttackingCreature filter = new FilterAttackingCreature("each attacking creature you control");
private static final FilterAttackingCreature filter = new FilterAttackingCreature("attacking creature you control");
static {
filter.add(TargetController.YOU.getControllerPredicate());

View file

@ -1,4 +1,3 @@
package mage.cards.d;
import java.util.UUID;
@ -13,8 +12,7 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.Duration;
import mage.constants.Zone;
import mage.filter.common.FilterAttackingCreature;
import mage.filter.StaticFilters;
/**
*
@ -32,8 +30,8 @@ public final class DuergarMineCaptain extends CardImpl {
this.toughness = new MageInt(1);
// {1}{RW}, {untap}: Attacking creatures get +1/+0 until end of turn.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD,
new BoostAllEffect(1, 0, Duration.EndOfTurn, new FilterAttackingCreature("attacking creatures"), false),
Ability ability = new SimpleActivatedAbility(
new BoostAllEffect(1, 0, Duration.EndOfTurn, StaticFilters.FILTER_ATTACKING_CREATURES, false),
new ManaCostsImpl("{1}{R/W}")
);
ability.addCost(new UntapSourceCost());

View file

@ -1,4 +1,3 @@
package mage.cards.e;
import java.util.UUID;
@ -14,8 +13,8 @@ import mage.abilities.keyword.FlyingAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.Duration;
import mage.constants.SubType;
import mage.filter.common.FilterAttackingCreature;
import mage.filter.predicate.mageobject.AnotherPredicate;
import mage.target.common.TargetCreaturePermanent;
@ -26,7 +25,7 @@ import mage.target.common.TargetCreaturePermanent;
*/
public final class EddytrailHawk extends CardImpl {
private static final FilterAttackingCreature filter = new FilterAttackingCreature();
private static final FilterAttackingCreature filter = new FilterAttackingCreature("another target attacking creature");
static {
filter.add(AnotherPredicate.instance);
@ -42,10 +41,8 @@ public final class EddytrailHawk extends CardImpl {
this.addAbility(FlyingAbility.getInstance());
// When Eddytail Hawk enters the battlefield, you get {E}{E}.
this.addAbility(new EntersBattlefieldTriggeredAbility(new GetEnergyCountersControllerEffect(2)));
// When Eddytail Hawk attacks you pay {E}. If you do, another target attacking creature gains flying until end of turn.
DoIfCostPaid doIfCostPaidEffect = new DoIfCostPaid(new GainAbilityTargetEffect(FlyingAbility.getInstance(), Duration.EndOfTurn), new PayEnergyCost(1), null, true);
Ability ability = new AttacksTriggeredAbility(doIfCostPaidEffect, false,
"Whenever {this} attacks you pay {E}. If you do, another target attacking creature gains flying until end of turn.");
// Whenever Eddytrail Hawk attacks, you may pay {E}. If you do, another target attacking creature gains flying until end of turn.
Ability ability = new AttacksTriggeredAbility(new DoIfCostPaid(new GainAbilityTargetEffect(FlyingAbility.getInstance(), Duration.EndOfTurn), new PayEnergyCost(1)));
ability.addTarget(new TargetCreaturePermanent(filter));
this.addAbility(ability);
}

View file

@ -1,4 +1,3 @@
package mage.cards.f;
import java.util.UUID;
@ -11,7 +10,7 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.Duration;
import mage.filter.common.FilterAttackingCreature;
import mage.filter.StaticFilters;
/**
*
@ -27,7 +26,7 @@ public final class FangrenPathcutter extends CardImpl {
this.toughness = new MageInt(6);
// Whenever Fangren Pathcutter attacks, attacking creatures gain trample until end of turn.
this.addAbility(new AttacksTriggeredAbility(new GainAbilityAllEffect(TrampleAbility.getInstance(), Duration.EndOfTurn, new FilterAttackingCreature()), false));
this.addAbility(new AttacksTriggeredAbility(new GainAbilityAllEffect(TrampleAbility.getInstance(), Duration.EndOfTurn, StaticFilters.FILTER_ATTACKING_CREATURES), false));
}
private FangrenPathcutter(final FangrenPathcutter card) {

View file

@ -10,7 +10,6 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.Outcome;
import mage.filter.common.FilterBlockingCreature;
import mage.game.Game;
import mage.players.Player;
import mage.target.targetpointer.FixedTarget;
@ -21,8 +20,6 @@ import mage.target.targetpointer.FixedTarget;
*/
public final class FightingChance extends CardImpl {
private static final FilterBlockingCreature filter = new FilterBlockingCreature("Blocking creatures");
public FightingChance(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{R}");

View file

@ -16,7 +16,7 @@ import mage.abilities.keyword.FirstStrikeAbility;
import mage.constants.*;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.filter.FilterCard;
import mage.filter.StaticFilters;
import mage.game.Game;
import mage.game.permanent.Permanent;
import mage.players.Player;
@ -29,8 +29,6 @@ import mage.target.targetpointer.FixedTarget;
*/
public final class FleetingSpirit extends CardImpl {
private static final FilterCard filter = new FilterCard("cards from your graveyard");
public FleetingSpirit(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{W}");
@ -43,7 +41,7 @@ public final class FleetingSpirit extends CardImpl {
new GainAbilitySourceEffect(FirstStrikeAbility.getInstance(), Duration.EndOfTurn),
new ManaCostsImpl<>("{W}")
);
ability.addCost(new ExileFromGraveCost(new TargetCardInYourGraveyard(3, filter)));
ability.addCost(new ExileFromGraveCost(new TargetCardInYourGraveyard(3, StaticFilters.FILTER_CARDS_FROM_YOUR_GRAVEYARD)));
this.addAbility(ability);
// Discard a card: Exile Fleeting Spirit. Return it to the battlefield under its owner's control at the beginning of the next end step.

View file

@ -1,13 +1,13 @@
package mage.cards.f;
import java.util.UUID;
import mage.abilities.dynamicvalue.DynamicValue;
import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount;
import mage.abilities.effects.common.CreateTokenEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.filter.common.FilterAttackingCreature;
import mage.filter.StaticFilters;
import mage.game.permanent.token.BirdSoldierToken;
/**
@ -16,12 +16,12 @@ import mage.game.permanent.token.BirdSoldierToken;
*/
public final class FlurryOfWings extends CardImpl {
private static final FilterAttackingCreature filter = new FilterAttackingCreature("the number of attacking creatures");
private static final DynamicValue xValue = new PermanentsOnBattlefieldCount(StaticFilters.FILTER_ATTACKING_CREATURES, null);
public FlurryOfWings(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{G}{W}{U}");
this.getSpellAbility().addEffect(new CreateTokenEffect(new BirdSoldierToken(), new PermanentsOnBattlefieldCount(filter)));
this.getSpellAbility().addEffect(new CreateTokenEffect(new BirdSoldierToken(), xValue));
}
private FlurryOfWings(final FlurryOfWings card) {

View file

@ -11,8 +11,6 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.Zone;
import mage.filter.common.FilterCreaturePermanent;
/**
*
@ -20,8 +18,6 @@ import mage.filter.common.FilterCreaturePermanent;
*/
public final class FyndhornPollen extends CardImpl {
private static FilterCreaturePermanent filter = new FilterCreaturePermanent("All creatures");
public FyndhornPollen(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{2}{G}");
@ -29,10 +25,10 @@ public final class FyndhornPollen extends CardImpl {
this.addAbility(new CumulativeUpkeepAbility(new ManaCostsImpl("{1}")));
// All creatures get -1/-0.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostAllEffect(-1, 0, Duration.WhileOnBattlefield, filter, false)));
this.addAbility(new SimpleStaticAbility(new BoostAllEffect(-1, 0, Duration.WhileOnBattlefield)));
// {1}{G}: All creatures get -1/-0 until end of turn.
this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostAllEffect(-1, 0, Duration.EndOfTurn, filter, false), new ManaCostsImpl("{1}{G}")));
this.addAbility(new SimpleActivatedAbility(new BoostAllEffect(-1, 0, Duration.EndOfTurn), new ManaCostsImpl("{1}{G}")));
}
private FyndhornPollen(final FyndhornPollen card) {

View file

@ -5,6 +5,7 @@ import java.util.UUID;
import mage.MageInt;
import mage.ObjectColor;
import mage.abilities.common.AttacksTriggeredAbility;
import mage.abilities.dynamicvalue.DynamicValue;
import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount;
import mage.abilities.dynamicvalue.common.StaticValue;
import mage.abilities.effects.common.continuous.BoostSourceEffect;
@ -30,6 +31,8 @@ public final class GoblinPiledriver extends CardImpl {
filter.add(AnotherPredicate.instance);
}
private static final DynamicValue xValue = new PermanentsOnBattlefieldCount(filter, 2);
public GoblinPiledriver(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{R}");
this.subtype.add(SubType.GOBLIN);
@ -41,8 +44,7 @@ public final class GoblinPiledriver extends CardImpl {
// Protection from blue
this.addAbility(ProtectionAbility.from(ObjectColor.BLUE));
// Whenever Goblin Piledriver attacks, it gets +2/+0 until end of turn for each other attacking Goblin.
PermanentsOnBattlefieldCount value = new PermanentsOnBattlefieldCount(filter, 2);
this.addAbility(new AttacksTriggeredAbility(new BoostSourceEffect(value, StaticValue.get(0), Duration.EndOfTurn, true), false));
this.addAbility(new AttacksTriggeredAbility(new BoostSourceEffect(xValue, StaticValue.get(0), Duration.EndOfTurn, true, "it"), false));
}
private GoblinPiledriver(final GoblinPiledriver card) {

View file

@ -1,4 +1,3 @@
package mage.cards.g;
import java.util.UUID;
@ -11,7 +10,6 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.filter.common.FilterControlledCreaturePermanent;
import mage.filter.common.FilterCreaturePermanent;
import mage.target.common.TargetEnchantmentPermanent;
/**
@ -25,7 +23,7 @@ public final class GolgariCharm extends CardImpl {
// Choose one All creatures get -1/-1 until end of turn;
this.getSpellAbility().addEffect(new BoostAllEffect(-1,-1, Duration.EndOfTurn,new FilterCreaturePermanent("All creatures"), false));
this.getSpellAbility().addEffect(new BoostAllEffect(-1, -1, Duration.EndOfTurn));
// or destroy target enchantment;
Mode mode = new Mode();

View file

@ -1,4 +1,3 @@
package mage.cards.g;
import java.util.UUID;
@ -11,8 +10,7 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.SuperType;
import mage.constants.Zone;
import mage.filter.FilterPermanent;
import mage.filter.StaticFilters;
/**
*
@ -20,20 +18,14 @@ import mage.filter.FilterPermanent;
*/
public final class GravitySphere extends CardImpl {
static final private FilterPermanent filter = new FilterPermanent("All creatures");
static {
filter.add(CardType.CREATURE.getPredicate());
}
public GravitySphere(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{2}{R}");
addSuperType(SuperType.WORLD);
// All creatures lose flying.
Effect effect = new LoseAbilityAllEffect(FlyingAbility.getInstance(), Duration.WhileOnBattlefield, filter);
Effect effect = new LoseAbilityAllEffect(FlyingAbility.getInstance(), Duration.WhileOnBattlefield, StaticFilters.FILTER_PERMANENT_ALL_CREATURES);
effect.setText("All creatures lose flying");
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, effect));
this.addAbility(new SimpleStaticAbility(effect));
}

View file

@ -15,7 +15,7 @@ import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.ColoredManaSymbol;
import mage.constants.Zone;
import mage.filter.FilterCard;
import mage.filter.StaticFilters;
import mage.target.common.TargetCardInYourGraveyard;
import mage.target.common.TargetAnyTarget;
@ -35,7 +35,7 @@ public final class GrimLavamancer extends CardImpl {
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(2), new ColoredManaCost(ColoredManaSymbol.R));
ability.addCost(new TapSourceCost());
ability.addCost(new ExileFromGraveCost(new TargetCardInYourGraveyard(2, new FilterCard("cards from your graveyard"))));
ability.addCost(new ExileFromGraveCost(new TargetCardInYourGraveyard(2, StaticFilters.FILTER_CARDS_FROM_YOUR_GRAVEYARD)));
ability.addTarget(new TargetAnyTarget());
this.addAbility(ability);
}

View file

@ -8,7 +8,7 @@ import mage.abilities.effects.common.DamageTargetEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.filter.FilterCard;
import mage.filter.StaticFilters;
import mage.target.common.TargetCreaturePermanent;
/**
@ -22,7 +22,7 @@ public final class HarvestPyre extends CardImpl {
// As an additional cost to cast Harvest Pyre, exile X cards from your graveyard.
this.getSpellAbility().addCost(new ExileXFromYourGraveCost(new FilterCard("cards from your graveyard")));
this.getSpellAbility().addCost(new ExileXFromYourGraveCost(StaticFilters.FILTER_CARDS_FROM_YOUR_GRAVEYARD));
// Harvest Pyre deals X damage to target creature.
this.getSpellAbility().addTarget(new TargetCreaturePermanent());

View file

@ -8,7 +8,7 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.filter.common.FilterAttackingCreature;
import mage.filter.StaticFilters;
/**
*
@ -20,7 +20,7 @@ public final class HeadlongRush extends CardImpl {
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{1}{R}");
// Attacking creatures gain first strike until end of turn.
this.getSpellAbility().addEffect(new GainAbilityAllEffect(FirstStrikeAbility.getInstance(), Duration.EndOfTurn, new FilterAttackingCreature()));
this.getSpellAbility().addEffect(new GainAbilityAllEffect(FirstStrikeAbility.getInstance(), Duration.EndOfTurn, StaticFilters.FILTER_ATTACKING_CREATURES));
}
private HeadlongRush(final HeadlongRush card) {

View file

@ -1,4 +1,3 @@
package mage.cards.h;
import java.util.UUID;
@ -11,9 +10,9 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.ComparisonType;
import mage.constants.Duration;
import mage.filter.StaticFilters;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.mageobject.PowerPredicate;
import mage.filter.predicate.permanent.AttackingPredicate;
import mage.target.common.TargetCreaturePermanent;
/**
@ -22,13 +21,10 @@ import mage.target.common.TargetCreaturePermanent;
*/
public final class HearthCharm extends CardImpl {
private static final FilterCreaturePermanent filter1 = new FilterCreaturePermanent("artifact creature");
private static final FilterCreaturePermanent filter2 = new FilterCreaturePermanent("attacking creatures");
private static final FilterCreaturePermanent filter3 = new FilterCreaturePermanent("creature with power 2 or less");
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature with power 2 or less");
static {
filter1.add(CardType.ARTIFACT.getPredicate());
filter2.add(AttackingPredicate.instance);
filter3.add(new PowerPredicate(ComparisonType.FEWER_THAN, 3));
filter.add(new PowerPredicate(ComparisonType.FEWER_THAN, 3));
}
public HearthCharm(UUID ownerId, CardSetInfo setInfo) {
@ -36,15 +32,15 @@ public final class HearthCharm extends CardImpl {
// Choose one - Destroy target artifact creature
this.getSpellAbility().addEffect(new DestroyTargetEffect());
this.getSpellAbility().addTarget(new TargetCreaturePermanent(filter1));
this.getSpellAbility().addTarget(new TargetCreaturePermanent(StaticFilters.FILTER_PERMANENT_ARTIFACT_CREATURE));
// or attacking creatures get +1/+0 until end of turn
Mode mode = new Mode();
mode.addEffect(new BoostAllEffect(1, 0, Duration.EndOfTurn, filter2, false));
mode.addEffect(new BoostAllEffect(1, 0, Duration.EndOfTurn, StaticFilters.FILTER_ATTACKING_CREATURES, false));
this.getSpellAbility().addMode(mode);
// or target creature with power 2 or less is unblockable this turn.
mode = new Mode();
mode.addEffect(new CantBeBlockedTargetEffect());
mode.addTarget(new TargetCreaturePermanent(filter3));
mode.addTarget(new TargetCreaturePermanent(filter));
this.getSpellAbility().addMode(mode);
}

View file

@ -1,4 +1,3 @@
package mage.cards.h;
import java.util.UUID;
@ -7,7 +6,6 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.filter.common.FilterCreaturePermanent;
/**
*
@ -19,7 +17,7 @@ public final class HellSwarm extends CardImpl {
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{B}");
// All creatures get -1/-0 until end of turn.
this.getSpellAbility().addEffect(new BoostAllEffect(-1, 0, Duration.EndOfTurn, new FilterCreaturePermanent("All creatures"), false));
this.getSpellAbility().addEffect(new BoostAllEffect(-1, 0, Duration.EndOfTurn));
}
private HellSwarm(final HellSwarm card) {

View file

@ -1,4 +1,3 @@
package mage.cards.h;
import java.util.UUID;
@ -7,7 +6,7 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.filter.common.FilterBlockingCreature;
import mage.filter.StaticFilters;
/**
*
@ -15,13 +14,11 @@ import mage.filter.common.FilterBlockingCreature;
*/
public final class HoldTheLine extends CardImpl {
private static final FilterBlockingCreature filter = new FilterBlockingCreature("Blocking creatures");
public HoldTheLine(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{1}{W}{W}");
// Blocking creatures get +7/+7 until end of turn.
this.getSpellAbility().addEffect(new BoostAllEffect(7, 7, Duration.EndOfTurn, filter, false));
this.getSpellAbility().addEffect(new BoostAllEffect(7, 7, Duration.EndOfTurn, StaticFilters.FILTER_BLOCKING_CREATURES, false));
}
private HoldTheLine(final HoldTheLine card) {

View file

@ -1,4 +1,3 @@
package mage.cards.h;
import java.util.UUID;
@ -10,7 +9,7 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.Duration;
import mage.filter.common.FilterAttackingCreature;
import mage.filter.StaticFilters;
/**
*
@ -27,7 +26,7 @@ public final class HonoredCropCaptain extends CardImpl {
this.toughness = new MageInt(2);
// Whenever Honored Crop-Captain attacks, other attacking creatures get +1/+0 until end of turn.
this.addAbility(new AttacksTriggeredAbility(new BoostAllEffect(1, 0, Duration.EndOfTurn, new FilterAttackingCreature(), true), false));
this.addAbility(new AttacksTriggeredAbility(new BoostAllEffect(1, 0, Duration.EndOfTurn, StaticFilters.FILTER_ATTACKING_CREATURES, true), false));
}

View file

@ -8,7 +8,7 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.filter.common.FilterAttackingCreature;
import mage.filter.StaticFilters;
/**
*
@ -20,9 +20,9 @@ public final class Hydrolash extends CardImpl {
super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{2}{U}");
// Attacking creatures get -2/-0 until end of turn.
this.getSpellAbility().addEffect(new BoostAllEffect(-2, 0, Duration.EndOfTurn, new FilterAttackingCreature("Attacking creatures"), false));
this.getSpellAbility().addEffect(new BoostAllEffect(-2, 0, Duration.EndOfTurn, StaticFilters.FILTER_ATTACKING_CREATURES, false));
// Draw a card.
this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1));
this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1).concatBy("<br>"));
}
private Hydrolash(final Hydrolash card) {

View file

@ -15,10 +15,9 @@ import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.Zone;
import mage.filter.StaticFilters;
import static mage.filter.StaticFilters.FILTER_CONTROLLED_CREATURE_SHORT_TEXT;
import mage.game.Game;
import mage.game.permanent.Permanent;
import mage.target.common.TargetControlledCreaturePermanent;
import mage.target.common.TargetControlledPermanent;
/**
*
@ -30,10 +29,10 @@ public final class IchorExplosion extends CardImpl {
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{5}{B}{B}");
// As an additional cost to cast Ichor Explosion, sacrifice a creature.
this.getSpellAbility().addCost(new SacrificeTargetCost(new TargetControlledCreaturePermanent(FILTER_CONTROLLED_CREATURE_SHORT_TEXT)));
this.getSpellAbility().addCost(new SacrificeTargetCost(new TargetControlledPermanent(StaticFilters.FILTER_CONTROLLED_CREATURE_SHORT_TEXT)));
// All creatures get -X/-X until end of turn, where X is the sacrificed creature's power.
DynamicValue xValue = new IchorExplosionDynamicValue();
this.getSpellAbility().addEffect(new BoostAllEffect(xValue, xValue, Duration.EndOfTurn, StaticFilters.FILTER_PERMANENT_CREATURE, false, null, true));
this.getSpellAbility().addEffect(new BoostAllEffect(xValue, xValue, Duration.EndOfTurn, StaticFilters.FILTER_PERMANENT_ALL_CREATURES, false, null, true));
}

View file

@ -1,4 +1,3 @@
package mage.cards.i;
import java.util.UUID;
@ -6,8 +5,7 @@ import mage.abilities.effects.common.DestroyTargetEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.filter.common.FilterAttackingCreature;
import mage.target.common.TargetCreaturePermanent;
import mage.target.common.TargetAttackingCreature;
/**
*
@ -19,7 +17,7 @@ public final class ImmolatingGlare extends CardImpl {
super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{1}{W}");
// Destroy target attacking creature.
this.getSpellAbility().addTarget(new TargetCreaturePermanent(new FilterAttackingCreature()));
this.getSpellAbility().addTarget(new TargetAttackingCreature());
this.getSpellAbility().addEffect(new DestroyTargetEffect());
}

View file

@ -1,4 +1,3 @@
package mage.cards.i;
import java.util.UUID;
@ -7,7 +6,6 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.filter.common.FilterCreaturePermanent;
/**
*
@ -20,7 +18,7 @@ public final class Infest extends CardImpl {
// All creatures get -2/-2 until end of turn.
this.getSpellAbility().addEffect(new BoostAllEffect(-2, -2, Duration.EndOfTurn, new FilterCreaturePermanent("All creatures"), false));
this.getSpellAbility().addEffect(new BoostAllEffect(-2, -2, Duration.EndOfTurn));
}
private Infest(final Infest card) {

View file

@ -1,4 +1,3 @@
package mage.cards.j;
import java.util.UUID;
@ -12,11 +11,10 @@ import mage.abilities.keyword.FirstStrikeAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.Duration;
import mage.constants.SubType;
import mage.constants.SuperType;
import mage.constants.Zone;
import mage.filter.common.FilterAttackingCreature;
import mage.filter.StaticFilters;
/**
*
@ -38,8 +36,7 @@ public final class JazalGoldmane extends CardImpl {
// {3}{W}{W}: Attacking creatures you control get +X/+X until end of turn, where X is the number of attacking creatures.
DynamicValue xValue = new AttackingCreatureCount("the number of attacking creatures");
this.addAbility(new SimpleActivatedAbility(
Zone.BATTLEFIELD,
new BoostControlledEffect(xValue, xValue, Duration.EndOfTurn, new FilterAttackingCreature("Attacking creatures"), false, true),
new BoostControlledEffect(xValue, xValue, Duration.EndOfTurn, StaticFilters.FILTER_ATTACKING_CREATURES, false, true),
new ManaCostsImpl("{3}{W}{W}")));
}

View file

@ -1,9 +1,9 @@
package mage.cards.k;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.common.AttacksTriggeredAbility;
import mage.abilities.dynamicvalue.DynamicValue;
import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount;
import mage.abilities.effects.common.continuous.BoostSourceEffect;
import mage.abilities.keyword.TrampleAbility;
@ -28,6 +28,8 @@ public final class KavuMauler extends CardImpl {
filter.add(AnotherPredicate.instance);
}
private static final DynamicValue xValue = new PermanentsOnBattlefieldCount(filter);
public KavuMauler(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{4}{G}{G}");
this.subtype.add(SubType.KAVU);
@ -37,8 +39,7 @@ public final class KavuMauler extends CardImpl {
// Trample
this.addAbility(TrampleAbility.getInstance());
// Whenever Kavu Mauler attacks, it gets +1/+1 until end of turn for each other attacking Kavu.
PermanentsOnBattlefieldCount value = new PermanentsOnBattlefieldCount(filter);
this.addAbility(new AttacksTriggeredAbility(new BoostSourceEffect(value, value, Duration.EndOfTurn, true), false));
this.addAbility(new AttacksTriggeredAbility(new BoostSourceEffect(xValue, xValue, Duration.EndOfTurn, true, "it"), false));
}
private KavuMauler(final KavuMauler card) {

View file

@ -1,4 +1,3 @@
package mage.cards.k;
import java.util.UUID;
@ -6,8 +5,7 @@ import mage.abilities.effects.common.DestroyTargetEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.filter.common.FilterAttackingCreature;
import mage.target.common.TargetCreaturePermanent;
import mage.target.common.TargetAttackingCreature;
/**
*
@ -20,7 +18,7 @@ public final class KillShot extends CardImpl {
// Destroy target attacking creature.
this.getSpellAbility().addTarget(new TargetCreaturePermanent(new FilterAttackingCreature()));
this.getSpellAbility().addTarget(new TargetAttackingCreature());
this.getSpellAbility().addEffect(new DestroyTargetEffect());
}

View file

@ -1,4 +1,3 @@
package mage.cards.k;
import java.util.UUID;
@ -12,7 +11,7 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Outcome;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.StaticFilters;
import mage.game.Game;
import mage.game.permanent.token.SpiritWhiteToken;
@ -25,15 +24,13 @@ public final class KirtarsWrath extends CardImpl {
public KirtarsWrath(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{4}{W}{W}");
// Destroy all creatures. They can't be regenerated.
// Threshold - If seven or more cards are in your graveyard, instead destroy all creatures, then create two 1/1 white Spirit creature tokens with flying. Creatures destroyed this way can't be regenerated.
this.getSpellAbility().addEffect(new ConditionalOneShotEffect(
new KirtarsWrathEffect(),
new DestroyAllEffect(new FilterCreaturePermanent("all creatures"), true),
new DestroyAllEffect(StaticFilters.FILTER_PERMANENT_CREATURES, true),
new CardsInControllerGraveyardCondition(7),
"Destroy all creatures. They can't be regenerated.<br/><br/><i>Threshold</i> &mdash; If seven or more cards are in your graveyard, instead destroy all creatures, then create two 1/1 white Spirit creature tokens with flying. Creatures destroyed this way can't be regenerated"));
}
private KirtarsWrath(final KirtarsWrath card) {
@ -64,7 +61,7 @@ class KirtarsWrathEffect extends OneShotEffect {
@Override
public boolean apply(Game game, Ability source) {
new DestroyAllEffect(new FilterCreaturePermanent("all creatures"), true).apply(game, source);
new DestroyAllEffect(StaticFilters.FILTER_PERMANENT_CREATURES, true).apply(game, source);
return new CreateTokenEffect(new SpiritWhiteToken(), 2).apply(game, source);
}
}

View file

@ -1,4 +1,3 @@
package mage.cards.k;
import java.util.UUID;
@ -16,8 +15,7 @@ import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.PhaseStep;
import mage.constants.Zone;
import mage.filter.common.FilterAttackingCreature;
import mage.target.TargetPermanent;
import mage.target.common.TargetAttackingCreature;
import mage.watchers.common.PlayerAttackedStepWatcher;
/**
@ -38,7 +36,7 @@ public final class KongmingsContraptions extends CardImpl {
new CompoundCondition("during the declare attackers step and only if you've been attacked this step",
new IsStepCondition(PhaseStep.DECLARE_ATTACKERS, false), AttackedThisStepCondition.instance)
);
ability.addTarget(new TargetPermanent(new FilterAttackingCreature()));
ability.addTarget(new TargetAttackingCreature());
this.addAbility(ability, new PlayerAttackedStepWatcher());
}
@ -50,5 +48,4 @@ public final class KongmingsContraptions extends CardImpl {
public KongmingsContraptions copy() {
return new KongmingsContraptions(this);
}
}

View file

@ -1,4 +1,3 @@
package mage.cards.l;
import mage.abilities.Ability;
@ -11,8 +10,7 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.SubType;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.permanent.AttackingPredicate;
import mage.filter.StaticFilters;
import mage.game.Game;
import java.util.UUID;
@ -23,12 +21,6 @@ import java.util.UUID;
*/
public final class LethargyTrap extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("attacking creatures");
static {
filter.add(AttackingPredicate.instance);
}
public LethargyTrap(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{3}{U}");
this.subtype.add(SubType.TRAP);
@ -37,8 +29,7 @@ public final class LethargyTrap extends CardImpl {
this.addAbility(new AlternativeCostSourceAbility(new ManaCostsImpl("{U}"), LethargyTrapCondition.instance));
// Attacking creatures get -3/-0 until end of turn.
this.getSpellAbility().addEffect(new BoostAllEffect(-3, 0, Duration.EndOfTurn, filter, false));
this.getSpellAbility().addEffect(new BoostAllEffect(-3, 0, Duration.EndOfTurn, StaticFilters.FILTER_ATTACKING_CREATURES, false));
}
private LethargyTrap(final LethargyTrap card) {

View file

@ -1,5 +1,3 @@
package mage.cards.m;
import mage.MageInt;
@ -8,6 +6,7 @@ import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.costs.common.SacrificeTargetCost;
import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.dynamicvalue.DynamicValue;
import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount;
import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.effects.common.continuous.GainAbilityAllEffect;
@ -15,8 +14,8 @@ import mage.abilities.keyword.FearAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.*;
import mage.filter.common.FilterControlledCreaturePermanent;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.FilterPermanent;
import mage.filter.common.FilterControlledPermanent;
import mage.game.permanent.token.RatToken;
import mage.target.common.TargetControlledPermanent;
@ -28,15 +27,10 @@ import java.util.UUID;
*/
public final class MarrowGnawer extends CardImpl {
private static final FilterCreaturePermanent filterFear = new FilterCreaturePermanent("Rat creatures");
private static final FilterControlledCreaturePermanent filterSacrifice = new FilterControlledCreaturePermanent("a Rat");
private static final FilterControlledCreaturePermanent filter3 = new FilterControlledCreaturePermanent("the number of Rats you control");
static {
filterFear.add(SubType.RAT.getPredicate());
filterSacrifice.add(SubType.RAT.getPredicate());
filter3.add(SubType.RAT.getPredicate());
}
private static final FilterPermanent filterFear = new FilterPermanent(SubType.RAT, "all Rats");
private static final FilterControlledPermanent filterSacrifice = new FilterControlledPermanent(SubType.RAT, "a Rat");
private static final FilterControlledPermanent filterX = new FilterControlledPermanent(SubType.RAT, "Rats you control");
private static final DynamicValue xValue = new PermanentsOnBattlefieldCount(filterX, null);
public MarrowGnawer (UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{B}{B}");
@ -47,14 +41,12 @@ public final class MarrowGnawer extends CardImpl {
this.power = new MageInt(2);
this.toughness = new MageInt(3);
// Rat creatures have fear. (They can't be blocked except by artifact creatures and/or black creatures.)
// All Rats have fear. (They can't be blocked except by artifact creatures and/or black creatures.)
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAllEffect(FearAbility.getInstance(), Duration.WhileOnBattlefield, filterFear)));
// {T}, Sacrifice a Rat: create X 1/1 black Rat creature tokens, where X is the number of Rats you control.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD,
new CreateTokenEffect(new RatToken(), new PermanentsOnBattlefieldCount(filter3, null)),
new TapSourceCost());
ability.addCost( new SacrificeTargetCost(new TargetControlledPermanent(filterSacrifice)));
Ability ability = new SimpleActivatedAbility(new CreateTokenEffect(new RatToken(), xValue), new TapSourceCost());
ability.addCost(new SacrificeTargetCost(new TargetControlledPermanent(filterSacrifice)));
this.addAbility(ability);
}
@ -66,5 +58,4 @@ public final class MarrowGnawer extends CardImpl {
public MarrowGnawer copy() {
return new MarrowGnawer(this);
}
}

View file

@ -5,6 +5,7 @@ import java.util.UUID;
import mage.MageInt;
import mage.abilities.common.AttacksTriggeredAbility;
import mage.abilities.common.BlocksSourceTriggeredAbility;
import mage.abilities.dynamicvalue.DynamicValue;
import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount;
import mage.abilities.effects.common.continuous.BoostAllEffect;
import mage.cards.CardImpl;
@ -13,6 +14,7 @@ import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.Duration;
import mage.constants.SuperType;
import mage.filter.StaticFilters;
import mage.filter.common.FilterAttackingCreature;
import mage.filter.common.FilterBlockingCreature;
import mage.filter.predicate.mageobject.AnotherPredicate;
@ -30,7 +32,10 @@ public final class MartonStromgald extends CardImpl {
attackingFilter.add(AnotherPredicate.instance);
blockingFilter.add(AnotherPredicate.instance);
}
private static final DynamicValue attackingValue = new PermanentsOnBattlefieldCount(attackingFilter);
private static final DynamicValue blockingValue = new PermanentsOnBattlefieldCount(blockingFilter);
public MartonStromgald(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{R}{R}");
addSuperType(SuperType.LEGENDARY);
@ -40,13 +45,10 @@ public final class MartonStromgald extends CardImpl {
this.toughness = new MageInt(1);
// Whenever Marton Stromgald attacks, other attacking creatures get +1/+1 until end of turn for each attacking creature other than Marton Stromgald.
PermanentsOnBattlefieldCount attackingValue = new PermanentsOnBattlefieldCount(attackingFilter);
this.addAbility(new AttacksTriggeredAbility(new BoostAllEffect(attackingValue, attackingValue, Duration.EndOfTurn, new FilterAttackingCreature(), true, null, true), false));
this.addAbility(new AttacksTriggeredAbility(new BoostAllEffect(attackingValue, attackingValue, Duration.EndOfTurn, StaticFilters.FILTER_ATTACKING_CREATURES, true, null, true), false));
// Whenever Marton Stromgald blocks, other blocking creatures get +1/+1 until end of turn for each blocking creature other than Marton Stromgald.
PermanentsOnBattlefieldCount blockingValue = new PermanentsOnBattlefieldCount(blockingFilter);
this.addAbility(new BlocksSourceTriggeredAbility(new BoostAllEffect(blockingValue, blockingValue, Duration.EndOfTurn, new FilterBlockingCreature(), true, null, true), false));
this.addAbility(new BlocksSourceTriggeredAbility(new BoostAllEffect(blockingValue, blockingValue, Duration.EndOfTurn, StaticFilters.FILTER_BLOCKING_CREATURES, true, null, true), false));
}
private MartonStromgald(final MartonStromgald card) {

View file

@ -1,4 +1,3 @@
package mage.cards.m;
import java.util.UUID;
@ -8,9 +7,7 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.Zone;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.permanent.AttackingPredicate;
import mage.filter.StaticFilters;
/**
*
@ -18,17 +15,11 @@ import mage.filter.predicate.permanent.AttackingPredicate;
*/
public final class Mightstone extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("attacking creatures");
static {
filter.add(AttackingPredicate.instance);
}
public Mightstone(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT},"{4}");
// Attacking creatures get +1/+0.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostAllEffect( 1, 0, Duration.WhileOnBattlefield, filter, false)));
this.addAbility(new SimpleStaticAbility(new BoostAllEffect(1, 0, Duration.WhileOnBattlefield, StaticFilters.FILTER_ATTACKING_CREATURES, false)));
}
private Mightstone(final Mightstone card) {

View file

@ -1,4 +1,3 @@
package mage.cards.m;
import java.util.UUID;
@ -7,7 +6,7 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.filter.common.FilterAttackingCreature;
import mage.filter.StaticFilters;
/**
*
@ -18,10 +17,8 @@ public final class Morale extends CardImpl {
public Morale(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{1}{W}{W}");
// Attacking creatures get +1/+1 until end of turn.
this.getSpellAbility().addEffect(new BoostAllEffect(1, 1, Duration.EndOfTurn, new FilterAttackingCreature("Attacking creatures"), false));
this.getSpellAbility().addEffect(new BoostAllEffect(1, 1, Duration.EndOfTurn, StaticFilters.FILTER_ATTACKING_CREATURES, false));
}
private Morale(final Morale card) {

View file

@ -1,4 +1,3 @@
package mage.cards.m;
import java.util.UUID;
@ -14,7 +13,7 @@ import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.SuperType;
import mage.constants.Zone;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.StaticFilters;
/**
*
@ -27,11 +26,11 @@ public final class MysticDecree extends CardImpl {
addSuperType(SuperType.WORLD);
// All creatures lose flying and islandwalk.
Effect effect = new LoseAbilityAllEffect(FlyingAbility.getInstance(), Duration.WhileOnBattlefield, new FilterCreaturePermanent("All creatures"));
Effect effect = new LoseAbilityAllEffect(FlyingAbility.getInstance(), Duration.WhileOnBattlefield, StaticFilters.FILTER_PERMANENT_ALL_CREATURES);
effect.setText("All creatures lose flying");
Effect effect2 = new LoseAbilityAllEffect(new IslandwalkAbility(), Duration.WhileOnBattlefield, new FilterCreaturePermanent("all creatures"));
Effect effect2 = new LoseAbilityAllEffect(new IslandwalkAbility(), Duration.WhileOnBattlefield, StaticFilters.FILTER_PERMANENT_ALL_CREATURES);
effect2.setText("and islandwalk");
Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, effect);
Ability ability = new SimpleStaticAbility(effect);
ability.addEffect(effect2);
this.addAbility(ability);
}

View file

@ -24,7 +24,7 @@ import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.SubType;
import mage.constants.Zone;
import mage.filter.FilterCard;
import mage.filter.StaticFilters;
import mage.game.Game;
import mage.players.Player;
import mage.target.Target;
@ -63,7 +63,7 @@ public final class NecropolisFiend extends CardImpl {
ability.addCost(new TapSourceCost());
ability.addTarget(new TargetCreaturePermanent());
ability.addCost(new ExileFromGraveCost(new TargetCardInYourGraveyard(
1, 1, new FilterCard("cards from your graveyard")
1, 1, StaticFilters.FILTER_CARDS_FROM_YOUR_GRAVEYARD
), "Exile X cards from your graveyard"));
ability.setTargetAdjuster(NecropolisFiendTargetAdjuster.instance);
ability.setCostAdjuster(NecropolisFiendCostAdjuster.instance);
@ -117,4 +117,4 @@ enum NecropolisFiendTargetAdjuster implements TargetAdjuster {
}
}
}
}
}

View file

@ -1,5 +1,3 @@
package mage.cards.n;
import java.util.UUID;
@ -10,21 +8,18 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.SuperType;
import mage.constants.Zone;
import mage.filter.common.FilterCreaturePermanent;
/**
*
* @author Loki
*/
public final class NightOfSoulsBetrayal extends CardImpl {
private static FilterCreaturePermanent filter = new FilterCreaturePermanent("All creatures");
public NightOfSoulsBetrayal (UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{2}{B}{B}");
addSuperType(SuperType.LEGENDARY);
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostAllEffect(-1, -1, Duration.WhileOnBattlefield, filter, false)));
this.addAbility(new SimpleStaticAbility(new BoostAllEffect(-1, -1, Duration.WhileOnBattlefield)));
}
public NightOfSoulsBetrayal (final NightOfSoulsBetrayal card) {

View file

@ -1,4 +1,3 @@
package mage.cards.n;
import java.util.UUID;
@ -9,10 +8,9 @@ import mage.abilities.keyword.FlyingAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.Duration;
import mage.constants.Zone;
import mage.filter.common.FilterAttackingCreature;
import mage.constants.SubType;
import mage.filter.StaticFilters;
/**
*
@ -30,9 +28,9 @@ public final class NobilisOfWar extends CardImpl {
// Flying
this.addAbility(FlyingAbility.getInstance());
// Attacking creatures you control get +2/+0.
BoostControlledEffect boostEffect = new BoostControlledEffect(2, 0, Duration.WhileOnBattlefield, new FilterAttackingCreature("Attacking creatures"), false);
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, boostEffect));
this.addAbility(new SimpleStaticAbility(new BoostControlledEffect(2, 0, Duration.WhileOnBattlefield, StaticFilters.FILTER_ATTACKING_CREATURES)));
}
private NobilisOfWar(final NobilisOfWar card) {

View file

@ -1,4 +1,3 @@
package mage.cards.p;
import java.util.UUID;
@ -11,20 +10,13 @@ import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.Duration;
import mage.constants.SuperType;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.permanent.AttackingPredicate;
import mage.filter.StaticFilters;
/**
*
* @author cbt33
*/
public final class PiannaNomadCaptain extends CardImpl {
static final FilterCreaturePermanent filter = new FilterCreaturePermanent("attacking creatures");
static {
filter.add(AttackingPredicate.instance);
}
public PiannaNomadCaptain(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{W}{W}");
@ -36,7 +28,7 @@ public final class PiannaNomadCaptain extends CardImpl {
this.toughness = new MageInt(2);
// Whenever Pianna, Nomad Captain attacks, attacking creatures get +1/+1 until end of turn.
this.addAbility(new AttacksTriggeredAbility(new BoostAllEffect(1, 1, Duration.EndOfTurn, filter, false), false));
this.addAbility(new AttacksTriggeredAbility(new BoostAllEffect(1, 1, Duration.EndOfTurn, StaticFilters.FILTER_ATTACKING_CREATURES, false), false));
}
private PiannaNomadCaptain(final PiannaNomadCaptain card) {

View file

@ -1,10 +1,10 @@
package mage.cards.p;
import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.common.SacrificeSourceCost;
import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.costs.mana.GenericManaCost;
import mage.abilities.effects.common.DestroyTargetEffect;
import mage.abilities.keyword.FlyingAbility;
@ -34,6 +34,7 @@ public final class PitTrap extends CardImpl {
// {2}, {tap}, Sacrifice Pit Trap: Destroy target attacking creature without flying. It can't be regenerated.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DestroyTargetEffect(true), new GenericManaCost(2));
ability.addCost(new TapSourceCost());
ability.addCost(new SacrificeSourceCost());
ability.addTarget(new TargetAttackingCreature(1, 1, filter, false));
this.addAbility(ability);

View file

@ -13,7 +13,7 @@ import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.Duration;
import mage.constants.Zone;
import mage.filter.FilterCard;
import mage.filter.StaticFilters;
import mage.target.common.TargetCardInYourGraveyard;
/**
@ -33,7 +33,7 @@ public final class Psychatog extends CardImpl {
this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostSourceEffect(1,1,Duration.EndOfTurn), new DiscardCardCost()));
// Exile two cards from your graveyard: Psychatog gets +1/+1 until end of turn.
this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostSourceEffect(1,1,Duration.EndOfTurn), new ExileFromGraveCost(new TargetCardInYourGraveyard(2, new FilterCard("cards from your graveyard")))));
this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostSourceEffect(1,1,Duration.EndOfTurn), new ExileFromGraveCost(new TargetCardInYourGraveyard(2, StaticFilters.FILTER_CARDS_FROM_YOUR_GRAVEYARD))));
}

View file

@ -1,15 +1,14 @@
package mage.cards.p;
import java.util.UUID;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.costs.mana.GenericManaCost;
import mage.abilities.effects.common.continuous.BoostAllEffect;
import mage.abilities.keyword.CyclingAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.filter.common.FilterAttackingCreature;
import mage.filter.StaticFilters;
/**
*
@ -21,10 +20,10 @@ public final class PursueGlory extends CardImpl {
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{3}{R}");
// Attacking creatures get +2/+0 until end of turn.
getSpellAbility().addEffect(new BoostAllEffect(2, 0, Duration.EndOfTurn, new FilterAttackingCreature("Attacking creatures"), false));
getSpellAbility().addEffect(new BoostAllEffect(2, 0, Duration.EndOfTurn, StaticFilters.FILTER_ATTACKING_CREATURES, false));
// Cycling {2}
this.addAbility(new CyclingAbility(new ManaCostsImpl("{2}")));
this.addAbility(new CyclingAbility(new GenericManaCost(2)));
}
private PursueGlory(final PursueGlory card) {

View file

@ -1,4 +1,3 @@
package mage.cards.r;
import java.util.UUID;
@ -6,7 +5,7 @@ import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.costs.mana.ColoredManaCost;
import mage.abilities.dynamicvalue.DynamicValue;
import mage.abilities.dynamicvalue.common.SourcePermanentPowerCount;
import mage.abilities.dynamicvalue.common.StaticValue;
@ -15,10 +14,10 @@ import mage.abilities.keyword.BloodthirstAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.ColoredManaSymbol;
import mage.constants.Duration;
import mage.constants.Zone;
import mage.filter.common.FilterAttackingCreature;
import mage.constants.SubType;
import mage.filter.StaticFilters;
/**
*
@ -26,6 +25,8 @@ import mage.filter.common.FilterAttackingCreature;
*/
public final class RabbleRouser extends CardImpl {
private static final DynamicValue xValue = new SourcePermanentPowerCount(false);
public RabbleRouser(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{R}");
this.subtype.add(SubType.GOBLIN);
@ -38,11 +39,10 @@ public final class RabbleRouser extends CardImpl {
this.addAbility(new BloodthirstAbility(1));
//{R}, {T}: Attacking creatures get +X/+0 until end of turn, where X is Rabble-Rouser's power.
DynamicValue amount = new SourcePermanentPowerCount();
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD,
new BoostAllEffect(amount, StaticValue.get(0), Duration.EndOfTurn, new FilterAttackingCreature(), false,
"Attacking creatures get +X/+0 until end of turn, where X is {this}'s power", true),
new ManaCostsImpl("{R}"));
Ability ability = new SimpleActivatedAbility(
new BoostAllEffect(xValue, StaticValue.get(0), Duration.EndOfTurn, StaticFilters.FILTER_ATTACKING_CREATURES, false, null, true),
new ColoredManaCost(ColoredManaSymbol.R));
ability.addCost(new TapSourceCost());
this.addAbility(ability);
}

View file

@ -42,7 +42,7 @@ public final class RadiantDestiny extends CardImpl {
this.addAbility(new AsEntersBattlefieldAbility(new ChooseCreatureTypeEffect(Outcome.BoostCreature)));
// Creatures you control of the chosen type get +1/+1. As long as you have the city's blessing, they also have vigilance.
Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostAllOfChosenSubtypeEffect(1, 1, Duration.WhileOnBattlefield, filter, true));
Ability ability = new SimpleStaticAbility(new BoostAllOfChosenSubtypeEffect(1, 1, Duration.WhileOnBattlefield, filter, false));
ContinuousEffect effect = new ConditionalContinuousEffect(
new GainAbilityAllOfChosenSubtypeEffect(VigilanceAbility.getInstance(), Duration.WhileOnBattlefield, FILTER_PERMANENT_CREATURES_CONTROLLED),
CitysBlessingCondition.instance,

View file

@ -1,4 +1,3 @@
package mage.cards.r;
import java.util.UUID;
@ -7,7 +6,7 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.filter.common.FilterBlockingCreature;
import mage.filter.StaticFilters;
/**
*
@ -19,8 +18,7 @@ public final class Rally extends CardImpl {
super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{W}{W}");
// Blocking creatures get +1/+1 until end of turn.
this.getSpellAbility().addEffect(new BoostAllEffect(1, 1, Duration.EndOfTurn,
new FilterBlockingCreature("blocking creatures"), false));
this.getSpellAbility().addEffect(new BoostAllEffect(1, 1, Duration.EndOfTurn, StaticFilters.FILTER_BLOCKING_CREATURES, false));
}
private Rally(final Rally card) {

View file

@ -1,5 +1,3 @@
package mage.cards.r;
import java.util.UUID;
@ -11,7 +9,7 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.filter.common.FilterAttackingCreature;
import mage.filter.StaticFilters;
/**
*
@ -23,10 +21,10 @@ public final class RallyTheForces extends CardImpl {
super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{2}{R}");
// Attacking creatures get +1/+0 and gain first strike until end of turn.
Effect effect = new BoostAllEffect(1, 0, Duration.EndOfTurn, new FilterAttackingCreature("Attacking creatures"), false);
Effect effect = new BoostAllEffect(1, 0, Duration.EndOfTurn, StaticFilters.FILTER_ATTACKING_CREATURES, false);
effect.setText("Attacking creatures get +1/+0");
this.getSpellAbility().addEffect(effect);
effect = new GainAbilityAllEffect(FirstStrikeAbility.getInstance(), Duration.EndOfTurn, new FilterAttackingCreature("Attacking creatures"), false);
effect = new GainAbilityAllEffect(FirstStrikeAbility.getInstance(), Duration.EndOfTurn, StaticFilters.FILTER_ATTACKING_CREATURES, false);
effect.setText("and gain first strike until end of turn");
this.getSpellAbility().addEffect(effect);
}

View file

@ -1,4 +1,3 @@
package mage.cards.r;
import java.util.UUID;
@ -6,8 +5,7 @@ import mage.abilities.effects.common.DestroyTargetEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.filter.common.FilterAttackingCreature;
import mage.target.common.TargetCreaturePermanent;
import mage.target.common.TargetAttackingCreature;
/**
*
@ -20,7 +18,7 @@ public final class Rebuke extends CardImpl {
// Destroy target attacking creature.
this.getSpellAbility().addTarget(new TargetCreaturePermanent(new FilterAttackingCreature()));
this.getSpellAbility().addTarget(new TargetAttackingCreature());
this.getSpellAbility().addEffect(new DestroyTargetEffect());
}

View file

@ -1,4 +1,3 @@
package mage.cards.r;
import java.util.UUID;
@ -12,6 +11,7 @@ import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.Duration;
import mage.filter.common.FilterAttackingCreature;
import mage.filter.common.FilterCreaturePermanent;
/**
*
@ -19,6 +19,8 @@ import mage.filter.common.FilterAttackingCreature;
*/
public final class RenegadeWarlord extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterAttackingCreature("each other attacking creature");
public RenegadeWarlord(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{4}{R}");
this.subtype.add(SubType.HUMAN);
@ -27,7 +29,7 @@ public final class RenegadeWarlord extends CardImpl {
this.power = new MageInt(3);
this.toughness = new MageInt(3);
this.addAbility(FirstStrikeAbility.getInstance());
this.addAbility(new AttacksTriggeredAbility(new BoostAllEffect(1, 0, Duration.EndOfTurn, new FilterAttackingCreature(), true), false));
this.addAbility(new AttacksTriggeredAbility(new BoostAllEffect(1, 0, Duration.EndOfTurn, filter, true), false));
}
private RenegadeWarlord(final RenegadeWarlord card) {

View file

@ -1,4 +1,3 @@
package mage.cards.r;
import java.util.UUID;
@ -7,6 +6,7 @@ import mage.abilities.Ability;
import mage.abilities.common.AttacksTriggeredAbility;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.dynamicvalue.DynamicValue;
import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount;
import mage.abilities.dynamicvalue.common.StaticValue;
import mage.abilities.effects.RequirementEffect;
@ -15,9 +15,9 @@ import mage.abilities.keyword.TrampleAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.*;
import mage.filter.common.FilterAttackingCreature;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.mageobject.AnotherPredicate;
import mage.filter.predicate.permanent.AttackingPredicate;
import mage.game.Game;
import mage.game.permanent.Permanent;
import mage.target.common.TargetCreaturePermanent;
@ -29,13 +29,15 @@ import mage.watchers.common.BlockedAttackerWatcher;
*/
public final class RimehornAurochs extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent(SubType.AUROCHS, "other attacking Aurochs");
private static final FilterAttackingCreature filter = new FilterAttackingCreature("other attacking Aurochs");
static {
filter.add(AttackingPredicate.instance);
filter.add(SubType.AUROCHS.getPredicate());
filter.add(AnotherPredicate.instance);
}
private static final DynamicValue xValue = new PermanentsOnBattlefieldCount(filter);
public RimehornAurochs(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{4}{G}");
this.addSuperType(SuperType.SNOW);
@ -47,10 +49,10 @@ public final class RimehornAurochs extends CardImpl {
this.addAbility(TrampleAbility.getInstance());
// Whenever Rimehorn Aurochs attacks, it gets +1/+0 until end of turn for each other attacking Aurochs.
this.addAbility(new AttacksTriggeredAbility(new BoostSourceEffect(new PermanentsOnBattlefieldCount(filter), StaticValue.get(0), Duration.EndOfTurn, true), false));
this.addAbility(new AttacksTriggeredAbility(new BoostSourceEffect(xValue, StaticValue.get(0), Duration.EndOfTurn, true, "it"), false));
// {2}{S}: Target creature blocks target creature this turn if able.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new RimehornAurochsEffect(), new ManaCostsImpl("{2}{S}"));
Ability ability = new SimpleActivatedAbility(new RimehornAurochsEffect(), new ManaCostsImpl("{2}{S}"));
ability.addTarget(new TargetCreaturePermanent(new FilterCreaturePermanent("creature that must block")));
ability.addTarget(new TargetCreaturePermanent(new FilterCreaturePermanent("creature that is to be blocked")));
this.addAbility(ability, new BlockedAttackerWatcher());
@ -123,5 +125,4 @@ class RimehornAurochsEffect extends RequirementEffect {
public RimehornAurochsEffect copy() {
return new RimehornAurochsEffect(this);
}
}

View file

@ -18,8 +18,7 @@ import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.SubType;
import mage.constants.SuperType;
import mage.filter.FilterPermanent;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.StaticFilters;
import mage.target.common.TargetCreaturePermanent;
import java.util.UUID;
@ -29,8 +28,6 @@ import java.util.UUID;
*/
public final class RowanFearlessSparkmage extends CardImpl {
private static final FilterPermanent filter = new FilterCreaturePermanent("all creatures");
public RowanFearlessSparkmage(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.PLANESWALKER}, "{3}{R}{R}");
@ -57,11 +54,11 @@ public final class RowanFearlessSparkmage extends CardImpl {
this.addAbility(ability);
// 9: Gain control of all creatures until end of turn. Untap them. They gain haste until end of turn.
ability = new LoyaltyAbility(new GainControlAllEffect(Duration.EndOfTurn, filter)
ability = new LoyaltyAbility(new GainControlAllEffect(Duration.EndOfTurn, StaticFilters.FILTER_PERMANENT_ALL_CREATURES)
.setText("gain control of all creatures until end of turn."), -9);
ability.addEffect(new UntapAllEffect(filter).setText("Untap them."));
ability.addEffect(new UntapAllEffect(StaticFilters.FILTER_PERMANENT_ALL_CREATURES).setText("Untap them."));
ability.addEffect(new GainAbilityAllEffect(
HasteAbility.getInstance(), Duration.EndOfTurn, filter
HasteAbility.getInstance(), Duration.EndOfTurn, StaticFilters.FILTER_PERMANENT_ALL_CREATURES
).setText("They gain haste until end of turn"));
this.addAbility(ability);
}

View file

@ -11,11 +11,9 @@ import mage.abilities.effects.common.DestroyTargetEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Zone;
import mage.filter.common.FilterAttackingCreature;
import mage.filter.common.FilterControlledLandPermanent;
import mage.target.common.TargetControlledPermanent;
import mage.target.common.TargetCreaturePermanent;
import mage.target.common.TargetAttackingCreature;
/**
*
@ -27,10 +25,10 @@ public final class SandstoneDeadfall extends CardImpl {
super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT},"{3}");
// {tap}, Sacrifice two lands and Sandstone Deadfall: Destroy target attacking creature.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DestroyTargetEffect(), new TapSourceCost());
ability.addCost(new SacrificeTargetCost(new TargetControlledPermanent(2, 2, new FilterControlledLandPermanent("two lands"), true)));
Ability ability = new SimpleActivatedAbility(new DestroyTargetEffect(), new TapSourceCost());
ability.addCost(new SacrificeTargetCost(new TargetControlledPermanent(2, 2, new FilterControlledLandPermanent("lands"), true)));
ability.addCost(new SacrificeSourceCost());
ability.addTarget(new TargetCreaturePermanent(new FilterAttackingCreature()));
ability.addTarget(new TargetAttackingCreature());
this.addAbility(ability);
}

View file

@ -4,6 +4,7 @@ package mage.cards.s;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.common.AttacksTriggeredAbility;
import mage.abilities.dynamicvalue.DynamicValue;
import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount;
import mage.abilities.dynamicvalue.common.StaticValue;
import mage.abilities.effects.common.continuous.BoostSourceEffect;
@ -29,6 +30,7 @@ public final class ShaleskinBruiser extends CardImpl {
filter.add(AnotherPredicate.instance);
}
private static final DynamicValue xValue = new PermanentsOnBattlefieldCount(filter, 3);
public ShaleskinBruiser(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{6}{R}");
@ -39,8 +41,7 @@ public final class ShaleskinBruiser extends CardImpl {
// Trample
this.addAbility(TrampleAbility.getInstance());
// Whenever Shaleskin Bruiser attacks, it gets +3/+0 until end of turn for each other attacking Beast.
PermanentsOnBattlefieldCount value = new PermanentsOnBattlefieldCount(filter, 3);
this.addAbility(new AttacksTriggeredAbility(new BoostSourceEffect(value, StaticValue.get(0), Duration.EndOfTurn, true), false));
this.addAbility(new AttacksTriggeredAbility(new BoostSourceEffect(xValue, StaticValue.get(0), Duration.EndOfTurn, true, "it"), false));
}
private ShaleskinBruiser(final ShaleskinBruiser card) {

View file

@ -1,4 +1,3 @@
package mage.cards.s;
import java.util.UUID;
@ -15,11 +14,8 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.Duration;
import mage.constants.TargetController;
import mage.constants.Zone;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.permanent.AttackingPredicate;
import mage.target.Target;
import mage.filter.StaticFilters;
import mage.target.common.TargetCreaturePermanent;
/**
@ -28,13 +24,6 @@ import mage.target.common.TargetCreaturePermanent;
*/
public final class ShipwreckSinger extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent();
private static final FilterCreaturePermanent filterAttacking = new FilterCreaturePermanent("Attacking creatures");
static {
filter.add(TargetController.OPPONENT.getControllerPredicate());
filterAttacking.add(AttackingPredicate.instance);
}
public ShipwreckSinger(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{U}{B}");
this.subtype.add(SubType.SIREN);
@ -45,15 +34,13 @@ public final class ShipwreckSinger extends CardImpl {
// Flying
this.addAbility(FlyingAbility.getInstance());
// {1}{U}: Target creature an opponent controls attacks this turn if able.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new AttacksIfAbleTargetEffect(Duration.EndOfTurn), new ManaCostsImpl("{1}{U}"));
Target target = new TargetCreaturePermanent(filter);
ability.addTarget(target);
Ability ability = new SimpleActivatedAbility(new AttacksIfAbleTargetEffect(Duration.EndOfTurn), new ManaCostsImpl("{1}{U}"));
ability.addTarget(new TargetCreaturePermanent(StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURE));
this.addAbility(ability);
// {1}{B}, {T}: Attacking creatures get -1/-1 until end of turn.
ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostAllEffect(-1,-1, Duration.EndOfTurn, filterAttacking, false), new ManaCostsImpl("{1}{B}"));
ability = new SimpleActivatedAbility(new BoostAllEffect(-1,-1, Duration.EndOfTurn, StaticFilters.FILTER_ATTACKING_CREATURES, false), new ManaCostsImpl("{1}{B}"));
ability.addCost(new TapSourceCost());
this.addAbility(ability);
}
private ShipwreckSinger(final ShipwreckSinger card) {

View file

@ -1,4 +1,3 @@
package mage.cards.s;
import java.util.UUID;
@ -7,7 +6,6 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.filter.common.FilterCreaturePermanent;
/**
*
@ -19,7 +17,7 @@ public final class Shrivel extends CardImpl {
super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{1}{B}");
this.getSpellAbility().addEffect(new BoostAllEffect(-1, -1, Duration.EndOfTurn, new FilterCreaturePermanent("All creatures"), false));
this.getSpellAbility().addEffect(new BoostAllEffect(-1, -1, Duration.EndOfTurn));
}
private Shrivel(final Shrivel card) {

View file

@ -12,7 +12,7 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Zone;
import mage.filter.FilterCard;
import mage.filter.StaticFilters;
import mage.game.Game;
import mage.target.common.TargetCardInYourGraveyard;
@ -58,13 +58,12 @@ public final class SkeletalScrying extends CardImpl {
enum SkeletalScryingAdjuster implements CostAdjuster {
instance;
private static final FilterCard filter = new FilterCard("cards from your graveyard");
@Override
public void adjustCosts(Ability ability, Game game) {
int xValue = ability.getManaCostsToPay().getX();
if (xValue > 0) {
ability.addCost(new ExileFromGraveCost(new TargetCardInYourGraveyard(xValue, xValue, filter)));
ability.addCost(new ExileFromGraveCost(new TargetCardInYourGraveyard(xValue, xValue, StaticFilters.FILTER_CARDS_FROM_YOUR_GRAVEYARD)));
}
}
}

View file

@ -1,16 +1,16 @@
package mage.cards.s;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.common.AttacksTriggeredAbility;
import mage.abilities.effects.common.continuous.GainAbilityControlledEffect;
import mage.abilities.effects.common.continuous.GainAbilityAllEffect;
import mage.abilities.keyword.FearAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.Duration;
import mage.constants.SubType;
import mage.filter.FilterPermanent;
import mage.filter.common.FilterAttackingCreature;
/**
@ -19,6 +19,8 @@ import mage.filter.common.FilterAttackingCreature;
*/
public final class SmogsteedRider extends CardImpl {
private static final FilterPermanent filter = new FilterAttackingCreature("each other attacking creature");
public SmogsteedRider(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{B}{B}");
this.subtype.add(SubType.HUMAN);
@ -26,7 +28,7 @@ public final class SmogsteedRider extends CardImpl {
this.power = new MageInt(2);
this.toughness = new MageInt(2);
this.addAbility(new AttacksTriggeredAbility(new GainAbilityControlledEffect(FearAbility.getInstance(), Duration.EndOfTurn, new FilterAttackingCreature(), true), false));
this.addAbility(new AttacksTriggeredAbility(new GainAbilityAllEffect(FearAbility.getInstance(), Duration.EndOfTurn, filter, true), false));
}
private SmogsteedRider(final SmogsteedRider card) {

View file

@ -1,4 +1,3 @@
package mage.cards.s;
import java.util.ArrayList;
@ -15,6 +14,7 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.Outcome;
import mage.filter.StaticFilters;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.Predicates;
import mage.filter.predicate.permanent.AttackingPredicate;
@ -30,16 +30,11 @@ import mage.target.targetpointer.FixedTargets;
*/
public final class SporeCloud extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("blocking creatures");
static {
filter.add(BlockingPredicate.instance);
}
public SporeCloud(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{1}{G}{G}");
// Tap all blocking creatures.
this.getSpellAbility().addEffect(new TapAllEffect(filter));
this.getSpellAbility().addEffect(new TapAllEffect(StaticFilters.FILTER_BLOCKING_CREATURES));
// Prevent all combat damage that would be dealt this turn.
this.getSpellAbility().addEffect(new PreventAllDamageByAllPermanentsEffect(Duration.EndOfTurn, true));
// Each attacking creature and each blocking creature doesn't untap during its controller's next untap step.

View file

@ -10,7 +10,7 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.filter.common.FilterAttackingCreature;
import mage.filter.StaticFilters;
/**
*
@ -22,10 +22,10 @@ public final class Stampede extends CardImpl {
super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{1}{G}{G}");
// Attacking creatures get +1/+0 and gain trample until end of turn.
Effect effect = new BoostAllEffect(1, 0, Duration.EndOfTurn, new FilterAttackingCreature(), false);
Effect effect = new BoostAllEffect(1, 0, Duration.EndOfTurn, StaticFilters.FILTER_ATTACKING_CREATURES, false);
effect.setText("attacking creatures get +1/+0");
this.getSpellAbility().addEffect(effect);
effect = new GainAbilityAllEffect(TrampleAbility.getInstance(), Duration.EndOfTurn, new FilterAttackingCreature());
effect = new GainAbilityAllEffect(TrampleAbility.getInstance(), Duration.EndOfTurn, StaticFilters.FILTER_ATTACKING_CREATURES);
effect.setText("and gain trample until end of turn");
this.getSpellAbility().addEffect(effect);
}

View file

@ -12,7 +12,6 @@ import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.Duration;
import mage.filter.common.FilterControlledLandPermanent;
import mage.filter.common.FilterControlledPermanent;
import mage.target.common.TargetCreaturePermanent;
/**
@ -20,16 +19,17 @@ import mage.target.common.TargetCreaturePermanent;
* @author Loki
*/
public final class StrengthOfCedars extends CardImpl {
private static final FilterControlledPermanent filter = new FilterControlledLandPermanent("the number of lands you control");
private static final FilterControlledLandPermanent filter = new FilterControlledLandPermanent("lands you control");
private static final DynamicValue xValue = new PermanentsOnBattlefieldCount(filter, null);
public StrengthOfCedars (UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{4}{G}");
this.subtype.add(SubType.ARCANE);
// Target creature gets +X/+X until end of turn, where X is the number of lands you control.
DynamicValue controlledLands = new PermanentsOnBattlefieldCount(filter, null);
this.getSpellAbility().addEffect(new BoostTargetEffect(controlledLands, controlledLands, Duration.EndOfTurn, true));
this.getSpellAbility().addEffect(new BoostTargetEffect(xValue, xValue, Duration.EndOfTurn, true));
this.getSpellAbility().addTarget(new TargetCreaturePermanent());
}
@ -41,5 +41,4 @@ public final class StrengthOfCedars extends CardImpl {
public StrengthOfCedars copy() {
return new StrengthOfCedars(this);
}
}

View file

@ -24,7 +24,7 @@ import java.util.UUID;
*/
public final class SyrFarenTheHengehammer extends CardImpl {
private static final DynamicValue xValue = new SourcePermanentPowerCount();
private static final DynamicValue xValue = new SourcePermanentPowerCount(false);
private static final FilterPermanent filter
= new FilterAttackingCreature("another target attacking creature");

View file

@ -25,7 +25,6 @@ import mage.constants.SubType;
import mage.constants.SuperType;
import mage.constants.TargetController;
import mage.constants.Zone;
import mage.filter.FilterCard;
import mage.filter.StaticFilters;
import mage.game.Game;
import mage.game.permanent.Permanent;
@ -59,7 +58,7 @@ public final class TaigamSidisisHand extends CardImpl {
// {B}, {T}, Exile X cards from your graveyard: Target creature gets -X/-X until end of turn.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new TaigamSidisisHandEffect(), new ManaCostsImpl("{B}"));
ability.addCost(new TapSourceCost());
ability.addCost(new ExileFromGraveCost(new TargetCardInYourGraveyard(0, Integer.MAX_VALUE, new FilterCard("cards from your graveyard"))));
ability.addCost(new ExileFromGraveCost(new TargetCardInYourGraveyard(0, Integer.MAX_VALUE, StaticFilters.FILTER_CARDS_FROM_YOUR_GRAVEYARD)));
ability.addTarget(new TargetCreaturePermanent());
this.addAbility(ability);
}

View file

@ -1,4 +1,3 @@
package mage.cards.t;
import java.util.UUID;
@ -17,6 +16,7 @@ import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.Outcome;
import mage.constants.PhaseStep;
import mage.filter.StaticFilters;
import mage.filter.common.FilterAttackingCreature;
import mage.game.Game;
import mage.players.Player;
@ -36,8 +36,7 @@ public final class TearsOfRage extends CardImpl {
// Attacking creatures you control get +X/+0 until end of turn, where X is the number of attacking creatures. Sacrifice those creatures at the beginning of the next end step.
BoostControlledEffect effect = new BoostControlledEffect(new AttackingCreatureCount("the number of attacking creatures"), StaticValue.get(0),
Duration.EndOfTurn, new FilterAttackingCreature("Attacking creatures"), false);
effect.setLockedIn(true);
Duration.EndOfTurn, StaticFilters.FILTER_ATTACKING_CREATURES, false, true);
getSpellAbility().addEffect(effect);
getSpellAbility().addEffect(new TearsOfRageEffect());
}

View file

@ -1,4 +1,3 @@
package mage.cards.t;
import java.util.UUID;
@ -14,8 +13,8 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.Zone;
import mage.filter.StaticFilters;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.permanent.AttackingPredicate;
import mage.game.Game;
import mage.game.events.GameEvent;
import mage.game.permanent.Permanent;
@ -26,21 +25,15 @@ import mage.game.permanent.Permanent;
*/
public final class Thunderstaff extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Attacking creatures");
static {
filter.add(AttackingPredicate.instance);
}
public Thunderstaff(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT},"{3}");
// As long as Thunderstaff is untapped, if a creature would deal combat damage to you, prevent 1 of that damage.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new ThunderstaffPreventionEffect()));
// {2}, {tap}: Attacking creatures get +1/+0 until end of turn.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostAllEffect(1,0,Duration.EndOfTurn, filter, false), new GenericManaCost(2));
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostAllEffect(1,0,Duration.EndOfTurn, StaticFilters.FILTER_ATTACKING_CREATURES, false), new GenericManaCost(2));
ability.addCost(new TapSourceCost());
this.addAbility(ability);
}
private Thunderstaff(final Thunderstaff card) {

View file

@ -1,4 +1,3 @@
package mage.cards.t;
import java.util.UUID;
@ -11,7 +10,7 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.StaticFilters;
/**
*
@ -19,16 +18,16 @@ import mage.filter.common.FilterCreaturePermanent;
*/
public final class ToxicDeluge extends CardImpl {
private static final DynamicValue xValue = new SignInversionDynamicValue(GetXValue.instance);
public ToxicDeluge(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{2}{B}");
// As an additional cost to cast Toxic Deluge, pay X life.
this.getSpellAbility().addCost(new PayVariableLifeCost(true));
// All creatures get -X/-X until end of turn.
DynamicValue xValue = new SignInversionDynamicValue(GetXValue.instance);
this.getSpellAbility().addEffect(new BoostAllEffect(xValue, xValue, Duration.EndOfTurn, new FilterCreaturePermanent("All creatures"), false,
null, true));
this.getSpellAbility().addEffect(new BoostAllEffect(xValue, xValue, Duration.EndOfTurn, StaticFilters.FILTER_PERMANENT_ALL_CREATURES, false, null, true));
}
private ToxicDeluge(final ToxicDeluge card) {

View file

@ -1,4 +1,3 @@
package mage.cards.t;
import java.util.UUID;
@ -7,7 +6,7 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.filter.common.FilterAttackingCreature;
import mage.filter.StaticFilters;
/**
*
@ -15,13 +14,11 @@ import mage.filter.common.FilterAttackingCreature;
*/
public final class TrumpetBlast extends CardImpl {
private static final FilterAttackingCreature filter = new FilterAttackingCreature("Attacking creatures");
public TrumpetBlast(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{2}{R}");
// Attacking creatures get +2/+0 until end of turn.
this.getSpellAbility().addEffect(new BoostAllEffect(2, 0, Duration.EndOfTurn, filter, false));
this.getSpellAbility().addEffect(new BoostAllEffect(2, 0, Duration.EndOfTurn, StaticFilters.FILTER_ATTACKING_CREATURES, false));
}
private TrumpetBlast(final TrumpetBlast card) {

View file

@ -17,7 +17,7 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Zone;
import mage.filter.FilterCard;
import mage.filter.StaticFilters;
import mage.game.Game;
import mage.game.events.GameEvent;
import mage.game.permanent.Permanent;
@ -51,7 +51,7 @@ public final class VarinaLichQueen extends CardImpl {
), new GenericManaCost(2)
);
ability.addCost(new ExileFromGraveCost(new TargetCardInYourGraveyard(
2, new FilterCard("cards from your graveyard")
2, StaticFilters.FILTER_CARDS_FROM_YOUR_GRAVEYARD
)));
this.addAbility(ability);
}

View file

@ -1,20 +1,18 @@
package mage.cards.v;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.AttacksTriggeredAbility;
import mage.abilities.effects.common.continuous.GainAbilityControlledEffect;
import mage.abilities.effects.common.continuous.GainAbilityAllEffect;
import mage.abilities.keyword.FlyingAbility;
import mage.abilities.keyword.LifelinkAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.Duration;
import mage.filter.common.FilterAttackingCreature;
import mage.constants.SubType;
import mage.filter.StaticFilters;
/**
*
@ -33,8 +31,8 @@ public final class VictorysHerald extends CardImpl {
this.addAbility(FlyingAbility.getInstance());
// Whenever Victory's Herald attacks, attacking creatures gain flying and lifelink until end of turn.
Ability ability = new AttacksTriggeredAbility(new GainAbilityControlledEffect(FlyingAbility.getInstance(), Duration.EndOfTurn, new FilterAttackingCreature()), false);
ability.addEffect(new GainAbilityControlledEffect(LifelinkAbility.getInstance(), Duration.EndOfTurn, new FilterAttackingCreature()));
Ability ability = new AttacksTriggeredAbility(new GainAbilityAllEffect(FlyingAbility.getInstance(), Duration.EndOfTurn, StaticFilters.FILTER_ATTACKING_CREATURES, "attacking creatures gain flying"), false);
ability.addEffect(new GainAbilityAllEffect(LifelinkAbility.getInstance(), Duration.EndOfTurn, StaticFilters.FILTER_ATTACKING_CREATURES, "and lifelink until end of turn"));
this.addAbility(ability);
}

View file

@ -1,4 +1,3 @@
package mage.cards.v;
import java.util.UUID;
@ -14,7 +13,7 @@ import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.TargetController;
import mage.constants.Zone;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.StaticFilters;
/**
*
@ -29,9 +28,8 @@ public final class VileConsumption extends CardImpl {
Effect effect = new SacrificeSourceUnlessPaysEffect(new PayLifeCost(1));
effect.setText("sacrifice this creature unless you pay 1 life");
Effect effect2 = new GainAbilityAllEffect(new BeginningOfUpkeepTriggeredAbility(effect, TargetController.YOU, false),
Duration.WhileOnBattlefield, new FilterCreaturePermanent("all creatures"));
effect2.setText("All creatures have \"At the beginning of your upkeep, sacrifice this creature unless you pay 1 life.\"");
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, effect2));
Duration.WhileOnBattlefield, StaticFilters.FILTER_PERMANENT_ALL_CREATURES);
this.addAbility(new SimpleStaticAbility(effect2));
}
private VileConsumption(final VileConsumption card) {

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