From 78c8686876de61cd62a4d2e6be1c2557fd5cb13a Mon Sep 17 00:00:00 2001 From: theelk801 Date: Tue, 27 May 2025 21:54:34 -0400 Subject: [PATCH] remove unnecessary filter constructors from TargetLandPermanent --- Mage.Sets/src/mage/cards/a/ArborElf.java | 21 ++++------ .../src/mage/cards/a/AwakenTheAncient.java | 32 +++++++-------- Mage.Sets/src/mage/cards/a/AwakenerDruid.java | 18 ++++---- .../src/mage/cards/b/BenthicExplorers.java | 9 ++-- Mage.Sets/src/mage/cards/c/ChokingSands.java | 9 ++-- Mage.Sets/src/mage/cards/c/Cryoclasm.java | 12 +++--- Mage.Sets/src/mage/cards/c/CyclopeanTomb.java | 9 ++-- .../src/mage/cards/d/DemolitionField.java | 12 +++--- Mage.Sets/src/mage/cards/d/DemonicHordes.java | 12 +++--- .../src/mage/cards/d/DeusOfCalamity.java | 14 +++---- .../src/mage/cards/e/ExtraplanarLens.java | 18 +++----- Mage.Sets/src/mage/cards/f/FieldOfRuin.java | 18 ++++---- .../src/mage/cards/g/GenjuOfTheCedars.java | 36 ++++++++-------- .../src/mage/cards/g/GenjuOfTheFalls.java | 38 +++++++++-------- .../src/mage/cards/g/GenjuOfTheFens.java | 39 +++++++++--------- .../src/mage/cards/g/GenjuOfTheFields.java | 35 ++++++++-------- .../src/mage/cards/g/GenjuOfTheSpires.java | 39 ++++++++++-------- .../src/mage/cards/h/HokoriDustDrinker.java | 34 +++++++-------- .../src/mage/cards/k/KothOfTheHammer.java | 24 +++++------ .../src/mage/cards/k/KukemssaSerpent.java | 13 +++--- .../src/mage/cards/m/MarshdrinkerGiant.java | 22 +++++----- .../src/mage/cards/n/NissaVitalForce.java | 21 ++++------ .../src/mage/cards/o/ObsidianFireheart.java | 22 ++++------ Mage.Sets/src/mage/cards/p/PeakEruption.java | 15 +++---- Mage.Sets/src/mage/cards/p/PlanarOverlay.java | 4 +- .../src/mage/cards/q/QuicksilverFountain.java | 7 ++-- Mage.Sets/src/mage/cards/r/RisingWaters.java | 41 +++++++++---------- .../src/mage/cards/s/SunderingTitan.java | 4 +- .../src/mage/cards/t/ThoughtsOfRuin.java | 16 ++++---- Mage.Sets/src/mage/cards/t/TurfWar.java | 16 ++++---- Mage.Sets/src/mage/cards/u/UtopiaSprawl.java | 23 +++++------ .../src/mage/cards/v/VolcanicEruption.java | 9 ++-- .../effects/common/UntapLandsEffect.java | 8 ++-- .../target/common/TargetLandPermanent.java | 11 +---- .../common/TargetNonBasicLandPermanent.java | 3 +- 35 files changed, 310 insertions(+), 354 deletions(-) diff --git a/Mage.Sets/src/mage/cards/a/ArborElf.java b/Mage.Sets/src/mage/cards/a/ArborElf.java index 622a0479758..7bec499d84e 100644 --- a/Mage.Sets/src/mage/cards/a/ArborElf.java +++ b/Mage.Sets/src/mage/cards/a/ArborElf.java @@ -1,8 +1,5 @@ - - package mage.cards.a; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; @@ -12,30 +9,29 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; -import mage.constants.Zone; -import mage.filter.common.FilterLandPermanent; -import mage.target.common.TargetLandPermanent; +import mage.filter.FilterPermanent; +import mage.target.TargetPermanent; + +import java.util.UUID; /** - * * @author BetaSteward_at_googlemail.com */ public final class ArborElf extends CardImpl { - private static final FilterLandPermanent filter = new FilterLandPermanent(SubType.FOREST, "Forest"); + private static final FilterPermanent filter = new FilterPermanent(SubType.FOREST, "Forest"); public ArborElf(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{G}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{G}"); this.subtype.add(SubType.ELF); this.subtype.add(SubType.DRUID); this.power = new MageInt(1); this.toughness = new MageInt(1); - + // (T): Untap target Forest. Ability ability = new SimpleActivatedAbility(new UntapTargetEffect(), new TapSourceCost()); - TargetLandPermanent target = new TargetLandPermanent(filter); - ability.addTarget(target); + ability.addTarget(new TargetPermanent(filter)); this.addAbility(ability); } @@ -47,5 +43,4 @@ public final class ArborElf extends CardImpl { public ArborElf copy() { return new ArborElf(this); } - } diff --git a/Mage.Sets/src/mage/cards/a/AwakenTheAncient.java b/Mage.Sets/src/mage/cards/a/AwakenTheAncient.java index e4ffb5e9d66..92c4091e8f0 100644 --- a/Mage.Sets/src/mage/cards/a/AwakenTheAncient.java +++ b/Mage.Sets/src/mage/cards/a/AwakenTheAncient.java @@ -1,9 +1,6 @@ - package mage.cards.a; -import java.util.UUID; import mage.MageInt; -import mage.abilities.Ability; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.effects.common.AttachEffect; import mage.abilities.effects.common.continuous.BecomesCreatureAttachedEffect; @@ -11,37 +8,38 @@ import mage.abilities.keyword.EnchantAbility; import mage.abilities.keyword.HasteAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; -import mage.constants.*; -import mage.filter.common.FilterLandPermanent; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Outcome; +import mage.constants.SubType; +import mage.filter.FilterPermanent; import mage.game.permanent.token.TokenImpl; import mage.target.TargetPermanent; -import mage.target.common.TargetLandPermanent; + +import java.util.UUID; /** - * * @author jeffwadsworth */ public final class AwakenTheAncient extends CardImpl { - private static final FilterLandPermanent filter = new FilterLandPermanent(SubType.MOUNTAIN, "Mountain"); + private static final FilterPermanent filter = new FilterPermanent(SubType.MOUNTAIN, "Mountain"); public AwakenTheAncient(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{1}{R}{R}{R}"); + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{R}{R}{R}"); this.subtype.add(SubType.AURA); - // Enchant Mountain - TargetPermanent auraTarget = new TargetLandPermanent(filter); + TargetPermanent auraTarget = new TargetPermanent(filter); this.getSpellAbility().addTarget(auraTarget); this.getSpellAbility().addEffect(new AttachEffect(Outcome.PutCreatureInPlay)); - Ability ability = new EnchantAbility(auraTarget); - this.addAbility(ability); + this.addAbility(new EnchantAbility(auraTarget)); // Enchanted Mountain is a 7/7 red Giant creature with haste. It's still a land. - Ability ability2 = new SimpleStaticAbility(new BecomesCreatureAttachedEffect( - new GiantToken(), "Enchanted Mountain is a 7/7 red Giant creature with haste. It's still a land", Duration.WhileOnBattlefield, BecomesCreatureAttachedEffect.LoseType.COLOR)); - this.addAbility(ability2); - + this.addAbility(new SimpleStaticAbility(new BecomesCreatureAttachedEffect( + new GiantToken(), "Enchanted Mountain is a 7/7 red Giant creature with haste. It's still a land", + Duration.WhileOnBattlefield, BecomesCreatureAttachedEffect.LoseType.COLOR + ))); } private AwakenTheAncient(final AwakenTheAncient card) { diff --git a/Mage.Sets/src/mage/cards/a/AwakenerDruid.java b/Mage.Sets/src/mage/cards/a/AwakenerDruid.java index f596463698e..3fbe8362f5f 100644 --- a/Mage.Sets/src/mage/cards/a/AwakenerDruid.java +++ b/Mage.Sets/src/mage/cards/a/AwakenerDruid.java @@ -1,32 +1,29 @@ - - package mage.cards.a; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; -import mage.abilities.Mode; import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.effects.common.continuous.BecomesCreatureTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.*; -import mage.filter.common.FilterLandPermanent; +import mage.filter.FilterPermanent; import mage.game.Game; import mage.game.permanent.Permanent; import mage.game.permanent.token.TokenImpl; -import mage.target.common.TargetLandPermanent; +import mage.target.TargetPermanent; + +import java.util.UUID; /** - * * @author BetaSteward_at_googlemail.com */ public final class AwakenerDruid extends CardImpl { - private static final FilterLandPermanent filter = new FilterLandPermanent(SubType.FOREST, "Forest"); + private static final FilterPermanent filter = new FilterPermanent(SubType.FOREST, "Forest"); public AwakenerDruid(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{G}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{G}"); this.subtype.add(SubType.HUMAN); this.subtype.add(SubType.DRUID); @@ -35,7 +32,7 @@ public final class AwakenerDruid extends CardImpl { // When Awakener Druid enters the battlefield, target Forest becomes a 4/5 green Treefolk creature for as long as Awakener Druid remains on the battlefield. It's still a land. Ability ability = new EntersBattlefieldTriggeredAbility(new AwakenerDruidBecomesCreatureEffect(), false); - ability.addTarget(new TargetLandPermanent(filter)); + ability.addTarget(new TargetPermanent(filter)); this.addAbility(ability); } @@ -87,6 +84,7 @@ class AwakenerDruidToken extends TokenImpl { power = new MageInt(4); toughness = new MageInt(5); } + private AwakenerDruidToken(final AwakenerDruidToken token) { super(token); } diff --git a/Mage.Sets/src/mage/cards/b/BenthicExplorers.java b/Mage.Sets/src/mage/cards/b/BenthicExplorers.java index 1323c0a376c..6ebb6fc6b7c 100644 --- a/Mage.Sets/src/mage/cards/b/BenthicExplorers.java +++ b/Mage.Sets/src/mage/cards/b/BenthicExplorers.java @@ -12,12 +12,13 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.choices.Choice; import mage.constants.*; +import mage.filter.FilterPermanent; import mage.filter.common.FilterLandPermanent; import mage.filter.predicate.permanent.TappedPredicate; import mage.game.Game; import mage.game.permanent.Permanent; import mage.players.Player; -import mage.target.common.TargetLandPermanent; +import mage.target.TargetPermanent; import java.util.*; @@ -26,7 +27,7 @@ import java.util.*; */ public final class BenthicExplorers extends CardImpl { - private static final FilterLandPermanent filter = new FilterLandPermanent("tapped land an opponent controls"); + private static final FilterPermanent filter = new FilterLandPermanent("tapped land an opponent controls"); static { filter.add(TargetController.OPPONENT.getControllerPredicate()); @@ -43,9 +44,7 @@ public final class BenthicExplorers extends CardImpl { // {T}, Untap a tapped land an opponent controls: Add one mana of any type that land could produce. Ability ability = new BenthicExplorersManaAbility(); - ability.addCost(new UntapTargetCost( - new TargetLandPermanent(filter) - )); + ability.addCost(new UntapTargetCost(new TargetPermanent(filter))); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/c/ChokingSands.java b/Mage.Sets/src/mage/cards/c/ChokingSands.java index df0be09ebe4..0f99f49fced 100644 --- a/Mage.Sets/src/mage/cards/c/ChokingSands.java +++ b/Mage.Sets/src/mage/cards/c/ChokingSands.java @@ -9,12 +9,13 @@ import mage.constants.CardType; import mage.constants.Outcome; import mage.constants.SubType; import mage.constants.Zone; +import mage.filter.FilterPermanent; import mage.filter.common.FilterLandPermanent; import mage.filter.predicate.Predicates; import mage.game.Game; import mage.game.permanent.Permanent; import mage.players.Player; -import mage.target.common.TargetLandPermanent; +import mage.target.TargetPermanent; import java.util.UUID; @@ -23,7 +24,7 @@ import java.util.UUID; */ public final class ChokingSands extends CardImpl { - private static final FilterLandPermanent filter = new FilterLandPermanent("non-Swamp land"); + private static final FilterPermanent filter = new FilterLandPermanent("non-Swamp land"); static { filter.add(Predicates.not(SubType.SWAMP.getPredicate())); @@ -34,7 +35,7 @@ public final class ChokingSands extends CardImpl { // Destroy target non-Swamp land. this.getSpellAbility().addEffect(new DestroyTargetEffect()); - this.getSpellAbility().addTarget(new TargetLandPermanent(filter)); + this.getSpellAbility().addTarget(new TargetPermanent(filter)); // If that land was nonbasic, Choking Sands deals 2 damage to the land's controller. this.getSpellAbility().addEffect(new ChokingSandsEffect()); @@ -54,7 +55,7 @@ class ChokingSandsEffect extends OneShotEffect { ChokingSandsEffect() { super(Outcome.Damage); - this.staticText = "If that land was nonbasic, Choking Sands deals 2 damage to the land's controller"; + this.staticText = "If that land was nonbasic, {this} deals 2 damage to the land's controller"; } private ChokingSandsEffect(final ChokingSandsEffect effect) { diff --git a/Mage.Sets/src/mage/cards/c/Cryoclasm.java b/Mage.Sets/src/mage/cards/c/Cryoclasm.java index 716f13b64ea..bc89558f29d 100644 --- a/Mage.Sets/src/mage/cards/c/Cryoclasm.java +++ b/Mage.Sets/src/mage/cards/c/Cryoclasm.java @@ -1,4 +1,3 @@ - package mage.cards.c; import mage.abilities.effects.common.DamageTargetControllerEffect; @@ -7,31 +6,30 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; -import mage.filter.common.FilterLandPermanent; +import mage.filter.FilterPermanent; import mage.filter.predicate.Predicates; -import mage.target.common.TargetLandPermanent; +import mage.target.TargetPermanent; import java.util.UUID; /** - * * @author dustinconrad */ public final class Cryoclasm extends CardImpl { - private static final FilterLandPermanent filter = new FilterLandPermanent("Plains or Island"); + private static final FilterPermanent filter = new FilterPermanent("Plains or Island"); static { filter.add(Predicates.or(SubType.PLAINS.getPredicate(), SubType.ISLAND.getPredicate())); } public Cryoclasm(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{2}{R}"); + super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{2}{R}"); // Destroy target Plains or Island. Cryoclasm deals 3 damage to that land's controller. this.getSpellAbility().addEffect(new DestroyTargetEffect()); this.getSpellAbility().addEffect(new DamageTargetControllerEffect(3, "land")); - this.getSpellAbility().addTarget(new TargetLandPermanent(filter)); + this.getSpellAbility().addTarget(new TargetPermanent(filter)); } diff --git a/Mage.Sets/src/mage/cards/c/CyclopeanTomb.java b/Mage.Sets/src/mage/cards/c/CyclopeanTomb.java index d010d30c720..16a99bafa6f 100644 --- a/Mage.Sets/src/mage/cards/c/CyclopeanTomb.java +++ b/Mage.Sets/src/mage/cards/c/CyclopeanTomb.java @@ -18,6 +18,7 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.*; import mage.counters.CounterType; +import mage.filter.FilterPermanent; import mage.filter.common.FilterLandPermanent; import mage.filter.predicate.Predicates; import mage.filter.predicate.permanent.PermanentIdPredicate; @@ -25,7 +26,7 @@ import mage.game.Game; import mage.game.events.GameEvent; import mage.game.permanent.Permanent; import mage.players.Player; -import mage.target.common.TargetLandPermanent; +import mage.target.TargetPermanent; import mage.target.targetpointer.FixedTarget; import mage.watchers.Watcher; @@ -36,7 +37,7 @@ import java.util.*; */ public final class CyclopeanTomb extends CardImpl { - private static final FilterLandPermanent filter = new FilterLandPermanent(); + private static final FilterPermanent filter = new FilterLandPermanent(); static { filter.add(Predicates.not(SubType.SWAMP.getPredicate())); @@ -48,7 +49,7 @@ public final class CyclopeanTomb extends CardImpl { // {2}, {tap}: Put a mire counter on target non-Swamp land. That land is a Swamp for as long as it has a mire counter on it. Activate this ability only during your upkeep. Ability ability = new ConditionalActivatedAbility(Zone.BATTLEFIELD, new AddCountersTargetEffect(CounterType.MIRE.createInstance()), new GenericManaCost(2), new IsStepCondition(PhaseStep.UPKEEP), "{2}, {T}: Put a mire counter on target non-Swamp land. That land is a Swamp for as long as it has a mire counter on it. Activate only during your upkeep."); ability.addCost(new TapSourceCost()); - ability.addTarget(new TargetLandPermanent(filter)); + ability.addTarget(new TargetPermanent(filter)); ability.addEffect(new BecomeSwampEffect()); this.addAbility(ability, new CyclopeanTombCounterWatcher()); @@ -160,7 +161,7 @@ class CyclopeanTombEffect extends OneShotEffect { } } filter.add(Predicates.or(idPref)); - TargetLandPermanent target = new TargetLandPermanent(1, 1, filter, true); + TargetPermanent target = new TargetPermanent(1, 1, filter, true); /*Player must choose a land each upkeep. Using the message are above the player hand where frequent interactions * take place is the most logical way to prompt for this scenario. A new constructor added to provide a not optional * option for any cards like this where the player must choose a target in such the way this card requires. diff --git a/Mage.Sets/src/mage/cards/d/DemolitionField.java b/Mage.Sets/src/mage/cards/d/DemolitionField.java index b52c289b5e3..5c2837a491a 100644 --- a/Mage.Sets/src/mage/cards/d/DemolitionField.java +++ b/Mage.Sets/src/mage/cards/d/DemolitionField.java @@ -1,7 +1,5 @@ package mage.cards.d; -import java.util.UUID; - import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.common.SacrificeSourceCost; @@ -17,19 +15,21 @@ import mage.constants.CardType; import mage.constants.Outcome; import mage.constants.SuperType; import mage.constants.TargetController; +import mage.filter.FilterPermanent; import mage.filter.StaticFilters; import mage.filter.common.FilterLandPermanent; import mage.filter.predicate.Predicates; +import mage.target.TargetPermanent; import mage.target.common.TargetCardInLibrary; -import mage.target.common.TargetLandPermanent; + +import java.util.UUID; /** - * * @author weirddan455 */ public final class DemolitionField extends CardImpl { - private static final FilterLandPermanent filter = new FilterLandPermanent("nonbasic land an opponent controls"); + private static final FilterPermanent filter = new FilterLandPermanent("nonbasic land an opponent controls"); static { filter.add(TargetController.OPPONENT.getControllerPredicate()); @@ -56,7 +56,7 @@ public final class DemolitionField extends CardImpl { new TargetCardInLibrary(StaticFilters.FILTER_CARD_BASIC_LAND_A), false, false, true )); - ability.addTarget(new TargetLandPermanent(filter)); + ability.addTarget(new TargetPermanent(filter)); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/d/DemonicHordes.java b/Mage.Sets/src/mage/cards/d/DemonicHordes.java index 803e2d92d52..5a0ff89ae36 100644 --- a/Mage.Sets/src/mage/cards/d/DemonicHordes.java +++ b/Mage.Sets/src/mage/cards/d/DemonicHordes.java @@ -1,23 +1,20 @@ package mage.cards.d; -import java.util.Locale; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; -import mage.abilities.triggers.BeginningOfUpkeepTriggeredAbility; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.Cost; import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.common.DestroyTargetEffect; +import mage.abilities.triggers.BeginningOfUpkeepTriggeredAbility; 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.filter.common.FilterLandPermanent; import mage.filter.predicate.permanent.ControllerIdPredicate; import mage.game.Game; @@ -25,11 +22,12 @@ import mage.game.permanent.Permanent; import mage.players.Player; import mage.target.Target; import mage.target.TargetPermanent; -import mage.target.common.TargetLandPermanent; import mage.target.common.TargetOpponent; +import java.util.Locale; +import java.util.UUID; + /** - * * @author jeffwadsworth */ public final class DemonicHordes extends CardImpl { @@ -97,7 +95,7 @@ class DemonicHordesEffect extends OneShotEffect { if (controller.choose(Outcome.Neutral, choiceOpponent, source, game)) { Player opponent = game.getPlayer(choiceOpponent.getFirstTarget()); if (opponent != null) { - Target chosenLand = new TargetLandPermanent(filterLand); + Target chosenLand = new TargetPermanent(filterLand); chosenLand.withNotTarget(true); if (opponent.chooseTarget(Outcome.Sacrifice, chosenLand, source, game)) { Permanent land = game.getPermanent(chosenLand.getFirstTarget()); diff --git a/Mage.Sets/src/mage/cards/d/DeusOfCalamity.java b/Mage.Sets/src/mage/cards/d/DeusOfCalamity.java index fce48a753a8..9c5a614d177 100644 --- a/Mage.Sets/src/mage/cards/d/DeusOfCalamity.java +++ b/Mage.Sets/src/mage/cards/d/DeusOfCalamity.java @@ -1,7 +1,6 @@ package mage.cards.d; -import java.util.UUID; import mage.MageInt; import mage.abilities.TriggeredAbilityImpl; import mage.abilities.effects.common.DestroyTargetEffect; @@ -11,22 +10,23 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; import mage.constants.Zone; +import mage.filter.FilterPermanent; import mage.filter.common.FilterLandPermanent; import mage.filter.predicate.permanent.ControllerIdPredicate; import mage.game.Game; import mage.game.events.GameEvent; -import mage.game.events.GameEvent.EventType; import mage.target.Target; -import mage.target.common.TargetLandPermanent; +import mage.target.TargetPermanent; + +import java.util.UUID; /** - * * @author LevelX2 */ public final class DeusOfCalamity extends CardImpl { public DeusOfCalamity(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{R/G}{R/G}{R/G}{R/G}{R/G}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{R/G}{R/G}{R/G}{R/G}{R/G}"); this.subtype.add(SubType.SPIRIT); this.subtype.add(SubType.AVATAR); @@ -74,9 +74,9 @@ class DeusOfCalamityTriggeredAbility extends TriggeredAbilityImpl { if (event.getSourceId().equals(this.getSourceId()) && event.getAmount() > 5 && game.getOpponents(this.getControllerId()).contains(event.getTargetId())) { - FilterLandPermanent filter = new FilterLandPermanent("land of the damaged player"); + FilterPermanent filter = new FilterLandPermanent("land of the damaged player"); filter.add(new ControllerIdPredicate(event.getTargetId())); - Target target = new TargetLandPermanent(filter); + Target target = new TargetPermanent(filter); this.getTargets().clear(); this.addTarget(target); return true; diff --git a/Mage.Sets/src/mage/cards/e/ExtraplanarLens.java b/Mage.Sets/src/mage/cards/e/ExtraplanarLens.java index 57b52b8beeb..2c967c42ce3 100644 --- a/Mage.Sets/src/mage/cards/e/ExtraplanarLens.java +++ b/Mage.Sets/src/mage/cards/e/ExtraplanarLens.java @@ -1,7 +1,6 @@ package mage.cards.e; -import java.util.UUID; import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.effects.Effect; @@ -14,43 +13,36 @@ import mage.cards.CardSetInfo; import mage.constants.AbilityWord; import mage.constants.CardType; import mage.constants.Outcome; -import mage.constants.TargetController; import mage.constants.Zone; -import mage.filter.common.FilterLandPermanent; +import mage.filter.StaticFilters; import mage.game.Game; import mage.game.events.GameEvent; import mage.game.events.ManaEvent; import mage.game.events.TappedForManaEvent; import mage.game.permanent.Permanent; import mage.players.Player; -import mage.target.common.TargetLandPermanent; +import mage.target.TargetPermanent; import mage.target.targetpointer.FixedTarget; import mage.util.CardUtil; +import java.util.UUID; + /** - * * @author jeffwadsworth */ public final class ExtraplanarLens extends CardImpl { - private static final FilterLandPermanent filter = new FilterLandPermanent("land you control"); - - static { - filter.add(TargetController.YOU.getControllerPredicate()); - } - public ExtraplanarLens(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{3}"); // Imprint - When Extraplanar Lens enters the battlefield, you may exile target land you control. Ability ability = new EntersBattlefieldTriggeredAbility(new ExtraplanarLensImprintEffect(), true); ability.setAbilityWord(AbilityWord.IMPRINT); - ability.addTarget(new TargetLandPermanent(filter)); + ability.addTarget(new TargetPermanent(StaticFilters.FILTER_CONTROLLED_PERMANENT_LAND)); this.addAbility(ability); // Whenever a land with the same name as the exiled card is tapped for mana, its controller adds one mana of any type that land produced. this.addAbility(new ExtraplanarLensTriggeredAbility()); - } private ExtraplanarLens(final ExtraplanarLens card) { diff --git a/Mage.Sets/src/mage/cards/f/FieldOfRuin.java b/Mage.Sets/src/mage/cards/f/FieldOfRuin.java index 0eb5368b767..683e422d895 100644 --- a/Mage.Sets/src/mage/cards/f/FieldOfRuin.java +++ b/Mage.Sets/src/mage/cards/f/FieldOfRuin.java @@ -1,7 +1,5 @@ - package mage.cards.f; -import java.util.UUID; import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.common.SacrificeSourceCost; @@ -13,26 +11,24 @@ import mage.abilities.mana.ColorlessManaAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.cards.CardsImpl; -import mage.constants.CardType; -import mage.constants.Outcome; -import mage.constants.SuperType; -import mage.constants.TargetController; -import mage.constants.Zone; +import mage.constants.*; +import mage.filter.FilterPermanent; import mage.filter.StaticFilters; import mage.filter.common.FilterLandPermanent; import mage.filter.predicate.Predicates; import mage.game.Game; import mage.players.Player; +import mage.target.TargetPermanent; import mage.target.common.TargetCardInLibrary; -import mage.target.common.TargetLandPermanent; + +import java.util.UUID; /** - * * @author TheElk801 */ public final class FieldOfRuin extends CardImpl { - private static final FilterLandPermanent filter = new FilterLandPermanent("nonbasic land an opponent controls"); + private static final FilterPermanent filter = new FilterLandPermanent("nonbasic land an opponent controls"); static { filter.add(TargetController.OPPONENT.getControllerPredicate()); @@ -50,7 +46,7 @@ public final class FieldOfRuin extends CardImpl { ability.addCost(new ManaCostsImpl<>("{2}")); ability.addCost(new SacrificeSourceCost()); ability.addEffect(new FieldOfRuinEffect()); - ability.addTarget(new TargetLandPermanent(filter)); + ability.addTarget(new TargetPermanent(filter)); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/g/GenjuOfTheCedars.java b/Mage.Sets/src/mage/cards/g/GenjuOfTheCedars.java index b461656469a..82be93e1edf 100644 --- a/Mage.Sets/src/mage/cards/g/GenjuOfTheCedars.java +++ b/Mage.Sets/src/mage/cards/g/GenjuOfTheCedars.java @@ -1,53 +1,55 @@ - package mage.cards.g; -import java.util.UUID; import mage.MageInt; -import mage.abilities.Ability; import mage.abilities.common.DiesAttachedTriggeredAbility; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.mana.GenericManaCost; -import mage.abilities.effects.Effect; import mage.abilities.effects.common.AttachEffect; import mage.abilities.effects.common.ReturnToHandSourceEffect; import mage.abilities.effects.common.continuous.BecomesCreatureAttachedWithActivatedAbilityOrSpellEffect; import mage.abilities.keyword.EnchantAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; -import mage.constants.*; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Outcome; +import mage.constants.SubType; +import mage.filter.FilterPermanent; import mage.filter.common.FilterLandPermanent; import mage.game.permanent.token.TokenImpl; import mage.target.TargetPermanent; -import mage.target.common.TargetLandPermanent; + +import java.util.UUID; /** - * * @author LevelX2 */ public final class GenjuOfTheCedars extends CardImpl { - private static final FilterLandPermanent filter = new FilterLandPermanent(SubType.FOREST, "Forest"); + private static final FilterPermanent filter = new FilterLandPermanent(SubType.FOREST, "Forest"); public GenjuOfTheCedars(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{G}"); this.subtype.add(SubType.AURA); // Enchant Forest - TargetPermanent auraTarget = new TargetLandPermanent(filter); + TargetPermanent auraTarget = new TargetPermanent(filter); this.getSpellAbility().addTarget(auraTarget); this.getSpellAbility().addEffect(new AttachEffect(Outcome.PutCreatureInPlay)); - Ability ability = new EnchantAbility(auraTarget); - this.addAbility(ability); + this.addAbility(new EnchantAbility(auraTarget)); // {2}: Enchanted Forest becomes a 4/4 green Spirit creature until end of turn. It's still a land. - Ability ability2 = new SimpleActivatedAbility(new BecomesCreatureAttachedWithActivatedAbilityOrSpellEffect(new SpiritToken(), "Enchanted Forest becomes a 4/4 green Spirit creature until end of turn. It's still a land", Duration.EndOfTurn), new GenericManaCost(2)); - this.addAbility(ability2); + this.addAbility(new SimpleActivatedAbility(new BecomesCreatureAttachedWithActivatedAbilityOrSpellEffect( + new SpiritToken(), "Enchanted Forest becomes a 4/4 green " + + "Spirit creature until end of turn. It's still a land", Duration.EndOfTurn + ), new GenericManaCost(2))); // When enchanted Forest is put into a graveyard, you may return Genju of the Cedars from your graveyard to your hand. - Effect effect = new ReturnToHandSourceEffect(false, true); - effect.setText("you may return {this} from your graveyard to your hand"); - Ability ability3 = new DiesAttachedTriggeredAbility(effect, "enchanted Forest", true, false); - this.addAbility(ability3); + this.addAbility(new DiesAttachedTriggeredAbility( + new ReturnToHandSourceEffect(false, true) + .setText("you may return {this} from your graveyard to your hand"), + "enchanted Forest", true, false + )); } private GenjuOfTheCedars(final GenjuOfTheCedars card) { diff --git a/Mage.Sets/src/mage/cards/g/GenjuOfTheFalls.java b/Mage.Sets/src/mage/cards/g/GenjuOfTheFalls.java index 6068e52e51e..607d7552a5c 100644 --- a/Mage.Sets/src/mage/cards/g/GenjuOfTheFalls.java +++ b/Mage.Sets/src/mage/cards/g/GenjuOfTheFalls.java @@ -1,13 +1,10 @@ package mage.cards.g; -import java.util.UUID; import mage.MageInt; -import mage.abilities.Ability; import mage.abilities.common.DiesAttachedTriggeredAbility; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.mana.GenericManaCost; -import mage.abilities.effects.Effect; import mage.abilities.effects.common.AttachEffect; import mage.abilities.effects.common.ReturnToHandSourceEffect; import mage.abilities.effects.common.continuous.BecomesCreatureAttachedWithActivatedAbilityOrSpellEffect; @@ -15,40 +12,45 @@ import mage.abilities.keyword.EnchantAbility; import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; -import mage.constants.*; -import mage.filter.common.FilterLandPermanent; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Outcome; +import mage.constants.SubType; +import mage.filter.FilterPermanent; import mage.game.permanent.token.TokenImpl; import mage.target.TargetPermanent; -import mage.target.common.TargetLandPermanent; + +import java.util.UUID; /** - * * @author LevelX2 */ public final class GenjuOfTheFalls extends CardImpl { - private static final FilterLandPermanent FILTER = new FilterLandPermanent(SubType.ISLAND, "Island"); + private static final FilterPermanent FILTER = new FilterPermanent(SubType.ISLAND, "Island"); public GenjuOfTheFalls(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{U}"); + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{U}"); this.subtype.add(SubType.AURA); // Enchant Island - TargetPermanent auraTarget = new TargetLandPermanent(FILTER); + TargetPermanent auraTarget = new TargetPermanent(FILTER); this.getSpellAbility().addTarget(auraTarget); this.getSpellAbility().addEffect(new AttachEffect(Outcome.PutCreatureInPlay)); - Ability ability = new EnchantAbility(auraTarget); - this.addAbility(ability); + this.addAbility(new EnchantAbility(auraTarget)); // {2}: Enchanted Island becomes a 3/2 blue Spirit creature with flying until end of turn. It's still a land. - Ability ability2 = new SimpleActivatedAbility(new BecomesCreatureAttachedWithActivatedAbilityOrSpellEffect(new SpiritToken(), "Enchanted Island becomes a 3/2 blue Spirit creature with flying until end of turn. It's still a land", Duration.EndOfTurn), new GenericManaCost(2)); - this.addAbility(ability2); + this.addAbility(new SimpleActivatedAbility(new BecomesCreatureAttachedWithActivatedAbilityOrSpellEffect( + new SpiritToken(), "Enchanted Island becomes a 3/2 blue Spirit " + + "creature with flying until end of turn. It's still a land", Duration.EndOfTurn + ), new GenericManaCost(2))); // When enchanted Island is put into a graveyard, you may return Genju of the Falls from your graveyard to your hand. TargetPermanent auraTarget = new TargetLandPermanent(filter); - Effect effect = new ReturnToHandSourceEffect(false, true); - effect.setText("you may return {this} from your graveyard to your hand"); - Ability ability3 = new DiesAttachedTriggeredAbility(effect, "enchanted Island", true, false); - this.addAbility(ability3); + this.addAbility(new DiesAttachedTriggeredAbility( + new ReturnToHandSourceEffect(false, true) + .setText("you may return {this} from your graveyard to your hand"), + "enchanted Island", true, false + )); } private GenjuOfTheFalls(final GenjuOfTheFalls card) { diff --git a/Mage.Sets/src/mage/cards/g/GenjuOfTheFens.java b/Mage.Sets/src/mage/cards/g/GenjuOfTheFens.java index c4df15c0a11..28c88f9480f 100644 --- a/Mage.Sets/src/mage/cards/g/GenjuOfTheFens.java +++ b/Mage.Sets/src/mage/cards/g/GenjuOfTheFens.java @@ -1,14 +1,10 @@ - package mage.cards.g; -import java.util.UUID; import mage.MageInt; -import mage.abilities.Ability; import mage.abilities.common.DiesAttachedTriggeredAbility; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.mana.GenericManaCost; import mage.abilities.costs.mana.ManaCostsImpl; -import mage.abilities.effects.Effect; import mage.abilities.effects.common.AttachEffect; import mage.abilities.effects.common.ReturnToHandSourceEffect; import mage.abilities.effects.common.continuous.BecomesCreatureAttachedWithActivatedAbilityOrSpellEffect; @@ -16,40 +12,45 @@ import mage.abilities.effects.common.continuous.BoostSourceEffect; import mage.abilities.keyword.EnchantAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; -import mage.constants.*; -import mage.filter.common.FilterLandPermanent; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Outcome; +import mage.constants.SubType; +import mage.filter.FilterPermanent; import mage.game.permanent.token.TokenImpl; import mage.target.TargetPermanent; -import mage.target.common.TargetLandPermanent; + +import java.util.UUID; /** - * * @author LevelX2 */ public final class GenjuOfTheFens extends CardImpl { - private static final FilterLandPermanent FILTER = new FilterLandPermanent(SubType.SWAMP, "Swamp"); + private static final FilterPermanent FILTER = new FilterPermanent(SubType.SWAMP, "Swamp"); public GenjuOfTheFens(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{B}"); + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{B}"); this.subtype.add(SubType.AURA); // Enchant Swamp - TargetPermanent auraTarget = new TargetLandPermanent(FILTER); + TargetPermanent auraTarget = new TargetPermanent(FILTER); this.getSpellAbility().addTarget(auraTarget); this.getSpellAbility().addEffect(new AttachEffect(Outcome.PutCreatureInPlay)); - Ability ability = new EnchantAbility(auraTarget); - this.addAbility(ability); + this.addAbility(new EnchantAbility(auraTarget)); // {2}: Until end of turn, enchanted Swamp becomes a 2/2 black Spirit creature with "{B}: This creature gets +1/+1 until end of turn." It's still a land. - Ability ability2 = new SimpleActivatedAbility(new BecomesCreatureAttachedWithActivatedAbilityOrSpellEffect(new SpiritToken(), "Until end of turn, enchanted Swamp becomes a 2/2 black Spirit creature with \"{B}: This creature gets +1/+1 until end of turn.\" It's still a land", Duration.EndOfTurn), new GenericManaCost(2)); - this.addAbility(ability2); + this.addAbility(new SimpleActivatedAbility(new BecomesCreatureAttachedWithActivatedAbilityOrSpellEffect( + new SpiritToken(), "Until end of turn, enchanted Swamp becomes a 2/2 black Spirit creature " + + "with \"{B}: This creature gets +1/+1 until end of turn.\" It's still a land", Duration.EndOfTurn + ), new GenericManaCost(2))); // When enchanted Swamp is put into a graveyard, you may return Genju of the Fens from your graveyard to your hand. - Effect effect = new ReturnToHandSourceEffect(false, true); - effect.setText("you may return {this} from your graveyard to your hand"); - Ability ability3 = new DiesAttachedTriggeredAbility(effect, "enchanted Swamp", true, false); - this.addAbility(ability3); + this.addAbility(new DiesAttachedTriggeredAbility( + new ReturnToHandSourceEffect(false, true) + .setText("you may return {this} from your graveyard to your hand"), + "enchanted Swamp", true, false + )); } private GenjuOfTheFens(final GenjuOfTheFens card) { diff --git a/Mage.Sets/src/mage/cards/g/GenjuOfTheFields.java b/Mage.Sets/src/mage/cards/g/GenjuOfTheFields.java index 14455a304aa..38575aa807b 100644 --- a/Mage.Sets/src/mage/cards/g/GenjuOfTheFields.java +++ b/Mage.Sets/src/mage/cards/g/GenjuOfTheFields.java @@ -7,7 +7,6 @@ import mage.abilities.common.DiesAttachedTriggeredAbility; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.mana.GenericManaCost; import mage.abilities.dynamicvalue.common.SavedDamageValue; -import mage.abilities.effects.Effect; import mage.abilities.effects.common.AttachEffect; import mage.abilities.effects.common.GainLifeEffect; import mage.abilities.effects.common.ReturnToHandSourceEffect; @@ -17,10 +16,9 @@ import mage.abilities.keyword.EnchantAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.*; -import mage.filter.common.FilterLandPermanent; +import mage.filter.FilterPermanent; import mage.game.permanent.token.TokenImpl; import mage.target.TargetPermanent; -import mage.target.common.TargetLandPermanent; import java.util.UUID; @@ -29,33 +27,34 @@ import java.util.UUID; */ public final class GenjuOfTheFields extends CardImpl { - private static final FilterLandPermanent FILTER = new FilterLandPermanent(SubType.PLAINS, "Plains"); + private static final FilterPermanent FILTER = new FilterPermanent(SubType.PLAINS, "Plains"); public GenjuOfTheFields(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{W}"); this.subtype.add(SubType.AURA); // Enchant Plains - TargetPermanent auraTarget = new TargetLandPermanent(FILTER); + TargetPermanent auraTarget = new TargetPermanent(FILTER); this.getSpellAbility().addTarget(auraTarget); this.getSpellAbility().addEffect(new AttachEffect(Outcome.PutCreatureInPlay)); - Ability ability = new EnchantAbility(auraTarget); - this.addAbility(ability); + this.addAbility(new EnchantAbility(auraTarget)); // {2}: Until end of turn, enchanted Plains becomes a 2/5 white Spirit creature with "Whenever this creature deals damage, its controller gains that much life." It's still a land. - Effect effect = new BecomesCreatureAttachedWithActivatedAbilityOrSpellEffect(new SpiritToken(), - "Until end of turn, enchanted Plains becomes a 2/5 white Spirit creature", Duration.EndOfTurn); - Ability ability2 = new SimpleActivatedAbility(effect, new GenericManaCost(2)); - effect = new GainAbilityAttachedEffect(new DealsDamageSourceTriggeredAbility(new GainLifeEffect(SavedDamageValue.MUCH)), AttachmentType.AURA, Duration.EndOfTurn); - effect.setText("with \"Whenever this creature deals damage, its controller gains that much life.\" It's still a land"); - ability2.addEffect(effect); - this.addAbility(ability2); + Ability ability = new SimpleActivatedAbility(new BecomesCreatureAttachedWithActivatedAbilityOrSpellEffect( + new SpiritToken(), "Until end of turn, enchanted Plains " + + "becomes a 2/5 white Spirit creature", Duration.EndOfTurn + ), new GenericManaCost(2)); + ability.addEffect(new GainAbilityAttachedEffect( + new DealsDamageSourceTriggeredAbility(new GainLifeEffect(SavedDamageValue.MUCH)), AttachmentType.AURA, Duration.EndOfTurn + ).setText("with \"Whenever this creature deals damage, its controller gains that much life.\" It's still a land")); + this.addAbility(ability); // When enchanted Plains is put into a graveyard, you may return Genju of the Fields from your graveyard to your hand. - Effect effect2 = new ReturnToHandSourceEffect(false, true); - effect2.setText("you may return {this} from your graveyard to your hand"); - Ability ability3 = new DiesAttachedTriggeredAbility(effect2, "enchanted Plains", true, false); - this.addAbility(ability3); + this.addAbility(new DiesAttachedTriggeredAbility( + new ReturnToHandSourceEffect(false, true) + .setText("you may return {this} from your graveyard to your hand"), + "enchanted Plains", true, false + )); } private GenjuOfTheFields(final GenjuOfTheFields card) { diff --git a/Mage.Sets/src/mage/cards/g/GenjuOfTheSpires.java b/Mage.Sets/src/mage/cards/g/GenjuOfTheSpires.java index 5f37cf5ab32..11ff060fb6b 100644 --- a/Mage.Sets/src/mage/cards/g/GenjuOfTheSpires.java +++ b/Mage.Sets/src/mage/cards/g/GenjuOfTheSpires.java @@ -1,53 +1,55 @@ package mage.cards.g; -import java.util.UUID; import mage.MageInt; -import mage.abilities.Ability; import mage.abilities.common.DiesAttachedTriggeredAbility; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.mana.GenericManaCost; -import mage.abilities.effects.Effect; import mage.abilities.effects.common.AttachEffect; import mage.abilities.effects.common.ReturnToHandSourceEffect; import mage.abilities.effects.common.continuous.BecomesCreatureAttachedWithActivatedAbilityOrSpellEffect; import mage.abilities.keyword.EnchantAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; -import mage.constants.*; -import mage.filter.common.FilterLandPermanent; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Outcome; +import mage.constants.SubType; +import mage.filter.FilterPermanent; import mage.game.permanent.token.TokenImpl; import mage.target.TargetPermanent; -import mage.target.common.TargetLandPermanent; + +import java.util.UUID; /** - * * @author LevelX2 */ public final class GenjuOfTheSpires extends CardImpl { - private static final FilterLandPermanent FILTER = new FilterLandPermanent(SubType.MOUNTAIN, "Mountain"); + private static final FilterPermanent FILTER = new FilterPermanent(SubType.MOUNTAIN, "Mountain"); public GenjuOfTheSpires(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{R}"); + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{R}"); this.subtype.add(SubType.AURA); // Enchant Mountain - TargetPermanent auraTarget = new TargetLandPermanent(FILTER); + TargetPermanent auraTarget = new TargetPermanent(FILTER); this.getSpellAbility().addTarget(auraTarget); this.getSpellAbility().addEffect(new AttachEffect(Outcome.PutCreatureInPlay)); - Ability ability = new EnchantAbility(auraTarget); - this.addAbility(ability); + this.addAbility(new EnchantAbility(auraTarget)); // {2}: Enchanted Mountain becomes a 6/1 red Spirit creature until end of turn. It's still a land. - Ability ability2 = new SimpleActivatedAbility(new BecomesCreatureAttachedWithActivatedAbilityOrSpellEffect(new SpiritToken(), "Enchanted Mountain becomes a 6/1 red Spirit creature until end of turn. It's still a land", Duration.EndOfTurn), new GenericManaCost(2)); - this.addAbility(ability2); + this.addAbility(new SimpleActivatedAbility(new BecomesCreatureAttachedWithActivatedAbilityOrSpellEffect( + new SpiritToken(), "Enchanted Mountain becomes a 6/1 " + + "red Spirit creature until end of turn. It's still a land", Duration.EndOfTurn + ), new GenericManaCost(2))); // When enchanted Mountain is put into a graveyard, you may return Genju of the Spires from your graveyard to your hand. - Effect effect = new ReturnToHandSourceEffect(false, true); - effect.setText("you may return {this} from your graveyard to your hand"); - Ability ability3 = new DiesAttachedTriggeredAbility(effect, "enchanted Mountain", true, false); - this.addAbility(ability3); + this.addAbility(new DiesAttachedTriggeredAbility( + new ReturnToHandSourceEffect(false, true) + .setText("you may return {this} from your graveyard to your hand"), + "enchanted Mountain", true, false + )); } private GenjuOfTheSpires(final GenjuOfTheSpires card) { @@ -69,6 +71,7 @@ public final class GenjuOfTheSpires extends CardImpl { power = new MageInt(6); toughness = new MageInt(1); } + private SpiritToken(final SpiritToken token) { super(token); } diff --git a/Mage.Sets/src/mage/cards/h/HokoriDustDrinker.java b/Mage.Sets/src/mage/cards/h/HokoriDustDrinker.java index a9fcf0ff3c2..969cb7db4cc 100644 --- a/Mage.Sets/src/mage/cards/h/HokoriDustDrinker.java +++ b/Mage.Sets/src/mage/cards/h/HokoriDustDrinker.java @@ -1,24 +1,22 @@ - package mage.cards.h; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; -import mage.abilities.triggers.BeginningOfUpkeepTriggeredAbility; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.common.DontUntapInControllersUntapStepAllEffect; +import mage.abilities.triggers.BeginningOfUpkeepTriggeredAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.*; import mage.filter.StaticFilters; -import mage.filter.common.FilterLandPermanent; -import mage.filter.predicate.permanent.ControllerIdPredicate; import mage.game.Game; import mage.game.permanent.Permanent; import mage.players.Player; import mage.target.Target; -import mage.target.common.TargetLandPermanent; +import mage.target.TargetPermanent; + +import java.util.UUID; /** * @author LevelX2 @@ -26,7 +24,7 @@ import mage.target.common.TargetLandPermanent; public final class HokoriDustDrinker extends CardImpl { public HokoriDustDrinker(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{W}{W}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{W}{W}"); this.supertype.add(SuperType.LEGENDARY); this.subtype.add(SubType.SPIRIT); @@ -71,18 +69,16 @@ class HokoriDustDrinkerUntapEffect extends OneShotEffect { @Override public boolean apply(Game game, Ability source) { Player player = game.getPlayer(game.getActivePlayerId()); - FilterLandPermanent filter = new FilterLandPermanent("land you control"); - filter.add(new ControllerIdPredicate(game.getActivePlayerId())); - Target target = new TargetLandPermanent(filter); - if (player != null && player.chooseTarget(Outcome.Untap, target, source, game)) { - for (UUID landId : target.getTargets()) { - Permanent land = game.getPermanent(landId); - if (land != null) { - land.untap(game); - } - } - return true; + Target target = new TargetPermanent(StaticFilters.FILTER_CONTROLLED_PERMANENT_LAND); + if (player == null || !player.chooseTarget(Outcome.Untap, target, source, game)) { + return false; } - return false; + for (UUID landId : target.getTargets()) { + Permanent land = game.getPermanent(landId); + if (land != null) { + land.untap(game); + } + } + return true; } } diff --git a/Mage.Sets/src/mage/cards/k/KothOfTheHammer.java b/Mage.Sets/src/mage/cards/k/KothOfTheHammer.java index 006aaafbfa1..14ee8e04dd6 100644 --- a/Mage.Sets/src/mage/cards/k/KothOfTheHammer.java +++ b/Mage.Sets/src/mage/cards/k/KothOfTheHammer.java @@ -1,41 +1,36 @@ package mage.cards.k; -import java.util.UUID; import mage.MageInt; import mage.Mana; import mage.abilities.Ability; import mage.abilities.LoyaltyAbility; import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount; -import mage.abilities.effects.mana.DynamicManaEffect; import mage.abilities.effects.common.GetEmblemEffect; import mage.abilities.effects.common.UntapTargetEffect; import mage.abilities.effects.common.continuous.BecomesCreatureTargetEffect; +import mage.abilities.effects.mana.DynamicManaEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Duration; import mage.constants.SubType; import mage.constants.SuperType; -import mage.constants.TargetController; -import mage.filter.common.FilterLandPermanent; +import mage.filter.FilterPermanent; +import mage.filter.common.FilterControlledPermanent; import mage.game.command.emblems.KothOfTheHammerEmblem; import mage.game.permanent.token.TokenImpl; -import mage.target.common.TargetLandPermanent; +import mage.target.TargetPermanent; + +import java.util.UUID; /** - * * @author Loki, North */ public final class KothOfTheHammer extends CardImpl { - static final FilterLandPermanent filter = new FilterLandPermanent(SubType.MOUNTAIN, "Mountain"); - static final FilterLandPermanent filterCount = new FilterLandPermanent("Mountain you control"); - - static { - filterCount.add(SubType.MOUNTAIN.getPredicate()); - filterCount.add(TargetController.YOU.getControllerPredicate()); - } + static final FilterPermanent filter = new FilterPermanent(SubType.MOUNTAIN, "Mountain"); + static final FilterPermanent filterCount = new FilterControlledPermanent("Mountain you control"); public KothOfTheHammer(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.PLANESWALKER}, "{2}{R}{R}"); @@ -47,7 +42,7 @@ public final class KothOfTheHammer extends CardImpl { // +1: Untap target Mountain. It becomes a 4/4 red Elemental creature until end of turn. It's still a land. Ability ability = new LoyaltyAbility(new UntapTargetEffect(), 1); ability.addEffect(new BecomesCreatureTargetEffect(new KothOfTheHammerToken(), false, true, Duration.EndOfTurn)); - ability.addTarget(new TargetLandPermanent(filter)); + ability.addTarget(new TargetPermanent(filter)); this.addAbility(ability); // -2: Add {R} for each Mountain you control. @@ -78,6 +73,7 @@ class KothOfTheHammerToken extends TokenImpl { this.power = new MageInt(4); this.toughness = new MageInt(4); } + private KothOfTheHammerToken(final KothOfTheHammerToken token) { super(token); } diff --git a/Mage.Sets/src/mage/cards/k/KukemssaSerpent.java b/Mage.Sets/src/mage/cards/k/KukemssaSerpent.java index 55ec3a99f98..d60ca7f2fe7 100644 --- a/Mage.Sets/src/mage/cards/k/KukemssaSerpent.java +++ b/Mage.Sets/src/mage/cards/k/KukemssaSerpent.java @@ -14,21 +14,20 @@ import mage.abilities.effects.common.continuous.BecomesBasicLandTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.*; +import mage.filter.FilterPermanent; import mage.filter.common.FilterControlledLandPermanent; import mage.filter.common.FilterLandPermanent; -import mage.target.common.TargetControlledPermanent; -import mage.target.common.TargetLandPermanent; +import mage.target.TargetPermanent; import java.util.UUID; /** - * * @author fireshoes */ public final class KukemssaSerpent extends CardImpl { - private static final FilterLandPermanent filterOpponentLand = new FilterLandPermanent("land an opponent controls"); - private static final FilterControlledLandPermanent filterControlledLand = new FilterControlledLandPermanent("an Island"); + private static final FilterPermanent filterOpponentLand = new FilterLandPermanent("land an opponent controls"); + private static final FilterPermanent filterControlledLand = new FilterControlledLandPermanent("an Island"); static { filterOpponentLand.add(TargetController.OPPONENT.getControllerPredicate()); @@ -36,7 +35,7 @@ public final class KukemssaSerpent extends CardImpl { } public KukemssaSerpent(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{U}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{U}"); this.subtype.add(SubType.SERPENT); this.power = new MageInt(4); this.toughness = new MageInt(3); @@ -47,7 +46,7 @@ public final class KukemssaSerpent extends CardImpl { // {U}, Sacrifice an Island: Target land an opponent controls becomes an Island until end of turn. Ability ability = new SimpleActivatedAbility(new BecomesBasicLandTargetEffect(Duration.EndOfTurn, SubType.ISLAND), new ManaCostsImpl<>("{U}")); ability.addCost(new SacrificeTargetCost(filterControlledLand)); - ability.addTarget(new TargetLandPermanent(filterOpponentLand)); + ability.addTarget(new TargetPermanent(filterOpponentLand)); this.addAbility(ability); // When you control no Islands, sacrifice Kukemssa Serpent. diff --git a/Mage.Sets/src/mage/cards/m/MarshdrinkerGiant.java b/Mage.Sets/src/mage/cards/m/MarshdrinkerGiant.java index 548d41f1fcf..eefeb409125 100644 --- a/Mage.Sets/src/mage/cards/m/MarshdrinkerGiant.java +++ b/Mage.Sets/src/mage/cards/m/MarshdrinkerGiant.java @@ -1,7 +1,6 @@ package mage.cards.m; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldTriggeredAbility; @@ -11,27 +10,29 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; import mage.constants.TargetController; -import mage.filter.common.FilterLandPermanent; +import mage.filter.FilterPermanent; import mage.filter.predicate.Predicates; -import mage.target.common.TargetLandPermanent; +import mage.target.TargetPermanent; + +import java.util.UUID; /** - * * @author jeffwadsworth */ public final class MarshdrinkerGiant extends CardImpl { - - private static final FilterLandPermanent filter = new FilterLandPermanent("Island or Swamp an opponent controls"); - + + private static final FilterPermanent filter = new FilterPermanent("Island or Swamp an opponent controls"); + static { filter.add(Predicates.or( SubType.ISLAND.getPredicate(), - SubType.SWAMP.getPredicate())); + SubType.SWAMP.getPredicate() + )); filter.add(TargetController.OPPONENT.getControllerPredicate()); } public MarshdrinkerGiant(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{G}{G}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{G}{G}"); this.subtype.add(SubType.GIANT); this.subtype.add(SubType.WARRIOR); @@ -40,9 +41,8 @@ public final class MarshdrinkerGiant extends CardImpl { // When Marshdrinker Giant enters the battlefield, destroy target Island or Swamp an opponent controls. Ability ability = new EntersBattlefieldTriggeredAbility(new DestroyTargetEffect(), false); - ability.addTarget(new TargetLandPermanent(filter)); + ability.addTarget(new TargetPermanent(filter)); this.addAbility(ability); - } private MarshdrinkerGiant(final MarshdrinkerGiant card) { diff --git a/Mage.Sets/src/mage/cards/n/NissaVitalForce.java b/Mage.Sets/src/mage/cards/n/NissaVitalForce.java index dd69a674abd..9ba2e994bc4 100644 --- a/Mage.Sets/src/mage/cards/n/NissaVitalForce.java +++ b/Mage.Sets/src/mage/cards/n/NissaVitalForce.java @@ -1,4 +1,3 @@ - package mage.cards.n; import mage.MageInt; @@ -10,14 +9,17 @@ import mage.abilities.effects.common.continuous.BecomesCreatureTargetEffect; import mage.abilities.keyword.HasteAbility; 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.constants.SuperType; import mage.filter.FilterCard; -import mage.filter.common.FilterLandPermanent; +import mage.filter.StaticFilters; import mage.filter.common.FilterPermanentCard; import mage.game.command.emblems.NissaVitalForceEmblem; import mage.game.permanent.token.TokenImpl; +import mage.target.TargetPermanent; import mage.target.common.TargetCardInYourGraveyard; -import mage.target.common.TargetLandPermanent; import java.util.UUID; @@ -26,12 +28,7 @@ import java.util.UUID; */ public final class NissaVitalForce extends CardImpl { - private static final FilterLandPermanent filter = new FilterLandPermanent("land you control"); - private static final FilterCard filter2 = new FilterPermanentCard("permanent card from your graveyard"); - - static { - filter.add(TargetController.YOU.getControllerPredicate()); - } + private static final FilterCard filter = new FilterPermanentCard("permanent card from your graveyard"); public NissaVitalForce(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.PLANESWALKER}, "{3}{G}{G}"); @@ -45,12 +42,12 @@ public final class NissaVitalForce extends CardImpl { ability.addEffect(new BecomesCreatureTargetEffect( new NissaVitalForceToken(), false, true, Duration.UntilYourNextTurn ).withDurationRuleAtStart(true).setText("Until your next turn, it becomes a 5/5 Elemental creature with haste. It's still a land")); - ability.addTarget(new TargetLandPermanent(filter)); + ability.addTarget(new TargetPermanent(StaticFilters.FILTER_CONTROLLED_PERMANENT_LAND)); this.addAbility(ability); // -3: Return target permanent card from your graveyard to your hand. ability = new LoyaltyAbility(new ReturnFromGraveyardToHandTargetEffect(), -3); - ability.addTarget(new TargetCardInYourGraveyard(filter2)); + ability.addTarget(new TargetCardInYourGraveyard(filter)); this.addAbility(ability); // -6: You get an emblem with "Whenever a land you control enters, you may draw a card." diff --git a/Mage.Sets/src/mage/cards/o/ObsidianFireheart.java b/Mage.Sets/src/mage/cards/o/ObsidianFireheart.java index 9575ce891a9..84f8fc0cc08 100644 --- a/Mage.Sets/src/mage/cards/o/ObsidianFireheart.java +++ b/Mage.Sets/src/mage/cards/o/ObsidianFireheart.java @@ -1,9 +1,7 @@ package mage.cards.o; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; -import mage.abilities.triggers.BeginningOfUpkeepTriggeredAbility; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.costs.mana.ManaCostsImpl; @@ -12,23 +10,21 @@ import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.common.DamageControllerEffect; import mage.abilities.effects.common.continuous.GainAbilityTargetEffect; import mage.abilities.effects.common.counter.AddCountersTargetEffect; +import mage.abilities.triggers.BeginningOfUpkeepTriggeredAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.SubType; -import mage.constants.Duration; -import mage.constants.Outcome; -import mage.constants.TargetController; -import mage.constants.Zone; +import mage.constants.*; import mage.counters.CounterType; +import mage.filter.FilterPermanent; import mage.filter.common.FilterLandPermanent; import mage.filter.predicate.Predicates; import mage.game.Game; import mage.game.permanent.Permanent; -import mage.target.common.TargetLandPermanent; +import mage.target.TargetPermanent; + +import java.util.UUID; /** - * * @author LevelX2 */ public final class ObsidianFireheart extends CardImpl { @@ -36,7 +32,7 @@ public final class ObsidianFireheart extends CardImpl { private static final String rule = "For as long as that land has a blaze counter " + "on it, it has \"At the beginning of your upkeep, this land deals 1 damage " + "to you.\" (The land continues to burn after Obsidian Fireheart has left the battlefield.)"; - private static final FilterLandPermanent filter = new FilterLandPermanent("land without a blaze counter on it"); + private static final FilterPermanent filter = new FilterLandPermanent("land without a blaze counter on it"); static { filter.add(Predicates.not(CounterType.BLAZE.getPredicate())); @@ -56,7 +52,7 @@ public final class ObsidianFireheart extends CardImpl { Ability ability = new SimpleActivatedAbility( new AddCountersTargetEffect(CounterType.BLAZE.createInstance()), new ManaCostsImpl<>("{1}{R}{R}")); - ability.addTarget(new TargetLandPermanent(filter)); + ability.addTarget(new TargetPermanent(filter)); OneShotEffect effect = new ObsidianFireheartOneShotEffect(); effect.setText(rule); ability.addEffect(effect); @@ -134,7 +130,7 @@ class ObsidianFireheartGainAbilityEffect extends GainAbilityTargetEffect { @Override public boolean isInactive(Ability source, Game game) { Permanent targetLand = game.getPermanent(this.getTargetPointer().getFirst(game, source)); - if (targetLand != null + if (targetLand != null && targetLand.getCounters(game).getCount(CounterType.BLAZE) < 1) { return true; } diff --git a/Mage.Sets/src/mage/cards/p/PeakEruption.java b/Mage.Sets/src/mage/cards/p/PeakEruption.java index 3ccfbe7fba2..1ff4a31225f 100644 --- a/Mage.Sets/src/mage/cards/p/PeakEruption.java +++ b/Mage.Sets/src/mage/cards/p/PeakEruption.java @@ -7,30 +7,25 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; -import mage.filter.common.FilterLandPermanent; -import mage.target.common.TargetLandPermanent; +import mage.filter.FilterPermanent; +import mage.target.TargetPermanent; import java.util.UUID; /** - * * @author Plopman */ public final class PeakEruption extends CardImpl { - private static final FilterLandPermanent filter = new FilterLandPermanent("Mountain"); - - static{ - filter.add(SubType.MOUNTAIN.getPredicate()); - } + private static final FilterPermanent filter = new FilterPermanent(SubType.MOUNTAIN, "Mountain"); public PeakEruption(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{2}{R}"); + super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{2}{R}"); // Destroy target Mountain. Peak Eruption deals 3 damage to that land's controller. this.getSpellAbility().addEffect(new DestroyTargetEffect()); this.getSpellAbility().addEffect(new DamageTargetControllerEffect(3, "land")); - this.getSpellAbility().addTarget(new TargetLandPermanent(filter)); + this.getSpellAbility().addTarget(new TargetPermanent(filter)); } private PeakEruption(final PeakEruption card) { diff --git a/Mage.Sets/src/mage/cards/p/PlanarOverlay.java b/Mage.Sets/src/mage/cards/p/PlanarOverlay.java index 9f48e4f04c0..0cde8ce2b62 100644 --- a/Mage.Sets/src/mage/cards/p/PlanarOverlay.java +++ b/Mage.Sets/src/mage/cards/p/PlanarOverlay.java @@ -10,7 +10,7 @@ import mage.filter.common.FilterLandPermanent; import mage.game.Game; import mage.players.Player; import mage.target.Target; -import mage.target.common.TargetLandPermanent; +import mage.target.TargetPermanent; import java.util.HashSet; import java.util.Set; @@ -66,7 +66,7 @@ class PlanarOverlayEffect extends OneShotEffect { FilterLandPermanent filter = new FilterLandPermanent(landName + " to return to hand"); filter.add(landName.getPredicate()); filter.add(TargetController.YOU.getControllerPredicate()); - Target target = new TargetLandPermanent(1, 1, filter, true); + Target target = new TargetPermanent(1, 1, filter, true); if (target.canChoose(player.getId(), source, game)) { player.chooseTarget(outcome, target, source, game); lands.add(game.getPermanent(target.getFirstTarget())); diff --git a/Mage.Sets/src/mage/cards/q/QuicksilverFountain.java b/Mage.Sets/src/mage/cards/q/QuicksilverFountain.java index bb41b51fe1a..0c07dbbcf08 100644 --- a/Mage.Sets/src/mage/cards/q/QuicksilverFountain.java +++ b/Mage.Sets/src/mage/cards/q/QuicksilverFountain.java @@ -1,14 +1,14 @@ package mage.cards.q; import mage.abilities.Ability; -import mage.abilities.triggers.BeginningOfEndStepTriggeredAbility; -import mage.abilities.triggers.BeginningOfUpkeepTriggeredAbility; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.condition.Condition; import mage.abilities.decorator.ConditionalContinuousEffect; import mage.abilities.effects.ContinuousEffect; import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.common.continuous.BecomesBasicLandTargetEffect; +import mage.abilities.triggers.BeginningOfEndStepTriggeredAbility; +import mage.abilities.triggers.BeginningOfUpkeepTriggeredAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.*; @@ -19,6 +19,7 @@ import mage.filter.predicate.Predicates; import mage.game.Game; import mage.game.permanent.Permanent; import mage.players.Player; +import mage.target.TargetPermanent; import mage.target.common.TargetLandPermanent; import mage.target.targetadjustment.TargetAdjuster; @@ -68,7 +69,7 @@ enum QuicksilverFountainAdjuster implements TargetAdjuster { FilterLandPermanent filter = new FilterLandPermanent(); filter.add(Predicates.not(SubType.ISLAND.getPredicate())); filter.add(TargetController.ACTIVE.getControllerPredicate()); - TargetLandPermanent target = new TargetLandPermanent(1, 1, filter, false); + TargetPermanent target = new TargetPermanent(1, 1, filter, false); target.setTargetController(activePlayer.getId()); ability.getTargets().add(target); } diff --git a/Mage.Sets/src/mage/cards/r/RisingWaters.java b/Mage.Sets/src/mage/cards/r/RisingWaters.java index e825b58d4db..b58df3e0fed 100644 --- a/Mage.Sets/src/mage/cards/r/RisingWaters.java +++ b/Mage.Sets/src/mage/cards/r/RisingWaters.java @@ -1,35 +1,36 @@ package mage.cards.r; -import java.util.UUID; import mage.abilities.Ability; -import mage.abilities.triggers.BeginningOfUpkeepTriggeredAbility; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.common.DontUntapInControllersUntapStepAllEffect; +import mage.abilities.triggers.BeginningOfUpkeepTriggeredAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; -import mage.constants.*; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Outcome; +import mage.constants.TargetController; import mage.filter.StaticFilters; -import mage.filter.common.FilterLandPermanent; -import mage.filter.predicate.permanent.ControllerIdPredicate; import mage.game.Game; import mage.game.permanent.Permanent; import mage.players.Player; import mage.target.Target; -import mage.target.common.TargetLandPermanent; +import mage.target.TargetPermanent; + +import java.util.UUID; /** - * * @author fireshoes */ public final class RisingWaters extends CardImpl { public RisingWaters(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{3}{U}"); + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{3}{U}"); // Lands don't untap during their controllers' untap steps. this.addAbility(new SimpleStaticAbility(new DontUntapInControllersUntapStepAllEffect(Duration.WhileOnBattlefield, TargetController.ANY, StaticFilters.FILTER_LANDS))); - + // At the beginning of each player's upkeep, that player untaps a land they control. this.addAbility(new BeginningOfUpkeepTriggeredAbility(TargetController.EACH_PLAYER, new RisingWatersUntapEffect(), false)); } @@ -63,18 +64,16 @@ class RisingWatersUntapEffect extends OneShotEffect { @Override public boolean apply(Game game, Ability source) { Player player = game.getPlayer(game.getActivePlayerId()); - FilterLandPermanent filter = new FilterLandPermanent("land you control"); - filter.add(new ControllerIdPredicate(game.getActivePlayerId())); - Target target = new TargetLandPermanent(filter); - if (player != null && player.chooseTarget(Outcome.Untap, target, source, game)) { - for (UUID landId : target.getTargets()) { - Permanent land = game.getPermanent(landId); - if (land != null) { - land.untap(game); - } - } - return true; + Target target = new TargetPermanent(StaticFilters.FILTER_CONTROLLED_PERMANENT_LAND); + if (player == null || !player.chooseTarget(Outcome.Untap, target, source, game)) { + return false; } - return false; + for (UUID landId : target.getTargets()) { + Permanent land = game.getPermanent(landId); + if (land != null) { + land.untap(game); + } + } + return true; } } diff --git a/Mage.Sets/src/mage/cards/s/SunderingTitan.java b/Mage.Sets/src/mage/cards/s/SunderingTitan.java index 1dd5d08a327..81f2eabcb13 100644 --- a/Mage.Sets/src/mage/cards/s/SunderingTitan.java +++ b/Mage.Sets/src/mage/cards/s/SunderingTitan.java @@ -14,7 +14,7 @@ import mage.game.Game; import mage.game.permanent.Permanent; import mage.players.Player; import mage.target.Target; -import mage.target.common.TargetLandPermanent; +import mage.target.TargetPermanent; import java.util.HashSet; import java.util.Set; @@ -71,7 +71,7 @@ class SunderingTitanDestroyLandEffect extends OneShotEffect { for (SubType landName : SubType.getBasicLands()) { FilterLandPermanent filter = new FilterLandPermanent(landName + " to destroy"); filter.add(landName.getPredicate()); - Target target = new TargetLandPermanent(1, 1, filter, true); + Target target = new TargetPermanent(1, 1, filter, true); if (target.canChoose(source.getControllerId(), source, game)) { controller.chooseTarget(outcome, target, source, game); lands.add(target.getFirstTarget()); diff --git a/Mage.Sets/src/mage/cards/t/ThoughtsOfRuin.java b/Mage.Sets/src/mage/cards/t/ThoughtsOfRuin.java index 8a5b23ab5fd..f816e6f73fa 100644 --- a/Mage.Sets/src/mage/cards/t/ThoughtsOfRuin.java +++ b/Mage.Sets/src/mage/cards/t/ThoughtsOfRuin.java @@ -1,9 +1,6 @@ package mage.cards.t; -import java.util.ArrayList; -import java.util.List; -import java.util.UUID; import mage.abilities.Ability; import mage.abilities.effects.OneShotEffect; import mage.cards.CardImpl; @@ -16,16 +13,19 @@ import mage.game.Game; import mage.game.permanent.Permanent; import mage.players.Player; import mage.target.Target; -import mage.target.common.TargetLandPermanent; +import mage.target.TargetPermanent; + +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; /** - * * @author LevelX2 */ public final class ThoughtsOfRuin extends CardImpl { public ThoughtsOfRuin(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{2}{R}{R}"); + super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{2}{R}{R}"); // Each player sacrifices a land for each card in your hand. @@ -78,7 +78,7 @@ class ThoughtsOfRuinEffect extends OneShotEffect { } else { FilterLandPermanent playerFilter = filter.copy(); playerFilter.add(new ControllerIdPredicate(playerId)); - Target target = new TargetLandPermanent(amount, amount, playerFilter, true); + Target target = new TargetPermanent(amount, amount, playerFilter, true); player.choose(outcome, target, source, game); for (UUID landId : target.getTargets()) { Permanent permanent = game.getPermanent(landId); @@ -91,7 +91,7 @@ class ThoughtsOfRuinEffect extends OneShotEffect { } } // sacrifice all lands - for (Permanent permanent :permanentsToSacrifice) { + for (Permanent permanent : permanentsToSacrifice) { permanent.sacrifice(source, game); } } diff --git a/Mage.Sets/src/mage/cards/t/TurfWar.java b/Mage.Sets/src/mage/cards/t/TurfWar.java index 629b0fe2f7c..cb29537cf3a 100644 --- a/Mage.Sets/src/mage/cards/t/TurfWar.java +++ b/Mage.Sets/src/mage/cards/t/TurfWar.java @@ -1,7 +1,5 @@ package mage.cards.t; -import java.util.UUID; - import mage.MageObject; import mage.abilities.Ability; import mage.abilities.TriggeredAbilityImpl; @@ -10,7 +8,10 @@ import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.common.continuous.GainControlTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; -import mage.constants.*; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Outcome; +import mage.constants.Zone; import mage.counters.CounterType; import mage.filter.StaticFilters; import mage.filter.common.FilterLandPermanent; @@ -23,12 +24,13 @@ import mage.game.permanent.Permanent; import mage.players.Player; import mage.players.PlayerList; import mage.target.Target; -import mage.target.common.TargetLandPermanent; +import mage.target.TargetPermanent; import mage.target.targetadjustment.TargetAdjuster; import mage.target.targetpointer.FixedTarget; +import java.util.UUID; + /** - * * @author weirddan455 */ public final class TurfWar extends CardImpl { @@ -105,7 +107,7 @@ enum TurfWarAdjuster implements TargetAdjuster { } FilterLandPermanent filter = new FilterLandPermanent("land controlled by " + player.getName()); filter.add(new ControllerIdPredicate(playerId)); - ability.addTarget(new TargetLandPermanent(filter)); + ability.addTarget(new TargetPermanent(filter)); } } } @@ -191,7 +193,7 @@ class TurfWarControlEffect extends OneShotEffect { FilterLandPermanent filter = new FilterLandPermanent("land with a contested counter controlled by " + damagedPlayer.getName()); filter.add(new ControllerIdPredicate(damagedPlayer.getId())); filter.add(TurfWarPredicate.instance); - TargetLandPermanent target = new TargetLandPermanent(1, 1, filter, true); + TargetPermanent target = new TargetPermanent(1, 1, filter, true); if (!target.canChoose(creatureController.getId(), source, game)) { return false; } diff --git a/Mage.Sets/src/mage/cards/u/UtopiaSprawl.java b/Mage.Sets/src/mage/cards/u/UtopiaSprawl.java index 0739c77e012..4b4edce1ec0 100644 --- a/Mage.Sets/src/mage/cards/u/UtopiaSprawl.java +++ b/Mage.Sets/src/mage/cards/u/UtopiaSprawl.java @@ -9,18 +9,17 @@ import mage.abilities.effects.common.ChooseColorEffect; import mage.abilities.effects.mana.ManaEffect; import mage.abilities.keyword.EnchantAbility; import mage.abilities.mana.EnchantedTappedTriggeredManaAbility; -import mage.abilities.mana.TriggeredManaAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; -import mage.constants.*; -import mage.filter.common.FilterLandPermanent; +import mage.constants.CardType; +import mage.constants.ColoredManaSymbol; +import mage.constants.Outcome; +import mage.constants.SubType; +import mage.filter.FilterPermanent; import mage.game.Game; -import mage.game.events.GameEvent; -import mage.game.events.GameEvent.EventType; import mage.game.permanent.Permanent; import mage.players.Player; import mage.target.TargetPermanent; -import mage.target.common.TargetLandPermanent; import java.util.UUID; @@ -29,24 +28,23 @@ import java.util.UUID; */ public final class UtopiaSprawl extends CardImpl { - private static final FilterLandPermanent filter = new FilterLandPermanent(SubType.FOREST, "Forest"); + private static final FilterPermanent filter = new FilterPermanent(SubType.FOREST, "Forest"); public UtopiaSprawl(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{G}"); this.subtype.add(SubType.AURA); // Enchant Forest - TargetPermanent auraTarget = new TargetLandPermanent(filter); + TargetPermanent auraTarget = new TargetPermanent(filter); this.getSpellAbility().addTarget(auraTarget); this.getSpellAbility().addEffect(new AttachEffect(Outcome.AddAbility)); - Ability ability = new EnchantAbility(auraTarget); - this.addAbility(ability); + this.addAbility(new EnchantAbility(auraTarget)); // As Utopia Sprawl enters the battlefield, choose a color. this.addAbility(new AsEntersBattlefieldAbility(new ChooseColorEffect(Outcome.Detriment))); // Whenever enchanted Forest is tapped for mana, its controller adds one mana of the chosen color. - this.addAbility(new EnchantedTappedTriggeredManaAbility(new UtopiaSprawlEffect(),"Forest")); + this.addAbility(new EnchantedTappedTriggeredManaAbility(new UtopiaSprawlEffect(), "Forest")); } private UtopiaSprawl(final UtopiaSprawl card) { @@ -58,9 +56,10 @@ public final class UtopiaSprawl extends CardImpl { return new UtopiaSprawl(this); } } + class UtopiaSprawlEffect extends ManaEffect { - UtopiaSprawlEffect() { + UtopiaSprawlEffect() { super(); staticText = "its controller adds an additional one mana of the chosen color"; } diff --git a/Mage.Sets/src/mage/cards/v/VolcanicEruption.java b/Mage.Sets/src/mage/cards/v/VolcanicEruption.java index 6b84d3b68e8..9fca4c45e45 100644 --- a/Mage.Sets/src/mage/cards/v/VolcanicEruption.java +++ b/Mage.Sets/src/mage/cards/v/VolcanicEruption.java @@ -8,12 +8,13 @@ import mage.constants.CardType; import mage.constants.Outcome; import mage.constants.SubType; import mage.constants.Zone; +import mage.filter.FilterPermanent; import mage.filter.StaticFilters; import mage.filter.common.FilterLandPermanent; import mage.game.Game; import mage.game.permanent.Permanent; import mage.players.Player; -import mage.target.common.TargetLandPermanent; +import mage.target.TargetPermanent; import mage.target.targetadjustment.XTargetsCountAdjuster; import java.util.List; @@ -23,15 +24,15 @@ import java.util.UUID; * @author escplan9 (Derek Monturo - dmontur1 at gmail dot com) */ public final class VolcanicEruption extends CardImpl { - private static final FilterLandPermanent filter - = new FilterLandPermanent(SubType.MOUNTAIN, "Mountain"); + + private static final FilterPermanent filter = new FilterLandPermanent(SubType.MOUNTAIN, "Mountain"); public VolcanicEruption(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{X}{U}{U}{U}"); // Destroy X target Mountains. Volcanic Eruption deals damage to each creature and each player equal to the number of Mountains put into a graveyard this way. this.getSpellAbility().addEffect(new VolcanicEruptionEffect()); - this.getSpellAbility().addTarget(new TargetLandPermanent(filter)); + this.getSpellAbility().addTarget(new TargetPermanent(filter)); this.getSpellAbility().setTargetAdjuster(new XTargetsCountAdjuster()); } diff --git a/Mage/src/main/java/mage/abilities/effects/common/UntapLandsEffect.java b/Mage/src/main/java/mage/abilities/effects/common/UntapLandsEffect.java index 376e33c0203..f4a6f812743 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/UntapLandsEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/UntapLandsEffect.java @@ -1,7 +1,5 @@ package mage.abilities.effects.common; -import java.util.UUID; - import mage.abilities.Ability; import mage.abilities.effects.OneShotEffect; import mage.constants.Outcome; @@ -11,9 +9,11 @@ import mage.filter.predicate.permanent.TappedPredicate; import mage.game.Game; import mage.game.permanent.Permanent; import mage.players.Player; -import mage.target.common.TargetLandPermanent; +import mage.target.TargetPermanent; import mage.util.CardUtil; +import java.util.UUID; + /** * "Untap (up to) X lands" effect */ @@ -65,7 +65,7 @@ public class UntapLandsEffect extends OneShotEffect { } else { tappedLands = game.getBattlefield().getActivePermanents(filter, source.getControllerId(), source, game).size(); } - TargetLandPermanent target = new TargetLandPermanent(upTo ? 0 : Math.min(tappedLands, amount), amount, filter, true); + TargetPermanent target = new TargetPermanent(upTo ? 0 : Math.min(tappedLands, amount), amount, filter, true); if (target.canChoose(source.getControllerId(), source, game)) { // UI Shortcut: Check if any lands are already tapped. If there are equal/fewer than amount, give the option to add those in to be untapped now. diff --git a/Mage/src/main/java/mage/target/common/TargetLandPermanent.java b/Mage/src/main/java/mage/target/common/TargetLandPermanent.java index 1311728ea8f..90baa11f606 100644 --- a/Mage/src/main/java/mage/target/common/TargetLandPermanent.java +++ b/Mage/src/main/java/mage/target/common/TargetLandPermanent.java @@ -2,7 +2,6 @@ package mage.target.common; import mage.filter.StaticFilters; -import mage.filter.common.FilterLandPermanent; import mage.target.TargetPermanent; /** @@ -14,20 +13,12 @@ public class TargetLandPermanent extends TargetPermanent { this(1); } - public TargetLandPermanent(FilterLandPermanent filter) { - this(1, 1, filter, false); - } - public TargetLandPermanent(int numTargets) { this(numTargets, numTargets); } public TargetLandPermanent(int numTargets, int maxNumTargets) { - this(numTargets, maxNumTargets, maxNumTargets > 1 ? StaticFilters.FILTER_LANDS : StaticFilters.FILTER_LAND, false); - } - - public TargetLandPermanent(int minNumTargets, int maxNumTargets, FilterLandPermanent filter, boolean notTarget) { - super(minNumTargets, maxNumTargets, filter, notTarget); + super(numTargets, maxNumTargets, maxNumTargets > 1 ? StaticFilters.FILTER_LANDS : StaticFilters.FILTER_LAND, false); } protected TargetLandPermanent(final TargetLandPermanent target) { diff --git a/Mage/src/main/java/mage/target/common/TargetNonBasicLandPermanent.java b/Mage/src/main/java/mage/target/common/TargetNonBasicLandPermanent.java index 8d131f27fd2..f1264c265c2 100644 --- a/Mage/src/main/java/mage/target/common/TargetNonBasicLandPermanent.java +++ b/Mage/src/main/java/mage/target/common/TargetNonBasicLandPermanent.java @@ -5,11 +5,12 @@ package mage.target.common; import mage.constants.SuperType; import mage.filter.common.FilterLandPermanent; import mage.filter.predicate.Predicates; +import mage.target.TargetPermanent; /** * @author BetaSteward_at_googlemail.com */ -public class TargetNonBasicLandPermanent extends TargetLandPermanent { +public class TargetNonBasicLandPermanent extends TargetPermanent { private static final FilterLandPermanent filter = new FilterLandPermanent("nonbasic land");