From 124d60e2b73bd43f436b62d247f534864abb571e Mon Sep 17 00:00:00 2001 From: ssk97 Date: Tue, 9 Apr 2024 19:59:21 -0700 Subject: [PATCH] refactor: improved EachOpponentPermanentTargetsAdjuster and few card fixes (#12102) * Wreck and Rebuild: Return a land, not a creature * Sinister Concierge should still gain suspend with 0 targets * Fixed Tolarian Contempt --- Mage.Sets/src/mage/cards/b/BlatantThievery.java | 3 ++- Mage.Sets/src/mage/cards/b/BronzebeakForagers.java | 3 ++- Mage.Sets/src/mage/cards/d/DecoyGambit.java | 3 ++- Mage.Sets/src/mage/cards/d/DesecrateReality.java | 3 ++- Mage.Sets/src/mage/cards/d/DismantlingWave.java | 4 ++-- .../src/mage/cards/e/ElminstersSimulacrum.java | 3 ++- Mage.Sets/src/mage/cards/e/EnigmaThief.java | 3 ++- Mage.Sets/src/mage/cards/g/GraspOfFate.java | 3 ++- Mage.Sets/src/mage/cards/h/HammersOfMoradin.java | 8 ++++++-- .../src/mage/cards/i/InTheDarknessBindThem.java | 3 ++- Mage.Sets/src/mage/cards/j/JuvenileMistDragon.java | 3 ++- Mage.Sets/src/mage/cards/l/LuminatePrimordial.java | 3 ++- Mage.Sets/src/mage/cards/m/MassMutiny.java | 3 ++- Mage.Sets/src/mage/cards/m/MoltenPrimordial.java | 3 ++- Mage.Sets/src/mage/cards/s/SinisterConcierge.java | 8 ++++++-- Mage.Sets/src/mage/cards/s/SontaranGeneral.java | 3 ++- Mage.Sets/src/mage/cards/s/SylvanPrimordial.java | 3 ++- Mage.Sets/src/mage/cards/t/TemptedByTheOriq.java | 3 ++- Mage.Sets/src/mage/cards/t/TheBalrogOfMoria.java | 3 ++- Mage.Sets/src/mage/cards/t/TheHorusHeresy.java | 3 ++- Mage.Sets/src/mage/cards/t/TheTrueScriptures.java | 3 ++- Mage.Sets/src/mage/cards/t/TolarianContempt.java | 7 ++++--- .../src/mage/cards/v/VronosMaskedInquisitor.java | 3 ++- Mage.Sets/src/mage/cards/w/WelcomeTo.java | 3 ++- Mage.Sets/src/mage/cards/w/WreckAndRebuild.java | 2 +- .../EachOpponentPermanentTargetsAdjuster.java | 14 ++++++-------- 26 files changed, 65 insertions(+), 38 deletions(-) diff --git a/Mage.Sets/src/mage/cards/b/BlatantThievery.java b/Mage.Sets/src/mage/cards/b/BlatantThievery.java index c2b6fe4723b..44ee9842ad5 100644 --- a/Mage.Sets/src/mage/cards/b/BlatantThievery.java +++ b/Mage.Sets/src/mage/cards/b/BlatantThievery.java @@ -23,7 +23,8 @@ public final class BlatantThievery extends CardImpl { this.getSpellAbility().addEffect(new GainControlTargetEffect(Duration.Custom, true) .setTargetPointer(new EachTargetPointer()) .setText("for each opponent, gain control of target permanent that player controls")); - this.getSpellAbility().setTargetAdjuster(new EachOpponentPermanentTargetsAdjuster(new TargetPermanent())); + this.getSpellAbility().setTargetAdjuster(new EachOpponentPermanentTargetsAdjuster()); + this.getSpellAbility().addTarget(new TargetPermanent()); } private BlatantThievery(final BlatantThievery card) { diff --git a/Mage.Sets/src/mage/cards/b/BronzebeakForagers.java b/Mage.Sets/src/mage/cards/b/BronzebeakForagers.java index da804113374..c2dc1ed0315 100644 --- a/Mage.Sets/src/mage/cards/b/BronzebeakForagers.java +++ b/Mage.Sets/src/mage/cards/b/BronzebeakForagers.java @@ -46,7 +46,8 @@ public final class BronzebeakForagers extends CardImpl { .setTargetPointer(new EachTargetPointer()) .setText("for each opponent, exile up to one target nonland permanent that player controls until {this} leaves the battlefield") ); - etbAbility.setTargetAdjuster(new EachOpponentPermanentTargetsAdjuster(new TargetNonlandPermanent(0, 1))); + etbAbility.setTargetAdjuster(new EachOpponentPermanentTargetsAdjuster()); + etbAbility.addTarget(new TargetNonlandPermanent(0, 1)); this.addAbility(etbAbility); // {X}{W}: Put target card with mana value X exiled with Bronzebeak Foragers into its owner's graveyard. diff --git a/Mage.Sets/src/mage/cards/d/DecoyGambit.java b/Mage.Sets/src/mage/cards/d/DecoyGambit.java index 135434fe84d..6ef505bc150 100644 --- a/Mage.Sets/src/mage/cards/d/DecoyGambit.java +++ b/Mage.Sets/src/mage/cards/d/DecoyGambit.java @@ -33,7 +33,8 @@ public final class DecoyGambit extends CardImpl { // For each opponent, choose up to one target creature that player controls, // then return that creature to its owner's hand unless its controller has you draw a card. this.getSpellAbility().addEffect(new DecoyGambitEffect()); - this.getSpellAbility().setTargetAdjuster(new EachOpponentPermanentTargetsAdjuster(new TargetCreaturePermanent(0,1))); + this.getSpellAbility().setTargetAdjuster(new EachOpponentPermanentTargetsAdjuster()); + this.getSpellAbility().addTarget(new TargetCreaturePermanent(0,1)); } private DecoyGambit(final DecoyGambit card) { diff --git a/Mage.Sets/src/mage/cards/d/DesecrateReality.java b/Mage.Sets/src/mage/cards/d/DesecrateReality.java index e92fb2e4388..a1f22f83754 100644 --- a/Mage.Sets/src/mage/cards/d/DesecrateReality.java +++ b/Mage.Sets/src/mage/cards/d/DesecrateReality.java @@ -44,7 +44,8 @@ public final class DesecrateReality extends CardImpl { this.getSpellAbility().addEffect(new ExileTargetEffect() .setTargetPointer(new EachTargetPointer()) .setText("for each opponent, exile up to one target permanent that player controls with an even mana value.")); - this.getSpellAbility().setTargetAdjuster(new EachOpponentPermanentTargetsAdjuster(new TargetPermanent(0, 1, evenFilter))); + this.getSpellAbility().setTargetAdjuster(new EachOpponentPermanentTargetsAdjuster()); + this.getSpellAbility().addTarget(new TargetPermanent(0, 1, evenFilter)); // Adamant -- If at least three colorless mana was spent to cast this spell, return a permanent card with an odd mana value from your graveyard to the battlefield. this.getSpellAbility().addEffect(new ConditionalOneShotEffect( diff --git a/Mage.Sets/src/mage/cards/d/DismantlingWave.java b/Mage.Sets/src/mage/cards/d/DismantlingWave.java index 4625feede73..22dac026cb7 100644 --- a/Mage.Sets/src/mage/cards/d/DismantlingWave.java +++ b/Mage.Sets/src/mage/cards/d/DismantlingWave.java @@ -27,8 +27,8 @@ public final class DismantlingWave extends CardImpl { this.getSpellAbility().addEffect(new DestroyTargetEffect() .setTargetPointer(new EachTargetPointer()) .setText("For each opponent, destroy up to one target artifact or enchantment that player controls.")); - this.getSpellAbility().setTargetAdjuster(new EachOpponentPermanentTargetsAdjuster( - new TargetPermanent(0, 1, StaticFilters.FILTER_PERMANENT_ARTIFACT_OR_ENCHANTMENT))); + this.getSpellAbility().setTargetAdjuster(new EachOpponentPermanentTargetsAdjuster()); + this.getSpellAbility().addTarget(new TargetPermanent(0, 1, StaticFilters.FILTER_PERMANENT_ARTIFACT_OR_ENCHANTMENT)); // Cycling {6}{W}{W} this.addAbility(new CyclingAbility(new ManaCostsImpl<>("{6}{W}{W}"))); diff --git a/Mage.Sets/src/mage/cards/e/ElminstersSimulacrum.java b/Mage.Sets/src/mage/cards/e/ElminstersSimulacrum.java index 791a982ea3f..1c18cea6b4f 100644 --- a/Mage.Sets/src/mage/cards/e/ElminstersSimulacrum.java +++ b/Mage.Sets/src/mage/cards/e/ElminstersSimulacrum.java @@ -25,7 +25,8 @@ public final class ElminstersSimulacrum extends CardImpl { // For each opponent, you create a token that's a copy of up to one target creature that player controls. this.getSpellAbility().addEffect(new ElminstersSimulacrumAdjusterEffect()); - this.getSpellAbility().setTargetAdjuster(new EachOpponentPermanentTargetsAdjuster(new TargetCreaturePermanent(0,1))); + this.getSpellAbility().setTargetAdjuster(new EachOpponentPermanentTargetsAdjuster()); + this.getSpellAbility().addTarget(new TargetCreaturePermanent(0,1)); } private ElminstersSimulacrum(final ElminstersSimulacrum card) { diff --git a/Mage.Sets/src/mage/cards/e/EnigmaThief.java b/Mage.Sets/src/mage/cards/e/EnigmaThief.java index d67f142d888..f83d56988b2 100644 --- a/Mage.Sets/src/mage/cards/e/EnigmaThief.java +++ b/Mage.Sets/src/mage/cards/e/EnigmaThief.java @@ -39,7 +39,8 @@ public final class EnigmaThief extends CardImpl { Ability ability = new EntersBattlefieldTriggeredAbility(new ReturnToHandTargetEffect() .setTargetPointer(new EachTargetPointer()) .setText("for each opponent, return up to one target nonland permanent that player controls to its owner's hand")); - ability.setTargetAdjuster(new EachOpponentPermanentTargetsAdjuster(new TargetNonlandPermanent(0,1))); + ability.setTargetAdjuster(new EachOpponentPermanentTargetsAdjuster()); + ability.addTarget(new TargetNonlandPermanent(0,1)); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/g/GraspOfFate.java b/Mage.Sets/src/mage/cards/g/GraspOfFate.java index 20e3cff70d2..6241bc6a740 100644 --- a/Mage.Sets/src/mage/cards/g/GraspOfFate.java +++ b/Mage.Sets/src/mage/cards/g/GraspOfFate.java @@ -25,7 +25,8 @@ public final class GraspOfFate extends CardImpl { .setTargetPointer(new EachTargetPointer()) .setText("for each opponent, exile up to one target nonland permanent that player controls until {this} leaves the battlefield") ); - ability.setTargetAdjuster(new EachOpponentPermanentTargetsAdjuster(new TargetNonlandPermanent(0,1))); + ability.setTargetAdjuster(new EachOpponentPermanentTargetsAdjuster()); + ability.addTarget(new TargetNonlandPermanent(0,1)); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/h/HammersOfMoradin.java b/Mage.Sets/src/mage/cards/h/HammersOfMoradin.java index ddab9134d70..c43b89939ea 100644 --- a/Mage.Sets/src/mage/cards/h/HammersOfMoradin.java +++ b/Mage.Sets/src/mage/cards/h/HammersOfMoradin.java @@ -1,6 +1,7 @@ package mage.cards.h; import mage.MageInt; +import mage.abilities.Ability; import mage.abilities.common.AttacksTriggeredAbility; import mage.abilities.effects.common.TapTargetEffect; import mage.abilities.keyword.MyriadAbility; @@ -31,11 +32,14 @@ public final class HammersOfMoradin extends CardImpl { this.addAbility(new MyriadAbility()); // Whenever Hammers of Moradin attacks, for each opponent, tap up to one target creature that player controls. - this.addAbility(new AttacksTriggeredAbility( + Ability ability = new AttacksTriggeredAbility( new TapTargetEffect() .setTargetPointer(new EachTargetPointer()) .setText("for each opponent, tap up to one target creature that player controls") - ).setTargetAdjuster(new EachOpponentPermanentTargetsAdjuster(new TargetCreaturePermanent(0,1)))); + ); + ability.setTargetAdjuster(new EachOpponentPermanentTargetsAdjuster()); + ability.addTarget(new TargetCreaturePermanent(0,1)); + this.addAbility(ability); } private HammersOfMoradin(final HammersOfMoradin card) { diff --git a/Mage.Sets/src/mage/cards/i/InTheDarknessBindThem.java b/Mage.Sets/src/mage/cards/i/InTheDarknessBindThem.java index c890b6a5139..ac10e9577ff 100644 --- a/Mage.Sets/src/mage/cards/i/InTheDarknessBindThem.java +++ b/Mage.Sets/src/mage/cards/i/InTheDarknessBindThem.java @@ -57,7 +57,8 @@ public final class InTheDarknessBindThem extends CardImpl { ability.addEffect(new TheRingTemptsYouEffect()); ability.getEffects().setTargetPointer(new EachTargetPointer()); - ability.setTargetAdjuster(new EachOpponentPermanentTargetsAdjuster(new TargetCreaturePermanent(0,1))); + ability.setTargetAdjuster(new EachOpponentPermanentTargetsAdjuster()); + ability.addTarget(new TargetCreaturePermanent(0,1)); } ); diff --git a/Mage.Sets/src/mage/cards/j/JuvenileMistDragon.java b/Mage.Sets/src/mage/cards/j/JuvenileMistDragon.java index be08f005926..258e5033d2a 100644 --- a/Mage.Sets/src/mage/cards/j/JuvenileMistDragon.java +++ b/Mage.Sets/src/mage/cards/j/JuvenileMistDragon.java @@ -42,7 +42,8 @@ public final class JuvenileMistDragon extends CardImpl { .setTargetPointer(new EachTargetPointer()) .setText("Each of those creatures doesn't untap during its controller's next untap step") ); - ability.setTargetAdjuster(new EachOpponentPermanentTargetsAdjuster(new TargetCreaturePermanent(0,1))); + ability.setTargetAdjuster(new EachOpponentPermanentTargetsAdjuster()); + ability.addTarget(new TargetCreaturePermanent(0,1)); this.addAbility(ability.withFlavorWord("Confounding Clouds")); } diff --git a/Mage.Sets/src/mage/cards/l/LuminatePrimordial.java b/Mage.Sets/src/mage/cards/l/LuminatePrimordial.java index 3d4d1e50d63..57fb357ca8f 100644 --- a/Mage.Sets/src/mage/cards/l/LuminatePrimordial.java +++ b/Mage.Sets/src/mage/cards/l/LuminatePrimordial.java @@ -40,7 +40,8 @@ public final class LuminatePrimordial extends CardImpl { // When Luminate Primordial enters the battlefield, for each opponent, exile up to one target creature // that player controls and that player gains life equal to its power. Ability ability = new EntersBattlefieldTriggeredAbility(new LuminatePrimordialEffect(), false); - ability.setTargetAdjuster(new EachOpponentPermanentTargetsAdjuster(new TargetCreaturePermanent(0,1))); + ability.setTargetAdjuster(new EachOpponentPermanentTargetsAdjuster()); + ability.addTarget(new TargetCreaturePermanent(0,1)); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/m/MassMutiny.java b/Mage.Sets/src/mage/cards/m/MassMutiny.java index a686ced3c0e..72264d66b5d 100644 --- a/Mage.Sets/src/mage/cards/m/MassMutiny.java +++ b/Mage.Sets/src/mage/cards/m/MassMutiny.java @@ -31,7 +31,8 @@ public final class MassMutiny extends CardImpl { // For each opponent, gain control of up to one target creature that player controls until end of turn. Untap those creatures. They gain haste until end of turn. this.getSpellAbility().addEffect(new MassMutinyEffect()); - this.getSpellAbility().setTargetAdjuster(new EachOpponentPermanentTargetsAdjuster(new TargetCreaturePermanent(0,1))); + this.getSpellAbility().setTargetAdjuster(new EachOpponentPermanentTargetsAdjuster()); + this.getSpellAbility().addTarget(new TargetCreaturePermanent(0,1)); } private MassMutiny(final MassMutiny card) { diff --git a/Mage.Sets/src/mage/cards/m/MoltenPrimordial.java b/Mage.Sets/src/mage/cards/m/MoltenPrimordial.java index 026ec4f17b7..7bb7f68d76b 100644 --- a/Mage.Sets/src/mage/cards/m/MoltenPrimordial.java +++ b/Mage.Sets/src/mage/cards/m/MoltenPrimordial.java @@ -41,7 +41,8 @@ public final class MoltenPrimordial extends CardImpl { // When Molten Primordial enters the battlefield, for each opponent, take control of up to one target creature that player controls until end of turn. Untap those creatures. They have haste until end of turn. Ability ability = new EntersBattlefieldTriggeredAbility(new MoltenPrimordialEffect(), false); - ability.setTargetAdjuster(new EachOpponentPermanentTargetsAdjuster(new TargetCreaturePermanent(0,1))); + ability.setTargetAdjuster(new EachOpponentPermanentTargetsAdjuster()); + ability.addTarget(new TargetCreaturePermanent(0,1)); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/s/SinisterConcierge.java b/Mage.Sets/src/mage/cards/s/SinisterConcierge.java index 043b77c745a..8d52de34b6d 100644 --- a/Mage.Sets/src/mage/cards/s/SinisterConcierge.java +++ b/Mage.Sets/src/mage/cards/s/SinisterConcierge.java @@ -84,8 +84,7 @@ class SinisterConciergeEffect extends OneShotEffect { public boolean apply(Game game, Ability source) { Player controller = game.getPlayer(source.getControllerId()); Card card = game.getCard(source.getSourceId()); - Permanent targetCreature = game.getPermanent(this.getTargetPointer().getFirst(game, source)); - if (controller == null || card == null || targetCreature == null) { + if (controller == null || card == null) { return false; } @@ -99,6 +98,11 @@ class SinisterConciergeEffect extends OneShotEffect { } } + Permanent targetCreature = game.getPermanent(this.getTargetPointer().getFirst(game, source)); + if (targetCreature == null){ + return false; + } + // Exile, put time counters, and give suspend for target Effect exileTarget = new ExileTargetEffect(); exileTarget.setTargetPointer(this.getTargetPointer().copy()); diff --git a/Mage.Sets/src/mage/cards/s/SontaranGeneral.java b/Mage.Sets/src/mage/cards/s/SontaranGeneral.java index 7bf0867ba46..58118c655d1 100644 --- a/Mage.Sets/src/mage/cards/s/SontaranGeneral.java +++ b/Mage.Sets/src/mage/cards/s/SontaranGeneral.java @@ -42,7 +42,8 @@ public final class SontaranGeneral extends CardImpl { .setText("for each opponent, goad up to one target creature that player controls.")); ability.addEffect(new CantBlockTargetEffect(Duration.EndOfTurn) .setText("Those creatures can't block this turn.")); - ability.setTargetAdjuster(new EachOpponentPermanentTargetsAdjuster(new TargetCreaturePermanent(0, 1))); + ability.setTargetAdjuster(new EachOpponentPermanentTargetsAdjuster()); + ability.addTarget(new TargetCreaturePermanent(0, 1)); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/s/SylvanPrimordial.java b/Mage.Sets/src/mage/cards/s/SylvanPrimordial.java index 5068a9c92a1..c98b46e25bb 100644 --- a/Mage.Sets/src/mage/cards/s/SylvanPrimordial.java +++ b/Mage.Sets/src/mage/cards/s/SylvanPrimordial.java @@ -46,7 +46,8 @@ public final class SylvanPrimordial extends CardImpl { // When Sylvan Primordial enters the battlefield, for each opponent, destroy target noncreature permanent that player controls. For each permanent destroyed this way, search your library for a Forest card and put that card onto the battlefield tapped. Then shuffle your library. Ability ability = new EntersBattlefieldTriggeredAbility(new SylvanPrimordialEffect(), false); - ability.setTargetAdjuster(new EachOpponentPermanentTargetsAdjuster(new TargetPermanent(filter))); + ability.setTargetAdjuster(new EachOpponentPermanentTargetsAdjuster()); + ability.addTarget(new TargetPermanent(filter)); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/t/TemptedByTheOriq.java b/Mage.Sets/src/mage/cards/t/TemptedByTheOriq.java index 56429d94364..e9b46964d57 100644 --- a/Mage.Sets/src/mage/cards/t/TemptedByTheOriq.java +++ b/Mage.Sets/src/mage/cards/t/TemptedByTheOriq.java @@ -31,7 +31,8 @@ public final class TemptedByTheOriq extends CardImpl { .setTargetPointer(new EachTargetPointer()) .setText("for each opponent, gain control of up to one target creature " + "or planeswalker that player controls with mana value 3 or less")); - this.getSpellAbility().setTargetAdjuster(new EachOpponentPermanentTargetsAdjuster(new TargetPermanent(0, 1, filter))); + this.getSpellAbility().setTargetAdjuster(new EachOpponentPermanentTargetsAdjuster()); + this.getSpellAbility().addTarget(new TargetPermanent(0, 1, filter)); } private TemptedByTheOriq(final TemptedByTheOriq card) { diff --git a/Mage.Sets/src/mage/cards/t/TheBalrogOfMoria.java b/Mage.Sets/src/mage/cards/t/TheBalrogOfMoria.java index ed6097f131a..6260877a7e6 100644 --- a/Mage.Sets/src/mage/cards/t/TheBalrogOfMoria.java +++ b/Mage.Sets/src/mage/cards/t/TheBalrogOfMoria.java @@ -51,7 +51,8 @@ public final class TheBalrogOfMoria extends CardImpl { .setText("for each opponent, exile up to one target creature that player controls."), false ); - reflexiveAbility.setTargetAdjuster(new EachOpponentPermanentTargetsAdjuster(new TargetCreaturePermanent(0,1))); + reflexiveAbility.setTargetAdjuster(new EachOpponentPermanentTargetsAdjuster()); + reflexiveAbility.addTarget(new TargetCreaturePermanent(0,1)); this.addAbility(new DiesSourceTriggeredAbility( new DoWhenCostPaid( diff --git a/Mage.Sets/src/mage/cards/t/TheHorusHeresy.java b/Mage.Sets/src/mage/cards/t/TheHorusHeresy.java index cb67f709700..25a095df240 100644 --- a/Mage.Sets/src/mage/cards/t/TheHorusHeresy.java +++ b/Mage.Sets/src/mage/cards/t/TheHorusHeresy.java @@ -57,7 +57,8 @@ public final class TheHorusHeresy extends CardImpl { // I -- For each opponent, gain control of up to one target nonlegendary creature that player controls for as long as The Horus Heresy remains on the battlefield. sagaAbility.addChapterEffect(this, SagaChapter.CHAPTER_I, ability -> { ability.addEffect(new TheHorusHeresyControlEffect()); - ability.setTargetAdjuster(new EachOpponentPermanentTargetsAdjuster(new TargetPermanent(0, 1, filterNonlegendary))); + ability.setTargetAdjuster(new EachOpponentPermanentTargetsAdjuster()); + ability.addTarget(new TargetPermanent(0, 1, filterNonlegendary)); }); // II -- Draw a card for each creature you control but don't own. diff --git a/Mage.Sets/src/mage/cards/t/TheTrueScriptures.java b/Mage.Sets/src/mage/cards/t/TheTrueScriptures.java index ba9d9d4d127..bdcc3f39766 100644 --- a/Mage.Sets/src/mage/cards/t/TheTrueScriptures.java +++ b/Mage.Sets/src/mage/cards/t/TheTrueScriptures.java @@ -46,7 +46,8 @@ public final class TheTrueScriptures extends CardImpl { ability -> { ability.addEffect(new DestroyTargetEffect().setTargetPointer(new EachTargetPointer()) .setText("for each opponent, destroy up to one target creature or planeswalker that player controls")); - ability.setTargetAdjuster(new EachOpponentPermanentTargetsAdjuster(new TargetCreatureOrPlaneswalker(0,1))); + ability.setTargetAdjuster(new EachOpponentPermanentTargetsAdjuster()); + ability.addTarget(new TargetCreatureOrPlaneswalker(0,1)); } ); diff --git a/Mage.Sets/src/mage/cards/t/TolarianContempt.java b/Mage.Sets/src/mage/cards/t/TolarianContempt.java index b54ced1aa85..978093b8fb5 100644 --- a/Mage.Sets/src/mage/cards/t/TolarianContempt.java +++ b/Mage.Sets/src/mage/cards/t/TolarianContempt.java @@ -46,9 +46,10 @@ public final class TolarianContempt extends CardImpl { )); // At the beginning of your end step, for each opponent, choose up to one target creature they control with a rejection counter on it. That creature's owner puts it on the top or bottom of their library. - this.addAbility(new BeginningOfEndStepTriggeredAbility( - new TolarianContemptEffect(), TargetController.YOU, false - ).setTargetAdjuster(new EachOpponentPermanentTargetsAdjuster(new TargetPermanent(0,1, filterRejection)))); + Ability ability = new BeginningOfEndStepTriggeredAbility(new TolarianContemptEffect(), TargetController.YOU, false); + ability.setTargetAdjuster(new EachOpponentPermanentTargetsAdjuster()); + ability.addTarget(new TargetPermanent(0,1, filterRejection)); + this.addAbility(ability); } private TolarianContempt(final TolarianContempt card) { diff --git a/Mage.Sets/src/mage/cards/v/VronosMaskedInquisitor.java b/Mage.Sets/src/mage/cards/v/VronosMaskedInquisitor.java index 1eb650eae34..33878eda595 100644 --- a/Mage.Sets/src/mage/cards/v/VronosMaskedInquisitor.java +++ b/Mage.Sets/src/mage/cards/v/VronosMaskedInquisitor.java @@ -56,7 +56,8 @@ public final class VronosMaskedInquisitor extends CardImpl { // −2: For each opponent, return up to one target nonland permanent that player controls to its owner's hand. LoyaltyAbility ability2 = new LoyaltyAbility(new ReturnToHandTargetEffect().setTargetPointer(new EachTargetPointer()) .setText("for each opponent, return up to one target nonland permanent that player controls to its owner's hand"), -2); - ability2.setTargetAdjuster(new EachOpponentPermanentTargetsAdjuster(new TargetNonlandPermanent(0,1))); + ability2.setTargetAdjuster(new EachOpponentPermanentTargetsAdjuster()); + ability2.addTarget(new TargetNonlandPermanent(0,1)); this.addAbility(ability2); // −7: Target artifact you control becomes a 9/9 Construct artifact creature and gains vigilance, indestructible, and "This creature can't be blocked." diff --git a/Mage.Sets/src/mage/cards/w/WelcomeTo.java b/Mage.Sets/src/mage/cards/w/WelcomeTo.java index ac854728ea1..fbf900f99c2 100644 --- a/Mage.Sets/src/mage/cards/w/WelcomeTo.java +++ b/Mage.Sets/src/mage/cards/w/WelcomeTo.java @@ -63,7 +63,8 @@ public final class WelcomeTo extends CardImpl { ).setText("For each opponent, up to one target noncreature artifact they control becomes " + "a 0/4 Wall artifact creature with defender for as long as you control this Saga.")); ability.getEffects().setTargetPointer(new EachTargetPointer()); - ability.setTargetAdjuster(new EachOpponentPermanentTargetsAdjuster(new TargetPermanent(0, 1, filterNoncreatureArtifact))); + ability.setTargetAdjuster(new EachOpponentPermanentTargetsAdjuster()); + ability.addTarget(new TargetPermanent(0, 1, filterNoncreatureArtifact)); }); // II -- Create a 3/3 green Dinosaur creature token with trample. It gains haste until end of turn. diff --git a/Mage.Sets/src/mage/cards/w/WreckAndRebuild.java b/Mage.Sets/src/mage/cards/w/WreckAndRebuild.java index 966ecbf2990..e589fc83194 100644 --- a/Mage.Sets/src/mage/cards/w/WreckAndRebuild.java +++ b/Mage.Sets/src/mage/cards/w/WreckAndRebuild.java @@ -75,7 +75,7 @@ class WreckAndRebuildEffect extends OneShotEffect { return false; } TargetCard targetCard = new TargetCardInYourGraveyard( - 0, 1, StaticFilters.FILTER_CARD_CREATURE_YOUR_GRAVEYARD, true + 0, 1, StaticFilters.FILTER_CARD_LAND, true ); player.choose(outcome, targetCard, source, game); Card card = game.getCard(targetCard.getFirstTarget()); diff --git a/Mage/src/main/java/mage/target/targetadjustment/EachOpponentPermanentTargetsAdjuster.java b/Mage/src/main/java/mage/target/targetadjustment/EachOpponentPermanentTargetsAdjuster.java index e4260892c34..0b75ad3eb33 100644 --- a/Mage/src/main/java/mage/target/targetadjustment/EachOpponentPermanentTargetsAdjuster.java +++ b/Mage/src/main/java/mage/target/targetadjustment/EachOpponentPermanentTargetsAdjuster.java @@ -11,25 +11,23 @@ import mage.target.TargetPermanent; import java.util.UUID; /** - * * @author notgreat */ public class EachOpponentPermanentTargetsAdjuster implements TargetAdjuster { - private final TargetPermanent blueprintTarget; - + private TargetPermanent blueprintTarget = null; /** * Duplicates the permanent target for each opponent. * Filtering of permanent's controllers will be handled inside, so * do not pass a blueprint target with a controller restriction filter/predicate. - * - * @param blueprintTarget The target to be duplicated per opponent */ - public EachOpponentPermanentTargetsAdjuster(TargetPermanent blueprintTarget) { - this.blueprintTarget = blueprintTarget.copy(); //Defensively copy the blueprint to ensure immutability + public EachOpponentPermanentTargetsAdjuster() { } @Override public void adjustTargets(Ability ability, Game game) { + if (blueprintTarget == null) { + blueprintTarget = (TargetPermanent) ability.getTargets().get(0).copy(); + } ability.getTargets().clear(); for (UUID opponentId : game.getOpponents(ability.getControllerId())) { Player opponent = game.getPlayer(opponentId); @@ -40,7 +38,7 @@ public class EachOpponentPermanentTargetsAdjuster implements TargetAdjuster { Filter filter = newTarget.getFilter(); filter.add(new ControllerIdPredicate(opponentId)); if (newTarget.canChoose(ability.getControllerId(), ability, game)) { - filter.setMessage(filter.getMessage()+" controlled by " + opponent.getLogName()); + filter.setMessage(filter.getMessage() + " controlled by " + opponent.getLogName()); ability.addTarget(newTarget); } }