diff --git a/Mage.Sets/src/mage/cards/a/AetherwindBasker.java b/Mage.Sets/src/mage/cards/a/AetherwindBasker.java index 3ca50e87661..1004f2de4cc 100644 --- a/Mage.Sets/src/mage/cards/a/AetherwindBasker.java +++ b/Mage.Sets/src/mage/cards/a/AetherwindBasker.java @@ -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))); diff --git a/Mage.Sets/src/mage/cards/a/AgrusKosWojekVeteran.java b/Mage.Sets/src/mage/cards/a/AgrusKosWojekVeteran.java index e3d081a6a35..ee1a142158e 100644 --- a/Mage.Sets/src/mage/cards/a/AgrusKosWojekVeteran.java +++ b/Mage.Sets/src/mage/cards/a/AgrusKosWojekVeteran.java @@ -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) { diff --git a/Mage.Sets/src/mage/cards/a/AkkiCoalflinger.java b/Mage.Sets/src/mage/cards/a/AkkiCoalflinger.java index a4c5c61c1dd..6a746b5a52e 100644 --- a/Mage.Sets/src/mage/cards/a/AkkiCoalflinger.java +++ b/Mage.Sets/src/mage/cards/a/AkkiCoalflinger.java @@ -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); } diff --git a/Mage.Sets/src/mage/cards/a/AkroanHoplite.java b/Mage.Sets/src/mage/cards/a/AkroanHoplite.java index d6b34e5df9f..4b0db99753a 100644 --- a/Mage.Sets/src/mage/cards/a/AkroanHoplite.java +++ b/Mage.Sets/src/mage/cards/a/AkroanHoplite.java @@ -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) { diff --git a/Mage.Sets/src/mage/cards/a/AlpineHoundmaster.java b/Mage.Sets/src/mage/cards/a/AlpineHoundmaster.java index 33100f83b55..fa9269902e5 100644 --- a/Mage.Sets/src/mage/cards/a/AlpineHoundmaster.java +++ b/Mage.Sets/src/mage/cards/a/AlpineHoundmaster.java @@ -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) { diff --git a/Mage.Sets/src/mage/cards/a/Ambush.java b/Mage.Sets/src/mage/cards/a/Ambush.java index 01ef724ff84..ffb5529e360 100644 --- a/Mage.Sets/src/mage/cards/a/Ambush.java +++ b/Mage.Sets/src/mage/cards/a/Ambush.java @@ -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) { diff --git a/Mage.Sets/src/mage/cards/a/AngelOfTheDireHour.java b/Mage.Sets/src/mage/cards/a/AngelOfTheDireHour.java index 1d44db8cb4e..9f8899d0ea8 100644 --- a/Mage.Sets/src/mage/cards/a/AngelOfTheDireHour.java +++ b/Mage.Sets/src/mage/cards/a/AngelOfTheDireHour.java @@ -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()); diff --git a/Mage.Sets/src/mage/cards/a/AngelicCaptain.java b/Mage.Sets/src/mage/cards/a/AngelicCaptain.java index d9f8f3f4e39..d0bb534df8d 100644 --- a/Mage.Sets/src/mage/cards/a/AngelicCaptain.java +++ b/Mage.Sets/src/mage/cards/a/AngelicCaptain.java @@ -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) { diff --git a/Mage.Sets/src/mage/cards/a/ArmyOfAllah.java b/Mage.Sets/src/mage/cards/a/ArmyOfAllah.java index 97b319b9110..b4761425cc2 100644 --- a/Mage.Sets/src/mage/cards/a/ArmyOfAllah.java +++ b/Mage.Sets/src/mage/cards/a/ArmyOfAllah.java @@ -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) { diff --git a/Mage.Sets/src/mage/cards/a/Aurochs.java b/Mage.Sets/src/mage/cards/a/Aurochs.java index ec3c832c9c5..4663e7e33d3 100644 --- a/Mage.Sets/src/mage/cards/a/Aurochs.java +++ b/Mage.Sets/src/mage/cards/a/Aurochs.java @@ -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) { diff --git a/Mage.Sets/src/mage/cards/a/AurochsHerd.java b/Mage.Sets/src/mage/cards/a/AurochsHerd.java index baf2a98d7df..854c6206f8c 100644 --- a/Mage.Sets/src/mage/cards/a/AurochsHerd.java +++ b/Mage.Sets/src/mage/cards/a/AurochsHerd.java @@ -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) { diff --git a/Mage.Sets/src/mage/cards/b/BaneOfTheLiving.java b/Mage.Sets/src/mage/cards/b/BaneOfTheLiving.java index add6dd81d5e..e0765a87d3b 100644 --- a/Mage.Sets/src/mage/cards/b/BaneOfTheLiving.java +++ b/Mage.Sets/src/mage/cards/b/BaneOfTheLiving.java @@ -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) { diff --git a/Mage.Sets/src/mage/cards/b/BazaarKrovod.java b/Mage.Sets/src/mage/cards/b/BazaarKrovod.java index baf732610c0..50e59ffe4b2 100644 --- a/Mage.Sets/src/mage/cards/b/BazaarKrovod.java +++ b/Mage.Sets/src/mage/cards/b/BazaarKrovod.java @@ -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); - } - -} diff --git a/Mage.Sets/src/mage/cards/b/Bearscape.java b/Mage.Sets/src/mage/cards/b/Bearscape.java index a88823a0c7c..8374503c335 100644 --- a/Mage.Sets/src/mage/cards/b/Bearscape.java +++ b/Mage.Sets/src/mage/cards/b/Bearscape.java @@ -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); } diff --git a/Mage.Sets/src/mage/cards/b/BerserkersOnslaught.java b/Mage.Sets/src/mage/cards/b/BerserkersOnslaught.java index bee14ad6270..3a0d056aaf4 100644 --- a/Mage.Sets/src/mage/cards/b/BerserkersOnslaught.java +++ b/Mage.Sets/src/mage/cards/b/BerserkersOnslaught.java @@ -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) { diff --git a/Mage.Sets/src/mage/cards/b/BowOfNylea.java b/Mage.Sets/src/mage/cards/b/BowOfNylea.java index e9cafccc9a6..c5ad23462ea 100644 --- a/Mage.Sets/src/mage/cards/b/BowOfNylea.java +++ b/Mage.Sets/src/mage/cards/b/BowOfNylea.java @@ -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; - } -} diff --git a/Mage.Sets/src/mage/cards/b/BullAurochs.java b/Mage.Sets/src/mage/cards/b/BullAurochs.java index 24392488007..4b54f87a1d7 100644 --- a/Mage.Sets/src/mage/cards/b/BullAurochs.java +++ b/Mage.Sets/src/mage/cards/b/BullAurochs.java @@ -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) { diff --git a/Mage.Sets/src/mage/cards/b/BurstOfStrength.java b/Mage.Sets/src/mage/cards/b/BurstOfStrength.java index 8ecad93fbab..8fd4b2c641a 100644 --- a/Mage.Sets/src/mage/cards/b/BurstOfStrength.java +++ b/Mage.Sets/src/mage/cards/b/BurstOfStrength.java @@ -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()); } diff --git a/Mage.Sets/src/mage/cards/c/CabalInquisitor.java b/Mage.Sets/src/mage/cards/c/CabalInquisitor.java index 0281d5cfcd1..92beb901840 100644 --- a/Mage.Sets/src/mage/cards/c/CabalInquisitor.java +++ b/Mage.Sets/src/mage/cards/c/CabalInquisitor.java @@ -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); } diff --git a/Mage.Sets/src/mage/cards/c/CabalSurgeon.java b/Mage.Sets/src/mage/cards/c/CabalSurgeon.java index b242090ab0f..ddad3a2ae89 100644 --- a/Mage.Sets/src/mage/cards/c/CabalSurgeon.java +++ b/Mage.Sets/src/mage/cards/c/CabalSurgeon.java @@ -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); } diff --git a/Mage.Sets/src/mage/cards/c/CarnifexDemon.java b/Mage.Sets/src/mage/cards/c/CarnifexDemon.java index 54c845eb5b1..e060e6fb8b4 100644 --- a/Mage.Sets/src/mage/cards/c/CarnifexDemon.java +++ b/Mage.Sets/src/mage/cards/c/CarnifexDemon.java @@ -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( diff --git a/Mage.Sets/src/mage/cards/c/CennsHeir.java b/Mage.Sets/src/mage/cards/c/CennsHeir.java index 4c7973f4ec3..1da1a3345a9 100644 --- a/Mage.Sets/src/mage/cards/c/CennsHeir.java +++ b/Mage.Sets/src/mage/cards/c/CennsHeir.java @@ -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) { diff --git a/Mage.Sets/src/mage/cards/c/CeruleanWisps.java b/Mage.Sets/src/mage/cards/c/CeruleanWisps.java index 802ef4b869d..3cc5469f800 100644 --- a/Mage.Sets/src/mage/cards/c/CeruleanWisps.java +++ b/Mage.Sets/src/mage/cards/c/CeruleanWisps.java @@ -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)); diff --git a/Mage.Sets/src/mage/cards/c/ClingingMists.java b/Mage.Sets/src/mage/cards/c/ClingingMists.java index 6392c7f2276..7506823282f 100644 --- a/Mage.Sets/src/mage/cards/c/ClingingMists.java +++ b/Mage.Sets/src/mage/cards/c/ClingingMists.java @@ -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 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); } - } diff --git a/Mage.Sets/src/mage/cards/c/ConsulsLieutenant.java b/Mage.Sets/src/mage/cards/c/ConsulsLieutenant.java index d5465a141be..4a1c5be70f7 100644 --- a/Mage.Sets/src/mage/cards/c/ConsulsLieutenant.java +++ b/Mage.Sets/src/mage/cards/c/ConsulsLieutenant.java @@ -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) { diff --git a/Mage.Sets/src/mage/cards/c/ConsulsShieldguard.java b/Mage.Sets/src/mage/cards/c/ConsulsShieldguard.java index 93d11a8282e..2efb58dae72 100644 --- a/Mage.Sets/src/mage/cards/c/ConsulsShieldguard.java +++ b/Mage.Sets/src/mage/cards/c/ConsulsShieldguard.java @@ -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) { diff --git a/Mage.Sets/src/mage/cards/c/ContestedWarZone.java b/Mage.Sets/src/mage/cards/c/ContestedWarZone.java index 4e1ba74d209..81f3372220e 100644 --- a/Mage.Sets/src/mage/cards/c/ContestedWarZone.java +++ b/Mage.Sets/src/mage/cards/c/ContestedWarZone.java @@ -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); } diff --git a/Mage.Sets/src/mage/cards/c/CrescendoOfWar.java b/Mage.Sets/src/mage/cards/c/CrescendoOfWar.java index 004e47df5cc..16e7f9b2960 100644 --- a/Mage.Sets/src/mage/cards/c/CrescendoOfWar.java +++ b/Mage.Sets/src/mage/cards/c/CrescendoOfWar.java @@ -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) { diff --git a/Mage.Sets/src/mage/cards/c/CrossroadsConsecrator.java b/Mage.Sets/src/mage/cards/c/CrossroadsConsecrator.java index f16e5631fa9..b1637f09f63 100644 --- a/Mage.Sets/src/mage/cards/c/CrossroadsConsecrator.java +++ b/Mage.Sets/src/mage/cards/c/CrossroadsConsecrator.java @@ -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); diff --git a/Mage.Sets/src/mage/cards/d/DeathFrenzy.java b/Mage.Sets/src/mage/cards/d/DeathFrenzy.java index 2a58d9f5a48..d7b35c8d05d 100644 --- a/Mage.Sets/src/mage/cards/d/DeathFrenzy.java +++ b/Mage.Sets/src/mage/cards/d/DeathFrenzy.java @@ -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())); } diff --git a/Mage.Sets/src/mage/cards/d/DinosaurStampede.java b/Mage.Sets/src/mage/cards/d/DinosaurStampede.java index f04097d2ff1..574df6b9e3d 100644 --- a/Mage.Sets/src/mage/cards/d/DinosaurStampede.java +++ b/Mage.Sets/src/mage/cards/d/DinosaurStampede.java @@ -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) { diff --git a/Mage.Sets/src/mage/cards/d/DireFleetCaptain.java b/Mage.Sets/src/mage/cards/d/DireFleetCaptain.java index 32f5a34f74d..0bca5697087 100644 --- a/Mage.Sets/src/mage/cards/d/DireFleetCaptain.java +++ b/Mage.Sets/src/mage/cards/d/DireFleetCaptain.java @@ -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) { diff --git a/Mage.Sets/src/mage/cards/d/DireFleetNeckbreaker.java b/Mage.Sets/src/mage/cards/d/DireFleetNeckbreaker.java index 5639fe12367..740d8624084 100644 --- a/Mage.Sets/src/mage/cards/d/DireFleetNeckbreaker.java +++ b/Mage.Sets/src/mage/cards/d/DireFleetNeckbreaker.java @@ -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); } -} \ No newline at end of file +} diff --git a/Mage.Sets/src/mage/cards/d/DirgeOfDread.java b/Mage.Sets/src/mage/cards/d/DirgeOfDread.java index 4935f12ca35..7e763e2f75c 100644 --- a/Mage.Sets/src/mage/cards/d/DirgeOfDread.java +++ b/Mage.Sets/src/mage/cards/d/DirgeOfDread.java @@ -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. diff --git a/Mage.Sets/src/mage/cards/d/DranaLiberatorOfMalakir.java b/Mage.Sets/src/mage/cards/d/DranaLiberatorOfMalakir.java index 77ebf47494e..53d27bf8d8a 100644 --- a/Mage.Sets/src/mage/cards/d/DranaLiberatorOfMalakir.java +++ b/Mage.Sets/src/mage/cards/d/DranaLiberatorOfMalakir.java @@ -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()); diff --git a/Mage.Sets/src/mage/cards/d/DuergarMineCaptain.java b/Mage.Sets/src/mage/cards/d/DuergarMineCaptain.java index e2594870874..5b2f3ae823f 100644 --- a/Mage.Sets/src/mage/cards/d/DuergarMineCaptain.java +++ b/Mage.Sets/src/mage/cards/d/DuergarMineCaptain.java @@ -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()); diff --git a/Mage.Sets/src/mage/cards/e/EddytrailHawk.java b/Mage.Sets/src/mage/cards/e/EddytrailHawk.java index d89c7edb8e2..2fa949d573c 100644 --- a/Mage.Sets/src/mage/cards/e/EddytrailHawk.java +++ b/Mage.Sets/src/mage/cards/e/EddytrailHawk.java @@ -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); } diff --git a/Mage.Sets/src/mage/cards/f/FangrenPathcutter.java b/Mage.Sets/src/mage/cards/f/FangrenPathcutter.java index f217f54ba52..c6ae4c65f05 100644 --- a/Mage.Sets/src/mage/cards/f/FangrenPathcutter.java +++ b/Mage.Sets/src/mage/cards/f/FangrenPathcutter.java @@ -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) { diff --git a/Mage.Sets/src/mage/cards/f/FightingChance.java b/Mage.Sets/src/mage/cards/f/FightingChance.java index 80bd15d87cf..6dbdd46f6b6 100644 --- a/Mage.Sets/src/mage/cards/f/FightingChance.java +++ b/Mage.Sets/src/mage/cards/f/FightingChance.java @@ -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}"); diff --git a/Mage.Sets/src/mage/cards/f/FleetingSpirit.java b/Mage.Sets/src/mage/cards/f/FleetingSpirit.java index b01c194e2df..9423634b7f6 100644 --- a/Mage.Sets/src/mage/cards/f/FleetingSpirit.java +++ b/Mage.Sets/src/mage/cards/f/FleetingSpirit.java @@ -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. diff --git a/Mage.Sets/src/mage/cards/f/FlurryOfWings.java b/Mage.Sets/src/mage/cards/f/FlurryOfWings.java index dd325c2afd2..789e215f3bc 100644 --- a/Mage.Sets/src/mage/cards/f/FlurryOfWings.java +++ b/Mage.Sets/src/mage/cards/f/FlurryOfWings.java @@ -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) { diff --git a/Mage.Sets/src/mage/cards/f/FyndhornPollen.java b/Mage.Sets/src/mage/cards/f/FyndhornPollen.java index d0dadf5ab42..a6eda41ac77 100644 --- a/Mage.Sets/src/mage/cards/f/FyndhornPollen.java +++ b/Mage.Sets/src/mage/cards/f/FyndhornPollen.java @@ -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) { diff --git a/Mage.Sets/src/mage/cards/g/GoblinPiledriver.java b/Mage.Sets/src/mage/cards/g/GoblinPiledriver.java index a6aff231e73..2dc338c92d8 100644 --- a/Mage.Sets/src/mage/cards/g/GoblinPiledriver.java +++ b/Mage.Sets/src/mage/cards/g/GoblinPiledriver.java @@ -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) { diff --git a/Mage.Sets/src/mage/cards/g/GolgariCharm.java b/Mage.Sets/src/mage/cards/g/GolgariCharm.java index c804f4522d0..7311f917a06 100644 --- a/Mage.Sets/src/mage/cards/g/GolgariCharm.java +++ b/Mage.Sets/src/mage/cards/g/GolgariCharm.java @@ -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(); diff --git a/Mage.Sets/src/mage/cards/g/GravitySphere.java b/Mage.Sets/src/mage/cards/g/GravitySphere.java index 702c1e38c5d..77ff21ad3d9 100644 --- a/Mage.Sets/src/mage/cards/g/GravitySphere.java +++ b/Mage.Sets/src/mage/cards/g/GravitySphere.java @@ -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)); } diff --git a/Mage.Sets/src/mage/cards/g/GrimLavamancer.java b/Mage.Sets/src/mage/cards/g/GrimLavamancer.java index 621dca5706a..c9fb81b1001 100644 --- a/Mage.Sets/src/mage/cards/g/GrimLavamancer.java +++ b/Mage.Sets/src/mage/cards/g/GrimLavamancer.java @@ -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); } diff --git a/Mage.Sets/src/mage/cards/h/HarvestPyre.java b/Mage.Sets/src/mage/cards/h/HarvestPyre.java index ba41305a5ef..97a2971f3a1 100644 --- a/Mage.Sets/src/mage/cards/h/HarvestPyre.java +++ b/Mage.Sets/src/mage/cards/h/HarvestPyre.java @@ -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()); diff --git a/Mage.Sets/src/mage/cards/h/HeadlongRush.java b/Mage.Sets/src/mage/cards/h/HeadlongRush.java index db98ea22e35..b81903c268e 100644 --- a/Mage.Sets/src/mage/cards/h/HeadlongRush.java +++ b/Mage.Sets/src/mage/cards/h/HeadlongRush.java @@ -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) { diff --git a/Mage.Sets/src/mage/cards/h/HearthCharm.java b/Mage.Sets/src/mage/cards/h/HearthCharm.java index f4ac3026d50..6d034e1b9b7 100644 --- a/Mage.Sets/src/mage/cards/h/HearthCharm.java +++ b/Mage.Sets/src/mage/cards/h/HearthCharm.java @@ -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); } diff --git a/Mage.Sets/src/mage/cards/h/HellSwarm.java b/Mage.Sets/src/mage/cards/h/HellSwarm.java index 47be817c09d..8596dd726ea 100644 --- a/Mage.Sets/src/mage/cards/h/HellSwarm.java +++ b/Mage.Sets/src/mage/cards/h/HellSwarm.java @@ -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) { diff --git a/Mage.Sets/src/mage/cards/h/HoldTheLine.java b/Mage.Sets/src/mage/cards/h/HoldTheLine.java index 6be43cad89e..a43199e87da 100644 --- a/Mage.Sets/src/mage/cards/h/HoldTheLine.java +++ b/Mage.Sets/src/mage/cards/h/HoldTheLine.java @@ -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) { diff --git a/Mage.Sets/src/mage/cards/h/HonoredCropCaptain.java b/Mage.Sets/src/mage/cards/h/HonoredCropCaptain.java index 1125f2a7fda..7dcd1d5f8ba 100644 --- a/Mage.Sets/src/mage/cards/h/HonoredCropCaptain.java +++ b/Mage.Sets/src/mage/cards/h/HonoredCropCaptain.java @@ -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)); } diff --git a/Mage.Sets/src/mage/cards/h/Hydrolash.java b/Mage.Sets/src/mage/cards/h/Hydrolash.java index 7c68a62405e..22c02f31081 100644 --- a/Mage.Sets/src/mage/cards/h/Hydrolash.java +++ b/Mage.Sets/src/mage/cards/h/Hydrolash.java @@ -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("
")); } private Hydrolash(final Hydrolash card) { diff --git a/Mage.Sets/src/mage/cards/i/IchorExplosion.java b/Mage.Sets/src/mage/cards/i/IchorExplosion.java index df561f4c2b3..d55feef1339 100644 --- a/Mage.Sets/src/mage/cards/i/IchorExplosion.java +++ b/Mage.Sets/src/mage/cards/i/IchorExplosion.java @@ -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)); } diff --git a/Mage.Sets/src/mage/cards/i/ImmolatingGlare.java b/Mage.Sets/src/mage/cards/i/ImmolatingGlare.java index 71792545d16..93d375a7f00 100644 --- a/Mage.Sets/src/mage/cards/i/ImmolatingGlare.java +++ b/Mage.Sets/src/mage/cards/i/ImmolatingGlare.java @@ -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()); } diff --git a/Mage.Sets/src/mage/cards/i/Infest.java b/Mage.Sets/src/mage/cards/i/Infest.java index 271bf6f8ca7..453533588ad 100644 --- a/Mage.Sets/src/mage/cards/i/Infest.java +++ b/Mage.Sets/src/mage/cards/i/Infest.java @@ -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) { diff --git a/Mage.Sets/src/mage/cards/j/JazalGoldmane.java b/Mage.Sets/src/mage/cards/j/JazalGoldmane.java index a6a32614787..85cd8dac6fb 100644 --- a/Mage.Sets/src/mage/cards/j/JazalGoldmane.java +++ b/Mage.Sets/src/mage/cards/j/JazalGoldmane.java @@ -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}"))); } diff --git a/Mage.Sets/src/mage/cards/k/KavuMauler.java b/Mage.Sets/src/mage/cards/k/KavuMauler.java index 86b80f5afa1..f85a83a2ff9 100644 --- a/Mage.Sets/src/mage/cards/k/KavuMauler.java +++ b/Mage.Sets/src/mage/cards/k/KavuMauler.java @@ -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) { diff --git a/Mage.Sets/src/mage/cards/k/KillShot.java b/Mage.Sets/src/mage/cards/k/KillShot.java index 1c578ff2be6..d6ccb2f414e 100644 --- a/Mage.Sets/src/mage/cards/k/KillShot.java +++ b/Mage.Sets/src/mage/cards/k/KillShot.java @@ -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()); } diff --git a/Mage.Sets/src/mage/cards/k/KirtarsWrath.java b/Mage.Sets/src/mage/cards/k/KirtarsWrath.java index 728d5d7206c..e2f91b34e7a 100644 --- a/Mage.Sets/src/mage/cards/k/KirtarsWrath.java +++ b/Mage.Sets/src/mage/cards/k/KirtarsWrath.java @@ -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.

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")); - } 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); } } diff --git a/Mage.Sets/src/mage/cards/k/KongmingsContraptions.java b/Mage.Sets/src/mage/cards/k/KongmingsContraptions.java index 314309bfe09..7ebae6d9a1f 100644 --- a/Mage.Sets/src/mage/cards/k/KongmingsContraptions.java +++ b/Mage.Sets/src/mage/cards/k/KongmingsContraptions.java @@ -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); } - } diff --git a/Mage.Sets/src/mage/cards/l/LethargyTrap.java b/Mage.Sets/src/mage/cards/l/LethargyTrap.java index d00e7be8a9d..6450f30c337 100644 --- a/Mage.Sets/src/mage/cards/l/LethargyTrap.java +++ b/Mage.Sets/src/mage/cards/l/LethargyTrap.java @@ -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) { diff --git a/Mage.Sets/src/mage/cards/m/MarrowGnawer.java b/Mage.Sets/src/mage/cards/m/MarrowGnawer.java index 487d5f3e4cb..dd999aba8e4 100644 --- a/Mage.Sets/src/mage/cards/m/MarrowGnawer.java +++ b/Mage.Sets/src/mage/cards/m/MarrowGnawer.java @@ -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); } - } diff --git a/Mage.Sets/src/mage/cards/m/MartonStromgald.java b/Mage.Sets/src/mage/cards/m/MartonStromgald.java index 3f8d0dd3396..bc40b4f10d5 100644 --- a/Mage.Sets/src/mage/cards/m/MartonStromgald.java +++ b/Mage.Sets/src/mage/cards/m/MartonStromgald.java @@ -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) { diff --git a/Mage.Sets/src/mage/cards/m/Mightstone.java b/Mage.Sets/src/mage/cards/m/Mightstone.java index 2bdfe3beadf..d22cefb0009 100644 --- a/Mage.Sets/src/mage/cards/m/Mightstone.java +++ b/Mage.Sets/src/mage/cards/m/Mightstone.java @@ -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) { diff --git a/Mage.Sets/src/mage/cards/m/Morale.java b/Mage.Sets/src/mage/cards/m/Morale.java index d3d668d01f6..e53d2b59d55 100644 --- a/Mage.Sets/src/mage/cards/m/Morale.java +++ b/Mage.Sets/src/mage/cards/m/Morale.java @@ -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) { diff --git a/Mage.Sets/src/mage/cards/m/MysticDecree.java b/Mage.Sets/src/mage/cards/m/MysticDecree.java index 0922b3621a7..151cba2d414 100644 --- a/Mage.Sets/src/mage/cards/m/MysticDecree.java +++ b/Mage.Sets/src/mage/cards/m/MysticDecree.java @@ -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); } diff --git a/Mage.Sets/src/mage/cards/n/NecropolisFiend.java b/Mage.Sets/src/mage/cards/n/NecropolisFiend.java index f7d666275c1..c44697f799f 100644 --- a/Mage.Sets/src/mage/cards/n/NecropolisFiend.java +++ b/Mage.Sets/src/mage/cards/n/NecropolisFiend.java @@ -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 { } } } -} \ No newline at end of file +} diff --git a/Mage.Sets/src/mage/cards/n/NightOfSoulsBetrayal.java b/Mage.Sets/src/mage/cards/n/NightOfSoulsBetrayal.java index 57e293281f9..9e1b67ddb2b 100644 --- a/Mage.Sets/src/mage/cards/n/NightOfSoulsBetrayal.java +++ b/Mage.Sets/src/mage/cards/n/NightOfSoulsBetrayal.java @@ -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) { diff --git a/Mage.Sets/src/mage/cards/n/NobilisOfWar.java b/Mage.Sets/src/mage/cards/n/NobilisOfWar.java index 3dc3af6ddb2..75057c314bc 100644 --- a/Mage.Sets/src/mage/cards/n/NobilisOfWar.java +++ b/Mage.Sets/src/mage/cards/n/NobilisOfWar.java @@ -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) { diff --git a/Mage.Sets/src/mage/cards/p/PiannaNomadCaptain.java b/Mage.Sets/src/mage/cards/p/PiannaNomadCaptain.java index 682d11fc34f..2f6a8f8b72f 100644 --- a/Mage.Sets/src/mage/cards/p/PiannaNomadCaptain.java +++ b/Mage.Sets/src/mage/cards/p/PiannaNomadCaptain.java @@ -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) { diff --git a/Mage.Sets/src/mage/cards/p/PitTrap.java b/Mage.Sets/src/mage/cards/p/PitTrap.java index 787a06747aa..3204e9eda03 100644 --- a/Mage.Sets/src/mage/cards/p/PitTrap.java +++ b/Mage.Sets/src/mage/cards/p/PitTrap.java @@ -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); diff --git a/Mage.Sets/src/mage/cards/p/Psychatog.java b/Mage.Sets/src/mage/cards/p/Psychatog.java index 61572d5d847..011fec63897 100644 --- a/Mage.Sets/src/mage/cards/p/Psychatog.java +++ b/Mage.Sets/src/mage/cards/p/Psychatog.java @@ -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)))); } diff --git a/Mage.Sets/src/mage/cards/p/PursueGlory.java b/Mage.Sets/src/mage/cards/p/PursueGlory.java index 57f958fd214..15e64358792 100644 --- a/Mage.Sets/src/mage/cards/p/PursueGlory.java +++ b/Mage.Sets/src/mage/cards/p/PursueGlory.java @@ -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) { diff --git a/Mage.Sets/src/mage/cards/r/RabbleRouser.java b/Mage.Sets/src/mage/cards/r/RabbleRouser.java index 99c0a6ebaf7..e2827759b83 100644 --- a/Mage.Sets/src/mage/cards/r/RabbleRouser.java +++ b/Mage.Sets/src/mage/cards/r/RabbleRouser.java @@ -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); } diff --git a/Mage.Sets/src/mage/cards/r/RadiantDestiny.java b/Mage.Sets/src/mage/cards/r/RadiantDestiny.java index e9abe216472..7b90a359c10 100644 --- a/Mage.Sets/src/mage/cards/r/RadiantDestiny.java +++ b/Mage.Sets/src/mage/cards/r/RadiantDestiny.java @@ -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, diff --git a/Mage.Sets/src/mage/cards/r/Rally.java b/Mage.Sets/src/mage/cards/r/Rally.java index 414bbb2b4d6..69187bbae9f 100644 --- a/Mage.Sets/src/mage/cards/r/Rally.java +++ b/Mage.Sets/src/mage/cards/r/Rally.java @@ -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) { diff --git a/Mage.Sets/src/mage/cards/r/RallyTheForces.java b/Mage.Sets/src/mage/cards/r/RallyTheForces.java index 2ca20f386ca..dc22f0b6076 100644 --- a/Mage.Sets/src/mage/cards/r/RallyTheForces.java +++ b/Mage.Sets/src/mage/cards/r/RallyTheForces.java @@ -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); } diff --git a/Mage.Sets/src/mage/cards/r/Rebuke.java b/Mage.Sets/src/mage/cards/r/Rebuke.java index 1acef97f6ce..555aabe5d56 100644 --- a/Mage.Sets/src/mage/cards/r/Rebuke.java +++ b/Mage.Sets/src/mage/cards/r/Rebuke.java @@ -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()); } diff --git a/Mage.Sets/src/mage/cards/r/RenegadeWarlord.java b/Mage.Sets/src/mage/cards/r/RenegadeWarlord.java index 8dc902b9963..685e295d7e1 100644 --- a/Mage.Sets/src/mage/cards/r/RenegadeWarlord.java +++ b/Mage.Sets/src/mage/cards/r/RenegadeWarlord.java @@ -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) { diff --git a/Mage.Sets/src/mage/cards/r/RimehornAurochs.java b/Mage.Sets/src/mage/cards/r/RimehornAurochs.java index f878e9c1d86..bef3a9c630e 100644 --- a/Mage.Sets/src/mage/cards/r/RimehornAurochs.java +++ b/Mage.Sets/src/mage/cards/r/RimehornAurochs.java @@ -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); } - } diff --git a/Mage.Sets/src/mage/cards/r/RowanFearlessSparkmage.java b/Mage.Sets/src/mage/cards/r/RowanFearlessSparkmage.java index bd5b73ffbfd..aa673718ad2 100644 --- a/Mage.Sets/src/mage/cards/r/RowanFearlessSparkmage.java +++ b/Mage.Sets/src/mage/cards/r/RowanFearlessSparkmage.java @@ -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); } diff --git a/Mage.Sets/src/mage/cards/s/SandstoneDeadfall.java b/Mage.Sets/src/mage/cards/s/SandstoneDeadfall.java index edbc4a19154..c5988eaeb6b 100644 --- a/Mage.Sets/src/mage/cards/s/SandstoneDeadfall.java +++ b/Mage.Sets/src/mage/cards/s/SandstoneDeadfall.java @@ -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); } diff --git a/Mage.Sets/src/mage/cards/s/ShaleskinBruiser.java b/Mage.Sets/src/mage/cards/s/ShaleskinBruiser.java index 14cce8d24e6..78390e22c5c 100644 --- a/Mage.Sets/src/mage/cards/s/ShaleskinBruiser.java +++ b/Mage.Sets/src/mage/cards/s/ShaleskinBruiser.java @@ -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) { diff --git a/Mage.Sets/src/mage/cards/s/ShipwreckSinger.java b/Mage.Sets/src/mage/cards/s/ShipwreckSinger.java index 22893c2539b..01dd3e53836 100644 --- a/Mage.Sets/src/mage/cards/s/ShipwreckSinger.java +++ b/Mage.Sets/src/mage/cards/s/ShipwreckSinger.java @@ -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) { diff --git a/Mage.Sets/src/mage/cards/s/Shrivel.java b/Mage.Sets/src/mage/cards/s/Shrivel.java index d602ae4faa1..ed5af12c77d 100644 --- a/Mage.Sets/src/mage/cards/s/Shrivel.java +++ b/Mage.Sets/src/mage/cards/s/Shrivel.java @@ -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) { diff --git a/Mage.Sets/src/mage/cards/s/SkeletalScrying.java b/Mage.Sets/src/mage/cards/s/SkeletalScrying.java index fe3181c71b5..9996b0e404e 100644 --- a/Mage.Sets/src/mage/cards/s/SkeletalScrying.java +++ b/Mage.Sets/src/mage/cards/s/SkeletalScrying.java @@ -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))); } } } diff --git a/Mage.Sets/src/mage/cards/s/SmogsteedRider.java b/Mage.Sets/src/mage/cards/s/SmogsteedRider.java index 703db1c6f40..afe6f12c749 100644 --- a/Mage.Sets/src/mage/cards/s/SmogsteedRider.java +++ b/Mage.Sets/src/mage/cards/s/SmogsteedRider.java @@ -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) { diff --git a/Mage.Sets/src/mage/cards/s/SporeCloud.java b/Mage.Sets/src/mage/cards/s/SporeCloud.java index f6a74c5efed..a79d04cad4a 100644 --- a/Mage.Sets/src/mage/cards/s/SporeCloud.java +++ b/Mage.Sets/src/mage/cards/s/SporeCloud.java @@ -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. diff --git a/Mage.Sets/src/mage/cards/s/Stampede.java b/Mage.Sets/src/mage/cards/s/Stampede.java index 11a806beab0..38f68f67150 100644 --- a/Mage.Sets/src/mage/cards/s/Stampede.java +++ b/Mage.Sets/src/mage/cards/s/Stampede.java @@ -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); } diff --git a/Mage.Sets/src/mage/cards/s/StrengthOfCedars.java b/Mage.Sets/src/mage/cards/s/StrengthOfCedars.java index b1d93df8f0b..0c636ece9c3 100644 --- a/Mage.Sets/src/mage/cards/s/StrengthOfCedars.java +++ b/Mage.Sets/src/mage/cards/s/StrengthOfCedars.java @@ -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); } - } diff --git a/Mage.Sets/src/mage/cards/s/SyrFarenTheHengehammer.java b/Mage.Sets/src/mage/cards/s/SyrFarenTheHengehammer.java index adfcc139e8f..9c83b8053a0 100644 --- a/Mage.Sets/src/mage/cards/s/SyrFarenTheHengehammer.java +++ b/Mage.Sets/src/mage/cards/s/SyrFarenTheHengehammer.java @@ -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"); diff --git a/Mage.Sets/src/mage/cards/t/TaigamSidisisHand.java b/Mage.Sets/src/mage/cards/t/TaigamSidisisHand.java index 86f83bc64e6..945448bd291 100644 --- a/Mage.Sets/src/mage/cards/t/TaigamSidisisHand.java +++ b/Mage.Sets/src/mage/cards/t/TaigamSidisisHand.java @@ -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); } diff --git a/Mage.Sets/src/mage/cards/t/TearsOfRage.java b/Mage.Sets/src/mage/cards/t/TearsOfRage.java index f1792dfbffa..d2a09ac4ccd 100644 --- a/Mage.Sets/src/mage/cards/t/TearsOfRage.java +++ b/Mage.Sets/src/mage/cards/t/TearsOfRage.java @@ -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()); } diff --git a/Mage.Sets/src/mage/cards/t/Thunderstaff.java b/Mage.Sets/src/mage/cards/t/Thunderstaff.java index 522641eaf24..1ec5b9b9085 100644 --- a/Mage.Sets/src/mage/cards/t/Thunderstaff.java +++ b/Mage.Sets/src/mage/cards/t/Thunderstaff.java @@ -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) { diff --git a/Mage.Sets/src/mage/cards/t/ToxicDeluge.java b/Mage.Sets/src/mage/cards/t/ToxicDeluge.java index 61598d39d14..ad79c962218 100644 --- a/Mage.Sets/src/mage/cards/t/ToxicDeluge.java +++ b/Mage.Sets/src/mage/cards/t/ToxicDeluge.java @@ -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) { diff --git a/Mage.Sets/src/mage/cards/t/TrumpetBlast.java b/Mage.Sets/src/mage/cards/t/TrumpetBlast.java index f3ec87b2311..b6c5b904591 100644 --- a/Mage.Sets/src/mage/cards/t/TrumpetBlast.java +++ b/Mage.Sets/src/mage/cards/t/TrumpetBlast.java @@ -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) { diff --git a/Mage.Sets/src/mage/cards/v/VarinaLichQueen.java b/Mage.Sets/src/mage/cards/v/VarinaLichQueen.java index 9022a33f65f..4a0134a0c22 100644 --- a/Mage.Sets/src/mage/cards/v/VarinaLichQueen.java +++ b/Mage.Sets/src/mage/cards/v/VarinaLichQueen.java @@ -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); } diff --git a/Mage.Sets/src/mage/cards/v/VictorysHerald.java b/Mage.Sets/src/mage/cards/v/VictorysHerald.java index ab63b432899..b9c60c00bd4 100644 --- a/Mage.Sets/src/mage/cards/v/VictorysHerald.java +++ b/Mage.Sets/src/mage/cards/v/VictorysHerald.java @@ -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); } diff --git a/Mage.Sets/src/mage/cards/v/VileConsumption.java b/Mage.Sets/src/mage/cards/v/VileConsumption.java index e20c97a0dd7..580a3f854b8 100644 --- a/Mage.Sets/src/mage/cards/v/VileConsumption.java +++ b/Mage.Sets/src/mage/cards/v/VileConsumption.java @@ -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) { diff --git a/Mage.Sets/src/mage/cards/v/VolcanicRush.java b/Mage.Sets/src/mage/cards/v/VolcanicRush.java index bba22177e64..4b37605618e 100644 --- a/Mage.Sets/src/mage/cards/v/VolcanicRush.java +++ b/Mage.Sets/src/mage/cards/v/VolcanicRush.java @@ -1,4 +1,3 @@ - package mage.cards.v; import java.util.UUID; @@ -10,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; /** * @@ -22,10 +21,10 @@ public final class VolcanicRush extends CardImpl { super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{4}{R}"); // Attacking creatures get +2/+0 and gain trample until end of turn. - Effect effect = new BoostAllEffect(2, 0, Duration.EndOfTurn, new FilterAttackingCreature(), false); + Effect effect = new BoostAllEffect(2, 0, Duration.EndOfTurn, StaticFilters.FILTER_ATTACKING_CREATURES, false); effect.setText("Attacking creatures get +2/+0"); this.getSpellAbility().addEffect(effect); - effect = new GainAbilityAllEffect(TrampleAbility.getInstance(), Duration.EndOfTurn, new FilterAttackingCreature(), false); + effect = new GainAbilityAllEffect(TrampleAbility.getInstance(), Duration.EndOfTurn, StaticFilters.FILTER_ATTACKING_CREATURES); effect.setText("and gain trample until end of turn"); this.getSpellAbility().addEffect(effect); } diff --git a/Mage.Sets/src/mage/cards/w/WarHorn.java b/Mage.Sets/src/mage/cards/w/WarHorn.java index 9e47661ee2e..643d07e0204 100644 --- a/Mage.Sets/src/mage/cards/w/WarHorn.java +++ b/Mage.Sets/src/mage/cards/w/WarHorn.java @@ -1,4 +1,3 @@ - package mage.cards.w; import java.util.UUID; @@ -8,8 +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.FilterAttackingCreature; +import mage.filter.StaticFilters; /** * @@ -22,8 +20,7 @@ public final class WarHorn extends CardImpl { super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT},"{3}"); // Attacking creatures you control get +1/+0. - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostControlledEffect(1, 0, - Duration.WhileOnBattlefield, new FilterAttackingCreature(), false))); + this.addAbility(new SimpleStaticAbility(new BoostControlledEffect(1, 0, Duration.WhileOnBattlefield, StaticFilters.FILTER_ATTACKING_CREATURES))); } private WarHorn(final WarHorn card) { diff --git a/Mage.Sets/src/mage/cards/w/WarmongerHellkite.java b/Mage.Sets/src/mage/cards/w/WarmongerHellkite.java index 5fdd519484b..87cc9ce01d9 100644 --- a/Mage.Sets/src/mage/cards/w/WarmongerHellkite.java +++ b/Mage.Sets/src/mage/cards/w/WarmongerHellkite.java @@ -1,4 +1,3 @@ - package mage.cards.w; import java.util.UUID; @@ -13,11 +12,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 static mage.filter.StaticFilters.FILTER_PERMANENT_CREATURES; -import mage.filter.common.FilterAttackingCreature; +import mage.constants.SubType; +import mage.filter.StaticFilters; /** * @@ -36,12 +33,10 @@ public final class WarmongerHellkite extends CardImpl { this.addAbility(FlyingAbility.getInstance()); // All creatures attack each combat if able. - Effect effect = new AttacksIfAbleAllEffect(FILTER_PERMANENT_CREATURES, Duration.WhileOnBattlefield, true); - effect.setText("All creatures attack each combat if able"); - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, effect)); + this.addAbility(new SimpleStaticAbility(new AttacksIfAbleAllEffect(StaticFilters.FILTER_PERMANENT_ALL_CREATURES, Duration.WhileOnBattlefield, true))); // {1}{R}: Attacking creatures get +1/+0 until end of turn. - this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostAllEffect(1, 0, Duration.EndOfTurn, new FilterAttackingCreature("Attacking creatures"), false), new ManaCostsImpl("{1}{R}"))); + this.addAbility(new SimpleActivatedAbility(new BoostAllEffect(1, 0, Duration.EndOfTurn, StaticFilters.FILTER_ATTACKING_CREATURES, false), new ManaCostsImpl("{1}{R}"))); } diff --git a/Mage.Sets/src/mage/cards/w/Weakstone.java b/Mage.Sets/src/mage/cards/w/Weakstone.java index 1e3dc102246..fa8b4ad1c4e 100644 --- a/Mage.Sets/src/mage/cards/w/Weakstone.java +++ b/Mage.Sets/src/mage/cards/w/Weakstone.java @@ -8,9 +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.FilterCreaturePermanent; -import mage.filter.predicate.permanent.AttackingPredicate; +import mage.filter.StaticFilters; /** * @@ -18,17 +16,11 @@ import mage.filter.predicate.permanent.AttackingPredicate; */ public final class Weakstone extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("attacking creatures"); - - static { - filter.add(AttackingPredicate.instance); - } - public Weakstone(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 Weakstone(final Weakstone card) { diff --git a/Mage.Sets/src/mage/cards/z/ZombieAssassin.java b/Mage.Sets/src/mage/cards/z/ZombieAssassin.java index eda47e3dd85..90b85873a7b 100644 --- a/Mage.Sets/src/mage/cards/z/ZombieAssassin.java +++ b/Mage.Sets/src/mage/cards/z/ZombieAssassin.java @@ -13,7 +13,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.Target; import mage.target.common.TargetCardInYourGraveyard; @@ -36,7 +35,7 @@ public final class ZombieAssassin extends CardImpl { Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DestroyTargetEffect(true), new TapSourceCost()); Target target = new TargetCreaturePermanent(StaticFilters.FILTER_PERMANENT_CREATURE_NON_BLACK); ability.addTarget(target); - ability.addCost(new ExileFromGraveCost(new TargetCardInYourGraveyard(2,2,new FilterCard("cards from your graveyard")))); + ability.addCost(new ExileFromGraveCost(new TargetCardInYourGraveyard(2,2,StaticFilters.FILTER_CARDS_FROM_YOUR_GRAVEYARD))); ability.addCost(new ExileSourceCost()); this.addAbility(ability); } diff --git a/Mage/src/main/java/mage/abilities/dynamicvalue/common/PermanentsOnBattlefieldCount.java b/Mage/src/main/java/mage/abilities/dynamicvalue/common/PermanentsOnBattlefieldCount.java index a9a85c54a34..ff959daaa48 100644 --- a/Mage/src/main/java/mage/abilities/dynamicvalue/common/PermanentsOnBattlefieldCount.java +++ b/Mage/src/main/java/mage/abilities/dynamicvalue/common/PermanentsOnBattlefieldCount.java @@ -63,6 +63,6 @@ public class PermanentsOnBattlefieldCount implements DynamicValue { @Override public String getMessage() { - return filter.getMessage(); + return multiplier == null ? "the number of " + filter.getMessage() : filter.getMessage(); } } diff --git a/Mage/src/main/java/mage/abilities/effects/common/continuous/BoostAllEffect.java b/Mage/src/main/java/mage/abilities/effects/common/continuous/BoostAllEffect.java index 1ba895ef6e6..f7a92d70af3 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/continuous/BoostAllEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/continuous/BoostAllEffect.java @@ -1,7 +1,5 @@ - package mage.abilities.effects.common.continuous; -import java.util.Iterator; import mage.MageObjectReference; import mage.abilities.Ability; import mage.abilities.dynamicvalue.DynamicValue; @@ -11,11 +9,15 @@ import mage.constants.Duration; import mage.constants.Layer; import mage.constants.Outcome; import mage.constants.SubLayer; +import mage.filter.StaticFilters; import mage.filter.common.FilterCreaturePermanent; import mage.game.Game; import mage.game.permanent.Permanent; import mage.util.CardUtil; +import java.util.Iterator; +import java.util.Locale; + /** * * @author BetaSteward_at_googlemail.com @@ -33,11 +35,11 @@ public class BoostAllEffect extends ContinuousEffectImpl { } public BoostAllEffect(DynamicValue power, DynamicValue toughness, Duration duration) { - this(power, toughness, duration, new FilterCreaturePermanent("all creatures"), false); + this(power, toughness, duration, StaticFilters.FILTER_PERMANENT_ALL_CREATURES, false); } public BoostAllEffect(int power, int toughness, Duration duration, boolean excludeSource) { - this(power, toughness, duration, new FilterCreaturePermanent("all creatures"), excludeSource); + this(power, toughness, duration, StaticFilters.FILTER_PERMANENT_ALL_CREATURES, excludeSource); } public BoostAllEffect(int power, int toughness, Duration duration, FilterCreaturePermanent filter, boolean excludeSource) { @@ -147,10 +149,12 @@ public class BoostAllEffect extends ContinuousEffectImpl { protected void setText() { StringBuilder sb = new StringBuilder(); - if (excludeSource) { + boolean each = filter.getMessage().toLowerCase(Locale.ENGLISH).startsWith("each"); + if (excludeSource && !each) { sb.append("other "); } - sb.append(filter.getMessage()).append(" get "); + sb.append(filter.getMessage()); + sb.append(each ? " gets " : " get "); sb.append(CardUtil.getBoostText(power, toughness, duration)); staticText = sb.toString(); } diff --git a/Mage/src/main/java/mage/abilities/effects/common/continuous/BoostControlledEffect.java b/Mage/src/main/java/mage/abilities/effects/common/continuous/BoostControlledEffect.java index 994d6dadf2f..f6e1f823de9 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/continuous/BoostControlledEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/continuous/BoostControlledEffect.java @@ -16,6 +16,7 @@ import mage.game.permanent.Permanent; import mage.util.CardUtil; import java.util.Iterator; +import java.util.Locale; /** * @author BetaSteward_at_googlemail.com @@ -127,10 +128,12 @@ public class BoostControlledEffect extends ContinuousEffectImpl { private void setText() { StringBuilder sb = new StringBuilder(); - if (excludeSource) { + boolean each = filter.getMessage().toLowerCase(Locale.ENGLISH).startsWith("each"); + if (excludeSource && !each) { sb.append("other "); } - sb.append(filter.getMessage()).append(" you control get "); + sb.append(filter.getMessage()).append(" you control "); + sb.append(each ? "gets " : "get "); sb.append(CardUtil.getBoostText(power, toughness, duration)); staticText = sb.toString(); } diff --git a/Mage/src/main/java/mage/abilities/effects/common/continuous/BoostSourceEffect.java b/Mage/src/main/java/mage/abilities/effects/common/continuous/BoostSourceEffect.java index ef7c6eef928..2523c515157 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/continuous/BoostSourceEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/continuous/BoostSourceEffect.java @@ -30,18 +30,23 @@ public class BoostSourceEffect extends ContinuousEffectImpl implements SourceEff this(power, toughness, duration, false); } + public BoostSourceEffect(DynamicValue power, DynamicValue toughness, Duration duration, boolean lockedIn) { + this(power, toughness, duration, lockedIn, "{this}"); + } + /** * @param power * @param toughness * @param duration * @param lockedIn if true, power and toughness will be calculated only once, when the ability resolves + * @param description */ - public BoostSourceEffect(DynamicValue power, DynamicValue toughness, Duration duration, boolean lockedIn) { + public BoostSourceEffect(DynamicValue power, DynamicValue toughness, Duration duration, boolean lockedIn, String description) { super(duration, Layer.PTChangingEffects_7, SubLayer.ModifyPT_7c, Outcome.BoostCreature); this.power = power; this.toughness = toughness; this.lockedIn = lockedIn; - this.staticText = "{this} gets " + CardUtil.getBoostText(power, toughness, duration); + this.staticText = description + " gets " + CardUtil.getBoostText(power, toughness, duration); } public BoostSourceEffect(final BoostSourceEffect effect) { diff --git a/Mage/src/main/java/mage/abilities/effects/common/continuous/GainAbilityAllEffect.java b/Mage/src/main/java/mage/abilities/effects/common/continuous/GainAbilityAllEffect.java index 5f576165121..428111ff9df 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/continuous/GainAbilityAllEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/continuous/GainAbilityAllEffect.java @@ -137,20 +137,15 @@ public class GainAbilityAllEffect extends ContinuousEffectImpl { StringBuilder sb = new StringBuilder(); boolean quotes = forceQuotes || (ability instanceof SimpleActivatedAbility) || (ability instanceof TriggeredAbility); - if (excludeSource) { - sb.append("Other "); + boolean each = filter.getMessage().toLowerCase(Locale.ENGLISH).startsWith("each"); + if (excludeSource && !each) { + sb.append("other "); } sb.append(filter.getMessage()); if (duration == Duration.WhileOnBattlefield) { - if (filter.getMessage().toLowerCase(Locale.ENGLISH).startsWith("each")) { - sb.append(" has "); - } else { - sb.append(" have "); - } - } else if (filter.getMessage().toLowerCase(Locale.ENGLISH).startsWith("each")) { - sb.append(" gains "); + sb.append(each ? " has " : " have "); } else { - sb.append(" gain "); + sb.append(each ? " gains " : " gain "); } if (quotes) { sb.append('"'); diff --git a/Mage/src/main/java/mage/abilities/keyword/BattleCryAbility.java b/Mage/src/main/java/mage/abilities/keyword/BattleCryAbility.java index 4203ecfd058..1057188981f 100644 --- a/Mage/src/main/java/mage/abilities/keyword/BattleCryAbility.java +++ b/Mage/src/main/java/mage/abilities/keyword/BattleCryAbility.java @@ -7,8 +7,10 @@ import mage.filter.common.FilterAttackingCreature; public class BattleCryAbility extends AttacksTriggeredAbility { + private static final FilterAttackingCreature filter = new FilterAttackingCreature(); + public BattleCryAbility() { - super(new BoostControlledEffect(1, 0, Duration.EndOfTurn, new FilterAttackingCreature(), true), false); + super(new BoostControlledEffect(1, 0, Duration.EndOfTurn, filter, true), false); } public BattleCryAbility(final BattleCryAbility ability) { diff --git a/Mage/src/main/java/mage/filter/StaticFilters.java b/Mage/src/main/java/mage/filter/StaticFilters.java index 7c64b9fe624..e79d4711e1e 100644 --- a/Mage/src/main/java/mage/filter/StaticFilters.java +++ b/Mage/src/main/java/mage/filter/StaticFilters.java @@ -117,6 +117,12 @@ public final class StaticFilters { FILTER_CARD_FROM_YOUR_GRAVEYARD.setLockedFilter(true); } + public static final FilterCard FILTER_CARDS_FROM_YOUR_GRAVEYARD = new FilterCard("cards from your graveyard"); + + static { + FILTER_CARDS_FROM_YOUR_GRAVEYARD.setLockedFilter(true); + } + public static final FilterCard FILTER_CARD_INSTANT_OR_SORCERY_FROM_YOUR_GRAVEYARD = new FilterInstantOrSorceryCard("instant or sorcery card from your graveyard"); static { @@ -563,6 +569,12 @@ public final class StaticFilters { FILTER_PERMANENT_CREATURES.setLockedFilter(true); } + public static final FilterCreaturePermanent FILTER_PERMANENT_ALL_CREATURES = new FilterCreaturePermanent("all creatures"); + + static { + FILTER_PERMANENT_ALL_CREATURES.setLockedFilter(true); + } + public static final FilterCreaturePermanent FILTER_PERMANENT_CREATURES_CONTROLLED = new FilterCreaturePermanent("creatures you control"); static { @@ -762,6 +774,12 @@ public final class StaticFilters { FILTER_ATTACKING_OR_BLOCKING_CREATURES.setLockedFilter(true); } + public static final FilterBlockingCreature FILTER_BLOCKING_CREATURES = new FilterBlockingCreature("blocking creatures"); + + static { + FILTER_BLOCKING_CREATURES.setLockedFilter(true); + } + public static final FilterPermanent FILTER_PERMANENT_AURA = new FilterPermanent(); static { diff --git a/Mage/src/main/java/mage/game/permanent/token/BirdSoldierToken.java b/Mage/src/main/java/mage/game/permanent/token/BirdSoldierToken.java index 6360df3ff7d..3ea235fbb88 100644 --- a/Mage/src/main/java/mage/game/permanent/token/BirdSoldierToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/BirdSoldierToken.java @@ -13,7 +13,7 @@ import mage.abilities.keyword.FlyingAbility; public final class BirdSoldierToken extends TokenImpl { public BirdSoldierToken() { - super("Bird Soldier", "1/1 white Bird Soldier creature with flying"); + super("Bird Soldier", "1/1 white Bird Soldier creature token with flying"); cardType.add(CardType.CREATURE); subtype.add(SubType.BIRD);