diff --git a/Mage.Sets/src/mage/sets/dragonsmaze/RalZarek.java b/Mage.Sets/src/mage/sets/dragonsmaze/RalZarek.java index 1f12e5f5f2c..285893c4a60 100644 --- a/Mage.Sets/src/mage/sets/dragonsmaze/RalZarek.java +++ b/Mage.Sets/src/mage/sets/dragonsmaze/RalZarek.java @@ -31,19 +31,23 @@ import java.util.UUID; import mage.abilities.Ability; import mage.abilities.LoyaltyAbility; import mage.abilities.common.PlanswalkerEntersWithLoyalityCountersAbility; +import mage.abilities.effects.Effect; import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.common.DamageTargetEffect; +import mage.abilities.effects.common.TapTargetEffect; +import mage.abilities.effects.common.UntapTargetEffect; import mage.cards.CardImpl; import mage.constants.CardType; import mage.constants.Outcome; import mage.constants.Rarity; import mage.filter.FilterPermanent; +import mage.filter.predicate.mageobject.AnotherTargetPredicate; import mage.game.Game; -import mage.game.permanent.Permanent; import mage.game.turn.TurnMod; import mage.players.Player; import mage.target.TargetPermanent; import mage.target.common.TargetCreatureOrPlayer; +import mage.target.targetpointer.SecondTargetPointer; /** * @@ -51,6 +55,12 @@ import mage.target.common.TargetCreatureOrPlayer; */ public class RalZarek extends CardImpl { + private static final FilterPermanent secondFilter = new FilterPermanent("another target permanent"); + + static { + secondFilter.add(new AnotherTargetPredicate(2)); + } + public RalZarek(UUID ownerId) { super(ownerId, 94, "Ral Zarek", Rarity.MYTHIC, new CardType[]{CardType.PLANESWALKER}, "{2}{U}{R}"); this.expansionSetCode = "DGM"; @@ -59,8 +69,17 @@ public class RalZarek extends CardImpl { this.addAbility(new PlanswalkerEntersWithLoyalityCountersAbility(4)); // +1: Tap target permanent, then untap another target permanent. - LoyaltyAbility ability1 = new LoyaltyAbility(new RalZarekTapUntapEffect(), 1); - ability1.addTarget(new TargetPermanent(2, 2, new FilterPermanent(), false)); + LoyaltyAbility ability1 = new LoyaltyAbility(new TapTargetEffect(), 1); + TargetPermanent firstTarget = new TargetPermanent(); + firstTarget.setTargetTag(1); + ability1.addTarget(firstTarget); + Effect effect = new UntapTargetEffect(); + effect.setText(", then untap another target permanent"); + effect.setTargetPointer(new SecondTargetPointer()); + ability1.addEffect(effect); + TargetPermanent secondTarget = new TargetPermanent(secondFilter); + secondTarget.setTargetTag(2); + ability1.addTarget(secondTarget); this.addAbility(ability1); // -2: Ral Zarek deals 3 damage to target creature or player. @@ -83,45 +102,6 @@ public class RalZarek extends CardImpl { } } -class RalZarekTapUntapEffect extends OneShotEffect { - - public RalZarekTapUntapEffect() { - super(Outcome.Tap); - this.staticText = "Tap target permanent, then untap another target permanent"; - } - - public RalZarekTapUntapEffect(final RalZarekTapUntapEffect effect) { - super(effect); - } - - @Override - public RalZarekTapUntapEffect copy() { - return new RalZarekTapUntapEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - Player player = game.getPlayer(source.getControllerId()); - if (player != null) { - int i = 0; - for (UUID targetId : source.getTargets().get(0).getTargets()) { - i++; - Permanent permanent = game.getPermanent(targetId); - if (permanent != null) { - if (i == 1) { - permanent.tap(game); - } - if (i == 2) { - permanent.untap(game); - } - } - } - return true; - } - return false; - } -} - class RalZarekExtraTurnsEffect extends OneShotEffect { public RalZarekExtraTurnsEffect() { diff --git a/Mage/src/main/java/mage/filter/predicate/mageobject/AnotherTargetPredicate.java b/Mage/src/main/java/mage/filter/predicate/mageobject/AnotherTargetPredicate.java index 27dc2b15b69..18959437deb 100644 --- a/Mage/src/main/java/mage/filter/predicate/mageobject/AnotherTargetPredicate.java +++ b/Mage/src/main/java/mage/filter/predicate/mageobject/AnotherTargetPredicate.java @@ -46,6 +46,10 @@ public class AnotherTargetPredicate implements ObjectSourcePlayerPredicate 0 // target is included in the target group to check && target.getTargetTag() != targetTag // it's not the target of this predicate && target.getTargets().contains(input.getObject().getId())) { // if the uuid already is used for another target in the group it's not allowed here - return false; + return false; } } }