diff --git a/Mage.Sets/src/mage/cards/a/AbyssalGatekeeper.java b/Mage.Sets/src/mage/cards/a/AbyssalGatekeeper.java index c9384ed084a..3e2dab45c5a 100644 --- a/Mage.Sets/src/mage/cards/a/AbyssalGatekeeper.java +++ b/Mage.Sets/src/mage/cards/a/AbyssalGatekeeper.java @@ -1,4 +1,3 @@ - package mage.cards.a; import java.util.UUID; @@ -9,7 +8,7 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.StaticFilters; /** * @@ -24,7 +23,7 @@ public final class AbyssalGatekeeper extends CardImpl { this.toughness = new MageInt(1); // When Abyssal Gatekeeper dies, each player sacrifices a creature. - this.addAbility(new DiesSourceTriggeredAbility(new SacrificeAllEffect(1, new FilterControlledCreaturePermanent("creature")))); + this.addAbility(new DiesSourceTriggeredAbility(new SacrificeAllEffect(1, StaticFilters.FILTER_PERMANENT_CREATURE))); } private AbyssalGatekeeper(final AbyssalGatekeeper card) { diff --git a/Mage.Sets/src/mage/cards/a/AbyssalGorestalker.java b/Mage.Sets/src/mage/cards/a/AbyssalGorestalker.java index ac29465f60c..c69e284d0d9 100644 --- a/Mage.Sets/src/mage/cards/a/AbyssalGorestalker.java +++ b/Mage.Sets/src/mage/cards/a/AbyssalGorestalker.java @@ -7,8 +7,7 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; -import mage.filter.common.FilterControlledCreaturePermanent; -import mage.filter.common.FilterControlledPermanent; +import mage.filter.StaticFilters; import java.util.UUID; @@ -17,8 +16,6 @@ import java.util.UUID; */ public final class AbyssalGorestalker extends CardImpl { - private static final FilterControlledPermanent filter = new FilterControlledCreaturePermanent("creatures"); - public AbyssalGorestalker(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{B}{B}"); @@ -27,7 +24,7 @@ public final class AbyssalGorestalker extends CardImpl { this.toughness = new MageInt(6); // When Abyssal Gorestalker enters the battlefield, each player sacrifices two creatures. - this.addAbility(new EntersBattlefieldTriggeredAbility(new SacrificeAllEffect(2, filter))); + this.addAbility(new EntersBattlefieldTriggeredAbility(new SacrificeAllEffect(2, StaticFilters.FILTER_PERMANENT_CREATURES))); } private AbyssalGorestalker(final AbyssalGorestalker card) { diff --git a/Mage.Sets/src/mage/cards/a/AggravatedAssault.java b/Mage.Sets/src/mage/cards/a/AggravatedAssault.java index f25b116e636..db32fbfd80a 100644 --- a/Mage.Sets/src/mage/cards/a/AggravatedAssault.java +++ b/Mage.Sets/src/mage/cards/a/AggravatedAssault.java @@ -1,4 +1,3 @@ - package mage.cards.a; import java.util.UUID; @@ -11,7 +10,7 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Zone; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.StaticFilters; /** * @@ -22,9 +21,8 @@ public final class AggravatedAssault extends CardImpl { public AggravatedAssault(UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{2}{R}"); - // {3}{R}{R}: Untap all creatures you control. After this main phase, there is an additional combat phase followed by an additional main phase. Activate this ability only any time you could cast a sorcery. - Ability ability = new ActivateAsSorceryActivatedAbility(Zone.BATTLEFIELD, new UntapAllControllerEffect(new FilterControlledCreaturePermanent(), "Untap all creatures you control"), new ManaCostsImpl<>("{3}{R}{R}")); + Ability ability = new ActivateAsSorceryActivatedAbility(Zone.BATTLEFIELD, new UntapAllControllerEffect(StaticFilters.FILTER_CONTROLLED_CREATURES, "Untap all creatures you control"), new ManaCostsImpl<>("{3}{R}{R}")); ability.addEffect(new AddCombatAndMainPhaseEffect()); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/a/AjaniSteadfast.java b/Mage.Sets/src/mage/cards/a/AjaniSteadfast.java index 5efe32bdadf..b4b2ed40ac2 100644 --- a/Mage.Sets/src/mage/cards/a/AjaniSteadfast.java +++ b/Mage.Sets/src/mage/cards/a/AjaniSteadfast.java @@ -19,7 +19,7 @@ import mage.constants.SubType; import mage.constants.SuperType; import mage.constants.TargetController; import mage.counters.CounterType; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.StaticFilters; import mage.filter.common.FilterPlaneswalkerPermanent; import mage.filter.predicate.mageobject.AnotherPredicate; import mage.game.command.emblems.AjaniSteadfastEmblem; @@ -62,7 +62,7 @@ public final class AjaniSteadfast extends CardImpl { this.addAbility(ability); // -2: Put a +1/+1 counter on each creature you control and a loyalty counter on each other planeswalker you control. - ability = new LoyaltyAbility(new AddCountersAllEffect(CounterType.P1P1.createInstance(), new FilterControlledCreaturePermanent()), -2); + ability = new LoyaltyAbility(new AddCountersAllEffect(CounterType.P1P1.createInstance(), StaticFilters.FILTER_CONTROLLED_CREATURE), -2); effect = new AddCountersAllEffect(CounterType.LOYALTY.createInstance(), filter); effect.setText("and a loyalty counter on each other planeswalker you control"); ability.addEffect(effect); diff --git a/Mage.Sets/src/mage/cards/a/AjaniUnyielding.java b/Mage.Sets/src/mage/cards/a/AjaniUnyielding.java index 97708026976..4ad32c3097d 100644 --- a/Mage.Sets/src/mage/cards/a/AjaniUnyielding.java +++ b/Mage.Sets/src/mage/cards/a/AjaniUnyielding.java @@ -14,7 +14,7 @@ import mage.constants.SuperType; import mage.constants.TargetController; import mage.constants.Zone; import mage.counters.CounterType; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.StaticFilters; import mage.filter.common.FilterPermanentCard; import mage.filter.common.FilterPlaneswalkerPermanent; import mage.filter.predicate.Predicates; @@ -51,7 +51,7 @@ public final class AjaniUnyielding extends CardImpl { this.addAbility(ajaniAbility2); // -9: Put five +1/+1 counters on each creature you control and five loyalty counters on each other planeswalker you control. - LoyaltyAbility ajaniAbility3 = new LoyaltyAbility(new AddCountersAllEffect(CounterType.P1P1.createInstance(5), new FilterControlledCreaturePermanent()), -9); + LoyaltyAbility ajaniAbility3 = new LoyaltyAbility(new AddCountersAllEffect(CounterType.P1P1.createInstance(5), StaticFilters.FILTER_CONTROLLED_CREATURE), -9); ajaniAbility3.addEffect(new AddCountersAllEffect(CounterType.LOYALTY.createInstance(5), planeswalkerFilter).setText("and five loyalty counters on each other planeswalker you control")); this.addAbility(ajaniAbility3); } diff --git a/Mage.Sets/src/mage/cards/a/AkoumFlameseeker.java b/Mage.Sets/src/mage/cards/a/AkoumFlameseeker.java index 08d32eca21a..595b2239ced 100644 --- a/Mage.Sets/src/mage/cards/a/AkoumFlameseeker.java +++ b/Mage.Sets/src/mage/cards/a/AkoumFlameseeker.java @@ -1,22 +1,19 @@ - package mage.cards.a; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; -import mage.abilities.common.SimpleActivatedAbility; -import mage.abilities.costs.common.TapSourceCost; -import mage.abilities.costs.common.TapTargetCost; +import mage.abilities.abilityword.CohortAbility; import mage.abilities.effects.OneShotEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.cards.Cards; -import mage.constants.*; -import mage.filter.common.FilterControlledPermanent; -import mage.filter.predicate.permanent.TappedPredicate; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.SubType; import mage.game.Game; import mage.players.Player; -import mage.target.common.TargetControlledPermanent; + +import java.util.UUID; /** * @@ -24,13 +21,6 @@ import mage.target.common.TargetControlledPermanent; */ public final class AkoumFlameseeker extends CardImpl { - private static final FilterControlledPermanent filter = new FilterControlledPermanent("an untapped Ally you control"); - - static { - filter.add(SubType.ALLY.getPredicate()); - filter.add(TappedPredicate.UNTAPPED); - } - public AkoumFlameseeker(UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{R}"); this.subtype.add(SubType.HUMAN); @@ -40,11 +30,7 @@ public final class AkoumFlameseeker extends CardImpl { this.toughness = new MageInt(2); // Cohort — {T}, Tap an untapped Ally you control: Discard a card. If you do, draw a card. - Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, - new AkoumFlameseekerEffect(), new TapSourceCost()); - ability.addCost(new TapTargetCost(new TargetControlledPermanent(filter))); - ability.setAbilityWord(AbilityWord.COHORT); - this.addAbility(ability); + this.addAbility(new CohortAbility(new AkoumFlameseekerEffect())); } private AkoumFlameseeker(final AkoumFlameseeker card) { diff --git a/Mage.Sets/src/mage/cards/a/AliveWell.java b/Mage.Sets/src/mage/cards/a/AliveWell.java index 7694010fe5d..59196d7507b 100644 --- a/Mage.Sets/src/mage/cards/a/AliveWell.java +++ b/Mage.Sets/src/mage/cards/a/AliveWell.java @@ -1,4 +1,3 @@ - package mage.cards.a; import java.util.UUID; @@ -10,7 +9,7 @@ import mage.cards.SplitCard; import mage.constants.CardType; import mage.constants.Outcome; import mage.constants.SpellAbilityType; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.StaticFilters; import mage.game.Game; import mage.game.permanent.token.CentaurToken; import mage.players.Player; @@ -46,8 +45,6 @@ public final class AliveWell extends SplitCard { class WellEffect extends OneShotEffect { - private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent(); - public WellEffect() { super(Outcome.GainLife); staticText = "You gain 2 life for each creature you control"; @@ -66,7 +63,7 @@ class WellEffect extends OneShotEffect { public boolean apply(Game game, Ability source) { Player player = game.getPlayer(source.getControllerId()); if (player != null) { - int life = 2 * game.getBattlefield().count(filter, source.getControllerId(), source, game); + int life = 2 * game.getBattlefield().count(StaticFilters.FILTER_CONTROLLED_CREATURE, source.getControllerId(), source, game); player.gainLife(life, game, source); } return true; diff --git a/Mage.Sets/src/mage/cards/a/AllyEncampment.java b/Mage.Sets/src/mage/cards/a/AllyEncampment.java index b9c25241107..6912416ccae 100644 --- a/Mage.Sets/src/mage/cards/a/AllyEncampment.java +++ b/Mage.Sets/src/mage/cards/a/AllyEncampment.java @@ -1,4 +1,3 @@ - package mage.cards.a; import java.util.UUID; @@ -17,8 +16,8 @@ import mage.constants.CardType; import mage.constants.SubType; import mage.constants.Zone; import mage.filter.FilterSpell; -import mage.filter.common.FilterControlledCreaturePermanent; -import mage.target.common.TargetControlledCreaturePermanent; +import mage.filter.common.FilterControlledPermanent; +import mage.target.common.TargetControlledPermanent; /** * @@ -26,10 +25,11 @@ import mage.target.common.TargetControlledCreaturePermanent; */ public final class AllyEncampment extends CardImpl { - private static final FilterSpell FILTER = new FilterSpell("an Ally spell"); + private static final FilterSpell filterSpell = new FilterSpell("an Ally spell"); + private static final FilterControlledPermanent filterPermanent = new FilterControlledPermanent(SubType.ALLY, "Ally you control"); static { - FILTER.add(SubType.ALLY.getPredicate()); + filterSpell.add(SubType.ALLY.getPredicate()); } public AllyEncampment(UUID ownerId, CardSetInfo setInfo) { @@ -39,13 +39,13 @@ public final class AllyEncampment extends CardImpl { this.addAbility(new ColorlessManaAbility()); // {T} Add one mana of any color. Spend this mana only to cast an Ally spell. - this.addAbility(new ConditionalAnyColorManaAbility(new TapSourceCost(), 1, new ConditionalSpellManaBuilder(FILTER), true)); + this.addAbility(new ConditionalAnyColorManaAbility(new TapSourceCost(), 1, new ConditionalSpellManaBuilder(filterSpell), true)); // {1}, {T}, Sacrifice Ally Encampment: Return target Ally you control to its owner's hand. Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new ReturnToHandTargetEffect(), new GenericManaCost(1)); ability.addCost(new TapSourceCost()); ability.addCost(new SacrificeSourceCost()); - ability.addTarget(new TargetControlledCreaturePermanent(new FilterControlledCreaturePermanent(SubType.ALLY, "Ally you control"))); + ability.addTarget(new TargetControlledPermanent(filterPermanent)); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/a/ArachnusSpinner.java b/Mage.Sets/src/mage/cards/a/ArachnusSpinner.java index 855b318d42a..c3fd6f9972d 100644 --- a/Mage.Sets/src/mage/cards/a/ArachnusSpinner.java +++ b/Mage.Sets/src/mage/cards/a/ArachnusSpinner.java @@ -1,4 +1,3 @@ - package mage.cards.a; import java.util.UUID; @@ -16,16 +15,13 @@ import mage.constants.Outcome; import mage.constants.SubType; import mage.constants.Zone; import mage.filter.FilterCard; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.common.FilterControlledPermanent; import mage.filter.predicate.mageobject.NamePredicate; import mage.filter.predicate.permanent.TappedPredicate; import mage.game.Game; import mage.game.permanent.Permanent; import mage.players.Player; -import mage.target.common.TargetCardInLibrary; -import mage.target.common.TargetCardInYourGraveyard; -import mage.target.common.TargetControlledCreaturePermanent; -import mage.target.common.TargetCreaturePermanent; +import mage.target.common.*; /** * @@ -33,7 +29,7 @@ import mage.target.common.TargetCreaturePermanent; */ public final class ArachnusSpinner extends CardImpl { - private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("untapped Spider you control"); + private static final FilterControlledPermanent filter = new FilterControlledPermanent("untapped Spider you control"); static { filter.add(SubType.SPIDER.getPredicate()); @@ -52,7 +48,7 @@ public final class ArachnusSpinner extends CardImpl { // Tap an untapped Spider you control: Search your graveyard and/or library for a card named Arachnus Web and put it onto the battlefield attached to target creature. If you search your library this way, shuffle it. SimpleActivatedAbility ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new ArachnusSpinnerEffect(), - new TapTargetCost(new TargetControlledCreaturePermanent(1, 1, filter, false))); + new TapTargetCost(new TargetControlledPermanent(1, 1, filter, false))); ability.addTarget(new TargetCreaturePermanent()); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/a/ArchdemonOfGreed.java b/Mage.Sets/src/mage/cards/a/ArchdemonOfGreed.java index da8abdf3155..cf60947b69f 100644 --- a/Mage.Sets/src/mage/cards/a/ArchdemonOfGreed.java +++ b/Mage.Sets/src/mage/cards/a/ArchdemonOfGreed.java @@ -11,13 +11,11 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Outcome; import mage.constants.SubType; -import mage.constants.TargetController; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.common.FilterControlledPermanent; import mage.game.Game; import mage.game.events.GameEvent; import mage.game.permanent.Permanent; import mage.players.Player; -import mage.target.common.TargetControlledPermanent; import mage.target.common.TargetSacrifice; import java.util.UUID; @@ -27,11 +25,10 @@ import java.util.UUID; */ public final class ArchdemonOfGreed extends CardImpl { - private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("Human"); + private static final FilterControlledPermanent filter = new FilterControlledPermanent("Human"); static { filter.add(SubType.HUMAN.getPredicate()); - filter.add(TargetController.YOU.getControllerPredicate()); } public ArchdemonOfGreed(UUID ownerId, CardSetInfo setInfo) { diff --git a/Mage.Sets/src/mage/cards/a/ArmsDealer.java b/Mage.Sets/src/mage/cards/a/ArmsDealer.java index 652e00bb8a4..0b7831a4c5b 100644 --- a/Mage.Sets/src/mage/cards/a/ArmsDealer.java +++ b/Mage.Sets/src/mage/cards/a/ArmsDealer.java @@ -1,4 +1,3 @@ - package mage.cards.a; import java.util.UUID; @@ -12,8 +11,7 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; import mage.constants.Zone; -import mage.filter.common.FilterControlledCreaturePermanent; -import mage.target.common.TargetControlledPermanent; +import mage.filter.common.FilterControlledPermanent; import mage.target.common.TargetCreaturePermanent; /** @@ -22,11 +20,7 @@ import mage.target.common.TargetCreaturePermanent; */ public final class ArmsDealer extends CardImpl { - private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("Goblin"); - - static { - filter.add(SubType.GOBLIN.getPredicate()); - } + private static final FilterControlledPermanent filter = new FilterControlledPermanent(SubType.GOBLIN, "Goblin"); public ArmsDealer(UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{R}"); diff --git a/Mage.Sets/src/mage/cards/a/AshenmoorCohort.java b/Mage.Sets/src/mage/cards/a/AshenmoorCohort.java index 6a3987ad6da..778edcdb755 100644 --- a/Mage.Sets/src/mage/cards/a/AshenmoorCohort.java +++ b/Mage.Sets/src/mage/cards/a/AshenmoorCohort.java @@ -1,4 +1,3 @@ - package mage.cards.a; import mage.MageInt; @@ -32,7 +31,7 @@ public final class AshenmoorCohort extends CardImpl { filter.add(AnotherPredicate.instance); } - private static final String rule = "Ashenmoor Cohort gets +1/+1 as long as you control another black creature"; + private static final String rule = "{this} gets +1/+1 as long as you control another black creature"; public AshenmoorCohort(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{5}{B}"); diff --git a/Mage.Sets/src/mage/cards/b/BankruptInBlood.java b/Mage.Sets/src/mage/cards/b/BankruptInBlood.java index d5031b9a277..c73be4747ff 100644 --- a/Mage.Sets/src/mage/cards/b/BankruptInBlood.java +++ b/Mage.Sets/src/mage/cards/b/BankruptInBlood.java @@ -5,10 +5,7 @@ import mage.abilities.effects.common.DrawCardSourceControllerEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.filter.common.FilterControlledCreaturePermanent; -import mage.filter.common.FilterControlledPermanent; -import mage.target.common.TargetControlledPermanent; -import mage.target.common.TargetSacrifice; +import mage.filter.StaticFilters; import java.util.UUID; @@ -17,14 +14,11 @@ import java.util.UUID; */ public final class BankruptInBlood extends CardImpl { - private static final FilterControlledPermanent filter - = new FilterControlledCreaturePermanent("creatures"); - public BankruptInBlood(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{1}{B}"); // As an additional cost to cast this spell, sacrifice two creatures. - this.getSpellAbility().addCost(new SacrificeTargetCost(2, filter)); + this.getSpellAbility().addCost(new SacrificeTargetCost(2, StaticFilters.FILTER_PERMANENT_CREATURES)); // Draw three cards. this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(3)); diff --git a/Mage.Sets/src/mage/cards/b/BarterInBlood.java b/Mage.Sets/src/mage/cards/b/BarterInBlood.java index 648986e563e..5fb47a98c54 100644 --- a/Mage.Sets/src/mage/cards/b/BarterInBlood.java +++ b/Mage.Sets/src/mage/cards/b/BarterInBlood.java @@ -4,8 +4,7 @@ import mage.abilities.effects.common.SacrificeAllEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.filter.common.FilterControlledCreaturePermanent; -import mage.filter.common.FilterControlledPermanent; +import mage.filter.StaticFilters; import java.util.UUID; @@ -14,13 +13,11 @@ import java.util.UUID; */ public final class BarterInBlood extends CardImpl { - private static final FilterControlledPermanent filter = new FilterControlledCreaturePermanent("creatures"); - public BarterInBlood(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{2}{B}{B}"); // Each player sacrifices two creatures. - this.getSpellAbility().addEffect(new SacrificeAllEffect(2, filter)); + this.getSpellAbility().addEffect(new SacrificeAllEffect(2, StaticFilters.FILTER_PERMANENT_CREATURES)); } private BarterInBlood(final BarterInBlood card) { diff --git a/Mage.Sets/src/mage/cards/b/BattletideAlchemist.java b/Mage.Sets/src/mage/cards/b/BattletideAlchemist.java index cb87497f095..301bd12b158 100644 --- a/Mage.Sets/src/mage/cards/b/BattletideAlchemist.java +++ b/Mage.Sets/src/mage/cards/b/BattletideAlchemist.java @@ -8,11 +8,10 @@ import mage.abilities.effects.PreventionEffectImpl; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.*; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.common.FilterControlledPermanent; import mage.game.Game; import mage.game.events.DamageEvent; import mage.game.events.GameEvent; -import mage.game.events.GameEvent.EventType; import mage.game.events.PreventDamageEvent; import mage.game.events.PreventedDamageEvent; import mage.players.Player; @@ -66,7 +65,7 @@ class BattletideAlchemistEffect extends PreventionEffectImpl { Player controller = game.getPlayer(source.getControllerId()); Player targetPlayer = game.getPlayer(event.getTargetId()); if (controller != null && targetPlayer != null) { - int numberOfClericsControlled = new PermanentsOnBattlefieldCount(new FilterControlledCreaturePermanent(SubType.CLERIC, "Clerics")).calculate(game, source, this); + int numberOfClericsControlled = new PermanentsOnBattlefieldCount(new FilterControlledPermanent(SubType.CLERIC, "Clerics")).calculate(game, source, this); int toPrevent = Math.min(numberOfClericsControlled, event.getAmount()); if (toPrevent > 0 && controller.chooseUse(Outcome.PreventDamage, "Prevent " + toPrevent + " damage to " + targetPlayer.getName() + '?', source, game)) { GameEvent preventEvent = new PreventDamageEvent(event.getTargetId(), source.getSourceId(), source, source.getControllerId(), toPrevent, ((DamageEvent) event).isCombatDamage()); diff --git a/Mage.Sets/src/mage/cards/b/Borborygmos.java b/Mage.Sets/src/mage/cards/b/Borborygmos.java index 38e25e6fb4b..e84186eb6e7 100644 --- a/Mage.Sets/src/mage/cards/b/Borborygmos.java +++ b/Mage.Sets/src/mage/cards/b/Borborygmos.java @@ -12,7 +12,7 @@ import mage.constants.CardType; import mage.constants.SubType; import mage.constants.SuperType; import mage.counters.CounterType; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.StaticFilters; /** * @@ -31,7 +31,7 @@ public final class Borborygmos extends CardImpl { this.addAbility(TrampleAbility.getInstance()); // Whenever Borborygmos deals combat damage to a player, put a +1/+1 counter on each creature you control. - this.addAbility(new DealsCombatDamageToAPlayerTriggeredAbility(new AddCountersAllEffect(CounterType.P1P1.createInstance(), new FilterControlledCreaturePermanent()), false)); + this.addAbility(new DealsCombatDamageToAPlayerTriggeredAbility(new AddCountersAllEffect(CounterType.P1P1.createInstance(), StaticFilters.FILTER_CONTROLLED_CREATURE), false)); } private Borborygmos(final Borborygmos card) { diff --git a/Mage.Sets/src/mage/cards/b/BoundDetermined.java b/Mage.Sets/src/mage/cards/b/BoundDetermined.java index 605d24d4026..1c183db8c44 100644 --- a/Mage.Sets/src/mage/cards/b/BoundDetermined.java +++ b/Mage.Sets/src/mage/cards/b/BoundDetermined.java @@ -18,14 +18,14 @@ import mage.constants.Outcome; import mage.constants.SpellAbilityType; import mage.constants.Zone; import mage.filter.FilterCard; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.StaticFilters; import mage.game.Game; import mage.game.events.GameEvent; import mage.game.permanent.Permanent; import mage.game.stack.Spell; import mage.players.Player; import mage.target.common.TargetCardInYourGraveyard; -import mage.target.common.TargetControlledPermanent; +import mage.target.common.TargetSacrifice; /** * @@ -79,27 +79,27 @@ class BoundEffect extends OneShotEffect { @Override public boolean apply(Game game, Ability source) { Player controller = game.getPlayer(source.getControllerId()); - if (controller != null) { - TargetControlledPermanent target = new TargetControlledPermanent(1, 1, new FilterControlledCreaturePermanent("a creature (to sacrifice)"), true); - if (target.canChoose(controller.getId(), source, game)) { - if (controller.chooseTarget(outcome, target, source, game)) { - Permanent toSacrifice = game.getPermanent(target.getFirstTarget()); - if (toSacrifice != null) { - toSacrifice.sacrifice(source, game); - game.getState().processAction(game); - int colors = toSacrifice.getColor(game).getColorCount(); - if (colors > 0) { - TargetCardInYourGraveyard targetCard = new TargetCardInYourGraveyard(0, colors, - new FilterCard("up to " + colors + " card" + (colors > 1 ? "s" : "") + " from your graveyard")); - controller.chooseTarget(outcome, targetCard, source, game); - controller.moveCards(new CardsImpl(targetCard.getTargets()), Zone.HAND, source, game); - } - } + if (controller == null) { + return false; + } + TargetSacrifice target = new TargetSacrifice(StaticFilters.FILTER_PERMANENT_CREATURE); + if (target.canChoose(controller.getId(), source, game) + && (controller.chooseTarget(outcome, target, source, game))) { + Permanent toSacrifice = game.getPermanent(target.getFirstTarget()); + if (toSacrifice != null) { + toSacrifice.sacrifice(source, game); + game.getState().processAction(game); + int colors = toSacrifice.getColor(game).getColorCount(); + if (colors > 0) { + TargetCardInYourGraveyard targetCard = new TargetCardInYourGraveyard(0, colors, + new FilterCard("up to " + colors + " card" + (colors > 1 ? "s" : "") + " from your graveyard")); + controller.chooseTarget(outcome, targetCard, source, game); + controller.moveCards(new CardsImpl(targetCard.getTargets()), Zone.HAND, source, game); } } - return true; + } - return false; + return true; } } diff --git a/Mage.Sets/src/mage/cards/b/BronzeHorse.java b/Mage.Sets/src/mage/cards/b/BronzeHorse.java index 1aa84635414..976f8b84fb7 100644 --- a/Mage.Sets/src/mage/cards/b/BronzeHorse.java +++ b/Mage.Sets/src/mage/cards/b/BronzeHorse.java @@ -59,7 +59,7 @@ class BronzeHorsePreventionEffect extends PreventAllDamageToSourceEffect { } private static final Condition condition = new PermanentsOnTheBattlefieldCondition(filter); - public BronzeHorsePreventionEffect() { + BronzeHorsePreventionEffect() { super(Duration.WhileOnBattlefield); staticText = "as long as you control another creature, prevent all damage that would be dealt to {this} by spells that target it"; } diff --git a/Mage.Sets/src/mage/cards/c/CaptainOfTheMists.java b/Mage.Sets/src/mage/cards/c/CaptainOfTheMists.java index f36c76f7e41..5e06376e2e6 100644 --- a/Mage.Sets/src/mage/cards/c/CaptainOfTheMists.java +++ b/Mage.Sets/src/mage/cards/c/CaptainOfTheMists.java @@ -16,7 +16,7 @@ import mage.constants.CardType; import mage.constants.SubType; import mage.constants.Zone; import mage.filter.FilterPermanent; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.common.FilterControlledPermanent; import mage.filter.predicate.mageobject.AnotherPredicate; import mage.target.TargetPermanent; @@ -27,7 +27,7 @@ import mage.target.TargetPermanent; */ public final class CaptainOfTheMists extends CardImpl { - private static final FilterPermanent filter = new FilterControlledCreaturePermanent("another Human"); + private static final FilterPermanent filter = new FilterControlledPermanent("another Human"); static { filter.add(AnotherPredicate.instance); diff --git a/Mage.Sets/src/mage/cards/c/CaptivatingVampire.java b/Mage.Sets/src/mage/cards/c/CaptivatingVampire.java index 6a365c6735b..9f9c542c323 100644 --- a/Mage.Sets/src/mage/cards/c/CaptivatingVampire.java +++ b/Mage.Sets/src/mage/cards/c/CaptivatingVampire.java @@ -1,4 +1,3 @@ - package mage.cards.c; import mage.MageInt; @@ -11,12 +10,12 @@ import mage.abilities.effects.common.continuous.BoostControlledEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.*; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.common.FilterControlledPermanent; import mage.filter.common.FilterCreaturePermanent; import mage.filter.predicate.permanent.TappedPredicate; import mage.game.Game; import mage.game.permanent.Permanent; -import mage.target.common.TargetControlledCreaturePermanent; +import mage.target.common.TargetControlledPermanent; import mage.target.common.TargetCreaturePermanent; import java.util.UUID; @@ -27,7 +26,7 @@ import java.util.UUID; public final class CaptivatingVampire extends CardImpl { private static final FilterCreaturePermanent filter1 = new FilterCreaturePermanent("Vampire creatures"); - private static final FilterControlledCreaturePermanent filter2 = new FilterControlledCreaturePermanent("untapped Vampires you control"); + private static final FilterControlledPermanent filter2 = new FilterControlledPermanent("untapped Vampires you control"); static { filter1.add(SubType.VAMPIRE.getPredicate()); @@ -46,7 +45,7 @@ public final class CaptivatingVampire extends CardImpl { this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostControlledEffect(1, 1, Duration.WhileOnBattlefield, filter1, true))); // Tap five untapped Vampires you control: Gain control of target creature. It becomes a Vampire in addition to its other types. - Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new CaptivatingVampireEffect(), new TapTargetCost(new TargetControlledCreaturePermanent(5, 5, filter2, true))); + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new CaptivatingVampireEffect(), new TapTargetCost(new TargetControlledPermanent(5, 5, filter2, true))); ability.addTarget(new TargetCreaturePermanent()); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/c/CaribouRange.java b/Mage.Sets/src/mage/cards/c/CaribouRange.java index 69721ec5449..fb14322c026 100644 --- a/Mage.Sets/src/mage/cards/c/CaribouRange.java +++ b/Mage.Sets/src/mage/cards/c/CaribouRange.java @@ -17,12 +17,11 @@ import mage.abilities.keyword.EnchantAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.*; -import mage.filter.common.FilterControlledCreaturePermanent; import mage.filter.common.FilterControlledLandPermanent; +import mage.filter.common.FilterControlledPermanent; import mage.filter.predicate.permanent.TokenPredicate; import mage.game.permanent.token.CaribouToken; import mage.target.TargetPermanent; -import mage.target.common.TargetControlledCreaturePermanent; /** * @@ -30,7 +29,7 @@ import mage.target.common.TargetControlledCreaturePermanent; */ public final class CaribouRange extends CardImpl { - static FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("a Caribou token"); + static FilterControlledPermanent filter = new FilterControlledPermanent("a Caribou token"); static { filter.add(TokenPredicate.TRUE); diff --git a/Mage.Sets/src/mage/cards/c/CaseOfTheStashedSkeleton.java b/Mage.Sets/src/mage/cards/c/CaseOfTheStashedSkeleton.java index 7aff0b0df75..0759772440d 100644 --- a/Mage.Sets/src/mage/cards/c/CaseOfTheStashedSkeleton.java +++ b/Mage.Sets/src/mage/cards/c/CaseOfTheStashedSkeleton.java @@ -21,7 +21,7 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.TimingRule; import mage.filter.FilterPermanent; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.common.FilterControlledPermanent; import mage.filter.predicate.permanent.SuspectedPredicate; import mage.game.Game; import mage.game.permanent.Permanent; @@ -34,7 +34,7 @@ import mage.target.common.TargetCardInLibrary; */ public final class CaseOfTheStashedSkeleton extends CardImpl { - static final FilterPermanent filter = new FilterControlledCreaturePermanent(SubType.SKELETON, "You control no suspected Skeletons"); + static final FilterPermanent filter = new FilterControlledPermanent(SubType.SKELETON, "You control no suspected Skeletons"); static { filter.add(SuspectedPredicate.instance); diff --git a/Mage.Sets/src/mage/cards/c/CatharsCrusade.java b/Mage.Sets/src/mage/cards/c/CatharsCrusade.java index d9cc61888ba..ce861932d65 100644 --- a/Mage.Sets/src/mage/cards/c/CatharsCrusade.java +++ b/Mage.Sets/src/mage/cards/c/CatharsCrusade.java @@ -1,4 +1,3 @@ - package mage.cards.c; import mage.abilities.common.EntersBattlefieldControlledTriggeredAbility; @@ -9,7 +8,6 @@ import mage.constants.CardType; import mage.constants.Zone; import mage.counters.CounterType; import mage.filter.StaticFilters; -import mage.filter.common.FilterControlledCreaturePermanent; import java.util.UUID; @@ -21,11 +19,10 @@ public final class CatharsCrusade extends CardImpl { public CatharsCrusade(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{3}{W}{W}"); - // Whenever a creature enters the battlefield under your control, put a +1/+1 counter on each creature you control. this.addAbility(new EntersBattlefieldControlledTriggeredAbility( Zone.BATTLEFIELD, - new AddCountersAllEffect(CounterType.P1P1.createInstance(), new FilterControlledCreaturePermanent()), + new AddCountersAllEffect(CounterType.P1P1.createInstance(), StaticFilters.FILTER_CONTROLLED_CREATURE), StaticFilters.FILTER_PERMANENT_A_CREATURE, false) ); diff --git a/Mage.Sets/src/mage/cards/c/CelestialAncient.java b/Mage.Sets/src/mage/cards/c/CelestialAncient.java index 1a671192f0e..5fbad38460b 100644 --- a/Mage.Sets/src/mage/cards/c/CelestialAncient.java +++ b/Mage.Sets/src/mage/cards/c/CelestialAncient.java @@ -1,4 +1,3 @@ - package mage.cards.c; import java.util.UUID; @@ -12,7 +11,6 @@ import mage.constants.CardType; import mage.constants.SubType; import mage.counters.CounterType; import mage.filter.StaticFilters; -import mage.filter.common.FilterControlledCreaturePermanent; /** * @@ -32,7 +30,7 @@ public final class CelestialAncient extends CardImpl { // Whenever you cast an enchantment spell, put a +1/+1 counter on each creature you control. this.addAbility(new SpellCastControllerTriggeredAbility(new AddCountersAllEffect(CounterType.P1P1.createInstance(), - new FilterControlledCreaturePermanent()), StaticFilters.FILTER_SPELL_AN_ENCHANTMENT, false)); + StaticFilters.FILTER_CONTROLLED_CREATURE), StaticFilters.FILTER_SPELL_AN_ENCHANTMENT, false)); } private CelestialAncient(final CelestialAncient card) { diff --git a/Mage.Sets/src/mage/cards/c/ChampionsDrake.java b/Mage.Sets/src/mage/cards/c/ChampionsDrake.java index abda54e3306..3991b6049eb 100644 --- a/Mage.Sets/src/mage/cards/c/ChampionsDrake.java +++ b/Mage.Sets/src/mage/cards/c/ChampionsDrake.java @@ -1,4 +1,3 @@ - package mage.cards.c; import java.util.UUID; @@ -16,7 +15,7 @@ import mage.constants.ComparisonType; import mage.constants.Duration; import mage.constants.Zone; import mage.counters.CounterType; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.StaticFilters; /** * @@ -38,7 +37,8 @@ public final class ChampionsDrake extends CardImpl { this.addAbility(FlyingAbility.getInstance()); // Champion's Drake gets +3/+3 as long as you control a creature with three or more level counters on it. - ConditionalContinuousEffect effect = new ConditionalContinuousEffect(new BoostSourceEffect(3, 3, Duration.WhileOnBattlefield), new PermanentHasCounterCondition(CounterType.LEVEL, 2, new FilterControlledCreaturePermanent(), ComparisonType.MORE_THAN), rule); + ConditionalContinuousEffect effect = new ConditionalContinuousEffect(new BoostSourceEffect(3, 3, Duration.WhileOnBattlefield), + new PermanentHasCounterCondition(CounterType.LEVEL, 2, StaticFilters.FILTER_CONTROLLED_CREATURE, ComparisonType.MORE_THAN), rule); this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, effect)); } diff --git a/Mage.Sets/src/mage/cards/c/ChickenALaKing.java b/Mage.Sets/src/mage/cards/c/ChickenALaKing.java index 42305112e96..bffc8641de0 100644 --- a/Mage.Sets/src/mage/cards/c/ChickenALaKing.java +++ b/Mage.Sets/src/mage/cards/c/ChickenALaKing.java @@ -13,7 +13,7 @@ import mage.constants.Outcome; import mage.constants.SubType; import mage.constants.Zone; import mage.counters.CounterType; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.common.FilterControlledPermanent; import mage.filter.common.FilterCreaturePermanent; import mage.filter.predicate.permanent.TappedPredicate; import mage.game.Game; @@ -28,7 +28,7 @@ import java.util.UUID; */ public final class ChickenALaKing extends CardImpl { - private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("untapped Bird you control"); + private static final FilterControlledPermanent filter = new FilterControlledPermanent("untapped Bird you control"); static { filter.add(TappedPredicate.UNTAPPED); diff --git a/Mage.Sets/src/mage/cards/c/Clickslither.java b/Mage.Sets/src/mage/cards/c/Clickslither.java index ce1e01d9e29..b0dd80f30db 100644 --- a/Mage.Sets/src/mage/cards/c/Clickslither.java +++ b/Mage.Sets/src/mage/cards/c/Clickslither.java @@ -1,4 +1,3 @@ - package mage.cards.c; import java.util.UUID; @@ -17,8 +16,7 @@ import mage.constants.CardType; import mage.constants.Duration; import mage.constants.SubType; import mage.constants.Zone; -import mage.filter.common.FilterControlledCreaturePermanent; -import mage.target.common.TargetControlledCreaturePermanent; +import mage.filter.FilterPermanent; /** * @@ -26,11 +24,7 @@ import mage.target.common.TargetControlledCreaturePermanent; */ public final class Clickslither extends CardImpl { - private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("a Goblin"); - - static { - filter.add(SubType.GOBLIN.getPredicate()); - } + private static final FilterPermanent filter = new FilterPermanent(SubType.GOBLIN, "a Goblin"); public Clickslither(UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{R}{R}{R}"); diff --git a/Mage.Sets/src/mage/cards/c/CoerciveRecruiter.java b/Mage.Sets/src/mage/cards/c/CoerciveRecruiter.java index 4dfd5f8f916..04f7ff99355 100644 --- a/Mage.Sets/src/mage/cards/c/CoerciveRecruiter.java +++ b/Mage.Sets/src/mage/cards/c/CoerciveRecruiter.java @@ -14,7 +14,7 @@ import mage.constants.CardType; import mage.constants.Duration; import mage.constants.SubType; import mage.filter.FilterPermanent; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.common.FilterControlledPermanent; import mage.target.common.TargetCreaturePermanent; import java.util.UUID; @@ -24,7 +24,7 @@ import java.util.UUID; */ public final class CoerciveRecruiter extends CardImpl { - private static final FilterPermanent filter = new FilterControlledCreaturePermanent(SubType.PIRATE, "Pirate"); + private static final FilterPermanent filter = new FilterControlledPermanent(SubType.PIRATE, "Pirate"); public CoerciveRecruiter(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{R}"); diff --git a/Mage.Sets/src/mage/cards/c/CrawlFromTheCellar.java b/Mage.Sets/src/mage/cards/c/CrawlFromTheCellar.java index 488c1d69b57..748ce6d7217 100644 --- a/Mage.Sets/src/mage/cards/c/CrawlFromTheCellar.java +++ b/Mage.Sets/src/mage/cards/c/CrawlFromTheCellar.java @@ -9,12 +9,11 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; -import mage.constants.TimingRule; import mage.counters.CounterType; import mage.filter.StaticFilters; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.common.FilterControlledPermanent; import mage.target.common.TargetCardInYourGraveyard; -import mage.target.common.TargetControlledCreaturePermanent; +import mage.target.common.TargetControlledPermanent; import mage.target.targetpointer.SecondTargetPointer; /** @@ -23,8 +22,8 @@ import mage.target.targetpointer.SecondTargetPointer; */ public final class CrawlFromTheCellar extends CardImpl { - private static final FilterControlledCreaturePermanent filter - = new FilterControlledCreaturePermanent(SubType.ZOMBIE); + private static final FilterControlledPermanent filter + = new FilterControlledPermanent(SubType.ZOMBIE); public CrawlFromTheCellar(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{B}"); @@ -34,7 +33,7 @@ public final class CrawlFromTheCellar extends CardImpl { this.getSpellAbility().addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_CREATURE_YOUR_GRAVEYARD)); this.getSpellAbility().addEffect(new AddCountersTargetEffect(CounterType.P1P1.createInstance()).setTargetPointer(new SecondTargetPointer())); - this.getSpellAbility().addTarget(new TargetControlledCreaturePermanent(0, 1, filter, false)); + this.getSpellAbility().addTarget(new TargetControlledPermanent(0, 1, filter, false)); // Flashback {3}{B} this.addAbility(new FlashbackAbility(this, new ManaCostsImpl<>("{3}{B}"))); diff --git a/Mage.Sets/src/mage/cards/c/CrookclawElder.java b/Mage.Sets/src/mage/cards/c/CrookclawElder.java index a1a954a50ab..8e2b5d4a5ce 100644 --- a/Mage.Sets/src/mage/cards/c/CrookclawElder.java +++ b/Mage.Sets/src/mage/cards/c/CrookclawElder.java @@ -1,4 +1,3 @@ - package mage.cards.c; import mage.MageInt; @@ -13,10 +12,9 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Duration; import mage.constants.SubType; -import mage.filter.common.FilterControlledCreaturePermanent; -import mage.filter.predicate.Predicate; +import mage.filter.common.FilterControlledPermanent; import mage.filter.predicate.permanent.TappedPredicate; -import mage.target.common.TargetControlledCreaturePermanent; +import mage.target.common.TargetControlledPermanent; import mage.target.common.TargetCreaturePermanent; import java.util.UUID; @@ -26,15 +24,14 @@ import java.util.UUID; */ public final class CrookclawElder extends CardImpl { - private static final FilterControlledCreaturePermanent filter - = new FilterControlledCreaturePermanent(SubType.BIRD, "untapped Birds you control"); - private static final FilterControlledCreaturePermanent filter2 - = new FilterControlledCreaturePermanent(SubType.WIZARD, "untapped Wizards you control"); - private static final Predicate pred = TappedPredicate.UNTAPPED; + private static final FilterControlledPermanent filter + = new FilterControlledPermanent(SubType.BIRD, "untapped Birds you control"); + private static final FilterControlledPermanent filter2 + = new FilterControlledPermanent(SubType.WIZARD, "untapped Wizards you control"); static { - filter.add(pred); - filter2.add(pred); + filter.add(TappedPredicate.UNTAPPED); + filter2.add(TappedPredicate.UNTAPPED); } public CrookclawElder(UUID ownerId, CardSetInfo setInfo) { @@ -51,7 +48,7 @@ public final class CrookclawElder extends CardImpl { // Tap two untapped Birds you control: Draw a card. Ability ability = new SimpleActivatedAbility( new DrawCardSourceControllerEffect(1), - new TapTargetCost(new TargetControlledCreaturePermanent( + new TapTargetCost(new TargetControlledPermanent( 2, 2, filter, true )) ); @@ -60,7 +57,7 @@ public final class CrookclawElder extends CardImpl { // Tap two untapped Wizards you control: Target creature gains flying until end of turn. ability = new SimpleActivatedAbility( new GainAbilityTargetEffect(FlyingAbility.getInstance(), Duration.EndOfTurn), - new TapTargetCost(new TargetControlledCreaturePermanent( + new TapTargetCost(new TargetControlledPermanent( 2, 2, filter2, true )) ); diff --git a/Mage.Sets/src/mage/cards/c/CrushUnderfoot.java b/Mage.Sets/src/mage/cards/c/CrushUnderfoot.java index fc145789f52..37462e97d9b 100644 --- a/Mage.Sets/src/mage/cards/c/CrushUnderfoot.java +++ b/Mage.Sets/src/mage/cards/c/CrushUnderfoot.java @@ -47,7 +47,7 @@ public final class CrushUnderfoot extends CardImpl { class CrushUnderfootEffect extends OneShotEffect { - private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("Giant you control"); + private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("Giant creature you control"); static { filter.add(SubType.GIANT.getPredicate()); } diff --git a/Mage.Sets/src/mage/cards/c/Cryptbreaker.java b/Mage.Sets/src/mage/cards/c/Cryptbreaker.java index 528a3d6923f..999f89f8197 100644 --- a/Mage.Sets/src/mage/cards/c/Cryptbreaker.java +++ b/Mage.Sets/src/mage/cards/c/Cryptbreaker.java @@ -16,10 +16,10 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; import mage.constants.Zone; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.common.FilterControlledPermanent; import mage.filter.predicate.permanent.TappedPredicate; import mage.game.permanent.token.ZombieToken; -import mage.target.common.TargetControlledCreaturePermanent; +import mage.target.common.TargetControlledPermanent; import java.util.UUID; @@ -28,7 +28,7 @@ import java.util.UUID; */ public final class Cryptbreaker extends CardImpl { - private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("untapped Zombies you control"); + private static final FilterControlledPermanent filter = new FilterControlledPermanent("untapped Zombies you control"); static { filter.add(TappedPredicate.UNTAPPED); @@ -49,7 +49,7 @@ public final class Cryptbreaker extends CardImpl { // Tap three untapped Zombies you control: You draw a card and you lose 1 life. Effect effect = new DrawCardSourceControllerEffect(1, "you"); - ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, effect, new TapTargetCost(new TargetControlledCreaturePermanent(3, 3, filter, true))); + ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, effect, new TapTargetCost(new TargetControlledPermanent(3, 3, filter, true))); effect = new LoseLifeSourceControllerEffect(1); ability.addEffect(effect.concatBy("and")); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/cards/c/CustodiLich.java b/Mage.Sets/src/mage/cards/c/CustodiLich.java index fe7a3b09173..60d5eae371c 100644 --- a/Mage.Sets/src/mage/cards/c/CustodiLich.java +++ b/Mage.Sets/src/mage/cards/c/CustodiLich.java @@ -1,4 +1,3 @@ - package mage.cards.c; import mage.MageInt; @@ -12,7 +11,7 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.StaticFilters; import mage.target.TargetPlayer; import java.util.UUID; @@ -35,7 +34,7 @@ public final class CustodiLich extends CardImpl { this.addAbility(new EntersBattlefieldTriggeredAbility(new BecomesMonarchSourceEffect()).addHint(MonarchHint.instance)); // Whenever you become the monarch, target player sacrifices a creature. - Ability ability = new BecomesMonarchSourceControllerTriggeredAbility(new SacrificeEffect(new FilterControlledCreaturePermanent("creature"), 1, "target player")); + Ability ability = new BecomesMonarchSourceControllerTriggeredAbility(new SacrificeEffect(StaticFilters.FILTER_PERMANENT_CREATURE, 1, "target player")); ability.addTarget(new TargetPlayer()); this.addAbility(ability); @@ -49,4 +48,4 @@ public final class CustodiLich extends CardImpl { public CustodiLich copy() { return new CustodiLich(this); } -} \ No newline at end of file +} diff --git a/Mage.Sets/src/mage/cards/d/Deadapult.java b/Mage.Sets/src/mage/cards/d/Deadapult.java index a084eb53a1e..cdeeef86907 100644 --- a/Mage.Sets/src/mage/cards/d/Deadapult.java +++ b/Mage.Sets/src/mage/cards/d/Deadapult.java @@ -1,4 +1,3 @@ - package mage.cards.d; import java.util.UUID; @@ -12,8 +11,7 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; import mage.constants.Zone; -import mage.filter.common.FilterControlledCreaturePermanent; -import mage.target.common.TargetControlledCreaturePermanent; +import mage.filter.FilterPermanent; import mage.target.common.TargetAnyTarget; /** @@ -23,11 +21,7 @@ import mage.target.common.TargetAnyTarget; */ public final class Deadapult extends CardImpl { - private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("a Zombie"); - - static { - filter.add(SubType.ZOMBIE.getPredicate()); - } + private static final FilterPermanent filter = new FilterPermanent(SubType.ZOMBIE, "a Zombie"); public Deadapult(UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{2}{R}"); diff --git a/Mage.Sets/src/mage/cards/d/DeathsporeThallid.java b/Mage.Sets/src/mage/cards/d/DeathsporeThallid.java index 26602153cf5..7598a3d6e63 100644 --- a/Mage.Sets/src/mage/cards/d/DeathsporeThallid.java +++ b/Mage.Sets/src/mage/cards/d/DeathsporeThallid.java @@ -1,4 +1,3 @@ - package mage.cards.d; import java.util.UUID; @@ -15,9 +14,8 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.*; import mage.counters.CounterType; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.FilterPermanent; import mage.game.permanent.token.SaprolingToken; -import mage.target.common.TargetControlledCreaturePermanent; import mage.target.common.TargetCreaturePermanent; /** @@ -26,10 +24,7 @@ import mage.target.common.TargetCreaturePermanent; */ public final class DeathsporeThallid extends CardImpl { - private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("Saproling"); - static { - filter.add(SubType.SAPROLING.getPredicate()); - } + private static final FilterPermanent filter = new FilterPermanent(SubType.SAPROLING, "Saproling"); public DeathsporeThallid(UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{B}"); diff --git a/Mage.Sets/src/mage/cards/d/DecreeOfSavagery.java b/Mage.Sets/src/mage/cards/d/DecreeOfSavagery.java index a6b79eb4a80..448eb6000a7 100644 --- a/Mage.Sets/src/mage/cards/d/DecreeOfSavagery.java +++ b/Mage.Sets/src/mage/cards/d/DecreeOfSavagery.java @@ -12,11 +12,10 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.counters.CounterType; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.StaticFilters; import mage.target.common.TargetCreaturePermanent; /** - * * @author LoneFox */ @@ -26,7 +25,7 @@ public final class DecreeOfSavagery extends CardImpl { super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{7}{G}{G}"); // Put four +1/+1 counters on each creature you control. - this.getSpellAbility().addEffect(new AddCountersAllEffect(CounterType.P1P1.createInstance(4), new FilterControlledCreaturePermanent())); + this.getSpellAbility().addEffect(new AddCountersAllEffect(CounterType.P1P1.createInstance(4), StaticFilters.FILTER_CONTROLLED_CREATURE)); // Cycling {4}{G}{G} this.addAbility(new CyclingAbility(new ManaCostsImpl<>("{4}{G}{G}"))); // When you cycle Decree of Savagery, you may put four +1/+1 counters on target creature. diff --git a/Mage.Sets/src/mage/cards/d/DeeprootElite.java b/Mage.Sets/src/mage/cards/d/DeeprootElite.java index e41d034419e..899dcd8bb0f 100644 --- a/Mage.Sets/src/mage/cards/d/DeeprootElite.java +++ b/Mage.Sets/src/mage/cards/d/DeeprootElite.java @@ -1,4 +1,3 @@ - package mage.cards.d; import java.util.UUID; @@ -13,9 +12,9 @@ import mage.constants.CardType; import mage.constants.TargetController; import mage.counters.CounterType; import mage.filter.FilterPermanent; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.common.FilterControlledPermanent; import mage.filter.predicate.mageobject.AnotherPredicate; -import mage.target.common.TargetControlledCreaturePermanent; +import mage.target.common.TargetControlledPermanent; /** * @@ -29,10 +28,7 @@ public final class DeeprootElite extends CardImpl { filterYourAnotherMerfolk.add(TargetController.YOU.getControllerPredicate()); } - private static final FilterControlledCreaturePermanent filterYourAnyMerfolk = new FilterControlledCreaturePermanent(SubType.MERFOLK); - static { - filterYourAnyMerfolk.add(TargetController.YOU.getControllerPredicate()); - } + private static final FilterControlledPermanent filterYourAnyMerfolk = new FilterControlledPermanent(SubType.MERFOLK); public DeeprootElite(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{G}"); @@ -44,7 +40,7 @@ public final class DeeprootElite extends CardImpl { // Whenever another Merfolk enters the battlefield under your control, put a +1/+1 counter on target Merfolk you control. Ability ability = new EntersBattlefieldControlledTriggeredAbility(new AddCountersTargetEffect(CounterType.P1P1.createInstance()), filterYourAnotherMerfolk); - ability.addTarget(new TargetControlledCreaturePermanent(filterYourAnyMerfolk)); + ability.addTarget(new TargetControlledPermanent(filterYourAnyMerfolk)); this.addAbility(ability); } @@ -56,4 +52,4 @@ public final class DeeprootElite extends CardImpl { public DeeprootElite copy() { return new DeeprootElite(this); } -} \ No newline at end of file +} diff --git a/Mage.Sets/src/mage/cards/d/DelayTactic.java b/Mage.Sets/src/mage/cards/d/DelayTactic.java index f29d5944d58..85afbee4763 100644 --- a/Mage.Sets/src/mage/cards/d/DelayTactic.java +++ b/Mage.Sets/src/mage/cards/d/DelayTactic.java @@ -14,7 +14,7 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Duration; import mage.constants.Outcome; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.StaticFilters; import mage.filter.common.FilterCreaturePermanent; import mage.filter.predicate.permanent.ControllerIdPredicate; import mage.game.Game; @@ -34,8 +34,7 @@ public final class DelayTactic extends CardImpl { // Choose one - // Creatures you control gain hexproof until end of turn. - this.getSpellAbility().addEffect(new GainAbilityAllEffect(HexproofAbility.getInstance(), Duration.EndOfTurn, new FilterControlledCreaturePermanent()) - .setText("Creatures you control gain hexproof until end of turn")); + this.getSpellAbility().addEffect(new GainAbilityAllEffect(HexproofAbility.getInstance(), Duration.EndOfTurn, StaticFilters.FILTER_CONTROLLED_CREATURES)); // Creatures target opponent controls don't untap during their next untap step. Mode mode = new Mode(new DelayTacticEffect()); @@ -83,4 +82,4 @@ class DelayTacticEffect extends OneShotEffect { } return false; } -} \ No newline at end of file +} diff --git a/Mage.Sets/src/mage/cards/d/DevouringGreed.java b/Mage.Sets/src/mage/cards/d/DevouringGreed.java index 01d6515607f..b548446b770 100644 --- a/Mage.Sets/src/mage/cards/d/DevouringGreed.java +++ b/Mage.Sets/src/mage/cards/d/DevouringGreed.java @@ -1,4 +1,3 @@ - package mage.cards.d; import java.util.UUID; @@ -11,11 +10,10 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Outcome; import mage.constants.SubType; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.FilterPermanent; import mage.game.Game; import mage.players.Player; import mage.target.TargetPlayer; -import mage.target.common.TargetControlledCreaturePermanent; import mage.target.common.TargetSacrifice; /** @@ -24,17 +22,12 @@ import mage.target.common.TargetSacrifice; */ public final class DevouringGreed extends CardImpl { - private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("any number of Spirits"); - - static { - filter.add(SubType.SPIRIT.getPredicate()); - } + private static final FilterPermanent filter = new FilterPermanent(SubType.SPIRIT, "any number of Spirits"); public DevouringGreed(UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{2}{B}{B}"); this.subtype.add(SubType.ARCANE); - // As an additional cost to cast Devouring Greed, you may sacrifice any number of Spirits. this.getSpellAbility().addCost(new SacrificeTargetCost(new TargetSacrifice(0, Integer.MAX_VALUE, filter))); diff --git a/Mage.Sets/src/mage/cards/d/DevouringRage.java b/Mage.Sets/src/mage/cards/d/DevouringRage.java index fff0d4cd2a7..f9b2281f5ce 100644 --- a/Mage.Sets/src/mage/cards/d/DevouringRage.java +++ b/Mage.Sets/src/mage/cards/d/DevouringRage.java @@ -1,4 +1,3 @@ - package mage.cards.d; import java.util.UUID; @@ -14,10 +13,9 @@ import mage.constants.CardType; import mage.constants.Duration; import mage.constants.Outcome; import mage.constants.SubType; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.FilterPermanent; import mage.game.Game; import mage.game.permanent.Permanent; -import mage.target.common.TargetControlledCreaturePermanent; import mage.target.common.TargetCreaturePermanent; import mage.target.common.TargetSacrifice; import mage.target.targetpointer.FixedTarget; @@ -28,17 +26,12 @@ import mage.target.targetpointer.FixedTarget; */ public final class DevouringRage extends CardImpl { - private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("any number of Spirits"); - - static { - filter.add(SubType.SPIRIT.getPredicate()); - } + private static final FilterPermanent filter = new FilterPermanent(SubType.SPIRIT, "any number of Spirits"); public DevouringRage(UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{4}{R}"); this.subtype.add(SubType.ARCANE); - // As an additional cost to cast Devouring Rage, you may sacrifice any number of Spirits. this.getSpellAbility().addCost(new SacrificeTargetCost(new TargetSacrifice(0, Integer.MAX_VALUE, filter))); diff --git a/Mage.Sets/src/mage/cards/d/DiplomacyOfTheWastes.java b/Mage.Sets/src/mage/cards/d/DiplomacyOfTheWastes.java index df8da77b284..e1c3c92d4cc 100644 --- a/Mage.Sets/src/mage/cards/d/DiplomacyOfTheWastes.java +++ b/Mage.Sets/src/mage/cards/d/DiplomacyOfTheWastes.java @@ -1,4 +1,3 @@ - package mage.cards.d; import java.util.UUID; @@ -10,7 +9,7 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.common.FilterControlledPermanent; import mage.filter.common.FilterNonlandCard; import mage.target.common.TargetOpponent; @@ -28,7 +27,7 @@ public final class DiplomacyOfTheWastes extends CardImpl { this.getSpellAbility().addEffect(new DiscardCardYouChooseTargetEffect(new FilterNonlandCard())); this.getSpellAbility().addEffect(new ConditionalOneShotEffect( new LoseLifeTargetEffect(2), - new PermanentsOnTheBattlefieldCondition(new FilterControlledCreaturePermanent(SubType.WARRIOR, "Warrior")), + new PermanentsOnTheBattlefieldCondition(new FilterControlledPermanent(SubType.WARRIOR, "Warrior")), "If you control a Warrior, that player loses 2 life")); } diff --git a/Mage.Sets/src/mage/cards/d/DranasChosen.java b/Mage.Sets/src/mage/cards/d/DranasChosen.java index 1e1ec1258f5..8356444a3f3 100644 --- a/Mage.Sets/src/mage/cards/d/DranasChosen.java +++ b/Mage.Sets/src/mage/cards/d/DranasChosen.java @@ -1,36 +1,21 @@ - package mage.cards.d; -import java.util.UUID; import mage.MageInt; -import mage.abilities.Ability; -import mage.abilities.common.SimpleActivatedAbility; -import mage.abilities.costs.common.TapSourceCost; -import mage.abilities.costs.common.TapTargetCost; +import mage.abilities.abilityword.CohortAbility; import mage.abilities.effects.common.CreateTokenEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; -import mage.constants.AbilityWord; import mage.constants.CardType; import mage.constants.SubType; -import mage.constants.Zone; -import mage.filter.common.FilterControlledPermanent; -import mage.filter.predicate.permanent.TappedPredicate; import mage.game.permanent.token.ZombieToken; -import mage.target.common.TargetControlledPermanent; + +import java.util.UUID; /** * * @author fireshoes */ public final class DranasChosen extends CardImpl { - - private static final FilterControlledPermanent filter = new FilterControlledPermanent("an untapped Ally you control"); - - static { - filter.add(SubType.ALLY.getPredicate()); - filter.add(TappedPredicate.UNTAPPED); - } public DranasChosen(UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{B}"); @@ -41,10 +26,7 @@ public final class DranasChosen extends CardImpl { this.toughness = new MageInt(2); // Cohort — {T}, Tap an untapped Ally you control: Create a tapped 2/2 black Zombie creature token. - Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new CreateTokenEffect(new ZombieToken(), 1, true, false), new TapSourceCost()); - ability.addCost(new TapTargetCost(new TargetControlledPermanent(filter))); - ability.setAbilityWord(AbilityWord.COHORT); - this.addAbility(ability); + this.addAbility(new CohortAbility(new CreateTokenEffect(new ZombieToken(), 1, true, false))); } private DranasChosen(final DranasChosen card) { diff --git a/Mage.Sets/src/mage/cards/e/EchoChamber.java b/Mage.Sets/src/mage/cards/e/EchoChamber.java index 38c57315549..34f9ca9b9bf 100644 --- a/Mage.Sets/src/mage/cards/e/EchoChamber.java +++ b/Mage.Sets/src/mage/cards/e/EchoChamber.java @@ -14,7 +14,7 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Outcome; import mage.constants.Zone; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.StaticFilters; import mage.game.Game; import mage.game.permanent.Permanent; import mage.target.common.TargetOpponentsChoicePermanent; @@ -27,15 +27,13 @@ import java.util.UUID; */ public final class EchoChamber extends CardImpl { - private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent(); - public EchoChamber(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{4}"); // {4}, {tap}: An opponent chooses target creature they control. Create a token that's a copy of that creature. That token gains haste until end of turn. Exile the token at the beginning of the next end step. Activate this ability only any time you could cast a sorcery. Ability ability = new ActivateAsSorceryActivatedAbility(Zone.BATTLEFIELD, new EchoChamberCreateTokenEffect(), new GenericManaCost(4)); ability.addCost(new TapSourceCost()); - ability.addTarget(new TargetOpponentsChoicePermanent(1, 1, filter, false)); + ability.addTarget(new TargetOpponentsChoicePermanent(1, 1, StaticFilters.FILTER_CONTROLLED_CREATURE, false)); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/e/EssenceSymbiote.java b/Mage.Sets/src/mage/cards/e/EssenceSymbiote.java index 48223c26a6a..32e5b9d6cef 100644 --- a/Mage.Sets/src/mage/cards/e/EssenceSymbiote.java +++ b/Mage.Sets/src/mage/cards/e/EssenceSymbiote.java @@ -4,7 +4,6 @@ import java.util.UUID; import mage.MageInt; import mage.abilities.TriggeredAbilityImpl; import mage.abilities.effects.Effect; -import mage.abilities.keyword.MutateAbility; import mage.constants.SubType; import mage.cards.CardImpl; import mage.cards.CardSetInfo; @@ -14,9 +13,6 @@ import mage.abilities.effects.common.GainLifeEffect; import mage.abilities.effects.common.counter.AddCountersTargetEffect; import mage.constants.Zone; import mage.counters.CounterType; -import mage.filter.FilterPermanent; -import mage.filter.common.FilterControlledCreaturePermanent; -import mage.filter.predicate.mageobject.AbilityPredicate; import mage.game.Game; import mage.game.events.GameEvent; @@ -26,8 +22,6 @@ import mage.game.events.GameEvent; */ public final class EssenceSymbiote extends CardImpl { - - public EssenceSymbiote(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{G}"); @@ -55,24 +49,18 @@ public final class EssenceSymbiote extends CardImpl { class EssenceSymbioteTriggeredAbility extends TriggeredAbilityImpl { - private static final FilterPermanent filter = new FilterControlledCreaturePermanent("creature you control mutates"); - - static { - filter.add(new AbilityPredicate(MutateAbility.class)); - } - - public EssenceSymbioteTriggeredAbility(Zone zone, Effect effect) { + EssenceSymbioteTriggeredAbility(Zone zone, Effect effect) { super(zone, effect, false); setTriggerPhrase("Whenever a creature you control mutates, "); } - public EssenceSymbioteTriggeredAbility(final mage.cards.e.EssenceSymbioteTriggeredAbility ability) { + private EssenceSymbioteTriggeredAbility(final EssenceSymbioteTriggeredAbility ability) { super(ability); } @Override - public mage.cards.e.EssenceSymbioteTriggeredAbility copy() { - return new mage.cards.e.EssenceSymbioteTriggeredAbility(this); + public EssenceSymbioteTriggeredAbility copy() { + return new EssenceSymbioteTriggeredAbility(this); } @Override @@ -85,23 +73,6 @@ class EssenceSymbioteTriggeredAbility extends TriggeredAbilityImpl { @Override public boolean checkTrigger(GameEvent event, Game game) { // TODO: Implement this - /* - Permanent sourcePermanent = game.getPermanent(event.getSourceId()); - Permanent targetPermanent = game.getPermanent(event.getTargetId()); - if (sourcePermanent != null && targetPermanent != null) { - Player controller = game.getPlayer(targetPermanent.getControllerId()); - if (controller != null - && event.getTargetId().equals(targetPermanent.getId()) - && controller.getId().equals(sourcePermanent.getControllerId()) - && this.isControlledBy(controller.getId())) { - for (Effect effect : this.getEffects()) { - effect.setBoostedValue("targetId", targetPermanent.getId()); - effect.setTargetPointer(new FixedTarget(targetPermanent.getId(), targetPermanent.getZoneChangeCounter(game))); - } - return true; - } - } - */ return false; } -} \ No newline at end of file +} diff --git a/Mage.Sets/src/mage/cards/e/Evangelize.java b/Mage.Sets/src/mage/cards/e/Evangelize.java index 7fc44dd56d1..f4bc78b2de2 100644 --- a/Mage.Sets/src/mage/cards/e/Evangelize.java +++ b/Mage.Sets/src/mage/cards/e/Evangelize.java @@ -6,7 +6,7 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Duration; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.StaticFilters; import mage.target.common.TargetOpponentsChoicePermanent; import java.util.UUID; @@ -16,8 +16,6 @@ import java.util.UUID; */ public final class Evangelize extends CardImpl { - private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent(); - public Evangelize(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{4}{W}"); @@ -28,7 +26,7 @@ public final class Evangelize extends CardImpl { GainControlTargetEffect effect = new GainControlTargetEffect(Duration.EndOfGame); effect.setText("Gain control of target creature of an opponent's choice they control"); this.getSpellAbility().addEffect(effect); - this.getSpellAbility().addTarget(new TargetOpponentsChoicePermanent(1, 1, filter, false)); + this.getSpellAbility().addTarget(new TargetOpponentsChoicePermanent(1, 1, StaticFilters.FILTER_CONTROLLED_CREATURE, false)); } private Evangelize(final Evangelize card) { diff --git a/Mage.Sets/src/mage/cards/e/ExtricatorOfFlesh.java b/Mage.Sets/src/mage/cards/e/ExtricatorOfFlesh.java index 859aef869f3..96aba193e73 100644 --- a/Mage.Sets/src/mage/cards/e/ExtricatorOfFlesh.java +++ b/Mage.Sets/src/mage/cards/e/ExtricatorOfFlesh.java @@ -1,4 +1,3 @@ - package mage.cards.e; import java.util.UUID; @@ -19,6 +18,7 @@ import mage.constants.Duration; import mage.constants.SubType; import mage.constants.Zone; import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.common.FilterControlledPermanent; import mage.filter.predicate.Predicates; import mage.game.permanent.token.EldraziHorrorToken; @@ -29,7 +29,7 @@ import mage.game.permanent.token.EldraziHorrorToken; public final class ExtricatorOfFlesh extends CardImpl { private static final FilterControlledCreaturePermanent filterNonEldrazi = new FilterControlledCreaturePermanent("non-Eldrazi creature"); - private static final FilterControlledCreaturePermanent filterEldrazi = new FilterControlledCreaturePermanent(SubType.ELDRAZI, "Eldrazi"); + private static final FilterControlledPermanent filterEldrazi = new FilterControlledPermanent(SubType.ELDRAZI, "Eldrazi"); static { filterNonEldrazi.add(Predicates.not(SubType.ELDRAZI.getPredicate())); diff --git a/Mage.Sets/src/mage/cards/f/FainTheBroker.java b/Mage.Sets/src/mage/cards/f/FainTheBroker.java index 0b36a02111c..eacebc2862d 100644 --- a/Mage.Sets/src/mage/cards/f/FainTheBroker.java +++ b/Mage.Sets/src/mage/cards/f/FainTheBroker.java @@ -20,11 +20,9 @@ import mage.filter.StaticFilters; import mage.game.permanent.token.InklingToken; import mage.game.permanent.token.TreasureToken; import mage.target.common.TargetControlledCreaturePermanent; -import mage.target.common.TargetControlledPermanent; import mage.target.common.TargetCreaturePermanent; import java.util.UUID; -import mage.filter.common.FilterControlledCreaturePermanent; /** * @author TheElk801 @@ -50,7 +48,7 @@ public final class FainTheBroker extends CardImpl { // {T}, Remove a counter from a creature you control: Create a Treasure token. ability = new SimpleActivatedAbility(new CreateTokenEffect(new TreasureToken()), new TapSourceCost()); - ability.addCost(new RemoveCounterCost(new TargetControlledCreaturePermanent(1, 1, new FilterControlledCreaturePermanent(), true))); + ability.addCost(new RemoveCounterCost(new TargetControlledCreaturePermanent().withNotTarget(true))); this.addAbility(ability); // {T}, Sacrifice an artifact: Create a 2/1 white and black Inkling creature token with flying. diff --git a/Mage.Sets/src/mage/cards/f/FalcoSparaPactweaver.java b/Mage.Sets/src/mage/cards/f/FalcoSparaPactweaver.java index d85c8983756..a174f339d9e 100644 --- a/Mage.Sets/src/mage/cards/f/FalcoSparaPactweaver.java +++ b/Mage.Sets/src/mage/cards/f/FalcoSparaPactweaver.java @@ -19,7 +19,6 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.*; import mage.counters.CounterType; -import mage.filter.common.FilterControlledCreaturePermanent; import mage.game.Game; import mage.players.Player; import mage.target.common.TargetControlledCreaturePermanent; @@ -115,7 +114,7 @@ class FalcoSparaPactweaverEffect extends AsThoughEffectImpl { } Costs newCosts = new CostsImpl<>(); - newCosts.add(new RemoveCounterCost(new TargetControlledCreaturePermanent(1, 1, new FilterControlledCreaturePermanent(), true))); + newCosts.add(new RemoveCounterCost(new TargetControlledCreaturePermanent().withNotTarget(true))); newCosts.addAll(cardToCheck.getSpellAbility().getCosts()); player.setCastSourceIdWithAlternateMana( cardToCheck.getId(), cardToCheck.getManaCost(), newCosts, diff --git a/Mage.Sets/src/mage/cards/f/FamiliarGround.java b/Mage.Sets/src/mage/cards/f/FamiliarGround.java index 55113b15d32..749958e8e86 100644 --- a/Mage.Sets/src/mage/cards/f/FamiliarGround.java +++ b/Mage.Sets/src/mage/cards/f/FamiliarGround.java @@ -8,7 +8,7 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Zone; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.StaticFilters; /** * @@ -21,7 +21,7 @@ public final class FamiliarGround extends CardImpl { // Each creature you control can't be blocked by more than one creature. - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new CantBeBlockedByMoreThanOneAllEffect(new FilterControlledCreaturePermanent()))); + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new CantBeBlockedByMoreThanOneAllEffect(StaticFilters.FILTER_CONTROLLED_CREATURE))); } private FamiliarGround(final FamiliarGround card) { diff --git a/Mage.Sets/src/mage/cards/f/FeastOfBlood.java b/Mage.Sets/src/mage/cards/f/FeastOfBlood.java index bc41d9da3c6..482057d215b 100644 --- a/Mage.Sets/src/mage/cards/f/FeastOfBlood.java +++ b/Mage.Sets/src/mage/cards/f/FeastOfBlood.java @@ -11,7 +11,7 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.ComparisonType; import mage.constants.SubType; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.common.FilterControlledPermanent; import mage.target.common.TargetCreaturePermanent; /** @@ -26,7 +26,7 @@ public final class FeastOfBlood extends CardImpl { // Cast Feast of Blood only if you control two or more Vampires. this.addAbility(new CastOnlyIfConditionIsTrueAbility( new PermanentsOnTheBattlefieldCondition( - new FilterControlledCreaturePermanent(SubType.VAMPIRE, "you control two or more Vampires"), + new FilterControlledPermanent(SubType.VAMPIRE, "you control two or more Vampires"), ComparisonType.MORE_THAN, 1))); // Destroy target creature. You gain 4 life. diff --git a/Mage.Sets/src/mage/cards/f/FirefistAdept.java b/Mage.Sets/src/mage/cards/f/FirefistAdept.java index b83bbec29c8..adc4a804398 100644 --- a/Mage.Sets/src/mage/cards/f/FirefistAdept.java +++ b/Mage.Sets/src/mage/cards/f/FirefistAdept.java @@ -1,4 +1,3 @@ - package mage.cards.f; import java.util.UUID; @@ -11,7 +10,7 @@ import mage.constants.SubType; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.common.FilterControlledPermanent; import mage.target.common.TargetOpponentsCreaturePermanent; /** @@ -20,7 +19,7 @@ import mage.target.common.TargetOpponentsCreaturePermanent; */ public final class FirefistAdept extends CardImpl { - private static final FilterControlledCreaturePermanent filterCount = new FilterControlledCreaturePermanent("Wizards you control"); + private static final FilterControlledPermanent filterCount = new FilterControlledPermanent("Wizards you control"); static { filterCount.add(SubType.WIZARD.getPredicate()); diff --git a/Mage.Sets/src/mage/cards/f/FrayingOmnipotence.java b/Mage.Sets/src/mage/cards/f/FrayingOmnipotence.java index a7f0be4b6ae..4bc66e08ebf 100644 --- a/Mage.Sets/src/mage/cards/f/FrayingOmnipotence.java +++ b/Mage.Sets/src/mage/cards/f/FrayingOmnipotence.java @@ -1,20 +1,19 @@ package mage.cards.f; -import java.util.UUID; import mage.abilities.Ability; import mage.abilities.effects.OneShotEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Outcome; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.StaticFilters; import mage.game.Game; import mage.game.permanent.Permanent; import mage.players.Player; -import mage.target.Target; -import mage.target.common.TargetControlledCreaturePermanent; import mage.target.common.TargetSacrifice; +import java.util.UUID; + /** * * @author TheElk801 @@ -89,12 +88,11 @@ class FrayingOmnipotenceEffect extends OneShotEffect { if (player == null) { continue; } - FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent(); - int creaturesToSacrifice = (int) Math.ceil(game.getBattlefield().count(filter, player.getId(), source, game) / 2.0); + int creaturesToSacrifice = (int) Math.ceil(game.getBattlefield().count(StaticFilters.FILTER_CONTROLLED_CREATURE, player.getId(), source, game) / 2.0); if (creaturesToSacrifice == 0) { continue; } - Target target = new TargetSacrifice(creaturesToSacrifice, filter); + TargetSacrifice target = new TargetSacrifice(creaturesToSacrifice, StaticFilters.FILTER_PERMANENT_CREATURE); target.chooseTarget(Outcome.Sacrifice, playerId, source, game); for (UUID permanentId : target.getTargets()) { Permanent permanent = game.getPermanent(permanentId); diff --git a/Mage.Sets/src/mage/cards/f/FrontlineMedic.java b/Mage.Sets/src/mage/cards/f/FrontlineMedic.java index f3ef1946b11..43b5ff38997 100644 --- a/Mage.Sets/src/mage/cards/f/FrontlineMedic.java +++ b/Mage.Sets/src/mage/cards/f/FrontlineMedic.java @@ -1,4 +1,3 @@ - package mage.cards.f; import mage.MageInt; @@ -18,7 +17,7 @@ import mage.constants.Duration; import mage.constants.SubType; import mage.constants.Zone; import mage.filter.FilterSpell; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.StaticFilters; import mage.filter.predicate.mageobject.VariableManaCostPredicate; import mage.target.TargetSpell; @@ -45,8 +44,7 @@ public final class FrontlineMedic extends CardImpl { this.toughness = new MageInt(3); // Battalion - Whenever Frontline Medic and at least two other creatures attack, creatures you control gain indestructible until end of turn. - Effect effect = new GainAbilityAllEffect(IndestructibleAbility.getInstance(), Duration.EndOfTurn, new FilterControlledCreaturePermanent(), false); - effect.setText("creatures you control gain indestructible until end of turn"); + Effect effect = new GainAbilityAllEffect(IndestructibleAbility.getInstance(), Duration.EndOfTurn, StaticFilters.FILTER_CONTROLLED_CREATURES, false); this.addAbility(new BattalionAbility(effect)); // Sacrifice Frontline Medic: Counter target spell with {X} in its mana cost unless its controller pays {3}. diff --git a/Mage.Sets/src/mage/cards/f/FulfillContract.java b/Mage.Sets/src/mage/cards/f/FulfillContract.java index da690eede5b..b311c455f03 100644 --- a/Mage.Sets/src/mage/cards/f/FulfillContract.java +++ b/Mage.Sets/src/mage/cards/f/FulfillContract.java @@ -1,4 +1,3 @@ - package mage.cards.f; import java.util.UUID; @@ -10,13 +9,13 @@ import mage.constants.CardType; import mage.constants.Outcome; import mage.constants.SubType; import mage.counters.CounterType; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.common.FilterControlledPermanent; import mage.filter.common.FilterCreaturePermanent; import mage.filter.predicate.Predicates; import mage.game.Game; import mage.game.permanent.Permanent; import mage.players.Player; -import mage.target.common.TargetControlledCreaturePermanent; +import mage.target.common.TargetControlledPermanent; import mage.target.common.TargetCreaturePermanent; /** @@ -26,7 +25,7 @@ import mage.target.common.TargetCreaturePermanent; public final class FulfillContract extends CardImpl { private static final FilterCreaturePermanent filterBountyCreature = new FilterCreaturePermanent("creature with a bounty counter on it"); - private static final FilterControlledCreaturePermanent filterRogueOrHunter = new FilterControlledCreaturePermanent("Rogue or Hunter you control"); + private static final FilterControlledPermanent filterRogueOrHunter = new FilterControlledPermanent("Rogue or Hunter you control"); static { filterBountyCreature.add(CounterType.BOUNTY.getPredicate()); @@ -39,7 +38,7 @@ public final class FulfillContract extends CardImpl { // Destroy target creature with a bounty counter on it. If that creature is destroyed this way, you may put a +1/+1 counter on target Rogue or Hunter you control. this.getSpellAbility().addEffect(new FulfillContractEffect()); this.getSpellAbility().addTarget(new TargetCreaturePermanent(filterBountyCreature)); - this.getSpellAbility().addTarget(new TargetControlledCreaturePermanent(filterRogueOrHunter)); + this.getSpellAbility().addTarget(new TargetControlledPermanent(filterRogueOrHunter)); } diff --git a/Mage.Sets/src/mage/cards/g/GallifreyStands.java b/Mage.Sets/src/mage/cards/g/GallifreyStands.java index 7536158d6b1..69d010ff01c 100644 --- a/Mage.Sets/src/mage/cards/g/GallifreyStands.java +++ b/Mage.Sets/src/mage/cards/g/GallifreyStands.java @@ -16,7 +16,7 @@ import mage.cards.Cards; import mage.cards.CardsImpl; import mage.constants.*; import mage.filter.FilterCard; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.common.FilterControlledPermanent; import mage.filter.common.FilterCreatureCard; import mage.game.Game; import mage.players.Player; @@ -29,7 +29,7 @@ import java.util.UUID; public final class GallifreyStands extends CardImpl { private static final FilterCreatureCard filter = new FilterCreatureCard("a Doctor creature card"); - private static final FilterControlledCreaturePermanent filter2 = new FilterControlledCreaturePermanent(SubType.DOCTOR, "Doctors"); + private static final FilterControlledPermanent filter2 = new FilterControlledPermanent(SubType.DOCTOR, "Doctors"); static { filter.add(SubType.DOCTOR.getPredicate()); diff --git a/Mage.Sets/src/mage/cards/g/GangrenousGoliath.java b/Mage.Sets/src/mage/cards/g/GangrenousGoliath.java index f938a316f34..7313417579a 100644 --- a/Mage.Sets/src/mage/cards/g/GangrenousGoliath.java +++ b/Mage.Sets/src/mage/cards/g/GangrenousGoliath.java @@ -1,4 +1,3 @@ - package mage.cards.g; import java.util.UUID; @@ -11,8 +10,8 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; import mage.constants.Zone; -import mage.filter.common.FilterControlledCreaturePermanent; -import mage.target.common.TargetControlledCreaturePermanent; +import mage.filter.common.FilterControlledPermanent; +import mage.target.common.TargetControlledPermanent; /** * @@ -20,7 +19,7 @@ import mage.target.common.TargetControlledCreaturePermanent; */ public final class GangrenousGoliath extends CardImpl { - private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent(SubType.CLERIC,"untapped Clerics you control"); + private static final FilterControlledPermanent filter = new FilterControlledPermanent(SubType.CLERIC,"untapped Clerics you control"); public GangrenousGoliath(UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{B}{B}"); @@ -33,7 +32,7 @@ public final class GangrenousGoliath extends CardImpl { this.addAbility(new SimpleActivatedAbility( Zone.GRAVEYARD, new ReturnToHandSourceEffect(), - new TapTargetCost(new TargetControlledCreaturePermanent(3, 3, filter, true)))); + new TapTargetCost(new TargetControlledPermanent(3, 3, filter, true)))); } private GangrenousGoliath(final GangrenousGoliath card) { diff --git a/Mage.Sets/src/mage/cards/g/GarrukPrimalHunter.java b/Mage.Sets/src/mage/cards/g/GarrukPrimalHunter.java index dc3c05c34b2..3f1e67e7d4f 100644 --- a/Mage.Sets/src/mage/cards/g/GarrukPrimalHunter.java +++ b/Mage.Sets/src/mage/cards/g/GarrukPrimalHunter.java @@ -1,4 +1,3 @@ - package mage.cards.g; import java.util.UUID; @@ -13,7 +12,7 @@ import mage.constants.CardType; import mage.constants.SubType; import mage.constants.Outcome; import mage.constants.SuperType; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.StaticFilters; import mage.filter.common.FilterControlledLandPermanent; import mage.filter.common.FilterControlledPermanent; import mage.game.Game; @@ -74,7 +73,7 @@ class GarrukPrimalHunterEffect extends OneShotEffect { Player player = game.getPlayer(source.getControllerId()); if (player != null) { int amount = 0; - for (Permanent p : game.getBattlefield().getActivePermanents(new FilterControlledCreaturePermanent(), source.getControllerId(), game)) { + for (Permanent p : game.getBattlefield().getActivePermanents(StaticFilters.FILTER_CONTROLLED_CREATURE, source.getControllerId(), game)) { if (p.getPower().getValue() > amount) { amount = p.getPower().getValue(); } diff --git a/Mage.Sets/src/mage/cards/g/GemcutterBuccaneer.java b/Mage.Sets/src/mage/cards/g/GemcutterBuccaneer.java index 50a1a5e81d8..ab4d88023d8 100644 --- a/Mage.Sets/src/mage/cards/g/GemcutterBuccaneer.java +++ b/Mage.Sets/src/mage/cards/g/GemcutterBuccaneer.java @@ -36,7 +36,7 @@ import mage.target.TargetPermanent; */ public final class GemcutterBuccaneer extends CardImpl { - private static final FilterPermanent filter = new FilterControlledCreaturePermanent(SubType.PIRATE, "Pirate"); + private static final FilterPermanent filter = new FilterControlledPermanent(SubType.PIRATE, "Pirate"); public GemcutterBuccaneer(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{R}"); diff --git a/Mage.Sets/src/mage/cards/g/GhaveGuruOfSpores.java b/Mage.Sets/src/mage/cards/g/GhaveGuruOfSpores.java index 5ee4e8f6ce2..e883e08fcb1 100644 --- a/Mage.Sets/src/mage/cards/g/GhaveGuruOfSpores.java +++ b/Mage.Sets/src/mage/cards/g/GhaveGuruOfSpores.java @@ -20,10 +20,8 @@ import mage.constants.SuperType; import mage.constants.Zone; import mage.counters.CounterType; import mage.filter.StaticFilters; -import mage.filter.common.FilterControlledCreaturePermanent; import mage.game.permanent.token.SaprolingToken; import mage.target.common.TargetControlledCreaturePermanent; -import mage.target.common.TargetControlledPermanent; import mage.target.common.TargetCreaturePermanent; /** @@ -46,7 +44,7 @@ public final class GhaveGuruOfSpores extends CardImpl { // {1}, Remove a +1/+1 counter from a creature you control: Create a 1/1 green Saproling creature token. Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new CreateTokenEffect(new SaprolingToken()), new GenericManaCost(1)); - ability.addCost(new RemoveCounterCost(new TargetControlledCreaturePermanent(1, 1, new FilterControlledCreaturePermanent(), true), CounterType.P1P1)); + ability.addCost(new RemoveCounterCost(new TargetControlledCreaturePermanent().withNotTarget(true), CounterType.P1P1)); this.addAbility(ability); // {1}, Sacrifice a creature: Put a +1/+1 counter on target creature. diff --git a/Mage.Sets/src/mage/cards/g/GiantsGrasp.java b/Mage.Sets/src/mage/cards/g/GiantsGrasp.java index a6600e37704..87f1342896a 100644 --- a/Mage.Sets/src/mage/cards/g/GiantsGrasp.java +++ b/Mage.Sets/src/mage/cards/g/GiantsGrasp.java @@ -9,7 +9,7 @@ import mage.constants.SubType; import mage.abilities.Ability; import mage.abilities.effects.common.AttachEffect; import mage.constants.Outcome; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.common.FilterControlledPermanent; import mage.target.TargetPermanent; import mage.abilities.keyword.EnchantAbility; import mage.cards.CardImpl; @@ -23,7 +23,7 @@ import mage.target.common.TargetNonlandPermanent; */ public final class GiantsGrasp extends CardImpl { - private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent(SubType.GIANT); + private static final FilterControlledPermanent filter = new FilterControlledPermanent(SubType.GIANT); public GiantsGrasp(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{2}{U}{U}"); diff --git a/Mage.Sets/src/mage/cards/g/GideonsPhalanx.java b/Mage.Sets/src/mage/cards/g/GideonsPhalanx.java index b121d8df007..8210079e24a 100644 --- a/Mage.Sets/src/mage/cards/g/GideonsPhalanx.java +++ b/Mage.Sets/src/mage/cards/g/GideonsPhalanx.java @@ -1,4 +1,3 @@ - package mage.cards.g; import java.util.UUID; @@ -13,7 +12,7 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Duration; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.StaticFilters; import mage.game.permanent.token.KnightToken; /** @@ -30,7 +29,7 @@ public final class GideonsPhalanx extends CardImpl { // Spell mastery — If there are two or more instant and/or sorcery cards in your graveyard, creatures you control gain indestructible until end of turn. Effect effect = new ConditionalOneShotEffect( - new AddContinuousEffectToGame(new GainAbilityAllEffect(IndestructibleAbility.getInstance(), Duration.EndOfTurn, new FilterControlledCreaturePermanent())), + new AddContinuousEffectToGame(new GainAbilityAllEffect(IndestructibleAbility.getInstance(), Duration.EndOfTurn, StaticFilters.FILTER_CONTROLLED_CREATURES)), SpellMasteryCondition.instance, "
Spell mastery — If there are two or more instant and/or sorcery cards in your graveyard, creatures you control gain indestructible until end of turn"); this.getSpellAbility().addEffect(effect); diff --git a/Mage.Sets/src/mage/cards/g/GlaringSpotlight.java b/Mage.Sets/src/mage/cards/g/GlaringSpotlight.java index 358199a8069..dbebfae7724 100644 --- a/Mage.Sets/src/mage/cards/g/GlaringSpotlight.java +++ b/Mage.Sets/src/mage/cards/g/GlaringSpotlight.java @@ -1,4 +1,3 @@ - package mage.cards.g; import java.util.UUID; @@ -15,17 +14,16 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.*; import mage.filter.StaticFilters; -import mage.filter.common.FilterControlledCreaturePermanent; import mage.game.Game; import mage.game.permanent.Permanent; /** * Gatecrash FAQ 21.01.2013 - * + *

* Creatures your opponents control don't actually lose hexproof, although you * will ignore hexproof for purposes of choosing targets of spells and abilities * you control. - * + *

* Creatures that come under your control after Glaring Spotlight's last ability * resolves won't have hexproof but can't be blocked that turn. * @@ -41,9 +39,9 @@ public final class GlaringSpotlight extends CardImpl { // {3}, Sacrifice Glaring Spotlight: Creatures you control gain hexproof until end of turn and can't be blocked this turn. Ability ability = new SimpleActivatedAbility( - Zone.BATTLEFIELD, new GainAbilityControlledEffect(HexproofAbility.getInstance(), Duration.EndOfTurn, StaticFilters.FILTER_PERMANENT_CREATURE, false), + Zone.BATTLEFIELD, new GainAbilityControlledEffect(HexproofAbility.getInstance(), Duration.EndOfTurn, StaticFilters.FILTER_PERMANENT_CREATURES, false), new GenericManaCost(3)); - ability.addEffect(new CantBeBlockedAllEffect(new FilterControlledCreaturePermanent(), Duration.EndOfTurn)); + ability.addEffect(new CantBeBlockedAllEffect(StaticFilters.FILTER_CONTROLLED_CREATURES, Duration.EndOfTurn).setText("and can't be blocked this turn")); ability.addCost(new SacrificeSourceCost()); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/g/GoblinSledder.java b/Mage.Sets/src/mage/cards/g/GoblinSledder.java index 556927858e5..1baad15521a 100644 --- a/Mage.Sets/src/mage/cards/g/GoblinSledder.java +++ b/Mage.Sets/src/mage/cards/g/GoblinSledder.java @@ -13,8 +13,7 @@ import mage.constants.CardType; import mage.constants.Duration; import mage.constants.SubType; import mage.constants.Zone; -import mage.filter.common.FilterControlledCreaturePermanent; -import mage.target.common.TargetControlledCreaturePermanent; +import mage.filter.FilterPermanent; import mage.target.common.TargetCreaturePermanent; /** @@ -23,11 +22,7 @@ import mage.target.common.TargetCreaturePermanent; */ public final class GoblinSledder extends CardImpl { - private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("a Goblin"); - - static { - filter.add(SubType.GOBLIN.getPredicate()); - } + private static final FilterPermanent filter = new FilterPermanent(SubType.GOBLIN, "a Goblin"); public GoblinSledder(UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{R}"); diff --git a/Mage.Sets/src/mage/cards/g/GoblinTurncoat.java b/Mage.Sets/src/mage/cards/g/GoblinTurncoat.java index f995d021be6..9f4cd529d1d 100644 --- a/Mage.Sets/src/mage/cards/g/GoblinTurncoat.java +++ b/Mage.Sets/src/mage/cards/g/GoblinTurncoat.java @@ -12,8 +12,7 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; import mage.constants.Zone; -import mage.filter.common.FilterControlledCreaturePermanent; -import mage.target.common.TargetControlledCreaturePermanent; +import mage.filter.FilterPermanent; /** * @@ -21,11 +20,7 @@ import mage.target.common.TargetControlledCreaturePermanent; */ public final class GoblinTurncoat extends CardImpl { - private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("a Goblin"); - - static { - filter.add(SubType.GOBLIN.getPredicate()); - } + private static final FilterPermanent filter = new FilterPermanent(SubType.GOBLIN, "a Goblin"); public GoblinTurncoat(UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{B}"); diff --git a/Mage.Sets/src/mage/cards/g/GoblinWarrens.java b/Mage.Sets/src/mage/cards/g/GoblinWarrens.java index 5362c0b54da..7152ad16eb5 100644 --- a/Mage.Sets/src/mage/cards/g/GoblinWarrens.java +++ b/Mage.Sets/src/mage/cards/g/GoblinWarrens.java @@ -1,4 +1,3 @@ - package mage.cards.g; import java.util.UUID; @@ -12,9 +11,8 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; import mage.constants.Zone; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.FilterPermanent; import mage.game.permanent.token.GoblinToken; -import mage.target.common.TargetControlledCreaturePermanent; /** * @@ -22,12 +20,11 @@ import mage.target.common.TargetControlledCreaturePermanent; */ public final class GoblinWarrens extends CardImpl { - private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent(SubType.GOBLIN, "Goblins"); + private static final FilterPermanent filter = new FilterPermanent(SubType.GOBLIN, "Goblins"); public GoblinWarrens(UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{2}{R}"); - // {2}{R}, Sacrifice two Goblins: Create three 1/1 red Goblin creature tokens. Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new CreateTokenEffect(new GoblinToken(), 3), new ManaCostsImpl<>("{2}{R}")); ability.addCost(new SacrificeTargetCost(2, filter)); diff --git a/Mage.Sets/src/mage/cards/g/GoblinsOfTheFlarg.java b/Mage.Sets/src/mage/cards/g/GoblinsOfTheFlarg.java index dcb195f5f60..804fa23ea70 100644 --- a/Mage.Sets/src/mage/cards/g/GoblinsOfTheFlarg.java +++ b/Mage.Sets/src/mage/cards/g/GoblinsOfTheFlarg.java @@ -1,4 +1,3 @@ - package mage.cards.g; import mage.MageInt; @@ -9,7 +8,7 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.common.FilterControlledPermanent; import java.util.UUID; @@ -18,11 +17,7 @@ import java.util.UUID; */ public final class GoblinsOfTheFlarg extends CardImpl { - private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("a Dwarf"); - - static { - filter.add(SubType.DWARF.getPredicate()); - } + private static final FilterControlledPermanent filter = new FilterControlledPermanent(SubType.DWARF, "a Dwarf"); public GoblinsOfTheFlarg(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{R}"); diff --git a/Mage.Sets/src/mage/cards/g/GodEternalRhonas.java b/Mage.Sets/src/mage/cards/g/GodEternalRhonas.java index 4860b17fb3f..4a60817eeff 100644 --- a/Mage.Sets/src/mage/cards/g/GodEternalRhonas.java +++ b/Mage.Sets/src/mage/cards/g/GodEternalRhonas.java @@ -7,18 +7,18 @@ import mage.abilities.common.GodEternalDiesTriggeredAbility; import mage.abilities.effects.ContinuousEffect; import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.common.continuous.BoostTargetEffect; +import mage.abilities.effects.common.continuous.GainAbilityTargetEffect; import mage.abilities.keyword.DeathtouchAbility; import mage.abilities.keyword.VigilanceAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.*; +import mage.filter.StaticFilters; import mage.game.Game; import mage.game.permanent.Permanent; import mage.target.targetpointer.FixedTarget; import java.util.UUID; -import mage.abilities.effects.common.continuous.GainAbilityTargetEffect; -import mage.filter.common.FilterControlledCreaturePermanent; /** * @author TheElk801 @@ -55,8 +55,6 @@ public final class GodEternalRhonas extends CardImpl { } class GodEternalRhonasEffect extends OneShotEffect { - - private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent(); GodEternalRhonasEffect() { super(Outcome.Benefit); @@ -76,7 +74,7 @@ class GodEternalRhonasEffect extends OneShotEffect { @Override public boolean apply(Game game, Ability source) { Permanent godEternalRhonas = game.getPermanent(source.getSourceId()); - for (Permanent permanent : game.getBattlefield().getAllActivePermanents(filter, source.getControllerId(), game)) { + for (Permanent permanent : game.getBattlefield().getAllActivePermanents(StaticFilters.FILTER_CONTROLLED_CREATURES, source.getControllerId(), game)) { if (permanent == null || godEternalRhonas != null && permanent == godEternalRhonas) { diff --git a/Mage.Sets/src/mage/cards/g/GodoBanditWarlord.java b/Mage.Sets/src/mage/cards/g/GodoBanditWarlord.java index 214cb25bb6a..32a87282cf2 100644 --- a/Mage.Sets/src/mage/cards/g/GodoBanditWarlord.java +++ b/Mage.Sets/src/mage/cards/g/GodoBanditWarlord.java @@ -1,4 +1,3 @@ - package mage.cards.g; import java.util.UUID; @@ -16,7 +15,7 @@ import mage.constants.CardType; import mage.constants.SubType; import mage.constants.SuperType; import mage.filter.FilterCard; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.common.FilterControlledPermanent; import mage.filter.predicate.mageobject.AnotherPredicate; import mage.target.common.TargetCardInLibrary; @@ -27,7 +26,7 @@ import mage.target.common.TargetCardInLibrary; public final class GodoBanditWarlord extends CardImpl { private static final FilterCard filter = new FilterCard("an Equipment card"); - private static final FilterControlledCreaturePermanent filter2 = new FilterControlledCreaturePermanent(SubType.SAMURAI); + private static final FilterControlledPermanent filter2 = new FilterControlledPermanent(SubType.SAMURAI); static { filter.add(SubType.EQUIPMENT.getPredicate()); diff --git a/Mage.Sets/src/mage/cards/g/GolgariCharm.java b/Mage.Sets/src/mage/cards/g/GolgariCharm.java index 5fe0b4f363a..4cd696f2ec4 100644 --- a/Mage.Sets/src/mage/cards/g/GolgariCharm.java +++ b/Mage.Sets/src/mage/cards/g/GolgariCharm.java @@ -9,7 +9,7 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Duration; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.StaticFilters; import mage.target.common.TargetEnchantmentPermanent; /** @@ -21,7 +21,6 @@ public final class GolgariCharm extends CardImpl { public GolgariCharm(UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{B}{G}"); - // Choose one — All creatures get -1/-1 until end of turn; this.getSpellAbility().addEffect(new BoostAllEffect(-1, -1, Duration.EndOfTurn)); @@ -31,7 +30,7 @@ public final class GolgariCharm extends CardImpl { this.getSpellAbility().addMode(mode); // or regenerate each creature you control. - mode = new Mode(new RegenerateAllEffect(new FilterControlledCreaturePermanent())); + mode = new Mode(new RegenerateAllEffect(StaticFilters.FILTER_CONTROLLED_CREATURE)); this.getSpellAbility().addMode(mode); } diff --git a/Mage.Sets/src/mage/cards/g/GrafHarvest.java b/Mage.Sets/src/mage/cards/g/GrafHarvest.java index 68e4f5fd0d0..2b75e728052 100644 --- a/Mage.Sets/src/mage/cards/g/GrafHarvest.java +++ b/Mage.Sets/src/mage/cards/g/GrafHarvest.java @@ -17,7 +17,7 @@ import mage.constants.CardType; import mage.constants.Duration; import mage.constants.SubType; import mage.constants.Zone; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.common.FilterControlledPermanent; import mage.filter.common.FilterCreatureCard; import mage.game.permanent.token.ZombieToken; import mage.target.common.TargetCardInYourGraveyard; @@ -28,7 +28,7 @@ import mage.target.common.TargetCardInYourGraveyard; */ public final class GrafHarvest extends CardImpl { - private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("Zombies you control"); + private static final FilterControlledPermanent filter = new FilterControlledPermanent("Zombies you control"); static { filter.add(SubType.ZOMBIE.getPredicate()); diff --git a/Mage.Sets/src/mage/cards/g/GreaterKraytDragon.java b/Mage.Sets/src/mage/cards/g/GreaterKraytDragon.java index ab5507bc355..f01f52b6f91 100644 --- a/Mage.Sets/src/mage/cards/g/GreaterKraytDragon.java +++ b/Mage.Sets/src/mage/cards/g/GreaterKraytDragon.java @@ -13,7 +13,7 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; import mage.counters.CounterType; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.StaticFilters; /** * @@ -34,7 +34,7 @@ public final class GreaterKraytDragon extends CardImpl { this.addAbility(new MonstrosityAbility("{X}{X}{R}{G}{W}", Integer.MAX_VALUE)); // When Greater Krayt Dragon becomes monstrous, draw a card for each +1/+1 counter on creatures you control. - this.addAbility(new BecomesMonstrousSourceTriggeredAbility(new DrawCardSourceControllerEffect(new CountersCount(CounterType.P1P1, new FilterControlledCreaturePermanent())))); + this.addAbility(new BecomesMonstrousSourceTriggeredAbility(new DrawCardSourceControllerEffect(new CountersCount(CounterType.P1P1, StaticFilters.FILTER_CONTROLLED_CREATURES)))); } diff --git a/Mage.Sets/src/mage/cards/h/HagraDiabolist.java b/Mage.Sets/src/mage/cards/h/HagraDiabolist.java index b5e5e9c9191..2e266139cd0 100644 --- a/Mage.Sets/src/mage/cards/h/HagraDiabolist.java +++ b/Mage.Sets/src/mage/cards/h/HagraDiabolist.java @@ -9,8 +9,7 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; -import mage.constants.TargetController; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.common.FilterControlledPermanent; import mage.target.TargetPlayer; import java.util.UUID; @@ -20,12 +19,7 @@ import java.util.UUID; */ public final class HagraDiabolist extends CardImpl { - private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("Allies you control"); - - static { - filter.add(SubType.ALLY.getPredicate()); - filter.add(TargetController.YOU.getControllerPredicate()); - } + private static final FilterControlledPermanent filter = new FilterControlledPermanent(SubType.ALLY, "Allies you control"); public HagraDiabolist(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{B}"); diff --git a/Mage.Sets/src/mage/cards/h/HamletVanguard.java b/Mage.Sets/src/mage/cards/h/HamletVanguard.java index 28fc81507f9..140a00b6799 100644 --- a/Mage.Sets/src/mage/cards/h/HamletVanguard.java +++ b/Mage.Sets/src/mage/cards/h/HamletVanguard.java @@ -15,7 +15,7 @@ import mage.constants.CardType; import mage.constants.SubType; import mage.counters.CounterType; import mage.filter.FilterPermanent; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.common.FilterControlledPermanent; import mage.filter.predicate.mageobject.AnotherPredicate; import mage.filter.predicate.permanent.TokenPredicate; @@ -26,7 +26,7 @@ import java.util.UUID; */ public final class HamletVanguard extends CardImpl { - private static final FilterPermanent filter = new FilterControlledCreaturePermanent(SubType.HUMAN); + private static final FilterPermanent filter = new FilterControlledPermanent(SubType.HUMAN); static { filter.add(AnotherPredicate.instance); diff --git a/Mage.Sets/src/mage/cards/h/HarabazDruid.java b/Mage.Sets/src/mage/cards/h/HarabazDruid.java index a85b7fc7165..0aa64ca393f 100644 --- a/Mage.Sets/src/mage/cards/h/HarabazDruid.java +++ b/Mage.Sets/src/mage/cards/h/HarabazDruid.java @@ -1,4 +1,3 @@ - package mage.cards.h; import java.util.UUID; @@ -11,18 +10,14 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.common.FilterControlledPermanent; /** * @author Loki */ public final class HarabazDruid extends CardImpl { - private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("Allies you control"); - - static { - filter.add(SubType.ALLY.getPredicate()); - } + private static final FilterControlledPermanent filter = new FilterControlledPermanent(SubType.ALLY, "Allies you control"); public HarabazDruid(UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{G}"); diff --git a/Mage.Sets/src/mage/cards/h/Heartmender.java b/Mage.Sets/src/mage/cards/h/Heartmender.java index d86cdc507c4..994126dafc4 100644 --- a/Mage.Sets/src/mage/cards/h/Heartmender.java +++ b/Mage.Sets/src/mage/cards/h/Heartmender.java @@ -1,4 +1,3 @@ - package mage.cards.h; import java.util.UUID; @@ -15,7 +14,7 @@ import mage.constants.Outcome; import mage.constants.TargetController; import mage.counters.Counter; import mage.counters.CounterType; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.StaticFilters; import mage.game.Game; import mage.game.permanent.Permanent; @@ -53,7 +52,7 @@ class HeartmenderEffect extends OneShotEffect { private final Counter counter; - public HeartmenderEffect(Counter counter) { + HeartmenderEffect(Counter counter) { super(Outcome.BoostCreature); this.counter = counter; staticText = "remove a -1/-1 counter from each creature you control"; @@ -67,11 +66,10 @@ class HeartmenderEffect extends OneShotEffect { @Override public boolean apply(Game game, Ability source) { boolean applied = false; - FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent(); - if (game.getBattlefield().getActivePermanents(filter, source.getControllerId(), game).isEmpty()) { + if (game.getBattlefield().getActivePermanents(StaticFilters.FILTER_CONTROLLED_CREATURE, source.getControllerId(), game).isEmpty()) { return true; } - for (Permanent creature : game.getBattlefield().getActivePermanents(filter, source.getControllerId(), game)) { + for (Permanent creature : game.getBattlefield().getActivePermanents(StaticFilters.FILTER_CONTROLLED_CREATURE, source.getControllerId(), game)) { if (creature != null && creature.getCounters(game).getCount(counter.getName()) >= counter.getCount()) { creature.removeCounters(counter.getName(), counter.getCount(), source, game); diff --git a/Mage.Sets/src/mage/cards/h/HolgaRelentlessRager.java b/Mage.Sets/src/mage/cards/h/HolgaRelentlessRager.java index 1fcd88f006f..f1f2c53089f 100644 --- a/Mage.Sets/src/mage/cards/h/HolgaRelentlessRager.java +++ b/Mage.Sets/src/mage/cards/h/HolgaRelentlessRager.java @@ -55,15 +55,16 @@ public final class HolgaRelentlessRager extends CardImpl { } } -class HolgaRelentlessRagerEffect extends OneShotEffect { - private enum HolgaRelentlessRagerPredicate implements Predicate { - instance; +enum HolgaRelentlessRagerPredicate implements Predicate { + instance; - @Override - public boolean apply(Permanent input, Game game) { - return game.getPlayer(game.getCombat().getDefenderId(input.getId())) != null; - } + @Override + public boolean apply(Permanent input, Game game) { + return game.getPlayer(game.getCombat().getDefenderId(input.getId())) != null; } +} + +class HolgaRelentlessRagerEffect extends OneShotEffect { private static final FilterPermanent filter = new FilterControlledCreaturePermanent(); diff --git a/Mage.Sets/src/mage/cards/h/HopeAgainstHope.java b/Mage.Sets/src/mage/cards/h/HopeAgainstHope.java index fcb418eb72a..9bb3891b204 100644 --- a/Mage.Sets/src/mage/cards/h/HopeAgainstHope.java +++ b/Mage.Sets/src/mage/cards/h/HopeAgainstHope.java @@ -14,7 +14,7 @@ import mage.abilities.keyword.FirstStrikeAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.*; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.StaticFilters; import mage.target.TargetPermanent; import mage.target.common.TargetCreaturePermanent; @@ -35,7 +35,7 @@ public final class HopeAgainstHope extends CardImpl { this.addAbility(new EnchantAbility(auraTarget)); // Enchanted creature gets +1/+1 for each creature you control. - PermanentsOnBattlefieldCount amount = new PermanentsOnBattlefieldCount(new FilterControlledCreaturePermanent(), 1); + PermanentsOnBattlefieldCount amount = new PermanentsOnBattlefieldCount(StaticFilters.FILTER_CONTROLLED_CREATURE, 1); this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEnchantedEffect(amount, amount, Duration.WhileOnBattlefield))); // As long as enchanted creature is a Human, it has first strike. diff --git a/Mage.Sets/src/mage/cards/h/HungryLynx.java b/Mage.Sets/src/mage/cards/h/HungryLynx.java index 2fee319e171..e654581a62d 100644 --- a/Mage.Sets/src/mage/cards/h/HungryLynx.java +++ b/Mage.Sets/src/mage/cards/h/HungryLynx.java @@ -1,9 +1,8 @@ - package mage.cards.h; -import java.util.UUID; import mage.MageInt; -import mage.abilities.Ability;import mage.abilities.common.BeginningOfEndStepTriggeredAbility; +import mage.abilities.Ability; +import mage.abilities.common.BeginningOfEndStepTriggeredAbility; import mage.abilities.common.DiesCreatureTriggeredAbility; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.effects.Effect; @@ -13,39 +12,30 @@ import mage.abilities.effects.common.counter.AddCountersAllEffect; import mage.abilities.keyword.ProtectionAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.Duration; -import mage.constants.SubType; -import mage.constants.TargetController; -import mage.constants.Zone; +import mage.constants.*; import mage.counters.CounterType; import mage.filter.FilterCard; -import mage.filter.common.FilterControlledCreaturePermanent; -import mage.filter.common.FilterCreaturePermanent; +import mage.filter.FilterPermanent; +import mage.filter.common.FilterControlledPermanent; import mage.game.permanent.token.DeathtouchRatToken; -import mage.target.Target; import mage.target.common.TargetOpponent; +import java.util.UUID; + /** * * @author Saga */ public final class HungryLynx extends CardImpl { - private static final FilterControlledCreaturePermanent filterCat = new FilterControlledCreaturePermanent("Cats"); - static { - filterCat.add(SubType.CAT.getPredicate()); - } + private static final FilterControlledPermanent filterCat = new FilterControlledPermanent(SubType.CAT, "Cats"); private static final FilterCard filterProRat = new FilterCard("Rats"); static { filterProRat.add(SubType.RAT.getPredicate()); } - private static final FilterCreaturePermanent filterRat = new FilterCreaturePermanent("a Rat"); - static { - filterRat.add(SubType.RAT.getPredicate()); - } + private static final FilterPermanent filterRat = new FilterPermanent(SubType.RAT, "a Rat"); public HungryLynx(UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{G}"); @@ -60,8 +50,7 @@ public final class HungryLynx extends CardImpl { // At the beginning of your end step, target opponent creates a 1/1 black Rat creature token with deathtouch. Ability ability = new BeginningOfEndStepTriggeredAbility(Zone.BATTLEFIELD, new CreateTokenTargetEffect(new DeathtouchRatToken()), TargetController.YOU, null, false); - Target target = new TargetOpponent(); - ability.addTarget(target); + ability.addTarget(new TargetOpponent()); this.addAbility(ability); // Whenever a Rat dies, put a +1/+1 counter on each Cat you control. diff --git a/Mage.Sets/src/mage/cards/i/IizukaTheRuthless.java b/Mage.Sets/src/mage/cards/i/IizukaTheRuthless.java index 327fadf0a59..2b6da907957 100644 --- a/Mage.Sets/src/mage/cards/i/IizukaTheRuthless.java +++ b/Mage.Sets/src/mage/cards/i/IizukaTheRuthless.java @@ -1,4 +1,3 @@ - package mage.cards.i; import java.util.UUID; @@ -13,8 +12,8 @@ import mage.abilities.keyword.DoubleStrikeAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.*; +import mage.filter.FilterPermanent; import mage.filter.common.FilterControlledCreaturePermanent; -import mage.target.common.TargetControlledCreaturePermanent; /** * @@ -22,13 +21,8 @@ import mage.target.common.TargetControlledCreaturePermanent; */ public final class IizukaTheRuthless extends CardImpl { - private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("Samurai"); - private static final FilterControlledCreaturePermanent filter2 = new FilterControlledCreaturePermanent("Samurai creatures"); - - static { - filter.add(SubType.SAMURAI.getPredicate()); - filter2.add(SubType.SAMURAI.getPredicate()); - } + private static final FilterPermanent filter = new FilterPermanent(SubType.SAMURAI, "Samurai"); + private static final FilterControlledCreaturePermanent filter2 = new FilterControlledCreaturePermanent(SubType.SAMURAI, "Samurai creatures"); public IizukaTheRuthless(UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{R}{R}"); diff --git a/Mage.Sets/src/mage/cards/i/Immerwolf.java b/Mage.Sets/src/mage/cards/i/Immerwolf.java index cc62359f98f..85299c15d76 100644 --- a/Mage.Sets/src/mage/cards/i/Immerwolf.java +++ b/Mage.Sets/src/mage/cards/i/Immerwolf.java @@ -12,7 +12,7 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Duration; import mage.constants.SubType; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.common.FilterControlledPermanent; import mage.filter.common.FilterCreaturePermanent; import mage.filter.predicate.Predicates; import mage.game.Game; @@ -59,13 +59,13 @@ public final class Immerwolf extends CardImpl { class ImmerwolfEffect extends RestrictionEffect { - private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent(SubType.WEREWOLF); + private static final FilterControlledPermanent filter = new FilterControlledPermanent(SubType.WEREWOLF); static { filter.add(Predicates.not(SubType.HUMAN.getPredicate())); } - public ImmerwolfEffect() { + ImmerwolfEffect() { super(Duration.WhileOnBattlefield); staticText = "Non-Human Werewolves you control can't transform"; } diff --git a/Mage.Sets/src/mage/cards/i/InfernalOffering.java b/Mage.Sets/src/mage/cards/i/InfernalOffering.java index a36f58763e5..82412ed39ed 100644 --- a/Mage.Sets/src/mage/cards/i/InfernalOffering.java +++ b/Mage.Sets/src/mage/cards/i/InfernalOffering.java @@ -1,12 +1,5 @@ - package mage.cards.i; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; -import java.util.UUID; import mage.abilities.Ability; import mage.abilities.effects.OneShotEffect; import mage.cards.Card; @@ -15,15 +8,18 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Outcome; import mage.constants.Zone; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.StaticFilters; import mage.filter.common.FilterCreatureCard; import mage.game.Game; import mage.game.permanent.Permanent; import mage.players.Player; import mage.target.Target; import mage.target.common.TargetCardInYourGraveyard; -import mage.target.common.TargetControlledCreaturePermanent; import mage.target.common.TargetOpponent; +import mage.target.common.TargetSacrifice; + +import java.util.*; +import java.util.Map.Entry; /** * @@ -79,7 +75,7 @@ class InfernalOfferingSacrificeEffect extends OneShotEffect { Map toSacrifice = new HashMap<>(2); for (UUID playerId : game.getState().getPlayersInRange(player.getId(), game)) { if (playerId.equals(player.getId()) || playerId.equals(opponent.getId())) { - target = new TargetControlledCreaturePermanent(1, 1, new FilterControlledCreaturePermanent(), true); + target = new TargetSacrifice(StaticFilters.FILTER_PERMANENT_CREATURE); if (target.choose(Outcome.Sacrifice, playerId, source.getControllerId(), source, game)) { toSacrifice.put(playerId, target.getFirstTarget()); } diff --git a/Mage.Sets/src/mage/cards/i/InspiringRoar.java b/Mage.Sets/src/mage/cards/i/InspiringRoar.java index 46f80ce73e8..92af485b598 100644 --- a/Mage.Sets/src/mage/cards/i/InspiringRoar.java +++ b/Mage.Sets/src/mage/cards/i/InspiringRoar.java @@ -1,4 +1,3 @@ - package mage.cards.i; import java.util.UUID; @@ -7,7 +6,7 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.counters.CounterType; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.StaticFilters; /** * @@ -19,7 +18,7 @@ public final class InspiringRoar extends CardImpl { super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{3}{W}"); // Put a +1/+1 counter on each creature you control. - getSpellAbility().addEffect(new AddCountersAllEffect(CounterType.P1P1.createInstance(), new FilterControlledCreaturePermanent())); + getSpellAbility().addEffect(new AddCountersAllEffect(CounterType.P1P1.createInstance(), StaticFilters.FILTER_CONTROLLED_CREATURE)); } private InspiringRoar(final InspiringRoar card) { diff --git a/Mage.Sets/src/mage/cards/i/IntrepidProvisioner.java b/Mage.Sets/src/mage/cards/i/IntrepidProvisioner.java index 844e2edccc1..d5106556afa 100644 --- a/Mage.Sets/src/mage/cards/i/IntrepidProvisioner.java +++ b/Mage.Sets/src/mage/cards/i/IntrepidProvisioner.java @@ -1,4 +1,3 @@ - package mage.cards.i; import java.util.UUID; @@ -12,9 +11,9 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Duration; import mage.constants.SubType; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.common.FilterControlledPermanent; import mage.filter.predicate.mageobject.AnotherPredicate; -import mage.target.common.TargetControlledCreaturePermanent; +import mage.target.TargetPermanent; /** * @@ -22,7 +21,7 @@ import mage.target.common.TargetControlledCreaturePermanent; */ public final class IntrepidProvisioner extends CardImpl { - private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent(SubType.HUMAN, "another target Human you control"); + private static final FilterControlledPermanent filter = new FilterControlledPermanent(SubType.HUMAN, "another target Human you control"); static { filter.add(AnotherPredicate.instance); @@ -39,7 +38,7 @@ public final class IntrepidProvisioner extends CardImpl { this.addAbility(TrampleAbility.getInstance()); // When Intrepid Provisioner enters the battlefield, another target Human you control gets +2/+2 until end of turn. Ability ability = new EntersBattlefieldTriggeredAbility(new BoostTargetEffect(2, 2, Duration.EndOfTurn), false); - ability.addTarget(new TargetControlledCreaturePermanent(filter)); + ability.addTarget(new TargetPermanent(filter)); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/i/IshkanahGrafwidow.java b/Mage.Sets/src/mage/cards/i/IshkanahGrafwidow.java index 8f3590dea72..63ae68c7143 100644 --- a/Mage.Sets/src/mage/cards/i/IshkanahGrafwidow.java +++ b/Mage.Sets/src/mage/cards/i/IshkanahGrafwidow.java @@ -19,7 +19,7 @@ import mage.constants.CardType; import mage.constants.SubType; import mage.constants.SuperType; import mage.constants.Zone; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.common.FilterControlledPermanent; import mage.game.permanent.token.SpiderToken; import mage.target.common.TargetOpponent; @@ -30,11 +30,7 @@ import java.util.UUID; */ public final class IshkanahGrafwidow extends CardImpl { - private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("Spider you control"); - - static { - filter.add(SubType.SPIDER.getPredicate()); - } + private static final FilterControlledPermanent filter = new FilterControlledPermanent(SubType.SPIDER, "Spider you control"); public IshkanahGrafwidow(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{G}"); diff --git a/Mage.Sets/src/mage/cards/j/JadeBearer.java b/Mage.Sets/src/mage/cards/j/JadeBearer.java index 98c977b51a2..0ad5ed2a359 100644 --- a/Mage.Sets/src/mage/cards/j/JadeBearer.java +++ b/Mage.Sets/src/mage/cards/j/JadeBearer.java @@ -9,7 +9,7 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.*; import mage.counters.CounterType; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.common.FilterControlledPermanent; import mage.filter.predicate.mageobject.AnotherPredicate; import mage.target.TargetPermanent; @@ -19,8 +19,8 @@ import mage.target.TargetPermanent; */ public final class JadeBearer extends CardImpl { - private static final FilterControlledCreaturePermanent filter = - new FilterControlledCreaturePermanent(SubType.MERFOLK, "another target Merfolk you control"); + private static final FilterControlledPermanent filter = + new FilterControlledPermanent(SubType.MERFOLK, "another target Merfolk you control"); static { filter.add(AnotherPredicate.instance); } diff --git a/Mage.Sets/src/mage/cards/j/JadeGuardian.java b/Mage.Sets/src/mage/cards/j/JadeGuardian.java index 87f1d77a0cd..e0fcdd855c7 100644 --- a/Mage.Sets/src/mage/cards/j/JadeGuardian.java +++ b/Mage.Sets/src/mage/cards/j/JadeGuardian.java @@ -1,4 +1,3 @@ - package mage.cards.j; import java.util.UUID; @@ -12,8 +11,8 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; import mage.counters.CounterType; -import mage.filter.common.FilterControlledCreaturePermanent; -import mage.target.common.TargetControlledCreaturePermanent; +import mage.filter.common.FilterControlledPermanent; +import mage.target.common.TargetControlledPermanent; /** * @@ -21,6 +20,8 @@ import mage.target.common.TargetControlledCreaturePermanent; */ public final class JadeGuardian extends CardImpl { + private static final FilterControlledPermanent filter = new FilterControlledPermanent(SubType.MERFOLK, "Merfolk you control"); + public JadeGuardian(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{G}"); @@ -34,7 +35,7 @@ public final class JadeGuardian extends CardImpl { // When Jade Guardian enters the battlefield, put a +1/+1 counter on target Merfolk you control. Ability ability = new EntersBattlefieldTriggeredAbility(new AddCountersTargetEffect(CounterType.P1P1.createInstance())); - ability.addTarget(new TargetControlledCreaturePermanent(new FilterControlledCreaturePermanent(SubType.MERFOLK, "Merfolk you control"))); + ability.addTarget(new TargetControlledPermanent(filter)); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/j/JeskaiCharm.java b/Mage.Sets/src/mage/cards/j/JeskaiCharm.java index ed4c88c3320..dceac02d82e 100644 --- a/Mage.Sets/src/mage/cards/j/JeskaiCharm.java +++ b/Mage.Sets/src/mage/cards/j/JeskaiCharm.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.FilterControlledCreaturePermanent; +import mage.filter.StaticFilters; import mage.target.common.TargetCreaturePermanent; import mage.target.common.TargetOpponentOrPlaneswalker; @@ -38,7 +38,7 @@ public final class JeskaiCharm extends CardImpl { Effect effect = new BoostControlledEffect(1, 1, Duration.EndOfTurn); effect.setText("Creatures you control get +1/+1"); mode = new Mode(effect); - effect = new GainAbilityControlledEffect(LifelinkAbility.getInstance(), Duration.EndOfTurn, new FilterControlledCreaturePermanent()); + effect = new GainAbilityControlledEffect(LifelinkAbility.getInstance(), Duration.EndOfTurn, StaticFilters.FILTER_CONTROLLED_CREATURE); effect.setText("and gain lifelink until end of turn"); mode.addEffect(effect); this.getSpellAbility().addMode(mode); diff --git a/Mage.Sets/src/mage/cards/j/JoragaTreespeaker.java b/Mage.Sets/src/mage/cards/j/JoragaTreespeaker.java index b5f8b4d9d8d..47e92d67f2d 100644 --- a/Mage.Sets/src/mage/cards/j/JoragaTreespeaker.java +++ b/Mage.Sets/src/mage/cards/j/JoragaTreespeaker.java @@ -1,5 +1,3 @@ - - package mage.cards.j; import java.util.UUID; @@ -21,7 +19,7 @@ import mage.constants.CardType; import mage.constants.Duration; import mage.constants.SubType; import mage.constants.Zone; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.common.FilterControlledPermanent; /** @@ -30,7 +28,7 @@ import mage.filter.common.FilterControlledCreaturePermanent; */ public final class JoragaTreespeaker extends LevelerCard { - private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("Elves"); + private static final FilterControlledPermanent filter = new FilterControlledPermanent("Elves"); static { filter.add(SubType.ELF.getPredicate()); diff --git a/Mage.Sets/src/mage/cards/j/JudgeOfCurrents.java b/Mage.Sets/src/mage/cards/j/JudgeOfCurrents.java index 3cde57a01e0..18fec7867f0 100644 --- a/Mage.Sets/src/mage/cards/j/JudgeOfCurrents.java +++ b/Mage.Sets/src/mage/cards/j/JudgeOfCurrents.java @@ -1,4 +1,3 @@ - package mage.cards.j; import java.util.UUID; @@ -9,7 +8,7 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.common.FilterControlledPermanent; /** * @@ -17,6 +16,8 @@ import mage.filter.common.FilterControlledCreaturePermanent; */ public final class JudgeOfCurrents extends CardImpl { + private static final FilterControlledPermanent filter = new FilterControlledPermanent(SubType.MERFOLK, "a Merfolk you control"); + public JudgeOfCurrents(UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{W}"); this.subtype.add(SubType.MERFOLK); @@ -25,7 +26,7 @@ public final class JudgeOfCurrents extends CardImpl { this.toughness = new MageInt(1); // Whenever a Merfolk you control becomes tapped, you may gain 1 life. - this.addAbility(new BecomesTappedTriggeredAbility(new GainLifeEffect(1), true, new FilterControlledCreaturePermanent(SubType.MERFOLK, "a Merfolk you control"))); + this.addAbility(new BecomesTappedTriggeredAbility(new GainLifeEffect(1), true, filter)); } private JudgeOfCurrents(final JudgeOfCurrents card) { diff --git a/Mage.Sets/src/mage/cards/k/KalitasTraitorOfGhet.java b/Mage.Sets/src/mage/cards/k/KalitasTraitorOfGhet.java index 82e6575b465..f1aeda522b9 100644 --- a/Mage.Sets/src/mage/cards/k/KalitasTraitorOfGhet.java +++ b/Mage.Sets/src/mage/cards/k/KalitasTraitorOfGhet.java @@ -1,7 +1,5 @@ - package mage.cards.k; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; @@ -16,7 +14,7 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.*; import mage.counters.CounterType; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.FilterPermanent; import mage.filter.predicate.Predicates; import mage.filter.predicate.mageobject.AnotherPredicate; import mage.game.Game; @@ -26,14 +24,15 @@ import mage.game.permanent.Permanent; import mage.game.permanent.PermanentToken; import mage.game.permanent.token.ZombieToken; import mage.players.Player; -import mage.target.common.TargetControlledCreaturePermanent; + +import java.util.UUID; /** * @author fireshoes */ public final class KalitasTraitorOfGhet extends CardImpl { - private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("another Vampire or Zombie"); + private static final FilterPermanent filter = new FilterPermanent("another Vampire or Zombie"); static { filter.add(AnotherPredicate.instance); diff --git a/Mage.Sets/src/mage/cards/k/KarganDragonrider.java b/Mage.Sets/src/mage/cards/k/KarganDragonrider.java index b62060dad09..80849c15163 100644 --- a/Mage.Sets/src/mage/cards/k/KarganDragonrider.java +++ b/Mage.Sets/src/mage/cards/k/KarganDragonrider.java @@ -13,7 +13,7 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Duration; import mage.constants.Zone; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.common.FilterControlledPermanent; /** * @@ -21,7 +21,7 @@ import mage.filter.common.FilterControlledCreaturePermanent; */ public final class KarganDragonrider extends CardImpl { - private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent(SubType.DRAGON, "a Dragon"); + private static final FilterControlledPermanent filter = new FilterControlledPermanent(SubType.DRAGON, "a Dragon"); public KarganDragonrider(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{R}"); diff --git a/Mage.Sets/src/mage/cards/k/KingOfTheOathbreakers.java b/Mage.Sets/src/mage/cards/k/KingOfTheOathbreakers.java index 2d675298ab6..66bc1371502 100644 --- a/Mage.Sets/src/mage/cards/k/KingOfTheOathbreakers.java +++ b/Mage.Sets/src/mage/cards/k/KingOfTheOathbreakers.java @@ -14,7 +14,7 @@ import mage.constants.SuperType; import mage.filter.FilterPermanent; import mage.filter.FilterPermanentThisOrAnother; import mage.filter.StaticFilters; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.common.FilterControlledPermanent; import mage.game.permanent.token.SpiritWhiteToken; import java.util.UUID; @@ -26,9 +26,7 @@ import java.util.UUID; public final class KingOfTheOathbreakers extends CardImpl { private static final FilterPermanent filter = - new FilterPermanentThisOrAnother( - new FilterControlledCreaturePermanent(SubType.SPIRIT), - true); + new FilterPermanentThisOrAnother(new FilterControlledPermanent(SubType.SPIRIT), true); public KingOfTheOathbreakers(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{W}{B}"); diff --git a/Mage.Sets/src/mage/cards/k/KnightCaptainOfEos.java b/Mage.Sets/src/mage/cards/k/KnightCaptainOfEos.java index c47438420c9..dc8c6dae5fa 100644 --- a/Mage.Sets/src/mage/cards/k/KnightCaptainOfEos.java +++ b/Mage.Sets/src/mage/cards/k/KnightCaptainOfEos.java @@ -1,7 +1,5 @@ - package mage.cards.k; -import java.util.UUID; import mage.MageInt; import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.common.SimpleActivatedAbility; @@ -15,9 +13,10 @@ import mage.constants.CardType; import mage.constants.Duration; import mage.constants.SubType; import mage.constants.Zone; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.FilterPermanent; import mage.game.permanent.token.SoldierToken; -import mage.target.common.TargetControlledCreaturePermanent; + +import java.util.UUID; /** * @@ -25,11 +24,7 @@ import mage.target.common.TargetControlledCreaturePermanent; */ public final class KnightCaptainOfEos extends CardImpl { - private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("a Soldier"); - - static { - filter.add(SubType.SOLDIER.getPredicate()); - } + private static final FilterPermanent filter = new FilterPermanent(SubType.SOLDIER, "a Soldier"); public KnightCaptainOfEos(UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{4}{W}"); @@ -39,7 +34,10 @@ public final class KnightCaptainOfEos extends CardImpl { this.power = new MageInt(2); this.toughness = new MageInt(2); + // When Knight-Captain of Eos enters the battlefield, create two 1/1 white Soldier creature tokens. this.addAbility(new EntersBattlefieldTriggeredAbility(new CreateTokenEffect(new SoldierToken(), 2), false)); + + // {W}, Sacrifice a Soldier: Prevent all combat damage that would be dealt this turn. SimpleActivatedAbility ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new PreventAllDamageByAllPermanentsEffect(Duration.EndOfTurn, true), new ManaCostsImpl<>("{W}")); ability.addCost(new SacrificeTargetCost(filter)); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/cards/l/LavakinBrawler.java b/Mage.Sets/src/mage/cards/l/LavakinBrawler.java index 76aa965fc46..8ad3bde3edf 100644 --- a/Mage.Sets/src/mage/cards/l/LavakinBrawler.java +++ b/Mage.Sets/src/mage/cards/l/LavakinBrawler.java @@ -12,7 +12,7 @@ import mage.constants.CardType; import mage.constants.Duration; import mage.constants.SubType; import mage.filter.FilterPermanent; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.common.FilterControlledPermanent; import java.util.UUID; @@ -21,7 +21,7 @@ import java.util.UUID; */ public final class LavakinBrawler extends CardImpl { - private static final FilterPermanent filter = new FilterControlledCreaturePermanent(SubType.ELEMENTAL); + private static final FilterPermanent filter = new FilterControlledPermanent(SubType.ELEMENTAL); private static final DynamicValue xValue = new PermanentsOnBattlefieldCount(filter); public LavakinBrawler(UUID ownerId, CardSetInfo setInfo) { diff --git a/Mage.Sets/src/mage/cards/l/LightningRunner.java b/Mage.Sets/src/mage/cards/l/LightningRunner.java index 738cf566133..bbe15e87b4c 100644 --- a/Mage.Sets/src/mage/cards/l/LightningRunner.java +++ b/Mage.Sets/src/mage/cards/l/LightningRunner.java @@ -1,4 +1,3 @@ - package mage.cards.l; import java.util.UUID; @@ -19,7 +18,7 @@ import mage.constants.CardType; import mage.constants.SubType; import mage.constants.Outcome; import mage.counters.CounterType; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.StaticFilters; import mage.game.Game; import mage.players.Player; @@ -82,7 +81,7 @@ class LightningRunnerEffect extends OneShotEffect { "Untap all creatures you control and after this phase, there is an additional combat phase.", "Yes", "No", source, game) && cost.pay(source, game, source, source.getControllerId(), true)) { - new UntapAllControllerEffect(new FilterControlledCreaturePermanent()).apply(game, source); + new UntapAllControllerEffect(StaticFilters.FILTER_CONTROLLED_CREATURES).apply(game, source); new AdditionalCombatPhaseEffect().apply(game, source); } } diff --git a/Mage.Sets/src/mage/cards/l/LordOfTheNazgul.java b/Mage.Sets/src/mage/cards/l/LordOfTheNazgul.java index 1df8cbecb49..ce07d072a9b 100644 --- a/Mage.Sets/src/mage/cards/l/LordOfTheNazgul.java +++ b/Mage.Sets/src/mage/cards/l/LordOfTheNazgul.java @@ -20,7 +20,7 @@ import mage.cards.CardSetInfo; import mage.constants.*; import mage.filter.FilterPermanent; import mage.filter.StaticFilters; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.common.FilterControlledPermanent; import mage.filter.predicate.permanent.RingBearerPredicate; import mage.game.permanent.token.WraithToken; @@ -31,7 +31,7 @@ import java.util.UUID; */ public final class LordOfTheNazgul extends CardImpl { - private static final FilterControlledCreaturePermanent filterWraith = new FilterControlledCreaturePermanent("Wraiths you control"); + private static final FilterPermanent filterWraith = new FilterControlledPermanent("Wraiths you control"); private static final FilterPermanent filterRingBearer = new FilterPermanent("Ring-bearers"); private static final Condition condition = new PermanentsOnTheBattlefieldCondition(filterWraith, ComparisonType.MORE_THAN, 8); private static final Hint hint = new ValueHint( diff --git a/Mage.Sets/src/mage/cards/l/LordSkittersBlessing.java b/Mage.Sets/src/mage/cards/l/LordSkittersBlessing.java index 37962c84b22..7f11e583714 100644 --- a/Mage.Sets/src/mage/cards/l/LordSkittersBlessing.java +++ b/Mage.Sets/src/mage/cards/l/LordSkittersBlessing.java @@ -35,7 +35,7 @@ public final class LordSkittersBlessing extends CardImpl { } private static final Condition condition = new PermanentsOnTheBattlefieldCondition(filter); - private static final Hint hint = new ConditionHint(condition, "You control an enchanted creaeture"); + private static final Hint hint = new ConditionHint(condition, "You control an enchanted creature"); public LordSkittersBlessing(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{B}"); @@ -53,7 +53,7 @@ public final class LordSkittersBlessing extends CardImpl { "an enchanted creature, you lose 1 life and you draw an additional card." ); ability.addEffect(new DrawCardSourceControllerEffect(1)); - this.addAbility(ability); + this.addAbility(ability.addHint(hint)); } private LordSkittersBlessing(final LordSkittersBlessing card) { diff --git a/Mage.Sets/src/mage/cards/l/LullmageMentor.java b/Mage.Sets/src/mage/cards/l/LullmageMentor.java index 8bde38976d9..d32a02ca48f 100644 --- a/Mage.Sets/src/mage/cards/l/LullmageMentor.java +++ b/Mage.Sets/src/mage/cards/l/LullmageMentor.java @@ -1,4 +1,3 @@ - package mage.cards.l; import java.util.UUID; @@ -14,11 +13,11 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; import mage.constants.Zone; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.common.FilterControlledPermanent; import mage.filter.predicate.permanent.TappedPredicate; import mage.game.permanent.token.MerfolkToken; import mage.target.TargetSpell; -import mage.target.common.TargetControlledCreaturePermanent; +import mage.target.common.TargetControlledPermanent; /** * @@ -26,7 +25,7 @@ import mage.target.common.TargetControlledCreaturePermanent; */ public final class LullmageMentor extends CardImpl { - private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("untapped Merfolk you control"); + private static final FilterControlledPermanent filter = new FilterControlledPermanent("untapped Merfolk you control"); static { filter.add(SubType.MERFOLK.getPredicate()); @@ -45,7 +44,7 @@ public final class LullmageMentor extends CardImpl { this.addAbility(new SpellCounteredControllerTriggeredAbility(new CreateTokenEffect(new MerfolkToken()), true)); // Tap seven untapped Merfolk you control: Counter target spell. - Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new CounterTargetEffect(), new TapTargetCost(new TargetControlledCreaturePermanent(7, 7, filter, true))); + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new CounterTargetEffect(), new TapTargetCost(new TargetControlledPermanent(7, 7, filter, true))); ability.addTarget(new TargetSpell()); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/cards/m/MagusOfTheArena.java b/Mage.Sets/src/mage/cards/m/MagusOfTheArena.java index 49311ee1c14..d0149959ca0 100644 --- a/Mage.Sets/src/mage/cards/m/MagusOfTheArena.java +++ b/Mage.Sets/src/mage/cards/m/MagusOfTheArena.java @@ -13,7 +13,7 @@ import mage.constants.CardType; import mage.constants.Outcome; import mage.constants.SubType; import mage.constants.Zone; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.StaticFilters; import mage.game.Game; import mage.game.permanent.Permanent; import mage.target.common.TargetControlledCreaturePermanent; @@ -38,7 +38,7 @@ public final class MagusOfTheArena extends CardImpl { Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new MagusOfTheArenaEffect(), new GenericManaCost(3)); ability.addCost(new TapSourceCost()); ability.addTarget(new TargetControlledCreaturePermanent()); - ability.addTarget(new TargetOpponentsChoicePermanent(1, 1, new FilterControlledCreaturePermanent(), false)); + ability.addTarget(new TargetOpponentsChoicePermanent(1, 1, StaticFilters.FILTER_CONTROLLED_CREATURE, false)); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/m/MajesticMyriarch.java b/Mage.Sets/src/mage/cards/m/MajesticMyriarch.java index af52c6f5257..d37cd5621a9 100644 --- a/Mage.Sets/src/mage/cards/m/MajesticMyriarch.java +++ b/Mage.Sets/src/mage/cards/m/MajesticMyriarch.java @@ -15,6 +15,7 @@ import mage.abilities.keyword.*; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.*; +import mage.filter.StaticFilters; import mage.filter.common.FilterControlledCreaturePermanent; import mage.filter.predicate.mageobject.AbilityPredicate; import mage.game.Game; @@ -34,7 +35,7 @@ public final class MajesticMyriarch extends CardImpl { this.toughness = new MageInt(0); // Majestic Myriarch's power and toughness are each equal to twice the number of creatures you control. - DynamicValue xValue = new MultipliedValue(new PermanentsOnBattlefieldCount(new FilterControlledCreaturePermanent()), 2); + DynamicValue xValue = new MultipliedValue(new PermanentsOnBattlefieldCount(StaticFilters.FILTER_CONTROLLED_CREATURES), 2); Effect effect = new SetBasePowerToughnessSourceEffect(xValue); effect.setText("{this}'s power and toughness are each equal to twice the number of creatures you control"); this.addAbility(new SimpleStaticAbility(Zone.ALL, effect)); @@ -163,4 +164,4 @@ class MajesticMyriarchEffect extends OneShotEffect { } return true; } -} \ No newline at end of file +} diff --git a/Mage.Sets/src/mage/cards/m/MalakirSoothsayer.java b/Mage.Sets/src/mage/cards/m/MalakirSoothsayer.java index 59c1dcd3ca3..149c493b4bd 100644 --- a/Mage.Sets/src/mage/cards/m/MalakirSoothsayer.java +++ b/Mage.Sets/src/mage/cards/m/MalakirSoothsayer.java @@ -1,22 +1,16 @@ package mage.cards.m; -import java.util.UUID; import mage.MageInt; -import mage.abilities.common.SimpleActivatedAbility; -import mage.abilities.costs.common.TapSourceCost; -import mage.abilities.costs.common.TapTargetCost; -import mage.abilities.effects.Effect; +import mage.abilities.Ability; +import mage.abilities.abilityword.CohortAbility; import mage.abilities.effects.common.DrawCardSourceControllerEffect; import mage.abilities.effects.common.LoseLifeSourceControllerEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; -import mage.constants.AbilityWord; import mage.constants.CardType; import mage.constants.SubType; -import mage.constants.Zone; -import mage.filter.common.FilterControlledCreaturePermanent; -import mage.filter.predicate.permanent.TappedPredicate; -import mage.target.common.TargetControlledCreaturePermanent; + +import java.util.UUID; /** * @@ -24,13 +18,6 @@ import mage.target.common.TargetControlledCreaturePermanent; */ public final class MalakirSoothsayer extends CardImpl { - private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("untapped Ally you control"); - - static { - filter.add(SubType.ALLY.getPredicate()); - filter.add(TappedPredicate.UNTAPPED); - } - public MalakirSoothsayer(UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{4}{B}"); this.subtype.add(SubType.VAMPIRE); @@ -40,13 +27,8 @@ public final class MalakirSoothsayer extends CardImpl { this.toughness = new MageInt(4); // Cohort — {T}, Tap an untapped Ally you control: You draw a card and you lose a life. - SimpleActivatedAbility ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, - new DrawCardSourceControllerEffect(1).setText("you draw a card"), - new TapSourceCost()); - ability.setAbilityWord(AbilityWord.COHORT); - ability.addCost(new TapTargetCost(new TargetControlledCreaturePermanent(1, 1, filter, false))); - Effect effect = new LoseLifeSourceControllerEffect(1).concatBy("and"); - ability.addEffect(effect); + Ability ability = new CohortAbility(new DrawCardSourceControllerEffect(1, "you")); + ability.addEffect(new LoseLifeSourceControllerEffect(1).concatBy("and")); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/m/MarkOfTheOni.java b/Mage.Sets/src/mage/cards/m/MarkOfTheOni.java index f3dfbc10505..a2a07f0e2d0 100644 --- a/Mage.Sets/src/mage/cards/m/MarkOfTheOni.java +++ b/Mage.Sets/src/mage/cards/m/MarkOfTheOni.java @@ -14,7 +14,7 @@ import mage.abilities.keyword.EnchantAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.*; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.common.FilterControlledPermanent; import mage.target.TargetPermanent; import mage.target.common.TargetCreaturePermanent; @@ -44,7 +44,7 @@ public final class MarkOfTheOni extends CardImpl { new SacrificeSourceEffect(), TargetController.NEXT, new PermanentsOnTheBattlefieldCondition( - new FilterControlledCreaturePermanent(SubType.DEMON, "if you control no Demons"), + new FilterControlledPermanent(SubType.DEMON, "if you control no Demons"), ComparisonType.FEWER_THAN, 1), false)); } diff --git a/Mage.Sets/src/mage/cards/m/MarkovCrusader.java b/Mage.Sets/src/mage/cards/m/MarkovCrusader.java index a577b51faf3..ecbdd0e46fe 100644 --- a/Mage.Sets/src/mage/cards/m/MarkovCrusader.java +++ b/Mage.Sets/src/mage/cards/m/MarkovCrusader.java @@ -1,4 +1,3 @@ - package mage.cards.m; import java.util.UUID; @@ -15,7 +14,7 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; import mage.constants.Zone; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.common.FilterControlledPermanent; import mage.filter.predicate.mageobject.AnotherPredicate; /** @@ -25,7 +24,7 @@ import mage.filter.predicate.mageobject.AnotherPredicate; public final class MarkovCrusader extends CardImpl { private static final String rule = "{this} has haste as long as you control another Vampire"; - private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("another Vampire"); + private static final FilterControlledPermanent filter = new FilterControlledPermanent("another Vampire"); static { filter.add(AnotherPredicate.instance); diff --git a/Mage.Sets/src/mage/cards/m/MaskwoodNexus.java b/Mage.Sets/src/mage/cards/m/MaskwoodNexus.java index 5e0feb6a851..57621cbad9c 100644 --- a/Mage.Sets/src/mage/cards/m/MaskwoodNexus.java +++ b/Mage.Sets/src/mage/cards/m/MaskwoodNexus.java @@ -11,7 +11,7 @@ import mage.cards.Card; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.*; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.StaticFilters; import mage.game.Game; import mage.game.command.CommandObject; import mage.game.command.Commander; @@ -130,7 +130,7 @@ class MaskwoodNexusEffect extends ContinuousEffectImpl { } // creatures you control List creatures = game.getBattlefield().getAllActivePermanents( - new FilterControlledCreaturePermanent(), source.getControllerId(), game); + StaticFilters.FILTER_CONTROLLED_CREATURE, source.getControllerId(), game); for (Permanent creature : creatures) { if (creature != null) { creature.setIsAllCreatureTypes(game, true); diff --git a/Mage.Sets/src/mage/cards/m/MasterApothecary.java b/Mage.Sets/src/mage/cards/m/MasterApothecary.java index 89a5c0329c8..1032d7eb069 100644 --- a/Mage.Sets/src/mage/cards/m/MasterApothecary.java +++ b/Mage.Sets/src/mage/cards/m/MasterApothecary.java @@ -1,4 +1,3 @@ - package mage.cards.m; import java.util.UUID; @@ -13,10 +12,10 @@ import mage.constants.CardType; import mage.constants.Duration; import mage.constants.SubType; import mage.constants.Zone; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.common.FilterControlledPermanent; import mage.filter.predicate.permanent.TappedPredicate; -import mage.target.common.TargetControlledCreaturePermanent; import mage.target.common.TargetAnyTarget; +import mage.target.common.TargetControlledPermanent; /** * @@ -24,7 +23,7 @@ import mage.target.common.TargetAnyTarget; */ public final class MasterApothecary extends CardImpl { - static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("an untapped Cleric you control"); + static final FilterControlledPermanent filter = new FilterControlledPermanent("an untapped Cleric you control"); static { filter.add(SubType.CLERIC.getPredicate()); @@ -41,8 +40,8 @@ public final class MasterApothecary extends CardImpl { // Tap an untapped Cleric you control: Prevent the next 2 damage that would be dealt to any target this turn. Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, - new PreventDamageToTargetEffect(Duration.EndOfTurn, 2), - new TapTargetCost(new TargetControlledCreaturePermanent(1, 1, filter, true))); + new PreventDamageToTargetEffect(Duration.EndOfTurn, 2), + new TapTargetCost(new TargetControlledPermanent(filter))); ability.addTarget(new TargetAnyTarget()); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/m/MercurialPretender.java b/Mage.Sets/src/mage/cards/m/MercurialPretender.java index 561928355c2..f199007e8f0 100644 --- a/Mage.Sets/src/mage/cards/m/MercurialPretender.java +++ b/Mage.Sets/src/mage/cards/m/MercurialPretender.java @@ -12,7 +12,7 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; import mage.constants.Zone; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.StaticFilters; import mage.util.functions.AbilityCopyApplier; import java.util.UUID; @@ -34,7 +34,7 @@ public final class MercurialPretender extends CardImpl { // You may have Mercurial Pretender enter the battlefield as a copy of any creature you control, // except it has "{2}{U}{U}: Return this creature to its owner's hand." - Effect effect = new CopyPermanentEffect(new FilterControlledCreaturePermanent(), + Effect effect = new CopyPermanentEffect(StaticFilters.FILTER_CONTROLLED_CREATURE, new AbilityCopyApplier(new SimpleActivatedAbility(Zone.BATTLEFIELD, new ReturnToHandSourceEffect(true), new ManaCostsImpl<>("{2}{U}{U}")))); effect.setText(effectText); this.addAbility(new EntersBattlefieldAbility(effect, true)); diff --git a/Mage.Sets/src/mage/cards/m/MesmerizingBenthid.java b/Mage.Sets/src/mage/cards/m/MesmerizingBenthid.java index 330da204905..7ce23a1f690 100644 --- a/Mage.Sets/src/mage/cards/m/MesmerizingBenthid.java +++ b/Mage.Sets/src/mage/cards/m/MesmerizingBenthid.java @@ -13,7 +13,7 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; import mage.filter.FilterPermanent; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.common.FilterControlledPermanent; import mage.game.permanent.token.MesmerizingBenthidToken; import java.util.UUID; @@ -23,7 +23,7 @@ import java.util.UUID; */ public final class MesmerizingBenthid extends CardImpl { - private static final FilterPermanent filter = new FilterControlledCreaturePermanent(SubType.ILLUSION); + private static final FilterPermanent filter = new FilterControlledPermanent(SubType.ILLUSION); public MesmerizingBenthid(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{U}{U}"); diff --git a/Mage.Sets/src/mage/cards/m/MilitiasPride.java b/Mage.Sets/src/mage/cards/m/MilitiasPride.java index a96fb40d0da..b59a4a23440 100644 --- a/Mage.Sets/src/mage/cards/m/MilitiasPride.java +++ b/Mage.Sets/src/mage/cards/m/MilitiasPride.java @@ -1,6 +1,6 @@ package mage.cards.m; -import mage.abilities.TriggeredAbilityImpl; +import mage.abilities.common.AttacksCreatureYouControlTriggeredAbility; import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.effects.common.CreateTokenEffect; import mage.abilities.effects.common.DoIfCostPaid; @@ -8,12 +8,8 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; -import mage.constants.Zone; import mage.filter.common.FilterControlledCreaturePermanent; import mage.filter.predicate.permanent.TokenPredicate; -import mage.game.Game; -import mage.game.events.GameEvent; -import mage.game.permanent.Permanent; import mage.game.permanent.token.KithkinSoldierToken; import java.util.UUID; @@ -23,12 +19,21 @@ import java.util.UUID; */ public final class MilitiasPride extends CardImpl { + private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("nontoken creature you control"); + + static { + filter.add(TokenPredicate.FALSE); + } + public MilitiasPride(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.TRIBAL, CardType.ENCHANTMENT}, "{1}{W}"); this.subtype.add(SubType.KITHKIN); - // Whenever a creature you control attacks, you may pay {W}. If you do create a 1/1 white Kithkin Soldier creature token in play tapped and attacking - this.addAbility(new MilitiasPrideTriggerAbility()); + // Whenever a nontoken creature you control attacks, you may pay {W}. If you do, create a 1/1 white Kithkin Soldier creature token that’s tapped and attacking. + this.addAbility(new AttacksCreatureYouControlTriggeredAbility( + new DoIfCostPaid(new CreateTokenEffect(new KithkinSoldierToken(), 1, true, true), new ManaCostsImpl<>("{W}")), + false, filter + )); } @@ -41,37 +46,3 @@ public final class MilitiasPride extends CardImpl { return new MilitiasPride(this); } } - -class MilitiasPrideTriggerAbility extends TriggeredAbilityImpl { - - public MilitiasPrideTriggerAbility() { - super(Zone.BATTLEFIELD, new DoIfCostPaid(new CreateTokenEffect(new KithkinSoldierToken(), 1, true, true), new ManaCostsImpl<>("{W}"))); - } - - private MilitiasPrideTriggerAbility(final MilitiasPrideTriggerAbility ability) { - super(ability); - } - - @Override - public boolean checkEventType(GameEvent event, Game game) { - return event.getType() == GameEvent.EventType.ATTACKER_DECLARED; - } - - @Override - public boolean checkTrigger(GameEvent event, Game game) { - FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent(); - filter.add(TokenPredicate.FALSE); - Permanent permanent = game.getPermanent(event.getSourceId()); - return permanent != null && filter.match(permanent, controllerId, this, game); - } - - @Override - public String getRule() { - return "Whenever a nontoken creature you control attacks, you may pay {W}. If you do, create a 1/1 white Kithkin Soldier creature token that's tapped and attacking."; - } - - @Override - public MilitiasPrideTriggerAbility copy() { - return new MilitiasPrideTriggerAbility(this); - } -} diff --git a/Mage.Sets/src/mage/cards/m/Mobilize.java b/Mage.Sets/src/mage/cards/m/Mobilize.java index f1e4032a154..0e0d5c74381 100644 --- a/Mage.Sets/src/mage/cards/m/Mobilize.java +++ b/Mage.Sets/src/mage/cards/m/Mobilize.java @@ -1,4 +1,3 @@ - package mage.cards.m; import java.util.UUID; @@ -6,7 +5,7 @@ import mage.abilities.effects.common.UntapAllControllerEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.StaticFilters; /** * @@ -20,7 +19,7 @@ public final class Mobilize extends CardImpl { super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{G}"); // Untap all creatures you control. - this.getSpellAbility().addEffect(new UntapAllControllerEffect(new FilterControlledCreaturePermanent(), rule)); + this.getSpellAbility().addEffect(new UntapAllControllerEffect(StaticFilters.FILTER_CONTROLLED_CREATURE, rule)); } private Mobilize(final Mobilize card) { diff --git a/Mage.Sets/src/mage/cards/m/MundasVanguard.java b/Mage.Sets/src/mage/cards/m/MundasVanguard.java index e2975f71c72..20cd35d557c 100644 --- a/Mage.Sets/src/mage/cards/m/MundasVanguard.java +++ b/Mage.Sets/src/mage/cards/m/MundasVanguard.java @@ -1,24 +1,16 @@ - package mage.cards.m; -import java.util.UUID; import mage.MageInt; -import mage.abilities.Ability; -import mage.abilities.common.SimpleActivatedAbility; -import mage.abilities.costs.common.TapSourceCost; -import mage.abilities.costs.common.TapTargetCost; +import mage.abilities.abilityword.CohortAbility; import mage.abilities.effects.common.counter.AddCountersAllEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; -import mage.constants.AbilityWord; import mage.constants.CardType; import mage.constants.SubType; -import mage.constants.Zone; import mage.counters.CounterType; -import mage.filter.common.FilterControlledCreaturePermanent; -import mage.filter.common.FilterControlledPermanent; -import mage.filter.predicate.permanent.TappedPredicate; -import mage.target.common.TargetControlledPermanent; +import mage.filter.StaticFilters; + +import java.util.UUID; /** * @@ -26,13 +18,6 @@ import mage.target.common.TargetControlledPermanent; */ public final class MundasVanguard extends CardImpl { - private static final FilterControlledPermanent filter = new FilterControlledPermanent("an untapped Ally you control"); - - static { - filter.add(SubType.ALLY.getPredicate()); - filter.add(TappedPredicate.UNTAPPED); - } - public MundasVanguard(UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{4}{W}"); this.subtype.add(SubType.KOR); @@ -42,11 +27,7 @@ public final class MundasVanguard extends CardImpl { this.toughness = new MageInt(3); // Cohort — {T}, Tap an untapped Ally you control: Put a +1/+1 counter on each creature you control. - Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new AddCountersAllEffect(CounterType.P1P1.createInstance(), new FilterControlledCreaturePermanent()), - new TapSourceCost()); - ability.addCost(new TapTargetCost(new TargetControlledPermanent(filter))); - ability.setAbilityWord(AbilityWord.COHORT); - this.addAbility(ability); + this.addAbility(new CohortAbility(new AddCountersAllEffect(CounterType.P1P1.createInstance(), StaticFilters.FILTER_CONTROLLED_CREATURE))); } private MundasVanguard(final MundasVanguard card) { diff --git a/Mage.Sets/src/mage/cards/m/MurasaPyromancer.java b/Mage.Sets/src/mage/cards/m/MurasaPyromancer.java index 953c54f6b3e..93924c19b79 100644 --- a/Mage.Sets/src/mage/cards/m/MurasaPyromancer.java +++ b/Mage.Sets/src/mage/cards/m/MurasaPyromancer.java @@ -1,4 +1,3 @@ - package mage.cards.m; import java.util.UUID; @@ -11,8 +10,7 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; -import mage.constants.TargetController; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.common.FilterControlledPermanent; import mage.target.common.TargetCreaturePermanent; /** @@ -21,12 +19,7 @@ import mage.target.common.TargetCreaturePermanent; */ public final class MurasaPyromancer extends CardImpl { - private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("Ally you control"); - - static { - filter.add(SubType.ALLY.getPredicate()); - filter.add(TargetController.YOU.getControllerPredicate()); - } + private static final FilterControlledPermanent filter = new FilterControlledPermanent(SubType.ALLY, "Ally you control"); public MurasaPyromancer(UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{4}{R}{R}"); diff --git a/Mage.Sets/src/mage/cards/m/MyrBattlesphere.java b/Mage.Sets/src/mage/cards/m/MyrBattlesphere.java index 3dc111c3488..7986dbf9689 100644 --- a/Mage.Sets/src/mage/cards/m/MyrBattlesphere.java +++ b/Mage.Sets/src/mage/cards/m/MyrBattlesphere.java @@ -10,7 +10,7 @@ import mage.abilities.effects.common.continuous.BoostSourceEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.*; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.common.FilterControlledPermanent; import mage.filter.predicate.permanent.TappedPredicate; import mage.game.Game; import mage.game.events.GameEvent; @@ -95,7 +95,7 @@ class MyrBattlesphereTriggeredAbility extends TriggeredAbilityImpl { class MyrBattlesphereEffect extends OneShotEffect { - private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("untapped Myr you control"); + private static final FilterControlledPermanent filter = new FilterControlledPermanent("untapped Myr you control"); static { filter.add(TappedPredicate.UNTAPPED); diff --git a/Mage.Sets/src/mage/cards/n/NameStickerGoblin.java b/Mage.Sets/src/mage/cards/n/NameStickerGoblin.java index bf7672255bd..db6121a9315 100644 --- a/Mage.Sets/src/mage/cards/n/NameStickerGoblin.java +++ b/Mage.Sets/src/mage/cards/n/NameStickerGoblin.java @@ -63,11 +63,14 @@ public final class NameStickerGoblin extends CardImpl { } class NameStickerGoblinTriggeredAbility extends TriggeredAbilityImpl { + private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent(); static{ filter.add(new NamePredicate("\"Name Sticker\" Goblin")); } + private static final Condition condition = new PermanentsOnTheBattlefieldCondition(filter, ComparisonType.OR_LESS, 9); + NameStickerGoblinTriggeredAbility(Effect effect) { super(Zone.BATTLEFIELD, effect); setTriggerPhrase("When this creature enters the battlefield from anywhere other than a graveyard or exile, if it's on the battlefield and you control 9 or fewer creatures named \"Name Sticker\" Goblin, "); diff --git a/Mage.Sets/src/mage/cards/n/Necroduality.java b/Mage.Sets/src/mage/cards/n/Necroduality.java index 55a0feee072..6a963f7aaa6 100644 --- a/Mage.Sets/src/mage/cards/n/Necroduality.java +++ b/Mage.Sets/src/mage/cards/n/Necroduality.java @@ -9,7 +9,7 @@ import mage.constants.SetTargetPointer; import mage.constants.SubType; import mage.constants.Zone; import mage.filter.FilterPermanent; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.common.FilterControlledPermanent; import mage.filter.predicate.permanent.TokenPredicate; import java.util.UUID; @@ -19,7 +19,7 @@ import java.util.UUID; */ public final class Necroduality extends CardImpl { - private static final FilterPermanent filter = new FilterControlledCreaturePermanent(SubType.ZOMBIE, "a nontoken Zombie"); + private static final FilterPermanent filter = new FilterControlledPermanent(SubType.ZOMBIE, "a nontoken Zombie"); static { filter.add(TokenPredicate.FALSE); diff --git a/Mage.Sets/src/mage/cards/n/NemataPrimevalWarden.java b/Mage.Sets/src/mage/cards/n/NemataPrimevalWarden.java index 38c4fad173b..bf09226f059 100644 --- a/Mage.Sets/src/mage/cards/n/NemataPrimevalWarden.java +++ b/Mage.Sets/src/mage/cards/n/NemataPrimevalWarden.java @@ -16,11 +16,11 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.*; import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.common.FilterControlledPermanent; import mage.game.Game; import mage.game.events.GameEvent; import mage.game.events.ZoneChangeEvent; import mage.game.permanent.token.SaprolingToken; -import mage.target.common.TargetControlledCreaturePermanent; import java.util.UUID; @@ -29,8 +29,8 @@ import java.util.UUID; */ public final class NemataPrimevalWarden extends CardImpl { - private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("Saproling"); - private static final FilterControlledCreaturePermanent filter2 = new FilterControlledCreaturePermanent("Saprolings"); + private static final FilterControlledPermanent filter = new FilterControlledPermanent("Saproling"); + private static final FilterControlledPermanent filter2 = new FilterControlledPermanent("Saprolings"); static { filter.add(SubType.SAPROLING.getPredicate()); diff --git a/Mage.Sets/src/mage/cards/n/NissaVoiceOfZendikar.java b/Mage.Sets/src/mage/cards/n/NissaVoiceOfZendikar.java index c9569b54ff4..9fb529546f6 100644 --- a/Mage.Sets/src/mage/cards/n/NissaVoiceOfZendikar.java +++ b/Mage.Sets/src/mage/cards/n/NissaVoiceOfZendikar.java @@ -16,7 +16,7 @@ import mage.constants.SubType; import mage.constants.SuperType; import mage.constants.TargetController; import mage.counters.CounterType; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.StaticFilters; import mage.filter.common.FilterLandPermanent; import mage.game.permanent.token.PlantToken; @@ -43,7 +43,7 @@ public final class NissaVoiceOfZendikar extends CardImpl { this.addAbility(new LoyaltyAbility(new CreateTokenEffect(new PlantToken()), 1)); // -2: Put a +1/+1 counter on each creature you control. - this.addAbility(new LoyaltyAbility(new AddCountersAllEffect(CounterType.P1P1.createInstance(), new FilterControlledCreaturePermanent()), -2)); + this.addAbility(new LoyaltyAbility(new AddCountersAllEffect(CounterType.P1P1.createInstance(), StaticFilters.FILTER_CONTROLLED_CREATURE), -2)); // -7: You gain X life and draw X cards, where X is the number of lands you control. Effect effect = new GainLifeEffect(new PermanentsOnBattlefieldCount(filter)); diff --git a/Mage.Sets/src/mage/cards/n/NobleStand.java b/Mage.Sets/src/mage/cards/n/NobleStand.java index 4ecb286a742..cc5874fd601 100644 --- a/Mage.Sets/src/mage/cards/n/NobleStand.java +++ b/Mage.Sets/src/mage/cards/n/NobleStand.java @@ -1,4 +1,3 @@ - package mage.cards.n; import java.util.UUID; @@ -8,8 +7,7 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Zone; -import mage.filter.common.FilterControlledCreaturePermanent; -import mage.filter.predicate.permanent.TokenPredicate; +import mage.filter.StaticFilters; import mage.game.Game; import mage.game.events.GameEvent; import mage.game.permanent.Permanent; @@ -39,11 +37,12 @@ public final class NobleStand extends CardImpl { class NobleStandAbility extends TriggeredAbilityImpl { - public NobleStandAbility() { + NobleStandAbility() { super(Zone.BATTLEFIELD, new GainLifeEffect(2)); + setTriggerPhrase("Whenever a creature you control blocks, "); } - public NobleStandAbility(final mage.cards.n.NobleStandAbility ability) { + private NobleStandAbility(final NobleStandAbility ability) { super(ability); } @@ -54,19 +53,12 @@ class NobleStandAbility extends TriggeredAbilityImpl { @Override public boolean checkTrigger(GameEvent event, Game game) { - FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent(); - filter.add(TokenPredicate.FALSE); Permanent permanent = game.getPermanent(event.getSourceId()); - return permanent != null && filter.match(permanent, controllerId, this, game); + return permanent != null && StaticFilters.FILTER_CONTROLLED_CREATURE.match(permanent, controllerId, this, game); } @Override - public String getRule() { - return "Whenever a creature you control blocks, you gain 2 life."; - } - - @Override - public mage.cards.n.NobleStandAbility copy() { - return new mage.cards.n.NobleStandAbility(this); + public NobleStandAbility copy() { + return new NobleStandAbility(this); } } diff --git a/Mage.Sets/src/mage/cards/n/NomadsAssembly.java b/Mage.Sets/src/mage/cards/n/NomadsAssembly.java index 5bc78772a53..18a3dd1c86a 100644 --- a/Mage.Sets/src/mage/cards/n/NomadsAssembly.java +++ b/Mage.Sets/src/mage/cards/n/NomadsAssembly.java @@ -1,4 +1,3 @@ - package mage.cards.n; import java.util.UUID; @@ -8,7 +7,7 @@ import mage.abilities.keyword.ReboundAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.StaticFilters; import mage.game.permanent.token.KorSoldierToken; /** @@ -17,13 +16,11 @@ import mage.game.permanent.token.KorSoldierToken; */ public final class NomadsAssembly extends CardImpl { - private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent(); - public NomadsAssembly(UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{4}{W}{W}"); - - this.getSpellAbility().addEffect(new CreateTokenEffect(new KorSoldierToken(), new PermanentsOnBattlefieldCount(filter))); + // Create a 1/1 white Kor Soldier creature token for each creature you control. + this.getSpellAbility().addEffect(new CreateTokenEffect(new KorSoldierToken(), new PermanentsOnBattlefieldCount(StaticFilters.FILTER_CONTROLLED_CREATURE))); this.addAbility(new ReboundAbility()); } diff --git a/Mage.Sets/src/mage/cards/o/OathOfAjani.java b/Mage.Sets/src/mage/cards/o/OathOfAjani.java index e2ebd47f5f2..820aa6d7c0d 100644 --- a/Mage.Sets/src/mage/cards/o/OathOfAjani.java +++ b/Mage.Sets/src/mage/cards/o/OathOfAjani.java @@ -12,7 +12,7 @@ import mage.constants.CardType; import mage.constants.SuperType; import mage.constants.Zone; import mage.counters.CounterType; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.StaticFilters; import mage.filter.common.FilterPlaneswalkerCard; /** @@ -26,7 +26,7 @@ public final class OathOfAjani extends CardImpl { this.supertype.add(SuperType.LEGENDARY); // When Oath of Ajani enters the battlefield, put a +1/+1 counter on each creature you control. - this.addAbility(new EntersBattlefieldTriggeredAbility(new AddCountersAllEffect(CounterType.P1P1.createInstance(), new FilterControlledCreaturePermanent()))); + this.addAbility(new EntersBattlefieldTriggeredAbility(new AddCountersAllEffect(CounterType.P1P1.createInstance(), StaticFilters.FILTER_CONTROLLED_CREATURE))); // Planeswalker spells you cast cost {1} less to cast. this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SpellsCostReductionControllerEffect(new FilterPlaneswalkerCard("Planeswalker spells"), 1))); diff --git a/Mage.Sets/src/mage/cards/o/OgreChitterlord.java b/Mage.Sets/src/mage/cards/o/OgreChitterlord.java index 89b7cccea8f..46080bab18b 100644 --- a/Mage.Sets/src/mage/cards/o/OgreChitterlord.java +++ b/Mage.Sets/src/mage/cards/o/OgreChitterlord.java @@ -48,7 +48,7 @@ public final class OgreChitterlord extends CardImpl { // Whenever Ogre Chitterlord enters the battlefield or attacks, create two 1/1 black Rat creature tokens with "This creature can't block." Then if you control five or more Rats, each Rat you control gets +2/+0 until end of turn. Ability ability = new OrTriggeredAbility( Zone.BATTLEFIELD, new CreateTokenEffect(new RatCantBlockToken(), 2), - false, "whenever {this} enters the battlefield or attacks, ", + false, "Whenever {this} enters the battlefield or attacks, ", new EntersBattlefieldTriggeredAbility(null), new AttacksTriggeredAbility(null) ); diff --git a/Mage.Sets/src/mage/cards/o/OhabiCaleria.java b/Mage.Sets/src/mage/cards/o/OhabiCaleria.java index 609e14f08eb..927510fb7f5 100644 --- a/Mage.Sets/src/mage/cards/o/OhabiCaleria.java +++ b/Mage.Sets/src/mage/cards/o/OhabiCaleria.java @@ -11,7 +11,7 @@ import mage.abilities.keyword.ReachAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.*; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.common.FilterControlledPermanent; import java.util.UUID; @@ -20,8 +20,8 @@ import java.util.UUID; */ public final class OhabiCaleria extends CardImpl { - private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent(SubType.ARCHER, "Archers you control"); - private static final FilterControlledCreaturePermanent filter2 = new FilterControlledCreaturePermanent(SubType.ARCHER, "an Archer you control"); + private static final FilterControlledPermanent filter = new FilterControlledPermanent(SubType.ARCHER, "Archers you control"); + private static final FilterControlledPermanent filter2 = new FilterControlledPermanent(SubType.ARCHER, "an Archer you control"); public OhabiCaleria(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{G}{W}"); diff --git a/Mage.Sets/src/mage/cards/o/OnduCleric.java b/Mage.Sets/src/mage/cards/o/OnduCleric.java index 9c0069c83d7..d4cd96713ca 100644 --- a/Mage.Sets/src/mage/cards/o/OnduCleric.java +++ b/Mage.Sets/src/mage/cards/o/OnduCleric.java @@ -10,8 +10,7 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; -import mage.constants.TargetController; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.common.FilterControlledPermanent; /** * @@ -19,12 +18,7 @@ import mage.filter.common.FilterControlledCreaturePermanent; */ public final class OnduCleric extends CardImpl { - private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("Allies you control"); - - static { - filter.add(SubType.ALLY.getPredicate()); - filter.add(TargetController.YOU.getControllerPredicate()); - } + private static final FilterControlledPermanent filter = new FilterControlledPermanent(SubType.ALLY, "Allies you control"); public OnduCleric(UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{W}"); @@ -35,6 +29,7 @@ public final class OnduCleric extends CardImpl { this.power = new MageInt(1); this.toughness = new MageInt(1); + // Whenever Ondu Cleric or another Ally enters the battlefield under your control, you may gain life equal to the number of Allies you control. this.addAbility(new AllyEntersBattlefieldTriggeredAbility(new GainLifeEffect(new PermanentsOnBattlefieldCount(filter)), true).setAbilityWord(null)); } diff --git a/Mage.Sets/src/mage/cards/o/OnduWarCleric.java b/Mage.Sets/src/mage/cards/o/OnduWarCleric.java index 216a35f8fef..8d1d2d24c4a 100644 --- a/Mage.Sets/src/mage/cards/o/OnduWarCleric.java +++ b/Mage.Sets/src/mage/cards/o/OnduWarCleric.java @@ -1,22 +1,14 @@ - package mage.cards.o; -import java.util.UUID; import mage.MageInt; -import mage.abilities.Ability; -import mage.abilities.common.SimpleActivatedAbility; -import mage.abilities.costs.common.TapSourceCost; -import mage.abilities.costs.common.TapTargetCost; +import mage.abilities.abilityword.CohortAbility; import mage.abilities.effects.common.GainLifeEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; -import mage.constants.AbilityWord; import mage.constants.CardType; import mage.constants.SubType; -import mage.constants.Zone; -import mage.filter.common.FilterControlledPermanent; -import mage.filter.predicate.permanent.TappedPredicate; -import mage.target.common.TargetControlledPermanent; + +import java.util.UUID; /** * @@ -24,13 +16,6 @@ import mage.target.common.TargetControlledPermanent; */ public final class OnduWarCleric extends CardImpl { - private static final FilterControlledPermanent filter = new FilterControlledPermanent("an untapped Ally you control"); - - static { - filter.add(SubType.ALLY.getPredicate()); - filter.add(TappedPredicate.UNTAPPED); - } - public OnduWarCleric(UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{W}"); this.subtype.add(SubType.HUMAN); @@ -40,10 +25,7 @@ public final class OnduWarCleric extends CardImpl { this.toughness = new MageInt(2); // Cohort — {T}, Tap an untapped Ally you control: You gain 2 life. - Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new GainLifeEffect(2), new TapSourceCost()); - ability.addCost(new TapTargetCost(new TargetControlledPermanent(filter))); - ability.setAbilityWord(AbilityWord.COHORT); - this.addAbility(ability); + this.addAbility(new CohortAbility(new GainLifeEffect(2))); } private OnduWarCleric(final OnduWarCleric card) { diff --git a/Mage.Sets/src/mage/cards/o/OtharriSunsGlory.java b/Mage.Sets/src/mage/cards/o/OtharriSunsGlory.java index c1e988f872c..ad6fd708381 100644 --- a/Mage.Sets/src/mage/cards/o/OtharriSunsGlory.java +++ b/Mage.Sets/src/mage/cards/o/OtharriSunsGlory.java @@ -18,7 +18,7 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.*; import mage.counters.CounterType; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.common.FilterControlledPermanent; import mage.filter.predicate.permanent.TappedPredicate; import mage.game.Game; import mage.game.permanent.token.RebelRedToken; @@ -32,7 +32,7 @@ import java.util.UUID; */ public final class OtharriSunsGlory extends CardImpl { - private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("untapped Rebel you control"); + private static final FilterControlledPermanent filter = new FilterControlledPermanent("untapped Rebel you control"); static { filter.add(TappedPredicate.UNTAPPED); diff --git a/Mage.Sets/src/mage/cards/o/OvergrowthElemental.java b/Mage.Sets/src/mage/cards/o/OvergrowthElemental.java index 67fe98e559b..d59fe2bb6ea 100644 --- a/Mage.Sets/src/mage/cards/o/OvergrowthElemental.java +++ b/Mage.Sets/src/mage/cards/o/OvergrowthElemental.java @@ -16,7 +16,7 @@ import mage.constants.SubType; import mage.counters.CounterType; import mage.filter.FilterPermanent; import mage.filter.StaticFilters; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.common.FilterControlledPermanent; import mage.filter.predicate.mageobject.AnotherPredicate; import mage.game.Game; import mage.game.permanent.Permanent; @@ -30,7 +30,7 @@ import java.util.UUID; public final class OvergrowthElemental extends CardImpl { private static final FilterPermanent filter - = new FilterControlledCreaturePermanent(SubType.ELEMENTAL, "another target Elemental you control"); + = new FilterControlledPermanent(SubType.ELEMENTAL, "another target Elemental you control"); static { filter.add(AnotherPredicate.instance); diff --git a/Mage.Sets/src/mage/cards/p/PashalikMons.java b/Mage.Sets/src/mage/cards/p/PashalikMons.java index b160ba2d6b8..dbf34c9f14d 100644 --- a/Mage.Sets/src/mage/cards/p/PashalikMons.java +++ b/Mage.Sets/src/mage/cards/p/PashalikMons.java @@ -14,13 +14,11 @@ import mage.constants.CardType; import mage.constants.SubType; import mage.constants.SuperType; import mage.constants.TargetController; -import mage.filter.common.FilterControlledCreaturePermanent; import mage.filter.common.FilterControlledPermanent; import mage.filter.common.FilterCreaturePermanent; import mage.filter.predicate.mageobject.AnotherPredicate; import mage.game.permanent.token.GoblinToken; import mage.target.common.TargetAnyTarget; -import mage.target.common.TargetControlledPermanent; import java.util.UUID; @@ -32,7 +30,7 @@ public final class PashalikMons extends CardImpl { private static final FilterCreaturePermanent filter = new FilterCreaturePermanent(SubType.GOBLIN, "Goblin you control"); private static final FilterControlledPermanent filter2 - = new FilterControlledCreaturePermanent(SubType.GOBLIN, "a Goblin"); + = new FilterControlledPermanent(SubType.GOBLIN, "a Goblin"); static { filter.add(AnotherPredicate.instance); diff --git a/Mage.Sets/src/mage/cards/p/PatronOfTheVein.java b/Mage.Sets/src/mage/cards/p/PatronOfTheVein.java index 73fb8b5eabd..f2b8b1bf455 100644 --- a/Mage.Sets/src/mage/cards/p/PatronOfTheVein.java +++ b/Mage.Sets/src/mage/cards/p/PatronOfTheVein.java @@ -20,7 +20,7 @@ import mage.constants.SubType; import mage.constants.Zone; import mage.counters.CounterType; import mage.filter.StaticFilters; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.common.FilterControlledPermanent; import mage.game.Game; import mage.game.events.GameEvent; import mage.game.events.ZoneChangeEvent; @@ -111,7 +111,7 @@ class PatronOfTheVeinCreatureDiesTriggeredAbility extends TriggeredAbilityImpl { class PatronOfTheVeinExileCreatureEffect extends OneShotEffect { - private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent(); + private static final FilterControlledPermanent filter = new FilterControlledPermanent(); static { filter.add(SubType.VAMPIRE.getPredicate()); diff --git a/Mage.Sets/src/mage/cards/p/PeachGardenOath.java b/Mage.Sets/src/mage/cards/p/PeachGardenOath.java index 2e276672ec4..88aa0536f22 100644 --- a/Mage.Sets/src/mage/cards/p/PeachGardenOath.java +++ b/Mage.Sets/src/mage/cards/p/PeachGardenOath.java @@ -8,7 +8,7 @@ import mage.abilities.effects.common.GainLifeEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.StaticFilters; /** * @@ -19,9 +19,8 @@ public final class PeachGardenOath extends CardImpl { public PeachGardenOath(UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{W}"); - // You gain 2 life for each creature you control. - DynamicValue amount = new PermanentsOnBattlefieldCount(new FilterControlledCreaturePermanent(), 2); + DynamicValue amount = new PermanentsOnBattlefieldCount(StaticFilters.FILTER_CONTROLLED_CREATURE, 2); this.getSpellAbility().addEffect(new GainLifeEffect(amount)); } diff --git a/Mage.Sets/src/mage/cards/p/PhalanxLeader.java b/Mage.Sets/src/mage/cards/p/PhalanxLeader.java index 1aacdb86996..c768c627704 100644 --- a/Mage.Sets/src/mage/cards/p/PhalanxLeader.java +++ b/Mage.Sets/src/mage/cards/p/PhalanxLeader.java @@ -10,7 +10,7 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; import mage.counters.CounterType; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.StaticFilters; /** * @@ -27,7 +27,7 @@ public final class PhalanxLeader extends CardImpl { this.toughness = new MageInt(1); // Heroic Whenever you cast a spell that targets Phalanx Leader, put a +1/+1 counter on each creature you control. - this.addAbility(new HeroicAbility(new AddCountersAllEffect(CounterType.P1P1.createInstance(), new FilterControlledCreaturePermanent()))); + this.addAbility(new HeroicAbility(new AddCountersAllEffect(CounterType.P1P1.createInstance(), StaticFilters.FILTER_CONTROLLED_CREATURE))); } private PhalanxLeader(final PhalanxLeader card) { diff --git a/Mage.Sets/src/mage/cards/p/PineWalker.java b/Mage.Sets/src/mage/cards/p/PineWalker.java index 1a80aee7bf5..05b3cd664e1 100644 --- a/Mage.Sets/src/mage/cards/p/PineWalker.java +++ b/Mage.Sets/src/mage/cards/p/PineWalker.java @@ -1,4 +1,3 @@ - package mage.cards.p; import java.util.UUID; @@ -12,7 +11,8 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.FilterPermanentThisOrAnother; +import mage.filter.StaticFilters; /** * @@ -20,6 +20,8 @@ import mage.filter.common.FilterControlledCreaturePermanent; */ public final class PineWalker extends CardImpl { + private static final FilterPermanentThisOrAnother filter = new FilterPermanentThisOrAnother(StaticFilters.FILTER_CONTROLLED_CREATURE, true); + public PineWalker(UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{G}{G}"); this.subtype.add(SubType.ELEMENTAL); @@ -32,7 +34,7 @@ public final class PineWalker extends CardImpl { // Whenever Pine Walker or another creature you control is turned face up, untap that creature. Effect effect = new UntapTargetEffect(); effect.setText("untap that creature"); - this.addAbility(new TurnedFaceUpAllTriggeredAbility(effect, new FilterControlledCreaturePermanent("{this} or another creature you control"), true)); + this.addAbility(new TurnedFaceUpAllTriggeredAbility(effect, filter, true)); } diff --git a/Mage.Sets/src/mage/cards/p/Preacher.java b/Mage.Sets/src/mage/cards/p/Preacher.java index 7cfe53fa1c9..03b109e8d13 100644 --- a/Mage.Sets/src/mage/cards/p/Preacher.java +++ b/Mage.Sets/src/mage/cards/p/Preacher.java @@ -12,7 +12,7 @@ import mage.abilities.effects.common.continuous.GainControlTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.*; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.StaticFilters; import mage.game.Game; import mage.game.permanent.Permanent; import mage.players.Player; @@ -38,7 +38,7 @@ public final class Preacher extends CardImpl { // {T}: Gain control of target creature of an opponent's choice that they control for as long as Preacher remains tapped. Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new PreacherEffect(), new TapSourceCost()); - ability.addTarget(new TargetOpponentsChoicePermanent(1, 1, new FilterControlledCreaturePermanent(), false)); + ability.addTarget(new TargetOpponentsChoicePermanent(1, 1, StaticFilters.FILTER_CONTROLLED_CREATURE, false)); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/p/PrestonTheVanisher.java b/Mage.Sets/src/mage/cards/p/PrestonTheVanisher.java index 3690c5fb798..9789b1a2023 100644 --- a/Mage.Sets/src/mage/cards/p/PrestonTheVanisher.java +++ b/Mage.Sets/src/mage/cards/p/PrestonTheVanisher.java @@ -21,7 +21,6 @@ import mage.filter.common.FilterControlledCreaturePermanent; import mage.filter.common.FilterControlledPermanent; import mage.filter.predicate.mageobject.AnotherPredicate; import mage.filter.predicate.permanent.TokenPredicate; -import mage.target.common.TargetControlledPermanent; import mage.target.common.TargetNonlandPermanent; /** @@ -32,7 +31,7 @@ public final class PrestonTheVanisher extends CardImpl { private static final FilterControlledCreaturePermanent triggerFilter = new FilterControlledCreaturePermanent( "another nontoken creature"); - private static final FilterControlledPermanent activeCostFilter = new FilterControlledCreaturePermanent( + private static final FilterControlledPermanent activeCostFilter = new FilterControlledPermanent( SubType.ILLUSION, "Illusions"); static { diff --git a/Mage.Sets/src/mage/cards/p/PrideSovereign.java b/Mage.Sets/src/mage/cards/p/PrideSovereign.java index f72b39e8438..0cc53452844 100644 --- a/Mage.Sets/src/mage/cards/p/PrideSovereign.java +++ b/Mage.Sets/src/mage/cards/p/PrideSovereign.java @@ -1,4 +1,3 @@ - package mage.cards.p; import java.util.UUID; @@ -19,7 +18,7 @@ import mage.constants.CardType; import mage.constants.Duration; import mage.constants.SubType; import mage.constants.Zone; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.common.FilterControlledPermanent; import mage.filter.predicate.mageobject.AnotherPredicate; import mage.game.permanent.token.CatToken2; @@ -29,6 +28,11 @@ import mage.game.permanent.token.CatToken2; */ public final class PrideSovereign extends CardImpl { + private static final FilterControlledPermanent filter = new FilterControlledPermanent(SubType.CAT, "other Cat you control"); + static { + filter.add(AnotherPredicate.instance); + } + public PrideSovereign(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{G}"); @@ -37,8 +41,6 @@ public final class PrideSovereign extends CardImpl { this.toughness = new MageInt(2); // Pride Sovereign gets +1/+1 for each other Cat you control. - FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent(SubType.CAT, "other Cat you control"); - filter.add(AnotherPredicate.instance); DynamicValue otherCats = new PermanentsOnBattlefieldCount(filter); this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostSourceEffect(otherCats, otherCats, Duration.WhileOnBattlefield))); // {W}, {t}, Exert Pride Sovereign: Create two 1/1 white Cat creature tokens with lifelink. diff --git a/Mage.Sets/src/mage/cards/p/PrintlifterOoze.java b/Mage.Sets/src/mage/cards/p/PrintlifterOoze.java index fbf5faf0c45..deb1ce691cc 100644 --- a/Mage.Sets/src/mage/cards/p/PrintlifterOoze.java +++ b/Mage.Sets/src/mage/cards/p/PrintlifterOoze.java @@ -16,8 +16,8 @@ import mage.constants.CardType; import mage.constants.Outcome; import mage.constants.SubType; import mage.counters.CounterType; +import mage.filter.FilterPermanentThisOrAnother; import mage.filter.StaticFilters; -import mage.filter.common.FilterControlledCreaturePermanent; import mage.game.Game; import mage.game.permanent.token.OozeTrampleToken; @@ -28,6 +28,8 @@ import java.util.UUID; */ public final class PrintlifterOoze extends CardImpl { + private static final FilterPermanentThisOrAnother filter = new FilterPermanentThisOrAnother(StaticFilters.FILTER_CONTROLLED_CREATURE, true); + public PrintlifterOoze(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{G}"); this.subtype.add(SubType.OOZE); @@ -40,7 +42,7 @@ public final class PrintlifterOoze extends CardImpl { // Whenever Printlifter Ooze or another creature you control is turned face up, create a 0/0 green Ooze creature token with trample. // The token enters the battlefield with X +1/+1 counters on it, where X is the number of other creatures you control. this.addAbility(new TurnedFaceUpAllTriggeredAbility( - new PrintlifterOozeEffect(), new FilterControlledCreaturePermanent("{this} or another creature you control") + new PrintlifterOozeEffect(), filter )); // Disguise {3}{G} diff --git a/Mage.Sets/src/mage/cards/p/PsychotropeThallid.java b/Mage.Sets/src/mage/cards/p/PsychotropeThallid.java index 5f561b3acae..3126a863ce3 100644 --- a/Mage.Sets/src/mage/cards/p/PsychotropeThallid.java +++ b/Mage.Sets/src/mage/cards/p/PsychotropeThallid.java @@ -1,4 +1,3 @@ - package mage.cards.p; import java.util.UUID; @@ -19,9 +18,8 @@ import mage.constants.SubType; import mage.constants.TargetController; import mage.constants.Zone; import mage.counters.CounterType; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.common.FilterControlledPermanent; import mage.game.permanent.token.SaprolingToken; -import mage.target.common.TargetControlledCreaturePermanent; /** * @@ -29,10 +27,7 @@ import mage.target.common.TargetControlledCreaturePermanent; */ public final class PsychotropeThallid extends CardImpl { - private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("a Saproling"); - static { - filter.add(SubType.SAPROLING.getPredicate()); - } + private static final FilterControlledPermanent filter = new FilterControlledPermanent(SubType.SAPROLING, "a Saproling"); public PsychotropeThallid(UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{G}"); diff --git a/Mage.Sets/src/mage/cards/p/PuppetConjurer.java b/Mage.Sets/src/mage/cards/p/PuppetConjurer.java index eca9ccfa9ee..47d5d1f2e83 100644 --- a/Mage.Sets/src/mage/cards/p/PuppetConjurer.java +++ b/Mage.Sets/src/mage/cards/p/PuppetConjurer.java @@ -16,7 +16,7 @@ import mage.constants.CardType; import mage.constants.SubType; import mage.constants.TargetController; import mage.constants.Zone; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.common.FilterControlledPermanent; import mage.game.permanent.token.HomunculusToken; /** @@ -25,11 +25,7 @@ import mage.game.permanent.token.HomunculusToken; */ public final class PuppetConjurer extends CardImpl { - private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("Homunculus"); - - static { - filter.add(SubType.HOMUNCULUS.getPredicate()); - } + private static final FilterControlledPermanent filter = new FilterControlledPermanent(SubType.HOMUNCULUS, "Homunculus"); public PuppetConjurer(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{1}{B}"); diff --git a/Mage.Sets/src/mage/cards/q/QuestForRenewal.java b/Mage.Sets/src/mage/cards/q/QuestForRenewal.java index 2fbf44787b7..293e8c7d997 100644 --- a/Mage.Sets/src/mage/cards/q/QuestForRenewal.java +++ b/Mage.Sets/src/mage/cards/q/QuestForRenewal.java @@ -14,7 +14,6 @@ import mage.constants.CardType; import mage.constants.Zone; import mage.counters.CounterType; import mage.filter.StaticFilters; -import mage.filter.common.FilterControlledCreaturePermanent; /** * @@ -31,7 +30,7 @@ public final class QuestForRenewal extends CardImpl { // As long as there are four or more quest counters on Quest for Renewal, untap all creatures you control during each other player's untap step. this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect( - new UntapAllDuringEachOtherPlayersUntapStepEffect(new FilterControlledCreaturePermanent()), + new UntapAllDuringEachOtherPlayersUntapStepEffect(StaticFilters.FILTER_CONTROLLED_CREATURES), new SourceHasCounterCondition(CounterType.QUEST, 4, Integer.MAX_VALUE), "As long as there are four or more quest counters on {this}, untap all creatures you control during each other player's untap step."))); } diff --git a/Mage.Sets/src/mage/cards/q/QuestForTheGoblinLord.java b/Mage.Sets/src/mage/cards/q/QuestForTheGoblinLord.java index adde018418b..7d007ef1651 100644 --- a/Mage.Sets/src/mage/cards/q/QuestForTheGoblinLord.java +++ b/Mage.Sets/src/mage/cards/q/QuestForTheGoblinLord.java @@ -12,8 +12,8 @@ import mage.cards.CardSetInfo; import mage.constants.*; import mage.counters.CounterType; import mage.filter.FilterPermanent; -import mage.filter.common.FilterControlledCreaturePermanent; -import mage.filter.common.FilterCreaturePermanent; +import mage.filter.StaticFilters; +import mage.filter.common.FilterControlledPermanent; /** * @@ -22,13 +22,7 @@ import mage.filter.common.FilterCreaturePermanent; public final class QuestForTheGoblinLord extends CardImpl { private static final String rule = "As long as {this} has five or more quest counters on it, creatures you control get +2/+0"; - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent(); - private static final FilterPermanent goblinFilter = new FilterControlledCreaturePermanent("a Goblin"); - - static { - filter.add(TargetController.YOU.getControllerPredicate()); - goblinFilter.add(SubType.GOBLIN.getPredicate()); - } + private static final FilterPermanent goblinFilter = new FilterControlledPermanent(SubType.GOBLIN, "a Goblin"); public QuestForTheGoblinLord(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{R}"); @@ -37,7 +31,9 @@ public final class QuestForTheGoblinLord extends CardImpl { this.addAbility(new EntersBattlefieldControlledTriggeredAbility(Zone.BATTLEFIELD, new AddCountersSourceEffect(CounterType.QUEST.createInstance()), goblinFilter, true)); // As long as Quest for the Goblin Lord has five or more quest counters on it, creatures you control get +2/+0. - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect(new BoostAllEffect(2, 0, Duration.WhileOnBattlefield, filter, false), new SourceHasCounterCondition(CounterType.QUEST, 5, Integer.MAX_VALUE), rule))); + this.addAbility(new SimpleStaticAbility(new ConditionalContinuousEffect( + new BoostAllEffect(2, 0, Duration.WhileOnBattlefield, StaticFilters.FILTER_CONTROLLED_CREATURES, false), + new SourceHasCounterCondition(CounterType.QUEST, 5, Integer.MAX_VALUE), rule))); } private QuestForTheGoblinLord(final QuestForTheGoblinLord card) { diff --git a/Mage.Sets/src/mage/cards/r/RaidingParty.java b/Mage.Sets/src/mage/cards/r/RaidingParty.java index 52fa45cd59f..177e814d2b0 100644 --- a/Mage.Sets/src/mage/cards/r/RaidingParty.java +++ b/Mage.Sets/src/mage/cards/r/RaidingParty.java @@ -18,10 +18,10 @@ import mage.constants.Duration; import mage.constants.Outcome; import mage.constants.SubType; import mage.constants.Zone; -import mage.filter.FilterObject; import mage.filter.FilterStackObject; import mage.filter.FilterPermanent; import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.common.FilterControlledPermanent; import mage.filter.predicate.mageobject.ColorPredicate; import mage.filter.predicate.permanent.TappedPredicate; import mage.game.Game; @@ -37,12 +37,11 @@ import mage.target.common.TargetControlledCreaturePermanent; */ public final class RaidingParty extends CardImpl { - private static final FilterObject filterWhite = new FilterStackObject("white spells or abilities from white sources"); - private static final FilterControlledCreaturePermanent filterOrc = new FilterControlledCreaturePermanent("an Orc"); + private static final FilterStackObject filterWhite = new FilterStackObject("white spells or abilities from white sources"); + private static final FilterControlledPermanent filterOrc = new FilterControlledPermanent(SubType.ORC, "an Orc"); static { filterWhite.add(new ColorPredicate(ObjectColor.WHITE)); - filterOrc.add(SubType.ORC.getPredicate()); } public RaidingParty(UUID ownerId, CardSetInfo setInfo) { diff --git a/Mage.Sets/src/mage/cards/r/RaisedByWolves.java b/Mage.Sets/src/mage/cards/r/RaisedByWolves.java index 18f02082dac..ea427308603 100644 --- a/Mage.Sets/src/mage/cards/r/RaisedByWolves.java +++ b/Mage.Sets/src/mage/cards/r/RaisedByWolves.java @@ -1,4 +1,3 @@ - package mage.cards.r; import java.util.UUID; @@ -14,7 +13,7 @@ import mage.abilities.keyword.EnchantAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.*; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.common.FilterControlledPermanent; import mage.game.permanent.token.WolfToken; import mage.target.TargetPermanent; import mage.target.common.TargetCreaturePermanent; @@ -25,11 +24,7 @@ import mage.target.common.TargetCreaturePermanent; */ public final class RaisedByWolves extends CardImpl { - private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("Wolf you control"); - - static { - filter.add(SubType.WOLF.getPredicate()); - } + private static final FilterControlledPermanent filter = new FilterControlledPermanent(SubType.WOLF, "Wolf you control"); public RaisedByWolves(UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{3}{G}{G}"); diff --git a/Mage.Sets/src/mage/cards/r/RallyingRoar.java b/Mage.Sets/src/mage/cards/r/RallyingRoar.java index 05cb501aa47..6b6c0847a69 100644 --- a/Mage.Sets/src/mage/cards/r/RallyingRoar.java +++ b/Mage.Sets/src/mage/cards/r/RallyingRoar.java @@ -1,4 +1,3 @@ - package mage.cards.r; import java.util.UUID; @@ -8,7 +7,7 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Duration; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.StaticFilters; /** * @@ -21,7 +20,7 @@ public final class RallyingRoar extends CardImpl { // Creatures you control get +1/+1 until end of turn. Untap them. this.getSpellAbility().addEffect(new BoostControlledEffect(1, 1, Duration.EndOfTurn)); - this.getSpellAbility().addEffect(new UntapAllControllerEffect(new FilterControlledCreaturePermanent(), "Untap them.")); + this.getSpellAbility().addEffect(new UntapAllControllerEffect(StaticFilters.FILTER_CONTROLLED_CREATURES, "Untap them.")); } private RallyingRoar(final RallyingRoar card) { diff --git a/Mage.Sets/src/mage/cards/r/RatColony.java b/Mage.Sets/src/mage/cards/r/RatColony.java index 54246520805..619c6a21391 100644 --- a/Mage.Sets/src/mage/cards/r/RatColony.java +++ b/Mage.Sets/src/mage/cards/r/RatColony.java @@ -14,7 +14,7 @@ import mage.constants.CardType; import mage.constants.Duration; import mage.constants.SubType; import mage.constants.Zone; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.common.FilterControlledPermanent; import mage.filter.predicate.mageobject.AnotherPredicate; /** @@ -23,7 +23,7 @@ import mage.filter.predicate.mageobject.AnotherPredicate; */ public final class RatColony extends CardImpl { - private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("other Rat you control"); + private static final FilterControlledPermanent filter = new FilterControlledPermanent("other Rat you control"); static { filter.add(SubType.RAT.getPredicate()); diff --git a/Mage.Sets/src/mage/cards/r/RavenousBaloth.java b/Mage.Sets/src/mage/cards/r/RavenousBaloth.java index e970faafd9b..71bfccd8872 100644 --- a/Mage.Sets/src/mage/cards/r/RavenousBaloth.java +++ b/Mage.Sets/src/mage/cards/r/RavenousBaloth.java @@ -11,8 +11,7 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; import mage.constants.Zone; -import mage.filter.common.FilterControlledCreaturePermanent; -import mage.target.common.TargetControlledCreaturePermanent; +import mage.filter.common.FilterControlledPermanent; /** * @@ -20,10 +19,7 @@ import mage.target.common.TargetControlledCreaturePermanent; */ public final class RavenousBaloth extends CardImpl { - private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("a Beast"); - static { - filter.add(SubType.BEAST.getPredicate()); - } + private static final FilterControlledPermanent filter = new FilterControlledPermanent(SubType.BEAST, "a Beast"); public RavenousBaloth(UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{G}{G}"); diff --git a/Mage.Sets/src/mage/cards/r/RecklessCohort.java b/Mage.Sets/src/mage/cards/r/RecklessCohort.java index b2bddd03183..fbec66db691 100644 --- a/Mage.Sets/src/mage/cards/r/RecklessCohort.java +++ b/Mage.Sets/src/mage/cards/r/RecklessCohort.java @@ -1,4 +1,3 @@ - package mage.cards.r; import java.util.UUID; @@ -11,7 +10,7 @@ import mage.abilities.effects.common.combat.AttacksIfAbleSourceEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.*; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.common.FilterControlledPermanent; import mage.filter.predicate.mageobject.AnotherPredicate; /** @@ -20,7 +19,7 @@ import mage.filter.predicate.mageobject.AnotherPredicate; */ public final class RecklessCohort extends CardImpl { - private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("another Ally"); + private static final FilterControlledPermanent filter = new FilterControlledPermanent("another Ally"); static { filter.add(AnotherPredicate.instance); diff --git a/Mage.Sets/src/mage/cards/r/RinAndSeriInseparable.java b/Mage.Sets/src/mage/cards/r/RinAndSeriInseparable.java index e74384272f8..140d344230d 100644 --- a/Mage.Sets/src/mage/cards/r/RinAndSeriInseparable.java +++ b/Mage.Sets/src/mage/cards/r/RinAndSeriInseparable.java @@ -20,7 +20,7 @@ import mage.constants.SubType; import mage.constants.SuperType; import mage.filter.FilterPermanent; import mage.filter.FilterSpell; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.common.FilterControlledPermanent; import mage.game.permanent.token.GreenCatToken; import mage.game.permanent.token.WhiteDogToken; import mage.target.common.TargetAnyTarget; @@ -35,8 +35,8 @@ public final class RinAndSeriInseparable extends CardImpl { private static final FilterSpell dogSpellFilter = new FilterSpell("a Dog spell"); private static final FilterSpell catSpellFilter = new FilterSpell("a Cat spell"); - private static final FilterPermanent dogPermanentFilter = new FilterControlledCreaturePermanent("Dogs you control"); - private static final FilterPermanent catPermanentFilter = new FilterControlledCreaturePermanent("Cats you control"); + private static final FilterPermanent dogPermanentFilter = new FilterControlledPermanent("Dogs you control"); + private static final FilterPermanent catPermanentFilter = new FilterControlledPermanent("Cats you control"); static { dogSpellFilter.add(SubType.DOG.getPredicate()); diff --git a/Mage.Sets/src/mage/cards/r/RiptideDirector.java b/Mage.Sets/src/mage/cards/r/RiptideDirector.java index 78d83596bb8..d382e00e5c0 100644 --- a/Mage.Sets/src/mage/cards/r/RiptideDirector.java +++ b/Mage.Sets/src/mage/cards/r/RiptideDirector.java @@ -14,7 +14,6 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; import mage.constants.Zone; -import mage.filter.common.FilterControlledCreaturePermanent; import mage.filter.common.FilterControlledPermanent; /** @@ -23,11 +22,7 @@ import mage.filter.common.FilterControlledPermanent; */ public final class RiptideDirector extends CardImpl { - private static final FilterControlledPermanent filter = new FilterControlledCreaturePermanent("Wizard you control"); - - static { - filter.add(SubType.WIZARD.getPredicate()); - } + private static final FilterControlledPermanent filter = new FilterControlledPermanent(SubType.WIZARD, "Wizard you control"); public RiptideDirector(UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{U}{U}"); diff --git a/Mage.Sets/src/mage/cards/r/RiskyMove.java b/Mage.Sets/src/mage/cards/r/RiskyMove.java index 4bfcb489fdc..641e989da14 100644 --- a/Mage.Sets/src/mage/cards/r/RiskyMove.java +++ b/Mage.Sets/src/mage/cards/r/RiskyMove.java @@ -11,7 +11,6 @@ import mage.abilities.effects.common.continuous.GainControlTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.*; -import mage.filter.common.FilterControlledCreaturePermanent; import mage.game.Game; import mage.game.events.GameEvent; import mage.game.permanent.Permanent; @@ -144,7 +143,7 @@ class RiskyMoveFlipCoinEffect extends OneShotEffect { public boolean apply(Game game, Ability source) { Player controller = game.getPlayer(source.getControllerId()); if (controller != null) { - Target target1 = new TargetControlledCreaturePermanent(1, 1, new FilterControlledCreaturePermanent(), true); + Target target1 = new TargetControlledCreaturePermanent().withNotTarget(true); Target target2 = new TargetOpponent(true); if (target1.canChoose(controller.getId(), source, game)) { diff --git a/Mage.Sets/src/mage/cards/r/RoarOfTheKha.java b/Mage.Sets/src/mage/cards/r/RoarOfTheKha.java index f512408c691..9283ea78f91 100644 --- a/Mage.Sets/src/mage/cards/r/RoarOfTheKha.java +++ b/Mage.Sets/src/mage/cards/r/RoarOfTheKha.java @@ -1,4 +1,3 @@ - package mage.cards.r; 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.FilterControlledCreaturePermanent; +import mage.filter.StaticFilters; /** * @@ -27,7 +26,7 @@ public final class RoarOfTheKha extends CardImpl { this.getSpellAbility().addEffect(new BoostControlledEffect(1, 1, Duration.EndOfTurn)); // or untap all creatures you control. - Mode mode = new Mode(new UntapAllControllerEffect(new FilterControlledCreaturePermanent(), rule)); + Mode mode = new Mode(new UntapAllControllerEffect(StaticFilters.FILTER_CONTROLLED_CREATURES, rule)); this.getSpellAbility().getModes().addMode(mode); // Entwine {1}{W} diff --git a/Mage.Sets/src/mage/cards/r/RoaringPrimadox.java b/Mage.Sets/src/mage/cards/r/RoaringPrimadox.java index 792c177ab2b..48cadc0c2e3 100644 --- a/Mage.Sets/src/mage/cards/r/RoaringPrimadox.java +++ b/Mage.Sets/src/mage/cards/r/RoaringPrimadox.java @@ -1,4 +1,3 @@ - package mage.cards.r; import java.util.UUID; @@ -9,7 +8,7 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.StaticFilters; import mage.game.events.GameEvent.EventType; /** @@ -26,7 +25,7 @@ public final class RoaringPrimadox extends CardImpl { this.toughness = new MageInt(4); // At the beginning of your upkeep, return a creature you control to its owner's hand. - this.addAbility(new OnEventTriggeredAbility(EventType.UPKEEP_STEP_PRE, "beginning of your upkeep", new ReturnToHandChosenControlledPermanentEffect(new FilterControlledCreaturePermanent()))); + this.addAbility(new OnEventTriggeredAbility(EventType.UPKEEP_STEP_PRE, "beginning of your upkeep", new ReturnToHandChosenControlledPermanentEffect(StaticFilters.FILTER_CONTROLLED_CREATURE))); } private RoaringPrimadox(final RoaringPrimadox card) { diff --git a/Mage.Sets/src/mage/cards/r/RushOfBattle.java b/Mage.Sets/src/mage/cards/r/RushOfBattle.java index 0210ecb7d7a..149a5850b7f 100644 --- a/Mage.Sets/src/mage/cards/r/RushOfBattle.java +++ b/Mage.Sets/src/mage/cards/r/RushOfBattle.java @@ -1,4 +1,3 @@ - package mage.cards.r; import java.util.UUID; @@ -19,19 +18,14 @@ import mage.filter.common.FilterControlledCreaturePermanent; */ public final class RushOfBattle extends CardImpl { - private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent(); - static { - filter.add(SubType.WARRIOR.getPredicate()); - } + private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent(SubType.WARRIOR, "Warrior creatures you control"); public RushOfBattle(UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{3}{W}"); - // Creatures you control get +2/+1 until end of turn. Warrior creatures you control gain lifelink until end of turn. this.getSpellAbility().addEffect(new BoostControlledEffect(2, 1, Duration.EndOfTurn)); Effect effect = new GainAbilityControlledEffect(LifelinkAbility.getInstance(), Duration.EndOfTurn, filter); - effect.setText("Warrior creatures you control gain lifelink until end of turn"); this.getSpellAbility().addEffect(effect); } diff --git a/Mage.Sets/src/mage/cards/s/SaltRoadAmbushers.java b/Mage.Sets/src/mage/cards/s/SaltRoadAmbushers.java index 44332a5de6d..07b33a5dadd 100644 --- a/Mage.Sets/src/mage/cards/s/SaltRoadAmbushers.java +++ b/Mage.Sets/src/mage/cards/s/SaltRoadAmbushers.java @@ -1,4 +1,3 @@ - package mage.cards.s; import java.util.UUID; @@ -12,7 +11,7 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; import mage.counters.CounterType; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.common.FilterControlledPermanent; import mage.filter.predicate.mageobject.AnotherPredicate; /** @@ -48,13 +47,13 @@ public final class SaltRoadAmbushers extends CardImpl { class SaltRoadAmbushersTriggeredAbility extends TurnedFaceUpAllTriggeredAbility { -private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("another permanent you control"); +private static final FilterControlledPermanent filter = new FilterControlledPermanent("another permanent you control"); static { filter.add(AnotherPredicate.instance); } - public SaltRoadAmbushersTriggeredAbility() { + SaltRoadAmbushersTriggeredAbility() { super(new AddCountersTargetEffect(CounterType.P1P1.createInstance(2)), filter, true); } @@ -71,4 +70,4 @@ private static final FilterControlledCreaturePermanent filter = new FilterContro public String getRule() { return "Whenever another permanent you control is turned face up, if it's a creature, put two +1/+1 counters on it."; } -} \ No newline at end of file +} diff --git a/Mage.Sets/src/mage/cards/s/SamiteElder.java b/Mage.Sets/src/mage/cards/s/SamiteElder.java index af5098f2442..bc291e0b931 100644 --- a/Mage.Sets/src/mage/cards/s/SamiteElder.java +++ b/Mage.Sets/src/mage/cards/s/SamiteElder.java @@ -1,4 +1,3 @@ - package mage.cards.s; import java.util.UUID; @@ -18,7 +17,7 @@ import mage.constants.Duration; import mage.constants.Outcome; import mage.constants.Zone; import mage.filter.FilterCard; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.StaticFilters; import mage.filter.predicate.mageobject.ColorPredicate; import mage.game.Game; import mage.game.permanent.Permanent; @@ -70,12 +69,12 @@ class SamiteElderEffect extends OneShotEffect { public boolean apply(Game game, Ability source) { Permanent target = game.getPermanent(source.getFirstTarget()); - if(target != null) { - for(ObjectColor color : target.getColor(game).getColors()) { + if (target != null) { + for (ObjectColor color : target.getColor(game).getColors()) { FilterCard filter = new FilterCard(color.getDescription()); filter.add(new ColorPredicate(color)); game.addEffect(new GainAbilityControlledEffect(new ProtectionAbility(filter), - Duration.EndOfTurn, new FilterControlledCreaturePermanent()), source); + Duration.EndOfTurn, StaticFilters.FILTER_CONTROLLED_CREATURES), source); } return true; } diff --git a/Mage.Sets/src/mage/cards/s/SarkhansRage.java b/Mage.Sets/src/mage/cards/s/SarkhansRage.java index 1bb54faf47d..be1c511dbc4 100644 --- a/Mage.Sets/src/mage/cards/s/SarkhansRage.java +++ b/Mage.Sets/src/mage/cards/s/SarkhansRage.java @@ -1,4 +1,3 @@ - package mage.cards.s; import java.util.UUID; @@ -11,7 +10,7 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.ComparisonType; import mage.constants.SubType; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.common.FilterControlledPermanent; import mage.target.common.TargetAnyTarget; /** @@ -27,7 +26,7 @@ public final class SarkhansRage extends CardImpl { this.getSpellAbility().addEffect(new DamageTargetEffect(5)); this.getSpellAbility().addTarget(new TargetAnyTarget()); this.getSpellAbility().addEffect(new ConditionalOneShotEffect(new DamageControllerEffect(2), - new PermanentsOnTheBattlefieldCondition(new FilterControlledCreaturePermanent(SubType.DRAGON,"you control no Dragons"), ComparisonType.EQUAL_TO, 0) + new PermanentsOnTheBattlefieldCondition(new FilterControlledPermanent(SubType.DRAGON,"you control no Dragons"), ComparisonType.EQUAL_TO, 0) )); } diff --git a/Mage.Sets/src/mage/cards/s/SavageThallid.java b/Mage.Sets/src/mage/cards/s/SavageThallid.java index a74071d99b3..6ec0efb5c06 100644 --- a/Mage.Sets/src/mage/cards/s/SavageThallid.java +++ b/Mage.Sets/src/mage/cards/s/SavageThallid.java @@ -19,10 +19,9 @@ import mage.constants.TargetController; import mage.constants.Zone; import mage.counters.CounterType; import mage.filter.FilterPermanent; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.common.FilterControlledPermanent; import mage.game.permanent.token.SaprolingToken; import mage.target.TargetPermanent; -import mage.target.common.TargetControlledCreaturePermanent; /** * @@ -36,11 +35,7 @@ public final class SavageThallid extends CardImpl { filter.add(SubType.FUNGUS.getPredicate()); } - private static final FilterControlledCreaturePermanent filter2 = new FilterControlledCreaturePermanent("Saproling"); - - static { - filter2.add(SubType.SAPROLING.getPredicate()); - } + private static final FilterControlledPermanent filter2 = new FilterControlledPermanent(SubType.SAPROLING, "Saproling"); public SavageThallid(UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{G}{G}"); diff --git a/Mage.Sets/src/mage/cards/s/ScamperingScorcher.java b/Mage.Sets/src/mage/cards/s/ScamperingScorcher.java index 9561b437f8a..ad62a54162a 100644 --- a/Mage.Sets/src/mage/cards/s/ScamperingScorcher.java +++ b/Mage.Sets/src/mage/cards/s/ScamperingScorcher.java @@ -12,7 +12,7 @@ import mage.constants.CardType; import mage.constants.Duration; import mage.constants.SubType; import mage.filter.FilterPermanent; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.common.FilterControlledPermanent; import mage.game.permanent.token.RedElementalToken; import java.util.UUID; @@ -23,7 +23,7 @@ import java.util.UUID; public final class ScamperingScorcher extends CardImpl { private static final FilterPermanent filter - = new FilterControlledCreaturePermanent(SubType.ELEMENTAL, "Elementals"); + = new FilterControlledPermanent(SubType.ELEMENTAL, "Elementals"); public ScamperingScorcher(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{R}"); diff --git a/Mage.Sets/src/mage/cards/s/Scarecrone.java b/Mage.Sets/src/mage/cards/s/Scarecrone.java index 7cd461b4c74..96be5665410 100644 --- a/Mage.Sets/src/mage/cards/s/Scarecrone.java +++ b/Mage.Sets/src/mage/cards/s/Scarecrone.java @@ -16,9 +16,8 @@ import mage.constants.CardType; import mage.constants.SubType; import mage.constants.Zone; import mage.filter.FilterCard; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.common.FilterControlledPermanent; import mage.target.common.TargetCardInYourGraveyard; -import mage.target.common.TargetControlledCreaturePermanent; /** * @author Loki @@ -26,7 +25,7 @@ import mage.target.common.TargetControlledCreaturePermanent; public final class Scarecrone extends CardImpl { private static final FilterCard filter = new FilterCard("artifact creature card from your graveyard"); - private static final FilterControlledCreaturePermanent filterScarecrow = new FilterControlledCreaturePermanent("Scarecrow"); + private static final FilterControlledPermanent filterScarecrow = new FilterControlledPermanent("Scarecrow"); static { filter.add(CardType.ARTIFACT.getPredicate()); filter.add(CardType.CREATURE.getPredicate()); diff --git a/Mage.Sets/src/mage/cards/s/SeaGateLoremaster.java b/Mage.Sets/src/mage/cards/s/SeaGateLoremaster.java index f1bd30dbdd1..da1c02460cd 100644 --- a/Mage.Sets/src/mage/cards/s/SeaGateLoremaster.java +++ b/Mage.Sets/src/mage/cards/s/SeaGateLoremaster.java @@ -1,4 +1,3 @@ - package mage.cards.s; import java.util.UUID; @@ -12,7 +11,7 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; import mage.constants.Zone; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.common.FilterControlledPermanent; /** * @@ -20,11 +19,7 @@ import mage.filter.common.FilterControlledCreaturePermanent; */ public final class SeaGateLoremaster extends CardImpl { - private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("Ally you control"); - - static { - filter.add(SubType.ALLY.getPredicate()); - } + private static final FilterControlledPermanent filter = new FilterControlledPermanent(SubType.ALLY, "Ally you control"); public SeaGateLoremaster(UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{4}{U}"); diff --git a/Mage.Sets/src/mage/cards/s/SekkiSeasonsGuide.java b/Mage.Sets/src/mage/cards/s/SekkiSeasonsGuide.java index ed2bce8e7ab..1b7b3b1476c 100644 --- a/Mage.Sets/src/mage/cards/s/SekkiSeasonsGuide.java +++ b/Mage.Sets/src/mage/cards/s/SekkiSeasonsGuide.java @@ -1,4 +1,3 @@ - package mage.cards.s; import java.util.UUID; @@ -16,12 +15,11 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.*; import mage.counters.CounterType; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.common.FilterControlledPermanent; import mage.game.Game; import mage.game.events.GameEvent; import mage.game.permanent.Permanent; import mage.game.permanent.token.SpiritToken; -import mage.target.common.TargetControlledPermanent; import mage.target.common.TargetSacrifice; /** @@ -30,11 +28,7 @@ import mage.target.common.TargetSacrifice; */ public final class SekkiSeasonsGuide extends CardImpl { - private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("Spirits"); - - static { - filter.add(SubType.SPIRIT.getPredicate()); - } + private static final FilterControlledPermanent filter = new FilterControlledPermanent(SubType.SPIRIT, "Spirits"); public SekkiSeasonsGuide(UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{5}{G}{G}{G}"); diff --git a/Mage.Sets/src/mage/cards/s/SetonKrosanProtector.java b/Mage.Sets/src/mage/cards/s/SetonKrosanProtector.java index 4a64671bd98..94a1bc453f6 100644 --- a/Mage.Sets/src/mage/cards/s/SetonKrosanProtector.java +++ b/Mage.Sets/src/mage/cards/s/SetonKrosanProtector.java @@ -1,4 +1,3 @@ - package mage.cards.s; import java.util.ArrayList; @@ -17,16 +16,21 @@ import mage.constants.SubType; import mage.constants.SuperType; import mage.constants.Zone; import mage.filter.FilterPermanent; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.common.FilterControlledPermanent; import mage.filter.predicate.permanent.TappedPredicate; import mage.game.Game; -import mage.target.common.TargetControlledCreaturePermanent; +import mage.target.common.TargetControlledPermanent; /** * * @author cbt33 */ public final class SetonKrosanProtector extends CardImpl { + + private static final FilterControlledPermanent filter = new FilterControlledPermanent(SubType.DRUID, "untapped Druid you control"); + static { + filter.add(TappedPredicate.UNTAPPED); + } public SetonKrosanProtector(UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{G}{G}{G}"); @@ -38,13 +42,10 @@ public final class SetonKrosanProtector extends CardImpl { this.toughness = new MageInt(2); // Tap an untapped Druid you control: Add {G}. - FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("untapped Druid you control"); - filter.add(TappedPredicate.UNTAPPED); - filter.add(SubType.DRUID.getPredicate()); this.addAbility(new SimpleManaAbility( Zone.BATTLEFIELD, new SetonKrosanProtectorManaEffect(filter), - new TapTargetCost(new TargetControlledCreaturePermanent(1, 1, filter, true)))); + new TapTargetCost(new TargetControlledPermanent(1, 1, filter, true)))); } private SetonKrosanProtector(final SetonKrosanProtector card) { @@ -61,7 +62,7 @@ class SetonKrosanProtectorManaEffect extends BasicManaEffect { private final FilterPermanent filter; - public SetonKrosanProtectorManaEffect(FilterPermanent filter) { + SetonKrosanProtectorManaEffect(FilterPermanent filter) { super(Mana.GreenMana(1)); this.filter = filter; } diff --git a/Mage.Sets/src/mage/cards/s/ShriekingDrake.java b/Mage.Sets/src/mage/cards/s/ShriekingDrake.java index e10d621b561..d67495df19d 100644 --- a/Mage.Sets/src/mage/cards/s/ShriekingDrake.java +++ b/Mage.Sets/src/mage/cards/s/ShriekingDrake.java @@ -1,4 +1,3 @@ - package mage.cards.s; import java.util.UUID; @@ -10,7 +9,7 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.StaticFilters; /** * @@ -28,7 +27,7 @@ public final class ShriekingDrake extends CardImpl { // Flying this.addAbility(FlyingAbility.getInstance()); // When Shrieking Drake enters the battlefield, return a creature you control to its owner's hand. - this.addAbility(new EntersBattlefieldTriggeredAbility(new ReturnToHandChosenControlledPermanentEffect(new FilterControlledCreaturePermanent()))); + this.addAbility(new EntersBattlefieldTriggeredAbility(new ReturnToHandChosenControlledPermanentEffect(StaticFilters.FILTER_CONTROLLED_CREATURE))); } private ShriekingDrake(final ShriekingDrake card) { diff --git a/Mage.Sets/src/mage/cards/s/SigilOfTheNayanGods.java b/Mage.Sets/src/mage/cards/s/SigilOfTheNayanGods.java index 40b2c52af97..1f94b4192fa 100644 --- a/Mage.Sets/src/mage/cards/s/SigilOfTheNayanGods.java +++ b/Mage.Sets/src/mage/cards/s/SigilOfTheNayanGods.java @@ -16,7 +16,7 @@ import mage.constants.SubType; import mage.constants.Duration; import mage.constants.Outcome; import mage.constants.Zone; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.StaticFilters; import mage.target.TargetPermanent; import mage.target.common.TargetCreaturePermanent; @@ -26,8 +26,6 @@ import mage.target.common.TargetCreaturePermanent; */ public final class SigilOfTheNayanGods extends CardImpl { - private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent(); - public SigilOfTheNayanGods(UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{1}{G}{W}"); this.subtype.add(SubType.AURA); @@ -39,7 +37,7 @@ public final class SigilOfTheNayanGods extends CardImpl { this.addAbility(new EnchantAbility(auraTarget)); // Enchanted creature gets +1/+1 for each creature you control. - PermanentsOnBattlefieldCount amount = new PermanentsOnBattlefieldCount(filter, 1); + PermanentsOnBattlefieldCount amount = new PermanentsOnBattlefieldCount(StaticFilters.FILTER_CONTROLLED_CREATURE, 1); this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEnchantedEffect(amount, amount, Duration.WhileOnBattlefield))); // Cycling {G/W} diff --git a/Mage.Sets/src/mage/cards/s/SkeletalVampire.java b/Mage.Sets/src/mage/cards/s/SkeletalVampire.java index 10a0b7fd00e..32986991c66 100644 --- a/Mage.Sets/src/mage/cards/s/SkeletalVampire.java +++ b/Mage.Sets/src/mage/cards/s/SkeletalVampire.java @@ -1,4 +1,3 @@ - package mage.cards.s; import java.util.UUID; @@ -16,9 +15,8 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; import mage.constants.Zone; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.common.FilterControlledPermanent; import mage.game.permanent.token.BatToken; -import mage.target.common.TargetControlledCreaturePermanent; /** * @@ -26,11 +24,7 @@ import mage.target.common.TargetControlledCreaturePermanent; */ public final class SkeletalVampire extends CardImpl { - private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("a Bat"); - - static { - filter.add(SubType.BAT.getPredicate()); - } + private static final FilterControlledPermanent filter = new FilterControlledPermanent(SubType.BAT, "a Bat"); public SkeletalVampire(UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{4}{B}{B}"); diff --git a/Mage.Sets/src/mage/cards/s/SkirkFireMarshal.java b/Mage.Sets/src/mage/cards/s/SkirkFireMarshal.java index 1b79152605a..ccaf09a9c6d 100644 --- a/Mage.Sets/src/mage/cards/s/SkirkFireMarshal.java +++ b/Mage.Sets/src/mage/cards/s/SkirkFireMarshal.java @@ -1,4 +1,3 @@ - package mage.cards.s; import java.util.UUID; @@ -14,9 +13,9 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; import mage.constants.Zone; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.common.FilterControlledPermanent; import mage.filter.predicate.permanent.TappedPredicate; -import mage.target.common.TargetControlledCreaturePermanent; +import mage.target.common.TargetControlledPermanent; /** * @@ -24,7 +23,7 @@ import mage.target.common.TargetControlledCreaturePermanent; */ public final class SkirkFireMarshal extends CardImpl { - private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("untapped Goblins you control"); + private static final FilterControlledPermanent filter = new FilterControlledPermanent("untapped Goblins you control"); static { filter.add(TappedPredicate.UNTAPPED); @@ -44,7 +43,7 @@ public final class SkirkFireMarshal extends CardImpl { // Tap five untapped Goblins you control: Skirk Fire Marshal deals 10 damage to each creature and each player. Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageEverythingEffect(10), - new TapTargetCost(new TargetControlledCreaturePermanent(5,5, filter, true))); + new TapTargetCost(new TargetControlledPermanent(5,5, filter, true))); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/s/SkirkProspector.java b/Mage.Sets/src/mage/cards/s/SkirkProspector.java index b4b2a3f0405..f1fa1e9bae7 100644 --- a/Mage.Sets/src/mage/cards/s/SkirkProspector.java +++ b/Mage.Sets/src/mage/cards/s/SkirkProspector.java @@ -12,8 +12,7 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; import mage.constants.Zone; -import mage.filter.common.FilterControlledCreaturePermanent; -import mage.target.common.TargetControlledCreaturePermanent; +import mage.filter.common.FilterControlledPermanent; /** * @@ -21,11 +20,7 @@ import mage.target.common.TargetControlledCreaturePermanent; */ public final class SkirkProspector extends CardImpl { - private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("a Goblin"); - - static { - filter.add(SubType.GOBLIN.getPredicate()); - } + private static final FilterControlledPermanent filter = new FilterControlledPermanent(SubType.GOBLIN, "a Goblin"); public SkirkProspector(UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{R}"); diff --git a/Mage.Sets/src/mage/cards/s/SkirsdagFlayer.java b/Mage.Sets/src/mage/cards/s/SkirsdagFlayer.java index 599c7b5bb76..3002830eccb 100644 --- a/Mage.Sets/src/mage/cards/s/SkirsdagFlayer.java +++ b/Mage.Sets/src/mage/cards/s/SkirsdagFlayer.java @@ -1,4 +1,3 @@ - package mage.cards.s; import java.util.UUID; @@ -14,8 +13,7 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; import mage.constants.Zone; -import mage.filter.common.FilterControlledCreaturePermanent; -import mage.target.common.TargetControlledPermanent; +import mage.filter.common.FilterControlledPermanent; import mage.target.common.TargetCreaturePermanent; /** @@ -24,11 +22,7 @@ import mage.target.common.TargetCreaturePermanent; */ public final class SkirsdagFlayer extends CardImpl { - private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("Human"); - - static { - filter.add(SubType.HUMAN.getPredicate()); - } + private static final FilterControlledPermanent filter = new FilterControlledPermanent(SubType.HUMAN, "Human"); public SkirsdagFlayer(UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{B}"); diff --git a/Mage.Sets/src/mage/cards/s/Smallpox.java b/Mage.Sets/src/mage/cards/s/Smallpox.java index 79a4ea0ed4c..3d2d9b495b4 100644 --- a/Mage.Sets/src/mage/cards/s/Smallpox.java +++ b/Mage.Sets/src/mage/cards/s/Smallpox.java @@ -1,4 +1,3 @@ - package mage.cards.s; import java.util.UUID; @@ -9,9 +8,7 @@ import mage.abilities.effects.common.discard.DiscardEachPlayerEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.filter.common.FilterControlledCreaturePermanent; -import mage.filter.common.FilterControlledLandPermanent; -import mage.filter.common.FilterControlledPermanent; +import mage.filter.StaticFilters; /** * @@ -19,22 +16,18 @@ import mage.filter.common.FilterControlledPermanent; */ public final class Smallpox extends CardImpl { - private static final FilterControlledPermanent filterCreature = new FilterControlledCreaturePermanent(); - private static final FilterControlledPermanent filterLand = new FilterControlledLandPermanent(); - public Smallpox(UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{B}{B}"); - // Each player loses 1 life, discards a card, sacrifices a creature, then sacrifices a land. this.getSpellAbility().addEffect(new LoseLifeAllPlayersEffect(1)); Effect effect = new DiscardEachPlayerEffect(); effect.setText(", discards a card"); this.getSpellAbility().addEffect(effect); - effect = new SacrificeAllEffect(1, filterCreature); + effect = new SacrificeAllEffect(1, StaticFilters.FILTER_CONTROLLED_CREATURE); effect.setText(", sacrifices a creature"); this.getSpellAbility().addEffect(effect); - effect = new SacrificeAllEffect(1, filterLand); + effect = new SacrificeAllEffect(1, StaticFilters.FILTER_CONTROLLED_PERMANENT_LAND); effect.setText(", then sacrifices a land"); this.getSpellAbility().addEffect(effect); } diff --git a/Mage.Sets/src/mage/cards/s/Smoke.java b/Mage.Sets/src/mage/cards/s/Smoke.java index 9b948afb07a..0a2784f7d8e 100644 --- a/Mage.Sets/src/mage/cards/s/Smoke.java +++ b/Mage.Sets/src/mage/cards/s/Smoke.java @@ -1,4 +1,3 @@ - package mage.cards.s; import java.util.UUID; @@ -10,8 +9,7 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Duration; import mage.constants.Zone; -import mage.filter.common.FilterControlledCreaturePermanent; -import mage.filter.common.FilterControlledPermanent; +import mage.filter.StaticFilters; import mage.game.Game; import mage.players.Player; @@ -25,7 +23,6 @@ public final class Smoke extends CardImpl { public Smoke(UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{R}{R}"); - // Players can't untap more than one creature during their untap steps. this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SmokeEffect())); } @@ -42,10 +39,8 @@ public final class Smoke extends CardImpl { class SmokeEffect extends RestrictionUntapNotMoreThanEffect { - private static final FilterControlledPermanent filter = new FilterControlledCreaturePermanent(); - - public SmokeEffect() { - super(Duration.WhileOnBattlefield, 1, filter); + SmokeEffect() { + super(Duration.WhileOnBattlefield, 1, StaticFilters.FILTER_CONTROLLED_CREATURE); staticText = "Players can't untap more than one creature during their untap steps"; } diff --git a/Mage.Sets/src/mage/cards/s/SophiaDoggedDetective.java b/Mage.Sets/src/mage/cards/s/SophiaDoggedDetective.java index 34f8b02e8f1..bacaa547a29 100644 --- a/Mage.Sets/src/mage/cards/s/SophiaDoggedDetective.java +++ b/Mage.Sets/src/mage/cards/s/SophiaDoggedDetective.java @@ -18,7 +18,7 @@ import mage.constants.SubType; import mage.constants.SuperType; import mage.counters.CounterType; import mage.filter.common.FilterArtifactPermanent; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.common.FilterControlledPermanent; import mage.filter.predicate.permanent.TokenPredicate; import mage.game.permanent.token.FoodToken; import mage.game.permanent.token.TinyToken; @@ -30,7 +30,7 @@ import java.util.UUID; */ public final class SophiaDoggedDetective extends CardImpl { - private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent(SubType.DOG, "Dog you control"); + private static final FilterControlledPermanent filter = new FilterControlledPermanent(SubType.DOG, "Dog you control"); private static final FilterArtifactPermanent filter2 = new FilterArtifactPermanent("artifact token"); static { diff --git a/Mage.Sets/src/mage/cards/s/SpawnbinderMage.java b/Mage.Sets/src/mage/cards/s/SpawnbinderMage.java index ab4528c0115..6cb7d40d02f 100644 --- a/Mage.Sets/src/mage/cards/s/SpawnbinderMage.java +++ b/Mage.Sets/src/mage/cards/s/SpawnbinderMage.java @@ -1,37 +1,23 @@ - package mage.cards.s; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; -import mage.abilities.common.SimpleActivatedAbility; -import mage.abilities.costs.common.TapSourceCost; -import mage.abilities.costs.common.TapTargetCost; +import mage.abilities.abilityword.CohortAbility; import mage.abilities.effects.common.TapTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; -import mage.constants.AbilityWord; import mage.constants.CardType; import mage.constants.SubType; -import mage.constants.Zone; -import mage.filter.common.FilterControlledPermanent; -import mage.filter.predicate.permanent.TappedPredicate; -import mage.target.common.TargetControlledPermanent; import mage.target.common.TargetCreaturePermanent; +import java.util.UUID; + /** * * @author fireshoes */ public final class SpawnbinderMage extends CardImpl { - private static final FilterControlledPermanent filter = new FilterControlledPermanent("an untapped Ally you control"); - - static { - filter.add(SubType.ALLY.getPredicate()); - filter.add(TappedPredicate.UNTAPPED); - } - public SpawnbinderMage(UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{W}"); this.subtype.add(SubType.HUMAN); @@ -41,10 +27,8 @@ public final class SpawnbinderMage extends CardImpl { this.toughness = new MageInt(4); // Cohort — {T}, Tap an untapped Ally you control: Tap target creature. - Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new TapTargetEffect(), new TapSourceCost()); - ability.addCost(new TapTargetCost(new TargetControlledPermanent(filter))); + Ability ability = new CohortAbility(new TapTargetEffect()); ability.addTarget(new TargetCreaturePermanent()); - ability.setAbilityWord(AbilityWord.COHORT); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/s/SpeciesGorger.java b/Mage.Sets/src/mage/cards/s/SpeciesGorger.java index 0bcb9d96c9c..cd5008b3072 100644 --- a/Mage.Sets/src/mage/cards/s/SpeciesGorger.java +++ b/Mage.Sets/src/mage/cards/s/SpeciesGorger.java @@ -8,7 +8,7 @@ import mage.abilities.effects.common.ReturnToHandChosenControlledPermanentEffect import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.*; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.StaticFilters; /** * @@ -25,7 +25,7 @@ public final class SpeciesGorger extends CardImpl { this.toughness = new MageInt(6); // At the beginning of your upkeep, return a creature you control to its owner's hand. - this.addAbility(new BeginningOfUpkeepTriggeredAbility(Zone.BATTLEFIELD, new ReturnToHandChosenControlledPermanentEffect(new FilterControlledCreaturePermanent()), TargetController.YOU, false)); + this.addAbility(new BeginningOfUpkeepTriggeredAbility(Zone.BATTLEFIELD, new ReturnToHandChosenControlledPermanentEffect(StaticFilters.FILTER_CONTROLLED_CREATURE), TargetController.YOU, false)); } @@ -38,4 +38,3 @@ public final class SpeciesGorger extends CardImpl { return new SpeciesGorger(this); } } - diff --git a/Mage.Sets/src/mage/cards/s/SplinteringWind.java b/Mage.Sets/src/mage/cards/s/SplinteringWind.java index b227718670b..e9bc5fccd87 100644 --- a/Mage.Sets/src/mage/cards/s/SplinteringWind.java +++ b/Mage.Sets/src/mage/cards/s/SplinteringWind.java @@ -15,7 +15,7 @@ import mage.constants.CardType; import mage.constants.Duration; import mage.constants.Outcome; import mage.constants.Zone; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.StaticFilters; import mage.game.Game; import mage.game.events.GameEvent; import mage.game.events.ZoneChangeEvent; @@ -86,11 +86,11 @@ class SplinteringWindCreateTokenEffect extends OneShotEffect { class SplinteringWindDelayedTriggeredAbility extends DelayedTriggeredAbility { - private UUID tokenId; + private final UUID tokenId; SplinteringWindDelayedTriggeredAbility(UUID tokenId) { super(new DamageControllerEffect(1), Duration.OneUse); - this.addEffect(new DamageAllEffect(1, new FilterControlledCreaturePermanent())); + this.addEffect(new DamageAllEffect(1, StaticFilters.FILTER_CONTROLLED_CREATURE)); this.tokenId = tokenId; } diff --git a/Mage.Sets/src/mage/cards/s/SpringjackPasture.java b/Mage.Sets/src/mage/cards/s/SpringjackPasture.java index e4c9280aca8..27f896bb520 100644 --- a/Mage.Sets/src/mage/cards/s/SpringjackPasture.java +++ b/Mage.Sets/src/mage/cards/s/SpringjackPasture.java @@ -16,7 +16,7 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; import mage.constants.Zone; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.common.FilterControlledPermanent; import mage.game.permanent.token.GoatToken; import java.util.UUID; @@ -26,11 +26,7 @@ import java.util.UUID; */ public final class SpringjackPasture extends CardImpl { - private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("Goats"); - - static { - filter.add(SubType.GOAT.getPredicate()); - } + private static final FilterControlledPermanent filter = new FilterControlledPermanent(SubType.GOAT, "Goats"); public SpringjackPasture(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.LAND}, ""); diff --git a/Mage.Sets/src/mage/cards/s/StampedingHorncrest.java b/Mage.Sets/src/mage/cards/s/StampedingHorncrest.java index 158c169ac96..80b0a0c3e62 100644 --- a/Mage.Sets/src/mage/cards/s/StampedingHorncrest.java +++ b/Mage.Sets/src/mage/cards/s/StampedingHorncrest.java @@ -14,7 +14,7 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; import mage.constants.Zone; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.common.FilterControlledPermanent; import mage.filter.predicate.mageobject.AnotherPredicate; /** @@ -23,7 +23,7 @@ import mage.filter.predicate.mageobject.AnotherPredicate; */ public final class StampedingHorncrest extends CardImpl { - private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("another Dinosaur"); + private static final FilterControlledPermanent filter = new FilterControlledPermanent("another Dinosaur"); static { filter.add(AnotherPredicate.instance); diff --git a/Mage.Sets/src/mage/cards/s/StensiaBanquet.java b/Mage.Sets/src/mage/cards/s/StensiaBanquet.java index 85de9d43797..4b59c00f0e3 100644 --- a/Mage.Sets/src/mage/cards/s/StensiaBanquet.java +++ b/Mage.Sets/src/mage/cards/s/StensiaBanquet.java @@ -1,4 +1,3 @@ - package mage.cards.s; import java.util.UUID; @@ -10,7 +9,7 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.common.FilterControlledPermanent; import mage.target.common.TargetOpponentOrPlaneswalker; /** @@ -19,11 +18,7 @@ import mage.target.common.TargetOpponentOrPlaneswalker; */ public final class StensiaBanquet extends CardImpl { - private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("Vampires you control"); - - static { - filter.add(SubType.VAMPIRE.getPredicate()); - } + private static final FilterControlledPermanent filter = new FilterControlledPermanent(SubType.VAMPIRE, "Vampires you control"); public StensiaBanquet(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{2}{R}"); diff --git a/Mage.Sets/src/mage/cards/s/StinkdrinkerBandit.java b/Mage.Sets/src/mage/cards/s/StinkdrinkerBandit.java index 1a213fca9f0..62e8b552c20 100644 --- a/Mage.Sets/src/mage/cards/s/StinkdrinkerBandit.java +++ b/Mage.Sets/src/mage/cards/s/StinkdrinkerBandit.java @@ -10,7 +10,6 @@ import mage.constants.CardType; import mage.constants.Duration; import mage.constants.SubType; import mage.constants.Zone; -import mage.filter.common.FilterControlledCreaturePermanent; import mage.game.Game; import mage.game.events.GameEvent; import mage.game.events.GameEvent.EventType; @@ -24,12 +23,6 @@ import java.util.UUID; */ public final class StinkdrinkerBandit extends CardImpl { - private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("Rogue"); - - static { - filter.add(SubType.ROGUE.getPredicate()); - } - public StinkdrinkerBandit(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{B}"); this.subtype.add(SubType.GOBLIN); diff --git a/Mage.Sets/src/mage/cards/s/StoicAngel.java b/Mage.Sets/src/mage/cards/s/StoicAngel.java index 6d9d8df0a5a..8f07538efa1 100644 --- a/Mage.Sets/src/mage/cards/s/StoicAngel.java +++ b/Mage.Sets/src/mage/cards/s/StoicAngel.java @@ -1,4 +1,3 @@ - package mage.cards.s; import java.util.UUID; @@ -14,8 +13,7 @@ import mage.constants.CardType; import mage.constants.SubType; import mage.constants.Duration; import mage.constants.Zone; -import mage.filter.common.FilterControlledCreaturePermanent; -import mage.filter.common.FilterControlledPermanent; +import mage.filter.StaticFilters; import mage.game.Game; import mage.players.Player; @@ -52,10 +50,8 @@ public final class StoicAngel extends CardImpl { class StoicAngelEffect extends RestrictionUntapNotMoreThanEffect { - private static final FilterControlledPermanent filter = new FilterControlledCreaturePermanent(); - - public StoicAngelEffect() { - super(Duration.WhileOnBattlefield, 1, filter); + StoicAngelEffect() { + super(Duration.WhileOnBattlefield, 1, StaticFilters.FILTER_CONTROLLED_CREATURE); staticText = "Players can't untap more than one creature during their untap steps"; } diff --git a/Mage.Sets/src/mage/cards/s/Stonecloaker.java b/Mage.Sets/src/mage/cards/s/Stonecloaker.java index e6adafafbb6..97f46386645 100644 --- a/Mage.Sets/src/mage/cards/s/Stonecloaker.java +++ b/Mage.Sets/src/mage/cards/s/Stonecloaker.java @@ -1,4 +1,3 @@ - package mage.cards.s; import java.util.UUID; @@ -13,7 +12,7 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.StaticFilters; import mage.target.common.TargetCardInGraveyard; /** @@ -34,7 +33,7 @@ public final class Stonecloaker extends CardImpl { // Flying this.addAbility(FlyingAbility.getInstance()); // When Stonecloaker enters the battlefield, return a creature you control to its owner's hand. - Ability ability = new EntersBattlefieldTriggeredAbility(new ReturnToHandChosenControlledPermanentEffect(new FilterControlledCreaturePermanent()), false); + Ability ability = new EntersBattlefieldTriggeredAbility(new ReturnToHandChosenControlledPermanentEffect(StaticFilters.FILTER_CONTROLLED_CREATURE), false); this.addAbility(ability); // When Stonecloaker enters the battlefield, exile target card from a graveyard. diff --git a/Mage.Sets/src/mage/cards/s/StoneforgeAcolyte.java b/Mage.Sets/src/mage/cards/s/StoneforgeAcolyte.java index 4077566f2b6..bea6e937265 100644 --- a/Mage.Sets/src/mage/cards/s/StoneforgeAcolyte.java +++ b/Mage.Sets/src/mage/cards/s/StoneforgeAcolyte.java @@ -1,23 +1,16 @@ - package mage.cards.s; -import java.util.UUID; import mage.MageInt; -import mage.abilities.Ability; -import mage.abilities.common.SimpleActivatedAbility; -import mage.abilities.costs.common.TapSourceCost; -import mage.abilities.costs.common.TapTargetCost; +import mage.abilities.abilityword.CohortAbility; import mage.abilities.effects.common.LookLibraryAndPickControllerEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; -import mage.constants.AbilityWord; import mage.constants.CardType; import mage.constants.PutCards; import mage.constants.SubType; import mage.filter.FilterCard; -import mage.filter.common.FilterControlledPermanent; -import mage.filter.predicate.permanent.TappedPredicate; -import mage.target.common.TargetControlledPermanent; + +import java.util.UUID; /** * @@ -25,12 +18,9 @@ import mage.target.common.TargetControlledPermanent; */ public final class StoneforgeAcolyte extends CardImpl { - private static final FilterControlledPermanent filterAlly = new FilterControlledPermanent("an untapped Ally you control"); private static final FilterCard filterEquipment = new FilterCard("an Equipment card"); static { - filterAlly.add(SubType.ALLY.getPredicate()); - filterAlly.add(TappedPredicate.UNTAPPED); filterEquipment.add(SubType.EQUIPMENT.getPredicate()); } @@ -44,12 +34,9 @@ public final class StoneforgeAcolyte extends CardImpl { // Cohort — {T}, Tap an untapped Ally you control: Look at the top four cards of your library. // You may reveal an Equipment card from among them and put it into your hand. Put the rest on the bottom of your library in any order. - Ability ability = new SimpleActivatedAbility( - new LookLibraryAndPickControllerEffect(4, 1, filterEquipment, PutCards.HAND, PutCards.BOTTOM_ANY), - new TapSourceCost()); - ability.addCost(new TapTargetCost(new TargetControlledPermanent(filterAlly))); - ability.setAbilityWord(AbilityWord.COHORT); - this.addAbility(ability); + this.addAbility(new CohortAbility(new LookLibraryAndPickControllerEffect( + 4, 1, filterEquipment, PutCards.HAND, PutCards.BOTTOM_ANY + ))); } private StoneforgeAcolyte(final StoneforgeAcolyte card) { diff --git a/Mage.Sets/src/mage/cards/s/StormSculptor.java b/Mage.Sets/src/mage/cards/s/StormSculptor.java index 70a180b3249..66eb5be3b27 100644 --- a/Mage.Sets/src/mage/cards/s/StormSculptor.java +++ b/Mage.Sets/src/mage/cards/s/StormSculptor.java @@ -1,4 +1,3 @@ - package mage.cards.s; import java.util.UUID; @@ -10,7 +9,7 @@ import mage.constants.SubType; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.StaticFilters; /** * @@ -30,7 +29,7 @@ public final class StormSculptor extends CardImpl { this.addAbility(new CantBeBlockedSourceAbility()); // When Storm Sculptor enters the battlefield, return a creature you control to its owner's hand. - this.addAbility(new EntersBattlefieldTriggeredAbility(new ReturnToHandChosenControlledPermanentEffect(new FilterControlledCreaturePermanent()))); + this.addAbility(new EntersBattlefieldTriggeredAbility(new ReturnToHandChosenControlledPermanentEffect(StaticFilters.FILTER_CONTROLLED_CREATURE))); } private StormSculptor(final StormSculptor card) { diff --git a/Mage.Sets/src/mage/cards/s/StrengthOfThePack.java b/Mage.Sets/src/mage/cards/s/StrengthOfThePack.java index a47c7ba6c1f..6dd049b5d83 100644 --- a/Mage.Sets/src/mage/cards/s/StrengthOfThePack.java +++ b/Mage.Sets/src/mage/cards/s/StrengthOfThePack.java @@ -1,4 +1,3 @@ - package mage.cards.s; import java.util.UUID; @@ -7,7 +6,7 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.counters.CounterType; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.StaticFilters; /** * @@ -19,7 +18,7 @@ public final class StrengthOfThePack extends CardImpl { super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{4}{G}{G}"); // Put two +1/+1 counters on each creature you control. - this.getSpellAbility().addEffect(new AddCountersAllEffect(CounterType.P1P1.createInstance(2), new FilterControlledCreaturePermanent())); + this.getSpellAbility().addEffect(new AddCountersAllEffect(CounterType.P1P1.createInstance(2), StaticFilters.FILTER_CONTROLLED_CREATURE)); } private StrengthOfThePack(final StrengthOfThePack card) { @@ -30,4 +29,4 @@ public final class StrengthOfThePack extends CardImpl { public StrengthOfThePack copy() { return new StrengthOfThePack(this); } -} \ No newline at end of file +} diff --git a/Mage.Sets/src/mage/cards/s/SunCrestedPterodon.java b/Mage.Sets/src/mage/cards/s/SunCrestedPterodon.java index 6b485352234..1da9c7472ba 100644 --- a/Mage.Sets/src/mage/cards/s/SunCrestedPterodon.java +++ b/Mage.Sets/src/mage/cards/s/SunCrestedPterodon.java @@ -1,4 +1,3 @@ - package mage.cards.s; import java.util.UUID; @@ -18,7 +17,7 @@ import mage.constants.CardType; import mage.constants.Duration; import mage.constants.SubType; import mage.constants.Zone; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.common.FilterControlledPermanent; import mage.filter.predicate.mageobject.AnotherPredicate; /** @@ -26,7 +25,7 @@ import mage.filter.predicate.mageobject.AnotherPredicate; */ public final class SunCrestedPterodon extends CardImpl { - private static final FilterControlledCreaturePermanent filterAnotherDino = new FilterControlledCreaturePermanent(); + private static final FilterControlledPermanent filterAnotherDino = new FilterControlledPermanent(); static { filterAnotherDino.add(AnotherPredicate.instance); filterAnotherDino.add(SubType.DINOSAUR.getPredicate()); @@ -60,4 +59,4 @@ public final class SunCrestedPterodon extends CardImpl { public SunCrestedPterodon copy() { return new SunCrestedPterodon(this); } -} \ No newline at end of file +} diff --git a/Mage.Sets/src/mage/cards/s/SunkenHope.java b/Mage.Sets/src/mage/cards/s/SunkenHope.java index afff233a8bc..d0b88ed6ed0 100644 --- a/Mage.Sets/src/mage/cards/s/SunkenHope.java +++ b/Mage.Sets/src/mage/cards/s/SunkenHope.java @@ -10,12 +10,11 @@ import mage.constants.CardType; import mage.constants.Outcome; import mage.constants.TargetController; import mage.constants.Zone; -import mage.filter.common.FilterControlledCreaturePermanent; import mage.game.Game; import mage.game.permanent.Permanent; import mage.players.Player; import mage.target.Target; -import mage.target.common.TargetControlledPermanent; +import mage.target.common.TargetControlledCreaturePermanent; /** * @@ -65,7 +64,7 @@ class SunkenHopeReturnToHandEffect extends OneShotEffect { return false; } - Target target = new TargetControlledPermanent(1, 1, new FilterControlledCreaturePermanent(), true); + Target target = new TargetControlledCreaturePermanent().withNotTarget(true); if (target.canChoose(player.getId(), source, game)) { while (player.canRespond() && !target.isChosen() && target.canChoose(player.getId(), source, game)) { diff --git a/Mage.Sets/src/mage/cards/s/SwarmOfRats.java b/Mage.Sets/src/mage/cards/s/SwarmOfRats.java index c50b65612f6..0e79c67a5e0 100644 --- a/Mage.Sets/src/mage/cards/s/SwarmOfRats.java +++ b/Mage.Sets/src/mage/cards/s/SwarmOfRats.java @@ -1,4 +1,3 @@ - package mage.cards.s; import java.util.UUID; @@ -11,7 +10,7 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; import mage.constants.Zone; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.common.FilterControlledPermanent; /** * @@ -19,11 +18,7 @@ import mage.filter.common.FilterControlledCreaturePermanent; */ public final class SwarmOfRats extends CardImpl { - private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("Rats you control"); - - static{ - filter.add(SubType.RAT.getPredicate()); - } + private static final FilterControlledPermanent filter = new FilterControlledPermanent(SubType.RAT, "Rats you control"); public SwarmOfRats(UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{B}"); diff --git a/Mage.Sets/src/mage/cards/s/SyggRiverGuide.java b/Mage.Sets/src/mage/cards/s/SyggRiverGuide.java index 697f502b183..cf3651929ec 100644 --- a/Mage.Sets/src/mage/cards/s/SyggRiverGuide.java +++ b/Mage.Sets/src/mage/cards/s/SyggRiverGuide.java @@ -1,4 +1,3 @@ - package mage.cards.s; import java.util.UUID; @@ -11,9 +10,8 @@ import mage.abilities.keyword.IslandwalkAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.*; -import mage.filter.common.FilterControlledCreaturePermanent; -import mage.target.Target; -import mage.target.common.TargetControlledCreaturePermanent; +import mage.filter.common.FilterControlledPermanent; +import mage.target.common.TargetControlledPermanent; /** * @@ -21,11 +19,7 @@ import mage.target.common.TargetControlledCreaturePermanent; */ public final class SyggRiverGuide extends CardImpl { - private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("Merfolk you control"); - - static { - filter.add(SubType.MERFOLK.getPredicate()); - } + private static final FilterControlledPermanent filter = new FilterControlledPermanent(SubType.MERFOLK, "Merfolk you control"); public SyggRiverGuide(UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{W}{U}"); @@ -40,8 +34,7 @@ public final class SyggRiverGuide extends CardImpl { this.addAbility(new IslandwalkAbility()); // {1}{W}: Target Merfolk you control gains protection from the color of your choice until end of turn. Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new GainProtectionFromColorTargetEffect(Duration.EndOfTurn), new ManaCostsImpl<>("{1}{W}")); - Target target = new TargetControlledCreaturePermanent(1,1,filter, false); - ability.addTarget(target); + ability.addTarget(new TargetControlledPermanent(filter)); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/t/TakenoSamuraiGeneral.java b/Mage.Sets/src/mage/cards/t/TakenoSamuraiGeneral.java index 9aadee1ce13..bec07c36b24 100644 --- a/Mage.Sets/src/mage/cards/t/TakenoSamuraiGeneral.java +++ b/Mage.Sets/src/mage/cards/t/TakenoSamuraiGeneral.java @@ -1,5 +1,3 @@ - - package mage.cards.t; import java.util.Iterator; @@ -47,13 +45,14 @@ public final class TakenoSamuraiGeneral extends CardImpl { } class TakenoSamuraiGeneralEffect extends ContinuousEffectImpl { + private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent(); static { filter.add(SubType.SAMURAI.getPredicate()); } - public TakenoSamuraiGeneralEffect() { + TakenoSamuraiGeneralEffect() { super(Duration.WhileOnBattlefield, Layer.PTChangingEffects_7, SubLayer.ModifyPT_7c, Outcome.BoostCreature); staticText = "Each other Samurai creature you control gets +1/+1 for each point of bushido it has"; } diff --git a/Mage.Sets/src/mage/cards/t/TarPitcher.java b/Mage.Sets/src/mage/cards/t/TarPitcher.java index d48bf240c71..c2404286e2a 100644 --- a/Mage.Sets/src/mage/cards/t/TarPitcher.java +++ b/Mage.Sets/src/mage/cards/t/TarPitcher.java @@ -1,4 +1,3 @@ - package mage.cards.t; import java.util.UUID; @@ -13,8 +12,7 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; import mage.constants.Zone; -import mage.filter.common.FilterControlledCreaturePermanent; -import mage.target.common.TargetControlledCreaturePermanent; +import mage.filter.common.FilterControlledPermanent; import mage.target.common.TargetAnyTarget; /** @@ -23,11 +21,7 @@ import mage.target.common.TargetAnyTarget; */ public final class TarPitcher extends CardImpl { - private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("Goblin"); - - static { - filter.add(SubType.GOBLIN.getPredicate()); - } + private static final FilterControlledPermanent filter = new FilterControlledPermanent(SubType.GOBLIN, "Goblin"); public TarPitcher(UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{R}"); diff --git a/Mage.Sets/src/mage/cards/t/TasteOfDeath.java b/Mage.Sets/src/mage/cards/t/TasteOfDeath.java index 21cb865cc0f..001c7214a83 100644 --- a/Mage.Sets/src/mage/cards/t/TasteOfDeath.java +++ b/Mage.Sets/src/mage/cards/t/TasteOfDeath.java @@ -5,8 +5,7 @@ import mage.abilities.effects.common.SacrificeAllEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.filter.common.FilterControlledCreaturePermanent; -import mage.filter.common.FilterControlledPermanent; +import mage.filter.StaticFilters; import mage.game.permanent.token.FoodToken; import java.util.UUID; @@ -16,13 +15,11 @@ import java.util.UUID; */ public final class TasteOfDeath extends CardImpl { - private static final FilterControlledPermanent filter = new FilterControlledCreaturePermanent("creatures"); - public TasteOfDeath(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{4}{B}{B}"); // Each player sacrifices three creatures. You create three Food tokens. - this.getSpellAbility().addEffect(new SacrificeAllEffect(3, filter)); + this.getSpellAbility().addEffect(new SacrificeAllEffect(3, StaticFilters.FILTER_PERMANENT_CREATURES)); this.getSpellAbility().addEffect(new CreateTokenEffect(new FoodToken(), 3).concatBy("You")); } diff --git a/Mage.Sets/src/mage/cards/t/Tenacity.java b/Mage.Sets/src/mage/cards/t/Tenacity.java index 13cd203e867..cf517daa8e3 100644 --- a/Mage.Sets/src/mage/cards/t/Tenacity.java +++ b/Mage.Sets/src/mage/cards/t/Tenacity.java @@ -1,4 +1,3 @@ - package mage.cards.t; import java.util.UUID; @@ -12,7 +11,6 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Duration; import mage.filter.StaticFilters; -import mage.filter.common.FilterControlledCreaturePermanent; /** * @@ -27,7 +25,7 @@ public final class Tenacity extends CardImpl { Effect boost = new BoostControlledEffect(1, 1, Duration.EndOfTurn); boost.setText("Creatures you control get +1/+1"); this.getSpellAbility().addEffect(boost); - this.getSpellAbility().addEffect(new GainAbilityAllEffect(LifelinkAbility.getInstance(), Duration.EndOfTurn, new FilterControlledCreaturePermanent(), " and gain lifelink until end of turn")); + this.getSpellAbility().addEffect(new GainAbilityAllEffect(LifelinkAbility.getInstance(), Duration.EndOfTurn, StaticFilters.FILTER_CONTROLLED_CREATURES, " and gain lifelink until end of turn")); this.getSpellAbility().addEffect(new UntapAllControllerEffect(StaticFilters.FILTER_PERMANENT_CREATURE, "Untap those creatures")); } diff --git a/Mage.Sets/src/mage/cards/t/ThallidDevourer.java b/Mage.Sets/src/mage/cards/t/ThallidDevourer.java index 0f727aa27b4..74c848cfb7d 100644 --- a/Mage.Sets/src/mage/cards/t/ThallidDevourer.java +++ b/Mage.Sets/src/mage/cards/t/ThallidDevourer.java @@ -14,9 +14,8 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.*; import mage.counters.CounterType; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.common.FilterControlledPermanent; import mage.game.permanent.token.SaprolingToken; -import mage.target.common.TargetControlledCreaturePermanent; /** * @@ -24,10 +23,7 @@ import mage.target.common.TargetControlledCreaturePermanent; */ public final class ThallidDevourer extends CardImpl { - private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("Saproling"); - static { - filter.add(SubType.SAPROLING.getPredicate()); - } + private static final FilterControlledPermanent filter = new FilterControlledPermanent(SubType.SAPROLING, "Saproling"); public ThallidDevourer(UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{G}{G}"); diff --git a/Mage.Sets/src/mage/cards/t/ThallidGerminator.java b/Mage.Sets/src/mage/cards/t/ThallidGerminator.java index 6e19f3d1a5f..d4cdcd42b43 100644 --- a/Mage.Sets/src/mage/cards/t/ThallidGerminator.java +++ b/Mage.Sets/src/mage/cards/t/ThallidGerminator.java @@ -15,9 +15,8 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.*; import mage.counters.CounterType; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.common.FilterControlledPermanent; import mage.game.permanent.token.SaprolingToken; -import mage.target.common.TargetControlledCreaturePermanent; import mage.target.common.TargetCreaturePermanent; /** @@ -26,10 +25,7 @@ import mage.target.common.TargetCreaturePermanent; */ public final class ThallidGerminator extends CardImpl { - private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("Saproling"); - static { - filter.add(SubType.SAPROLING.getPredicate()); - } + private static final FilterControlledPermanent filter = new FilterControlledPermanent(SubType.SAPROLING, "Saproling"); public ThallidGerminator(UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{G}"); diff --git a/Mage.Sets/src/mage/cards/t/TheBattleOfEndor.java b/Mage.Sets/src/mage/cards/t/TheBattleOfEndor.java index b37834b4724..a297e52f374 100644 --- a/Mage.Sets/src/mage/cards/t/TheBattleOfEndor.java +++ b/Mage.Sets/src/mage/cards/t/TheBattleOfEndor.java @@ -1,4 +1,3 @@ - package mage.cards.t; import java.util.UUID; @@ -16,6 +15,7 @@ import mage.constants.CardType; import mage.constants.Duration; import mage.constants.Outcome; import mage.counters.CounterType; +import mage.filter.StaticFilters; import mage.filter.common.FilterControlledCreaturePermanent; import mage.game.Game; import mage.game.permanent.Permanent; @@ -38,10 +38,10 @@ public final class TheBattleOfEndor extends CardImpl { this.getSpellAbility().addEffect(new TheBattleOfEndorEffect()); // Creatures you control gain trample and haste until end of turn. - Effect effect = new GainAbilityAllEffect(TrampleAbility.getInstance(), Duration.EndOfTurn, new FilterControlledCreaturePermanent()); + Effect effect = new GainAbilityAllEffect(TrampleAbility.getInstance(), Duration.EndOfTurn, StaticFilters.FILTER_CONTROLLED_CREATURES); effect.setText("Creatures you control gain trample"); this.getSpellAbility().addEffect(effect); - effect = new GainAbilityAllEffect(HasteAbility.getInstance(), Duration.EndOfTurn, new FilterControlledCreaturePermanent()); + effect = new GainAbilityAllEffect(HasteAbility.getInstance(), Duration.EndOfTurn, StaticFilters.FILTER_CONTROLLED_CREATURES); effect.setText("and haste until end of turn"); this.getSpellAbility().addEffect(effect); diff --git a/Mage.Sets/src/mage/cards/t/TheScarabGod.java b/Mage.Sets/src/mage/cards/t/TheScarabGod.java index 5f86b7d719a..424d2b2dd6c 100644 --- a/Mage.Sets/src/mage/cards/t/TheScarabGod.java +++ b/Mage.Sets/src/mage/cards/t/TheScarabGod.java @@ -1,7 +1,5 @@ - package mage.cards.t; -import java.util.UUID; import mage.MageInt; import mage.ObjectColor; import mage.abilities.Ability; @@ -22,27 +20,23 @@ import mage.abilities.hint.ValueHint; import mage.cards.Card; import mage.cards.CardImpl; import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.Outcome; -import mage.constants.SubType; -import mage.constants.SuperType; -import mage.constants.TargetController; -import mage.constants.Zone; +import mage.constants.*; import mage.filter.StaticFilters; -import mage.filter.common.FilterControlledCreaturePermanent; -import mage.filter.common.FilterCreatureCard; +import mage.filter.common.FilterControlledPermanent; import mage.game.Game; import mage.players.Player; import mage.target.common.TargetCardInGraveyard; import mage.target.targetpointer.FixedTarget; +import java.util.UUID; + /** * * @author spjspj */ public final class TheScarabGod extends CardImpl { - private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent(SubType.ZOMBIE, "Zombies you control"); + private static final FilterControlledPermanent filter = new FilterControlledPermanent(SubType.ZOMBIE, "Zombies you control"); private static final DynamicValue xValue = new PermanentsOnBattlefieldCount(filter, null); private static final Hint hint = new ValueHint( "Number of Zombies you control", xValue diff --git a/Mage.Sets/src/mage/cards/t/ThopterSquadron.java b/Mage.Sets/src/mage/cards/t/ThopterSquadron.java index 1a5934274b9..5aa1af6ac9c 100644 --- a/Mage.Sets/src/mage/cards/t/ThopterSquadron.java +++ b/Mage.Sets/src/mage/cards/t/ThopterSquadron.java @@ -19,10 +19,9 @@ import mage.constants.CardType; import mage.constants.SubType; import mage.constants.Zone; import mage.counters.CounterType; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.common.FilterControlledPermanent; import mage.filter.predicate.mageobject.AnotherPredicate; import mage.game.permanent.token.ThopterColorlessToken; -import mage.target.common.TargetControlledPermanent; /** * @@ -30,7 +29,7 @@ import mage.target.common.TargetControlledPermanent; */ public final class ThopterSquadron extends CardImpl { - private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("another Thopter"); + private static final FilterControlledPermanent filter = new FilterControlledPermanent("another Thopter"); static { filter.add(AnotherPredicate.instance); diff --git a/Mage.Sets/src/mage/cards/t/ThrashOfRaptors.java b/Mage.Sets/src/mage/cards/t/ThrashOfRaptors.java index ae96a235cf3..7f17f17e714 100644 --- a/Mage.Sets/src/mage/cards/t/ThrashOfRaptors.java +++ b/Mage.Sets/src/mage/cards/t/ThrashOfRaptors.java @@ -16,7 +16,7 @@ import mage.constants.CardType; import mage.constants.Duration; import mage.constants.SubType; import mage.constants.Zone; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.common.FilterControlledPermanent; import mage.filter.predicate.mageobject.AnotherPredicate; /** @@ -25,7 +25,7 @@ import mage.filter.predicate.mageobject.AnotherPredicate; */ public final class ThrashOfRaptors extends CardImpl { - private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("another Dinosaur"); + private static final FilterControlledPermanent filter = new FilterControlledPermanent("another Dinosaur"); static { filter.add(SubType.DINOSAUR.getPredicate()); diff --git a/Mage.Sets/src/mage/cards/t/ThunderfootBaloth.java b/Mage.Sets/src/mage/cards/t/ThunderfootBaloth.java index 0afc08566ff..e14ba8b37cd 100644 --- a/Mage.Sets/src/mage/cards/t/ThunderfootBaloth.java +++ b/Mage.Sets/src/mage/cards/t/ThunderfootBaloth.java @@ -14,7 +14,7 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; import mage.constants.Duration; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.StaticFilters; /** * @@ -37,7 +37,7 @@ public final class ThunderfootBaloth extends CardImpl { Effect effect = new BoostControlledEffect(2, 2, Duration.WhileOnBattlefield, true); effect.setText("and other creatures you control get +2/+2"); effects.add(effect); - effect = new GainAbilityControlledEffect(TrampleAbility.getInstance(), Duration.WhileOnBattlefield, new FilterControlledCreaturePermanent(), true); + effect = new GainAbilityControlledEffect(TrampleAbility.getInstance(), Duration.WhileOnBattlefield, StaticFilters.FILTER_CONTROLLED_CREATURES, true); effect.setText("and have trample"); effects.add(effect); this.addAbility(new LieutenantAbility(effects)); diff --git a/Mage.Sets/src/mage/cards/t/ToArms.java b/Mage.Sets/src/mage/cards/t/ToArms.java index c7d6ec43556..5a7d7e996c0 100644 --- a/Mage.Sets/src/mage/cards/t/ToArms.java +++ b/Mage.Sets/src/mage/cards/t/ToArms.java @@ -8,7 +8,7 @@ import mage.abilities.effects.common.UntapAllControllerEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.StaticFilters; /** * @@ -23,7 +23,7 @@ public final class ToArms extends CardImpl { // Untap all creatures you control. - Effect effect = new UntapAllControllerEffect(new FilterControlledCreaturePermanent(), rule); + Effect effect = new UntapAllControllerEffect(StaticFilters.FILTER_CONTROLLED_CREATURES, rule); this.getSpellAbility().addEffect(effect); // Draw a card. this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1).concatBy("
")); diff --git a/Mage.Sets/src/mage/cards/t/TourachsGate.java b/Mage.Sets/src/mage/cards/t/TourachsGate.java index 1978b0f5519..25230a8a1e6 100644 --- a/Mage.Sets/src/mage/cards/t/TourachsGate.java +++ b/Mage.Sets/src/mage/cards/t/TourachsGate.java @@ -1,4 +1,3 @@ - package mage.cards.t; import java.util.UUID; @@ -26,14 +25,12 @@ import mage.constants.Zone; import mage.counters.CounterType; import mage.filter.FilterPermanent; import mage.filter.common.FilterControlledPermanent; -import mage.filter.common.FilterControlledCreaturePermanent; import mage.filter.common.FilterCreaturePermanent; import mage.filter.predicate.permanent.AttackingPredicate; import mage.filter.predicate.permanent.TappedPredicate; import mage.game.Game; import mage.game.permanent.Permanent; import mage.target.TargetPermanent; -import mage.target.common.TargetControlledCreaturePermanent; import mage.target.common.TargetControlledPermanent; /** @@ -58,10 +55,7 @@ public final class TourachsGate extends CardImpl { filterAttackingCreatures.add(TargetController.YOU.getControllerPredicate()); } - private static final FilterControlledCreaturePermanent filterThrull = new FilterControlledCreaturePermanent("a Thrull"); - static { - filterThrull.add(SubType.THRULL.getPredicate()); - } + private static final FilterControlledPermanent filterThrull = new FilterControlledPermanent(SubType.THRULL, "a Thrull"); public TourachsGate(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{B}{B}"); diff --git a/Mage.Sets/src/mage/cards/t/TrailOfMystery.java b/Mage.Sets/src/mage/cards/t/TrailOfMystery.java index 84a751c47b2..2aaa9a498a7 100644 --- a/Mage.Sets/src/mage/cards/t/TrailOfMystery.java +++ b/Mage.Sets/src/mage/cards/t/TrailOfMystery.java @@ -1,4 +1,3 @@ - package mage.cards.t; import mage.abilities.common.EntersBattlefieldControlledTriggeredAbility; @@ -52,7 +51,7 @@ public final class TrailOfMystery extends CardImpl { class TrailOfMysteryTriggeredAbility extends TurnedFaceUpAllTriggeredAbility { - public TrailOfMysteryTriggeredAbility() { + TrailOfMysteryTriggeredAbility() { super(new BoostTargetEffect(2, 2, Duration.EndOfTurn), new FilterControlledCreaturePermanent(), true); } diff --git a/Mage.Sets/src/mage/cards/u/UrtetRemnantOfMemnarch.java b/Mage.Sets/src/mage/cards/u/UrtetRemnantOfMemnarch.java index 7f27c3958ed..ae8c8df9f6a 100644 --- a/Mage.Sets/src/mage/cards/u/UrtetRemnantOfMemnarch.java +++ b/Mage.Sets/src/mage/cards/u/UrtetRemnantOfMemnarch.java @@ -17,7 +17,7 @@ import mage.cards.CardSetInfo; import mage.constants.*; import mage.counters.CounterType; import mage.filter.FilterSpell; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.common.FilterControlledPermanent; import mage.game.permanent.token.MyrToken; import java.util.UUID; @@ -28,7 +28,7 @@ import java.util.UUID; public final class UrtetRemnantOfMemnarch extends CardImpl { private static final FilterSpell filter = new FilterSpell("a Myr spell"); - private static final FilterControlledCreaturePermanent filter2 = new FilterControlledCreaturePermanent(SubType.MYR); + private static final FilterControlledPermanent filter2 = new FilterControlledPermanent(SubType.MYR); static { filter.add(SubType.MYR.getPredicate()); diff --git a/Mage.Sets/src/mage/cards/u/UtopiaMycon.java b/Mage.Sets/src/mage/cards/u/UtopiaMycon.java index 57e5e5efacb..f5a7c3d2184 100644 --- a/Mage.Sets/src/mage/cards/u/UtopiaMycon.java +++ b/Mage.Sets/src/mage/cards/u/UtopiaMycon.java @@ -16,9 +16,8 @@ import mage.constants.SubType; import mage.constants.TargetController; import mage.constants.Zone; import mage.counters.CounterType; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.common.FilterControlledPermanent; import mage.game.permanent.token.SaprolingToken; -import mage.target.common.TargetControlledCreaturePermanent; import java.util.UUID; import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount; @@ -28,11 +27,7 @@ import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount; */ public final class UtopiaMycon extends CardImpl { - private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("Saproling"); - - static { - filter.add(SubType.SAPROLING.getPredicate()); - } + private static final FilterControlledPermanent filter = new FilterControlledPermanent(SubType.SAPROLING, "Saproling"); public UtopiaMycon(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{G}"); diff --git a/Mage.Sets/src/mage/cards/v/VillageReavers.java b/Mage.Sets/src/mage/cards/v/VillageReavers.java index ccdf2918732..632bcfddb62 100644 --- a/Mage.Sets/src/mage/cards/v/VillageReavers.java +++ b/Mage.Sets/src/mage/cards/v/VillageReavers.java @@ -11,7 +11,7 @@ import mage.constants.CardType; import mage.constants.Duration; import mage.constants.SubType; import mage.filter.FilterPermanent; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.common.FilterControlledPermanent; import mage.filter.predicate.Predicates; import java.util.UUID; @@ -21,7 +21,7 @@ import java.util.UUID; */ public final class VillageReavers extends CardImpl { - private static final FilterPermanent filter = new FilterControlledCreaturePermanent("Wolves and Werewolves"); + private static final FilterPermanent filter = new FilterControlledPermanent("Wolves and Werewolves"); static { filter.add(Predicates.or( diff --git a/Mage.Sets/src/mage/cards/v/VitasporeThallid.java b/Mage.Sets/src/mage/cards/v/VitasporeThallid.java index 2b382dfe69d..829a62c7c47 100644 --- a/Mage.Sets/src/mage/cards/v/VitasporeThallid.java +++ b/Mage.Sets/src/mage/cards/v/VitasporeThallid.java @@ -16,9 +16,8 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.*; import mage.counters.CounterType; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.common.FilterControlledPermanent; import mage.game.permanent.token.SaprolingToken; -import mage.target.common.TargetControlledCreaturePermanent; import mage.target.common.TargetCreaturePermanent; /** @@ -27,10 +26,7 @@ import mage.target.common.TargetCreaturePermanent; */ public final class VitasporeThallid extends CardImpl { - private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("a Saproling"); - static { - filter.add(SubType.SAPROLING.getPredicate()); - } + private static final FilterControlledPermanent filter = new FilterControlledPermanent(SubType.SAPROLING, "Saproling"); public VitasporeThallid(UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{G}"); diff --git a/Mage.Sets/src/mage/cards/v/VodalianWarMachine.java b/Mage.Sets/src/mage/cards/v/VodalianWarMachine.java index f0264399c5f..fe4ab8aad6e 100644 --- a/Mage.Sets/src/mage/cards/v/VodalianWarMachine.java +++ b/Mage.Sets/src/mage/cards/v/VodalianWarMachine.java @@ -1,4 +1,3 @@ - package mage.cards.v; import mage.MageInt; @@ -15,14 +14,14 @@ import mage.abilities.keyword.DefenderAbility; 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.filter.predicate.permanent.TappedPredicate; import mage.game.Game; import mage.game.events.GameEvent; import mage.game.permanent.Permanent; import mage.game.stack.StackAbility; -import mage.target.common.TargetControlledCreaturePermanent; +import mage.target.common.TargetControlledPermanent; import mage.watchers.Watcher; import java.util.*; @@ -32,7 +31,7 @@ import java.util.*; */ public final class VodalianWarMachine extends CardImpl { - private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("untapped Merfolk you control"); + private static final FilterControlledPermanent filter = new FilterControlledPermanent("untapped Merfolk you control"); static { filter.add(TappedPredicate.UNTAPPED); @@ -49,11 +48,11 @@ public final class VodalianWarMachine extends CardImpl { this.addAbility(DefenderAbility.getInstance()); // Tap an untapped Merfolk you control: Vodalian War Machine can attack this turn as though it didn't have defender. - Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new CanAttackAsThoughItDidntHaveDefenderSourceEffect(Duration.EndOfTurn), new TapTargetCost(new TargetControlledCreaturePermanent(1, 1, filter, true))); + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new CanAttackAsThoughItDidntHaveDefenderSourceEffect(Duration.EndOfTurn), new TapTargetCost(new TargetControlledPermanent(1, 1, filter, true))); this.addAbility(ability); // Tap an untapped Merfolk you control: Vodalian War Machine gets +2/+1 until end of turn. - this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostSourceEffect(2, 1, Duration.EndOfTurn), new TapTargetCost(new TargetControlledCreaturePermanent(1, 1, filter, true)))); + this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostSourceEffect(2, 1, Duration.EndOfTurn), new TapTargetCost(new TargetControlledPermanent(1, 1, filter, true)))); // When Vodalian War Machine dies, destroy all Merfolk tapped this turn to pay for its abilities. this.addAbility(new DiesSourceTriggeredAbility(new VodalianWarMachineEffect()), new VodalianWarMachineWatcher()); @@ -71,13 +70,13 @@ public final class VodalianWarMachine extends CardImpl { class VodalianWarMachineEffect extends OneShotEffect { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Merfolk tapped this turn to pay for its abilities"); + private static final FilterPermanent filter = new FilterPermanent("Merfolk tapped this turn to pay for its abilities"); static { filter.add(SubType.MERFOLK.getPredicate()); } - public VodalianWarMachineEffect() { + VodalianWarMachineEffect() { super(Outcome.Detriment); staticText = "destroy all " + filter.getMessage(); } @@ -112,13 +111,13 @@ class VodalianWarMachineEffect extends OneShotEffect { class VodalianWarMachineWatcher extends Watcher { - private Map> tappedMerfolkIds = new HashMap<>(); + private final Map> tappedMerfolkIds = new HashMap<>(); - public VodalianWarMachineWatcher() { + VodalianWarMachineWatcher() { super(WatcherScope.GAME); } - public Set getTappedMerfolkIds(Permanent permanent, Game game) { + Set getTappedMerfolkIds(Permanent permanent, Game game) { return tappedMerfolkIds.get(new MageObjectReference(permanent, game)); } diff --git a/Mage.Sets/src/mage/cards/v/VoidmageProdigy.java b/Mage.Sets/src/mage/cards/v/VoidmageProdigy.java index 8dc6f028a0c..72fa850bba4 100644 --- a/Mage.Sets/src/mage/cards/v/VoidmageProdigy.java +++ b/Mage.Sets/src/mage/cards/v/VoidmageProdigy.java @@ -1,4 +1,3 @@ - package mage.cards.v; import java.util.UUID; @@ -14,10 +13,9 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; import mage.constants.Zone; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.common.FilterControlledPermanent; import mage.target.Target; import mage.target.TargetSpell; -import mage.target.common.TargetControlledCreaturePermanent; /** * @@ -25,11 +23,7 @@ import mage.target.common.TargetControlledCreaturePermanent; */ public final class VoidmageProdigy extends CardImpl { - private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("a Wizard"); - - static { - filter.add(SubType.WIZARD.getPredicate()); - } + private static final FilterControlledPermanent filter = new FilterControlledPermanent(SubType.WIZARD, "a Wizard"); public VoidmageProdigy(UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{U}{U}"); diff --git a/Mage.Sets/src/mage/cards/v/VoraciousVampire.java b/Mage.Sets/src/mage/cards/v/VoraciousVampire.java index d680395895a..30b2e887ba3 100644 --- a/Mage.Sets/src/mage/cards/v/VoraciousVampire.java +++ b/Mage.Sets/src/mage/cards/v/VoraciousVampire.java @@ -1,7 +1,5 @@ - package mage.cards.v; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldTriggeredAbility; @@ -14,8 +12,10 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Duration; import mage.constants.SubType; -import mage.filter.common.FilterControlledCreaturePermanent; -import mage.target.common.TargetControlledCreaturePermanent; +import mage.filter.common.FilterControlledPermanent; +import mage.target.TargetPermanent; + +import java.util.UUID; /** * @@ -23,6 +23,8 @@ import mage.target.common.TargetControlledCreaturePermanent; */ public final class VoraciousVampire extends CardImpl { + private static final FilterControlledPermanent filter = new FilterControlledPermanent(SubType.VAMPIRE, "Vampire you control"); + public VoraciousVampire(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{B}"); @@ -40,7 +42,7 @@ public final class VoraciousVampire extends CardImpl { Effect effect = new GainAbilityTargetEffect(new MenaceAbility(), Duration.EndOfTurn); effect.setText("and gains menace until end of turn."); ability.addEffect(effect); - ability.addTarget(new TargetControlledCreaturePermanent(new FilterControlledCreaturePermanent(SubType.VAMPIRE, "Vampire you control"))); + ability.addTarget(new TargetPermanent(filter)); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/w/WailOfTheNim.java b/Mage.Sets/src/mage/cards/w/WailOfTheNim.java index 9fab248aff3..2e701630794 100644 --- a/Mage.Sets/src/mage/cards/w/WailOfTheNim.java +++ b/Mage.Sets/src/mage/cards/w/WailOfTheNim.java @@ -1,4 +1,3 @@ - package mage.cards.w; import java.util.UUID; @@ -9,7 +8,7 @@ import mage.abilities.keyword.EntwineAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.StaticFilters; /** * @@ -21,7 +20,7 @@ public final class WailOfTheNim extends CardImpl { super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{2}{B}"); // Choose one - Regenerate each creature you control; - this.getSpellAbility().addEffect(new RegenerateAllEffect(new FilterControlledCreaturePermanent())); + this.getSpellAbility().addEffect(new RegenerateAllEffect(StaticFilters.FILTER_CONTROLLED_CREATURE)); // or Wail of the Nim deals 1 damage to each creature and each player. Mode mode = new Mode(new DamageEverythingEffect(1)); diff --git a/Mage.Sets/src/mage/cards/w/WalkerOfSecretWays.java b/Mage.Sets/src/mage/cards/w/WalkerOfSecretWays.java index 8a333832269..64e85962af2 100644 --- a/Mage.Sets/src/mage/cards/w/WalkerOfSecretWays.java +++ b/Mage.Sets/src/mage/cards/w/WalkerOfSecretWays.java @@ -16,10 +16,10 @@ import mage.constants.CardType; import mage.constants.Outcome; import mage.constants.SubType; import mage.constants.Zone; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.common.FilterControlledPermanent; import mage.game.Game; import mage.players.Player; -import mage.target.common.TargetControlledCreaturePermanent; +import mage.target.common.TargetControlledPermanent; import java.util.UUID; @@ -28,11 +28,7 @@ import java.util.UUID; */ public final class WalkerOfSecretWays extends CardImpl { - private static final FilterControlledCreaturePermanent filterCreature = new FilterControlledCreaturePermanent("Ninja you control"); - - static { - filterCreature.add((SubType.NINJA.getPredicate())); - } + private static final FilterControlledPermanent filterCreature = new FilterControlledPermanent(SubType.NINJA, "Ninja you control"); public WalkerOfSecretWays(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{U}"); @@ -50,7 +46,7 @@ public final class WalkerOfSecretWays extends CardImpl { // {1}{U}: Return target Ninja you control to its owner's hand. Activate this ability only during your turn. Ability ability = new ActivateIfConditionActivatedAbility(Zone.BATTLEFIELD, new ReturnToHandTargetEffect(), new ManaCostsImpl<>("{1}{U}"), MyTurnCondition.instance); - ability.addTarget(new TargetControlledCreaturePermanent(1, 1, filterCreature, false)); + ability.addTarget(new TargetControlledPermanent(filterCreature)); ability.addHint(MyTurnHint.instance); this.addAbility(ability); @@ -92,4 +88,4 @@ class WalkerOfSecretWaysEffect extends OneShotEffect { return new WalkerOfSecretWaysEffect(this); } -} \ No newline at end of file +} diff --git a/Mage.Sets/src/mage/cards/w/WhitemaneLion.java b/Mage.Sets/src/mage/cards/w/WhitemaneLion.java index 31e50eafa14..3e112357faa 100644 --- a/Mage.Sets/src/mage/cards/w/WhitemaneLion.java +++ b/Mage.Sets/src/mage/cards/w/WhitemaneLion.java @@ -10,7 +10,7 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.StaticFilters; /** * @@ -28,7 +28,7 @@ public final class WhitemaneLion extends CardImpl { // Flash this.addAbility(FlashAbility.getInstance()); // When Whitemane Lion enters the battlefield, return a creature you control to its owner's hand. - this.addAbility(new EntersBattlefieldTriggeredAbility(new ReturnToHandChosenControlledPermanentEffect(new FilterControlledCreaturePermanent()))); + this.addAbility(new EntersBattlefieldTriggeredAbility(new ReturnToHandChosenControlledPermanentEffect(StaticFilters.FILTER_CONTROLLED_CREATURE))); } diff --git a/Mage.Sets/src/mage/cards/w/WrapInVigor.java b/Mage.Sets/src/mage/cards/w/WrapInVigor.java index 5bc7cbd5778..7d9ad11fe8d 100644 --- a/Mage.Sets/src/mage/cards/w/WrapInVigor.java +++ b/Mage.Sets/src/mage/cards/w/WrapInVigor.java @@ -1,4 +1,3 @@ - package mage.cards.w; import java.util.UUID; @@ -6,7 +5,7 @@ import mage.abilities.effects.common.RegenerateAllEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.StaticFilters; /** * @@ -18,7 +17,7 @@ public final class WrapInVigor extends CardImpl { super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{1}{G}"); // Regenerate each creature you control. - this.getSpellAbility().addEffect(new RegenerateAllEffect(new FilterControlledCreaturePermanent())); + this.getSpellAbility().addEffect(new RegenerateAllEffect(StaticFilters.FILTER_CONTROLLED_CREATURE)); } private WrapInVigor(final WrapInVigor card) { diff --git a/Mage.Sets/src/mage/cards/z/ZadasCommando.java b/Mage.Sets/src/mage/cards/z/ZadasCommando.java index 9b287129bc2..4b0b6183d7f 100644 --- a/Mage.Sets/src/mage/cards/z/ZadasCommando.java +++ b/Mage.Sets/src/mage/cards/z/ZadasCommando.java @@ -1,55 +1,36 @@ - package mage.cards.z; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; -import mage.abilities.common.SimpleActivatedAbility; -import mage.abilities.costs.common.TapSourceCost; -import mage.abilities.costs.common.TapTargetCost; +import mage.abilities.abilityword.CohortAbility; import mage.abilities.effects.common.DamageTargetEffect; import mage.abilities.keyword.FirstStrikeAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; -import mage.constants.AbilityWord; import mage.constants.CardType; import mage.constants.SubType; -import mage.constants.Zone; -import mage.filter.common.FilterControlledPermanent; -import mage.filter.predicate.permanent.TappedPredicate; -import mage.target.common.TargetControlledPermanent; import mage.target.common.TargetOpponentOrPlaneswalker; +import java.util.UUID; + /** * * @author fireshoes */ public final class ZadasCommando extends CardImpl { - private static final FilterControlledPermanent filter = new FilterControlledPermanent("an untapped Ally you control"); - - static { - filter.add(SubType.ALLY.getPredicate()); - filter.add(TappedPredicate.UNTAPPED); - } - public ZadasCommando(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{R}"); this.subtype.add(SubType.GOBLIN, SubType.ARCHER, SubType.ALLY); - //this.subtype.add(SubType.GOBLIN); - //this.subtype.add(SubType.ARCHER); - //this.subtype.add(SubType.ALLY); this.power = new MageInt(2); this.toughness = new MageInt(1); - // First Strike + // First strike this.addAbility(FirstStrikeAbility.getInstance()); // Cohort — {T}, Tap an untapped Ally you control: Zada's Commando deals 1 damage to target opponent. - Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(1), new TapSourceCost()); - ability.addCost(new TapTargetCost(new TargetControlledPermanent(filter))); + Ability ability = new CohortAbility(new DamageTargetEffect(1)); ability.addTarget(new TargetOpponentOrPlaneswalker()); - ability.setAbilityWord(AbilityWord.COHORT); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/z/ZhalfirinLancer.java b/Mage.Sets/src/mage/cards/z/ZhalfirinLancer.java index 2ad4681db46..b78a77b953a 100644 --- a/Mage.Sets/src/mage/cards/z/ZhalfirinLancer.java +++ b/Mage.Sets/src/mage/cards/z/ZhalfirinLancer.java @@ -12,7 +12,7 @@ import mage.constants.CardType; import mage.constants.Duration; import mage.constants.SubType; import mage.filter.FilterPermanent; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.common.FilterControlledPermanent; import mage.filter.predicate.mageobject.AnotherPredicate; import java.util.UUID; @@ -22,7 +22,7 @@ import java.util.UUID; */ public final class ZhalfirinLancer extends CardImpl { - private static final FilterPermanent filter = new FilterControlledCreaturePermanent(SubType.KNIGHT, "another Knight"); + private static final FilterPermanent filter = new FilterControlledPermanent(SubType.KNIGHT, "another Knight"); static { filter.add(AnotherPredicate.instance); diff --git a/Mage.Sets/src/mage/cards/z/ZopandrelHungerDominus.java b/Mage.Sets/src/mage/cards/z/ZopandrelHungerDominus.java index 89b9f26897d..cb161239f8f 100644 --- a/Mage.Sets/src/mage/cards/z/ZopandrelHungerDominus.java +++ b/Mage.Sets/src/mage/cards/z/ZopandrelHungerDominus.java @@ -15,12 +15,11 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.*; import mage.counters.CounterType; +import mage.filter.StaticFilters; import mage.filter.common.FilterControlledCreaturePermanent; import mage.filter.predicate.mageobject.AnotherPredicate; import mage.game.Game; import mage.game.permanent.Permanent; -import mage.target.common.TargetControlledPermanent; -import mage.target.common.TargetSacrifice; import mage.target.targetpointer.FixedTarget; import java.util.UUID; @@ -71,9 +70,7 @@ public final class ZopandrelHungerDominus extends CardImpl { class ZopandrelHungerDominusEffect extends OneShotEffect { - private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent(); - - public ZopandrelHungerDominusEffect() { + ZopandrelHungerDominusEffect() { super(Outcome.BoostCreature); staticText = "double the power and toughness of each creature you control until end of turn"; } @@ -89,7 +86,7 @@ class ZopandrelHungerDominusEffect extends OneShotEffect { @Override public boolean apply(Game game, Ability source) { - for (Permanent permanent : game.getBattlefield().getAllActivePermanents(filter, source.getControllerId(), game)) { + for (Permanent permanent : game.getBattlefield().getAllActivePermanents(StaticFilters.FILTER_CONTROLLED_CREATURE, source.getControllerId(), game)) { ContinuousEffect effect = new BoostTargetEffect(permanent.getPower().getValue(), permanent.getToughness().getValue()); effect.setTargetPointer(new FixedTarget(permanent, game)); game.addEffect(effect, source); diff --git a/Mage.Sets/src/mage/cards/z/ZulaportChainmage.java b/Mage.Sets/src/mage/cards/z/ZulaportChainmage.java index 624f3c75e66..1b2582ac161 100644 --- a/Mage.Sets/src/mage/cards/z/ZulaportChainmage.java +++ b/Mage.Sets/src/mage/cards/z/ZulaportChainmage.java @@ -1,36 +1,23 @@ - package mage.cards.z; -import java.util.UUID; import mage.MageInt; -import mage.abilities.common.SimpleActivatedAbility; -import mage.abilities.costs.common.TapSourceCost; -import mage.abilities.costs.common.TapTargetCost; +import mage.abilities.Ability; +import mage.abilities.abilityword.CohortAbility; import mage.abilities.effects.common.LoseLifeTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; -import mage.constants.AbilityWord; import mage.constants.CardType; import mage.constants.SubType; -import mage.constants.Zone; -import mage.filter.common.FilterControlledCreaturePermanent; -import mage.filter.predicate.permanent.TappedPredicate; -import mage.target.common.TargetControlledCreaturePermanent; import mage.target.common.TargetOpponent; +import java.util.UUID; + /** * * @author LevelX2 */ public final class ZulaportChainmage extends CardImpl { - private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("untapped Ally you control"); - - static { - filter.add(SubType.ALLY.getPredicate()); - filter.add(TappedPredicate.UNTAPPED); - } - public ZulaportChainmage(UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{B}"); this.subtype.add(SubType.HUMAN, SubType.SHAMAN, SubType.ALLY); @@ -38,11 +25,7 @@ public final class ZulaportChainmage extends CardImpl { this.toughness = new MageInt(2); // Cohort — {T}, Tap an untapped Ally you control: Target opponent loses 2 life. - SimpleActivatedAbility ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, - new LoseLifeTargetEffect(2), - new TapSourceCost()); - ability.setAbilityWord(AbilityWord.COHORT); - ability.addCost(new TapTargetCost(new TargetControlledCreaturePermanent(1, 1, filter, false))); + Ability ability = new CohortAbility(new LoseLifeTargetEffect(2)); ability.addTarget(new TargetOpponent()); this.addAbility(ability); } diff --git a/Mage/src/main/java/mage/abilities/abilityword/CohortAbility.java b/Mage/src/main/java/mage/abilities/abilityword/CohortAbility.java new file mode 100644 index 00000000000..d7da3354aef --- /dev/null +++ b/Mage/src/main/java/mage/abilities/abilityword/CohortAbility.java @@ -0,0 +1,40 @@ +package mage.abilities.abilityword; + +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.costs.common.TapTargetCost; +import mage.abilities.effects.Effect; +import mage.constants.AbilityWord; +import mage.constants.SubType; +import mage.constants.Zone; +import mage.filter.common.FilterControlledPermanent; +import mage.filter.predicate.permanent.TappedPredicate; +import mage.target.common.TargetControlledPermanent; + +/** + * @author xenohedron + */ + +public class CohortAbility extends SimpleActivatedAbility { + + private static final FilterControlledPermanent filter = new FilterControlledPermanent(SubType.ALLY, "an untapped Ally you control"); + + static { + filter.add(TappedPredicate.UNTAPPED); + } + + public CohortAbility(Effect effect) { + super(Zone.BATTLEFIELD, effect, new TapSourceCost()); + this.addCost(new TapTargetCost(new TargetControlledPermanent(filter))); + this.setAbilityWord(AbilityWord.COHORT); + } + + protected CohortAbility(final CohortAbility ability) { + super(ability); + } + + @Override + public CohortAbility copy() { + return new CohortAbility(this); + } +} diff --git a/Mage/src/main/java/mage/game/command/emblems/LilianaTheLastHopeEmblem.java b/Mage/src/main/java/mage/game/command/emblems/LilianaTheLastHopeEmblem.java index d181d83719d..b968fee6d4c 100644 --- a/Mage/src/main/java/mage/game/command/emblems/LilianaTheLastHopeEmblem.java +++ b/Mage/src/main/java/mage/game/command/emblems/LilianaTheLastHopeEmblem.java @@ -8,7 +8,7 @@ import mage.abilities.effects.common.CreateTokenEffect; import mage.constants.SubType; import mage.constants.TargetController; import mage.constants.Zone; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.common.FilterControlledPermanent; import mage.game.Game; import mage.game.command.Emblem; import mage.game.permanent.token.ZombieToken; @@ -21,7 +21,7 @@ public final class LilianaTheLastHopeEmblem extends Emblem { // "At the beginning of your end step, create X 2/2 black Zombie creature tokens, where X is two plus the number of Zombies you control." public LilianaTheLastHopeEmblem() { super("Emblem Liliana"); - Ability ability = new BeginningOfEndStepTriggeredAbility(Zone.COMMAND, new CreateTokenEffect(new ZombieToken(), new LilianaZombiesCount()), + Ability ability = new BeginningOfEndStepTriggeredAbility(Zone.COMMAND, new CreateTokenEffect(new ZombieToken(), LilianaZombiesCount.instance), TargetController.YOU, null, false); this.getAbilities().add(ability); } @@ -36,23 +36,19 @@ public final class LilianaTheLastHopeEmblem extends Emblem { } } -class LilianaZombiesCount implements DynamicValue { +enum LilianaZombiesCount implements DynamicValue { + instance; - private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent(); - - static { - filter.add(SubType.ZOMBIE.getPredicate()); - } + private static final FilterControlledPermanent filter = new FilterControlledPermanent(SubType.ZOMBIE); @Override public int calculate(Game game, Ability sourceAbility, Effect effect) { - int amount = game.getBattlefield().countAll(filter, sourceAbility.getControllerId(), game) + 2; - return amount; + return game.getBattlefield().countAll(filter, sourceAbility.getControllerId(), game) + 2; } @Override public LilianaZombiesCount copy() { - return new LilianaZombiesCount(); + return this; } @Override