diff --git a/Mage.Sets/src/mage/cards/a/AnglerTurtle.java b/Mage.Sets/src/mage/cards/a/AnglerTurtle.java index dc12033da69..88ff0c06993 100644 --- a/Mage.Sets/src/mage/cards/a/AnglerTurtle.java +++ b/Mage.Sets/src/mage/cards/a/AnglerTurtle.java @@ -6,9 +6,9 @@ import mage.abilities.effects.common.combat.AttacksIfAbleAllEffect; import mage.abilities.keyword.HexproofAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; -import mage.constants.*; -import mage.filter.common.FilterCreaturePermanent; -import mage.watchers.common.AttackedThisTurnWatcher; +import mage.constants.CardType; +import mage.constants.SubType; +import mage.filter.StaticFilters; import java.util.UUID; @@ -17,12 +17,6 @@ import java.util.UUID; */ public final class AnglerTurtle extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creatures your opponents control"); - - static { - filter.add(TargetController.OPPONENT.getControllerPredicate()); - } - public AnglerTurtle(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{5}{U}{U}"); this.subtype.add(SubType.TURTLE); @@ -33,8 +27,7 @@ public final class AnglerTurtle extends CardImpl { this.addAbility(HexproofAbility.getInstance()); // Creatures your opponents control attack each combat if able - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new AttacksIfAbleAllEffect(filter, Duration.WhileOnBattlefield)), - new AttackedThisTurnWatcher()); + this.addAbility(new SimpleStaticAbility(new AttacksIfAbleAllEffect(StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURES))); } private AnglerTurtle(final AnglerTurtle card) { diff --git a/Mage.Sets/src/mage/cards/a/AppealAuthority.java b/Mage.Sets/src/mage/cards/a/AppealAuthority.java index a87b598f0a5..5b357e366c6 100644 --- a/Mage.Sets/src/mage/cards/a/AppealAuthority.java +++ b/Mage.Sets/src/mage/cards/a/AppealAuthority.java @@ -14,10 +14,9 @@ import mage.cards.SplitCard; import mage.constants.CardType; import mage.constants.Duration; import mage.constants.SpellAbilityType; -import mage.constants.TargetController; -import mage.filter.common.FilterControlledCreaturePermanent; -import mage.filter.common.FilterCreaturePermanent; +import mage.filter.StaticFilters; import mage.target.common.TargetCreaturePermanent; +import mage.target.common.TargetOpponentsCreaturePermanent; import java.util.UUID; @@ -43,11 +42,9 @@ public final class AppealAuthority extends SplitCard { getRightHalfCard().addAbility(new AftermathAbility().setRuleAtTheTop(true)); // Tap up to two target creatures your opponents control. Creatures you control gain vigilance until end of turn. getRightHalfCard().getSpellAbility().addEffect(new TapTargetEffect()); - FilterCreaturePermanent filter = new FilterCreaturePermanent("creatures your opponents control"); - filter.add(TargetController.OPPONENT.getControllerPredicate()); - getRightHalfCard().getSpellAbility().addTarget(new TargetCreaturePermanent(0, 2, filter, false)); + getRightHalfCard().getSpellAbility().addTarget(new TargetOpponentsCreaturePermanent(0, 2)); getRightHalfCard().getSpellAbility().addEffect(new GainAbilityControlledEffect(VigilanceAbility.getInstance(), - Duration.EndOfTurn, new FilterControlledCreaturePermanent("creatures"))); + Duration.EndOfTurn, StaticFilters.FILTER_PERMANENT_CREATURES)); } diff --git a/Mage.Sets/src/mage/cards/a/ArcaneLighthouse.java b/Mage.Sets/src/mage/cards/a/ArcaneLighthouse.java index 9a675800525..4e6d558320c 100644 --- a/Mage.Sets/src/mage/cards/a/ArcaneLighthouse.java +++ b/Mage.Sets/src/mage/cards/a/ArcaneLighthouse.java @@ -15,9 +15,6 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Duration; -import mage.constants.TargetController; -import mage.constants.Zone; -import mage.filter.common.FilterCreaturePermanent; /** * @@ -25,13 +22,6 @@ import mage.filter.common.FilterCreaturePermanent; */ public final class ArcaneLighthouse extends CardImpl { - - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creatures your opponents control"); - - static { - filter.add(TargetController.OPPONENT.getControllerPredicate()); - } - public ArcaneLighthouse(UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.LAND},""); @@ -39,11 +29,11 @@ public final class ArcaneLighthouse extends CardImpl { this.addAbility(new ColorlessManaAbility()); // {1}, {tap}: Until end of turn, creatures your opponents control lose hexproof and shroud and can't have hexproof or shroud. - Effect effect = new CreaturesCantGetOrHaveAbilityEffect(HexproofAbility.getInstance(), Duration.EndOfTurn, filter); + Effect effect = new CreaturesCantGetOrHaveAbilityEffect(HexproofAbility.getInstance(), Duration.EndOfTurn); effect.setText("Until end of turn, creatures your opponents control lose hexproof"); - Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, effect, new GenericManaCost(1)); + Ability ability = new SimpleActivatedAbility(effect, new GenericManaCost(1)); ability.addCost(new TapSourceCost()); - effect = new CreaturesCantGetOrHaveAbilityEffect(ShroudAbility.getInstance(), Duration.EndOfTurn, filter); + effect = new CreaturesCantGetOrHaveAbilityEffect(ShroudAbility.getInstance(), Duration.EndOfTurn); effect.setText("and shroud and can't have hexproof or shroud"); ability.addEffect(effect); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/cards/a/ArchetypeOfAggression.java b/Mage.Sets/src/mage/cards/a/ArchetypeOfAggression.java index fec03ff2bfe..b4f43b9eb7a 100644 --- a/Mage.Sets/src/mage/cards/a/ArchetypeOfAggression.java +++ b/Mage.Sets/src/mage/cards/a/ArchetypeOfAggression.java @@ -1,4 +1,3 @@ - package mage.cards.a; import java.util.UUID; @@ -9,9 +8,10 @@ import mage.abilities.effects.common.continuous.GainAbilityControlledEffect; import mage.abilities.keyword.TrampleAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; -import mage.constants.*; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.SubType; import mage.filter.StaticFilters; -import mage.filter.common.FilterCreaturePermanent; /** * @@ -19,12 +19,6 @@ import mage.filter.common.FilterCreaturePermanent; */ public final class ArchetypeOfAggression extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Creatures your opponents control"); - - static { - filter.add(TargetController.OPPONENT.getControllerPredicate()); - } - public ArchetypeOfAggression(UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT,CardType.CREATURE},"{1}{R}{R}"); this.subtype.add(SubType.HUMAN); @@ -34,10 +28,9 @@ public final class ArchetypeOfAggression extends CardImpl { this.toughness = new MageInt(2); // Creatures you control have trample. - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityControlledEffect(TrampleAbility.getInstance(), Duration.WhileOnBattlefield, StaticFilters.FILTER_PERMANENT_CREATURES))); + this.addAbility(new SimpleStaticAbility(new GainAbilityControlledEffect(TrampleAbility.getInstance(), Duration.WhileOnBattlefield, StaticFilters.FILTER_PERMANENT_CREATURES))); // Creatures your opponents control lose trample and can't have or gain trample. - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new CreaturesCantGetOrHaveAbilityEffect(TrampleAbility.getInstance(), Duration.WhileOnBattlefield, filter))); - + this.addAbility(new SimpleStaticAbility(new CreaturesCantGetOrHaveAbilityEffect(TrampleAbility.getInstance(), Duration.WhileOnBattlefield))); } private ArchetypeOfAggression(final ArchetypeOfAggression card) { diff --git a/Mage.Sets/src/mage/cards/a/ArchetypeOfCourage.java b/Mage.Sets/src/mage/cards/a/ArchetypeOfCourage.java index b3cd4e35725..fbd8f744448 100644 --- a/Mage.Sets/src/mage/cards/a/ArchetypeOfCourage.java +++ b/Mage.Sets/src/mage/cards/a/ArchetypeOfCourage.java @@ -1,4 +1,3 @@ - package mage.cards.a; import java.util.UUID; @@ -9,9 +8,10 @@ import mage.abilities.effects.common.continuous.GainAbilityControlledEffect; import mage.abilities.keyword.FirstStrikeAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; -import mage.constants.*; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.SubType; import mage.filter.StaticFilters; -import mage.filter.common.FilterCreaturePermanent; /** * @@ -19,11 +19,6 @@ import mage.filter.common.FilterCreaturePermanent; */ public final class ArchetypeOfCourage extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Creatures your opponents control"); - static { - filter.add(TargetController.OPPONENT.getControllerPredicate()); - } - public ArchetypeOfCourage(UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT,CardType.CREATURE},"{1}{W}{W}"); this.subtype.add(SubType.HUMAN); @@ -33,9 +28,9 @@ public final class ArchetypeOfCourage extends CardImpl { this.toughness = new MageInt(2); // Creatures you control have first strike. - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityControlledEffect(FirstStrikeAbility.getInstance(), Duration.WhileOnBattlefield, StaticFilters.FILTER_PERMANENT_CREATURES))); + this.addAbility(new SimpleStaticAbility(new GainAbilityControlledEffect(FirstStrikeAbility.getInstance(), Duration.WhileOnBattlefield, StaticFilters.FILTER_PERMANENT_CREATURES))); // Creatures your opponents control lose first strike and can't have or gain first strike. - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new CreaturesCantGetOrHaveAbilityEffect(FirstStrikeAbility.getInstance(), Duration.WhileOnBattlefield, filter))); + this.addAbility(new SimpleStaticAbility(new CreaturesCantGetOrHaveAbilityEffect(FirstStrikeAbility.getInstance(), Duration.WhileOnBattlefield))); } private ArchetypeOfCourage(final ArchetypeOfCourage card) { diff --git a/Mage.Sets/src/mage/cards/a/ArchetypeOfEndurance.java b/Mage.Sets/src/mage/cards/a/ArchetypeOfEndurance.java index 96ba77e85b2..450ddc74333 100644 --- a/Mage.Sets/src/mage/cards/a/ArchetypeOfEndurance.java +++ b/Mage.Sets/src/mage/cards/a/ArchetypeOfEndurance.java @@ -1,4 +1,3 @@ - package mage.cards.a; import java.util.UUID; @@ -9,9 +8,10 @@ import mage.abilities.effects.common.continuous.GainAbilityControlledEffect; import mage.abilities.keyword.HexproofAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; -import mage.constants.*; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.SubType; import mage.filter.StaticFilters; -import mage.filter.common.FilterCreaturePermanent; /** * @@ -19,12 +19,6 @@ import mage.filter.common.FilterCreaturePermanent; */ public final class ArchetypeOfEndurance extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Creatures your opponents control"); - - static { - filter.add(TargetController.OPPONENT.getControllerPredicate()); - } - public ArchetypeOfEndurance(UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT,CardType.CREATURE},"{6}{G}{G}"); this.subtype.add(SubType.BOAR); @@ -33,11 +27,9 @@ public final class ArchetypeOfEndurance extends CardImpl { this.toughness = new MageInt(5); // Creatures you control have hexproof. - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityControlledEffect(HexproofAbility.getInstance(), Duration.WhileOnBattlefield, StaticFilters.FILTER_PERMANENT_CREATURES))); - + this.addAbility(new SimpleStaticAbility(new GainAbilityControlledEffect(HexproofAbility.getInstance(), Duration.WhileOnBattlefield, StaticFilters.FILTER_PERMANENT_CREATURES))); // Creatures your opponents control lose hexproof and can't have or gain hexproof. - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new CreaturesCantGetOrHaveAbilityEffect(HexproofAbility.getInstance(), Duration.WhileOnBattlefield, filter))); - + this.addAbility(new SimpleStaticAbility(new CreaturesCantGetOrHaveAbilityEffect(HexproofAbility.getInstance(), Duration.WhileOnBattlefield))); } private ArchetypeOfEndurance(final ArchetypeOfEndurance card) { diff --git a/Mage.Sets/src/mage/cards/a/ArchetypeOfFinality.java b/Mage.Sets/src/mage/cards/a/ArchetypeOfFinality.java index 19fcf7cb95a..2fdb4edfd69 100644 --- a/Mage.Sets/src/mage/cards/a/ArchetypeOfFinality.java +++ b/Mage.Sets/src/mage/cards/a/ArchetypeOfFinality.java @@ -1,4 +1,3 @@ - package mage.cards.a; import java.util.UUID; @@ -9,9 +8,10 @@ import mage.abilities.effects.common.continuous.GainAbilityControlledEffect; import mage.abilities.keyword.DeathtouchAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; -import mage.constants.*; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.SubType; import mage.filter.StaticFilters; -import mage.filter.common.FilterCreaturePermanent; /** * @@ -19,12 +19,6 @@ import mage.filter.common.FilterCreaturePermanent; */ public final class ArchetypeOfFinality extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Creatures your opponents control"); - - static { - filter.add(TargetController.OPPONENT.getControllerPredicate()); - } - public ArchetypeOfFinality(UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT,CardType.CREATURE},"{4}{B}{B}"); this.subtype.add(SubType.GORGON); @@ -33,10 +27,9 @@ public final class ArchetypeOfFinality extends CardImpl { this.toughness = new MageInt(3); // Creatures you control have deathtouch. - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityControlledEffect(DeathtouchAbility.getInstance(), Duration.WhileOnBattlefield, StaticFilters.FILTER_PERMANENT_CREATURES))); + this.addAbility(new SimpleStaticAbility(new GainAbilityControlledEffect(DeathtouchAbility.getInstance(), Duration.WhileOnBattlefield, StaticFilters.FILTER_PERMANENT_CREATURES))); // Creatures your opponents control lose deathtouch and can't have or gain deathtouch. - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new CreaturesCantGetOrHaveAbilityEffect(DeathtouchAbility.getInstance(), Duration.WhileOnBattlefield, filter))); - + this.addAbility(new SimpleStaticAbility(new CreaturesCantGetOrHaveAbilityEffect(DeathtouchAbility.getInstance(), Duration.WhileOnBattlefield))); } private ArchetypeOfFinality(final ArchetypeOfFinality card) { diff --git a/Mage.Sets/src/mage/cards/a/ArchetypeOfImagination.java b/Mage.Sets/src/mage/cards/a/ArchetypeOfImagination.java index 69081991faa..2dab503b87e 100644 --- a/Mage.Sets/src/mage/cards/a/ArchetypeOfImagination.java +++ b/Mage.Sets/src/mage/cards/a/ArchetypeOfImagination.java @@ -1,4 +1,3 @@ - package mage.cards.a; import java.util.UUID; @@ -9,9 +8,10 @@ import mage.abilities.effects.common.continuous.GainAbilityControlledEffect; import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; -import mage.constants.*; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.SubType; import mage.filter.StaticFilters; -import mage.filter.common.FilterCreaturePermanent; /** * @@ -19,11 +19,6 @@ import mage.filter.common.FilterCreaturePermanent; */ public final class ArchetypeOfImagination extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Creatures your opponents control"); - static { - filter.add(TargetController.OPPONENT.getControllerPredicate()); - } - public ArchetypeOfImagination(UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT,CardType.CREATURE},"{4}{U}{U}"); this.subtype.add(SubType.HUMAN); @@ -33,10 +28,9 @@ public final class ArchetypeOfImagination extends CardImpl { this.toughness = new MageInt(2); // Creatures you control have flying. - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityControlledEffect(FlyingAbility.getInstance(), Duration.WhileOnBattlefield, StaticFilters.FILTER_PERMANENT_CREATURES))); + this.addAbility(new SimpleStaticAbility(new GainAbilityControlledEffect(FlyingAbility.getInstance(), Duration.WhileOnBattlefield, StaticFilters.FILTER_PERMANENT_CREATURES))); // Creatures your opponents control lose flying and can't have or gain flying. - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new CreaturesCantGetOrHaveAbilityEffect(FlyingAbility.getInstance(), Duration.WhileOnBattlefield, filter))); - + this.addAbility(new SimpleStaticAbility(new CreaturesCantGetOrHaveAbilityEffect(FlyingAbility.getInstance(), Duration.WhileOnBattlefield))); } private ArchetypeOfImagination(final ArchetypeOfImagination card) { diff --git a/Mage.Sets/src/mage/cards/a/ArchfiendOfSorrows.java b/Mage.Sets/src/mage/cards/a/ArchfiendOfSorrows.java index 3a9433eb44d..1f1d41839bd 100644 --- a/Mage.Sets/src/mage/cards/a/ArchfiendOfSorrows.java +++ b/Mage.Sets/src/mage/cards/a/ArchfiendOfSorrows.java @@ -11,8 +11,7 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Duration; import mage.constants.SubType; -import mage.filter.common.FilterCreaturePermanent; -import mage.filter.common.FilterOpponentsCreaturePermanent; +import mage.filter.StaticFilters; import java.util.UUID; @@ -21,9 +20,6 @@ import java.util.UUID; */ public final class ArchfiendOfSorrows extends CardImpl { - private static final FilterCreaturePermanent filter - = new FilterOpponentsCreaturePermanent("creatures your opponents control"); - public ArchfiendOfSorrows(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{5}{B}{B}"); @@ -36,7 +32,7 @@ public final class ArchfiendOfSorrows extends CardImpl { // When Archfiend of Sorrows enters the battlefield, creatures your opponents control get -2/-2 until end of turn. this.addAbility(new EntersBattlefieldTriggeredAbility(new BoostAllEffect( - -2, -2, Duration.EndOfTurn, filter, false + -2, -2, Duration.EndOfTurn, StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURES, false ))); // Unearth {3}{B}{B} diff --git a/Mage.Sets/src/mage/cards/a/AuthorityOfTheConsuls.java b/Mage.Sets/src/mage/cards/a/AuthorityOfTheConsuls.java index 5ad578250d3..505feb03a18 100644 --- a/Mage.Sets/src/mage/cards/a/AuthorityOfTheConsuls.java +++ b/Mage.Sets/src/mage/cards/a/AuthorityOfTheConsuls.java @@ -7,8 +7,7 @@ import mage.abilities.effects.common.PermanentsEnterBattlefieldTappedEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.filter.FilterPermanent; -import mage.filter.common.FilterOpponentsCreaturePermanent; +import mage.filter.StaticFilters; import java.util.UUID; @@ -17,19 +16,16 @@ import java.util.UUID; */ public final class AuthorityOfTheConsuls extends CardImpl { - private static final FilterPermanent filter - = new FilterOpponentsCreaturePermanent("creatures your opponents control"); - public AuthorityOfTheConsuls(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{W}"); // Creatures your opponents control enter the battlefield tapped. - this.addAbility(new SimpleStaticAbility(new PermanentsEnterBattlefieldTappedEffect(filter))); + this.addAbility(new SimpleStaticAbility(new PermanentsEnterBattlefieldTappedEffect(StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURES))); // Whenever a creature enters the battlefield under an opponent's control, you gain 1 life. this.addAbility(new EntersBattlefieldAllTriggeredAbility( - new GainLifeEffect(1), filter, "Whenever a creature enters " + - "the battlefield under an opponent's control, you gain 1 life." + new GainLifeEffect(1), StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURES, + "Whenever a creature enters the battlefield under an opponent's control, you gain 1 life." )); } diff --git a/Mage.Sets/src/mage/cards/a/AzoriusJusticiar.java b/Mage.Sets/src/mage/cards/a/AzoriusJusticiar.java index 97376007acf..fc23e4a143e 100644 --- a/Mage.Sets/src/mage/cards/a/AzoriusJusticiar.java +++ b/Mage.Sets/src/mage/cards/a/AzoriusJusticiar.java @@ -1,4 +1,3 @@ - package mage.cards.a; import java.util.UUID; @@ -10,9 +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.FilterCreaturePermanent; -import mage.target.common.TargetCreaturePermanent; +import mage.target.common.TargetOpponentsCreaturePermanent; /** * @@ -20,12 +17,6 @@ import mage.target.common.TargetCreaturePermanent; */ public final class AzoriusJusticiar extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creatures your opponents control"); - - static { - filter.add(TargetController.OPPONENT.getControllerPredicate()); - } - public AzoriusJusticiar(UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{W}{W}"); this.subtype.add(SubType.HUMAN); @@ -37,7 +28,7 @@ public final class AzoriusJusticiar extends CardImpl { // When Azorius Justiciar enters the battlefield, detain up to two target creatures your opponents control. // (Until your next turn, those creatures can't attack or block and their activated abilities can't be activated.) Ability ability = new EntersBattlefieldTriggeredAbility(new DetainTargetEffect()); - ability.addTarget(new TargetCreaturePermanent(0,2,filter,false)); + ability.addTarget(new TargetOpponentsCreaturePermanent(0, 2)); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/b/BlindingSpray.java b/Mage.Sets/src/mage/cards/b/BlindingSpray.java index 0a51960e0de..29001f55cde 100644 --- a/Mage.Sets/src/mage/cards/b/BlindingSpray.java +++ b/Mage.Sets/src/mage/cards/b/BlindingSpray.java @@ -1,4 +1,3 @@ - package mage.cards.b; import java.util.UUID; @@ -8,8 +7,7 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Duration; -import mage.constants.TargetController; -import mage.filter.common.FilterCreaturePermanent; +import mage.filter.StaticFilters; /** * @@ -17,18 +15,11 @@ import mage.filter.common.FilterCreaturePermanent; */ public final class BlindingSpray extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Creatures your opponents control"); - - static { - filter.add(TargetController.OPPONENT.getControllerPredicate()); - } - public BlindingSpray(UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{4}{U}"); - // Creatures your opponents control get -4/-0 until end of turn. - this.getSpellAbility().addEffect(new BoostAllEffect(-4, 0, Duration.EndOfTurn, filter, false)); + this.getSpellAbility().addEffect(new BoostAllEffect(-4, 0, Duration.EndOfTurn, StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURES, false)); // Draw a card. this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1)); diff --git a/Mage.Sets/src/mage/cards/b/BondOfDiscipline.java b/Mage.Sets/src/mage/cards/b/BondOfDiscipline.java index ebc07aa9de8..a0274d07211 100644 --- a/Mage.Sets/src/mage/cards/b/BondOfDiscipline.java +++ b/Mage.Sets/src/mage/cards/b/BondOfDiscipline.java @@ -7,9 +7,7 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Duration; -import mage.filter.FilterPermanent; import mage.filter.StaticFilters; -import mage.filter.common.FilterOpponentsCreaturePermanent; import java.util.UUID; @@ -18,14 +16,11 @@ import java.util.UUID; */ public final class BondOfDiscipline extends CardImpl { - private static final FilterPermanent filter - = new FilterOpponentsCreaturePermanent("creatures your opponents control"); - public BondOfDiscipline(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{4}{W}"); // Tap all creatures your opponents control. Creatures you control gain lifelink until end of turn. - this.getSpellAbility().addEffect(new TapAllEffect(filter)); + this.getSpellAbility().addEffect(new TapAllEffect(StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURES)); this.getSpellAbility().addEffect(new GainAbilityControlledEffect( LifelinkAbility.getInstance(), Duration.EndOfTurn, StaticFilters.FILTER_PERMANENT_CREATURES diff --git a/Mage.Sets/src/mage/cards/b/BondsOfMortality.java b/Mage.Sets/src/mage/cards/b/BondsOfMortality.java index cb6c2b19578..c2b32b3ec0c 100644 --- a/Mage.Sets/src/mage/cards/b/BondsOfMortality.java +++ b/Mage.Sets/src/mage/cards/b/BondsOfMortality.java @@ -5,7 +5,7 @@ import java.util.UUID; import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.common.SimpleActivatedAbility; -import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.costs.mana.ColoredManaCost; import mage.abilities.effects.Effect; import mage.abilities.effects.common.DrawCardSourceControllerEffect; import mage.abilities.effects.common.continuous.LoseAbilityAllEffect; @@ -14,10 +14,9 @@ import mage.abilities.keyword.IndestructibleAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; +import mage.constants.ColoredManaSymbol; import mage.constants.Duration; -import mage.constants.TargetController; -import mage.constants.Zone; -import mage.filter.common.FilterCreaturePermanent; +import mage.filter.StaticFilters; /** * @@ -25,12 +24,6 @@ import mage.filter.common.FilterCreaturePermanent; */ public final class BondsOfMortality extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creatures your opponents control"); - - static { - filter.add(TargetController.OPPONENT.getControllerPredicate()); - } - public BondsOfMortality(UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{1}{G}"); @@ -38,10 +31,12 @@ public final class BondsOfMortality extends CardImpl { this.addAbility(new EntersBattlefieldTriggeredAbility(new DrawCardSourceControllerEffect(1), false)); // {G}: Creatures your opponents control lose hexproof and indestructible until end of turn. - Effect effect = new LoseAbilityAllEffect(HexproofAbility.getInstance(), Duration.EndOfTurn, filter); + Effect effect = new LoseAbilityAllEffect( + HexproofAbility.getInstance(), Duration.EndOfTurn, StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURES); effect.setText("Creatures your opponents control lose hexproof"); - Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, effect, new ManaCostsImpl("{G}")); - effect = new LoseAbilityAllEffect(IndestructibleAbility.getInstance(), Duration.EndOfTurn, filter); + Ability ability = new SimpleActivatedAbility(effect, new ColoredManaCost(ColoredManaSymbol.G)); + effect = new LoseAbilityAllEffect( + IndestructibleAbility.getInstance(), Duration.EndOfTurn, StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURES); effect.setText("and indestructible until end of turn"); ability.addEffect(effect); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/cards/b/BrutalHordechief.java b/Mage.Sets/src/mage/cards/b/BrutalHordechief.java index 8b0eb470a61..7f9ae4c09e6 100644 --- a/Mage.Sets/src/mage/cards/b/BrutalHordechief.java +++ b/Mage.Sets/src/mage/cards/b/BrutalHordechief.java @@ -12,7 +12,7 @@ import mage.abilities.effects.common.combat.ChooseBlockersEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.*; -import mage.filter.common.FilterCreaturePermanent; +import mage.filter.StaticFilters; import mage.game.Game; import mage.game.events.GameEvent; import mage.game.permanent.Permanent; @@ -26,12 +26,6 @@ import java.util.UUID; */ public final class BrutalHordechief extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Creatures your opponents control"); - - static { - filter.add(TargetController.OPPONENT.getControllerPredicate()); - } - public BrutalHordechief(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{B}"); this.subtype.add(SubType.ORC, SubType.WARRIOR); @@ -43,7 +37,8 @@ public final class BrutalHordechief extends CardImpl { // {3}{R/W}{R/W}: Creatures your opponents control block this turn if able, and you choose how those creatures block. Ability ability = new SimpleActivatedAbility( - new BlocksIfAbleAllEffect(filter, Duration.EndOfTurn), new ManaCostsImpl<>("{3}{R/W}{R/W}") + new BlocksIfAbleAllEffect(StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURES, Duration.EndOfTurn), + new ManaCostsImpl<>("{3}{R/W}{R/W}") ); ability.addEffect(new ChooseBlockersEffect(Duration.EndOfTurn).setText("and you choose how those creatures block")); ability.addWatcher(new ControlCombatRedundancyWatcher()); diff --git a/Mage.Sets/src/mage/cards/c/CowerInFear.java b/Mage.Sets/src/mage/cards/c/CowerInFear.java index 3a29280e2a5..7e089889e77 100644 --- a/Mage.Sets/src/mage/cards/c/CowerInFear.java +++ b/Mage.Sets/src/mage/cards/c/CowerInFear.java @@ -1,4 +1,3 @@ - package mage.cards.c; import java.util.UUID; @@ -7,8 +6,7 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Duration; -import mage.constants.TargetController; -import mage.filter.common.FilterCreaturePermanent; +import mage.filter.StaticFilters; /** * @@ -16,18 +14,11 @@ import mage.filter.common.FilterCreaturePermanent; */ public final class CowerInFear extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Creatures your opponents control"); - - static { - filter.add(TargetController.OPPONENT.getControllerPredicate()); - } - public CowerInFear(UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{1}{B}{B}"); - // Creatures your opponents control get -1/-1 until end of turn. - this.getSpellAbility().addEffect(new BoostAllEffect(-1, -1, Duration.EndOfTurn, filter, false)); + this.getSpellAbility().addEffect(new BoostAllEffect(-1, -1, Duration.EndOfTurn, StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURES, false)); } private CowerInFear(final CowerInFear card) { diff --git a/Mage.Sets/src/mage/cards/c/Crypsis.java b/Mage.Sets/src/mage/cards/c/Crypsis.java index 1046b126a47..16d69bb17fa 100644 --- a/Mage.Sets/src/mage/cards/c/Crypsis.java +++ b/Mage.Sets/src/mage/cards/c/Crypsis.java @@ -8,8 +8,7 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Duration; -import mage.constants.TargetController; -import mage.filter.FilterPermanent; +import mage.filter.StaticFilters; import mage.target.common.TargetControlledCreaturePermanent; import java.util.UUID; @@ -19,23 +18,15 @@ import java.util.UUID; */ public final class Crypsis extends CardImpl { - static final FilterPermanent filter = new FilterPermanent("creatures your opponents control"); - - static { - filter.add(CardType.CREATURE.getPredicate()); - filter.add(TargetController.OPPONENT.getControllerPredicate()); - } - public Crypsis(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{1}{U}"); // Target creature you control gains protection from creatures your opponents control until end of turn. Untap it. - this.getSpellAbility().addEffect(new GainAbilityTargetEffect(new ProtectionAbility(filter), Duration.EndOfTurn)); - Effect effect = new UntapTargetEffect(); - effect.setText("Untap it."); - this.getSpellAbility().addEffect(effect); + this.getSpellAbility().addEffect(new GainAbilityTargetEffect( + new ProtectionAbility(StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURES), + Duration.EndOfTurn)); + this.getSpellAbility().addEffect(new UntapTargetEffect("untap it")); this.getSpellAbility().addTarget(new TargetControlledCreaturePermanent()); - } private Crypsis(final Crypsis card) { diff --git a/Mage.Sets/src/mage/cards/c/CrypticCommand.java b/Mage.Sets/src/mage/cards/c/CrypticCommand.java index 9fa79b8c413..c5f614dd13a 100644 --- a/Mage.Sets/src/mage/cards/c/CrypticCommand.java +++ b/Mage.Sets/src/mage/cards/c/CrypticCommand.java @@ -1,21 +1,15 @@ package mage.cards.c; import java.util.UUID; -import mage.abilities.Ability; import mage.abilities.Mode; -import mage.abilities.effects.Effect; -import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.common.CounterTargetEffect; import mage.abilities.effects.common.DrawCardSourceControllerEffect; import mage.abilities.effects.common.ReturnToHandTargetEffect; +import mage.abilities.effects.common.TapAllEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.constants.Outcome; import mage.filter.StaticFilters; -import mage.game.Game; -import mage.game.permanent.Permanent; -import mage.players.Player; import mage.target.TargetPermanent; import mage.target.TargetSpell; @@ -31,24 +25,22 @@ public final class CrypticCommand extends CardImpl { // Choose two - this.getSpellAbility().getModes().setMinModes(2); this.getSpellAbility().getModes().setMaxModes(2); + // Counter target spell; - Effect effect1 = new CounterTargetEffect(); - effect1.setText("Counter target spell."); - this.getSpellAbility().addEffect(effect1); + this.getSpellAbility().addEffect(new CounterTargetEffect()); this.getSpellAbility().addTarget(new TargetSpell()); + // or return target permanent to its owner's hand; - Effect effect2 = new ReturnToHandTargetEffect(); - effect2.setText("Return target permanent to its owner's hand."); - Mode mode = new Mode(effect2); + Mode mode = new Mode(new ReturnToHandTargetEffect()); mode.addTarget(new TargetPermanent()); this.getSpellAbility().getModes().addMode(mode); + // or tap all creatures your opponents control; - mode = new Mode(new CrypticCommandEffect()); + mode = new Mode(new TapAllEffect(StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURES)); this.getSpellAbility().getModes().addMode(mode); + // or draw a card. - Effect effect3 = new DrawCardSourceControllerEffect(1); - effect3.setText("Draw a card."); - mode = new Mode(effect3); + mode = new Mode(new DrawCardSourceControllerEffect(1)); this.getSpellAbility().getModes().addMode(mode); } @@ -61,32 +53,3 @@ public final class CrypticCommand extends CardImpl { return new CrypticCommand(this); } } - -class CrypticCommandEffect extends OneShotEffect { - - public CrypticCommandEffect() { - super(Outcome.Tap); - staticText = "Tap all creatures your opponents control"; - } - - public CrypticCommandEffect(final CrypticCommandEffect effect) { - super(effect); - } - - @Override - public boolean apply(Game game, Ability source) { - Player player = game.getPlayer(source.getControllerId()); - if (player == null) { - return false; - } - for (Permanent creature : game.getBattlefield().getActivePermanents(StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURE, player.getId(), source, game)) { - creature.tap(source, game); - } - return true; - } - - @Override - public CrypticCommandEffect copy() { - return new CrypticCommandEffect(this); - } -} diff --git a/Mage.Sets/src/mage/cards/d/DampeningPulse.java b/Mage.Sets/src/mage/cards/d/DampeningPulse.java index 9e14405c9bf..341f7d61602 100644 --- a/Mage.Sets/src/mage/cards/d/DampeningPulse.java +++ b/Mage.Sets/src/mage/cards/d/DampeningPulse.java @@ -1,4 +1,3 @@ - package mage.cards.d; import java.util.UUID; @@ -8,9 +7,7 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Duration; -import mage.constants.TargetController; -import mage.constants.Zone; -import mage.filter.common.FilterCreaturePermanent; +import mage.filter.StaticFilters; /** * @@ -18,18 +15,11 @@ import mage.filter.common.FilterCreaturePermanent; */ public final class DampeningPulse extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Creatures your opponents control"); - - static { - filter.add(TargetController.OPPONENT.getControllerPredicate()); - } - public DampeningPulse(UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{3}{U}"); // Creatures your opponents control get -1/-0. - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostAllEffect(-1, -0, Duration.WhileOnBattlefield, filter, false))); - + this.addAbility(new SimpleStaticAbility(new BoostAllEffect(-1, -0, Duration.WhileOnBattlefield, StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURES, false))); } private DampeningPulse(final DampeningPulse card) { diff --git a/Mage.Sets/src/mage/cards/d/DoomwakeGiant.java b/Mage.Sets/src/mage/cards/d/DoomwakeGiant.java index f44de289fce..7dba89fe0c2 100644 --- a/Mage.Sets/src/mage/cards/d/DoomwakeGiant.java +++ b/Mage.Sets/src/mage/cards/d/DoomwakeGiant.java @@ -10,8 +10,7 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; import mage.constants.Duration; -import mage.constants.TargetController; -import mage.filter.common.FilterCreaturePermanent; +import mage.filter.StaticFilters; /** * @@ -19,12 +18,6 @@ import mage.filter.common.FilterCreaturePermanent; */ public final class DoomwakeGiant extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creatures your opponents control"); - - static { - filter.add(TargetController.OPPONENT.getControllerPredicate()); - } - public DoomwakeGiant(UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT,CardType.CREATURE},"{4}{B}"); this.subtype.add(SubType.GIANT); @@ -33,7 +26,7 @@ public final class DoomwakeGiant extends CardImpl { this.toughness = new MageInt(6); // Constellation - When Doomwake Giant or another enchantment enters the battlefield under your control, creatures your opponents control get -1/-1 until end of turn. - this.addAbility(new ConstellationAbility(new BoostAllEffect(-1,-1, Duration.EndOfTurn, filter, false))); + this.addAbility(new ConstellationAbility(new BoostAllEffect(-1, -1, Duration.EndOfTurn, StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURES, false))); } private DoomwakeGiant(final DoomwakeGiant card) { diff --git a/Mage.Sets/src/mage/cards/d/DreadCacodemon.java b/Mage.Sets/src/mage/cards/d/DreadCacodemon.java index fc396178375..c1a3bdf24e3 100644 --- a/Mage.Sets/src/mage/cards/d/DreadCacodemon.java +++ b/Mage.Sets/src/mage/cards/d/DreadCacodemon.java @@ -1,4 +1,3 @@ - package mage.cards.d; import java.util.UUID; @@ -14,6 +13,7 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; import mage.constants.TargetController; +import mage.filter.StaticFilters; import mage.filter.common.FilterCreaturePermanent; import mage.filter.predicate.mageobject.AnotherPredicate; import mage.watchers.common.CastFromHandWatcher; @@ -22,12 +22,7 @@ import mage.watchers.common.CastFromHandWatcher; * @author escplan9 (Derek Monturo - dmontur1 at gmail dot com) */ public final class DreadCacodemon extends CardImpl { - - private static final FilterCreaturePermanent opponentsCreatures = new FilterCreaturePermanent("creatures your opponents control"); - static { - opponentsCreatures.add(TargetController.OPPONENT.getControllerPredicate()); - } - + private static final FilterCreaturePermanent otherCreaturesYouControl = new FilterCreaturePermanent("other creatures you control"); static { otherCreaturesYouControl.add(TargetController.YOU.getControllerPredicate()); @@ -39,10 +34,10 @@ public final class DreadCacodemon extends CardImpl { this.subtype.add(SubType.DEMON); this.power = new MageInt(8); this.toughness = new MageInt(8); - + // When Dread Cacodemon enters the battlefield, // if you cast it from your hand, destroy all creatures your opponents control, then tap all other creatures you control. - TriggeredAbility ability = new EntersBattlefieldTriggeredAbility(new DestroyAllEffect(opponentsCreatures, false)); + TriggeredAbility ability = new EntersBattlefieldTriggeredAbility(new DestroyAllEffect(StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURES)); ability.addEffect(new TapAllEffect(otherCreaturesYouControl)); this.addAbility(new ConditionalInterveningIfTriggeredAbility(ability, CastFromHandSourcePermanentCondition.instance, "When {this} enters the battlefield, if you cast it from your hand, destroy all creatures your opponents control, then tap all other creatures you control."), new CastFromHandWatcher()); @@ -56,4 +51,4 @@ public final class DreadCacodemon extends CardImpl { public DreadCacodemon copy() { return new DreadCacodemon(this); } -} \ No newline at end of file +} diff --git a/Mage.Sets/src/mage/cards/f/FumikoTheLowblood.java b/Mage.Sets/src/mage/cards/f/FumikoTheLowblood.java index 7f70d0ed82a..83efa4ea841 100644 --- a/Mage.Sets/src/mage/cards/f/FumikoTheLowblood.java +++ b/Mage.Sets/src/mage/cards/f/FumikoTheLowblood.java @@ -1,4 +1,3 @@ - package mage.cards.f; import java.util.UUID; @@ -12,10 +11,7 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; import mage.constants.SuperType; -import mage.constants.TargetController; -import mage.constants.Zone; -import mage.filter.common.FilterCreaturePermanent; -import mage.watchers.common.AttackedThisTurnWatcher; +import mage.filter.StaticFilters; /** * @@ -35,11 +31,8 @@ public final class FumikoTheLowblood extends CardImpl { // Fumiko the Lowblood has bushido X, where X is the number of attacking creatures. this.addAbility(new BushidoAbility(new AttackingCreatureCount("the number of attacking creatures."))); - // Creatures your opponents control attack each turn if able. - FilterCreaturePermanent filter = new FilterCreaturePermanent("Creatures your opponents control"); - filter.add(TargetController.OPPONENT.getControllerPredicate()); - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new AttacksIfAbleAllEffect(filter)), new AttackedThisTurnWatcher()); - + // Creatures your opponents control attack each combat if able. + this.addAbility(new SimpleStaticAbility(new AttacksIfAbleAllEffect(StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURES))); } private FumikoTheLowblood(final FumikoTheLowblood card) { diff --git a/Mage.Sets/src/mage/cards/g/GoblinAssault.java b/Mage.Sets/src/mage/cards/g/GoblinAssault.java index ce26761c09e..8a0e9fa5ebc 100644 --- a/Mage.Sets/src/mage/cards/g/GoblinAssault.java +++ b/Mage.Sets/src/mage/cards/g/GoblinAssault.java @@ -11,10 +11,8 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Duration; import mage.constants.TargetController; -import mage.constants.Zone; import mage.filter.StaticFilters; import mage.game.permanent.token.GoblinToken; -import mage.watchers.common.AttackedThisTurnWatcher; /** * @@ -28,8 +26,8 @@ public final class GoblinAssault extends CardImpl { // At the beginning of your upkeep, create a 1/1 red Goblin creature token with haste. this.addAbility(new BeginningOfUpkeepTriggeredAbility(new CreateTokenEffect(new GoblinToken(true)), TargetController.YOU, false)); - // Goblin creatures attack each turn if able. - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new AttacksIfAbleAllEffect(StaticFilters.FILTER_PERMANENT_CREATURE_GOBLINS, Duration.WhileOnBattlefield, true)), new AttackedThisTurnWatcher()); + // Goblin creatures attack each combat if able. + this.addAbility(new SimpleStaticAbility(new AttacksIfAbleAllEffect(StaticFilters.FILTER_PERMANENT_CREATURE_GOBLINS))); } private GoblinAssault(final GoblinAssault card) { diff --git a/Mage.Sets/src/mage/cards/g/GoblinRabblemaster.java b/Mage.Sets/src/mage/cards/g/GoblinRabblemaster.java index b0b6dcc9536..0ea0233356e 100644 --- a/Mage.Sets/src/mage/cards/g/GoblinRabblemaster.java +++ b/Mage.Sets/src/mage/cards/g/GoblinRabblemaster.java @@ -46,8 +46,8 @@ public final class GoblinRabblemaster extends CardImpl { this.power = new MageInt(2); this.toughness = new MageInt(2); - // Other Goblin creatures you control attack each turn if able. - this.addAbility(new SimpleStaticAbility(new AttacksIfAbleAllEffect(otherGoblinFilter, Duration.WhileOnBattlefield, true))); + // Other Goblin creatures you control attack each combat if able. + this.addAbility(new SimpleStaticAbility(new AttacksIfAbleAllEffect(otherGoblinFilter))); // At the beginning of combat on your turn, create a 1/1 red Goblin creature token with haste. this.addAbility(new BeginningOfCombatTriggeredAbility(new CreateTokenEffect(new GoblinToken(true)), TargetController.YOU, false)); diff --git a/Mage.Sets/src/mage/cards/g/GoldenDemise.java b/Mage.Sets/src/mage/cards/g/GoldenDemise.java index 8a1da17de89..094d83de5d3 100644 --- a/Mage.Sets/src/mage/cards/g/GoldenDemise.java +++ b/Mage.Sets/src/mage/cards/g/GoldenDemise.java @@ -1,7 +1,8 @@ package mage.cards.g; import mage.abilities.condition.common.CitysBlessingCondition; -import mage.abilities.decorator.ConditionalContinuousEffect; +import mage.abilities.decorator.ConditionalOneShotEffect; +import mage.abilities.effects.common.AddContinuousEffectToGame; import mage.abilities.effects.common.continuous.BoostAllEffect; import mage.abilities.effects.keyword.AscendEffect; import mage.abilities.hint.common.CitysBlessingHint; @@ -10,8 +11,7 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Duration; -import mage.constants.TargetController; -import mage.filter.common.FilterCreaturePermanent; +import mage.filter.StaticFilters; import java.util.UUID; @@ -29,11 +29,9 @@ public final class GoldenDemise extends CardImpl { this.getSpellAbility().addHint(PermanentsYouControlHint.instance); // All creatures get -2/-2 until end of turn. If you have the city's blessing, instead only creatures your opponents control get -2/-2 until end of turn. - FilterCreaturePermanent filter = new FilterCreaturePermanent("creatures your opponents control"); - filter.add(TargetController.OPPONENT.getControllerPredicate()); - this.getSpellAbility().addEffect(new ConditionalContinuousEffect( - new BoostAllEffect(-2, -2, Duration.EndOfTurn, filter, false), - new BoostAllEffect(-2, -2, Duration.EndOfTurn), + this.getSpellAbility().addEffect(new ConditionalOneShotEffect( + new AddContinuousEffectToGame(new BoostAllEffect(-2, -2, Duration.EndOfTurn, StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURES, false)), + new AddContinuousEffectToGame(new BoostAllEffect(-2, -2, Duration.EndOfTurn)), CitysBlessingCondition.instance, "All creatures get -2/-2 until end of turn. If you have the city's blessing, instead only creatures your opponents control get -2/-2 until end of turn" )); diff --git a/Mage.Sets/src/mage/cards/h/HellraiserGoblin.java b/Mage.Sets/src/mage/cards/h/HellraiserGoblin.java index 1e3c498e0b6..42b346f4033 100644 --- a/Mage.Sets/src/mage/cards/h/HellraiserGoblin.java +++ b/Mage.Sets/src/mage/cards/h/HellraiserGoblin.java @@ -3,10 +3,8 @@ package mage.cards.h; import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; -import mage.abilities.Mode; import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.effects.Effect; -import mage.abilities.effects.RequirementEffect; +import mage.abilities.effects.common.combat.AttacksIfAbleAllEffect; import mage.abilities.effects.common.continuous.GainAbilityControlledEffect; import mage.abilities.keyword.HasteAbility; import mage.cards.CardImpl; @@ -16,9 +14,6 @@ import mage.constants.Duration; import mage.constants.SubType; import mage.constants.Zone; import mage.filter.StaticFilters; -import mage.filter.common.FilterControlledCreaturePermanent; -import mage.game.Game; -import mage.game.permanent.Permanent; /** * @@ -35,10 +30,12 @@ public final class HellraiserGoblin extends CardImpl { this.toughness = new MageInt(2); // Creatures you control have haste and attack each combat if able. - Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityControlledEffect(HasteAbility.getInstance(), Duration.WhileOnBattlefield, StaticFilters.FILTER_PERMANENT_CREATURES)); - Effect effect = new AttacksIfAbleAllEffect(Duration.WhileOnBattlefield); - effect.setText("and attack each combat if able"); - ability.addEffect(effect); + Ability ability = new SimpleStaticAbility(new GainAbilityControlledEffect( + HasteAbility.getInstance(), + Duration.WhileOnBattlefield, + StaticFilters.FILTER_PERMANENT_CREATURES + )); + ability.addEffect(new AttacksIfAbleAllEffect(StaticFilters.FILTER_CONTROLLED_CREATURES).setText("and attack each combat if able")); this.addAbility(ability); } @@ -51,51 +48,3 @@ public final class HellraiserGoblin extends CardImpl { return new HellraiserGoblin(this); } } - -class AttacksIfAbleAllEffect extends RequirementEffect { - - private FilterControlledCreaturePermanent filter; - - public AttacksIfAbleAllEffect(Duration duration) { - this(duration, new FilterControlledCreaturePermanent()); - } - - public AttacksIfAbleAllEffect(Duration duration, FilterControlledCreaturePermanent filter) { - super(duration); - this.filter = filter; - } - - public AttacksIfAbleAllEffect(final AttacksIfAbleAllEffect effect) { - super(effect); - this.filter = effect.filter; - } - - @Override - public AttacksIfAbleAllEffect copy() { - return new AttacksIfAbleAllEffect(this); - } - - @Override - public boolean applies(Permanent permanent, Ability source, Game game) { - return filter.match(permanent, source.getControllerId(), source, game); - } - - @Override - public boolean mustAttack(Game game) { - return true; - } - - @Override - public boolean mustBlock(Game game) { - return false; - } - - @Override - public String getText(Mode mode) { - if (!staticText.isEmpty()) { - return staticText; - } - return filter.getMessage() + " attack each combat if able"; - } - -} diff --git a/Mage.Sets/src/mage/cards/h/HystericalBlindness.java b/Mage.Sets/src/mage/cards/h/HystericalBlindness.java index 89aeafc9e45..346412b6654 100644 --- a/Mage.Sets/src/mage/cards/h/HystericalBlindness.java +++ b/Mage.Sets/src/mage/cards/h/HystericalBlindness.java @@ -1,4 +1,3 @@ - package mage.cards.h; import java.util.UUID; @@ -7,8 +6,7 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Duration; -import mage.constants.TargetController; -import mage.filter.common.FilterCreaturePermanent; +import mage.filter.StaticFilters; /** * @@ -16,18 +14,11 @@ import mage.filter.common.FilterCreaturePermanent; */ public final class HystericalBlindness extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Creatures your opponents control"); - - static { - filter.add(TargetController.OPPONENT.getControllerPredicate()); - } - public HystericalBlindness(UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{2}{U}"); - // Creatures your opponents control get -4/-0 until end of turn. - this.getSpellAbility().addEffect(new BoostAllEffect(-4, 0, Duration.EndOfTurn, filter, false)); + this.getSpellAbility().addEffect(new BoostAllEffect(-4, 0, Duration.EndOfTurn, StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURES, false)); } private HystericalBlindness(final HystericalBlindness card) { diff --git a/Mage.Sets/src/mage/cards/i/IntrusivePackbeast.java b/Mage.Sets/src/mage/cards/i/IntrusivePackbeast.java index 9221a1d3050..72d5cb9d373 100644 --- a/Mage.Sets/src/mage/cards/i/IntrusivePackbeast.java +++ b/Mage.Sets/src/mage/cards/i/IntrusivePackbeast.java @@ -29,7 +29,7 @@ public final class IntrusivePackbeast extends CardImpl { this.addAbility(VigilanceAbility.getInstance()); // When Intrusive Packbeast enters the battlefield, tap up to two target creatures your opponents control. - Ability ability = new EntersBattlefieldTriggeredAbility(new TapTargetEffect().setText("tap up to two target creatures your opponents control")); + Ability ability = new EntersBattlefieldTriggeredAbility(new TapTargetEffect()); ability.addTarget(new TargetOpponentsCreaturePermanent(0, 2)); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/j/JabbaTheHutt.java b/Mage.Sets/src/mage/cards/j/JabbaTheHutt.java index dd8d6991646..c4924dc03ee 100644 --- a/Mage.Sets/src/mage/cards/j/JabbaTheHutt.java +++ b/Mage.Sets/src/mage/cards/j/JabbaTheHutt.java @@ -21,13 +21,14 @@ import mage.constants.Outcome; import mage.constants.SuperType; import mage.constants.Zone; import mage.counters.CounterType; +import mage.filter.FilterPermanent; import mage.filter.common.FilterOpponentsCreaturePermanent; import mage.game.Game; import mage.game.permanent.Permanent; import mage.game.permanent.token.HunterToken; import mage.players.Player; +import mage.target.TargetPermanent; import mage.target.common.TargetCreaturePermanent; -import mage.target.common.TargetOpponentsCreaturePermanent; /** * @@ -35,7 +36,7 @@ import mage.target.common.TargetOpponentsCreaturePermanent; */ public final class JabbaTheHutt extends CardImpl { - private static final FilterOpponentsCreaturePermanent filter = new FilterOpponentsCreaturePermanent("creature an opponent control with a bounty counter on it"); + private static final FilterPermanent filter = new FilterOpponentsCreaturePermanent("creature an opponent controls with a bounty counter on it"); static { filter.add(CounterType.BOUNTY.getPredicate()); @@ -60,7 +61,7 @@ public final class JabbaTheHutt extends CardImpl { // {R},{T}: Create a tapped 4/4 red Hunter creature token. It fights another target creature an opponent control with a bounty counter on it. Activate this ability only any time you could cast a sorcery. ability = new ActivateAsSorceryActivatedAbility(Zone.BATTLEFIELD, new JabbaTheHuttEffect(), new ManaCostsImpl<>("{R}")); ability.addCost(new TapSourceCost()); - ability.addTarget(new TargetOpponentsCreaturePermanent(filter)); + ability.addTarget(new TargetPermanent(filter)); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/l/LyevDecree.java b/Mage.Sets/src/mage/cards/l/LyevDecree.java index 1032a08f8cd..e51bf2f9045 100644 --- a/Mage.Sets/src/mage/cards/l/LyevDecree.java +++ b/Mage.Sets/src/mage/cards/l/LyevDecree.java @@ -1,5 +1,3 @@ - - package mage.cards.l; import java.util.UUID; @@ -7,32 +5,21 @@ import mage.abilities.effects.common.DetainTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.constants.TargetController; -import mage.filter.common.FilterCreaturePermanent; -import mage.target.Target; -import mage.target.common.TargetCreaturePermanent; +import mage.target.common.TargetOpponentsCreaturePermanent; /** * * @author LevelX2 */ - public final class LyevDecree extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creatures your opponents control"); - static { - filter.add(TargetController.OPPONENT.getControllerPredicate()); - } - public LyevDecree(UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{1}{W}"); - // Detain up to two target creatures your opponents control. this.getSpellAbility().addEffect(new DetainTargetEffect()); - Target target = new TargetCreaturePermanent(0,2,filter,false); - this.getSpellAbility().addTarget(target); + this.getSpellAbility().addTarget(new TargetOpponentsCreaturePermanent(0, 2)); } private LyevDecree(final LyevDecree card) { @@ -43,5 +30,4 @@ public final class LyevDecree extends CardImpl { public LyevDecree copy() { return new LyevDecree(this); } - } diff --git a/Mage.Sets/src/mage/cards/m/MinisterOfPain.java b/Mage.Sets/src/mage/cards/m/MinisterOfPain.java index 11c40faeb03..8166fe338a8 100644 --- a/Mage.Sets/src/mage/cards/m/MinisterOfPain.java +++ b/Mage.Sets/src/mage/cards/m/MinisterOfPain.java @@ -1,4 +1,3 @@ - package mage.cards.m; import java.util.UUID; @@ -11,8 +10,7 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; import mage.constants.Duration; -import mage.constants.TargetController; -import mage.filter.common.FilterCreaturePermanent; +import mage.filter.StaticFilters; /** * @@ -20,12 +18,6 @@ import mage.filter.common.FilterCreaturePermanent; */ public final class MinisterOfPain extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creatures your opponents control"); - - static { - filter.add(TargetController.OPPONENT.getControllerPredicate()); - } - public MinisterOfPain(UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{B}"); this.subtype.add(SubType.HUMAN); @@ -37,7 +29,8 @@ public final class MinisterOfPain extends CardImpl { this.addAbility(new ExploitAbility()); // When Minister of Pain explots a creature, creatures your opponents control get -1/-1 until end of turn. - this.addAbility(new ExploitCreatureTriggeredAbility(new BoostAllEffect(-1,-1, Duration.EndOfTurn, filter, false), false)); + this.addAbility(new ExploitCreatureTriggeredAbility( + new BoostAllEffect(-1, -1, Duration.EndOfTurn, StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURES, false))); } diff --git a/Mage.Sets/src/mage/cards/n/NightClubber.java b/Mage.Sets/src/mage/cards/n/NightClubber.java index 545eef322c0..a5157981ebb 100644 --- a/Mage.Sets/src/mage/cards/n/NightClubber.java +++ b/Mage.Sets/src/mage/cards/n/NightClubber.java @@ -9,8 +9,7 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Duration; import mage.constants.SubType; -import mage.filter.common.FilterCreaturePermanent; -import mage.filter.common.FilterOpponentsCreaturePermanent; +import mage.filter.StaticFilters; import java.util.UUID; @@ -19,9 +18,6 @@ import java.util.UUID; */ public final class NightClubber extends CardImpl { - private static final FilterCreaturePermanent filter - = new FilterOpponentsCreaturePermanent("creatures your opponents control"); - public NightClubber(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{B}{B}"); @@ -32,7 +28,7 @@ public final class NightClubber extends CardImpl { // When Night Clubber enters the battlefield, creatures your opponents control get -1/-1 until end of turn. this.addAbility(new EntersBattlefieldTriggeredAbility(new BoostAllEffect( - -1, -1, Duration.EndOfTurn, filter, false + -1, -1, Duration.EndOfTurn, StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURES, false ))); // Blitz {2}{B} diff --git a/Mage.Sets/src/mage/cards/o/ObscuringHaze.java b/Mage.Sets/src/mage/cards/o/ObscuringHaze.java index f9a8e3d4161..feda12621eb 100644 --- a/Mage.Sets/src/mage/cards/o/ObscuringHaze.java +++ b/Mage.Sets/src/mage/cards/o/ObscuringHaze.java @@ -2,24 +2,21 @@ package mage.cards.o; import mage.abilities.condition.common.ControlACommanderCondition; import mage.abilities.costs.AlternativeCostSourceAbility; +import mage.abilities.effects.common.PreventAllDamageByAllPermanentsEffect; import mage.abilities.hint.common.ControlACommanderHint; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Duration; -import mage.filter.common.FilterOpponentsCreaturePermanent; +import mage.filter.StaticFilters; import java.util.UUID; -import mage.abilities.effects.common.PreventAllDamageByAllPermanentsEffect; /** * @author TheElk801 */ public final class ObscuringHaze extends CardImpl { - private static final FilterOpponentsCreaturePermanent filter - = new FilterOpponentsCreaturePermanent("creatures your opponents control"); - public ObscuringHaze(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{2}{G}"); @@ -30,7 +27,7 @@ public final class ObscuringHaze extends CardImpl { // Prevent all damage that would be dealt this turn by creatures your opponents control. this.getSpellAbility().addEffect(new PreventAllDamageByAllPermanentsEffect( - filter, Duration.EndOfTurn, false + StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURES, Duration.EndOfTurn, false )); } diff --git a/Mage.Sets/src/mage/cards/p/ProfitLoss.java b/Mage.Sets/src/mage/cards/p/ProfitLoss.java index af7aeb4544c..099516005f7 100644 --- a/Mage.Sets/src/mage/cards/p/ProfitLoss.java +++ b/Mage.Sets/src/mage/cards/p/ProfitLoss.java @@ -1,4 +1,3 @@ - package mage.cards.p; import java.util.UUID; @@ -9,28 +8,21 @@ import mage.cards.SplitCard; import mage.constants.CardType; import mage.constants.Duration; import mage.constants.SpellAbilityType; -import mage.constants.TargetController; -import mage.filter.common.FilterCreaturePermanent; +import mage.filter.StaticFilters; public final class ProfitLoss extends SplitCard { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Creatures your opponents control"); - - static { - filter.add(TargetController.OPPONENT.getControllerPredicate()); - } - public ProfitLoss(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{1}{W}", "{2}{B}", SpellAbilityType.SPLIT_FUSED); // Profit // Creatures you control get +1/+1 until end of turn. - getLeftHalfCard().getSpellAbility().addEffect(new BoostControlledEffect(1, 1, Duration.EndOfTurn, new FilterCreaturePermanent())); + getLeftHalfCard().getSpellAbility().addEffect(new BoostControlledEffect(1, 1, Duration.EndOfTurn)); // Loss // Creatures your opponents control get -1/-1 until end of turn. - getRightHalfCard().getSpellAbility().addEffect(new BoostAllEffect(-1, -1, Duration.EndOfTurn, filter, false)); - + getRightHalfCard().getSpellAbility().addEffect( + new BoostAllEffect(-1, -1, Duration.EndOfTurn, StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURES, false)); } private ProfitLoss(final ProfitLoss card) { diff --git a/Mage.Sets/src/mage/cards/r/RoilingWaters.java b/Mage.Sets/src/mage/cards/r/RoilingWaters.java index 1cb143e0384..c1888a0a28d 100644 --- a/Mage.Sets/src/mage/cards/r/RoilingWaters.java +++ b/Mage.Sets/src/mage/cards/r/RoilingWaters.java @@ -1,4 +1,3 @@ - package mage.cards.r; import java.util.UUID; @@ -8,10 +7,8 @@ import mage.abilities.effects.common.ReturnToHandTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.constants.TargetController; -import mage.filter.common.FilterCreaturePermanent; import mage.target.TargetPlayer; -import mage.target.common.TargetCreaturePermanent; +import mage.target.common.TargetOpponentsCreaturePermanent; import mage.target.targetpointer.SecondTargetPointer; /** @@ -20,18 +17,12 @@ import mage.target.targetpointer.SecondTargetPointer; */ public final class RoilingWaters extends CardImpl { - private static final FilterCreaturePermanent FILTER = new FilterCreaturePermanent("creatures your opponents control"); - - static { - FILTER.add(TargetController.OPPONENT.getControllerPredicate()); - } - public RoilingWaters(UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{5}{U}{U}"); // Return up to two target creatures your opponents control to their owners' hands. this.getSpellAbility().addEffect(new ReturnToHandTargetEffect()); - this.getSpellAbility().addTarget(new TargetCreaturePermanent(0, 2, FILTER, false)); + this.getSpellAbility().addTarget(new TargetOpponentsCreaturePermanent(0, 2)); // Target player draws two cards. Effect effect = new DrawCardTargetEffect(2); effect.setTargetPointer(new SecondTargetPointer()); diff --git a/Mage.Sets/src/mage/cards/r/RoilmagesTrick.java b/Mage.Sets/src/mage/cards/r/RoilmagesTrick.java index 06cd03fc00d..01592640720 100644 --- a/Mage.Sets/src/mage/cards/r/RoilmagesTrick.java +++ b/Mage.Sets/src/mage/cards/r/RoilmagesTrick.java @@ -1,7 +1,7 @@ - package mage.cards.r; import java.util.UUID; +import mage.abilities.dynamicvalue.DynamicValue; import mage.abilities.dynamicvalue.common.ColorsOfManaSpentToCastCount; import mage.abilities.dynamicvalue.common.SignInversionDynamicValue; import mage.abilities.dynamicvalue.common.StaticValue; @@ -12,8 +12,7 @@ import mage.cards.CardSetInfo; import mage.constants.AbilityWord; import mage.constants.CardType; import mage.constants.Duration; -import mage.constants.TargetController; -import mage.filter.common.FilterCreaturePermanent; +import mage.filter.StaticFilters; /** * @@ -21,23 +20,21 @@ import mage.filter.common.FilterCreaturePermanent; */ public final class RoilmagesTrick extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Creatures your opponents control"); - - static { - filter.add(TargetController.OPPONENT.getControllerPredicate()); - } + private static final DynamicValue xValue = new SignInversionDynamicValue(ColorsOfManaSpentToCastCount.getInstance()); public RoilmagesTrick(UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{3}{U}"); - // Converge — Creatures your opponents control get -X/-0 until end of turn, where X is the number of colors of mana spent to cast Roilmage's Trick. + // Converge — Creatures your opponents control get -X/-0 until end of turn, + // where X is the number of colors of mana spent to cast this spell. this.getSpellAbility().setAbilityWord(AbilityWord.CONVERGE); this.getSpellAbility().addEffect(new BoostAllEffect( - new SignInversionDynamicValue(ColorsOfManaSpentToCastCount.getInstance()), StaticValue.get(-0), Duration.EndOfTurn, filter, false, - "Creatures your opponents control get -X/-0 until end of turn, where X is the number of colors of mana spent to cast this spell.
", true)); + xValue, StaticValue.get(0), Duration.EndOfTurn, + StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURES, false, null, true + )); // Draw a card. - this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1)); + this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1).concatBy("
")); } private RoilmagesTrick(final RoilmagesTrick card) { diff --git a/Mage.Sets/src/mage/cards/r/RoninWarclub.java b/Mage.Sets/src/mage/cards/r/RoninWarclub.java index 9abbde787c3..70ac5ef13f5 100644 --- a/Mage.Sets/src/mage/cards/r/RoninWarclub.java +++ b/Mage.Sets/src/mage/cards/r/RoninWarclub.java @@ -1,41 +1,34 @@ package mage.cards.r; -import mage.abilities.Ability; -import mage.abilities.TriggeredAbilityImpl; +import mage.abilities.common.EntersBattlefieldControlledTriggeredAbility; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.costs.mana.GenericManaCost; -import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.AttachEffect; import mage.abilities.effects.common.continuous.BoostEquippedEffect; import mage.abilities.keyword.EquipAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.Outcome; -import mage.constants.SubType; -import mage.constants.Zone; -import mage.game.Game; -import mage.game.events.GameEvent; -import mage.game.permanent.Permanent; -import mage.target.Target; -import mage.target.common.TargetCreaturePermanent; +import mage.constants.*; +import mage.filter.StaticFilters; import java.util.UUID; /** - * @author LevelX2 + * @author awjackson */ public final class RoninWarclub extends CardImpl { public RoninWarclub(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{3}"); this.subtype.add(SubType.EQUIPMENT); + // Equipped creature gets +2/+1. - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEquippedEffect(2, 1))); + this.addAbility(new SimpleStaticAbility(new BoostEquippedEffect(2, 1))); // Whenever a creature enters the battlefield under your control, attach Ronin Warclub to that creature. - Ability ability = new RoninWarclubTriggeredAbility(); - ability.addTarget(new TargetCreaturePermanent()); - this.addAbility(ability); + this.addAbility(new EntersBattlefieldControlledTriggeredAbility( + Zone.BATTLEFIELD, new AttachEffect(Outcome.BoostCreature, "attach {this} to that creature"), + StaticFilters.FILTER_PERMANENT_A_CREATURE, false, SetTargetPointer.PERMANENT, null)); // Equip {5} ({5}: Attach to target creature you control. Equip only as a sorcery.) this.addAbility(new EquipAbility(Outcome.BoostCreature, new GenericManaCost(5))); @@ -49,84 +42,4 @@ public final class RoninWarclub extends CardImpl { public RoninWarclub copy() { return new RoninWarclub(this); } - - private class RoninWarclubTriggeredAbility extends TriggeredAbilityImpl { - - public RoninWarclubTriggeredAbility() { - super(Zone.BATTLEFIELD, new RoninWarclubAttachEffect(), false); - } - - public RoninWarclubTriggeredAbility(RoninWarclubTriggeredAbility ability) { - super(ability); - } - - @Override - public boolean checkEventType(GameEvent event, Game game) { - return event.getType() == GameEvent.EventType.ENTERS_THE_BATTLEFIELD; - } - - @Override - public boolean checkTrigger(GameEvent event, Game game) { - Permanent permanent = game.getPermanent(event.getTargetId()); - if (permanent != null - && permanent.isCreature(game) - && permanent.isControlledBy(this.controllerId)) { - - if (!this.getTargets().isEmpty()) { - // remove previous target - if (!this.getTargets().get(0).getTargets().isEmpty()) { - this.getTargets().clear(); - this.addTarget(new TargetCreaturePermanent()); - } - Target target = this.getTargets().get(0); - if (target instanceof TargetCreaturePermanent) { - target.add(event.getTargetId(), game); - } - } - return true; - } - return false; - } - - @Override - public RoninWarclubTriggeredAbility copy() { - return new RoninWarclubTriggeredAbility(this); - } - } - - private static class RoninWarclubAttachEffect extends OneShotEffect { - - public RoninWarclubAttachEffect() { - super(Outcome.BoostCreature); - this.staticText = "Whenever a creature enters the battlefield under your control, attach {this} to that creature"; - } - - public RoninWarclubAttachEffect(final RoninWarclubAttachEffect effect) { - super(effect); - } - - @Override - public RoninWarclubAttachEffect copy() { - return new RoninWarclubAttachEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - Permanent permanent = game.getPermanent(source.getFirstTarget()); - Permanent attachment = game.getPermanent(source.getSourceId()); - if (permanent != null && attachment != null) { - if (attachment.getAttachedTo() != null) { - Permanent oldTarget = game.getPermanent(attachment.getAttachedTo()); - if (oldTarget != null) { - oldTarget.removeAttachment(source.getSourceId(), source, game); - } - } - boolean result; - result = permanent.addAttachment(source.getSourceId(), source, game); - return result; - } - return false; - } - } - } diff --git a/Mage.Sets/src/mage/cards/s/SubjugatorAngel.java b/Mage.Sets/src/mage/cards/s/SubjugatorAngel.java index bd8a9e69990..41b0f2ef202 100644 --- a/Mage.Sets/src/mage/cards/s/SubjugatorAngel.java +++ b/Mage.Sets/src/mage/cards/s/SubjugatorAngel.java @@ -1,4 +1,3 @@ - package mage.cards.s; import java.util.UUID; @@ -10,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.FilterCreaturePermanent; +import mage.filter.StaticFilters; /** * @@ -19,12 +17,6 @@ import mage.filter.common.FilterCreaturePermanent; */ public final class SubjugatorAngel extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creatures your opponents control"); - - static { - filter.add(TargetController.OPPONENT.getControllerPredicate()); - } - public SubjugatorAngel(UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{4}{W}{W}"); this.subtype.add(SubType.ANGEL); @@ -35,7 +27,7 @@ public final class SubjugatorAngel extends CardImpl { this.addAbility(FlyingAbility.getInstance()); // When Subjugator Angel enters the battlefield, tap all creatures your opponents control. - this.addAbility(new EntersBattlefieldTriggeredAbility(new TapAllEffect(filter))); + this.addAbility(new EntersBattlefieldTriggeredAbility(new TapAllEffect(StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURES))); } private SubjugatorAngel(final SubjugatorAngel card) { diff --git a/Mage.Sets/src/mage/cards/s/SuffocatingFumes.java b/Mage.Sets/src/mage/cards/s/SuffocatingFumes.java index b3821fba0de..47433c982a1 100644 --- a/Mage.Sets/src/mage/cards/s/SuffocatingFumes.java +++ b/Mage.Sets/src/mage/cards/s/SuffocatingFumes.java @@ -1,14 +1,13 @@ package mage.cards.s; -import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.costs.mana.GenericManaCost; import mage.abilities.effects.common.continuous.BoostAllEffect; import mage.abilities.keyword.CyclingAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Duration; -import mage.filter.common.FilterCreaturePermanent; -import mage.filter.common.FilterOpponentsCreaturePermanent; +import mage.filter.StaticFilters; import java.util.UUID; @@ -17,19 +16,16 @@ import java.util.UUID; */ public final class SuffocatingFumes extends CardImpl { - private static final FilterCreaturePermanent filter - = new FilterOpponentsCreaturePermanent("creatures your opponents control"); - public SuffocatingFumes(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{2}{B}"); // Creatures your opponents control get -1/-1 until end of turn. this.getSpellAbility().addEffect(new BoostAllEffect( - -1, -1, Duration.EndOfTurn, filter, false + -1, -1, Duration.EndOfTurn, StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURES, false )); // Cycling {2} - this.addAbility(new CyclingAbility(new ManaCostsImpl("{2}"))); + this.addAbility(new CyclingAbility(new GenericManaCost(2))); } private SuffocatingFumes(final SuffocatingFumes card) { diff --git a/Mage.Sets/src/mage/cards/t/ThantisTheWarweaver.java b/Mage.Sets/src/mage/cards/t/ThantisTheWarweaver.java index dc578625118..18417ac284f 100644 --- a/Mage.Sets/src/mage/cards/t/ThantisTheWarweaver.java +++ b/Mage.Sets/src/mage/cards/t/ThantisTheWarweaver.java @@ -14,7 +14,6 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Duration; -import mage.constants.Zone; import mage.counters.CounterType; import mage.filter.StaticFilters; @@ -39,13 +38,7 @@ public final class ThantisTheWarweaver extends CardImpl { this.addAbility(ReachAbility.getInstance()); // All creatures attack each combat if able. - this.addAbility(new SimpleStaticAbility( - Zone.BATTLEFIELD, - new AttacksIfAbleAllEffect( - StaticFilters.FILTER_PERMANENT_CREATURES, - Duration.WhileOnBattlefield, true - ).setText("All creatures attack each combat if able") - )); + this.addAbility(new SimpleStaticAbility(new AttacksIfAbleAllEffect(StaticFilters.FILTER_PERMANENT_ALL_CREATURES))); // Whenever a creature attacks you or a planeswalker you control, put a +1/+1 counter on Thantis the Warweaver. this.addAbility(new AttacksAllTriggeredAbility( diff --git a/Mage.Sets/src/mage/cards/t/TheAkroanWar.java b/Mage.Sets/src/mage/cards/t/TheAkroanWar.java index 8ee54a17572..64837eddb37 100644 --- a/Mage.Sets/src/mage/cards/t/TheAkroanWar.java +++ b/Mage.Sets/src/mage/cards/t/TheAkroanWar.java @@ -10,8 +10,8 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.*; import mage.filter.FilterPermanent; +import mage.filter.StaticFilters; import mage.filter.common.FilterCreaturePermanent; -import mage.filter.common.FilterOpponentsCreaturePermanent; import mage.filter.predicate.permanent.TappedPredicate; import mage.game.Game; import mage.target.common.TargetCreaturePermanent; @@ -24,9 +24,6 @@ import mage.abilities.condition.common.SourceRemainsInZoneCondition; */ public final class TheAkroanWar extends CardImpl { - private static final FilterCreaturePermanent filter - = new FilterOpponentsCreaturePermanent("creatures your opponents control"); - public TheAkroanWar(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{3}{R}"); @@ -51,9 +48,7 @@ public final class TheAkroanWar extends CardImpl { sagaAbility.addChapterEffect( this, SagaChapter.CHAPTER_II, - new AttacksIfAbleAllEffect( - filter, Duration.UntilYourNextTurn, true - ).setText("until your next turn, creatures your opponents control attack each combat if able") + new AttacksIfAbleAllEffect(StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURES, Duration.UntilYourNextTurn) ); // III — Each tapped creature deals damage to itself equal to its power. @@ -101,4 +96,4 @@ class TheAkroanWarEffect extends OneShotEffect { .forEach(permanent -> permanent.damage(permanent.getPower().getValue(), permanent.getId(), source, game)); return true; } -} \ No newline at end of file +} diff --git a/Mage.Sets/src/mage/cards/t/ThwartTheEnemy.java b/Mage.Sets/src/mage/cards/t/ThwartTheEnemy.java index b3678828617..533fe434b34 100644 --- a/Mage.Sets/src/mage/cards/t/ThwartTheEnemy.java +++ b/Mage.Sets/src/mage/cards/t/ThwartTheEnemy.java @@ -5,8 +5,7 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Duration; -import mage.filter.FilterObject; -import mage.filter.common.FilterOpponentsCreaturePermanent; +import mage.filter.StaticFilters; import java.util.UUID; @@ -15,15 +14,12 @@ import java.util.UUID; */ public final class ThwartTheEnemy extends CardImpl { - private static final FilterObject filter - = new FilterOpponentsCreaturePermanent("creatures your opponents control"); - public ThwartTheEnemy(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{2}{G}"); // Prevent all damage that would be dealt this turn by creatures your opponents control. this.getSpellAbility().addEffect(new PreventAllDamageByAllObjectsEffect( - filter, Duration.EndOfTurn, false + StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURES, Duration.EndOfTurn, false )); } diff --git a/Mage.Sets/src/mage/cards/u/UnnervingAssault.java b/Mage.Sets/src/mage/cards/u/UnnervingAssault.java index 4e03b96d641..200334dccb1 100644 --- a/Mage.Sets/src/mage/cards/u/UnnervingAssault.java +++ b/Mage.Sets/src/mage/cards/u/UnnervingAssault.java @@ -1,4 +1,3 @@ - package mage.cards.u; import java.util.UUID; @@ -6,13 +5,13 @@ import mage.abilities.condition.common.ManaWasSpentCondition; import mage.abilities.decorator.ConditionalContinuousEffect; import mage.abilities.effects.common.InfoEffect; import mage.abilities.effects.common.continuous.BoostAllEffect; +import mage.abilities.effects.common.continuous.BoostControlledEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.ColoredManaSymbol; import mage.constants.Duration; -import mage.constants.TargetController; -import mage.filter.common.FilterCreaturePermanent; +import mage.filter.StaticFilters; /** * @@ -21,23 +20,15 @@ import mage.filter.common.FilterCreaturePermanent; */ public final class UnnervingAssault extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Creatures your opponents control"); - private static final FilterCreaturePermanent filter2 = new FilterCreaturePermanent("creatures you control"); - - static { - filter.add(TargetController.OPPONENT.getControllerPredicate()); - filter2.add(TargetController.YOU.getControllerPredicate()); - } - public UnnervingAssault(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{2}{U/R}"); // Creatures your opponents control get -1/-0 until end of turn if {U} was spent to cast Unnerving Assault, and creatures you control get +1/+0 until end of turn if {R} was spent to cast it. this.getSpellAbility().addEffect(new ConditionalContinuousEffect( - new BoostAllEffect(-1, 0, Duration.EndOfTurn, filter, false), + new BoostAllEffect(-1, 0, Duration.EndOfTurn, StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURES, false), new ManaWasSpentCondition(ColoredManaSymbol.U), "Creatures your opponents control get -1/-0 until end of turn if {U} was spent to cast this spell,")); this.getSpellAbility().addEffect(new ConditionalContinuousEffect( - new BoostAllEffect(1, 0, Duration.EndOfTurn, filter2, false), + new BoostControlledEffect(1, 0, Duration.EndOfTurn), new ManaWasSpentCondition(ColoredManaSymbol.R), " and creatures you control get +1/+0 until end of turn if {R} was spent to cast this spell")); this.getSpellAbility().addEffect(new InfoEffect("(Do both if {U}{R} was spent.)")); diff --git a/Mage.Sets/src/mage/cards/w/WakerOfWaves.java b/Mage.Sets/src/mage/cards/w/WakerOfWaves.java index 5edb03419ca..fd0ab8f41ee 100644 --- a/Mage.Sets/src/mage/cards/w/WakerOfWaves.java +++ b/Mage.Sets/src/mage/cards/w/WakerOfWaves.java @@ -12,7 +12,7 @@ import mage.abilities.effects.common.continuous.BoostAllEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.*; -import mage.filter.common.FilterCreaturePermanent; +import mage.filter.StaticFilters; import java.util.UUID; @@ -22,12 +22,6 @@ import java.util.UUID; */ public final class WakerOfWaves extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Creatures your opponents control"); - - static { - filter.add(TargetController.OPPONENT.getControllerPredicate()); - } - public WakerOfWaves(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{5}{U}{U}"); this.subtype.add(SubType.WHALE); @@ -36,7 +30,8 @@ public final class WakerOfWaves extends CardImpl { this.toughness = new MageInt(7); // Creatures your opponents control get -1/-0. - this.addAbility(new SimpleStaticAbility(new BoostAllEffect(-1, -0, Duration.WhileOnBattlefield, filter, false))); + this.addAbility(new SimpleStaticAbility( + new BoostAllEffect(-1, -0, Duration.WhileOnBattlefield, StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURES, false))); // {1}{U}, Discard Waker of Waves: Look at the top two cards of your library. Put one of them into your hand and the other into your graveyard. Ability ability = new SimpleActivatedAbility(Zone.HAND, diff --git a/Mage.Sets/src/mage/cards/w/WarmongerHellkite.java b/Mage.Sets/src/mage/cards/w/WarmongerHellkite.java index 87cc9ce01d9..a29a363f0a0 100644 --- a/Mage.Sets/src/mage/cards/w/WarmongerHellkite.java +++ b/Mage.Sets/src/mage/cards/w/WarmongerHellkite.java @@ -33,7 +33,7 @@ public final class WarmongerHellkite extends CardImpl { this.addAbility(FlyingAbility.getInstance()); // All creatures attack each combat if able. - this.addAbility(new SimpleStaticAbility(new AttacksIfAbleAllEffect(StaticFilters.FILTER_PERMANENT_ALL_CREATURES, Duration.WhileOnBattlefield, true))); + this.addAbility(new SimpleStaticAbility(new AttacksIfAbleAllEffect(StaticFilters.FILTER_PERMANENT_ALL_CREATURES))); // {1}{R}: Attacking creatures get +1/+0 until end of turn. this.addAbility(new SimpleActivatedAbility(new BoostAllEffect(1, 0, Duration.EndOfTurn, StaticFilters.FILTER_ATTACKING_CREATURES, false), new ManaCostsImpl("{1}{R}"))); diff --git a/Mage.Sets/src/mage/cards/w/WindsOfQalSisma.java b/Mage.Sets/src/mage/cards/w/WindsOfQalSisma.java index 6deb207485c..8c3e1c7ba66 100644 --- a/Mage.Sets/src/mage/cards/w/WindsOfQalSisma.java +++ b/Mage.Sets/src/mage/cards/w/WindsOfQalSisma.java @@ -10,8 +10,7 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Duration; -import mage.constants.TargetController; -import mage.filter.common.FilterCreaturePermanent; +import mage.filter.StaticFilters; import java.util.UUID; @@ -20,19 +19,13 @@ import java.util.UUID; */ public final class WindsOfQalSisma extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creatures your opponents control"); - - static { - filter.add(TargetController.OPPONENT.getControllerPredicate()); - } - public WindsOfQalSisma(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{1}{G}"); // Prevent all combat damage that would be dealt this turn. // Ferocious - If you control a creature with power 4 or greater, instead prevent all combat damage that would be dealt this turn by creatures your opponents control. Effect effect = new ConditionalReplacementEffect( - new PreventAllDamageByAllPermanentsEffect(filter, Duration.EndOfTurn, true), + new PreventAllDamageByAllPermanentsEffect(StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURES, Duration.EndOfTurn, true), new LockedInCondition(FerociousCondition.instance), new PreventAllDamageByAllPermanentsEffect(Duration.EndOfTurn, true)); effect.setText("Prevent all combat damage that would be dealt this turn.
" + diff --git a/Mage/src/main/java/mage/abilities/common/EntersBattlefieldControlledTriggeredAbility.java b/Mage/src/main/java/mage/abilities/common/EntersBattlefieldControlledTriggeredAbility.java index 0d273a2c80e..7a0f5accc27 100644 --- a/Mage/src/main/java/mage/abilities/common/EntersBattlefieldControlledTriggeredAbility.java +++ b/Mage/src/main/java/mage/abilities/common/EntersBattlefieldControlledTriggeredAbility.java @@ -51,11 +51,11 @@ public class EntersBattlefieldControlledTriggeredAbility extends EntersBattlefie @Override public boolean checkTrigger(GameEvent event, Game game) { - if (super.checkTrigger(event, game)) { - Permanent permanent = game.getPermanent(event.getTargetId()); - return permanent != null && permanent.isControlledBy(this.getControllerId()); + Permanent permanent = game.getPermanent(event.getTargetId()); + if (permanent == null || !permanent.isControlledBy(getControllerId())) { + return false; } - return false; + return super.checkTrigger(event, game); } @Override diff --git a/Mage/src/main/java/mage/abilities/effects/common/DetainTargetEffect.java b/Mage/src/main/java/mage/abilities/effects/common/DetainTargetEffect.java index b4e169e8075..a709bc94b18 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/DetainTargetEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/DetainTargetEffect.java @@ -79,14 +79,14 @@ public class DetainTargetEffect extends OneShotEffect { sb.append("detain up to ").append(CardUtil.numberToText(target.getMaxNumberOfTargets())).append(" target ").append(target.getTargetName()); } sb.append(". (Until your next turn, "); - - if (target instanceof TargetCreaturePermanent) { - sb.append(target.getMaxNumberOfTargets() == 1 ? "that creature" : "those creatures"); - } else { - sb.append(target.getMaxNumberOfTargets() == 1 ? "that permanent" : "those permanents"); + boolean plural = target.getMaxNumberOfTargets() > 1; + sb.append(plural ? "those " : "that "); + sb.append(target.getTargetName().contains("creature") ? "creature" : "permanent"); + if (plural) { + sb.append('s'); } sb.append(" can't attack or block and "); - sb.append(target.getMaxNumberOfTargets() == 1 ? "its" : "their"); + sb.append(plural ? "their" : "its"); sb.append(" activated abilities can't be activated.)"); return sb.toString(); } diff --git a/Mage/src/main/java/mage/abilities/effects/common/PreventAllDamageByAllPermanentsEffect.java b/Mage/src/main/java/mage/abilities/effects/common/PreventAllDamageByAllPermanentsEffect.java index 1668c1a976d..131abbd49c9 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/PreventAllDamageByAllPermanentsEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/PreventAllDamageByAllPermanentsEffect.java @@ -5,9 +5,7 @@ import mage.abilities.Ability; import mage.abilities.Mode; import mage.abilities.effects.PreventionEffectImpl; import mage.constants.Duration; -import static mage.constants.Duration.EndOfTurn; import mage.filter.FilterPermanent; -import mage.filter.common.FilterCreaturePermanent; import mage.game.Game; import mage.game.events.DamageEvent; import mage.game.events.GameEvent; @@ -29,7 +27,7 @@ public class PreventAllDamageByAllPermanentsEffect extends PreventionEffectImpl this(null, duration, onlyCombat); } - public PreventAllDamageByAllPermanentsEffect(FilterCreaturePermanent filter, Duration duration, boolean onlyCombat) { + public PreventAllDamageByAllPermanentsEffect(FilterPermanent filter, Duration duration, boolean onlyCombat) { super(duration, Integer.MAX_VALUE, onlyCombat); this.filter = filter; } @@ -68,24 +66,17 @@ public class PreventAllDamageByAllPermanentsEffect extends PreventionEffectImpl if (staticText != null && !staticText.isEmpty()) { return staticText; } - StringBuilder sb = new StringBuilder("Prevent all "); + StringBuilder sb = new StringBuilder("prevent all "); if (onlyCombat) { sb.append("combat "); } - sb.append("damage "); - if (duration == EndOfTurn) { - if (filter != null) { - sb.append(filter.getMessage()); - sb.append(" would deal this turn"); - } else { - sb.append("that would be dealt this turn"); - } - } else { - sb.append(duration.toString()); - if (filter != null) { - sb.append(" dealt by "); - sb.append(filter.getMessage()); - } + sb.append("damage that would be dealt"); + if (duration == Duration.EndOfTurn) { + sb.append(" this turn"); + } + if (filter != null) { + sb.append(" by "); + sb.append(filter.getMessage()); } return sb.toString(); } diff --git a/Mage/src/main/java/mage/abilities/effects/common/TapAllEffect.java b/Mage/src/main/java/mage/abilities/effects/common/TapAllEffect.java index fd68f43db37..63e856998ea 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/TapAllEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/TapAllEffect.java @@ -1,5 +1,3 @@ - - package mage.abilities.effects.common; import mage.constants.Outcome; @@ -9,8 +7,6 @@ import mage.filter.FilterPermanent; import mage.game.Game; import mage.game.permanent.Permanent; - - /** * * @author LevelX2 @@ -22,7 +18,7 @@ public class TapAllEffect extends OneShotEffect { public TapAllEffect(FilterPermanent filter) { super(Outcome.Tap); this.filter = filter; - setText(); + staticText = "tap all " + filter.getMessage(); } public TapAllEffect(final TapAllEffect effect) { @@ -42,9 +38,4 @@ public class TapAllEffect extends OneShotEffect { } return true; } - - private void setText() { - staticText = "tap all " + filter.getMessage(); - } - } diff --git a/Mage/src/main/java/mage/abilities/effects/common/combat/AttacksIfAbleAllEffect.java b/Mage/src/main/java/mage/abilities/effects/common/combat/AttacksIfAbleAllEffect.java index b0806b06ee5..44467a503d1 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/combat/AttacksIfAbleAllEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/combat/AttacksIfAbleAllEffect.java @@ -4,7 +4,7 @@ import mage.MageObjectReference; import mage.abilities.Ability; import mage.abilities.effects.RequirementEffect; import mage.constants.Duration; -import mage.filter.common.FilterCreaturePermanent; +import mage.filter.FilterPermanent; import mage.game.Game; import mage.game.permanent.Permanent; import mage.watchers.common.AttackedThisTurnWatcher; @@ -15,26 +15,27 @@ import mage.watchers.common.AttackedThisTurnWatcher; */ public class AttacksIfAbleAllEffect extends RequirementEffect { - private final FilterCreaturePermanent filter; + private final FilterPermanent filter; + private boolean eachCombat; - public AttacksIfAbleAllEffect(FilterCreaturePermanent filter) { + public AttacksIfAbleAllEffect(FilterPermanent filter) { this(filter, Duration.WhileOnBattlefield); } - boolean eachCombat; - - public AttacksIfAbleAllEffect(FilterCreaturePermanent filter, Duration duration) { - this(filter, duration, false); - } - - public AttacksIfAbleAllEffect(FilterCreaturePermanent filter, Duration duration, boolean eachCombat) { + public AttacksIfAbleAllEffect(FilterPermanent filter, Duration duration) { super(duration); this.filter = filter; - this.eachCombat = eachCombat; if (this.duration == Duration.EndOfTurn) { - staticText = filter.getMessage() + " attack " + (eachCombat ? "each combat" : "this turn") + " if able"; + eachCombat = false; + staticText = filter.getMessage() + " attack this turn if able"; } else { - staticText = filter.getMessage() + " attack each " + (eachCombat ? "combat" : "turn") + " if able"; + eachCombat = true; + String durationString = this.duration.toString(); + if (durationString.isEmpty()) { + staticText = filter.getMessage() + " attack each combat if able"; + } else { + staticText = durationString + ", " + filter.getMessage() + " attack each combat if able"; + } } } diff --git a/Mage/src/main/java/mage/abilities/effects/common/combat/BlocksIfAbleAllEffect.java b/Mage/src/main/java/mage/abilities/effects/common/combat/BlocksIfAbleAllEffect.java index 44d10f094c7..36427942acc 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/combat/BlocksIfAbleAllEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/combat/BlocksIfAbleAllEffect.java @@ -1,4 +1,3 @@ - package mage.abilities.effects.common.combat; import mage.abilities.Ability; @@ -23,11 +22,8 @@ public class BlocksIfAbleAllEffect extends RequirementEffect { public BlocksIfAbleAllEffect(FilterCreaturePermanent filter, Duration duration) { super(duration); - staticText = new StringBuilder(filter.getMessage()) - .append(" block ") - .append(duration == Duration.EndOfTurn ? "this":"each") - .append(" turn if able").toString(); this.filter = filter; + staticText = filter.getMessage() + " block " + (duration == Duration.EndOfTurn ? "this turn" : "each combat") + " if able"; } public BlocksIfAbleAllEffect(final BlocksIfAbleAllEffect effect) { super(effect); @@ -58,7 +54,4 @@ public class BlocksIfAbleAllEffect extends RequirementEffect { public boolean mustAttack(Game game) { return false; } - - - } diff --git a/Mage/src/main/java/mage/abilities/effects/common/continuous/CreaturesCantGetOrHaveAbilityEffect.java b/Mage/src/main/java/mage/abilities/effects/common/continuous/CreaturesCantGetOrHaveAbilityEffect.java index 40b37117d15..8f2452ea78e 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/continuous/CreaturesCantGetOrHaveAbilityEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/continuous/CreaturesCantGetOrHaveAbilityEffect.java @@ -1,4 +1,3 @@ - package mage.abilities.effects.common.continuous; import mage.abilities.Ability; @@ -8,6 +7,7 @@ import mage.constants.Duration; import mage.constants.Layer; import mage.constants.Outcome; import mage.constants.SubLayer; +import mage.filter.StaticFilters; import mage.filter.common.FilterCreaturePermanent; import mage.game.Game; import mage.game.permanent.Permanent; @@ -22,11 +22,15 @@ public class CreaturesCantGetOrHaveAbilityEffect extends ContinuousEffectImpl { private final Ability ability; private final FilterCreaturePermanent filter; + public CreaturesCantGetOrHaveAbilityEffect(Ability ability, Duration duration) { + this(ability, duration, StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURES); + } + public CreaturesCantGetOrHaveAbilityEffect(Ability ability, Duration duration, FilterCreaturePermanent filter) { super(duration, Outcome.Detriment); this.ability = ability; this.filter = filter; - setText(); + staticText = filter.getMessage() + " lose " + ability.getRule() + " and can't have or gain " + ability.getRule(); addDependedToType(DependencyType.AddingAbility); } @@ -65,14 +69,4 @@ public class CreaturesCantGetOrHaveAbilityEffect extends ContinuousEffectImpl { public boolean hasLayer(Layer layer) { return layer == Layer.AbilityAddingRemovingEffects_6; } - - private void setText() { - StringBuilder sb = new StringBuilder(); - sb.append(filter.getMessage()); - sb.append(" lose "); - sb.append(ability.getRule()); - sb.append(" can't have or gain "); - sb.append(ability.getRule()); - staticText = sb.toString(); - } } diff --git a/Mage/src/main/java/mage/filter/StaticFilters.java b/Mage/src/main/java/mage/filter/StaticFilters.java index 0ad8c90125b..d4d03cb0aee 100644 --- a/Mage/src/main/java/mage/filter/StaticFilters.java +++ b/Mage/src/main/java/mage/filter/StaticFilters.java @@ -433,17 +433,15 @@ public final class StaticFilters { FILTER_OPPONENTS_PERMANENT.setLockedFilter(true); } - public static final FilterCreaturePermanent FILTER_OPPONENTS_PERMANENT_CREATURE = new FilterCreaturePermanent("creature an opponent controls"); + public static final FilterCreaturePermanent FILTER_OPPONENTS_PERMANENT_CREATURE = new FilterOpponentsCreaturePermanent(); static { - FILTER_OPPONENTS_PERMANENT_CREATURE.add(TargetController.OPPONENT.getControllerPredicate()); FILTER_OPPONENTS_PERMANENT_CREATURE.setLockedFilter(true); } - public static final FilterCreaturePermanent FILTER_OPPONENTS_PERMANENT_CREATURES = new FilterCreaturePermanent("creatures an opponent controls"); + public static final FilterCreaturePermanent FILTER_OPPONENTS_PERMANENT_CREATURES = new FilterOpponentsCreaturePermanent("creatures your opponents control"); static { - FILTER_OPPONENTS_PERMANENT_CREATURES.add(TargetController.OPPONENT.getControllerPredicate()); FILTER_OPPONENTS_PERMANENT_CREATURES.setLockedFilter(true); } diff --git a/Mage/src/main/java/mage/game/permanent/token/PursuedWhaleToken.java b/Mage/src/main/java/mage/game/permanent/token/PursuedWhaleToken.java index e29e4920e70..21b95780a38 100644 --- a/Mage/src/main/java/mage/game/permanent/token/PursuedWhaleToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/PursuedWhaleToken.java @@ -7,8 +7,7 @@ import mage.abilities.effects.common.combat.CantBlockSourceEffect; import mage.constants.CardType; import mage.constants.Duration; import mage.constants.SubType; -import mage.constants.TargetController; -import mage.filter.common.FilterCreaturePermanent; +import mage.filter.StaticFilters; import java.util.Arrays; @@ -17,12 +16,6 @@ import java.util.Arrays; */ public final class PursuedWhaleToken extends TokenImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creatures you control"); - - static { - filter.add(TargetController.YOU.getControllerPredicate()); - } - public PursuedWhaleToken() { super("Pirate Token", "1/1 red Pirate creature token with \"This creature can't block\" and \"Creatures you control attack each combat if able.\""); cardType.add(CardType.CREATURE); @@ -33,9 +26,7 @@ public final class PursuedWhaleToken extends TokenImpl { this.addAbility(new SimpleStaticAbility(new CantBlockSourceEffect(Duration.WhileOnBattlefield) .setText("this creature can't block"))); - this.addAbility(new SimpleStaticAbility(new AttacksIfAbleAllEffect( - filter, Duration.WhileOnBattlefield, true - ))); + this.addAbility(new SimpleStaticAbility(new AttacksIfAbleAllEffect(StaticFilters.FILTER_CONTROLLED_CREATURES))); availableImageSetCodes = Arrays.asList("M21"); } diff --git a/Mage/src/main/java/mage/game/permanent/token/SpyMasterGoblinToken.java b/Mage/src/main/java/mage/game/permanent/token/SpyMasterGoblinToken.java index 1b7c41f1bed..6dbf66a3124 100644 --- a/Mage/src/main/java/mage/game/permanent/token/SpyMasterGoblinToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/SpyMasterGoblinToken.java @@ -1,16 +1,13 @@ - - package mage.game.permanent.token; -import mage.constants.CardType; -import mage.constants.SubType; + import mage.MageInt; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.effects.Effect; import mage.abilities.effects.common.combat.AttacksIfAbleAllEffect; +import mage.constants.CardType; import mage.constants.Duration; -import mage.constants.TargetController; -import mage.constants.Zone; -import mage.filter.common.FilterCreaturePermanent; +import mage.constants.SubType; +import mage.filter.StaticFilters; /** * @@ -18,12 +15,6 @@ import mage.filter.common.FilterCreaturePermanent; */ public final class SpyMasterGoblinToken extends TokenImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Creatures you control"); - - static { - filter.add(TargetController.YOU.getControllerPredicate()); - } - public SpyMasterGoblinToken() { super("Goblin Token", "1/1 red Goblin creature token with \"Creatures you control attack each combat if able.\""); cardType.add(CardType.CREATURE); @@ -32,8 +23,7 @@ public final class SpyMasterGoblinToken extends TokenImpl { power = new MageInt(1); toughness = new MageInt(1); - Effect effect = new AttacksIfAbleAllEffect(filter, Duration.WhileOnBattlefield, true); - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, effect)); + this.addAbility(new SimpleStaticAbility(new AttacksIfAbleAllEffect(StaticFilters.FILTER_CONTROLLED_CREATURES))); } public SpyMasterGoblinToken(final SpyMasterGoblinToken token) { diff --git a/Mage/src/main/java/mage/target/common/TargetOpponentsCreaturePermanent.java b/Mage/src/main/java/mage/target/common/TargetOpponentsCreaturePermanent.java index c8579d9c186..7e3cc12a30e 100644 --- a/Mage/src/main/java/mage/target/common/TargetOpponentsCreaturePermanent.java +++ b/Mage/src/main/java/mage/target/common/TargetOpponentsCreaturePermanent.java @@ -1,32 +1,24 @@ package mage.target.common; -import mage.filter.common.FilterOpponentsCreaturePermanent; +import mage.filter.StaticFilters; +import mage.target.TargetPermanent; /** * - * @author Styxo + * @author awjackson */ -public class TargetOpponentsCreaturePermanent extends TargetCreaturePermanent { +public class TargetOpponentsCreaturePermanent extends TargetPermanent { public TargetOpponentsCreaturePermanent() { - this(1, 1, new FilterOpponentsCreaturePermanent(), false); + this(1); } public TargetOpponentsCreaturePermanent(int numTargets) { - this(numTargets, numTargets, new FilterOpponentsCreaturePermanent(), false); + this(numTargets, numTargets); } public TargetOpponentsCreaturePermanent(int minNumTargets, int maxNumTargets) { - this(minNumTargets, maxNumTargets, new FilterOpponentsCreaturePermanent(), false); - } - - public TargetOpponentsCreaturePermanent(FilterOpponentsCreaturePermanent filter) { - super(1, 1, filter, false); - } - - public TargetOpponentsCreaturePermanent(int minNumTargets, int maxNumTargets, FilterOpponentsCreaturePermanent filter, boolean notTarget) { - super(minNumTargets, maxNumTargets, filter, notTarget); - this.targetName = filter.getMessage(); + super(minNumTargets, maxNumTargets, maxNumTargets > 1 ? StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURES : StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURE); } public TargetOpponentsCreaturePermanent(final TargetOpponentsCreaturePermanent target) {