diff --git a/Mage.Sets/src/mage/cards/b/BloodBeckoning.java b/Mage.Sets/src/mage/cards/b/BloodBeckoning.java
index add0e266028..db006cdf083 100644
--- a/Mage.Sets/src/mage/cards/b/BloodBeckoning.java
+++ b/Mage.Sets/src/mage/cards/b/BloodBeckoning.java
@@ -1,6 +1,5 @@
package mage.cards.b;
-import mage.abilities.Ability;
import mage.abilities.condition.common.KickedCondition;
import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect;
import mage.abilities.keyword.KickerAbility;
@@ -8,9 +7,8 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.filter.StaticFilters;
-import mage.game.Game;
import mage.target.common.TargetCardInYourGraveyard;
-import mage.target.targetadjustment.TargetAdjuster;
+import mage.target.targetadjustment.ConditionalTargetAdjuster;
import java.util.UUID;
@@ -29,7 +27,10 @@ public final class BloodBeckoning extends CardImpl {
this.getSpellAbility().addEffect(new ReturnFromGraveyardToHandTargetEffect()
.setText("return target creature card from your graveyard to your hand. If this spell was kicked, " +
"instead return two target creature cards from your graveyard to your hand"));
- this.getSpellAbility().setTargetAdjuster(BloodBeckoningAdjuster.instance);
+ this.getSpellAbility().addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_CREATURE));
+ this.getSpellAbility().setTargetAdjuster(new ConditionalTargetAdjuster(KickedCondition.ONCE,
+ new TargetCardInYourGraveyard(2, StaticFilters.FILTER_CARD_CREATURE)));
+
}
private BloodBeckoning(final BloodBeckoning card) {
@@ -41,17 +42,3 @@ public final class BloodBeckoning extends CardImpl {
return new BloodBeckoning(this);
}
}
-
-enum BloodBeckoningAdjuster implements TargetAdjuster {
- instance;
-
- @Override
- public void adjustTargets(Ability ability, Game game) {
- ability.getTargets().clear();
- if (KickedCondition.ONCE.apply(game, ability)) {
- ability.addTarget(new TargetCardInYourGraveyard(2, StaticFilters.FILTER_CARD_CREATURE));
- } else {
- ability.addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_CREATURE));
- }
- }
-}
diff --git a/Mage.Sets/src/mage/cards/b/BloodchiefsThirst.java b/Mage.Sets/src/mage/cards/b/BloodchiefsThirst.java
index 17ed5fc4509..dc2dcd8141a 100644
--- a/Mage.Sets/src/mage/cards/b/BloodchiefsThirst.java
+++ b/Mage.Sets/src/mage/cards/b/BloodchiefsThirst.java
@@ -1,6 +1,5 @@
package mage.cards.b;
-import mage.abilities.Ability;
import mage.abilities.condition.common.KickedCondition;
import mage.abilities.effects.common.DestroyTargetEffect;
import mage.abilities.keyword.KickerAbility;
@@ -11,10 +10,9 @@ import mage.constants.ComparisonType;
import mage.filter.FilterPermanent;
import mage.filter.common.FilterCreatureOrPlaneswalkerPermanent;
import mage.filter.predicate.mageobject.ManaValuePredicate;
-import mage.game.Game;
import mage.target.TargetPermanent;
import mage.target.common.TargetCreatureOrPlaneswalker;
-import mage.target.targetadjustment.TargetAdjuster;
+import mage.target.targetadjustment.ConditionalTargetAdjuster;
import java.util.UUID;
@@ -23,6 +21,14 @@ import java.util.UUID;
*/
public final class BloodchiefsThirst extends CardImpl {
+ private static final FilterPermanent filter = new FilterCreatureOrPlaneswalkerPermanent(
+ "creature or planeswalker with mana value 2 or less"
+ );
+
+ static {
+ filter.add(new ManaValuePredicate(ComparisonType.FEWER_THAN, 3));
+ }
+
public BloodchiefsThirst(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{B}");
@@ -34,7 +40,9 @@ public final class BloodchiefsThirst extends CardImpl {
"Destroy target creature or planeswalker with mana value 2 or less. " +
"If this spell was kicked, instead destroy target creature or planeswalker."
));
- this.getSpellAbility().setTargetAdjuster(BloodchiefsThirstAdjuster.instance);
+ this.getSpellAbility().addTarget(new TargetPermanent(filter));
+ this.getSpellAbility().setTargetAdjuster(new ConditionalTargetAdjuster(KickedCondition.ONCE,
+ new TargetCreatureOrPlaneswalker()));
}
private BloodchiefsThirst(final BloodchiefsThirst card) {
@@ -46,25 +54,3 @@ public final class BloodchiefsThirst extends CardImpl {
return new BloodchiefsThirst(this);
}
}
-
-enum BloodchiefsThirstAdjuster implements TargetAdjuster {
- instance;
-
- private static final FilterPermanent filter = new FilterCreatureOrPlaneswalkerPermanent(
- "creature or planeswalker with mana value 2 or less"
- );
-
- static {
- filter.add(new ManaValuePredicate(ComparisonType.FEWER_THAN, 3));
- }
-
- @Override
- public void adjustTargets(Ability ability, Game game) {
- ability.getTargets().clear();
- if (KickedCondition.ONCE.apply(game, ability)) {
- ability.addTarget(new TargetCreatureOrPlaneswalker());
- } else {
- ability.addTarget(new TargetPermanent(filter));
- }
- }
-}
diff --git a/Mage.Sets/src/mage/cards/b/BraveTheWilds.java b/Mage.Sets/src/mage/cards/b/BraveTheWilds.java
index afb71bcbfe4..6381327e158 100644
--- a/Mage.Sets/src/mage/cards/b/BraveTheWilds.java
+++ b/Mage.Sets/src/mage/cards/b/BraveTheWilds.java
@@ -1,6 +1,5 @@
package mage.cards.b;
-import mage.abilities.Ability;
import mage.abilities.condition.common.BargainedCondition;
import mage.abilities.decorator.ConditionalOneShotEffect;
import mage.abilities.effects.common.AddContinuousEffectToGame;
@@ -14,11 +13,10 @@ import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.SubType;
import mage.filter.StaticFilters;
-import mage.game.Game;
import mage.game.permanent.token.custom.CreatureToken;
import mage.target.common.TargetCardInLibrary;
import mage.target.common.TargetControlledPermanent;
-import mage.target.targetadjustment.TargetAdjuster;
+import mage.target.targetadjustment.ConditionalTargetAdjuster;
import java.util.UUID;
@@ -44,7 +42,8 @@ public final class BraveTheWilds extends CardImpl {
"If this spell was bargained, target land you control becomes "
+ "a 3/3 Elemental creature with haste that's still a land."
));
- this.getSpellAbility().setTargetAdjuster(BraveTheWildsTargetAdjuster.instance);
+ this.getSpellAbility().setTargetAdjuster(new ConditionalTargetAdjuster(BargainedCondition.instance,
+ new TargetControlledPermanent(StaticFilters.FILTER_CONTROLLED_PERMANENT_LAND)));
// Search your library for a basic land card, reveal it, put it into your hand, then shuffle.
this.getSpellAbility().addEffect(new SearchLibraryPutInHandEffect(
@@ -61,15 +60,3 @@ public final class BraveTheWilds extends CardImpl {
return new BraveTheWilds(this);
}
}
-
-enum BraveTheWildsTargetAdjuster implements TargetAdjuster {
- instance;
-
- @Override
- public void adjustTargets(Ability ability, Game game) {
- ability.getTargets().clear();
- if (BargainedCondition.instance.apply(game, ability)) {
- ability.addTarget(new TargetControlledPermanent(StaticFilters.FILTER_CONTROLLED_PERMANENT_LAND));
- }
- }
-}
diff --git a/Mage.Sets/src/mage/cards/d/DwarvenLandslide.java b/Mage.Sets/src/mage/cards/d/DwarvenLandslide.java
index 02772ea7868..f9d9c65dde9 100644
--- a/Mage.Sets/src/mage/cards/d/DwarvenLandslide.java
+++ b/Mage.Sets/src/mage/cards/d/DwarvenLandslide.java
@@ -1,7 +1,5 @@
package mage.cards.d;
-import java.util.UUID;
-import mage.abilities.Ability;
import mage.abilities.condition.common.KickedCondition;
import mage.abilities.costs.Cost;
import mage.abilities.costs.Costs;
@@ -14,11 +12,10 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.filter.StaticFilters;
-import mage.filter.common.FilterControlledLandPermanent;
-import mage.game.Game;
-import mage.target.common.TargetControlledPermanent;
import mage.target.common.TargetLandPermanent;
-import mage.target.targetadjustment.TargetAdjuster;
+import mage.target.targetadjustment.ConditionalTargetAdjuster;
+
+import java.util.UUID;
/**
*
@@ -38,7 +35,8 @@ public final class DwarvenLandslide extends CardImpl {
// Destroy target land. If Dwarven Landslide was kicked, destroy another target land.
getSpellAbility().addEffect(new DestroyTargetEffect("Destroy target land. If this spell was kicked, destroy another target land"));
getSpellAbility().addTarget(new TargetLandPermanent());
- getSpellAbility().setTargetAdjuster(DwarvenLandslideAdjuster.instance);
+ getSpellAbility().setTargetAdjuster(new ConditionalTargetAdjuster(KickedCondition.ONCE,
+ new TargetLandPermanent(2)));
}
private DwarvenLandslide(final DwarvenLandslide card) {
@@ -50,15 +48,3 @@ public final class DwarvenLandslide extends CardImpl {
return new DwarvenLandslide(this);
}
}
-
-enum DwarvenLandslideAdjuster implements TargetAdjuster {
- instance;
-
- @Override
- public void adjustTargets(Ability ability, Game game) {
- if (KickedCondition.ONCE.apply(game, ability)) {
- ability.getTargets().clear();
- ability.addTarget(new TargetLandPermanent(2));
- }
- }
-}
diff --git a/Mage.Sets/src/mage/cards/e/ExpelTheUnworthy.java b/Mage.Sets/src/mage/cards/e/ExpelTheUnworthy.java
index 84a0088188b..e64da055440 100644
--- a/Mage.Sets/src/mage/cards/e/ExpelTheUnworthy.java
+++ b/Mage.Sets/src/mage/cards/e/ExpelTheUnworthy.java
@@ -17,7 +17,7 @@ import mage.game.Game;
import mage.game.permanent.Permanent;
import mage.players.Player;
import mage.target.common.TargetCreaturePermanent;
-import mage.target.targetadjustment.TargetAdjuster;
+import mage.target.targetadjustment.ConditionalTargetAdjuster;
import java.util.UUID;
@@ -27,6 +27,12 @@ import java.util.UUID;
public final class ExpelTheUnworthy extends CardImpl {
+ private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature with mana value 3 or less");
+
+ static {
+ filter.add(new ManaValuePredicate(ComparisonType.OR_LESS, 3));
+ }
+
public ExpelTheUnworthy(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{1}{W}");
@@ -37,7 +43,9 @@ public final class ExpelTheUnworthy extends CardImpl {
this.getSpellAbility().addEffect(new InfoEffect("Choose target creature with mana value 3 or less. If this spell was kicked, instead choose target creature."));
this.getSpellAbility().addEffect(new ExileTargetEffect().setText("Exile the chosen creature"));
this.getSpellAbility().addEffect(new ExpelTheUnworthyEffect());
- this.getSpellAbility().setTargetAdjuster(ExpelTheUnworthyAdjuster.instance);
+ this.getSpellAbility().addTarget(new TargetCreaturePermanent(filter));
+ this.getSpellAbility().setTargetAdjuster(new ConditionalTargetAdjuster(KickedCondition.ONCE,
+ new TargetCreaturePermanent()));
}
private ExpelTheUnworthy(final ExpelTheUnworthy card) {
@@ -50,27 +58,6 @@ public final class ExpelTheUnworthy extends CardImpl {
}
}
-enum ExpelTheUnworthyAdjuster implements TargetAdjuster {
- instance;
-
- private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature with mana value 3 or less");
-
- static {
- filter.add(new ManaValuePredicate(ComparisonType.OR_LESS, 3));
- }
-
- @Override
- public void adjustTargets(Ability ability, Game game) {
- ability.getTargets().clear();
- if (KickedCondition.ONCE.apply(game, ability)) {
- ability.addTarget(new TargetCreaturePermanent());
- } else {
- ability.addTarget(new TargetCreaturePermanent(filter));
- }
- }
-}
-
-
class ExpelTheUnworthyEffect extends OneShotEffect {
ExpelTheUnworthyEffect() {
diff --git a/Mage.Sets/src/mage/cards/f/FallingTimber.java b/Mage.Sets/src/mage/cards/f/FallingTimber.java
index 0711041ef61..388938cccfa 100644
--- a/Mage.Sets/src/mage/cards/f/FallingTimber.java
+++ b/Mage.Sets/src/mage/cards/f/FallingTimber.java
@@ -1,6 +1,5 @@
package mage.cards.f;
-import mage.abilities.Ability;
import mage.abilities.condition.common.KickedCondition;
import mage.abilities.costs.common.SacrificeTargetCost;
import mage.abilities.effects.Effect;
@@ -11,11 +10,8 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.filter.StaticFilters;
-import mage.filter.common.FilterControlledLandPermanent;
-import mage.game.Game;
-import mage.target.common.TargetControlledPermanent;
import mage.target.common.TargetCreaturePermanent;
-import mage.target.targetadjustment.TargetAdjuster;
+import mage.target.targetadjustment.ConditionalTargetAdjuster;
import java.util.UUID;
@@ -36,7 +32,9 @@ public final class FallingTimber extends CardImpl {
effect.setText("Prevent all combat damage target creature would deal this turn. If this spell was kicked, " +
"prevent all combat damage another target creature would deal this turn.");
this.getSpellAbility().addEffect(effect);
- this.getSpellAbility().setTargetAdjuster(FallingTimberAdjuster.instance);
+ this.getSpellAbility().addTarget(new TargetCreaturePermanent());
+ this.getSpellAbility().setTargetAdjuster(new ConditionalTargetAdjuster(KickedCondition.ONCE,
+ new TargetCreaturePermanent(2)));
}
private FallingTimber(final FallingTimber card) {
@@ -48,13 +46,3 @@ public final class FallingTimber extends CardImpl {
return new FallingTimber(this);
}
}
-
-enum FallingTimberAdjuster implements TargetAdjuster {
- instance;
-
- @Override
- public void adjustTargets(Ability ability, Game game) {
- ability.getTargets().clear();
- ability.addTarget(new TargetCreaturePermanent(KickedCondition.ONCE.apply(game, ability) ? 2 : 1));
- }
-}
diff --git a/Mage.Sets/src/mage/cards/f/FightWithFire.java b/Mage.Sets/src/mage/cards/f/FightWithFire.java
index 69a9a4b126a..f501c8714cd 100644
--- a/Mage.Sets/src/mage/cards/f/FightWithFire.java
+++ b/Mage.Sets/src/mage/cards/f/FightWithFire.java
@@ -1,7 +1,5 @@
package mage.cards.f;
-import java.util.UUID;
-import mage.abilities.Ability;
import mage.abilities.condition.common.KickedCondition;
import mage.abilities.decorator.ConditionalOneShotEffect;
import mage.abilities.effects.common.DamageMultiEffect;
@@ -10,11 +8,11 @@ import mage.abilities.keyword.KickerAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
-import mage.game.Game;
-import mage.target.common.TargetAnyTarget;
import mage.target.common.TargetAnyTargetAmount;
import mage.target.common.TargetCreaturePermanent;
-import mage.target.targetadjustment.TargetAdjuster;
+import mage.target.targetadjustment.ConditionalTargetAdjuster;
+
+import java.util.UUID;
/**
*
@@ -34,11 +32,12 @@ public final class FightWithFire extends CardImpl {
new DamageTargetEffect(5),
KickedCondition.ONCE,
"{this} deals 5 damage to target creature. If this spell was kicked, "
- + "it deals 10 damage divided as you choose among any number of targets instead."
- + " (Those targets can include players and planeswalkers.)"
+ + "it deals 10 damage divided as you choose among any number of targets instead."
+ + " (Those targets can include players and planeswalkers.)"
));
- this.getSpellAbility().addTarget(new TargetAnyTarget());
- this.getSpellAbility().setTargetAdjuster(FightWithFireAdjuster.instance);
+ this.getSpellAbility().addTarget(new TargetCreaturePermanent());
+ this.getSpellAbility().setTargetAdjuster(new ConditionalTargetAdjuster(KickedCondition.ONCE,
+ new TargetAnyTargetAmount(10)));
}
private FightWithFire(final FightWithFire card) {
@@ -50,17 +49,3 @@ public final class FightWithFire extends CardImpl {
return new FightWithFire(this);
}
}
-
-enum FightWithFireAdjuster implements TargetAdjuster {
- instance;
-
- @Override
- public void adjustTargets(Ability ability, Game game) {
- ability.getTargets().clear();
- if (KickedCondition.ONCE.apply(game, ability)) {
- ability.addTarget(new TargetAnyTargetAmount(10));
- } else {
- ability.addTarget(new TargetCreaturePermanent());
- }
- }
-}
diff --git a/Mage.Sets/src/mage/cards/g/GaladrielsDismissal.java b/Mage.Sets/src/mage/cards/g/GaladrielsDismissal.java
index 3f85956d49e..ae773855997 100644
--- a/Mage.Sets/src/mage/cards/g/GaladrielsDismissal.java
+++ b/Mage.Sets/src/mage/cards/g/GaladrielsDismissal.java
@@ -17,7 +17,7 @@ import mage.game.permanent.Permanent;
import mage.players.Player;
import mage.target.TargetPlayer;
import mage.target.common.TargetCreaturePermanent;
-import mage.target.targetadjustment.TargetAdjuster;
+import mage.target.targetadjustment.ConditionalTargetAdjuster;
import java.util.ArrayList;
import java.util.List;
@@ -39,11 +39,12 @@ public final class GaladrielsDismissal extends CardImpl {
this.getSpellAbility().addEffect(new ConditionalOneShotEffect(
new GaladrielsDismissalPhaseOutTargetPlayerEffect(),
new PhaseOutTargetEffect(),
- KickedCondition.ONCE, "Target creature phases out. If this spell was kicked, each creature target player controls phases out instead. "+
+ KickedCondition.ONCE, "Target creature phases out. If this spell was kicked, each creature target player controls phases out instead. " +
"(Treat phased-out creatures and anything attached to them as though they don't exist until their controller's next turn.)"
));
- this.getSpellAbility().setTargetAdjuster(GaladrielsDismissalAdjuster.instance);
-
+ this.getSpellAbility().addTarget(new TargetCreaturePermanent());
+ this.getSpellAbility().setTargetAdjuster(new ConditionalTargetAdjuster(KickedCondition.ONCE,
+ new TargetPlayer()));
}
private GaladrielsDismissal(final GaladrielsDismissal card) {
@@ -85,17 +86,3 @@ class GaladrielsDismissalPhaseOutTargetPlayerEffect extends OneShotEffect {
return false;
}
}
-
-enum GaladrielsDismissalAdjuster implements TargetAdjuster {
- instance;
-
- @Override
- public void adjustTargets(Ability ability, Game game) {
- ability.getTargets().clear();
- if (KickedCondition.ONCE.apply(game, ability)) {
- ability.addTarget(new TargetPlayer());
- } else {
- ability.addTarget(new TargetCreaturePermanent());
- }
- }
-}
diff --git a/Mage.Sets/src/mage/cards/g/GoblinBarrage.java b/Mage.Sets/src/mage/cards/g/GoblinBarrage.java
index ccc033c7b33..9eb142c1c70 100644
--- a/Mage.Sets/src/mage/cards/g/GoblinBarrage.java
+++ b/Mage.Sets/src/mage/cards/g/GoblinBarrage.java
@@ -1,7 +1,6 @@
package mage.cards.g;
-import mage.abilities.Ability;
import mage.abilities.condition.common.KickedCondition;
import mage.abilities.costs.common.SacrificeTargetCost;
import mage.abilities.effects.common.DamageTargetEffect;
@@ -12,11 +11,9 @@ import mage.constants.CardType;
import mage.constants.SubType;
import mage.filter.common.FilterControlledPermanent;
import mage.filter.predicate.Predicates;
-import mage.game.Game;
-import mage.target.common.TargetControlledPermanent;
import mage.target.common.TargetCreaturePermanent;
import mage.target.common.TargetPlayerOrPlaneswalker;
-import mage.target.targetadjustment.TargetAdjuster;
+import mage.target.targetadjustment.ConditionalTargetAdjuster;
import java.util.UUID;
@@ -46,7 +43,8 @@ public final class GoblinBarrage extends CardImpl {
+ "it also deals 4 damage to target player or planeswalker")
);
this.getSpellAbility().addTarget(new TargetCreaturePermanent());
- this.getSpellAbility().setTargetAdjuster(GoblinBarrageAdjuster.instance);
+ this.getSpellAbility().setTargetAdjuster(new ConditionalTargetAdjuster(KickedCondition.ONCE, true,
+ new TargetPlayerOrPlaneswalker()));
}
private GoblinBarrage(final GoblinBarrage card) {
@@ -58,14 +56,3 @@ public final class GoblinBarrage extends CardImpl {
return new GoblinBarrage(this);
}
}
-
-enum GoblinBarrageAdjuster implements TargetAdjuster {
- instance;
-
- @Override
- public void adjustTargets(Ability ability, Game game) {
- if (KickedCondition.ONCE.apply(game, ability)) {
- ability.addTarget(new TargetPlayerOrPlaneswalker());
- }
- }
-}
diff --git a/Mage.Sets/src/mage/cards/i/IntoTheFloodMaw.java b/Mage.Sets/src/mage/cards/i/IntoTheFloodMaw.java
index 3650c548723..6c2cb9e2a6b 100644
--- a/Mage.Sets/src/mage/cards/i/IntoTheFloodMaw.java
+++ b/Mage.Sets/src/mage/cards/i/IntoTheFloodMaw.java
@@ -1,6 +1,5 @@
package mage.cards.i;
-import mage.abilities.Ability;
import mage.abilities.condition.common.GiftWasPromisedCondition;
import mage.abilities.effects.common.ReturnToHandTargetEffect;
import mage.abilities.keyword.GiftAbility;
@@ -9,10 +8,9 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.GiftType;
import mage.filter.StaticFilters;
-import mage.game.Game;
import mage.target.TargetPermanent;
import mage.target.common.TargetOpponentsCreaturePermanent;
-import mage.target.targetadjustment.TargetAdjuster;
+import mage.target.targetadjustment.ConditionalTargetAdjuster;
import java.util.UUID;
@@ -32,7 +30,8 @@ public final class IntoTheFloodMaw extends CardImpl {
.setText("return target creature an opponent controls to its owner's hand. If the gift was promise, " +
"instead return target nonland permanent an opponent controls to its owner's hand"));
this.getSpellAbility().addTarget(new TargetOpponentsCreaturePermanent());
- this.getSpellAbility().setTargetAdjuster(IntoTheFloodMawAdjuster.instance);
+ this.getSpellAbility().setTargetAdjuster(new ConditionalTargetAdjuster(GiftWasPromisedCondition.TRUE,
+ new TargetPermanent(StaticFilters.FILTER_OPPONENTS_PERMANENT_NON_LAND)));
}
private IntoTheFloodMaw(final IntoTheFloodMaw card) {
@@ -44,15 +43,3 @@ public final class IntoTheFloodMaw extends CardImpl {
return new IntoTheFloodMaw(this);
}
}
-
-enum IntoTheFloodMawAdjuster implements TargetAdjuster {
- instance;
-
- @Override
- public void adjustTargets(Ability ability, Game game) {
- if (GiftWasPromisedCondition.TRUE.apply(game, ability)) {
- ability.getTargets().clear();
- ability.addTarget(new TargetPermanent(StaticFilters.FILTER_OPPONENTS_PERMANENT_NON_LAND));
- }
- }
-}
diff --git a/Mage.Sets/src/mage/cards/j/Jilt.java b/Mage.Sets/src/mage/cards/j/Jilt.java
index a3fff63cea4..9051022f8ec 100644
--- a/Mage.Sets/src/mage/cards/j/Jilt.java
+++ b/Mage.Sets/src/mage/cards/j/Jilt.java
@@ -1,6 +1,5 @@
package mage.cards.j;
-import mage.abilities.Ability;
import mage.abilities.condition.common.KickedCondition;
import mage.abilities.decorator.ConditionalOneShotEffect;
import mage.abilities.effects.common.DamageTargetEffect;
@@ -11,18 +10,21 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.other.AnotherTargetPredicate;
-import mage.game.Game;
import mage.target.common.TargetCreaturePermanent;
-import mage.target.targetadjustment.TargetAdjuster;
+import mage.target.targetadjustment.ConditionalTargetAdjuster;
import mage.target.targetpointer.SecondTargetPointer;
import java.util.UUID;
/**
- *
* @author fireshoes
*/
public final class Jilt extends CardImpl {
+ private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("another target creature");
+
+ static {
+ filter.add(new AnotherTargetPredicate(2));
+ }
public Jilt(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{1}{U}");
@@ -38,7 +40,8 @@ public final class Jilt extends CardImpl {
"if this spell was kicked, it deals 2 damage to another target creature")
.setTargetPointer(new SecondTargetPointer()));
this.getSpellAbility().addTarget(new TargetCreaturePermanent().setTargetTag(1).withChooseHint("to return to hand"));
- this.getSpellAbility().setTargetAdjuster(JiltAdjuster.instance);
+ this.getSpellAbility().setTargetAdjuster(new ConditionalTargetAdjuster(KickedCondition.ONCE, true,
+ new TargetCreaturePermanent(filter).setTargetTag(2).withChooseHint("to deal 2 damage")));
}
private Jilt(final Jilt card) {
@@ -50,18 +53,3 @@ public final class Jilt extends CardImpl {
return new Jilt(this);
}
}
-
-enum JiltAdjuster implements TargetAdjuster {
- instance;
-
- @Override
- public void adjustTargets(Ability ability, Game game) {
- if (!KickedCondition.ONCE.apply(game, ability)) {
- return;
- }
- FilterCreaturePermanent filter = new FilterCreaturePermanent("another target creature");
- filter.add(new AnotherTargetPredicate(2));
- ability.addTarget(new TargetCreaturePermanent(filter).setTargetTag(2).withChooseHint("to deal 2 damage"));
- }
-
-}
diff --git a/Mage.Sets/src/mage/cards/l/LongRiversPull.java b/Mage.Sets/src/mage/cards/l/LongRiversPull.java
index 36d5178fc0c..be2419f179a 100644
--- a/Mage.Sets/src/mage/cards/l/LongRiversPull.java
+++ b/Mage.Sets/src/mage/cards/l/LongRiversPull.java
@@ -1,6 +1,5 @@
package mage.cards.l;
-import mage.abilities.Ability;
import mage.abilities.condition.common.GiftWasPromisedCondition;
import mage.abilities.effects.common.CounterTargetEffect;
import mage.abilities.keyword.GiftAbility;
@@ -9,9 +8,8 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.GiftType;
import mage.filter.StaticFilters;
-import mage.game.Game;
import mage.target.TargetSpell;
-import mage.target.targetadjustment.TargetAdjuster;
+import mage.target.targetadjustment.ConditionalTargetAdjuster;
import java.util.UUID;
@@ -30,7 +28,8 @@ public final class LongRiversPull extends CardImpl {
this.getSpellAbility().addEffect(new CounterTargetEffect()
.setText("counter target creature spell. If the gift was promised, instead counter target spell"));
this.getSpellAbility().addTarget(new TargetSpell(StaticFilters.FILTER_SPELL_CREATURE));
- this.getSpellAbility().setTargetAdjuster(LongRiversPullAdjuster.instance);
+ this.getSpellAbility().setTargetAdjuster(new ConditionalTargetAdjuster(GiftWasPromisedCondition.TRUE,
+ new TargetSpell()));
}
private LongRiversPull(final LongRiversPull card) {
@@ -42,15 +41,3 @@ public final class LongRiversPull extends CardImpl {
return new LongRiversPull(this);
}
}
-
-enum LongRiversPullAdjuster implements TargetAdjuster {
- instance;
-
- @Override
- public void adjustTargets(Ability ability, Game game) {
- if (GiftWasPromisedCondition.TRUE.apply(game, ability)) {
- ability.getTargets().clear();
- ability.addTarget(new TargetSpell());
- }
- }
-}
diff --git a/Mage.Sets/src/mage/cards/m/MagmaBurst.java b/Mage.Sets/src/mage/cards/m/MagmaBurst.java
index 6623ce6ef42..d8100bc79ef 100644
--- a/Mage.Sets/src/mage/cards/m/MagmaBurst.java
+++ b/Mage.Sets/src/mage/cards/m/MagmaBurst.java
@@ -1,6 +1,5 @@
package mage.cards.m;
-import mage.abilities.Ability;
import mage.abilities.condition.common.KickedCondition;
import mage.abilities.costs.common.SacrificeTargetCost;
import mage.abilities.effects.Effect;
@@ -10,11 +9,8 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.filter.StaticFilters;
-import mage.filter.common.FilterControlledLandPermanent;
-import mage.game.Game;
import mage.target.common.TargetAnyTarget;
-import mage.target.common.TargetControlledPermanent;
-import mage.target.targetadjustment.TargetAdjuster;
+import mage.target.targetadjustment.ConditionalTargetAdjuster;
import java.util.UUID;
@@ -33,7 +29,9 @@ public final class MagmaBurst extends CardImpl {
Effect effect = new DamageTargetEffect(3);
effect.setText("{this} deals 3 damage to any target. If this spell was kicked, it deals 3 damage to another target.");
this.getSpellAbility().addEffect(effect);
- this.getSpellAbility().setTargetAdjuster(MagmaBurstAdjuster.instance);
+ this.getSpellAbility().addTarget(new TargetAnyTarget());
+ this.getSpellAbility().setTargetAdjuster(new ConditionalTargetAdjuster(KickedCondition.ONCE,
+ new TargetAnyTarget(2)));
}
private MagmaBurst(final MagmaBurst card) {
@@ -45,12 +43,3 @@ public final class MagmaBurst extends CardImpl {
return new MagmaBurst(this);
}
}
-
-enum MagmaBurstAdjuster implements TargetAdjuster {
- instance;
-
- @Override
- public void adjustTargets(Ability ability, Game game) {
- ability.addTarget(new TargetAnyTarget(KickedCondition.ONCE.apply(game, ability) ? 2 : 1));
- }
-}
diff --git a/Mage.Sets/src/mage/cards/o/OrimsThunder.java b/Mage.Sets/src/mage/cards/o/OrimsThunder.java
index cf12b6e5b74..d19a4b374ff 100644
--- a/Mage.Sets/src/mage/cards/o/OrimsThunder.java
+++ b/Mage.Sets/src/mage/cards/o/OrimsThunder.java
@@ -16,7 +16,7 @@ import mage.game.Game;
import mage.game.permanent.Permanent;
import mage.target.TargetPermanent;
import mage.target.common.TargetCreaturePermanent;
-import mage.target.targetadjustment.TargetAdjuster;
+import mage.target.targetadjustment.ConditionalTargetAdjuster;
import java.util.UUID;
@@ -39,7 +39,8 @@ public final class OrimsThunder extends CardImpl {
KickedCondition.ONCE,
"If this spell was kicked, it deals damage equal to that permanent's mana value to target creature")
);
- this.getSpellAbility().setTargetAdjuster(OrimsThunderAdjuster.instance);
+ this.getSpellAbility().setTargetAdjuster(new ConditionalTargetAdjuster(KickedCondition.ONCE,
+ new TargetCreaturePermanent()));
}
private OrimsThunder(final OrimsThunder card) {
@@ -52,18 +53,6 @@ public final class OrimsThunder extends CardImpl {
}
}
-enum OrimsThunderAdjuster implements TargetAdjuster {
- instance;
-
- @Override
- public void adjustTargets(Ability ability, Game game) {
- if (KickedCondition.ONCE.apply(game, ability)) {
- ability.addTarget(new TargetCreaturePermanent());
- }
- }
-
-}
-
class OrimsThunderEffect2 extends OneShotEffect {
OrimsThunderEffect2() {
diff --git a/Mage.Sets/src/mage/cards/p/PeerlessRecycling.java b/Mage.Sets/src/mage/cards/p/PeerlessRecycling.java
index 27aecf869eb..55f023fd46f 100644
--- a/Mage.Sets/src/mage/cards/p/PeerlessRecycling.java
+++ b/Mage.Sets/src/mage/cards/p/PeerlessRecycling.java
@@ -1,6 +1,5 @@
package mage.cards.p;
-import mage.abilities.Ability;
import mage.abilities.condition.common.GiftWasPromisedCondition;
import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect;
import mage.abilities.keyword.GiftAbility;
@@ -9,9 +8,8 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.GiftType;
import mage.filter.StaticFilters;
-import mage.game.Game;
import mage.target.common.TargetCardInYourGraveyard;
-import mage.target.targetadjustment.TargetAdjuster;
+import mage.target.targetadjustment.ConditionalTargetAdjuster;
import java.util.UUID;
@@ -31,7 +29,8 @@ public final class PeerlessRecycling extends CardImpl {
.setText("return target permanent from your graveyard to your hand. If the gift was promised, " +
"instead return two target permanent cards from your graveyard to your hand"));
this.getSpellAbility().addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_PERMANENT));
- this.getSpellAbility().setTargetAdjuster(PeerlessRecyclingAdjuster.instance);
+ this.getSpellAbility().setTargetAdjuster(new ConditionalTargetAdjuster(GiftWasPromisedCondition.TRUE,
+ new TargetCardInYourGraveyard(2, StaticFilters.FILTER_CARD_PERMANENTS)));
}
private PeerlessRecycling(final PeerlessRecycling card) {
@@ -43,15 +42,3 @@ public final class PeerlessRecycling extends CardImpl {
return new PeerlessRecycling(this);
}
}
-
-enum PeerlessRecyclingAdjuster implements TargetAdjuster {
- instance;
-
- @Override
- public void adjustTargets(Ability ability, Game game) {
- if (GiftWasPromisedCondition.TRUE.apply(game, ability)) {
- ability.getTargets().clear();
- ability.addTarget(new TargetCardInYourGraveyard(2, StaticFilters.FILTER_CARD_PERMANENTS));
- }
- }
-}
\ No newline at end of file
diff --git a/Mage.Sets/src/mage/cards/p/PollenRemedy.java b/Mage.Sets/src/mage/cards/p/PollenRemedy.java
index 12006dadf12..a1e3503b4de 100644
--- a/Mage.Sets/src/mage/cards/p/PollenRemedy.java
+++ b/Mage.Sets/src/mage/cards/p/PollenRemedy.java
@@ -1,6 +1,5 @@
package mage.cards.p;
-import mage.abilities.Ability;
import mage.abilities.condition.common.KickedCondition;
import mage.abilities.costs.common.SacrificeTargetCost;
import mage.abilities.decorator.ConditionalReplacementEffect;
@@ -12,11 +11,8 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.filter.StaticFilters;
-import mage.filter.common.FilterControlledLandPermanent;
-import mage.game.Game;
import mage.target.common.TargetAnyTargetAmount;
-import mage.target.common.TargetControlledPermanent;
-import mage.target.targetadjustment.TargetAdjuster;
+import mage.target.targetadjustment.ConditionalTargetAdjuster;
import java.util.UUID;
@@ -37,7 +33,9 @@ public final class PollenRemedy extends CardImpl {
KickedCondition.ONCE, new PreventDamageToTargetMultiAmountEffect(Duration.EndOfTurn, 3));
effect.setText("Prevent the next 3 damage that would be dealt this turn to any number of targets, divided as you choose. If this spell was kicked, prevent the next 6 damage this way instead.");
this.getSpellAbility().addEffect(effect);
- this.getSpellAbility().setTargetAdjuster(PollenRemedyAdjuster.instance);
+ this.getSpellAbility().addTarget(new TargetAnyTargetAmount(3));
+ this.getSpellAbility().setTargetAdjuster(new ConditionalTargetAdjuster(KickedCondition.ONCE,
+ new TargetAnyTargetAmount(6)));
}
private PollenRemedy(final PollenRemedy card) {
@@ -49,12 +47,3 @@ public final class PollenRemedy extends CardImpl {
return new PollenRemedy(this);
}
}
-
-enum PollenRemedyAdjuster implements TargetAdjuster {
- instance;
-
- @Override
- public void adjustTargets(Ability ability, Game game) {
- ability.addTarget(new TargetAnyTargetAmount(KickedCondition.ONCE.apply(game, ability) ? 6 : 3));
- }
-}
diff --git a/Mage.Sets/src/mage/cards/p/Probe.java b/Mage.Sets/src/mage/cards/p/Probe.java
index 147814f1be3..9c232bfd6cf 100644
--- a/Mage.Sets/src/mage/cards/p/Probe.java
+++ b/Mage.Sets/src/mage/cards/p/Probe.java
@@ -1,7 +1,6 @@
package mage.cards.p;
-import mage.abilities.Ability;
import mage.abilities.condition.common.KickedCondition;
import mage.abilities.decorator.ConditionalOneShotEffect;
import mage.abilities.effects.common.DrawDiscardControllerEffect;
@@ -10,9 +9,8 @@ import mage.abilities.keyword.KickerAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
-import mage.game.Game;
import mage.target.TargetPlayer;
-import mage.target.targetadjustment.TargetAdjuster;
+import mage.target.targetadjustment.ConditionalTargetAdjuster;
import java.util.UUID;
@@ -33,7 +31,8 @@ public final class Probe extends CardImpl {
new DiscardTargetEffect(2),
KickedCondition.ONCE,
"If this spell was kicked, target player discards two cards"));
- this.getSpellAbility().setTargetAdjuster(ProbeAdjuster.instance);
+ this.getSpellAbility().setTargetAdjuster(new ConditionalTargetAdjuster(KickedCondition.ONCE,
+ new TargetPlayer()));
}
private Probe(final Probe card) {
@@ -45,15 +44,3 @@ public final class Probe extends CardImpl {
return new Probe(this);
}
}
-
-enum ProbeAdjuster implements TargetAdjuster {
- instance;
-
- @Override
- public void adjustTargets(Ability ability, Game game) {
- ability.getTargets().clear();
- if (KickedCondition.ONCE.apply(game, ability)) {
- ability.addTarget(new TargetPlayer());
- }
- }
-}
\ No newline at end of file
diff --git a/Mage.Sets/src/mage/cards/r/RushingRiver.java b/Mage.Sets/src/mage/cards/r/RushingRiver.java
index d51b76db9f8..6f53eb8e729 100644
--- a/Mage.Sets/src/mage/cards/r/RushingRiver.java
+++ b/Mage.Sets/src/mage/cards/r/RushingRiver.java
@@ -1,6 +1,5 @@
package mage.cards.r;
-import mage.abilities.Ability;
import mage.abilities.condition.common.KickedCondition;
import mage.abilities.costs.common.SacrificeTargetCost;
import mage.abilities.effects.common.ReturnToHandTargetEffect;
@@ -9,9 +8,8 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.filter.StaticFilters;
-import mage.game.Game;
import mage.target.common.TargetNonlandPermanent;
-import mage.target.targetadjustment.TargetAdjuster;
+import mage.target.targetadjustment.ConditionalTargetAdjuster;
import mage.target.targetpointer.EachTargetPointer;
import java.util.UUID;
@@ -32,7 +30,9 @@ public final class RushingRiver extends CardImpl {
.setTargetPointer(new EachTargetPointer())
.setText("Return target nonland permanent to its owner's hand. " +
"If this spell was kicked, return another target nonland permanent to its owner's hand"));
- this.getSpellAbility().setTargetAdjuster(RushingRiverAdjuster.instance);
+ this.getSpellAbility().addTarget(new TargetNonlandPermanent());
+ this.getSpellAbility().setTargetAdjuster(new ConditionalTargetAdjuster(KickedCondition.ONCE,
+ new TargetNonlandPermanent(2)));
}
private RushingRiver(final RushingRiver card) {
@@ -44,15 +44,3 @@ public final class RushingRiver extends CardImpl {
return new RushingRiver(this);
}
}
-
-enum RushingRiverAdjuster implements TargetAdjuster {
- instance;
-
- @Override
- public void adjustTargets(Ability ability, Game game) {
- ability.getTargets().clear();
- ability.addTarget(new TargetNonlandPermanent(
- KickedCondition.ONCE.apply(game, ability) ? 2 : 1
- ));
- }
-}
diff --git a/Mage.Sets/src/mage/cards/s/SigilOfSleep.java b/Mage.Sets/src/mage/cards/s/SigilOfSleep.java
index ccbdace4c8f..e2d93bd8223 100644
--- a/Mage.Sets/src/mage/cards/s/SigilOfSleep.java
+++ b/Mage.Sets/src/mage/cards/s/SigilOfSleep.java
@@ -1,6 +1,5 @@
package mage.cards.s;
-import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.common.DealsDamageToAPlayerAttachedTriggeredAbility;
import mage.abilities.effects.Effect;
@@ -10,22 +9,21 @@ import mage.abilities.keyword.EnchantAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
-import mage.constants.SubType;
import mage.constants.Outcome;
+import mage.constants.SubType;
import mage.filter.common.FilterCreaturePermanent;
-import mage.filter.predicate.permanent.ControllerIdPredicate;
-import mage.game.Game;
-import mage.target.Target;
import mage.target.TargetPermanent;
import mage.target.common.TargetCreaturePermanent;
-import mage.target.targetadjustment.TargetAdjuster;
-import mage.target.targetpointer.FirstTargetPointer;
+import mage.target.targetadjustment.DamagedPlayerControlsTargetAdjuster;
+
+import java.util.UUID;
/**
*
* @author LevelX2
*/
public final class SigilOfSleep extends CardImpl {
+ private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature that player controls");
public SigilOfSleep(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{U}");
@@ -40,9 +38,9 @@ public final class SigilOfSleep extends CardImpl {
// Whenever enchanted creature deals damage to a player, return target creature that player controls to its owner's hand.
Effect effect = new ReturnToHandTargetEffect();
- effect.setText("return target creature that player controls to its owner's hand");
ability = new DealsDamageToAPlayerAttachedTriggeredAbility(effect, "enchanted", false, true, false);
- ability.setTargetAdjuster(SigilOfSleepAdjuster.instance);
+ ability.addTarget(new TargetCreaturePermanent(filter));
+ ability.setTargetAdjuster(new DamagedPlayerControlsTargetAdjuster());
this.addAbility(ability);
}
@@ -55,20 +53,3 @@ public final class SigilOfSleep extends CardImpl {
return new SigilOfSleep(this);
}
}
-
-enum SigilOfSleepAdjuster implements TargetAdjuster {
- instance;
-
- @Override
- public void adjustTargets(Ability ability, Game game) {
- UUID playerId = ability.getEffects().get(0).getTargetPointer().getFirst(game, ability);
- if (playerId != null) {
- FilterCreaturePermanent filter = new FilterCreaturePermanent("creature that player controls");
- filter.add(new ControllerIdPredicate(playerId));
- Target target = new TargetCreaturePermanent(filter);
- ability.getTargets().clear();
- ability.addTarget(target);
- ability.getEffects().get(0).setTargetPointer(new FirstTargetPointer());
- }
- }
-}
diff --git a/Mage.Sets/src/mage/cards/t/TearAsunder.java b/Mage.Sets/src/mage/cards/t/TearAsunder.java
index 120c5157a16..a9ae45d0e5c 100644
--- a/Mage.Sets/src/mage/cards/t/TearAsunder.java
+++ b/Mage.Sets/src/mage/cards/t/TearAsunder.java
@@ -1,6 +1,5 @@
package mage.cards.t;
-import mage.abilities.Ability;
import mage.abilities.condition.common.KickedCondition;
import mage.abilities.effects.common.ExileTargetEffect;
import mage.abilities.keyword.KickerAbility;
@@ -8,10 +7,9 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.filter.StaticFilters;
-import mage.game.Game;
import mage.target.TargetPermanent;
import mage.target.common.TargetNonlandPermanent;
-import mage.target.targetadjustment.TargetAdjuster;
+import mage.target.targetadjustment.ConditionalTargetAdjuster;
import java.util.UUID;
@@ -28,7 +26,9 @@ public final class TearAsunder extends CardImpl {
// Exile target artifact or enchantment. If this spell was kicked, exile target nonland permanent instead.
this.getSpellAbility().addEffect(new ExileTargetEffect().setText("Exile target artifact or enchantment. If this spell was kicked, exile target nonland permanent instead."));
- this.getSpellAbility().setTargetAdjuster(TearAsunderAdjuster.instance);
+ this.getSpellAbility().addTarget(new TargetPermanent(StaticFilters.FILTER_PERMANENT_ARTIFACT_OR_ENCHANTMENT));
+ this.getSpellAbility().setTargetAdjuster(new ConditionalTargetAdjuster(KickedCondition.ONCE,
+ new TargetNonlandPermanent()));
}
private TearAsunder(final TearAsunder card) {
@@ -40,17 +40,3 @@ public final class TearAsunder extends CardImpl {
return new TearAsunder(this);
}
}
-
-enum TearAsunderAdjuster implements TargetAdjuster {
- instance;
-
- @Override
- public void adjustTargets(Ability ability, Game game) {
- ability.getTargets().clear();
- if (KickedCondition.ONCE.apply(game, ability)) {
- ability.addTarget(new TargetNonlandPermanent());
- } else {
- ability.addTarget(new TargetPermanent(StaticFilters.FILTER_PERMANENT_ARTIFACT_OR_ENCHANTMENT));
- }
- }
-}
\ No newline at end of file
diff --git a/Mage.Sets/src/mage/cards/u/UnstableFooting.java b/Mage.Sets/src/mage/cards/u/UnstableFooting.java
index 5bcfb3b296f..cdfa113a702 100644
--- a/Mage.Sets/src/mage/cards/u/UnstableFooting.java
+++ b/Mage.Sets/src/mage/cards/u/UnstableFooting.java
@@ -1,21 +1,17 @@
package mage.cards.u;
-import mage.abilities.Ability;
import mage.abilities.condition.common.KickedCondition;
import mage.abilities.decorator.ConditionalOneShotEffect;
-import mage.abilities.effects.ReplacementEffectImpl;
import mage.abilities.effects.common.DamageTargetEffect;
+import mage.abilities.effects.common.continuous.DamageCantBePreventedEffect;
import mage.abilities.keyword.KickerAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
-import mage.constants.Outcome;
-import mage.game.Game;
-import mage.game.events.GameEvent;
import mage.target.common.TargetPlayerOrPlaneswalker;
-import mage.target.targetadjustment.TargetAdjuster;
+import mage.target.targetadjustment.ConditionalTargetAdjuster;
import java.util.UUID;
@@ -31,14 +27,14 @@ public final class UnstableFooting extends CardImpl {
this.addAbility(new KickerAbility("{3}{R}"));
// Damage can't be prevented this turn. If Unstable Footing was kicked, it deals 5 damage to target player.
- this.getSpellAbility().addEffect(new UnstableFootingEffect());
+ this.getSpellAbility().addEffect(new DamageCantBePreventedEffect(Duration.EndOfTurn));
this.getSpellAbility().addEffect(new ConditionalOneShotEffect(
new DamageTargetEffect(5),
KickedCondition.ONCE,
"If this spell was kicked, it deals 5 damage to target player or planeswalker")
);
- this.getSpellAbility().setTargetAdjuster(UnstableFootingAdjuster.instance);
-
+ this.getSpellAbility().setTargetAdjuster(new ConditionalTargetAdjuster(KickedCondition.ONCE,
+ new TargetPlayerOrPlaneswalker()));
}
private UnstableFooting(final UnstableFooting card) {
@@ -50,48 +46,3 @@ public final class UnstableFooting extends CardImpl {
return new UnstableFooting(this);
}
}
-
-enum UnstableFootingAdjuster implements TargetAdjuster {
- instance;
-
- @Override
- public void adjustTargets(Ability ability, Game game) {
- ability.getTargets().clear();
- if (KickedCondition.ONCE.apply(game, ability)) {
- ability.addTarget(new TargetPlayerOrPlaneswalker());
- }
- }
-}
-
-class UnstableFootingEffect extends ReplacementEffectImpl {
-
- UnstableFootingEffect() {
- super(Duration.EndOfTurn, Outcome.Benefit);
- staticText = "Damage can't be prevented this turn";
- }
-
- private UnstableFootingEffect(final UnstableFootingEffect effect) {
- super(effect);
- }
-
- @Override
- public UnstableFootingEffect copy() {
- return new UnstableFootingEffect(this);
- }
-
- @Override
- public boolean replaceEvent(GameEvent event, Ability source, Game game) {
- return true;
- }
-
- @Override
- public boolean checksEventType(GameEvent event, Game game) {
- return event.getType() == GameEvent.EventType.PREVENT_DAMAGE;
- }
-
- @Override
- public boolean applies(GameEvent event, Ability source, Game game) {
- return true;
- }
-
-}
diff --git a/Mage.Sets/src/mage/cards/u/UrborgRepossession.java b/Mage.Sets/src/mage/cards/u/UrborgRepossession.java
index 0d4388e04f9..021f5ba51d0 100644
--- a/Mage.Sets/src/mage/cards/u/UrborgRepossession.java
+++ b/Mage.Sets/src/mage/cards/u/UrborgRepossession.java
@@ -1,6 +1,5 @@
package mage.cards.u;
-import mage.abilities.Ability;
import mage.abilities.condition.common.KickedCondition;
import mage.abilities.effects.common.GainLifeEffect;
import mage.abilities.effects.common.InfoEffect;
@@ -13,9 +12,8 @@ import mage.filter.FilterCard;
import mage.filter.StaticFilters;
import mage.filter.common.FilterPermanentCard;
import mage.filter.predicate.other.AnotherTargetPredicate;
-import mage.game.Game;
import mage.target.common.TargetCardInYourGraveyard;
-import mage.target.targetadjustment.TargetAdjuster;
+import mage.target.targetadjustment.ConditionalTargetAdjuster;
import mage.target.targetpointer.EachTargetPointer;
import java.util.UUID;
@@ -25,6 +23,12 @@ import java.util.UUID;
*/
public final class UrborgRepossession extends CardImpl {
+ private static final FilterCard filter = new FilterPermanentCard("another permanent card from your graveyard");
+
+ static {
+ filter.add(new AnotherTargetPredicate(2));
+ }
+
public UrborgRepossession(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{B}");
@@ -38,7 +42,9 @@ public final class UrborgRepossession extends CardImpl {
this.getSpellAbility().addEffect(new GainLifeEffect(2));
this.getSpellAbility().addEffect(new InfoEffect("If this spell was kicked, " +
"return another target permanent card from your graveyard to your hand"));
- this.getSpellAbility().setTargetAdjuster(UrborgRepossessionAdjuster.instance);
+ this.getSpellAbility().addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_CREATURE_YOUR_GRAVEYARD).setTargetTag(1));
+ this.getSpellAbility().setTargetAdjuster(new ConditionalTargetAdjuster(KickedCondition.ONCE, true,
+ new TargetCardInYourGraveyard(filter).setTargetTag(2)));
}
private UrborgRepossession(final UrborgRepossession card) {
@@ -50,21 +56,3 @@ public final class UrborgRepossession extends CardImpl {
return new UrborgRepossession(this);
}
}
-
-enum UrborgRepossessionAdjuster implements TargetAdjuster {
- instance;
- private static final FilterCard filter = new FilterPermanentCard("another permanent card from your graveyard");
-
- static {
- filter.add(new AnotherTargetPredicate(2));
- }
-
- @Override
- public void adjustTargets(Ability ability, Game game) {
- ability.getTargets().clear();
- ability.addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_CREATURE_YOUR_GRAVEYARD));
- if (KickedCondition.ONCE.apply(game, ability)) {
- ability.addTarget(new TargetCardInYourGraveyard(filter).setTargetTag(2));
- }
- }
-}
diff --git a/Mage.Sets/src/mage/cards/v/ValleyRally.java b/Mage.Sets/src/mage/cards/v/ValleyRally.java
index 183d6d13822..6afd908ccb8 100644
--- a/Mage.Sets/src/mage/cards/v/ValleyRally.java
+++ b/Mage.Sets/src/mage/cards/v/ValleyRally.java
@@ -1,6 +1,5 @@
package mage.cards.v;
-import mage.abilities.Ability;
import mage.abilities.condition.common.GiftWasPromisedCondition;
import mage.abilities.decorator.ConditionalOneShotEffect;
import mage.abilities.effects.common.AddContinuousEffectToGame;
@@ -13,9 +12,8 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.GiftType;
-import mage.game.Game;
import mage.target.common.TargetControlledCreaturePermanent;
-import mage.target.targetadjustment.TargetAdjuster;
+import mage.target.targetadjustment.ConditionalTargetAdjuster;
import java.util.UUID;
@@ -37,7 +35,8 @@ public final class ValleyRally extends CardImpl {
GiftWasPromisedCondition.TRUE, "If the gift was promised, target creature " +
"you control gains first strike until end of turn"
));
- this.getSpellAbility().setTargetAdjuster(ValleyRallyAdjuster.instance);
+ this.getSpellAbility().setTargetAdjuster(new ConditionalTargetAdjuster(GiftWasPromisedCondition.TRUE,
+ new TargetControlledCreaturePermanent()));
}
private ValleyRally(final ValleyRally card) {
@@ -49,15 +48,3 @@ public final class ValleyRally extends CardImpl {
return new ValleyRally(this);
}
}
-
-enum ValleyRallyAdjuster implements TargetAdjuster {
- instance;
-
- @Override
- public void adjustTargets(Ability ability, Game game) {
- if (GiftWasPromisedCondition.TRUE.apply(game, ability)) {
- ability.getTargets().clear();
- ability.addTarget(new TargetControlledCreaturePermanent());
- }
- }
-}
diff --git a/Mage.Sets/src/mage/cards/w/WasteManagement.java b/Mage.Sets/src/mage/cards/w/WasteManagement.java
index 02af0300a34..0d3b3f6ac3b 100644
--- a/Mage.Sets/src/mage/cards/w/WasteManagement.java
+++ b/Mage.Sets/src/mage/cards/w/WasteManagement.java
@@ -17,7 +17,7 @@ import mage.game.permanent.token.RogueToken;
import mage.players.Player;
import mage.target.TargetPlayer;
import mage.target.common.TargetCardInASingleGraveyard;
-import mage.target.targetadjustment.TargetAdjuster;
+import mage.target.targetadjustment.ConditionalTargetAdjuster;
import java.util.UUID;
@@ -34,7 +34,9 @@ public final class WasteManagement extends CardImpl {
// Exile up to two target cards from a single graveyard. If this spell was kicked, instead exile target player's graveyard. Create a 2/2 black Rogue creature token for each creature card exiled this way.
this.getSpellAbility().addEffect(new WasteManagementEffect());
- this.getSpellAbility().setTargetAdjuster(WasteManagementAdjuster.instance);
+ this.getSpellAbility().addTarget(new TargetCardInASingleGraveyard(0, 2, StaticFilters.FILTER_CARD));
+ this.getSpellAbility().setTargetAdjuster(new ConditionalTargetAdjuster(KickedCondition.ONCE,
+ new TargetPlayer()));
}
private WasteManagement(final WasteManagement card) {
@@ -47,20 +49,6 @@ public final class WasteManagement extends CardImpl {
}
}
-enum WasteManagementAdjuster implements TargetAdjuster {
- instance;
-
- @Override
- public void adjustTargets(Ability ability, Game game) {
- ability.getTargets().clear();
- if (KickedCondition.ONCE.apply(game, ability)) {
- ability.addTarget(new TargetPlayer());
- } else {
- ability.addTarget(new TargetCardInASingleGraveyard(0, 2, StaticFilters.FILTER_CARD));
- }
- }
-}
-
class WasteManagementEffect extends OneShotEffect {
WasteManagementEffect() {
diff --git a/Mage.Sets/src/mage/cards/w/WearDown.java b/Mage.Sets/src/mage/cards/w/WearDown.java
index 4ce7894d6c5..b52b52738f6 100644
--- a/Mage.Sets/src/mage/cards/w/WearDown.java
+++ b/Mage.Sets/src/mage/cards/w/WearDown.java
@@ -1,6 +1,5 @@
package mage.cards.w;
-import mage.abilities.Ability;
import mage.abilities.condition.common.GiftWasPromisedCondition;
import mage.abilities.effects.common.DestroyTargetEffect;
import mage.abilities.keyword.GiftAbility;
@@ -9,9 +8,8 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.GiftType;
import mage.filter.StaticFilters;
-import mage.game.Game;
import mage.target.TargetPermanent;
-import mage.target.targetadjustment.TargetAdjuster;
+import mage.target.targetadjustment.ConditionalTargetAdjuster;
import java.util.UUID;
@@ -30,7 +28,8 @@ public final class WearDown extends CardImpl {
this.getSpellAbility().addEffect(new DestroyTargetEffect().setText("destroy target artifact or enchantment. " +
"If the gift was promised, instead destroy two target artifacts and/or enchantments"));
this.getSpellAbility().addTarget(new TargetPermanent(StaticFilters.FILTER_PERMANENT_ARTIFACT_OR_ENCHANTMENT));
- this.getSpellAbility().setTargetAdjuster(WearDownAdjuster.instance);
+ this.getSpellAbility().setTargetAdjuster(new ConditionalTargetAdjuster(GiftWasPromisedCondition.TRUE,
+ new TargetPermanent(2, StaticFilters.FILTER_PERMANENT_ARTIFACT_OR_ENCHANTMENT)));
}
private WearDown(final WearDown card) {
@@ -42,15 +41,3 @@ public final class WearDown extends CardImpl {
return new WearDown(this);
}
}
-
-enum WearDownAdjuster implements TargetAdjuster {
- instance;
-
- @Override
- public void adjustTargets(Ability ability, Game game) {
- if (GiftWasPromisedCondition.TRUE.apply(game, ability)) {
- ability.getTargets().clear();
- ability.addTarget(new TargetPermanent(2, StaticFilters.FILTER_PERMANENT_ARTIFACT_OR_ENCHANTMENT));
- }
- }
-}
\ No newline at end of file
diff --git a/Mage/src/main/java/mage/target/targetadjustment/ConditionalTargetAdjuster.java b/Mage/src/main/java/mage/target/targetadjustment/ConditionalTargetAdjuster.java
new file mode 100644
index 00000000000..964ffbe87b9
--- /dev/null
+++ b/Mage/src/main/java/mage/target/targetadjustment/ConditionalTargetAdjuster.java
@@ -0,0 +1,62 @@
+package mage.target.targetadjustment;
+
+import mage.abilities.Ability;
+import mage.abilities.condition.Condition;
+import mage.game.Game;
+import mage.target.Target;
+import mage.target.Targets;
+
+/**
+ * @author notgreat
+ */
+public class ConditionalTargetAdjuster implements TargetAdjuster {
+ private final Condition condition;
+ private final boolean keepOldTargets;
+ private final Targets replacementTargets;
+
+ /**
+ * If the condition is true, replace the target
+ *
+ * @param condition The condition to be checked
+ * @param replacementTarget The target to use if the condition is true.
+ */
+ public ConditionalTargetAdjuster(Condition condition, Target replacementTarget) {
+ this(condition, false, new Targets(replacementTarget));
+ }
+
+ /**
+ * If the condition is true, change the target list
+ *
+ * @param condition The condition to be checked
+ * @param keepOldTargets Add to the targets list instead of replacing it entirely
+ * @param replacementTarget The target to use if the condition is true. Can also take a Targets list
+ */
+ public ConditionalTargetAdjuster(Condition condition, boolean keepOldTargets, Target replacementTarget) {
+ this(condition, keepOldTargets, new Targets(replacementTarget));
+ }
+
+ /**
+ * If the condition is true, change the target list with multiple targets at once
+ *
+ * @param condition The condition to be checked
+ * @param keepOldTargets Add to the targets list instead of replacing it entirely
+ * @param replacementTargets The targets list to use if the condition is true.
+ */
+ public ConditionalTargetAdjuster(Condition condition, boolean keepOldTargets, Targets replacementTargets) {
+ this.condition = condition;
+ this.keepOldTargets = keepOldTargets;
+ this.replacementTargets = replacementTargets;
+ }
+
+ @Override
+ public void adjustTargets(Ability ability, Game game) {
+ if (condition.apply(game, ability)) {
+ if (!keepOldTargets) {
+ ability.getTargets().clear();
+ }
+ for (Target target : replacementTargets) {
+ ability.addTarget(target.copy());
+ }
+ }
+ }
+}