diff --git a/Mage.Sets/src/mage/cards/a/AerialModification.java b/Mage.Sets/src/mage/cards/a/AerialModification.java index 2aced485449..e52857453ab 100644 --- a/Mage.Sets/src/mage/cards/a/AerialModification.java +++ b/Mage.Sets/src/mage/cards/a/AerialModification.java @@ -1,10 +1,7 @@ - package mage.cards.a; -import java.util.UUID; import mage.abilities.Ability; import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.effects.Effect; import mage.abilities.effects.common.AttachEffect; import mage.abilities.effects.common.continuous.BecomesCreatureIfVehicleEffect; import mage.abilities.effects.common.continuous.BoostEnchantedEffect; @@ -13,46 +10,39 @@ import mage.abilities.keyword.EnchantAbility; import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; -import mage.constants.*; -import mage.filter.FilterPermanent; -import mage.filter.predicate.Predicates; +import mage.constants.AttachmentType; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.SubType; +import mage.filter.StaticFilters; import mage.target.TargetPermanent; +import java.util.UUID; + /** - * * @author Styxo */ public final class AerialModification extends CardImpl { - private static final FilterPermanent filter = new FilterPermanent("creature or Vehicle"); - - static { - filter.add(Predicates.or(CardType.CREATURE.getPredicate(), - SubType.VEHICLE.getPredicate())); - } - public AerialModification(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{4}{W}"); this.subtype.add(SubType.AURA); // Enchant creature or Vehicle - TargetPermanent auraTarget = new TargetPermanent(filter); + TargetPermanent auraTarget = new TargetPermanent(StaticFilters.FILTER_PERMANENT_CREATURE_OR_VEHICLE); this.getSpellAbility().addTarget(auraTarget); this.getSpellAbility().addEffect(new AttachEffect(Outcome.Benefit)); - Ability ability = new EnchantAbility(auraTarget); - this.addAbility(ability); + this.addAbility(new EnchantAbility(auraTarget)); // As long as enchanted permanent is a Vehicle, it's a creature in addition to its other types. this.addAbility(new SimpleStaticAbility(new BecomesCreatureIfVehicleEffect())); // Enchanted creature gets +2/+2 and has flying. - Effect effect = new BoostEnchantedEffect(2, 2); - effect.setText("Enchanted creature gets +2/+2"); - ability = new SimpleStaticAbility(effect); - effect = new GainAbilityAttachedEffect(FlyingAbility.getInstance(), AttachmentType.AURA); - effect.setText(" and has flying"); - ability.addEffect(effect); + Ability ability = new SimpleStaticAbility(new BoostEnchantedEffect(2, 2)); + ability.addEffect(new GainAbilityAttachedEffect( + FlyingAbility.getInstance(), AttachmentType.AURA + ).setText(" and has flying")); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/a/AetherMeltdown.java b/Mage.Sets/src/mage/cards/a/AetherMeltdown.java index 5a86fd7e514..08c55a99674 100644 --- a/Mage.Sets/src/mage/cards/a/AetherMeltdown.java +++ b/Mage.Sets/src/mage/cards/a/AetherMeltdown.java @@ -1,11 +1,8 @@ package mage.cards.a; -import java.util.UUID; -import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.effects.Effect; import mage.abilities.effects.common.AttachEffect; import mage.abilities.effects.common.continuous.BoostEnchantedEffect; import mage.abilities.effects.common.counter.GetEnergyCountersControllerEffect; @@ -13,41 +10,37 @@ import mage.abilities.keyword.EnchantAbility; import mage.abilities.keyword.FlashAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; -import mage.constants.*; -import mage.filter.FilterPermanent; -import mage.filter.predicate.Predicates; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.SubType; +import mage.filter.StaticFilters; import mage.target.TargetPermanent; +import java.util.UUID; + /** - * * @author LevelX2 */ public final class AetherMeltdown extends CardImpl { - private static final FilterPermanent filter = new FilterPermanent("creature or Vehicle"); - - static { - filter.add(Predicates.or(CardType.CREATURE.getPredicate(), SubType.VEHICLE.getPredicate())); - } - public AetherMeltdown(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{1}{U}"); + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{U}"); this.subtype.add(SubType.AURA); // Flash this.addAbility(FlashAbility.getInstance()); + // Enchant creature or vehicle. - TargetPermanent auraTarget = new TargetPermanent(filter); + TargetPermanent auraTarget = new TargetPermanent(StaticFilters.FILTER_PERMANENT_CREATURE_OR_VEHICLE); this.getSpellAbility().addTarget(auraTarget); this.getSpellAbility().addEffect(new AttachEffect(Outcome.Detriment)); - Ability ability = new EnchantAbility(auraTarget); - this.addAbility(ability); + this.addAbility(new EnchantAbility(auraTarget)); // When Aether Meltdown enters the battlefield, you get {E}{E}. this.addAbility(new EntersBattlefieldTriggeredAbility(new GetEnergyCountersControllerEffect(2))); + // Enchanted permanent gets -4/-0. - Effect effect = new BoostEnchantedEffect(-4, 0, Duration.WhileOnBattlefield); - this.addAbility(new SimpleStaticAbility(effect)); + this.addAbility(new SimpleStaticAbility(new BoostEnchantedEffect(-4, 0).setText("enchanted permanent gets -4/-0"))); } private AetherMeltdown(final AetherMeltdown card) { diff --git a/Mage.Sets/src/mage/cards/a/AgonasaurRex.java b/Mage.Sets/src/mage/cards/a/AgonasaurRex.java index 93cc878db87..6d49b3de283 100644 --- a/Mage.Sets/src/mage/cards/a/AgonasaurRex.java +++ b/Mage.Sets/src/mage/cards/a/AgonasaurRex.java @@ -14,8 +14,7 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; import mage.counters.CounterType; -import mage.filter.FilterPermanent; -import mage.filter.predicate.Predicates; +import mage.filter.StaticFilters; import mage.target.TargetPermanent; import java.util.UUID; @@ -25,15 +24,6 @@ import java.util.UUID; */ public final class AgonasaurRex extends CardImpl { - private static final FilterPermanent filter = new FilterPermanent("creature or Vehicle"); - - static { - filter.add(Predicates.or( - CardType.CREATURE.getPredicate(), - SubType.VEHICLE.getPredicate() - )); - } - public AgonasaurRex(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{G}{G}"); @@ -51,7 +41,7 @@ public final class AgonasaurRex extends CardImpl { Ability ability = new CycleTriggeredAbility(new AddCountersTargetEffect(CounterType.P1P1.createInstance(2))); ability.addEffect(new GainAbilityTargetEffect(TrampleAbility.getInstance()).setText("it gains trample")); ability.addEffect(new GainAbilityTargetEffect(IndestructibleAbility.getInstance()).setText("and indestructible until end of turn")); - ability.addTarget(new TargetPermanent(0, 1, filter)); + ability.addTarget(new TargetPermanent(0, 1, StaticFilters.FILTER_PERMANENT_CREATURE_OR_VEHICLE)); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/b/BounceOff.java b/Mage.Sets/src/mage/cards/b/BounceOff.java index cd831b8ff8d..141e4023aa3 100644 --- a/Mage.Sets/src/mage/cards/b/BounceOff.java +++ b/Mage.Sets/src/mage/cards/b/BounceOff.java @@ -4,9 +4,7 @@ import mage.abilities.effects.common.ReturnToHandTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.constants.SubType; -import mage.filter.FilterPermanent; -import mage.filter.predicate.Predicates; +import mage.filter.StaticFilters; import mage.target.TargetPermanent; import java.util.UUID; @@ -16,21 +14,12 @@ import java.util.UUID; */ public final class BounceOff extends CardImpl { - private static final FilterPermanent filter = new FilterPermanent("creature or Vehicle"); - - static { - filter.add(Predicates.or( - CardType.CREATURE.getPredicate(), - SubType.VEHICLE.getPredicate() - )); - } - public BounceOff(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{U}"); // Return target creature or Vehicle to its owner's hand. this.getSpellAbility().addEffect(new ReturnToHandTargetEffect()); - this.getSpellAbility().addTarget(new TargetPermanent(filter)); + this.getSpellAbility().addTarget(new TargetPermanent(StaticFilters.FILTER_PERMANENT_CREATURE_OR_VEHICLE)); } private BounceOff(final BounceOff card) { diff --git a/Mage.Sets/src/mage/cards/d/DaringDemolition.java b/Mage.Sets/src/mage/cards/d/DaringDemolition.java index c122b858cd4..3b1164303d6 100644 --- a/Mage.Sets/src/mage/cards/d/DaringDemolition.java +++ b/Mage.Sets/src/mage/cards/d/DaringDemolition.java @@ -1,34 +1,25 @@ - package mage.cards.d; -import java.util.UUID; import mage.abilities.effects.common.DestroyTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.constants.SubType; -import mage.filter.FilterPermanent; -import mage.filter.predicate.Predicates; +import mage.filter.StaticFilters; import mage.target.TargetPermanent; +import java.util.UUID; + /** - * * @author LevelX2 */ public final class DaringDemolition extends CardImpl { - private static final FilterPermanent filter = new FilterPermanent("creature or Vehicle"); - - static { - filter.add(Predicates.or(CardType.CREATURE.getPredicate(), SubType.VEHICLE.getPredicate())); - } - public DaringDemolition(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{2}{B}{B}"); // Destroy target creature or Vehicle. - getSpellAbility().addEffect(new DestroyTargetEffect()); - getSpellAbility().addTarget(new TargetPermanent(filter)); + this.getSpellAbility().addEffect(new DestroyTargetEffect()); + this.getSpellAbility().addTarget(new TargetPermanent(StaticFilters.FILTER_PERMANENT_CREATURE_OR_VEHICLE)); } private DaringDemolition(final DaringDemolition card) { diff --git a/Mage.Sets/src/mage/cards/f/FloodTheEngine.java b/Mage.Sets/src/mage/cards/f/FloodTheEngine.java index 8b6fbd0c822..9a84b3133fd 100644 --- a/Mage.Sets/src/mage/cards/f/FloodTheEngine.java +++ b/Mage.Sets/src/mage/cards/f/FloodTheEngine.java @@ -14,8 +14,7 @@ import mage.constants.AttachmentType; import mage.constants.CardType; import mage.constants.Outcome; import mage.constants.SubType; -import mage.filter.FilterPermanent; -import mage.filter.predicate.Predicates; +import mage.filter.StaticFilters; import mage.target.TargetPermanent; import java.util.UUID; @@ -25,22 +24,13 @@ import java.util.UUID; */ public final class FloodTheEngine extends CardImpl { - private static final FilterPermanent filter = new FilterPermanent("creature or Vehicle"); - - static { - filter.add(Predicates.or( - CardType.CREATURE.getPredicate(), - SubType.VEHICLE.getPredicate() - )); - } - public FloodTheEngine(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{2}{U}"); this.subtype.add(SubType.AURA); // Enchant creature or Vehicle - TargetPermanent auraTarget = new TargetPermanent(filter); + TargetPermanent auraTarget = new TargetPermanent(StaticFilters.FILTER_PERMANENT_CREATURE_OR_VEHICLE); this.getSpellAbility().addTarget(auraTarget); this.getSpellAbility().addEffect(new AttachEffect(Outcome.BoostCreature)); this.addAbility(new EnchantAbility(auraTarget)); diff --git a/Mage.Sets/src/mage/cards/g/GastalBlockbuster.java b/Mage.Sets/src/mage/cards/g/GastalBlockbuster.java index 782b0bcf1f3..1031d61291e 100644 --- a/Mage.Sets/src/mage/cards/g/GastalBlockbuster.java +++ b/Mage.Sets/src/mage/cards/g/GastalBlockbuster.java @@ -10,9 +10,7 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; -import mage.filter.FilterPermanent; import mage.filter.StaticFilters; -import mage.filter.predicate.Predicates; import mage.target.TargetPermanent; import java.util.UUID; @@ -22,15 +20,6 @@ import java.util.UUID; */ public final class GastalBlockbuster extends CardImpl { - private static final FilterPermanent filter = new FilterPermanent("creature or Vehicle"); - - static { - filter.add(Predicates.or( - CardType.CREATURE.getPredicate(), - SubType.VEHICLE.getPredicate() - )); - } - public GastalBlockbuster(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{R}"); @@ -43,7 +32,8 @@ public final class GastalBlockbuster extends CardImpl { ReflexiveTriggeredAbility ability = new ReflexiveTriggeredAbility(new DestroyTargetEffect(), false); ability.addTarget(new TargetPermanent(StaticFilters.FILTER_OPPONENTS_PERMANENT_ARTIFACT)); this.addAbility(new EntersBattlefieldTriggeredAbility(new DoWhenCostPaid( - ability, new SacrificeTargetCost(filter), "sacrifice a creature or Vehicle" + ability, new SacrificeTargetCost(StaticFilters.FILTER_PERMANENT_CREATURE_OR_VEHICLE), + "sacrifice a creature or Vehicle" ))); } diff --git a/Mage.Sets/src/mage/cards/k/KariZevsExpertise.java b/Mage.Sets/src/mage/cards/k/KariZevsExpertise.java index a92b7571acf..9ca6330645e 100644 --- a/Mage.Sets/src/mage/cards/k/KariZevsExpertise.java +++ b/Mage.Sets/src/mage/cards/k/KariZevsExpertise.java @@ -11,10 +11,8 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.ComparisonType; import mage.constants.Duration; -import mage.constants.SubType; import mage.filter.FilterCard; -import mage.filter.FilterPermanent; -import mage.filter.predicate.Predicates; +import mage.filter.StaticFilters; import mage.filter.predicate.mageobject.ManaValuePredicate; import mage.target.TargetPermanent; @@ -25,22 +23,17 @@ import java.util.UUID; */ public final class KariZevsExpertise extends CardImpl { - private static final FilterPermanent filter = new FilterPermanent("creature or Vehicle"); - private static final FilterCard filter2 = new FilterCard("a spell with mana value 2 or less"); + private static final FilterCard filter = new FilterCard("a spell with mana value 2 or less"); static { - filter.add(Predicates.or( - CardType.CREATURE.getPredicate(), - SubType.VEHICLE.getPredicate() - )); - filter2.add(new ManaValuePredicate(ComparisonType.FEWER_THAN, 3)); + filter.add(new ManaValuePredicate(ComparisonType.FEWER_THAN, 3)); } public KariZevsExpertise(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{1}{R}{R}"); // Gain control of target creature or Vehicle until end of turn. Untap it. It gains haste until end of turn. - this.getSpellAbility().addTarget(new TargetPermanent(filter)); + this.getSpellAbility().addTarget(new TargetPermanent(StaticFilters.FILTER_PERMANENT_CREATURE_OR_VEHICLE)); this.getSpellAbility().addEffect(new GainControlTargetEffect(Duration.EndOfTurn)); this.getSpellAbility().addEffect(new UntapTargetEffect().setText("Untap it")); this.getSpellAbility().addEffect(new GainAbilityTargetEffect( @@ -48,7 +41,7 @@ public final class KariZevsExpertise extends CardImpl { ).setText("It gains haste until end of turn")); // You may cast a card with converted mana cost 2 or less from your hand without paying its mana cost. - this.getSpellAbility().addEffect(new CastFromHandForFreeEffect(filter2).concatBy("
")); + this.getSpellAbility().addEffect(new CastFromHandForFreeEffect(filter).concatBy("
")); } private KariZevsExpertise(final KariZevsExpertise card) { diff --git a/Mage.Sets/src/mage/cards/l/LightTheWay.java b/Mage.Sets/src/mage/cards/l/LightTheWay.java index 1e1e9174df2..d6ff92ae901 100644 --- a/Mage.Sets/src/mage/cards/l/LightTheWay.java +++ b/Mage.Sets/src/mage/cards/l/LightTheWay.java @@ -1,7 +1,5 @@ package mage.cards.l; -import java.util.UUID; - import mage.abilities.Mode; import mage.abilities.effects.common.ReturnToHandTargetEffect; import mage.abilities.effects.common.UntapTargetEffect; @@ -9,25 +7,18 @@ import mage.abilities.effects.common.counter.AddCountersTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.constants.SubType; import mage.counters.CounterType; -import mage.filter.FilterPermanent; -import mage.filter.predicate.Predicates; +import mage.filter.StaticFilters; import mage.target.TargetPermanent; import mage.target.common.TargetControlledPermanent; +import java.util.UUID; + /** - * * @author weirddan455 */ public final class LightTheWay extends CardImpl { - private static final FilterPermanent filter = new FilterPermanent("creature or Vehicle"); - - static { - filter.add(Predicates.or(CardType.CREATURE.getPredicate(), SubType.VEHICLE.getPredicate())); - } - public LightTheWay(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{W}"); @@ -35,7 +26,7 @@ public final class LightTheWay extends CardImpl { // • Put a +1/+1 counter on target creature or Vehicle. Untap it. this.getSpellAbility().addEffect(new AddCountersTargetEffect(CounterType.P1P1.createInstance())); this.getSpellAbility().addEffect(new UntapTargetEffect().setText("Untap it")); - this.getSpellAbility().addTarget(new TargetPermanent(filter)); + this.getSpellAbility().addTarget(new TargetPermanent(StaticFilters.FILTER_PERMANENT_CREATURE_OR_VEHICLE)); // • Return target permanent you control to its owner's hand. Mode mode = new Mode(new ReturnToHandTargetEffect()); diff --git a/Mage.Sets/src/mage/cards/l/LightwheelEnhancements.java b/Mage.Sets/src/mage/cards/l/LightwheelEnhancements.java new file mode 100644 index 00000000000..ea06d10fd44 --- /dev/null +++ b/Mage.Sets/src/mage/cards/l/LightwheelEnhancements.java @@ -0,0 +1,63 @@ +package mage.cards.l; + +import mage.abilities.Ability; +import mage.abilities.common.MaxSpeedAbility; +import mage.abilities.common.MayCastFromGraveyardSourceAbility; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.effects.common.AttachEffect; +import mage.abilities.effects.common.continuous.BoostEnchantedEffect; +import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect; +import mage.abilities.keyword.EnchantAbility; +import mage.abilities.keyword.StartYourEnginesAbility; +import mage.abilities.keyword.VigilanceAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.AttachmentType; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.SubType; +import mage.filter.StaticFilters; +import mage.target.TargetPermanent; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class LightwheelEnhancements extends CardImpl { + + public LightwheelEnhancements(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{W}"); + + this.subtype.add(SubType.AURA); + + // Enchant creature or Vehicle + TargetPermanent auraTarget = new TargetPermanent(StaticFilters.FILTER_PERMANENT_CREATURE_OR_VEHICLE); + this.getSpellAbility().addTarget(auraTarget); + this.getSpellAbility().addEffect(new AttachEffect(Outcome.BoostCreature)); + this.addAbility(new EnchantAbility(auraTarget)); + + // Start your engines! + this.addAbility(new StartYourEnginesAbility()); + + // Enchanted permanent gets +1/+1 and has vigilance. + Ability ability = new SimpleStaticAbility(new BoostEnchantedEffect(1, 1) + .setText("enchanted permanent gets +1/+1")); + ability.addEffect(new GainAbilityAttachedEffect( + VigilanceAbility.getInstance(), AttachmentType.AURA + ).setText("and has vigilance")); + this.addAbility(ability); + + // Max speed -- You may cast this card from your graveyard. + this.addAbility(new MaxSpeedAbility(new MayCastFromGraveyardSourceAbility())); + } + + private LightwheelEnhancements(final LightwheelEnhancements card) { + super(card); + } + + @Override + public LightwheelEnhancements copy() { + return new LightwheelEnhancements(this); + } +} diff --git a/Mage.Sets/src/mage/cards/l/LotusguardDisciple.java b/Mage.Sets/src/mage/cards/l/LotusguardDisciple.java index fe9b8705209..e22bd55b00b 100644 --- a/Mage.Sets/src/mage/cards/l/LotusguardDisciple.java +++ b/Mage.Sets/src/mage/cards/l/LotusguardDisciple.java @@ -11,8 +11,7 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; -import mage.filter.FilterPermanent; -import mage.filter.predicate.Predicates; +import mage.filter.StaticFilters; import mage.target.TargetPermanent; import java.util.UUID; @@ -22,15 +21,6 @@ import java.util.UUID; */ public final class LotusguardDisciple extends CardImpl { - private static final FilterPermanent filter = new FilterPermanent("creature or Vehicle"); - - static { - filter.add(Predicates.or( - CardType.CREATURE.getPredicate(), - SubType.VEHICLE.getPredicate() - )); - } - public LotusguardDisciple(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{W}"); @@ -47,7 +37,7 @@ public final class LotusguardDisciple extends CardImpl { .setText("target creature or Vehicle gains lifelink")); ability.addEffect(new GainAbilityTargetEffect(IndestructibleAbility.getInstance()) .setText("and indestructible until end of turn")); - ability.addTarget(new TargetPermanent(filter)); + ability.addTarget(new TargetPermanent(StaticFilters.FILTER_PERMANENT_CREATURE_OR_VEHICLE)); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/m/MistsOfLittjara.java b/Mage.Sets/src/mage/cards/m/MistsOfLittjara.java index 2a1c70c564c..9888d7904a5 100644 --- a/Mage.Sets/src/mage/cards/m/MistsOfLittjara.java +++ b/Mage.Sets/src/mage/cards/m/MistsOfLittjara.java @@ -1,6 +1,5 @@ package mage.cards.m; -import mage.abilities.Ability; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.effects.common.AttachEffect; import mage.abilities.effects.common.continuous.BoostEnchantedEffect; @@ -11,8 +10,7 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Outcome; import mage.constants.SubType; -import mage.filter.FilterPermanent; -import mage.filter.predicate.Predicates; +import mage.filter.StaticFilters; import mage.target.TargetPermanent; import java.util.UUID; @@ -22,15 +20,6 @@ import java.util.UUID; */ public final class MistsOfLittjara extends CardImpl { - private static final FilterPermanent filter = new FilterPermanent("creature or Vehicle"); - - static { - filter.add(Predicates.or( - CardType.CREATURE.getPredicate(), - SubType.VEHICLE.getPredicate() - )); - } - public MistsOfLittjara(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{U}"); @@ -40,11 +29,10 @@ public final class MistsOfLittjara extends CardImpl { this.addAbility(FlashAbility.getInstance()); // Enchant creature or Vehicle - TargetPermanent auraTarget = new TargetPermanent(filter); + TargetPermanent auraTarget = new TargetPermanent(StaticFilters.FILTER_PERMANENT_CREATURE_OR_VEHICLE); this.getSpellAbility().addTarget(auraTarget); this.getSpellAbility().addEffect(new AttachEffect(Outcome.BoostCreature)); - Ability ability = new EnchantAbility(auraTarget); - this.addAbility(ability); + this.addAbility(new EnchantAbility(auraTarget)); // Enchanted creature gets -3/-0 this.addAbility(new SimpleStaticAbility(new BoostEnchantedEffect(-3, 0))); diff --git a/Mage.Sets/src/mage/cards/r/RidesEnd.java b/Mage.Sets/src/mage/cards/r/RidesEnd.java index f47ffe711b7..2f4721e3c20 100644 --- a/Mage.Sets/src/mage/cards/r/RidesEnd.java +++ b/Mage.Sets/src/mage/cards/r/RidesEnd.java @@ -8,11 +8,10 @@ import mage.abilities.effects.common.cost.SpellCostReductionSourceEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.constants.SubType; import mage.constants.Zone; import mage.filter.FilterPermanent; +import mage.filter.StaticFilters; import mage.filter.common.FilterCreaturePermanent; -import mage.filter.predicate.Predicates; import mage.filter.predicate.permanent.TappedPredicate; import mage.target.TargetPermanent; @@ -23,15 +22,10 @@ import java.util.UUID; */ public final class RidesEnd extends CardImpl { - private static final FilterPermanent filter = new FilterCreaturePermanent("a tapped creature"); - private static final FilterPermanent filter2 = new FilterPermanent("creature or Vehicle"); + private static final FilterPermanent filter = new FilterCreaturePermanent("a tapped permanent"); static { filter.add(TappedPredicate.TAPPED); - filter2.add(Predicates.or( - CardType.CREATURE.getPredicate(), - SubType.VEHICLE.getPredicate() - )); } private static final Condition condition = new SourceTargetsPermanentCondition(filter); @@ -46,7 +40,7 @@ public final class RidesEnd extends CardImpl { // Exile target creature or Vehicle. this.getSpellAbility().addEffect(new ExileTargetEffect()); - this.getSpellAbility().addTarget(new TargetPermanent(filter2)); + this.getSpellAbility().addTarget(new TargetPermanent(StaticFilters.FILTER_PERMANENT_CREATURE_OR_VEHICLE)); } private RidesEnd(final RidesEnd card) { diff --git a/Mage.Sets/src/mage/cards/r/RoadsideAssistance.java b/Mage.Sets/src/mage/cards/r/RoadsideAssistance.java index 1f28f26c923..b9556ce79e9 100644 --- a/Mage.Sets/src/mage/cards/r/RoadsideAssistance.java +++ b/Mage.Sets/src/mage/cards/r/RoadsideAssistance.java @@ -15,8 +15,7 @@ import mage.constants.AttachmentType; import mage.constants.CardType; import mage.constants.Outcome; import mage.constants.SubType; -import mage.filter.FilterPermanent; -import mage.filter.predicate.Predicates; +import mage.filter.StaticFilters; import mage.game.permanent.token.PilotSaddleCrewToken; import mage.target.TargetPermanent; @@ -27,22 +26,13 @@ import java.util.UUID; */ public final class RoadsideAssistance extends CardImpl { - private static final FilterPermanent filter = new FilterPermanent("creature or Vehicle"); - - static { - filter.add(Predicates.or( - CardType.CREATURE.getPredicate(), - SubType.VEHICLE.getPredicate() - )); - } - public RoadsideAssistance(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{2}{W}"); this.subtype.add(SubType.AURA); // Enchant creature or Vehicle - TargetPermanent auraTarget = new TargetPermanent(filter); + TargetPermanent auraTarget = new TargetPermanent(StaticFilters.FILTER_PERMANENT_CREATURE_OR_VEHICLE); this.getSpellAbility().addTarget(auraTarget); this.getSpellAbility().addEffect(new AttachEffect(Outcome.BoostCreature)); this.addAbility(new EnchantAbility(auraTarget)); diff --git a/Mage.Sets/src/mage/cards/s/SiegeModification.java b/Mage.Sets/src/mage/cards/s/SiegeModification.java index 484f5a87b8e..b455c62ee52 100644 --- a/Mage.Sets/src/mage/cards/s/SiegeModification.java +++ b/Mage.Sets/src/mage/cards/s/SiegeModification.java @@ -1,10 +1,8 @@ package mage.cards.s; -import java.util.UUID; import mage.abilities.Ability; import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.effects.Effect; import mage.abilities.effects.common.AttachEffect; import mage.abilities.effects.common.continuous.BecomesCreatureIfVehicleEffect; import mage.abilities.effects.common.continuous.BoostEnchantedEffect; @@ -13,45 +11,39 @@ import mage.abilities.keyword.EnchantAbility; import mage.abilities.keyword.FirstStrikeAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; -import mage.constants.*; -import mage.filter.FilterPermanent; -import mage.filter.predicate.Predicates; +import mage.constants.AttachmentType; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.SubType; +import mage.filter.StaticFilters; import mage.target.TargetPermanent; +import java.util.UUID; + /** * @author JRHerlehy */ public final class SiegeModification extends CardImpl { - private static final FilterPermanent filter = new FilterPermanent("creature or Vehicle"); - - static { - filter.add(Predicates.or(CardType.CREATURE.getPredicate(), - SubType.VEHICLE.getPredicate())); - } - public SiegeModification(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{R}{R}"); this.subtype.add(SubType.AURA); // Enchant creature or Vehicle - TargetPermanent auraTarget = new TargetPermanent(filter); + TargetPermanent auraTarget = new TargetPermanent(StaticFilters.FILTER_PERMANENT_CREATURE_OR_VEHICLE); this.getSpellAbility().addTarget(auraTarget); this.getSpellAbility().addEffect(new AttachEffect(Outcome.Benefit)); - Ability ability = new EnchantAbility(auraTarget); - this.addAbility(ability); + this.addAbility(new EnchantAbility(auraTarget)); // As long as enchanted permanent is a Vehicle, it's a creature in addition to its other types. this.addAbility(new SimpleStaticAbility(new BecomesCreatureIfVehicleEffect())); // Enchanted creature gets +3/+0 and has first strike. - Effect effect = new BoostEnchantedEffect(3, 0); - effect.setText("Enchanted creature gets +3/+0"); - ability = new SimpleStaticAbility(effect); - effect = new GainAbilityAttachedEffect(FirstStrikeAbility.getInstance(), AttachmentType.AURA); - effect.setText(" and has first strike"); - ability.addEffect(effect); + Ability ability = new SimpleStaticAbility(new BoostEnchantedEffect(3, 0)); + ability.addEffect(new GainAbilityAttachedEffect( + FirstStrikeAbility.getInstance(), AttachmentType.AURA + ).setText(" and has first strike")); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/s/SilkenStrength.java b/Mage.Sets/src/mage/cards/s/SilkenStrength.java index 617f66d152a..09c97459173 100644 --- a/Mage.Sets/src/mage/cards/s/SilkenStrength.java +++ b/Mage.Sets/src/mage/cards/s/SilkenStrength.java @@ -16,8 +16,7 @@ import mage.constants.AttachmentType; import mage.constants.CardType; import mage.constants.Outcome; import mage.constants.SubType; -import mage.filter.FilterPermanent; -import mage.filter.predicate.Predicates; +import mage.filter.StaticFilters; import mage.target.TargetPermanent; import java.util.UUID; @@ -27,15 +26,6 @@ import java.util.UUID; */ public final class SilkenStrength extends CardImpl { - private static final FilterPermanent filter = new FilterPermanent("creature or Vehicle"); - - static { - filter.add(Predicates.or( - CardType.CREATURE.getPredicate(), - SubType.VEHICLE.getPredicate() - )); - } - public SilkenStrength(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{G}"); @@ -45,7 +35,7 @@ public final class SilkenStrength extends CardImpl { this.addAbility(FlashAbility.getInstance()); // Enchant creature or Vehicle - TargetPermanent auraTarget = new TargetPermanent(filter); + TargetPermanent auraTarget = new TargetPermanent(StaticFilters.FILTER_PERMANENT_CREATURE_OR_VEHICLE); this.getSpellAbility().addTarget(auraTarget); this.getSpellAbility().addEffect(new AttachEffect(Outcome.BoostCreature)); this.addAbility(new EnchantAbility(auraTarget)); @@ -57,7 +47,7 @@ public final class SilkenStrength extends CardImpl { // Enchanted permanent gets +1/+2 and has reach. Ability ability = new SimpleStaticAbility(new BoostEnchantedEffect(1, 2) - .setText("enchanted permanent has +1/+2")); + .setText("enchanted permanent gets +1/+2")); ability.addEffect(new GainAbilityAttachedEffect( ReachAbility.getInstance(), AttachmentType.AURA ).setText("and has reach")); diff --git a/Mage.Sets/src/mage/cards/s/SongOfStupefaction.java b/Mage.Sets/src/mage/cards/s/SongOfStupefaction.java index 13779edd11b..afb7cf4a0d3 100644 --- a/Mage.Sets/src/mage/cards/s/SongOfStupefaction.java +++ b/Mage.Sets/src/mage/cards/s/SongOfStupefaction.java @@ -16,9 +16,7 @@ import mage.constants.AbilityWord; import mage.constants.CardType; import mage.constants.Outcome; import mage.constants.SubType; -import mage.filter.FilterPermanent; import mage.filter.StaticFilters; -import mage.filter.predicate.Predicates; import mage.target.TargetPermanent; import java.util.UUID; @@ -28,15 +26,6 @@ import java.util.UUID; */ public final class SongOfStupefaction extends CardImpl { - private static final FilterPermanent filter = new FilterPermanent("creature or Vehicle"); - - static { - filter.add(Predicates.or( - CardType.CREATURE.getPredicate(), - SubType.VEHICLE.getPredicate() - )); - } - private static final DynamicValue xValue = new CardsInControllerGraveyardCount(StaticFilters.FILTER_CARD_PERMANENT, -1); public SongOfStupefaction(UUID ownerId, CardSetInfo setInfo) { @@ -45,7 +34,7 @@ public final class SongOfStupefaction extends CardImpl { this.subtype.add(SubType.AURA); // Enchant creature or Vehicle - TargetPermanent auraTarget = new TargetPermanent(filter); + TargetPermanent auraTarget = new TargetPermanent(StaticFilters.FILTER_PERMANENT_CREATURE_OR_VEHICLE); this.getSpellAbility().addTarget(auraTarget); this.getSpellAbility().addEffect(new AttachEffect(Outcome.BoostCreature)); this.addAbility(new EnchantAbility(auraTarget)); diff --git a/Mage.Sets/src/mage/cards/s/SpinOut.java b/Mage.Sets/src/mage/cards/s/SpinOut.java index 11350583803..a2381336389 100644 --- a/Mage.Sets/src/mage/cards/s/SpinOut.java +++ b/Mage.Sets/src/mage/cards/s/SpinOut.java @@ -4,9 +4,7 @@ import mage.abilities.effects.common.DestroyTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.constants.SubType; -import mage.filter.FilterPermanent; -import mage.filter.predicate.Predicates; +import mage.filter.StaticFilters; import mage.target.TargetPermanent; import java.util.UUID; @@ -16,21 +14,12 @@ import java.util.UUID; */ public final class SpinOut extends CardImpl { - private static final FilterPermanent filter = new FilterPermanent("creature or Vehicle"); - - static { - filter.add(Predicates.or( - CardType.CREATURE.getPredicate(), - SubType.VEHICLE.getPredicate() - )); - } - public SpinOut(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{1}{B}{B}"); // Destroy target creature or Vehicle. this.getSpellAbility().addEffect(new DestroyTargetEffect()); - this.getSpellAbility().addTarget(new TargetPermanent(filter)); + this.getSpellAbility().addTarget(new TargetPermanent(StaticFilters.FILTER_PERMANENT_CREATURE_OR_VEHICLE)); } private SpinOut(final SpinOut card) { diff --git a/Mage.Sets/src/mage/cards/s/StallOut.java b/Mage.Sets/src/mage/cards/s/StallOut.java index 6ee66860036..bb99762dbd0 100644 --- a/Mage.Sets/src/mage/cards/s/StallOut.java +++ b/Mage.Sets/src/mage/cards/s/StallOut.java @@ -7,10 +7,8 @@ import mage.abilities.keyword.CyclingAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.constants.SubType; import mage.counters.CounterType; -import mage.filter.FilterPermanent; -import mage.filter.predicate.Predicates; +import mage.filter.StaticFilters; import mage.target.TargetPermanent; import java.util.UUID; @@ -20,15 +18,6 @@ import java.util.UUID; */ public final class StallOut extends CardImpl { - private static final FilterPermanent filter = new FilterPermanent("creature or Vehicle"); - - static { - filter.add(Predicates.or( - CardType.CREATURE.getPredicate(), - SubType.VEHICLE.getPredicate() - )); - } - public StallOut(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{1}{U}"); @@ -36,7 +25,7 @@ public final class StallOut extends CardImpl { this.getSpellAbility().addEffect(new TapTargetEffect()); this.getSpellAbility().addEffect(new AddCountersTargetEffect(CounterType.STUN.createInstance(3)) .setText(", then put three stun counters on it")); - this.getSpellAbility().addTarget(new TargetPermanent(filter)); + this.getSpellAbility().addTarget(new TargetPermanent(StaticFilters.FILTER_PERMANENT_CREATURE_OR_VEHICLE)); // Cycling {2} this.addAbility(new CyclingAbility(new ManaCostsImpl<>("{2}"))); diff --git a/Mage.Sets/src/mage/cards/s/SuitUp.java b/Mage.Sets/src/mage/cards/s/SuitUp.java index f9a805969b4..1730816d360 100644 --- a/Mage.Sets/src/mage/cards/s/SuitUp.java +++ b/Mage.Sets/src/mage/cards/s/SuitUp.java @@ -7,9 +7,7 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Duration; -import mage.constants.SubType; -import mage.filter.FilterPermanent; -import mage.filter.predicate.Predicates; +import mage.filter.StaticFilters; import mage.target.TargetPermanent; import java.util.UUID; @@ -19,15 +17,6 @@ import java.util.UUID; */ public final class SuitUp extends CardImpl { - private static final FilterPermanent filter = new FilterPermanent("creature or Vehicle"); - - static { - filter.add(Predicates.or( - CardType.CREATURE.getPredicate(), - SubType.VEHICLE.getPredicate() - )); - } - public SuitUp(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{2}{U}"); @@ -38,7 +27,7 @@ public final class SuitUp extends CardImpl { this.getSpellAbility().addEffect(new SetBasePowerToughnessTargetEffect( 4, 5, Duration.EndOfTurn ).setText("with base power and toughness 4/5")); - this.getSpellAbility().addTarget(new TargetPermanent(filter)); + this.getSpellAbility().addTarget(new TargetPermanent(StaticFilters.FILTER_PERMANENT_CREATURE_OR_VEHICLE)); // Draw a card. this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1).concatBy("
")); diff --git a/Mage.Sets/src/mage/cards/s/SwiftReconfiguration.java b/Mage.Sets/src/mage/cards/s/SwiftReconfiguration.java index 1791aaaf9c6..c54818a1bfc 100644 --- a/Mage.Sets/src/mage/cards/s/SwiftReconfiguration.java +++ b/Mage.Sets/src/mage/cards/s/SwiftReconfiguration.java @@ -10,8 +10,7 @@ import mage.abilities.keyword.FlashAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.*; -import mage.filter.FilterPermanent; -import mage.filter.predicate.Predicates; +import mage.filter.StaticFilters; import mage.game.Game; import mage.game.permanent.Permanent; import mage.target.TargetPermanent; @@ -23,15 +22,6 @@ import java.util.UUID; */ public final class SwiftReconfiguration extends CardImpl { - private static final FilterPermanent filter = new FilterPermanent("creature or Vehicle"); - - static { - filter.add(Predicates.or( - CardType.CREATURE.getPredicate(), - SubType.VEHICLE.getPredicate() - )); - } - public SwiftReconfiguration(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{W}"); @@ -41,7 +31,7 @@ public final class SwiftReconfiguration extends CardImpl { this.addAbility(FlashAbility.getInstance()); // Enchant creature or Vehicle - TargetPermanent auraTarget = new TargetPermanent(filter); + TargetPermanent auraTarget = new TargetPermanent(StaticFilters.FILTER_PERMANENT_CREATURE_OR_VEHICLE); this.getSpellAbility().addTarget(auraTarget); this.getSpellAbility().addEffect(new AttachEffect(Outcome.BoostCreature)); this.addAbility(new EnchantAbility(auraTarget)); diff --git a/Mage.Sets/src/mage/sets/Aetherdrift.java b/Mage.Sets/src/mage/sets/Aetherdrift.java index 63c40e199dd..469a57c90a1 100644 --- a/Mage.Sets/src/mage/sets/Aetherdrift.java +++ b/Mage.Sets/src/mage/sets/Aetherdrift.java @@ -118,6 +118,7 @@ public final class Aetherdrift extends ExpansionSet { cards.add(new SetCardInfo("Leonin Surveyor", 18, Rarity.COMMON, mage.cards.l.LeoninSurveyor.class)); cards.add(new SetCardInfo("Lightning Strike", 136, Rarity.COMMON, mage.cards.l.LightningStrike.class)); cards.add(new SetCardInfo("Lightshield Parry", 19, Rarity.COMMON, mage.cards.l.LightshieldParry.class)); + cards.add(new SetCardInfo("Lightwheel Enhancements", 20, Rarity.COMMON, mage.cards.l.LightwheelEnhancements.class)); cards.add(new SetCardInfo("Locust Spray", 95, Rarity.UNCOMMON, mage.cards.l.LocustSpray.class)); cards.add(new SetCardInfo("Lotusguard Disciple", 21, Rarity.COMMON, mage.cards.l.LotusguardDisciple.class)); cards.add(new SetCardInfo("Loxodon Surveyor", 167, Rarity.COMMON, mage.cards.l.LoxodonSurveyor.class)); diff --git a/Mage/src/main/java/mage/filter/StaticFilters.java b/Mage/src/main/java/mage/filter/StaticFilters.java index 57a18bb9a08..f441286c5fa 100644 --- a/Mage/src/main/java/mage/filter/StaticFilters.java +++ b/Mage/src/main/java/mage/filter/StaticFilters.java @@ -754,6 +754,17 @@ public final class StaticFilters { FILTER_PERMANENT_CREATURE_OR_LAND.setLockedFilter(true); } + public static final FilterPermanent FILTER_PERMANENT_CREATURE_OR_VEHICLE = new FilterPermanent("creature or Vehicle"); + + static { + FILTER_PERMANENT_CREATURE_OR_VEHICLE.add( + Predicates.or( + CardType.CREATURE.getPredicate(), + SubType.VEHICLE.getPredicate() + )); + FILTER_PERMANENT_CREATURE_OR_VEHICLE.setLockedFilter(true); + } + public static final FilterCreaturePermanent FILTER_PERMANENT_A_CREATURE = new FilterCreaturePermanent("a creature"); static {