diff --git a/Mage.Sets/src/mage/cards/a/AcrobaticManeuver.java b/Mage.Sets/src/mage/cards/a/AcrobaticManeuver.java index a7af03c18d9..6ee33d1681b 100644 --- a/Mage.Sets/src/mage/cards/a/AcrobaticManeuver.java +++ b/Mage.Sets/src/mage/cards/a/AcrobaticManeuver.java @@ -1,7 +1,5 @@ - package mage.cards.a; -import java.util.UUID; import mage.abilities.effects.Effect; import mage.abilities.effects.common.DrawCardSourceControllerEffect; import mage.abilities.effects.common.ExileTargetForSourceEffect; @@ -11,8 +9,9 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.target.common.TargetControlledCreaturePermanent; +import java.util.UUID; + /** - * * @author LevelX2 */ public final class AcrobaticManeuver extends CardImpl { @@ -24,7 +23,7 @@ public final class AcrobaticManeuver extends CardImpl { this.getSpellAbility().addTarget(new TargetControlledCreaturePermanent()); Effect effect = new ExileTargetForSourceEffect(); this.getSpellAbility().addEffect(effect); - this.getSpellAbility().addEffect(new ReturnToBattlefieldUnderOwnerControlTargetEffect()); + this.getSpellAbility().addEffect(new ReturnToBattlefieldUnderOwnerControlTargetEffect(false, false)); // Draw a card. this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1)); diff --git a/Mage.Sets/src/mage/cards/a/AngelOfCondemnation.java b/Mage.Sets/src/mage/cards/a/AngelOfCondemnation.java index b407c9e41f8..f82b5cbfe43 100644 --- a/Mage.Sets/src/mage/cards/a/AngelOfCondemnation.java +++ b/Mage.Sets/src/mage/cards/a/AngelOfCondemnation.java @@ -1,7 +1,5 @@ - package mage.cards.a; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; @@ -31,13 +29,15 @@ import mage.players.Player; import mage.target.common.TargetCreaturePermanent; import mage.target.targetpointer.FixedTarget; +import java.util.UUID; + /** - * * @author emerald000 */ public final class AngelOfCondemnation extends CardImpl { private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("another target creature"); + static { filter.add(AnotherPredicate.instance); } @@ -101,7 +101,7 @@ class AngelOfCondemnationExileUntilEOTEffect extends OneShotEffect { if (controller != null && permanent != null && sourcePermanent != null) { if (controller.moveCardToExileWithInfo(permanent, source.getSourceId(), sourcePermanent.getIdName(), source.getSourceId(), game, Zone.BATTLEFIELD, true)) { //create delayed triggered ability - Effect effect = new ReturnToBattlefieldUnderOwnerControlTargetEffect(); + Effect effect = new ReturnToBattlefieldUnderOwnerControlTargetEffect(false, false); effect.setText("return that card to the battlefield under its owner's control"); effect.setTargetPointer(new FixedTarget(source.getFirstTarget(), game)); game.addDelayedTriggeredAbility(new AtTheBeginOfNextEndStepDelayedTriggeredAbility(effect), source); diff --git a/Mage.Sets/src/mage/cards/a/AngelicRenewal.java b/Mage.Sets/src/mage/cards/a/AngelicRenewal.java index 32c670b17cc..7e423095ad0 100644 --- a/Mage.Sets/src/mage/cards/a/AngelicRenewal.java +++ b/Mage.Sets/src/mage/cards/a/AngelicRenewal.java @@ -1,7 +1,5 @@ - package mage.cards.a; -import java.util.UUID; import mage.abilities.common.PutIntoGraveFromBattlefieldAllTriggeredAbility; import mage.abilities.costs.common.SacrificeSourceCost; import mage.abilities.effects.common.DoIfCostPaid; @@ -11,19 +9,20 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.filter.common.FilterCreaturePermanent; +import java.util.UUID; + /** - * * @author LoneFox */ public final class AngelicRenewal extends CardImpl { public AngelicRenewal(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{1}{W}"); + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{W}"); // Whenever a creature is put into your graveyard from the battlefield, you may sacrifice Angelic Renewal. If you do, return that card to the battlefield. this.addAbility(new PutIntoGraveFromBattlefieldAllTriggeredAbility(new DoIfCostPaid( - new ReturnToBattlefieldUnderOwnerControlTargetEffect(), new SacrificeSourceCost()), false, - new FilterCreaturePermanent("a creature"), true, true)); + new ReturnToBattlefieldUnderOwnerControlTargetEffect(false, false), new SacrificeSourceCost()), false, + new FilterCreaturePermanent("a creature"), true, true)); } public AngelicRenewal(final AngelicRenewal card) { diff --git a/Mage.Sets/src/mage/cards/a/AstralDrift.java b/Mage.Sets/src/mage/cards/a/AstralDrift.java index 82b191e991f..7879752767c 100644 --- a/Mage.Sets/src/mage/cards/a/AstralDrift.java +++ b/Mage.Sets/src/mage/cards/a/AstralDrift.java @@ -124,7 +124,7 @@ class AstralDriftEffect extends OneShotEffect { return true; } //create delayed triggered ability - Effect effect = new ReturnToBattlefieldUnderOwnerControlTargetEffect(); + Effect effect = new ReturnToBattlefieldUnderOwnerControlTargetEffect(false, false); effect.setText("Return that card to the battlefield under its owner's control at the beginning of the next end step"); effect.setTargetPointer(new FixedTarget(permanent.getId(), game)); game.addDelayedTriggeredAbility(new AtTheBeginOfNextEndStepDelayedTriggeredAbility(effect), source); diff --git a/Mage.Sets/src/mage/cards/a/AstralSlide.java b/Mage.Sets/src/mage/cards/a/AstralSlide.java index f5efb9a9eca..0f0db9bf8e1 100644 --- a/Mage.Sets/src/mage/cards/a/AstralSlide.java +++ b/Mage.Sets/src/mage/cards/a/AstralSlide.java @@ -1,7 +1,5 @@ - package mage.cards.a; -import java.util.UUID; import mage.MageObject; import mage.abilities.Ability; import mage.abilities.common.CycleAllTriggeredAbility; @@ -19,8 +17,9 @@ import mage.players.Player; import mage.target.common.TargetCreaturePermanent; import mage.target.targetpointer.FixedTarget; +import java.util.UUID; + /** - * * @author Plopman */ public final class AstralSlide extends CardImpl { @@ -48,7 +47,7 @@ class AstralSlideEffect extends OneShotEffect { public AstralSlideEffect() { super(Outcome.Detriment); - staticText = "exile target creature. If you do, eturn that card to the battlefield under its owner's control at the beginning of the next end step"; + staticText = "exile target creature. If you do, return that card to the battlefield under its owner's control at the beginning of the next end step"; } public AstralSlideEffect(final AstralSlideEffect effect) { @@ -65,7 +64,7 @@ class AstralSlideEffect extends OneShotEffect { UUID exileId = UUID.randomUUID(); if (controller.moveCardsToExile(permanent, source, game, true, exileId, sourceObject.getIdName())) { //create delayed triggered ability - Effect effect = new ReturnToBattlefieldUnderOwnerControlTargetEffect(); + Effect effect = new ReturnToBattlefieldUnderOwnerControlTargetEffect(false, false); effect.setText("Return that card to the battlefield under its owner's control at the beginning of the next end step"); effect.setTargetPointer(new FixedTarget(permanent.getId(), game)); game.addDelayedTriggeredAbility(new AtTheBeginOfNextEndStepDelayedTriggeredAbility(effect), source); diff --git a/Mage.Sets/src/mage/cards/b/BlizzardStrix.java b/Mage.Sets/src/mage/cards/b/BlizzardStrix.java index aef99000aed..194b0b16297 100644 --- a/Mage.Sets/src/mage/cards/b/BlizzardStrix.java +++ b/Mage.Sets/src/mage/cards/b/BlizzardStrix.java @@ -94,7 +94,7 @@ class BlizzardStrixEffect extends OneShotEffect { if (controller != null && permanent != null && sourcePermanent != null) { if (controller.moveCardToExileWithInfo(permanent, source.getSourceId(), sourcePermanent.getIdName(), source.getSourceId(), game, Zone.BATTLEFIELD, true)) { //create delayed triggered ability - Effect effect = new ReturnToBattlefieldUnderOwnerControlTargetEffect(); + Effect effect = new ReturnToBattlefieldUnderOwnerControlTargetEffect(false, false); effect.setText("Return that card to the battlefield under its owner's control at the beginning of the next end step"); effect.setTargetPointer(new FixedTarget(source.getFirstTarget(), game)); game.addDelayedTriggeredAbility(new AtTheBeginOfNextEndStepDelayedTriggeredAbility(effect), source); diff --git a/Mage.Sets/src/mage/cards/c/CalixDestinysHand.java b/Mage.Sets/src/mage/cards/c/CalixDestinysHand.java index 82c27d022d3..06862cc2412 100644 --- a/Mage.Sets/src/mage/cards/c/CalixDestinysHand.java +++ b/Mage.Sets/src/mage/cards/c/CalixDestinysHand.java @@ -1,7 +1,5 @@ package mage.cards.c; -import java.util.UUID; -import java.util.stream.Collectors; import mage.MageObject; import mage.MageObjectReference; import mage.abilities.Ability; @@ -15,7 +13,6 @@ import mage.abilities.effects.common.ReturnToBattlefieldUnderOwnerControlTargetE import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.*; -import static mage.constants.Outcome.Benefit; import mage.filter.FilterCard; import mage.filter.FilterPermanent; import mage.filter.common.FilterControlledEnchantmentPermanent; @@ -29,6 +26,11 @@ import mage.players.Player; import mage.target.TargetPermanent; import mage.target.targetpointer.FixedTarget; +import java.util.UUID; +import java.util.stream.Collectors; + +import static mage.constants.Outcome.Benefit; + /** * @author TheElk801 */ @@ -155,7 +157,7 @@ class CalixDestinysHandDelayedTriggeredAbility extends DelayedTriggeredAbility { return false; } this.getEffects().clear(); - this.addEffect(new ReturnToBattlefieldUnderOwnerControlTargetEffect() + this.addEffect(new ReturnToBattlefieldUnderOwnerControlTargetEffect(false, false) .setTargetPointer(new FixedTarget(this.theirMor))); return true; } diff --git a/Mage.Sets/src/mage/cards/c/Cloudshift.java b/Mage.Sets/src/mage/cards/c/Cloudshift.java index f960256b118..58df0848950 100644 --- a/Mage.Sets/src/mage/cards/c/Cloudshift.java +++ b/Mage.Sets/src/mage/cards/c/Cloudshift.java @@ -1,7 +1,5 @@ - package mage.cards.c; -import java.util.UUID; import mage.abilities.effects.Effect; import mage.abilities.effects.common.ExileTargetForSourceEffect; import mage.abilities.effects.common.ReturnToBattlefieldUnderYourControlTargetEffect; @@ -10,8 +8,9 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.target.common.TargetControlledCreaturePermanent; +import java.util.UUID; + /** - * * @author noxx */ public final class Cloudshift extends CardImpl { @@ -23,7 +22,7 @@ public final class Cloudshift extends CardImpl { this.getSpellAbility().addTarget(new TargetControlledCreaturePermanent()); Effect effect = new ExileTargetForSourceEffect(); this.getSpellAbility().addEffect(effect); - this.getSpellAbility().addEffect(new ReturnToBattlefieldUnderYourControlTargetEffect(true)); + this.getSpellAbility().addEffect(new ReturnToBattlefieldUnderYourControlTargetEffect(false)); } public Cloudshift(final Cloudshift card) { diff --git a/Mage.Sets/src/mage/cards/c/ConjurersCloset.java b/Mage.Sets/src/mage/cards/c/ConjurersCloset.java index 0783f1750ca..2eda380a1fc 100644 --- a/Mage.Sets/src/mage/cards/c/ConjurersCloset.java +++ b/Mage.Sets/src/mage/cards/c/ConjurersCloset.java @@ -1,7 +1,5 @@ - package mage.cards.c; -import java.util.UUID; import mage.abilities.Ability; import mage.abilities.common.BeginningOfYourEndStepTriggeredAbility; import mage.abilities.effects.common.ExileTargetForSourceEffect; @@ -11,17 +9,19 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.target.common.TargetControlledCreaturePermanent; +import java.util.UUID; + /** * @author noxx */ public final class ConjurersCloset extends CardImpl { public ConjurersCloset(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT},"{5}"); + super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{5}"); // At the beginning of your end step, you may exile target creature you control, then return that card to the battlefield under your control. Ability ability = new BeginningOfYourEndStepTriggeredAbility(new ExileTargetForSourceEffect(), true); - ability.addEffect(new ReturnToBattlefieldUnderYourControlTargetEffect(true)); + ability.addEffect(new ReturnToBattlefieldUnderYourControlTargetEffect(false)); ability.addTarget(new TargetControlledCreaturePermanent()); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/d/Displace.java b/Mage.Sets/src/mage/cards/d/Displace.java index e7cfe8012d2..87ab48e600c 100644 --- a/Mage.Sets/src/mage/cards/d/Displace.java +++ b/Mage.Sets/src/mage/cards/d/Displace.java @@ -23,7 +23,7 @@ public final class Displace extends CardImpl { this.getSpellAbility().addTarget(new TargetControlledCreaturePermanent(0, 2, new FilterControlledCreaturePermanent("creatures you control"), false)); Effect effect = new ExileTargetForSourceEffect(); this.getSpellAbility().addEffect(effect); - effect = new ReturnToBattlefieldUnderOwnerControlTargetEffect() + effect = new ReturnToBattlefieldUnderOwnerControlTargetEffect(false, false) .withReturnNames("those cards", "their owner's").concatBy(", then"); this.getSpellAbility().addEffect(effect); } diff --git a/Mage.Sets/src/mage/cards/e/EerieInterlude.java b/Mage.Sets/src/mage/cards/e/EerieInterlude.java index 0d5578c90a1..f09d6b529c0 100644 --- a/Mage.Sets/src/mage/cards/e/EerieInterlude.java +++ b/Mage.Sets/src/mage/cards/e/EerieInterlude.java @@ -1,9 +1,5 @@ - package mage.cards.e; -import java.util.HashSet; -import java.util.Set; -import java.util.UUID; import mage.MageObject; import mage.abilities.Ability; import mage.abilities.common.delayed.AtTheBeginOfNextEndStepDelayedTriggeredAbility; @@ -23,14 +19,17 @@ import mage.target.common.TargetControlledCreaturePermanent; import mage.target.targetpointer.FixedTargets; import mage.util.CardUtil; +import java.util.HashSet; +import java.util.Set; +import java.util.UUID; + /** - * * @author LevelX2 */ public final class EerieInterlude extends CardImpl { public EerieInterlude(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{2}{W}"); + super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{2}{W}"); // Exile any number of target creatures you control. Return those cards to the battlefield under their owner's control at the beginning of the next end step. this.getSpellAbility().addEffect(new EerieInterludeEffect()); @@ -86,12 +85,11 @@ class EerieInterludeEffect extends OneShotEffect { if (bottomCard.getZoneChangeCounter(game) == meldCard.getBottomLastZoneChangeCounter()) { cardsToReturn.add(bottomCard); } - } - else if (exiled.getZoneChangeCounter(game) == game.getState().getZoneChangeCounter(exiled.getId()) - 1) { + } else if (exiled.getZoneChangeCounter(game) == game.getState().getZoneChangeCounter(exiled.getId()) - 1) { cardsToReturn.add(exiled); } } - Effect effect = new ReturnToBattlefieldUnderOwnerControlTargetEffect(); + Effect effect = new ReturnToBattlefieldUnderOwnerControlTargetEffect(false, false); effect.setTargetPointer(new FixedTargets(cardsToReturn, game)); AtTheBeginOfNextEndStepDelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(effect); game.addDelayedTriggeredAbility(delayedAbility, source); diff --git a/Mage.Sets/src/mage/cards/e/EldraziDisplacer.java b/Mage.Sets/src/mage/cards/e/EldraziDisplacer.java index 1ccfa5e1624..48310f862c4 100644 --- a/Mage.Sets/src/mage/cards/e/EldraziDisplacer.java +++ b/Mage.Sets/src/mage/cards/e/EldraziDisplacer.java @@ -42,7 +42,7 @@ public final class EldraziDisplacer extends CardImpl { // {2}{C}: Exile another target creature, then return it to the battlefield tapped under its owner's control. Effect effect = new ExileTargetForSourceEffect(); Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, effect, new ManaCostsImpl<>("{2}{C}")); - effect = new ReturnToBattlefieldUnderOwnerControlTargetEffect(true) + effect = new ReturnToBattlefieldUnderOwnerControlTargetEffect(true, false) .withReturnNames("it", "its owner's").concatBy(", then"); ability.addEffect(effect); ability.addTarget(new TargetCreaturePermanent(FILTER)); diff --git a/Mage.Sets/src/mage/cards/e/EmielTheBlessed.java b/Mage.Sets/src/mage/cards/e/EmielTheBlessed.java index 885180ceded..f750ef9d4a9 100644 --- a/Mage.Sets/src/mage/cards/e/EmielTheBlessed.java +++ b/Mage.Sets/src/mage/cards/e/EmielTheBlessed.java @@ -23,7 +23,6 @@ import mage.game.permanent.Permanent; import mage.target.TargetPermanent; import java.util.UUID; -import mage.abilities.effects.Effect; /** * @author TheElk801 @@ -47,7 +46,7 @@ public final class EmielTheBlessed extends CardImpl { // {3}: Exile another target creature you control, then return it to the battlefield under its owner's control. Ability ability = new SimpleActivatedAbility(new ExileTargetForSourceEffect(), new GenericManaCost(3)); - ability.addEffect(new ReturnToBattlefieldUnderOwnerControlTargetEffect()); + ability.addEffect(new ReturnToBattlefieldUnderOwnerControlTargetEffect(false, false)); ability.addTarget(new TargetPermanent(filter)); this.addAbility(ability); @@ -57,7 +56,7 @@ public final class EmielTheBlessed extends CardImpl { Zone.BATTLEFIELD, new DoIfCostPaid(new EmielTheBlessedEffect(), new ManaCostsImpl<>("{G/W}")), StaticFilters.FILTER_CONTROLLED_ANOTHER_CREATURE, false, SetTargetPointer.PERMANENT, "Whenever another creature enters the battlefield under your control, you may pay {G/W}. " - + "If you do, put a +1/+1 counter on it. If it's a Unicorn, put two +1/+1 counters on it instead." + + "If you do, put a +1/+1 counter on it. If it's a Unicorn, put two +1/+1 counters on it instead." )); } diff --git a/Mage.Sets/src/mage/cards/e/Ephemerate.java b/Mage.Sets/src/mage/cards/e/Ephemerate.java index b1fa0574470..871ae3e1690 100644 --- a/Mage.Sets/src/mage/cards/e/Ephemerate.java +++ b/Mage.Sets/src/mage/cards/e/Ephemerate.java @@ -21,7 +21,7 @@ public final class Ephemerate extends CardImpl { // Exile target creature you control, then return it to the battlefield under its owner's control. this.getSpellAbility().addTarget(new TargetControlledCreaturePermanent()); this.getSpellAbility().addEffect(new ExileTargetForSourceEffect()); - this.getSpellAbility().addEffect(new ReturnToBattlefieldUnderOwnerControlTargetEffect()); + this.getSpellAbility().addEffect(new ReturnToBattlefieldUnderOwnerControlTargetEffect(false, false)); // Rebound this.addAbility(new ReboundAbility()); diff --git a/Mage.Sets/src/mage/cards/e/EscapeProtocol.java b/Mage.Sets/src/mage/cards/e/EscapeProtocol.java index e7335c60f1f..4aa3a6b6027 100644 --- a/Mage.Sets/src/mage/cards/e/EscapeProtocol.java +++ b/Mage.Sets/src/mage/cards/e/EscapeProtocol.java @@ -40,7 +40,7 @@ public final class EscapeProtocol extends CardImpl { "exile target artifact or creature you control, " + "then return it to the battlefield under its owner's control." ); - ability.addEffect(new ReturnToBattlefieldUnderOwnerControlTargetEffect()); + ability.addEffect(new ReturnToBattlefieldUnderOwnerControlTargetEffect(false, false)); ability.addTarget(new TargetPermanent(filter)); this.addAbility(new CycleControllerTriggeredAbility(new DoWhenCostPaid( ability, new GenericManaCost(1), "Pay {1}?" diff --git a/Mage.Sets/src/mage/cards/e/EssenceFlux.java b/Mage.Sets/src/mage/cards/e/EssenceFlux.java index 8364d113e65..907217250cb 100644 --- a/Mage.Sets/src/mage/cards/e/EssenceFlux.java +++ b/Mage.Sets/src/mage/cards/e/EssenceFlux.java @@ -1,7 +1,5 @@ - package mage.cards.e; -import java.util.UUID; import mage.abilities.Ability; import mage.abilities.effects.Effect; import mage.abilities.effects.OneShotEffect; @@ -13,16 +11,15 @@ import mage.constants.Outcome; import mage.constants.SubType; import mage.constants.Zone; import mage.counters.CounterType; -import mage.game.ExileZone; import mage.game.Game; import mage.game.permanent.Permanent; import mage.players.Player; import mage.target.common.TargetControlledCreaturePermanent; import mage.target.targetpointer.FixedTarget; -import mage.util.CardUtil; + +import java.util.UUID; /** - * * @author LevelX2 */ public final class EssenceFlux extends CardImpl { @@ -68,30 +65,25 @@ class EssenceFluxEffect extends OneShotEffect { Player controller = game.getPlayer(source.getControllerId()); if (controller != null) { Cards cardsToBattlefield = new CardsImpl(); - UUID exileZoneId = CardUtil.getExileZoneId(game, source.getSourceId(), source.getSourceObjectZoneChangeCounter()); - if (exileZoneId != null) { - ExileZone exileZone = game.getExile().getExileZone(exileZoneId); - if (exileZone != null) { - for (UUID targetId : this.getTargetPointer().getTargets(game, source)) { - if (exileZone.contains(targetId)) { - cardsToBattlefield.add(targetId); - } else { - Card card = game.getCard(targetId); - if (card instanceof MeldCard) { - MeldCard meldCard = (MeldCard) card; - Card topCard = meldCard.getTopHalfCard(); - Card bottomCard = meldCard.getBottomHalfCard(); - if (topCard.getZoneChangeCounter(game) == meldCard.getTopLastZoneChangeCounter() && exileZone.contains(topCard.getId())) { - cardsToBattlefield.add(topCard); - } - if (bottomCard.getZoneChangeCounter(game) == meldCard.getBottomLastZoneChangeCounter() && exileZone.contains(bottomCard.getId())) { - cardsToBattlefield.add(bottomCard); - } - } + for (UUID targetId : this.getTargetPointer().getTargets(game, source)) { + if (game.getExile().containsId(targetId, game)) { + cardsToBattlefield.add(targetId); + } else { + Card card = game.getCard(targetId); + if (card instanceof MeldCard) { + MeldCard meldCard = (MeldCard) card; + Card topCard = meldCard.getTopHalfCard(); + Card bottomCard = meldCard.getBottomHalfCard(); + if (topCard.getZoneChangeCounter(game) == meldCard.getTopLastZoneChangeCounter() && game.getExile().containsId(topCard.getId(), game)) { + cardsToBattlefield.add(topCard); + } + if (bottomCard.getZoneChangeCounter(game) == meldCard.getBottomLastZoneChangeCounter() && game.getExile().containsId(bottomCard.getId(), game)) { + cardsToBattlefield.add(bottomCard); } } } } + if (!cardsToBattlefield.isEmpty()) { controller.moveCards(cardsToBattlefield.getCards(game), Zone.BATTLEFIELD, source, game, false, false, true, null); for (UUID cardId : cardsToBattlefield) { diff --git a/Mage.Sets/src/mage/cards/f/FelidarGuardian.java b/Mage.Sets/src/mage/cards/f/FelidarGuardian.java index cbd687eea89..1312c76e692 100644 --- a/Mage.Sets/src/mage/cards/f/FelidarGuardian.java +++ b/Mage.Sets/src/mage/cards/f/FelidarGuardian.java @@ -1,7 +1,5 @@ - package mage.cards.f; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldTriggeredAbility; @@ -16,8 +14,9 @@ import mage.filter.common.FilterControlledPermanent; import mage.filter.predicate.permanent.AnotherPredicate; import mage.target.common.TargetControlledPermanent; +import java.util.UUID; + /** - * * @author Styxo */ public final class FelidarGuardian extends CardImpl { @@ -39,7 +38,7 @@ public final class FelidarGuardian extends CardImpl { // When Felidar Guardian enters the battlefield, you may exile another target permanent you control, then return that card to the battlefield under its owner's control. Effect effect = new ExileTargetForSourceEffect(); Ability ability = new EntersBattlefieldTriggeredAbility(effect, true); - ability.addEffect(new ReturnToBattlefieldUnderOwnerControlTargetEffect()); + ability.addEffect(new ReturnToBattlefieldUnderOwnerControlTargetEffect(false, false)); ability.addTarget(new TargetControlledPermanent(filter)); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/cards/f/Flicker.java b/Mage.Sets/src/mage/cards/f/Flicker.java index 7e79eb719fb..baa9add8596 100644 --- a/Mage.Sets/src/mage/cards/f/Flicker.java +++ b/Mage.Sets/src/mage/cards/f/Flicker.java @@ -1,7 +1,5 @@ - package mage.cards.f; -import java.util.UUID; import mage.abilities.effects.common.ExileTargetForSourceEffect; import mage.abilities.effects.common.ReturnToBattlefieldUnderOwnerControlTargetEffect; import mage.cards.CardImpl; @@ -12,26 +10,27 @@ import mage.filter.predicate.Predicates; import mage.filter.predicate.permanent.TokenPredicate; import mage.target.TargetPermanent; +import java.util.UUID; + /** - * * @author LevelX2 */ public final class Flicker extends CardImpl { - + private static final FilterPermanent filter = new FilterPermanent("nontoken permanent"); - + static { filter.add(Predicates.not(TokenPredicate.instance)); } - + public Flicker(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{1}{W}"); + super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{1}{W}"); // Exile target nontoken permanent, then return it to the battlefield under its owner's control. this.getSpellAbility().addTarget(new TargetPermanent(filter)); this.getSpellAbility().addEffect(new ExileTargetForSourceEffect()); - this.getSpellAbility().addEffect(new ReturnToBattlefieldUnderOwnerControlTargetEffect(false, true)); - + this.getSpellAbility().addEffect(new ReturnToBattlefieldUnderOwnerControlTargetEffect(false, false)); + } public Flicker(final Flicker card) { diff --git a/Mage.Sets/src/mage/cards/f/FlickerOfFate.java b/Mage.Sets/src/mage/cards/f/FlickerOfFate.java index 4cd69eb49a1..f28e3045844 100644 --- a/Mage.Sets/src/mage/cards/f/FlickerOfFate.java +++ b/Mage.Sets/src/mage/cards/f/FlickerOfFate.java @@ -30,7 +30,7 @@ public final class FlickerOfFate extends CardImpl { // Exile target creature or enchantment, then return it to the battlefield under its owner's control. this.getSpellAbility().addEffect(new ExileTargetForSourceEffect()); - this.getSpellAbility().addEffect(new ReturnToBattlefieldUnderOwnerControlTargetEffect(false)); + this.getSpellAbility().addEffect(new ReturnToBattlefieldUnderOwnerControlTargetEffect(false, false)); this.getSpellAbility().addTarget(new TargetPermanent(filter)); } diff --git a/Mage.Sets/src/mage/cards/f/Flickerwisp.java b/Mage.Sets/src/mage/cards/f/Flickerwisp.java index b4af63cae71..c67632972dc 100644 --- a/Mage.Sets/src/mage/cards/f/Flickerwisp.java +++ b/Mage.Sets/src/mage/cards/f/Flickerwisp.java @@ -1,7 +1,5 @@ - package mage.cards.f; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldTriggeredAbility; @@ -13,8 +11,8 @@ import mage.abilities.keyword.FlyingAbility; 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.constants.Zone; import mage.filter.FilterPermanent; import mage.filter.predicate.permanent.AnotherPredicate; @@ -24,8 +22,9 @@ import mage.players.Player; import mage.target.TargetPermanent; import mage.target.targetpointer.FixedTarget; +import java.util.UUID; + /** - * * @author Plopman */ public final class Flickerwisp extends CardImpl { @@ -81,7 +80,7 @@ class FlickerwispEffect extends OneShotEffect { if (controller != null && permanent != null && sourcePermanent != null) { if (controller.moveCardToExileWithInfo(permanent, source.getSourceId(), sourcePermanent.getIdName(), source.getSourceId(), game, Zone.BATTLEFIELD, true)) { //create delayed triggered ability - Effect effect = new ReturnToBattlefieldUnderOwnerControlTargetEffect(); + Effect effect = new ReturnToBattlefieldUnderOwnerControlTargetEffect(false, false); effect.setText("Return that card to the battlefield under its owner's control at the beginning of the next end step"); effect.setTargetPointer(new FixedTarget(source.getFirstTarget(), game)); game.addDelayedTriggeredAbility(new AtTheBeginOfNextEndStepDelayedTriggeredAbility(effect), source); diff --git a/Mage.Sets/src/mage/cards/g/GalepowderMage.java b/Mage.Sets/src/mage/cards/g/GalepowderMage.java index f59ef1f9271..5353fc095f1 100644 --- a/Mage.Sets/src/mage/cards/g/GalepowderMage.java +++ b/Mage.Sets/src/mage/cards/g/GalepowderMage.java @@ -91,7 +91,7 @@ class GalepowderMageEffect extends OneShotEffect { if (controller.moveCardToExileWithInfo(permanent, exileId, sourceObject.getIdName(), source.getSourceId(), game, Zone.BATTLEFIELD, true)) { Card card = game.getCard(getTargetPointer().getFirst(game, source)); if (card != null) { - Effect effect = new ReturnToBattlefieldUnderOwnerControlTargetEffect(); + Effect effect = new ReturnToBattlefieldUnderOwnerControlTargetEffect(false, false); effect.setTargetPointer(new FixedTarget(card.getId(), game.getState().getZoneChangeCounter(card.getId()))); AtTheBeginOfNextEndStepDelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(effect); game.addDelayedTriggeredAbility(delayedAbility, source); diff --git a/Mage.Sets/src/mage/cards/g/Ghostway.java b/Mage.Sets/src/mage/cards/g/Ghostway.java index 000b248d183..109b489b1c9 100644 --- a/Mage.Sets/src/mage/cards/g/Ghostway.java +++ b/Mage.Sets/src/mage/cards/g/Ghostway.java @@ -1,9 +1,5 @@ - package mage.cards.g; -import java.util.HashSet; -import java.util.Set; -import java.util.UUID; import mage.MageObject; import mage.abilities.Ability; import mage.abilities.common.delayed.AtTheBeginOfNextEndStepDelayedTriggeredAbility; @@ -20,14 +16,17 @@ import mage.players.Player; import mage.target.targetpointer.FixedTargets; import mage.util.CardUtil; +import java.util.HashSet; +import java.util.Set; +import java.util.UUID; + /** - * * @author jeffwadsworth */ public final class Ghostway extends CardImpl { public Ghostway(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{2}{W}"); + super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{2}{W}"); // Exile each creature you control. Return those cards to the battlefield under their owner's control at the beginning of the next end step. this.getSpellAbility().addEffect(new GhostwayEffect()); @@ -77,7 +76,7 @@ class GhostwayEffect extends OneShotEffect { cardsToReturn.add(exiled); } } - Effect effect = new ReturnToBattlefieldUnderOwnerControlTargetEffect(); + Effect effect = new ReturnToBattlefieldUnderOwnerControlTargetEffect(false, false); effect.setTargetPointer(new FixedTargets(cardsToReturn, game)); AtTheBeginOfNextEndStepDelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(effect); game.addDelayedTriggeredAbility(delayedAbility, source); diff --git a/Mage.Sets/src/mage/cards/g/GlimmerpointStag.java b/Mage.Sets/src/mage/cards/g/GlimmerpointStag.java index 939b63db59c..90436fcda1a 100644 --- a/Mage.Sets/src/mage/cards/g/GlimmerpointStag.java +++ b/Mage.Sets/src/mage/cards/g/GlimmerpointStag.java @@ -1,7 +1,5 @@ - package mage.cards.g; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldTriggeredAbility; @@ -13,8 +11,8 @@ import mage.abilities.keyword.VigilanceAbility; 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.constants.Zone; import mage.filter.FilterPermanent; import mage.filter.predicate.permanent.AnotherPredicate; @@ -24,8 +22,9 @@ import mage.players.Player; import mage.target.TargetPermanent; import mage.target.targetpointer.FixedTarget; +import java.util.UUID; + /** - * * @author maurer.it_at_gmail.com */ public final class GlimmerpointStag extends CardImpl { @@ -37,7 +36,7 @@ public final class GlimmerpointStag extends CardImpl { } public GlimmerpointStag(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.subtype.add(SubType.ELK); this.power = new MageInt(3); @@ -84,7 +83,7 @@ class GlimmerpointStagEffect extends OneShotEffect { int zcc = permanent.getZoneChangeCounter(game); controller.moveCards(permanent, Zone.EXILED, source, game); //create delayed triggered ability - Effect effect = new ReturnToBattlefieldUnderOwnerControlTargetEffect(); + Effect effect = new ReturnToBattlefieldUnderOwnerControlTargetEffect(false, false); effect.setTargetPointer(new FixedTarget(permanent.getId(), zcc + 1)); AtTheBeginOfNextEndStepDelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(effect); game.addDelayedTriggeredAbility(delayedAbility, source); diff --git a/Mage.Sets/src/mage/cards/i/IllusionistsStratagem.java b/Mage.Sets/src/mage/cards/i/IllusionistsStratagem.java index cac0578a608..0e5247f736f 100644 --- a/Mage.Sets/src/mage/cards/i/IllusionistsStratagem.java +++ b/Mage.Sets/src/mage/cards/i/IllusionistsStratagem.java @@ -21,7 +21,7 @@ public final class IllusionistsStratagem extends CardImpl { // Exile up to two target creatures you control, then return those cards to the battlefield under their owner's control. this.getSpellAbility().addEffect(new ExileTargetForSourceEffect()); - this.getSpellAbility().addEffect(new ReturnToBattlefieldUnderYourControlTargetEffect(true) + this.getSpellAbility().addEffect(new ReturnToBattlefieldUnderYourControlTargetEffect(false) .withReturnNames("those cards", "their owner's").concatBy(", then")); this.getSpellAbility().addTarget(new TargetControlledCreaturePermanent(0, 2, new FilterControlledCreaturePermanent("creatures you control"), false)); diff --git a/Mage.Sets/src/mage/cards/j/JusticiarsPortal.java b/Mage.Sets/src/mage/cards/j/JusticiarsPortal.java index 7dfc2956ba3..3062e29384f 100644 --- a/Mage.Sets/src/mage/cards/j/JusticiarsPortal.java +++ b/Mage.Sets/src/mage/cards/j/JusticiarsPortal.java @@ -62,7 +62,7 @@ class JusticiarsPortalEffect extends OneShotEffect { public boolean apply(Game game, Ability source) { UUID targetId = source.getFirstTarget(); new ExileTargetForSourceEffect().apply(game, source); - new ReturnToBattlefieldUnderYourControlTargetEffect(true).apply(game, source); + new ReturnToBattlefieldUnderYourControlTargetEffect().apply(game, source); ContinuousEffect effect = new GainAbilityTargetEffect(FirstStrikeAbility.getInstance(), Duration.EndOfTurn); effect.setTargetPointer(new FixedTarget(targetId, game)); game.addEffect(effect, source); diff --git a/Mage.Sets/src/mage/cards/k/KayaGhostAssassin.java b/Mage.Sets/src/mage/cards/k/KayaGhostAssassin.java index 62b4c1298b8..ce729a92a60 100644 --- a/Mage.Sets/src/mage/cards/k/KayaGhostAssassin.java +++ b/Mage.Sets/src/mage/cards/k/KayaGhostAssassin.java @@ -1,7 +1,5 @@ - package mage.cards.k; -import java.util.UUID; import mage.abilities.Ability; import mage.abilities.LoyaltyAbility; import mage.abilities.common.PlaneswalkerEntersWithLoyaltyCountersAbility; @@ -15,12 +13,7 @@ import mage.abilities.effects.common.ReturnToBattlefieldUnderOwnerControlTargetE import mage.abilities.effects.common.discard.DiscardEachPlayerEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.SubType; -import mage.constants.Outcome; -import mage.constants.SuperType; -import mage.constants.TargetController; -import mage.constants.Zone; +import mage.constants.*; import mage.filter.common.FilterCreaturePermanent; import mage.game.Game; import mage.game.permanent.Permanent; @@ -28,8 +21,9 @@ import mage.players.Player; import mage.target.common.TargetCreaturePermanent; import mage.target.targetpointer.FixedTarget; +import java.util.UUID; + /** - * * @author fireshoes */ public final class KayaGhostAssassin extends CardImpl { @@ -37,7 +31,7 @@ public final class KayaGhostAssassin extends CardImpl { private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("target creature to exile. Choose no targets to exile Kaya."); public KayaGhostAssassin(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.PLANESWALKER},"{2}{W}{B}"); + super(ownerId, setInfo, new CardType[]{CardType.PLANESWALKER}, "{2}{W}{B}"); this.addSuperType(SuperType.LEGENDARY); this.subtype.add(SubType.KAYA); @@ -101,7 +95,7 @@ class KayaGhostAssassinEffect extends OneShotEffect { if (targetCreature != null) { int zcc = targetCreature.getZoneChangeCounter(game); if (controller.moveCards(targetCreature, Zone.EXILED, source, game)) { - Effect effect = new ReturnToBattlefieldUnderOwnerControlTargetEffect(); + Effect effect = new ReturnToBattlefieldUnderOwnerControlTargetEffect(false, false); effect.setTargetPointer(new FixedTarget(targetCreature.getId(), zcc + 1)); AtTheBeginOfYourNextUpkeepDelayedTriggeredAbility delayedAbility = new AtTheBeginOfYourNextUpkeepDelayedTriggeredAbility(effect); @@ -111,12 +105,12 @@ class KayaGhostAssassinEffect extends OneShotEffect { } else { int zcc = sourcePermanent.getZoneChangeCounter(game); if (controller.moveCards(sourcePermanent, Zone.EXILED, source, game)) { - Effect effect = new ReturnToBattlefieldUnderOwnerControlTargetEffect(); - effect.setTargetPointer(new FixedTarget(sourcePermanent.getId(), zcc + 1)); - AtTheBeginOfYourNextUpkeepDelayedTriggeredAbility delayedAbility - = new AtTheBeginOfYourNextUpkeepDelayedTriggeredAbility(effect); - game.addDelayedTriggeredAbility(delayedAbility, source); - } + Effect effect = new ReturnToBattlefieldUnderOwnerControlTargetEffect(false, false); + effect.setTargetPointer(new FixedTarget(sourcePermanent.getId(), zcc + 1)); + AtTheBeginOfYourNextUpkeepDelayedTriggeredAbility delayedAbility + = new AtTheBeginOfYourNextUpkeepDelayedTriggeredAbility(effect); + game.addDelayedTriggeredAbility(delayedAbility, source); + } } controller.loseLife(2, game, false); return true; diff --git a/Mage.Sets/src/mage/cards/l/Liberate.java b/Mage.Sets/src/mage/cards/l/Liberate.java index e78e990603e..bea0f074996 100644 --- a/Mage.Sets/src/mage/cards/l/Liberate.java +++ b/Mage.Sets/src/mage/cards/l/Liberate.java @@ -1,7 +1,5 @@ - package mage.cards.l; -import java.util.UUID; import mage.MageObject; import mage.abilities.Ability; import mage.abilities.common.delayed.AtTheBeginOfNextEndStepDelayedTriggeredAbility; @@ -17,10 +15,10 @@ import mage.game.permanent.Permanent; import mage.target.common.TargetControlledCreaturePermanent; import mage.target.targetpointer.FixedTarget; +import java.util.UUID; + /** - * * @author LoneFox - * */ public final class Liberate extends CardImpl { @@ -59,7 +57,7 @@ class LiberateEffect extends OneShotEffect { MageObject sourceObject = game.getObject(source.getSourceId()); if (permanent != null && sourceObject != null) { if (permanent.moveToExile(source.getSourceId(), sourceObject.getIdName(), source.getSourceId(), game)) { - Effect effect = new ReturnToBattlefieldUnderOwnerControlTargetEffect(); + Effect effect = new ReturnToBattlefieldUnderOwnerControlTargetEffect(false, false); effect.setText("Return that card to the battlefield under its owner's control at the beginning of the next end step"); effect.setTargetPointer(new FixedTarget(source.getFirstTarget(), game)); game.addDelayedTriggeredAbility(new AtTheBeginOfNextEndStepDelayedTriggeredAbility(effect), source); diff --git a/Mage.Sets/src/mage/cards/l/Lifeline.java b/Mage.Sets/src/mage/cards/l/Lifeline.java index e78a26f7086..398aec314d6 100644 --- a/Mage.Sets/src/mage/cards/l/Lifeline.java +++ b/Mage.Sets/src/mage/cards/l/Lifeline.java @@ -1,7 +1,5 @@ - package mage.cards.l; -import java.util.UUID; import mage.abilities.Ability; import mage.abilities.common.DiesCreatureTriggeredAbility; import mage.abilities.common.delayed.AtTheBeginOfNextEndStepDelayedTriggeredAbility; @@ -18,8 +16,9 @@ import mage.filter.StaticFilters; import mage.game.Game; import mage.target.targetpointer.FixedTarget; +import java.util.UUID; + /** - * * @author HCrescent */ public final class Lifeline extends CardImpl { @@ -27,13 +26,13 @@ public final class Lifeline extends CardImpl { public Lifeline(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{5}"); - + // Whenever a creature dies, if another creature is on the battlefield, return the first card to the battlefield under its owner's control at the beginning of the next end step. Ability ability = new ConditionalInterveningIfTriggeredAbility( - new DiesCreatureTriggeredAbility( Zone.BATTLEFIELD, new LifelineEffect(), false, StaticFilters.FILTER_PERMANENT_CREATURE, true), - new PermanentsOnTheBattlefieldCondition(StaticFilters.FILTER_PERMANENT_CREATURE, ComparisonType.MORE_THAN, 0, false), - "Whenever a creature dies, if another creature is on the battlefield, return the first card to the battlefield under its owner's control at the beginning of the next end step."); + new DiesCreatureTriggeredAbility(Zone.BATTLEFIELD, new LifelineEffect(), false, StaticFilters.FILTER_PERMANENT_CREATURE, true), + new PermanentsOnTheBattlefieldCondition(StaticFilters.FILTER_PERMANENT_CREATURE, ComparisonType.MORE_THAN, 0, false), + "Whenever a creature dies, if another creature is on the battlefield, return the first card to the battlefield under its owner's control at the beginning of the next end step."); this.addAbility(ability); } @@ -46,27 +45,28 @@ public final class Lifeline extends CardImpl { return new Lifeline(this); } } + class LifelineEffect extends OneShotEffect { - + public LifelineEffect() { super(Outcome.PutCardInPlay); this.staticText = ""; } - + public LifelineEffect(final LifelineEffect effect) { super(effect); } - + @Override public LifelineEffect copy() { return new LifelineEffect(this); } - + @Override public boolean apply(Game game, Ability source) { Card card = game.getCard(getTargetPointer().getFirst(game, source)); if (card != null) { - Effect effect = new ReturnToBattlefieldUnderOwnerControlTargetEffect(); + Effect effect = new ReturnToBattlefieldUnderOwnerControlTargetEffect(false, false); effect.setTargetPointer(new FixedTarget(card.getId(), card.getZoneChangeCounter(game))); effect.setText("return that card to the battlefield under it's owner's control at the beginning of the next end step"); game.addDelayedTriggeredAbility(new AtTheBeginOfNextEndStepDelayedTriggeredAbility(Zone.BATTLEFIELD, effect, TargetController.ANY), source); diff --git a/Mage.Sets/src/mage/cards/m/MomentaryBlink.java b/Mage.Sets/src/mage/cards/m/MomentaryBlink.java index cbc83608a69..281283eb498 100644 --- a/Mage.Sets/src/mage/cards/m/MomentaryBlink.java +++ b/Mage.Sets/src/mage/cards/m/MomentaryBlink.java @@ -1,11 +1,8 @@ - package mage.cards.m; -import java.util.UUID; import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.effects.common.ExileTargetForSourceEffect; import mage.abilities.effects.common.ReturnToBattlefieldUnderOwnerControlTargetEffect; -import mage.abilities.effects.common.ReturnToBattlefieldUnderYourControlTargetEffect; import mage.abilities.keyword.FlashbackAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; @@ -13,18 +10,20 @@ import mage.constants.CardType; import mage.constants.TimingRule; import mage.target.common.TargetControlledCreaturePermanent; +import java.util.UUID; + /** * @author noxx */ public final class MomentaryBlink extends CardImpl { public MomentaryBlink(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{1}{W}"); + super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{1}{W}"); // Exile target creature you control, then return it to the battlefield under its owner's control. this.getSpellAbility().addTarget(new TargetControlledCreaturePermanent()); this.getSpellAbility().addEffect(new ExileTargetForSourceEffect()); - this.getSpellAbility().addEffect(new ReturnToBattlefieldUnderOwnerControlTargetEffect()); + this.getSpellAbility().addEffect(new ReturnToBattlefieldUnderOwnerControlTargetEffect(false, false)); // Flashback {3}{U} this.addAbility(new FlashbackAbility(new ManaCostsImpl("{3}{U}"), TimingRule.INSTANT)); diff --git a/Mage.Sets/src/mage/cards/m/MystifyingMaze.java b/Mage.Sets/src/mage/cards/m/MystifyingMaze.java index a496ebf1300..9af9f85659d 100644 --- a/Mage.Sets/src/mage/cards/m/MystifyingMaze.java +++ b/Mage.Sets/src/mage/cards/m/MystifyingMaze.java @@ -1,7 +1,5 @@ - package mage.cards.m; -import java.util.UUID; import mage.MageObject; import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; @@ -24,8 +22,9 @@ import mage.game.permanent.Permanent; import mage.target.common.TargetCreaturePermanent; import mage.target.targetpointer.FixedTarget; +import java.util.UUID; + /** - * * @author BetaSteward_at_googlemail.com */ public final class MystifyingMaze extends CardImpl { @@ -77,7 +76,7 @@ class MystifyingMazeEffect extends OneShotEffect { if (permanent != null && sourceObject != null) { if (permanent.moveToExile(source.getSourceId(), sourceObject.getIdName(), source.getSourceId(), game)) { //create delayed triggered ability - Effect effect = new ReturnToBattlefieldUnderOwnerControlTargetEffect(true); + Effect effect = new ReturnToBattlefieldUnderOwnerControlTargetEffect(true, false); effect.setText("At the beginning of the next end step, return it to the battlefield tapped under its owner's control"); effect.setTargetPointer(new FixedTarget(source.getFirstTarget(), game)); game.addDelayedTriggeredAbility(new AtTheBeginOfNextEndStepDelayedTriggeredAbility(effect), source); diff --git a/Mage.Sets/src/mage/cards/n/N1Starfighter.java b/Mage.Sets/src/mage/cards/n/N1Starfighter.java index c760ea51726..8863e07bf8b 100644 --- a/Mage.Sets/src/mage/cards/n/N1Starfighter.java +++ b/Mage.Sets/src/mage/cards/n/N1Starfighter.java @@ -43,7 +43,7 @@ public final class N1Starfighter extends CardImpl { // P.S. original card have error with missing target word (another target creature) Ability ability = new DealsCombatDamageToAPlayerTriggeredAbility(new DoIfCostPaid( new ExileTargetForSourceEffect(), new ManaCostsImpl("{1}{W/U}")), false); - ability.addEffect(new ReturnToBattlefieldUnderOwnerControlTargetEffect(false, true).concatBy(", then")); + ability.addEffect(new ReturnToBattlefieldUnderOwnerControlTargetEffect(false, false).concatBy(", then")); ability.addTarget(new TargetControlledCreaturePermanent(filter)); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/n/NephaliaSmuggler.java b/Mage.Sets/src/mage/cards/n/NephaliaSmuggler.java index 04135db5baf..fbeed238d05 100644 --- a/Mage.Sets/src/mage/cards/n/NephaliaSmuggler.java +++ b/Mage.Sets/src/mage/cards/n/NephaliaSmuggler.java @@ -1,7 +1,5 @@ - package mage.cards.n; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; @@ -18,18 +16,21 @@ import mage.filter.common.FilterControlledCreaturePermanent; import mage.filter.predicate.permanent.AnotherPredicate; import mage.target.common.TargetControlledCreaturePermanent; +import java.util.UUID; + /** * @author noxx */ public final class NephaliaSmuggler extends CardImpl { private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("another target creature you control"); + static { filter.add(AnotherPredicate.instance); } public NephaliaSmuggler(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{U}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{U}"); this.subtype.add(SubType.HUMAN); this.subtype.add(SubType.ROGUE); @@ -39,7 +40,7 @@ public final class NephaliaSmuggler extends CardImpl { // {3}{U}, {tap}: Exile another target creature you control, then return that card to the battlefield under your control. Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new ExileTargetForSourceEffect(), new ManaCostsImpl("{3}{U}")); ability.addCost(new TapSourceCost()); - ability.addEffect(new ReturnToBattlefieldUnderYourControlTargetEffect(true)); + ability.addEffect(new ReturnToBattlefieldUnderYourControlTargetEffect(false)); ability.addTarget(new TargetControlledCreaturePermanent(filter)); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/o/OathOfTeferi.java b/Mage.Sets/src/mage/cards/o/OathOfTeferi.java index b71265aaf5f..38f86916f94 100644 --- a/Mage.Sets/src/mage/cards/o/OathOfTeferi.java +++ b/Mage.Sets/src/mage/cards/o/OathOfTeferi.java @@ -1,7 +1,5 @@ - package mage.cards.o; -import java.util.UUID; import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.common.SimpleStaticAbility; @@ -10,15 +8,9 @@ import mage.abilities.effects.ContinuousEffectImpl; import mage.abilities.effects.Effect; import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.common.ReturnToBattlefieldUnderOwnerControlTargetEffect; -import mage.constants.SuperType; import mage.cards.CardImpl; import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.Duration; -import mage.constants.Layer; -import mage.constants.Outcome; -import mage.constants.SubLayer; -import mage.constants.Zone; +import mage.constants.*; import mage.filter.common.FilterControlledPermanent; import mage.filter.predicate.permanent.AnotherPredicate; import mage.game.Game; @@ -27,8 +19,9 @@ import mage.players.Player; import mage.target.TargetPermanent; import mage.target.targetpointer.FixedTarget; +import java.util.UUID; + /** - * * @author TheElk801 */ public final class OathOfTeferi extends CardImpl { @@ -85,7 +78,7 @@ class OathOfTeferiBlinkEffect extends OneShotEffect { int zcc = permanent.getZoneChangeCounter(game); controller.moveCards(permanent, Zone.EXILED, source, game); //create delayed triggered ability - Effect effect = new ReturnToBattlefieldUnderOwnerControlTargetEffect(); + Effect effect = new ReturnToBattlefieldUnderOwnerControlTargetEffect(false, false); effect.setTargetPointer(new FixedTarget(permanent.getId(), zcc + 1)); AtTheBeginOfNextEndStepDelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(effect); game.addDelayedTriggeredAbility(delayedAbility, source); diff --git a/Mage.Sets/src/mage/cards/p/Portcullis.java b/Mage.Sets/src/mage/cards/p/Portcullis.java index 1cddb7e13ed..e8478e4bbc5 100644 --- a/Mage.Sets/src/mage/cards/p/Portcullis.java +++ b/Mage.Sets/src/mage/cards/p/Portcullis.java @@ -1,6 +1,5 @@ package mage.cards.p; -import java.util.UUID; import mage.abilities.Ability; import mage.abilities.DelayedTriggeredAbility; import mage.abilities.TriggeredAbility; @@ -13,11 +12,7 @@ import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.common.ReturnToBattlefieldUnderOwnerControlTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.Duration; -import mage.constants.Outcome; -import mage.constants.SetTargetPointer; -import mage.constants.Zone; +import mage.constants.*; import mage.filter.common.FilterCreaturePermanent; import mage.game.Game; import mage.game.events.GameEvent; @@ -28,8 +23,9 @@ import mage.players.Player; import mage.target.targetpointer.FixedTarget; import mage.util.CardUtil; +import java.util.UUID; + /** - * * @author spjspj */ public final class Portcullis extends CardImpl { @@ -43,7 +39,7 @@ public final class Portcullis extends CardImpl { // Return that card to the battlefield under its owner's control when Portcullis leaves the battlefield. String rule = "Whenever a creature enters the battlefield, if there are two or more other creatures on the battlefield, exile that creature."; String rule2 = " Return that card to the battlefield under its owner's control when {this} leaves the battlefield."; - TriggeredAbility ability = new EntersBattlefieldAllTriggeredAbility(Zone.BATTLEFIELD, new PortcullisExileEffect(), + TriggeredAbility ability = new EntersBattlefieldAllTriggeredAbility(Zone.BATTLEFIELD, new PortcullisExileEffect(), filter, false, SetTargetPointer.PERMANENT, rule); MoreThanXCreaturesOnBFCondition condition = new MoreThanXCreaturesOnBFCondition(2); this.addAbility(new ConditionalInterveningIfTriggeredAbility(ability, condition, rule + rule2)); @@ -104,7 +100,7 @@ class PortcullisExileEffect extends OneShotEffect { UUID exileZoneId = CardUtil.getExileZoneId(game, creatureToExile.getId(), creatureToExile.getZoneChangeCounter(game)); controller.moveCardsToExile(creatureToExile, source, game, true, exileZoneId, portcullis.getName()); FixedTarget fixedTarget = new FixedTarget(portcullis, game); - Effect returnEffect = new ReturnToBattlefieldUnderOwnerControlTargetEffect(); + Effect returnEffect = new ReturnToBattlefieldUnderOwnerControlTargetEffect(false, false); returnEffect.setTargetPointer(new FixedTarget(creatureToExile.getId(), game.getState().getZoneChangeCounter(creatureToExile.getId()))); DelayedTriggeredAbility delayedAbility = new PortcullisReturnToBattlefieldTriggeredAbility(fixedTarget, returnEffect); game.addDelayedTriggeredAbility(delayedAbility, source); diff --git a/Mage.Sets/src/mage/cards/r/RangeTrooper.java b/Mage.Sets/src/mage/cards/r/RangeTrooper.java index 8df614a2d1c..39003453770 100644 --- a/Mage.Sets/src/mage/cards/r/RangeTrooper.java +++ b/Mage.Sets/src/mage/cards/r/RangeTrooper.java @@ -74,7 +74,7 @@ class RangeTrooperEffect extends OneShotEffect { MageObject sourceObject = game.getObject(source.getSourceId()); if (permanent != null && sourceObject != null) { if (permanent.moveToExile(source.getSourceId(), sourceObject.getIdName(), source.getSourceId(), game)) { - Effect effect = new ReturnToBattlefieldUnderOwnerControlTargetEffect(); + Effect effect = new ReturnToBattlefieldUnderOwnerControlTargetEffect(false, false); effect.setText("Return that card to the battlefield under its owner's control at the beginning of the next end step"); effect.setTargetPointer(new FixedTarget(source.getFirstTarget(), game)); game.addDelayedTriggeredAbility(new AtTheBeginOfNextEndStepDelayedTriggeredAbility(effect), source); diff --git a/Mage.Sets/src/mage/cards/r/RoonOfTheHiddenRealm.java b/Mage.Sets/src/mage/cards/r/RoonOfTheHiddenRealm.java index 22072f622de..12bfbc0b3cf 100644 --- a/Mage.Sets/src/mage/cards/r/RoonOfTheHiddenRealm.java +++ b/Mage.Sets/src/mage/cards/r/RoonOfTheHiddenRealm.java @@ -1,7 +1,5 @@ - package mage.cards.r; -import java.util.UUID; import mage.MageInt; import mage.MageObject; import mage.abilities.Ability; @@ -16,11 +14,7 @@ import mage.abilities.keyword.TrampleAbility; import mage.abilities.keyword.VigilanceAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.SubType; -import mage.constants.Outcome; -import mage.constants.SuperType; -import mage.constants.Zone; +import mage.constants.*; import mage.filter.common.FilterCreaturePermanent; import mage.filter.predicate.permanent.AnotherPredicate; import mage.game.Game; @@ -29,8 +23,9 @@ import mage.players.Player; import mage.target.common.TargetCreaturePermanent; import mage.target.targetpointer.FixedTarget; +import java.util.UUID; + /** - * * @author LevelX2 */ public final class RoonOfTheHiddenRealm extends CardImpl { @@ -42,7 +37,7 @@ public final class RoonOfTheHiddenRealm extends CardImpl { } public RoonOfTheHiddenRealm(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{G}{W}{U}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{G}{W}{U}"); addSuperType(SuperType.LEGENDARY); this.subtype.add(SubType.RHINO); this.subtype.add(SubType.SOLDIER); @@ -98,7 +93,7 @@ class RoonOfTheHiddenRealmEffect extends OneShotEffect { if (permanent != null) { int zcc = permanent.getZoneChangeCounter(game); if (controller.moveCards(permanent, Zone.EXILED, source, game)) { - Effect effect = new ReturnToBattlefieldUnderOwnerControlTargetEffect(); + Effect effect = new ReturnToBattlefieldUnderOwnerControlTargetEffect(false, false); effect.setTargetPointer(new FixedTarget(permanent.getId(), zcc + 1)); AtTheBeginOfNextEndStepDelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(effect); diff --git a/Mage.Sets/src/mage/cards/r/RuinGhost.java b/Mage.Sets/src/mage/cards/r/RuinGhost.java index a39b2da1398..3783fc527a3 100644 --- a/Mage.Sets/src/mage/cards/r/RuinGhost.java +++ b/Mage.Sets/src/mage/cards/r/RuinGhost.java @@ -32,7 +32,7 @@ public final class RuinGhost extends CardImpl { // {W}, {T}: Exile target land you control, then return it to the battlefield under your control. Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new ExileTargetForSourceEffect(), new ManaCostsImpl("{W")); ability.addCost(new TapSourceCost()); - ability.addEffect(new ReturnToBattlefieldUnderYourControlTargetEffect(true)); + ability.addEffect(new ReturnToBattlefieldUnderYourControlTargetEffect(false)); ability.addTarget(new TargetPermanent(new FilterControlledLandPermanent())); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/s/SentinelOfThePearlTrident.java b/Mage.Sets/src/mage/cards/s/SentinelOfThePearlTrident.java index 97a6036248a..0cd7f0b6b12 100644 --- a/Mage.Sets/src/mage/cards/s/SentinelOfThePearlTrident.java +++ b/Mage.Sets/src/mage/cards/s/SentinelOfThePearlTrident.java @@ -1,7 +1,5 @@ - package mage.cards.s; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldTriggeredAbility; @@ -24,8 +22,9 @@ import mage.players.Player; import mage.target.TargetPermanent; import mage.target.targetpointer.FixedTarget; +import java.util.UUID; + /** - * * @author TheElk801 */ public final class SentinelOfThePearlTrident extends CardImpl { @@ -87,7 +86,7 @@ class SentinelOfThePearlTridentEffect extends OneShotEffect { int zcc = permanent.getZoneChangeCounter(game); controller.moveCards(permanent, Zone.EXILED, source, game); //create delayed triggered ability - Effect effect = new ReturnToBattlefieldUnderOwnerControlTargetEffect(); + Effect effect = new ReturnToBattlefieldUnderOwnerControlTargetEffect(false, false); effect.setTargetPointer(new FixedTarget(permanent.getId(), zcc + 1)); AtTheBeginOfNextEndStepDelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(effect); game.addDelayedTriggeredAbility(delayedAbility, source); diff --git a/Mage.Sets/src/mage/cards/s/SettleBeyondReality.java b/Mage.Sets/src/mage/cards/s/SettleBeyondReality.java index 54c33799ac9..b8814372f32 100644 --- a/Mage.Sets/src/mage/cards/s/SettleBeyondReality.java +++ b/Mage.Sets/src/mage/cards/s/SettleBeyondReality.java @@ -31,7 +31,7 @@ public final class SettleBeyondReality extends CardImpl { // • Exile target creature you control, then return it to the battlefield under its owner's control. Mode mode = new Mode(new ExileTargetForSourceEffect()); - mode.addEffect(new ReturnToBattlefieldUnderOwnerControlTargetEffect()); + mode.addEffect(new ReturnToBattlefieldUnderOwnerControlTargetEffect(false, false)); mode.addTarget(new TargetControlledCreaturePermanent()); this.getSpellAbility().addMode(mode); } diff --git a/Mage.Sets/src/mage/cards/s/SirensRuse.java b/Mage.Sets/src/mage/cards/s/SirensRuse.java index 1b815fabecb..fe0a4fdcf61 100644 --- a/Mage.Sets/src/mage/cards/s/SirensRuse.java +++ b/Mage.Sets/src/mage/cards/s/SirensRuse.java @@ -1,4 +1,3 @@ - package mage.cards.s; import mage.abilities.Ability; @@ -16,7 +15,6 @@ import mage.target.common.TargetControlledCreaturePermanent; import java.util.UUID; /** - * * @author TheElk801 */ public final class SirensRuse extends CardImpl { @@ -64,7 +62,7 @@ class SirensRuseEffect extends ExileTargetForSourceEffect { isPirate = true; } if (super.apply(game, source)) { - new ReturnToBattlefieldUnderYourControlTargetEffect(true).apply(game, source); + new ReturnToBattlefieldUnderYourControlTargetEffect(false).apply(game, source); if (isPirate && player != null) { player.drawCards(1, source.getSourceId(), game); } diff --git a/Mage.Sets/src/mage/cards/s/Skybind.java b/Mage.Sets/src/mage/cards/s/Skybind.java index 8caa7cfb1b4..083cd8eaa94 100644 --- a/Mage.Sets/src/mage/cards/s/Skybind.java +++ b/Mage.Sets/src/mage/cards/s/Skybind.java @@ -1,7 +1,5 @@ - package mage.cards.s; -import java.util.UUID; import mage.abilities.Ability; import mage.abilities.abilityword.ConstellationAbility; import mage.abilities.common.delayed.AtTheBeginOfNextEndStepDelayedTriggeredAbility; @@ -19,8 +17,9 @@ import mage.game.permanent.Permanent; import mage.target.TargetPermanent; import mage.target.targetpointer.FixedTarget; +import java.util.UUID; + /** - * * @author LevelX2 */ public final class Skybind extends CardImpl { @@ -68,7 +67,7 @@ class SkybindEffect extends OneShotEffect { if (permanent != null && sourcePermanent != null) { if (permanent.moveToExile(source.getSourceId(), sourcePermanent.getName(), source.getSourceId(), game)) { //create delayed triggered ability - Effect effect = new ReturnToBattlefieldUnderOwnerControlTargetEffect(); + Effect effect = new ReturnToBattlefieldUnderOwnerControlTargetEffect(false, false); effect.setText("Return that card to the battlefield under its owner's control at the beginning of the next end step"); effect.setTargetPointer(new FixedTarget(getTargetPointer().getFirst(game, source), game)); game.addDelayedTriggeredAbility(new AtTheBeginOfNextEndStepDelayedTriggeredAbility(effect), source); diff --git a/Mage.Sets/src/mage/cards/s/SoulCollector.java b/Mage.Sets/src/mage/cards/s/SoulCollector.java index ea7e94ddbd2..4c303fd3718 100644 --- a/Mage.Sets/src/mage/cards/s/SoulCollector.java +++ b/Mage.Sets/src/mage/cards/s/SoulCollector.java @@ -1,7 +1,5 @@ - package mage.cards.s; -import java.util.UUID; import mage.MageInt; import mage.abilities.common.DealtDamageAndDiedTriggeredAbility; import mage.abilities.costs.mana.ManaCostsImpl; @@ -13,22 +11,25 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; +import java.util.UUID; + /** - * * @author markedagain */ public final class SoulCollector extends CardImpl { public SoulCollector(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{B}{B}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{B}{B}"); this.subtype.add(SubType.VAMPIRE); this.power = new MageInt(3); this.toughness = new MageInt(4); // Flying this.addAbility(FlyingAbility.getInstance()); + // Whenever a creature dealt damage by Soul Collector this turn dies, return that card to the battlefield under your control. - this.addAbility(new DealtDamageAndDiedTriggeredAbility(new ReturnToBattlefieldUnderYourControlTargetEffect(false))); + this.addAbility(new DealtDamageAndDiedTriggeredAbility(new ReturnToBattlefieldUnderYourControlTargetEffect())); + // Morph {B}{B}{B} this.addAbility(new MorphAbility(this, new ManaCostsImpl("{B}{B}{B}"))); } diff --git a/Mage.Sets/src/mage/cards/s/Soulherder.java b/Mage.Sets/src/mage/cards/s/Soulherder.java index 00549d649df..aabf3f94181 100644 --- a/Mage.Sets/src/mage/cards/s/Soulherder.java +++ b/Mage.Sets/src/mage/cards/s/Soulherder.java @@ -1,6 +1,5 @@ package mage.cards.s; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.BeginningOfEndStepTriggeredAbility; @@ -23,6 +22,8 @@ import mage.game.events.ZoneChangeEvent; import mage.game.permanent.Permanent; import mage.target.common.TargetControlledCreaturePermanent; +import java.util.UUID; + /** * @author TheElk801 */ @@ -49,7 +50,7 @@ public final class Soulherder extends CardImpl { Ability ability = new BeginningOfEndStepTriggeredAbility( new ExileTargetForSourceEffect(), TargetController.YOU, true ); - ability.addEffect(new ReturnToBattlefieldUnderOwnerControlTargetEffect(false, true).concatBy("then")); + ability.addEffect(new ReturnToBattlefieldUnderOwnerControlTargetEffect(false, false).concatBy("then")); ability.addTarget(new TargetControlledCreaturePermanent(filter)); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/s/SuddenDisappearance.java b/Mage.Sets/src/mage/cards/s/SuddenDisappearance.java index eef0c4e5e95..13e8b37088a 100644 --- a/Mage.Sets/src/mage/cards/s/SuddenDisappearance.java +++ b/Mage.Sets/src/mage/cards/s/SuddenDisappearance.java @@ -1,20 +1,12 @@ - package mage.cards.s; -import java.util.HashSet; -import java.util.Set; -import java.util.UUID; import mage.MageObject; import mage.abilities.Ability; import mage.abilities.common.delayed.AtTheBeginOfNextEndStepDelayedTriggeredAbility; import mage.abilities.effects.Effect; import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.common.ReturnToBattlefieldUnderOwnerControlTargetEffect; -import mage.cards.Card; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.cards.Cards; -import mage.cards.CardsImpl; +import mage.cards.*; import mage.constants.CardType; import mage.constants.Outcome; import mage.filter.common.FilterNonlandPermanent; @@ -23,8 +15,11 @@ import mage.players.Player; import mage.target.TargetPlayer; import mage.target.targetpointer.FixedTargets; +import java.util.HashSet; +import java.util.Set; +import java.util.UUID; + /** - * * @author BetaSteward */ public final class SuddenDisappearance extends CardImpl { @@ -73,7 +68,7 @@ class SuddenDisappearanceEffect extends OneShotEffect { for (Card card : permsSet) { targets.add(card.getId()); } - Effect effect = new ReturnToBattlefieldUnderOwnerControlTargetEffect(); + Effect effect = new ReturnToBattlefieldUnderOwnerControlTargetEffect(false, true); effect.setText("Return the exiled cards to the battlefield under their owner's control at the beginning of the next end step"); effect.setTargetPointer(new FixedTargets(targets, game)); game.addDelayedTriggeredAbility(new AtTheBeginOfNextEndStepDelayedTriggeredAbility(effect), source); diff --git a/Mage.Sets/src/mage/cards/t/TatsumasaTheDragonsFang.java b/Mage.Sets/src/mage/cards/t/TatsumasaTheDragonsFang.java index 492d4ed477a..35005063fe2 100644 --- a/Mage.Sets/src/mage/cards/t/TatsumasaTheDragonsFang.java +++ b/Mage.Sets/src/mage/cards/t/TatsumasaTheDragonsFang.java @@ -1,7 +1,5 @@ - package mage.cards.t; -import java.util.UUID; import mage.abilities.Ability; import mage.abilities.DelayedTriggeredAbility; import mage.abilities.common.SimpleActivatedAbility; @@ -25,8 +23,9 @@ import mage.game.permanent.Permanent; import mage.game.permanent.token.TatsumaDragonToken; import mage.target.targetpointer.FixedTarget; +import java.util.UUID; + /** - * * @author LevelX2 */ public final class TatsumasaTheDragonsFang extends CardImpl { @@ -82,7 +81,7 @@ class TatsumaTheDragonsFangEffect extends OneShotEffect { Permanent tokenPermanent = game.getPermanent(tokenId); if (tokenPermanent != null) { FixedTarget fixedTarget = new FixedTarget(tokenPermanent, game); - Effect returnEffect = new ReturnToBattlefieldUnderOwnerControlTargetEffect(); + Effect returnEffect = new ReturnToBattlefieldUnderOwnerControlTargetEffect(false, false); returnEffect.setTargetPointer(new FixedTarget(source.getSourceId(), game.getState().getZoneChangeCounter(source.getSourceId()))); DelayedTriggeredAbility delayedAbility = new TatsumaTheDragonsFangTriggeredAbility(fixedTarget, returnEffect); game.addDelayedTriggeredAbility(delayedAbility, source); diff --git a/Mage.Sets/src/mage/cards/t/ThassaDeepDwelling.java b/Mage.Sets/src/mage/cards/t/ThassaDeepDwelling.java index 41b047baf5b..dd0345c002b 100644 --- a/Mage.Sets/src/mage/cards/t/ThassaDeepDwelling.java +++ b/Mage.Sets/src/mage/cards/t/ThassaDeepDwelling.java @@ -59,7 +59,7 @@ public final class ThassaDeepDwelling extends CardImpl { new ExileTargetForSourceEffect(), TargetController.YOU, false ); - ability.addEffect(new ReturnToBattlefieldUnderYourControlTargetEffect(true).concatBy(", then")); + ability.addEffect(new ReturnToBattlefieldUnderYourControlTargetEffect().concatBy(", then")); ability.addTarget(new TargetPermanent( 0, 1, filterOther, false )); diff --git a/Mage.Sets/src/mage/cards/t/TriadOfFates.java b/Mage.Sets/src/mage/cards/t/TriadOfFates.java index 28b9c340f80..0fcbfbdecaf 100644 --- a/Mage.Sets/src/mage/cards/t/TriadOfFates.java +++ b/Mage.Sets/src/mage/cards/t/TriadOfFates.java @@ -1,7 +1,5 @@ - package mage.cards.t; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; @@ -14,11 +12,7 @@ import mage.abilities.effects.common.ReturnToBattlefieldUnderOwnerControlTargetE import mage.abilities.effects.common.counter.AddCountersTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.SubType; -import mage.constants.Outcome; -import mage.constants.SuperType; -import mage.constants.Zone; +import mage.constants.*; import mage.counters.CounterType; import mage.filter.common.FilterCreaturePermanent; import mage.filter.predicate.permanent.AnotherPredicate; @@ -29,8 +23,9 @@ import mage.players.Player; import mage.target.Target; import mage.target.common.TargetCreaturePermanent; +import java.util.UUID; + /** - * * @author LevelX2 */ public final class TriadOfFates extends CardImpl { @@ -44,7 +39,7 @@ public final class TriadOfFates extends CardImpl { } public TriadOfFates(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{W}{B}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{W}{B}"); addSuperType(SuperType.LEGENDARY); this.subtype.add(SubType.HUMAN); this.subtype.add(SubType.WIZARD); @@ -64,7 +59,7 @@ public final class TriadOfFates extends CardImpl { ability.addCost(new TapSourceCost()); target = new TargetCreaturePermanent(filterCounter); ability.addTarget(target); - ability.addEffect(new ReturnToBattlefieldUnderOwnerControlTargetEffect()); + ability.addEffect(new ReturnToBattlefieldUnderOwnerControlTargetEffect(false, false)); this.addAbility(ability); // {B}, {T}: Exile target creature that has a fate counter on it. Its controller draws two cards. diff --git a/Mage.Sets/src/mage/cards/v/VizierOfDeferment.java b/Mage.Sets/src/mage/cards/v/VizierOfDeferment.java index e7b275a0735..33389b3b540 100644 --- a/Mage.Sets/src/mage/cards/v/VizierOfDeferment.java +++ b/Mage.Sets/src/mage/cards/v/VizierOfDeferment.java @@ -1,4 +1,3 @@ - package mage.cards.v; import mage.MageInt; @@ -89,7 +88,7 @@ class VizierOfDefermentEffect extends OneShotEffect { && attackedOrBlocked && sourcePermanent != null) { if (controller.moveCardToExileWithInfo(permanent, source.getSourceId(), sourcePermanent.getIdName(), source.getSourceId(), game, Zone.BATTLEFIELD, true)) { - Effect effect = new ReturnToBattlefieldUnderOwnerControlTargetEffect(); + Effect effect = new ReturnToBattlefieldUnderOwnerControlTargetEffect(false, false); effect.setText("Return that card to the battlefield under its owner's control at the beginning of the next end step"); effect.setTargetPointer(new FixedTarget(source.getFirstTarget(), game)); game.addDelayedTriggeredAbility(new AtTheBeginOfNextEndStepDelayedTriggeredAbility(effect), source); diff --git a/Mage.Sets/src/mage/cards/v/Voidwalk.java b/Mage.Sets/src/mage/cards/v/Voidwalk.java index bd3c91baea2..17890ff0e2d 100644 --- a/Mage.Sets/src/mage/cards/v/Voidwalk.java +++ b/Mage.Sets/src/mage/cards/v/Voidwalk.java @@ -1,7 +1,5 @@ - package mage.cards.v; -import java.util.UUID; import mage.MageObject; import mage.abilities.Ability; import mage.abilities.common.delayed.AtTheBeginOfNextEndStepDelayedTriggeredAbility; @@ -20,8 +18,9 @@ import mage.players.Player; import mage.target.common.TargetCreaturePermanent; import mage.target.targetpointer.FixedTarget; +import java.util.UUID; + /** - * * @author jeffwadsworth */ public final class Voidwalk extends CardImpl { @@ -66,7 +65,7 @@ class VoidwalkEffect extends OneShotEffect { if (controller != null && permanent != null && sourceObject != null) { if (controller.moveCardToExileWithInfo(permanent, source.getSourceId(), sourceObject.getIdName(), source.getSourceId(), game, Zone.BATTLEFIELD, true)) { //create delayed triggered ability - Effect effect = new ReturnToBattlefieldUnderOwnerControlTargetEffect(); + Effect effect = new ReturnToBattlefieldUnderOwnerControlTargetEffect(false, false); effect.setText("Return that card to the battlefield under its owner's control at the beginning of the next end step"); effect.setTargetPointer(new FixedTarget(source.getFirstTarget(), game)); game.addDelayedTriggeredAbility(new AtTheBeginOfNextEndStepDelayedTriggeredAbility(effect), source); diff --git a/Mage.Sets/src/mage/cards/v/VoyagerStaff.java b/Mage.Sets/src/mage/cards/v/VoyagerStaff.java index 2e14d389da5..f25ac1c5c75 100644 --- a/Mage.Sets/src/mage/cards/v/VoyagerStaff.java +++ b/Mage.Sets/src/mage/cards/v/VoyagerStaff.java @@ -1,7 +1,5 @@ - package mage.cards.v; -import java.util.UUID; import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.delayed.AtTheBeginOfNextEndStepDelayedTriggeredAbility; @@ -21,8 +19,9 @@ import mage.players.Player; import mage.target.common.TargetCreaturePermanent; import mage.target.targetpointer.FixedTarget; +import java.util.UUID; + /** - * * @author fireshoes */ public final class VoyagerStaff extends CardImpl { @@ -66,7 +65,7 @@ class VoyagerStaffEffect extends OneShotEffect { if (controller != null && creature != null && sourcePermanent != null) { if (controller.moveCardToExileWithInfo(creature, source.getSourceId(), sourcePermanent.getIdName(), source.getSourceId(), game, Zone.BATTLEFIELD, true)) { //create delayed triggered ability - Effect effect = new ReturnToBattlefieldUnderOwnerControlTargetEffect(); + Effect effect = new ReturnToBattlefieldUnderOwnerControlTargetEffect(false, true); effect.setText("Return the exiled card to the battlefield under its owner's control at the beginning of the next end step"); effect.setTargetPointer(new FixedTarget(creature.getId(), game.getState().getZoneChangeCounter(creature.getId()))); game.addDelayedTriggeredAbility(new AtTheBeginOfNextEndStepDelayedTriggeredAbility(effect), source); diff --git a/Mage.Sets/src/mage/cards/w/WispweaverAngel.java b/Mage.Sets/src/mage/cards/w/WispweaverAngel.java index 2de4396f084..05554b778fc 100644 --- a/Mage.Sets/src/mage/cards/w/WispweaverAngel.java +++ b/Mage.Sets/src/mage/cards/w/WispweaverAngel.java @@ -1,34 +1,22 @@ - package mage.cards.w; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldTriggeredAbility; -import mage.abilities.effects.Effect; -import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.common.ExileTargetForSourceEffect; +import mage.abilities.effects.common.ReturnToBattlefieldUnderOwnerControlTargetEffect; import mage.abilities.keyword.FlyingAbility; -import mage.cards.Card; import mage.cards.CardImpl; import mage.cards.CardSetInfo; -import mage.cards.Cards; -import mage.cards.CardsImpl; -import mage.cards.MeldCard; import mage.constants.CardType; -import mage.constants.Outcome; import mage.constants.SubType; -import mage.constants.Zone; import mage.filter.common.FilterControlledCreaturePermanent; import mage.filter.predicate.permanent.AnotherPredicate; -import mage.game.ExileZone; -import mage.game.Game; -import mage.players.Player; import mage.target.common.TargetControlledCreaturePermanent; -import mage.util.CardUtil; + +import java.util.UUID; /** - * * @author fireshoes */ public final class WispweaverAngel extends CardImpl { @@ -49,10 +37,9 @@ public final class WispweaverAngel extends CardImpl { this.addAbility(FlyingAbility.getInstance()); // When Wispweaver Angel enters the battlefield, you may exile another target creature you control, then return that card to the battlefield under its owner's control. - Effect effect = new ExileTargetForSourceEffect(); - Ability ability = new EntersBattlefieldTriggeredAbility(effect, true); + Ability ability = new EntersBattlefieldTriggeredAbility(new ExileTargetForSourceEffect(), true); + ability.addEffect(new ReturnToBattlefieldUnderOwnerControlTargetEffect(false, false)); ability.addTarget(new TargetControlledCreaturePermanent(1, 1, filter, false)); - ability.addEffect(new WispweaverAngelEffect()); this.addAbility(ability); } @@ -65,57 +52,3 @@ public final class WispweaverAngel extends CardImpl { return new WispweaverAngel(this); } } - -class WispweaverAngelEffect extends OneShotEffect { - - WispweaverAngelEffect() { - super(Outcome.Benefit); - staticText = "return that card to the battlefield under its owner's control"; - } - - WispweaverAngelEffect(final WispweaverAngelEffect effect) { - super(effect); - } - - @Override - public WispweaverAngelEffect copy() { - return new WispweaverAngelEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - Player controller = game.getPlayer(source.getControllerId()); - if (controller != null) { - Cards cardsToBattlefield = new CardsImpl(); - UUID exileZoneId = CardUtil.getExileZoneId(game, source.getSourceId(), source.getSourceObjectZoneChangeCounter()); - if (exileZoneId != null) { - ExileZone exileZone = game.getExile().getExileZone(exileZoneId); - if (exileZone != null) { - for (UUID targetId : this.getTargetPointer().getTargets(game, source)) { - if (exileZone.contains(targetId)) { - cardsToBattlefield.add(targetId); - } else { - Card card = game.getCard(targetId); - if (card instanceof MeldCard) { - MeldCard meldCard = (MeldCard) card; - Card topCard = meldCard.getTopHalfCard(); - Card bottomCard = meldCard.getBottomHalfCard(); - if (topCard.getZoneChangeCounter(game) == meldCard.getTopLastZoneChangeCounter() && exileZone.contains(topCard.getId())) { - cardsToBattlefield.add(topCard); - } - if (bottomCard.getZoneChangeCounter(game) == meldCard.getBottomLastZoneChangeCounter() && exileZone.contains(bottomCard.getId())) { - cardsToBattlefield.add(bottomCard); - } - } - } - } - } - } - if (!cardsToBattlefield.isEmpty()) { - controller.moveCards(cardsToBattlefield.getCards(game), Zone.BATTLEFIELD, source, game, false, false, true, null); - } - return true; - } - return false; - } -} diff --git a/Mage.Sets/src/mage/cards/y/YorionSkyNomad.java b/Mage.Sets/src/mage/cards/y/YorionSkyNomad.java index c7cb415a8b3..b808b8c6162 100644 --- a/Mage.Sets/src/mage/cards/y/YorionSkyNomad.java +++ b/Mage.Sets/src/mage/cards/y/YorionSkyNomad.java @@ -132,7 +132,7 @@ class YorionSkyNomadEffect extends OneShotEffect { cardsToReturn.add(exiled); } } - Effect effect = new ReturnToBattlefieldUnderOwnerControlTargetEffect(); + Effect effect = new ReturnToBattlefieldUnderOwnerControlTargetEffect(false, false); effect.setTargetPointer(new FixedTargets(cardsToReturn, game)); AtTheBeginOfNextEndStepDelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(effect); game.addDelayedTriggeredAbility(delayedAbility, source); diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/EvolveTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/EvolveTest.java index 28ee0709680..20f0f861c49 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/EvolveTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/EvolveTest.java @@ -1,4 +1,3 @@ - package org.mage.test.cards.abilities.keywords; import mage.constants.PhaseStep; @@ -8,7 +7,6 @@ import org.junit.Test; import org.mage.test.serverside.base.CardTestPlayerBase; /** - * * @author LevelX2 */ public class EvolveTest extends CardTestPlayerBase { @@ -166,9 +164,12 @@ public class EvolveTest extends CardTestPlayerBase { addCard(Zone.HAND, playerB, "Sudden Disappearance", 2); castSpell(2, PhaseStep.PRECOMBAT_MAIN, playerB, "Sudden Disappearance", playerA); + setChoice(playerA, "Evolve"); // two triggers + setStrictChooseMode(true); setStopAt(3, PhaseStep.PRECOMBAT_MAIN); execute(); + assertAllCommandsUsed(); assertLife(playerA, 20); assertLife(playerB, 20); diff --git a/Mage/src/main/java/mage/abilities/effects/common/ReturnToBattlefieldUnderOwnerControlTargetEffect.java b/Mage/src/main/java/mage/abilities/effects/common/ReturnToBattlefieldUnderOwnerControlTargetEffect.java index a801160d0f1..092c4447805 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/ReturnToBattlefieldUnderOwnerControlTargetEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/ReturnToBattlefieldUnderOwnerControlTargetEffect.java @@ -8,10 +8,8 @@ import mage.cards.CardsImpl; import mage.cards.MeldCard; import mage.constants.Outcome; import mage.constants.Zone; -import mage.game.ExileZone; import mage.game.Game; import mage.players.Player; -import mage.util.CardUtil; import java.util.UUID; @@ -21,22 +19,19 @@ import java.util.UUID; public class ReturnToBattlefieldUnderOwnerControlTargetEffect extends OneShotEffect { private boolean tapped; - protected boolean fromExileZone; + protected boolean returnFromExileZoneOnly; private String returnName = "that card"; private String returnUnderControlName = "its owner's"; - public ReturnToBattlefieldUnderOwnerControlTargetEffect() { - this(false); - } - - public ReturnToBattlefieldUnderOwnerControlTargetEffect(boolean tapped) { - this(tapped, false); - } - - public ReturnToBattlefieldUnderOwnerControlTargetEffect(boolean tapped, boolean fromExileZone) { + /** + * @param returnFromExileZoneOnly see https://github.com/magefree/mage/issues/5151 + * return it or that card - false + * return exiled card - true + */ + public ReturnToBattlefieldUnderOwnerControlTargetEffect(boolean tapped, boolean returnFromExileZoneOnly) { super(Outcome.Benefit); this.tapped = tapped; - this.fromExileZone = fromExileZone; + this.returnFromExileZoneOnly = returnFromExileZoneOnly; updateText(); } @@ -44,7 +39,7 @@ public class ReturnToBattlefieldUnderOwnerControlTargetEffect extends OneShotEff public ReturnToBattlefieldUnderOwnerControlTargetEffect(final ReturnToBattlefieldUnderOwnerControlTargetEffect effect) { super(effect); this.tapped = effect.tapped; - this.fromExileZone = effect.fromExileZone; + this.returnFromExileZoneOnly = effect.returnFromExileZoneOnly; this.returnName = effect.returnName; this.returnUnderControlName = effect.returnUnderControlName; @@ -67,27 +62,21 @@ public class ReturnToBattlefieldUnderOwnerControlTargetEffect extends OneShotEff Player controller = game.getPlayer(source.getControllerId()); if (controller != null) { Cards cardsToBattlefield = new CardsImpl(); - if (fromExileZone) { - UUID exileZoneId = CardUtil.getExileZoneId(game, source.getSourceId(), source.getSourceObjectZoneChangeCounter()); - if (exileZoneId != null) { - ExileZone exileZone = game.getExile().getExileZone(exileZoneId); - if (exileZone != null) { - for (UUID targetId : this.getTargetPointer().getTargets(game, source)) { - if (exileZone.contains(targetId)) { - cardsToBattlefield.add(targetId); - } else { - Card card = game.getCard(targetId); - if (card instanceof MeldCard) { - MeldCard meldCard = (MeldCard) card; - Card topCard = meldCard.getTopHalfCard(); - Card bottomCard = meldCard.getBottomHalfCard(); - if (topCard.getZoneChangeCounter(game) == meldCard.getTopLastZoneChangeCounter() && exileZone.contains(topCard.getId())) { - cardsToBattlefield.add(topCard); - } - if (bottomCard.getZoneChangeCounter(game) == meldCard.getBottomLastZoneChangeCounter() && exileZone.contains(bottomCard.getId())) { - cardsToBattlefield.add(bottomCard); - } - } + if (returnFromExileZoneOnly) { + for (UUID targetId : this.getTargetPointer().getTargets(game, source)) { + if (game.getExile().containsId(targetId, game)) { + cardsToBattlefield.add(targetId); + } else { + Card card = game.getCard(targetId); + if (card instanceof MeldCard) { + MeldCard meldCard = (MeldCard) card; + Card topCard = meldCard.getTopHalfCard(); + Card bottomCard = meldCard.getBottomHalfCard(); + if (topCard.getZoneChangeCounter(game) == meldCard.getTopLastZoneChangeCounter() && game.getExile().containsId(topCard.getId(), game)) { + cardsToBattlefield.add(topCard); + } + if (bottomCard.getZoneChangeCounter(game) == meldCard.getBottomLastZoneChangeCounter() && game.getExile().containsId(bottomCard.getId(), game)) { + cardsToBattlefield.add(bottomCard); } } } diff --git a/Mage/src/main/java/mage/abilities/effects/common/ReturnToBattlefieldUnderYourControlTargetEffect.java b/Mage/src/main/java/mage/abilities/effects/common/ReturnToBattlefieldUnderYourControlTargetEffect.java index 25936223ddb..839a7ba3049 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/ReturnToBattlefieldUnderYourControlTargetEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/ReturnToBattlefieldUnderYourControlTargetEffect.java @@ -8,10 +8,8 @@ import mage.cards.CardsImpl; import mage.cards.MeldCard; import mage.constants.Outcome; import mage.constants.Zone; -import mage.game.ExileZone; import mage.game.Game; import mage.players.Player; -import mage.util.CardUtil; import java.util.UUID; @@ -20,7 +18,7 @@ import java.util.UUID; */ public class ReturnToBattlefieldUnderYourControlTargetEffect extends OneShotEffect { - private boolean fromExileZone; + private boolean returnFromExileZoneOnly; private boolean tapped; private boolean attacking; private String returnName = "that card"; @@ -30,17 +28,18 @@ public class ReturnToBattlefieldUnderYourControlTargetEffect extends OneShotEffe this(false); } - public ReturnToBattlefieldUnderYourControlTargetEffect(boolean fromExileZone) { - this(fromExileZone, false, false); + public ReturnToBattlefieldUnderYourControlTargetEffect(boolean returnFromExileZoneOnly) { + this(returnFromExileZoneOnly, false, false); } /** - * @param fromExileZone - the card will only be returned if it's still in - * the source object specific exile zone + * @param returnFromExileZoneOnly see https://github.com/magefree/mage/issues/5151 + * return it or that card - false + * return exiled card - true */ - public ReturnToBattlefieldUnderYourControlTargetEffect(boolean fromExileZone, boolean tapped, boolean attacking) { + public ReturnToBattlefieldUnderYourControlTargetEffect(boolean returnFromExileZoneOnly, boolean tapped, boolean attacking) { super(Outcome.Benefit); - this.fromExileZone = fromExileZone; + this.returnFromExileZoneOnly = returnFromExileZoneOnly; this.tapped = tapped; this.attacking = attacking; @@ -49,7 +48,7 @@ public class ReturnToBattlefieldUnderYourControlTargetEffect extends OneShotEffe public ReturnToBattlefieldUnderYourControlTargetEffect(final ReturnToBattlefieldUnderYourControlTargetEffect effect) { super(effect); - this.fromExileZone = effect.fromExileZone; + this.returnFromExileZoneOnly = effect.returnFromExileZoneOnly; this.tapped = effect.tapped; this.attacking = effect.attacking; this.returnName = effect.returnName; @@ -75,27 +74,21 @@ public class ReturnToBattlefieldUnderYourControlTargetEffect extends OneShotEffe Player controller = game.getPlayer(source.getControllerId()); if (controller != null) { Cards cardsToBattlefield = new CardsImpl(); - if (fromExileZone) { - UUID exileZoneId = CardUtil.getExileZoneId(game, source.getSourceId(), source.getSourceObjectZoneChangeCounter()); - if (exileZoneId != null) { - ExileZone exileZone = game.getExile().getExileZone(exileZoneId); - if (exileZone != null) { - for (UUID targetId : this.getTargetPointer().getTargets(game, source)) { - if (exileZone.contains(targetId)) { - cardsToBattlefield.add(targetId); - } else { - Card card = game.getCard(targetId); - if (card instanceof MeldCard) { - MeldCard meldCard = (MeldCard) card; - Card topCard = meldCard.getTopHalfCard(); - Card bottomCard = meldCard.getBottomHalfCard(); - if (topCard.getZoneChangeCounter(game) == meldCard.getTopLastZoneChangeCounter() && exileZone.contains(topCard.getId())) { - cardsToBattlefield.add(topCard); - } - if (bottomCard.getZoneChangeCounter(game) == meldCard.getBottomLastZoneChangeCounter() && exileZone.contains(bottomCard.getId())) { - cardsToBattlefield.add(bottomCard); - } - } + if (returnFromExileZoneOnly) { + for (UUID targetId : this.getTargetPointer().getTargets(game, source)) { + if (game.getExile().containsId(targetId, game)) { + cardsToBattlefield.add(targetId); + } else { + Card card = game.getCard(targetId); + if (card instanceof MeldCard) { + MeldCard meldCard = (MeldCard) card; + Card topCard = meldCard.getTopHalfCard(); + Card bottomCard = meldCard.getBottomHalfCard(); + if (topCard.getZoneChangeCounter(game) == meldCard.getTopLastZoneChangeCounter() && game.getExile().containsId(topCard.getId(), game)) { + cardsToBattlefield.add(topCard); + } + if (bottomCard.getZoneChangeCounter(game) == meldCard.getBottomLastZoneChangeCounter() && game.getExile().containsId(bottomCard.getId(), game)) { + cardsToBattlefield.add(bottomCard); } } } diff --git a/Mage/src/main/java/mage/game/command/planes/AgyremPlane.java b/Mage/src/main/java/mage/game/command/planes/AgyremPlane.java index ee88f5d6f44..400c1473c3a 100644 --- a/Mage/src/main/java/mage/game/command/planes/AgyremPlane.java +++ b/Mage/src/main/java/mage/game/command/planes/AgyremPlane.java @@ -92,7 +92,7 @@ class AgyremEffect extends OneShotEffect { public boolean apply(Game game, Ability source) { Card card = game.getCard(getTargetPointer().getFirst(game, source)); if (card != null) { - Effect effect = new ReturnToBattlefieldUnderOwnerControlTargetEffect(); + Effect effect = new ReturnToBattlefieldUnderOwnerControlTargetEffect(false, false); effect.setTargetPointer(new FixedTarget(card.getId(), card.getZoneChangeCounter(game))); effect.setText("return that card to the battlefield under its owner's control at the beginning of the next end step"); game.addDelayedTriggeredAbility(new AtTheBeginOfNextEndStepDelayedTriggeredAbility(effect, TargetController.ANY), source);