mirror of
https://github.com/correl/mage.git
synced 2024-12-25 03:00:15 +00:00
* Exile and return to battlefield - fixed that some cards can return commander from command zone but they shouldn't (example: Cloudshift, Conjurer's Closet, see #5151, #5278);
This commit is contained in:
parent
589866c6a6
commit
06b6e482a0
56 changed files with 243 additions and 386 deletions
|
@ -1,7 +1,5 @@
|
||||||
|
|
||||||
package mage.cards.a;
|
package mage.cards.a;
|
||||||
|
|
||||||
import java.util.UUID;
|
|
||||||
import mage.abilities.effects.Effect;
|
import mage.abilities.effects.Effect;
|
||||||
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
|
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
|
||||||
import mage.abilities.effects.common.ExileTargetForSourceEffect;
|
import mage.abilities.effects.common.ExileTargetForSourceEffect;
|
||||||
|
@ -11,8 +9,9 @@ import mage.cards.CardSetInfo;
|
||||||
import mage.constants.CardType;
|
import mage.constants.CardType;
|
||||||
import mage.target.common.TargetControlledCreaturePermanent;
|
import mage.target.common.TargetControlledCreaturePermanent;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* @author LevelX2
|
* @author LevelX2
|
||||||
*/
|
*/
|
||||||
public final class AcrobaticManeuver extends CardImpl {
|
public final class AcrobaticManeuver extends CardImpl {
|
||||||
|
@ -24,7 +23,7 @@ public final class AcrobaticManeuver extends CardImpl {
|
||||||
this.getSpellAbility().addTarget(new TargetControlledCreaturePermanent());
|
this.getSpellAbility().addTarget(new TargetControlledCreaturePermanent());
|
||||||
Effect effect = new ExileTargetForSourceEffect();
|
Effect effect = new ExileTargetForSourceEffect();
|
||||||
this.getSpellAbility().addEffect(effect);
|
this.getSpellAbility().addEffect(effect);
|
||||||
this.getSpellAbility().addEffect(new ReturnToBattlefieldUnderOwnerControlTargetEffect());
|
this.getSpellAbility().addEffect(new ReturnToBattlefieldUnderOwnerControlTargetEffect(false, false));
|
||||||
|
|
||||||
// Draw a card.
|
// Draw a card.
|
||||||
this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1));
|
this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1));
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
|
|
||||||
package mage.cards.a;
|
package mage.cards.a;
|
||||||
|
|
||||||
import java.util.UUID;
|
|
||||||
import mage.MageInt;
|
import mage.MageInt;
|
||||||
import mage.abilities.Ability;
|
import mage.abilities.Ability;
|
||||||
import mage.abilities.common.SimpleActivatedAbility;
|
import mage.abilities.common.SimpleActivatedAbility;
|
||||||
|
@ -31,13 +29,15 @@ import mage.players.Player;
|
||||||
import mage.target.common.TargetCreaturePermanent;
|
import mage.target.common.TargetCreaturePermanent;
|
||||||
import mage.target.targetpointer.FixedTarget;
|
import mage.target.targetpointer.FixedTarget;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* @author emerald000
|
* @author emerald000
|
||||||
*/
|
*/
|
||||||
public final class AngelOfCondemnation extends CardImpl {
|
public final class AngelOfCondemnation extends CardImpl {
|
||||||
|
|
||||||
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("another target creature");
|
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("another target creature");
|
||||||
|
|
||||||
static {
|
static {
|
||||||
filter.add(AnotherPredicate.instance);
|
filter.add(AnotherPredicate.instance);
|
||||||
}
|
}
|
||||||
|
@ -101,7 +101,7 @@ class AngelOfCondemnationExileUntilEOTEffect extends OneShotEffect {
|
||||||
if (controller != null && permanent != null && sourcePermanent != null) {
|
if (controller != null && permanent != null && sourcePermanent != null) {
|
||||||
if (controller.moveCardToExileWithInfo(permanent, source.getSourceId(), sourcePermanent.getIdName(), source.getSourceId(), game, Zone.BATTLEFIELD, true)) {
|
if (controller.moveCardToExileWithInfo(permanent, source.getSourceId(), sourcePermanent.getIdName(), source.getSourceId(), game, Zone.BATTLEFIELD, true)) {
|
||||||
//create delayed triggered ability
|
//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.setText("return that card to the battlefield under its owner's control");
|
||||||
effect.setTargetPointer(new FixedTarget(source.getFirstTarget(), game));
|
effect.setTargetPointer(new FixedTarget(source.getFirstTarget(), game));
|
||||||
game.addDelayedTriggeredAbility(new AtTheBeginOfNextEndStepDelayedTriggeredAbility(effect), source);
|
game.addDelayedTriggeredAbility(new AtTheBeginOfNextEndStepDelayedTriggeredAbility(effect), source);
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
|
|
||||||
package mage.cards.a;
|
package mage.cards.a;
|
||||||
|
|
||||||
import java.util.UUID;
|
|
||||||
import mage.abilities.common.PutIntoGraveFromBattlefieldAllTriggeredAbility;
|
import mage.abilities.common.PutIntoGraveFromBattlefieldAllTriggeredAbility;
|
||||||
import mage.abilities.costs.common.SacrificeSourceCost;
|
import mage.abilities.costs.common.SacrificeSourceCost;
|
||||||
import mage.abilities.effects.common.DoIfCostPaid;
|
import mage.abilities.effects.common.DoIfCostPaid;
|
||||||
|
@ -11,19 +9,20 @@ import mage.cards.CardSetInfo;
|
||||||
import mage.constants.CardType;
|
import mage.constants.CardType;
|
||||||
import mage.filter.common.FilterCreaturePermanent;
|
import mage.filter.common.FilterCreaturePermanent;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* @author LoneFox
|
* @author LoneFox
|
||||||
*/
|
*/
|
||||||
public final class AngelicRenewal extends CardImpl {
|
public final class AngelicRenewal extends CardImpl {
|
||||||
|
|
||||||
public AngelicRenewal(UUID ownerId, CardSetInfo setInfo) {
|
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.
|
// 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(
|
this.addAbility(new PutIntoGraveFromBattlefieldAllTriggeredAbility(new DoIfCostPaid(
|
||||||
new ReturnToBattlefieldUnderOwnerControlTargetEffect(), new SacrificeSourceCost()), false,
|
new ReturnToBattlefieldUnderOwnerControlTargetEffect(false, false), new SacrificeSourceCost()), false,
|
||||||
new FilterCreaturePermanent("a creature"), true, true));
|
new FilterCreaturePermanent("a creature"), true, true));
|
||||||
}
|
}
|
||||||
|
|
||||||
public AngelicRenewal(final AngelicRenewal card) {
|
public AngelicRenewal(final AngelicRenewal card) {
|
||||||
|
|
|
@ -124,7 +124,7 @@ class AstralDriftEffect extends OneShotEffect {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
//create delayed triggered ability
|
//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.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));
|
effect.setTargetPointer(new FixedTarget(permanent.getId(), game));
|
||||||
game.addDelayedTriggeredAbility(new AtTheBeginOfNextEndStepDelayedTriggeredAbility(effect), source);
|
game.addDelayedTriggeredAbility(new AtTheBeginOfNextEndStepDelayedTriggeredAbility(effect), source);
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
|
|
||||||
package mage.cards.a;
|
package mage.cards.a;
|
||||||
|
|
||||||
import java.util.UUID;
|
|
||||||
import mage.MageObject;
|
import mage.MageObject;
|
||||||
import mage.abilities.Ability;
|
import mage.abilities.Ability;
|
||||||
import mage.abilities.common.CycleAllTriggeredAbility;
|
import mage.abilities.common.CycleAllTriggeredAbility;
|
||||||
|
@ -19,8 +17,9 @@ import mage.players.Player;
|
||||||
import mage.target.common.TargetCreaturePermanent;
|
import mage.target.common.TargetCreaturePermanent;
|
||||||
import mage.target.targetpointer.FixedTarget;
|
import mage.target.targetpointer.FixedTarget;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* @author Plopman
|
* @author Plopman
|
||||||
*/
|
*/
|
||||||
public final class AstralSlide extends CardImpl {
|
public final class AstralSlide extends CardImpl {
|
||||||
|
@ -48,7 +47,7 @@ class AstralSlideEffect extends OneShotEffect {
|
||||||
|
|
||||||
public AstralSlideEffect() {
|
public AstralSlideEffect() {
|
||||||
super(Outcome.Detriment);
|
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) {
|
public AstralSlideEffect(final AstralSlideEffect effect) {
|
||||||
|
@ -65,7 +64,7 @@ class AstralSlideEffect extends OneShotEffect {
|
||||||
UUID exileId = UUID.randomUUID();
|
UUID exileId = UUID.randomUUID();
|
||||||
if (controller.moveCardsToExile(permanent, source, game, true, exileId, sourceObject.getIdName())) {
|
if (controller.moveCardsToExile(permanent, source, game, true, exileId, sourceObject.getIdName())) {
|
||||||
//create delayed triggered ability
|
//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.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));
|
effect.setTargetPointer(new FixedTarget(permanent.getId(), game));
|
||||||
game.addDelayedTriggeredAbility(new AtTheBeginOfNextEndStepDelayedTriggeredAbility(effect), source);
|
game.addDelayedTriggeredAbility(new AtTheBeginOfNextEndStepDelayedTriggeredAbility(effect), source);
|
||||||
|
|
|
@ -94,7 +94,7 @@ class BlizzardStrixEffect extends OneShotEffect {
|
||||||
if (controller != null && permanent != null && sourcePermanent != null) {
|
if (controller != null && permanent != null && sourcePermanent != null) {
|
||||||
if (controller.moveCardToExileWithInfo(permanent, source.getSourceId(), sourcePermanent.getIdName(), source.getSourceId(), game, Zone.BATTLEFIELD, true)) {
|
if (controller.moveCardToExileWithInfo(permanent, source.getSourceId(), sourcePermanent.getIdName(), source.getSourceId(), game, Zone.BATTLEFIELD, true)) {
|
||||||
//create delayed triggered ability
|
//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.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));
|
effect.setTargetPointer(new FixedTarget(source.getFirstTarget(), game));
|
||||||
game.addDelayedTriggeredAbility(new AtTheBeginOfNextEndStepDelayedTriggeredAbility(effect), source);
|
game.addDelayedTriggeredAbility(new AtTheBeginOfNextEndStepDelayedTriggeredAbility(effect), source);
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
package mage.cards.c;
|
package mage.cards.c;
|
||||||
|
|
||||||
import java.util.UUID;
|
|
||||||
import java.util.stream.Collectors;
|
|
||||||
import mage.MageObject;
|
import mage.MageObject;
|
||||||
import mage.MageObjectReference;
|
import mage.MageObjectReference;
|
||||||
import mage.abilities.Ability;
|
import mage.abilities.Ability;
|
||||||
|
@ -15,7 +13,6 @@ import mage.abilities.effects.common.ReturnToBattlefieldUnderOwnerControlTargetE
|
||||||
import mage.cards.CardImpl;
|
import mage.cards.CardImpl;
|
||||||
import mage.cards.CardSetInfo;
|
import mage.cards.CardSetInfo;
|
||||||
import mage.constants.*;
|
import mage.constants.*;
|
||||||
import static mage.constants.Outcome.Benefit;
|
|
||||||
import mage.filter.FilterCard;
|
import mage.filter.FilterCard;
|
||||||
import mage.filter.FilterPermanent;
|
import mage.filter.FilterPermanent;
|
||||||
import mage.filter.common.FilterControlledEnchantmentPermanent;
|
import mage.filter.common.FilterControlledEnchantmentPermanent;
|
||||||
|
@ -29,6 +26,11 @@ import mage.players.Player;
|
||||||
import mage.target.TargetPermanent;
|
import mage.target.TargetPermanent;
|
||||||
import mage.target.targetpointer.FixedTarget;
|
import mage.target.targetpointer.FixedTarget;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
import static mage.constants.Outcome.Benefit;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author TheElk801
|
* @author TheElk801
|
||||||
*/
|
*/
|
||||||
|
@ -155,7 +157,7 @@ class CalixDestinysHandDelayedTriggeredAbility extends DelayedTriggeredAbility {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
this.getEffects().clear();
|
this.getEffects().clear();
|
||||||
this.addEffect(new ReturnToBattlefieldUnderOwnerControlTargetEffect()
|
this.addEffect(new ReturnToBattlefieldUnderOwnerControlTargetEffect(false, false)
|
||||||
.setTargetPointer(new FixedTarget(this.theirMor)));
|
.setTargetPointer(new FixedTarget(this.theirMor)));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
|
|
||||||
package mage.cards.c;
|
package mage.cards.c;
|
||||||
|
|
||||||
import java.util.UUID;
|
|
||||||
import mage.abilities.effects.Effect;
|
import mage.abilities.effects.Effect;
|
||||||
import mage.abilities.effects.common.ExileTargetForSourceEffect;
|
import mage.abilities.effects.common.ExileTargetForSourceEffect;
|
||||||
import mage.abilities.effects.common.ReturnToBattlefieldUnderYourControlTargetEffect;
|
import mage.abilities.effects.common.ReturnToBattlefieldUnderYourControlTargetEffect;
|
||||||
|
@ -10,8 +8,9 @@ import mage.cards.CardSetInfo;
|
||||||
import mage.constants.CardType;
|
import mage.constants.CardType;
|
||||||
import mage.target.common.TargetControlledCreaturePermanent;
|
import mage.target.common.TargetControlledCreaturePermanent;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* @author noxx
|
* @author noxx
|
||||||
*/
|
*/
|
||||||
public final class Cloudshift extends CardImpl {
|
public final class Cloudshift extends CardImpl {
|
||||||
|
@ -23,7 +22,7 @@ public final class Cloudshift extends CardImpl {
|
||||||
this.getSpellAbility().addTarget(new TargetControlledCreaturePermanent());
|
this.getSpellAbility().addTarget(new TargetControlledCreaturePermanent());
|
||||||
Effect effect = new ExileTargetForSourceEffect();
|
Effect effect = new ExileTargetForSourceEffect();
|
||||||
this.getSpellAbility().addEffect(effect);
|
this.getSpellAbility().addEffect(effect);
|
||||||
this.getSpellAbility().addEffect(new ReturnToBattlefieldUnderYourControlTargetEffect(true));
|
this.getSpellAbility().addEffect(new ReturnToBattlefieldUnderYourControlTargetEffect(false));
|
||||||
}
|
}
|
||||||
|
|
||||||
public Cloudshift(final Cloudshift card) {
|
public Cloudshift(final Cloudshift card) {
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
|
|
||||||
package mage.cards.c;
|
package mage.cards.c;
|
||||||
|
|
||||||
import java.util.UUID;
|
|
||||||
import mage.abilities.Ability;
|
import mage.abilities.Ability;
|
||||||
import mage.abilities.common.BeginningOfYourEndStepTriggeredAbility;
|
import mage.abilities.common.BeginningOfYourEndStepTriggeredAbility;
|
||||||
import mage.abilities.effects.common.ExileTargetForSourceEffect;
|
import mage.abilities.effects.common.ExileTargetForSourceEffect;
|
||||||
|
@ -11,17 +9,19 @@ import mage.cards.CardSetInfo;
|
||||||
import mage.constants.CardType;
|
import mage.constants.CardType;
|
||||||
import mage.target.common.TargetControlledCreaturePermanent;
|
import mage.target.common.TargetControlledCreaturePermanent;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author noxx
|
* @author noxx
|
||||||
*/
|
*/
|
||||||
public final class ConjurersCloset extends CardImpl {
|
public final class ConjurersCloset extends CardImpl {
|
||||||
|
|
||||||
public ConjurersCloset(UUID ownerId, CardSetInfo setInfo) {
|
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.
|
// 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 ability = new BeginningOfYourEndStepTriggeredAbility(new ExileTargetForSourceEffect(), true);
|
||||||
ability.addEffect(new ReturnToBattlefieldUnderYourControlTargetEffect(true));
|
ability.addEffect(new ReturnToBattlefieldUnderYourControlTargetEffect(false));
|
||||||
ability.addTarget(new TargetControlledCreaturePermanent());
|
ability.addTarget(new TargetControlledCreaturePermanent());
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,7 +23,7 @@ public final class Displace extends CardImpl {
|
||||||
this.getSpellAbility().addTarget(new TargetControlledCreaturePermanent(0, 2, new FilterControlledCreaturePermanent("creatures you control"), false));
|
this.getSpellAbility().addTarget(new TargetControlledCreaturePermanent(0, 2, new FilterControlledCreaturePermanent("creatures you control"), false));
|
||||||
Effect effect = new ExileTargetForSourceEffect();
|
Effect effect = new ExileTargetForSourceEffect();
|
||||||
this.getSpellAbility().addEffect(effect);
|
this.getSpellAbility().addEffect(effect);
|
||||||
effect = new ReturnToBattlefieldUnderOwnerControlTargetEffect()
|
effect = new ReturnToBattlefieldUnderOwnerControlTargetEffect(false, false)
|
||||||
.withReturnNames("those cards", "their owner's").concatBy(", then");
|
.withReturnNames("those cards", "their owner's").concatBy(", then");
|
||||||
this.getSpellAbility().addEffect(effect);
|
this.getSpellAbility().addEffect(effect);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,9 +1,5 @@
|
||||||
|
|
||||||
package mage.cards.e;
|
package mage.cards.e;
|
||||||
|
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.Set;
|
|
||||||
import java.util.UUID;
|
|
||||||
import mage.MageObject;
|
import mage.MageObject;
|
||||||
import mage.abilities.Ability;
|
import mage.abilities.Ability;
|
||||||
import mage.abilities.common.delayed.AtTheBeginOfNextEndStepDelayedTriggeredAbility;
|
import mage.abilities.common.delayed.AtTheBeginOfNextEndStepDelayedTriggeredAbility;
|
||||||
|
@ -23,14 +19,17 @@ import mage.target.common.TargetControlledCreaturePermanent;
|
||||||
import mage.target.targetpointer.FixedTargets;
|
import mage.target.targetpointer.FixedTargets;
|
||||||
import mage.util.CardUtil;
|
import mage.util.CardUtil;
|
||||||
|
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* @author LevelX2
|
* @author LevelX2
|
||||||
*/
|
*/
|
||||||
public final class EerieInterlude extends CardImpl {
|
public final class EerieInterlude extends CardImpl {
|
||||||
|
|
||||||
public EerieInterlude(UUID ownerId, CardSetInfo setInfo) {
|
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.
|
// 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());
|
this.getSpellAbility().addEffect(new EerieInterludeEffect());
|
||||||
|
@ -86,12 +85,11 @@ class EerieInterludeEffect extends OneShotEffect {
|
||||||
if (bottomCard.getZoneChangeCounter(game) == meldCard.getBottomLastZoneChangeCounter()) {
|
if (bottomCard.getZoneChangeCounter(game) == meldCard.getBottomLastZoneChangeCounter()) {
|
||||||
cardsToReturn.add(bottomCard);
|
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);
|
cardsToReturn.add(exiled);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Effect effect = new ReturnToBattlefieldUnderOwnerControlTargetEffect();
|
Effect effect = new ReturnToBattlefieldUnderOwnerControlTargetEffect(false, false);
|
||||||
effect.setTargetPointer(new FixedTargets(cardsToReturn, game));
|
effect.setTargetPointer(new FixedTargets(cardsToReturn, game));
|
||||||
AtTheBeginOfNextEndStepDelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(effect);
|
AtTheBeginOfNextEndStepDelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(effect);
|
||||||
game.addDelayedTriggeredAbility(delayedAbility, source);
|
game.addDelayedTriggeredAbility(delayedAbility, source);
|
||||||
|
|
|
@ -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.
|
// {2}{C}: Exile another target creature, then return it to the battlefield tapped under its owner's control.
|
||||||
Effect effect = new ExileTargetForSourceEffect();
|
Effect effect = new ExileTargetForSourceEffect();
|
||||||
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, effect, new ManaCostsImpl<>("{2}{C}"));
|
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");
|
.withReturnNames("it", "its owner's").concatBy(", then");
|
||||||
ability.addEffect(effect);
|
ability.addEffect(effect);
|
||||||
ability.addTarget(new TargetCreaturePermanent(FILTER));
|
ability.addTarget(new TargetCreaturePermanent(FILTER));
|
||||||
|
|
|
@ -23,7 +23,6 @@ import mage.game.permanent.Permanent;
|
||||||
import mage.target.TargetPermanent;
|
import mage.target.TargetPermanent;
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import mage.abilities.effects.Effect;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author TheElk801
|
* @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.
|
// {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 ability = new SimpleActivatedAbility(new ExileTargetForSourceEffect(), new GenericManaCost(3));
|
||||||
ability.addEffect(new ReturnToBattlefieldUnderOwnerControlTargetEffect());
|
ability.addEffect(new ReturnToBattlefieldUnderOwnerControlTargetEffect(false, false));
|
||||||
ability.addTarget(new TargetPermanent(filter));
|
ability.addTarget(new TargetPermanent(filter));
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
|
|
||||||
|
@ -57,7 +56,7 @@ public final class EmielTheBlessed extends CardImpl {
|
||||||
Zone.BATTLEFIELD, new DoIfCostPaid(new EmielTheBlessedEffect(), new ManaCostsImpl<>("{G/W}")),
|
Zone.BATTLEFIELD, new DoIfCostPaid(new EmielTheBlessedEffect(), new ManaCostsImpl<>("{G/W}")),
|
||||||
StaticFilters.FILTER_CONTROLLED_ANOTHER_CREATURE, false, SetTargetPointer.PERMANENT,
|
StaticFilters.FILTER_CONTROLLED_ANOTHER_CREATURE, false, SetTargetPointer.PERMANENT,
|
||||||
"Whenever another creature enters the battlefield under your control, you may pay {G/W}. "
|
"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."
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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.
|
// Exile target creature you control, then return it to the battlefield under its owner's control.
|
||||||
this.getSpellAbility().addTarget(new TargetControlledCreaturePermanent());
|
this.getSpellAbility().addTarget(new TargetControlledCreaturePermanent());
|
||||||
this.getSpellAbility().addEffect(new ExileTargetForSourceEffect());
|
this.getSpellAbility().addEffect(new ExileTargetForSourceEffect());
|
||||||
this.getSpellAbility().addEffect(new ReturnToBattlefieldUnderOwnerControlTargetEffect());
|
this.getSpellAbility().addEffect(new ReturnToBattlefieldUnderOwnerControlTargetEffect(false, false));
|
||||||
|
|
||||||
// Rebound
|
// Rebound
|
||||||
this.addAbility(new ReboundAbility());
|
this.addAbility(new ReboundAbility());
|
||||||
|
|
|
@ -40,7 +40,7 @@ public final class EscapeProtocol extends CardImpl {
|
||||||
"exile target artifact or creature you control, " +
|
"exile target artifact or creature you control, " +
|
||||||
"then return it to the battlefield under its owner's 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));
|
ability.addTarget(new TargetPermanent(filter));
|
||||||
this.addAbility(new CycleControllerTriggeredAbility(new DoWhenCostPaid(
|
this.addAbility(new CycleControllerTriggeredAbility(new DoWhenCostPaid(
|
||||||
ability, new GenericManaCost(1), "Pay {1}?"
|
ability, new GenericManaCost(1), "Pay {1}?"
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
|
|
||||||
package mage.cards.e;
|
package mage.cards.e;
|
||||||
|
|
||||||
import java.util.UUID;
|
|
||||||
import mage.abilities.Ability;
|
import mage.abilities.Ability;
|
||||||
import mage.abilities.effects.Effect;
|
import mage.abilities.effects.Effect;
|
||||||
import mage.abilities.effects.OneShotEffect;
|
import mage.abilities.effects.OneShotEffect;
|
||||||
|
@ -13,16 +11,15 @@ import mage.constants.Outcome;
|
||||||
import mage.constants.SubType;
|
import mage.constants.SubType;
|
||||||
import mage.constants.Zone;
|
import mage.constants.Zone;
|
||||||
import mage.counters.CounterType;
|
import mage.counters.CounterType;
|
||||||
import mage.game.ExileZone;
|
|
||||||
import mage.game.Game;
|
import mage.game.Game;
|
||||||
import mage.game.permanent.Permanent;
|
import mage.game.permanent.Permanent;
|
||||||
import mage.players.Player;
|
import mage.players.Player;
|
||||||
import mage.target.common.TargetControlledCreaturePermanent;
|
import mage.target.common.TargetControlledCreaturePermanent;
|
||||||
import mage.target.targetpointer.FixedTarget;
|
import mage.target.targetpointer.FixedTarget;
|
||||||
import mage.util.CardUtil;
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* @author LevelX2
|
* @author LevelX2
|
||||||
*/
|
*/
|
||||||
public final class EssenceFlux extends CardImpl {
|
public final class EssenceFlux extends CardImpl {
|
||||||
|
@ -68,30 +65,25 @@ class EssenceFluxEffect extends OneShotEffect {
|
||||||
Player controller = game.getPlayer(source.getControllerId());
|
Player controller = game.getPlayer(source.getControllerId());
|
||||||
if (controller != null) {
|
if (controller != null) {
|
||||||
Cards cardsToBattlefield = new CardsImpl();
|
Cards cardsToBattlefield = new CardsImpl();
|
||||||
UUID exileZoneId = CardUtil.getExileZoneId(game, source.getSourceId(), source.getSourceObjectZoneChangeCounter());
|
for (UUID targetId : this.getTargetPointer().getTargets(game, source)) {
|
||||||
if (exileZoneId != null) {
|
if (game.getExile().containsId(targetId, game)) {
|
||||||
ExileZone exileZone = game.getExile().getExileZone(exileZoneId);
|
cardsToBattlefield.add(targetId);
|
||||||
if (exileZone != null) {
|
} else {
|
||||||
for (UUID targetId : this.getTargetPointer().getTargets(game, source)) {
|
Card card = game.getCard(targetId);
|
||||||
if (exileZone.contains(targetId)) {
|
if (card instanceof MeldCard) {
|
||||||
cardsToBattlefield.add(targetId);
|
MeldCard meldCard = (MeldCard) card;
|
||||||
} else {
|
Card topCard = meldCard.getTopHalfCard();
|
||||||
Card card = game.getCard(targetId);
|
Card bottomCard = meldCard.getBottomHalfCard();
|
||||||
if (card instanceof MeldCard) {
|
if (topCard.getZoneChangeCounter(game) == meldCard.getTopLastZoneChangeCounter() && game.getExile().containsId(topCard.getId(), game)) {
|
||||||
MeldCard meldCard = (MeldCard) card;
|
cardsToBattlefield.add(topCard);
|
||||||
Card topCard = meldCard.getTopHalfCard();
|
}
|
||||||
Card bottomCard = meldCard.getBottomHalfCard();
|
if (bottomCard.getZoneChangeCounter(game) == meldCard.getBottomLastZoneChangeCounter() && game.getExile().containsId(bottomCard.getId(), game)) {
|
||||||
if (topCard.getZoneChangeCounter(game) == meldCard.getTopLastZoneChangeCounter() && exileZone.contains(topCard.getId())) {
|
cardsToBattlefield.add(bottomCard);
|
||||||
cardsToBattlefield.add(topCard);
|
|
||||||
}
|
|
||||||
if (bottomCard.getZoneChangeCounter(game) == meldCard.getBottomLastZoneChangeCounter() && exileZone.contains(bottomCard.getId())) {
|
|
||||||
cardsToBattlefield.add(bottomCard);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!cardsToBattlefield.isEmpty()) {
|
if (!cardsToBattlefield.isEmpty()) {
|
||||||
controller.moveCards(cardsToBattlefield.getCards(game), Zone.BATTLEFIELD, source, game, false, false, true, null);
|
controller.moveCards(cardsToBattlefield.getCards(game), Zone.BATTLEFIELD, source, game, false, false, true, null);
|
||||||
for (UUID cardId : cardsToBattlefield) {
|
for (UUID cardId : cardsToBattlefield) {
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
|
|
||||||
package mage.cards.f;
|
package mage.cards.f;
|
||||||
|
|
||||||
import java.util.UUID;
|
|
||||||
import mage.MageInt;
|
import mage.MageInt;
|
||||||
import mage.abilities.Ability;
|
import mage.abilities.Ability;
|
||||||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||||
|
@ -16,8 +14,9 @@ import mage.filter.common.FilterControlledPermanent;
|
||||||
import mage.filter.predicate.permanent.AnotherPredicate;
|
import mage.filter.predicate.permanent.AnotherPredicate;
|
||||||
import mage.target.common.TargetControlledPermanent;
|
import mage.target.common.TargetControlledPermanent;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* @author Styxo
|
* @author Styxo
|
||||||
*/
|
*/
|
||||||
public final class FelidarGuardian extends CardImpl {
|
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.
|
// 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();
|
Effect effect = new ExileTargetForSourceEffect();
|
||||||
Ability ability = new EntersBattlefieldTriggeredAbility(effect, true);
|
Ability ability = new EntersBattlefieldTriggeredAbility(effect, true);
|
||||||
ability.addEffect(new ReturnToBattlefieldUnderOwnerControlTargetEffect());
|
ability.addEffect(new ReturnToBattlefieldUnderOwnerControlTargetEffect(false, false));
|
||||||
ability.addTarget(new TargetControlledPermanent(filter));
|
ability.addTarget(new TargetControlledPermanent(filter));
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
|
|
||||||
package mage.cards.f;
|
package mage.cards.f;
|
||||||
|
|
||||||
import java.util.UUID;
|
|
||||||
import mage.abilities.effects.common.ExileTargetForSourceEffect;
|
import mage.abilities.effects.common.ExileTargetForSourceEffect;
|
||||||
import mage.abilities.effects.common.ReturnToBattlefieldUnderOwnerControlTargetEffect;
|
import mage.abilities.effects.common.ReturnToBattlefieldUnderOwnerControlTargetEffect;
|
||||||
import mage.cards.CardImpl;
|
import mage.cards.CardImpl;
|
||||||
|
@ -12,26 +10,27 @@ import mage.filter.predicate.Predicates;
|
||||||
import mage.filter.predicate.permanent.TokenPredicate;
|
import mage.filter.predicate.permanent.TokenPredicate;
|
||||||
import mage.target.TargetPermanent;
|
import mage.target.TargetPermanent;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* @author LevelX2
|
* @author LevelX2
|
||||||
*/
|
*/
|
||||||
public final class Flicker extends CardImpl {
|
public final class Flicker extends CardImpl {
|
||||||
|
|
||||||
private static final FilterPermanent filter = new FilterPermanent("nontoken permanent");
|
private static final FilterPermanent filter = new FilterPermanent("nontoken permanent");
|
||||||
|
|
||||||
static {
|
static {
|
||||||
filter.add(Predicates.not(TokenPredicate.instance));
|
filter.add(Predicates.not(TokenPredicate.instance));
|
||||||
}
|
}
|
||||||
|
|
||||||
public Flicker(UUID ownerId, CardSetInfo setInfo) {
|
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.
|
// Exile target nontoken permanent, then return it to the battlefield under its owner's control.
|
||||||
this.getSpellAbility().addTarget(new TargetPermanent(filter));
|
this.getSpellAbility().addTarget(new TargetPermanent(filter));
|
||||||
this.getSpellAbility().addEffect(new ExileTargetForSourceEffect());
|
this.getSpellAbility().addEffect(new ExileTargetForSourceEffect());
|
||||||
this.getSpellAbility().addEffect(new ReturnToBattlefieldUnderOwnerControlTargetEffect(false, true));
|
this.getSpellAbility().addEffect(new ReturnToBattlefieldUnderOwnerControlTargetEffect(false, false));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Flicker(final Flicker card) {
|
public Flicker(final Flicker card) {
|
||||||
|
|
|
@ -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.
|
// 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 ExileTargetForSourceEffect());
|
||||||
this.getSpellAbility().addEffect(new ReturnToBattlefieldUnderOwnerControlTargetEffect(false));
|
this.getSpellAbility().addEffect(new ReturnToBattlefieldUnderOwnerControlTargetEffect(false, false));
|
||||||
this.getSpellAbility().addTarget(new TargetPermanent(filter));
|
this.getSpellAbility().addTarget(new TargetPermanent(filter));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
|
|
||||||
package mage.cards.f;
|
package mage.cards.f;
|
||||||
|
|
||||||
import java.util.UUID;
|
|
||||||
import mage.MageInt;
|
import mage.MageInt;
|
||||||
import mage.abilities.Ability;
|
import mage.abilities.Ability;
|
||||||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||||
|
@ -13,8 +11,8 @@ import mage.abilities.keyword.FlyingAbility;
|
||||||
import mage.cards.CardImpl;
|
import mage.cards.CardImpl;
|
||||||
import mage.cards.CardSetInfo;
|
import mage.cards.CardSetInfo;
|
||||||
import mage.constants.CardType;
|
import mage.constants.CardType;
|
||||||
import mage.constants.SubType;
|
|
||||||
import mage.constants.Outcome;
|
import mage.constants.Outcome;
|
||||||
|
import mage.constants.SubType;
|
||||||
import mage.constants.Zone;
|
import mage.constants.Zone;
|
||||||
import mage.filter.FilterPermanent;
|
import mage.filter.FilterPermanent;
|
||||||
import mage.filter.predicate.permanent.AnotherPredicate;
|
import mage.filter.predicate.permanent.AnotherPredicate;
|
||||||
|
@ -24,8 +22,9 @@ import mage.players.Player;
|
||||||
import mage.target.TargetPermanent;
|
import mage.target.TargetPermanent;
|
||||||
import mage.target.targetpointer.FixedTarget;
|
import mage.target.targetpointer.FixedTarget;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* @author Plopman
|
* @author Plopman
|
||||||
*/
|
*/
|
||||||
public final class Flickerwisp extends CardImpl {
|
public final class Flickerwisp extends CardImpl {
|
||||||
|
@ -81,7 +80,7 @@ class FlickerwispEffect extends OneShotEffect {
|
||||||
if (controller != null && permanent != null && sourcePermanent != null) {
|
if (controller != null && permanent != null && sourcePermanent != null) {
|
||||||
if (controller.moveCardToExileWithInfo(permanent, source.getSourceId(), sourcePermanent.getIdName(), source.getSourceId(), game, Zone.BATTLEFIELD, true)) {
|
if (controller.moveCardToExileWithInfo(permanent, source.getSourceId(), sourcePermanent.getIdName(), source.getSourceId(), game, Zone.BATTLEFIELD, true)) {
|
||||||
//create delayed triggered ability
|
//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.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));
|
effect.setTargetPointer(new FixedTarget(source.getFirstTarget(), game));
|
||||||
game.addDelayedTriggeredAbility(new AtTheBeginOfNextEndStepDelayedTriggeredAbility(effect), source);
|
game.addDelayedTriggeredAbility(new AtTheBeginOfNextEndStepDelayedTriggeredAbility(effect), source);
|
||||||
|
|
|
@ -91,7 +91,7 @@ class GalepowderMageEffect extends OneShotEffect {
|
||||||
if (controller.moveCardToExileWithInfo(permanent, exileId, sourceObject.getIdName(), source.getSourceId(), game, Zone.BATTLEFIELD, true)) {
|
if (controller.moveCardToExileWithInfo(permanent, exileId, sourceObject.getIdName(), source.getSourceId(), game, Zone.BATTLEFIELD, true)) {
|
||||||
Card card = game.getCard(getTargetPointer().getFirst(game, source));
|
Card card = game.getCard(getTargetPointer().getFirst(game, source));
|
||||||
if (card != null) {
|
if (card != null) {
|
||||||
Effect effect = new ReturnToBattlefieldUnderOwnerControlTargetEffect();
|
Effect effect = new ReturnToBattlefieldUnderOwnerControlTargetEffect(false, false);
|
||||||
effect.setTargetPointer(new FixedTarget(card.getId(), game.getState().getZoneChangeCounter(card.getId())));
|
effect.setTargetPointer(new FixedTarget(card.getId(), game.getState().getZoneChangeCounter(card.getId())));
|
||||||
AtTheBeginOfNextEndStepDelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(effect);
|
AtTheBeginOfNextEndStepDelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(effect);
|
||||||
game.addDelayedTriggeredAbility(delayedAbility, source);
|
game.addDelayedTriggeredAbility(delayedAbility, source);
|
||||||
|
|
|
@ -1,9 +1,5 @@
|
||||||
|
|
||||||
package mage.cards.g;
|
package mage.cards.g;
|
||||||
|
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.Set;
|
|
||||||
import java.util.UUID;
|
|
||||||
import mage.MageObject;
|
import mage.MageObject;
|
||||||
import mage.abilities.Ability;
|
import mage.abilities.Ability;
|
||||||
import mage.abilities.common.delayed.AtTheBeginOfNextEndStepDelayedTriggeredAbility;
|
import mage.abilities.common.delayed.AtTheBeginOfNextEndStepDelayedTriggeredAbility;
|
||||||
|
@ -20,14 +16,17 @@ import mage.players.Player;
|
||||||
import mage.target.targetpointer.FixedTargets;
|
import mage.target.targetpointer.FixedTargets;
|
||||||
import mage.util.CardUtil;
|
import mage.util.CardUtil;
|
||||||
|
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* @author jeffwadsworth
|
* @author jeffwadsworth
|
||||||
*/
|
*/
|
||||||
public final class Ghostway extends CardImpl {
|
public final class Ghostway extends CardImpl {
|
||||||
|
|
||||||
public Ghostway(UUID ownerId, CardSetInfo setInfo) {
|
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.
|
// 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());
|
this.getSpellAbility().addEffect(new GhostwayEffect());
|
||||||
|
@ -77,7 +76,7 @@ class GhostwayEffect extends OneShotEffect {
|
||||||
cardsToReturn.add(exiled);
|
cardsToReturn.add(exiled);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Effect effect = new ReturnToBattlefieldUnderOwnerControlTargetEffect();
|
Effect effect = new ReturnToBattlefieldUnderOwnerControlTargetEffect(false, false);
|
||||||
effect.setTargetPointer(new FixedTargets(cardsToReturn, game));
|
effect.setTargetPointer(new FixedTargets(cardsToReturn, game));
|
||||||
AtTheBeginOfNextEndStepDelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(effect);
|
AtTheBeginOfNextEndStepDelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(effect);
|
||||||
game.addDelayedTriggeredAbility(delayedAbility, source);
|
game.addDelayedTriggeredAbility(delayedAbility, source);
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
|
|
||||||
package mage.cards.g;
|
package mage.cards.g;
|
||||||
|
|
||||||
import java.util.UUID;
|
|
||||||
import mage.MageInt;
|
import mage.MageInt;
|
||||||
import mage.abilities.Ability;
|
import mage.abilities.Ability;
|
||||||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||||
|
@ -13,8 +11,8 @@ import mage.abilities.keyword.VigilanceAbility;
|
||||||
import mage.cards.CardImpl;
|
import mage.cards.CardImpl;
|
||||||
import mage.cards.CardSetInfo;
|
import mage.cards.CardSetInfo;
|
||||||
import mage.constants.CardType;
|
import mage.constants.CardType;
|
||||||
import mage.constants.SubType;
|
|
||||||
import mage.constants.Outcome;
|
import mage.constants.Outcome;
|
||||||
|
import mage.constants.SubType;
|
||||||
import mage.constants.Zone;
|
import mage.constants.Zone;
|
||||||
import mage.filter.FilterPermanent;
|
import mage.filter.FilterPermanent;
|
||||||
import mage.filter.predicate.permanent.AnotherPredicate;
|
import mage.filter.predicate.permanent.AnotherPredicate;
|
||||||
|
@ -24,8 +22,9 @@ import mage.players.Player;
|
||||||
import mage.target.TargetPermanent;
|
import mage.target.TargetPermanent;
|
||||||
import mage.target.targetpointer.FixedTarget;
|
import mage.target.targetpointer.FixedTarget;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* @author maurer.it_at_gmail.com
|
* @author maurer.it_at_gmail.com
|
||||||
*/
|
*/
|
||||||
public final class GlimmerpointStag extends CardImpl {
|
public final class GlimmerpointStag extends CardImpl {
|
||||||
|
@ -37,7 +36,7 @@ public final class GlimmerpointStag extends CardImpl {
|
||||||
}
|
}
|
||||||
|
|
||||||
public GlimmerpointStag(UUID ownerId, CardSetInfo setInfo) {
|
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.subtype.add(SubType.ELK);
|
||||||
|
|
||||||
this.power = new MageInt(3);
|
this.power = new MageInt(3);
|
||||||
|
@ -84,7 +83,7 @@ class GlimmerpointStagEffect extends OneShotEffect {
|
||||||
int zcc = permanent.getZoneChangeCounter(game);
|
int zcc = permanent.getZoneChangeCounter(game);
|
||||||
controller.moveCards(permanent, Zone.EXILED, source, game);
|
controller.moveCards(permanent, Zone.EXILED, source, game);
|
||||||
//create delayed triggered ability
|
//create delayed triggered ability
|
||||||
Effect effect = new ReturnToBattlefieldUnderOwnerControlTargetEffect();
|
Effect effect = new ReturnToBattlefieldUnderOwnerControlTargetEffect(false, false);
|
||||||
effect.setTargetPointer(new FixedTarget(permanent.getId(), zcc + 1));
|
effect.setTargetPointer(new FixedTarget(permanent.getId(), zcc + 1));
|
||||||
AtTheBeginOfNextEndStepDelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(effect);
|
AtTheBeginOfNextEndStepDelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(effect);
|
||||||
game.addDelayedTriggeredAbility(delayedAbility, source);
|
game.addDelayedTriggeredAbility(delayedAbility, source);
|
||||||
|
|
|
@ -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.
|
// 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 ExileTargetForSourceEffect());
|
||||||
this.getSpellAbility().addEffect(new ReturnToBattlefieldUnderYourControlTargetEffect(true)
|
this.getSpellAbility().addEffect(new ReturnToBattlefieldUnderYourControlTargetEffect(false)
|
||||||
.withReturnNames("those cards", "their owner's").concatBy(", then"));
|
.withReturnNames("those cards", "their owner's").concatBy(", then"));
|
||||||
this.getSpellAbility().addTarget(new TargetControlledCreaturePermanent(0, 2,
|
this.getSpellAbility().addTarget(new TargetControlledCreaturePermanent(0, 2,
|
||||||
new FilterControlledCreaturePermanent("creatures you control"), false));
|
new FilterControlledCreaturePermanent("creatures you control"), false));
|
||||||
|
|
|
@ -62,7 +62,7 @@ class JusticiarsPortalEffect extends OneShotEffect {
|
||||||
public boolean apply(Game game, Ability source) {
|
public boolean apply(Game game, Ability source) {
|
||||||
UUID targetId = source.getFirstTarget();
|
UUID targetId = source.getFirstTarget();
|
||||||
new ExileTargetForSourceEffect().apply(game, source);
|
new ExileTargetForSourceEffect().apply(game, source);
|
||||||
new ReturnToBattlefieldUnderYourControlTargetEffect(true).apply(game, source);
|
new ReturnToBattlefieldUnderYourControlTargetEffect().apply(game, source);
|
||||||
ContinuousEffect effect = new GainAbilityTargetEffect(FirstStrikeAbility.getInstance(), Duration.EndOfTurn);
|
ContinuousEffect effect = new GainAbilityTargetEffect(FirstStrikeAbility.getInstance(), Duration.EndOfTurn);
|
||||||
effect.setTargetPointer(new FixedTarget(targetId, game));
|
effect.setTargetPointer(new FixedTarget(targetId, game));
|
||||||
game.addEffect(effect, source);
|
game.addEffect(effect, source);
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
|
|
||||||
package mage.cards.k;
|
package mage.cards.k;
|
||||||
|
|
||||||
import java.util.UUID;
|
|
||||||
import mage.abilities.Ability;
|
import mage.abilities.Ability;
|
||||||
import mage.abilities.LoyaltyAbility;
|
import mage.abilities.LoyaltyAbility;
|
||||||
import mage.abilities.common.PlaneswalkerEntersWithLoyaltyCountersAbility;
|
import mage.abilities.common.PlaneswalkerEntersWithLoyaltyCountersAbility;
|
||||||
|
@ -15,12 +13,7 @@ import mage.abilities.effects.common.ReturnToBattlefieldUnderOwnerControlTargetE
|
||||||
import mage.abilities.effects.common.discard.DiscardEachPlayerEffect;
|
import mage.abilities.effects.common.discard.DiscardEachPlayerEffect;
|
||||||
import mage.cards.CardImpl;
|
import mage.cards.CardImpl;
|
||||||
import mage.cards.CardSetInfo;
|
import mage.cards.CardSetInfo;
|
||||||
import mage.constants.CardType;
|
import mage.constants.*;
|
||||||
import mage.constants.SubType;
|
|
||||||
import mage.constants.Outcome;
|
|
||||||
import mage.constants.SuperType;
|
|
||||||
import mage.constants.TargetController;
|
|
||||||
import mage.constants.Zone;
|
|
||||||
import mage.filter.common.FilterCreaturePermanent;
|
import mage.filter.common.FilterCreaturePermanent;
|
||||||
import mage.game.Game;
|
import mage.game.Game;
|
||||||
import mage.game.permanent.Permanent;
|
import mage.game.permanent.Permanent;
|
||||||
|
@ -28,8 +21,9 @@ import mage.players.Player;
|
||||||
import mage.target.common.TargetCreaturePermanent;
|
import mage.target.common.TargetCreaturePermanent;
|
||||||
import mage.target.targetpointer.FixedTarget;
|
import mage.target.targetpointer.FixedTarget;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* @author fireshoes
|
* @author fireshoes
|
||||||
*/
|
*/
|
||||||
public final class KayaGhostAssassin extends CardImpl {
|
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.");
|
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("target creature to exile. Choose no targets to exile Kaya.");
|
||||||
|
|
||||||
public KayaGhostAssassin(UUID ownerId, CardSetInfo setInfo) {
|
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.addSuperType(SuperType.LEGENDARY);
|
||||||
this.subtype.add(SubType.KAYA);
|
this.subtype.add(SubType.KAYA);
|
||||||
|
|
||||||
|
@ -101,7 +95,7 @@ class KayaGhostAssassinEffect extends OneShotEffect {
|
||||||
if (targetCreature != null) {
|
if (targetCreature != null) {
|
||||||
int zcc = targetCreature.getZoneChangeCounter(game);
|
int zcc = targetCreature.getZoneChangeCounter(game);
|
||||||
if (controller.moveCards(targetCreature, Zone.EXILED, source, 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));
|
effect.setTargetPointer(new FixedTarget(targetCreature.getId(), zcc + 1));
|
||||||
AtTheBeginOfYourNextUpkeepDelayedTriggeredAbility delayedAbility
|
AtTheBeginOfYourNextUpkeepDelayedTriggeredAbility delayedAbility
|
||||||
= new AtTheBeginOfYourNextUpkeepDelayedTriggeredAbility(effect);
|
= new AtTheBeginOfYourNextUpkeepDelayedTriggeredAbility(effect);
|
||||||
|
@ -111,12 +105,12 @@ class KayaGhostAssassinEffect extends OneShotEffect {
|
||||||
} else {
|
} else {
|
||||||
int zcc = sourcePermanent.getZoneChangeCounter(game);
|
int zcc = sourcePermanent.getZoneChangeCounter(game);
|
||||||
if (controller.moveCards(sourcePermanent, Zone.EXILED, source, game)) {
|
if (controller.moveCards(sourcePermanent, Zone.EXILED, source, game)) {
|
||||||
Effect effect = new ReturnToBattlefieldUnderOwnerControlTargetEffect();
|
Effect effect = new ReturnToBattlefieldUnderOwnerControlTargetEffect(false, false);
|
||||||
effect.setTargetPointer(new FixedTarget(sourcePermanent.getId(), zcc + 1));
|
effect.setTargetPointer(new FixedTarget(sourcePermanent.getId(), zcc + 1));
|
||||||
AtTheBeginOfYourNextUpkeepDelayedTriggeredAbility delayedAbility
|
AtTheBeginOfYourNextUpkeepDelayedTriggeredAbility delayedAbility
|
||||||
= new AtTheBeginOfYourNextUpkeepDelayedTriggeredAbility(effect);
|
= new AtTheBeginOfYourNextUpkeepDelayedTriggeredAbility(effect);
|
||||||
game.addDelayedTriggeredAbility(delayedAbility, source);
|
game.addDelayedTriggeredAbility(delayedAbility, source);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
controller.loseLife(2, game, false);
|
controller.loseLife(2, game, false);
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
|
|
||||||
package mage.cards.l;
|
package mage.cards.l;
|
||||||
|
|
||||||
import java.util.UUID;
|
|
||||||
import mage.MageObject;
|
import mage.MageObject;
|
||||||
import mage.abilities.Ability;
|
import mage.abilities.Ability;
|
||||||
import mage.abilities.common.delayed.AtTheBeginOfNextEndStepDelayedTriggeredAbility;
|
import mage.abilities.common.delayed.AtTheBeginOfNextEndStepDelayedTriggeredAbility;
|
||||||
|
@ -17,10 +15,10 @@ import mage.game.permanent.Permanent;
|
||||||
import mage.target.common.TargetControlledCreaturePermanent;
|
import mage.target.common.TargetControlledCreaturePermanent;
|
||||||
import mage.target.targetpointer.FixedTarget;
|
import mage.target.targetpointer.FixedTarget;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* @author LoneFox
|
* @author LoneFox
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
public final class Liberate extends CardImpl {
|
public final class Liberate extends CardImpl {
|
||||||
|
|
||||||
|
@ -59,7 +57,7 @@ class LiberateEffect extends OneShotEffect {
|
||||||
MageObject sourceObject = game.getObject(source.getSourceId());
|
MageObject sourceObject = game.getObject(source.getSourceId());
|
||||||
if (permanent != null && sourceObject != null) {
|
if (permanent != null && sourceObject != null) {
|
||||||
if (permanent.moveToExile(source.getSourceId(), sourceObject.getIdName(), source.getSourceId(), game)) {
|
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.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));
|
effect.setTargetPointer(new FixedTarget(source.getFirstTarget(), game));
|
||||||
game.addDelayedTriggeredAbility(new AtTheBeginOfNextEndStepDelayedTriggeredAbility(effect), source);
|
game.addDelayedTriggeredAbility(new AtTheBeginOfNextEndStepDelayedTriggeredAbility(effect), source);
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
|
|
||||||
package mage.cards.l;
|
package mage.cards.l;
|
||||||
|
|
||||||
import java.util.UUID;
|
|
||||||
import mage.abilities.Ability;
|
import mage.abilities.Ability;
|
||||||
import mage.abilities.common.DiesCreatureTriggeredAbility;
|
import mage.abilities.common.DiesCreatureTriggeredAbility;
|
||||||
import mage.abilities.common.delayed.AtTheBeginOfNextEndStepDelayedTriggeredAbility;
|
import mage.abilities.common.delayed.AtTheBeginOfNextEndStepDelayedTriggeredAbility;
|
||||||
|
@ -18,8 +16,9 @@ import mage.filter.StaticFilters;
|
||||||
import mage.game.Game;
|
import mage.game.Game;
|
||||||
import mage.target.targetpointer.FixedTarget;
|
import mage.target.targetpointer.FixedTarget;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* @author HCrescent
|
* @author HCrescent
|
||||||
*/
|
*/
|
||||||
public final class Lifeline extends CardImpl {
|
public final class Lifeline extends CardImpl {
|
||||||
|
@ -27,13 +26,13 @@ public final class Lifeline extends CardImpl {
|
||||||
|
|
||||||
public Lifeline(UUID ownerId, CardSetInfo setInfo) {
|
public Lifeline(UUID ownerId, CardSetInfo setInfo) {
|
||||||
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{5}");
|
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.
|
// 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(
|
Ability ability = new ConditionalInterveningIfTriggeredAbility(
|
||||||
new DiesCreatureTriggeredAbility( Zone.BATTLEFIELD, new LifelineEffect(), false, StaticFilters.FILTER_PERMANENT_CREATURE, true),
|
new DiesCreatureTriggeredAbility(Zone.BATTLEFIELD, new LifelineEffect(), false, StaticFilters.FILTER_PERMANENT_CREATURE, true),
|
||||||
new PermanentsOnTheBattlefieldCondition(StaticFilters.FILTER_PERMANENT_CREATURE, ComparisonType.MORE_THAN, 0, false),
|
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.");
|
"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);
|
this.addAbility(ability);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -46,27 +45,28 @@ public final class Lifeline extends CardImpl {
|
||||||
return new Lifeline(this);
|
return new Lifeline(this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class LifelineEffect extends OneShotEffect {
|
class LifelineEffect extends OneShotEffect {
|
||||||
|
|
||||||
public LifelineEffect() {
|
public LifelineEffect() {
|
||||||
super(Outcome.PutCardInPlay);
|
super(Outcome.PutCardInPlay);
|
||||||
this.staticText = "";
|
this.staticText = "";
|
||||||
}
|
}
|
||||||
|
|
||||||
public LifelineEffect(final LifelineEffect effect) {
|
public LifelineEffect(final LifelineEffect effect) {
|
||||||
super(effect);
|
super(effect);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public LifelineEffect copy() {
|
public LifelineEffect copy() {
|
||||||
return new LifelineEffect(this);
|
return new LifelineEffect(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean apply(Game game, Ability source) {
|
public boolean apply(Game game, Ability source) {
|
||||||
Card card = game.getCard(getTargetPointer().getFirst(game, source));
|
Card card = game.getCard(getTargetPointer().getFirst(game, source));
|
||||||
if (card != null) {
|
if (card != null) {
|
||||||
Effect effect = new ReturnToBattlefieldUnderOwnerControlTargetEffect();
|
Effect effect = new ReturnToBattlefieldUnderOwnerControlTargetEffect(false, false);
|
||||||
effect.setTargetPointer(new FixedTarget(card.getId(), card.getZoneChangeCounter(game)));
|
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");
|
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);
|
game.addDelayedTriggeredAbility(new AtTheBeginOfNextEndStepDelayedTriggeredAbility(Zone.BATTLEFIELD, effect, TargetController.ANY), source);
|
||||||
|
|
|
@ -1,11 +1,8 @@
|
||||||
|
|
||||||
package mage.cards.m;
|
package mage.cards.m;
|
||||||
|
|
||||||
import java.util.UUID;
|
|
||||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||||
import mage.abilities.effects.common.ExileTargetForSourceEffect;
|
import mage.abilities.effects.common.ExileTargetForSourceEffect;
|
||||||
import mage.abilities.effects.common.ReturnToBattlefieldUnderOwnerControlTargetEffect;
|
import mage.abilities.effects.common.ReturnToBattlefieldUnderOwnerControlTargetEffect;
|
||||||
import mage.abilities.effects.common.ReturnToBattlefieldUnderYourControlTargetEffect;
|
|
||||||
import mage.abilities.keyword.FlashbackAbility;
|
import mage.abilities.keyword.FlashbackAbility;
|
||||||
import mage.cards.CardImpl;
|
import mage.cards.CardImpl;
|
||||||
import mage.cards.CardSetInfo;
|
import mage.cards.CardSetInfo;
|
||||||
|
@ -13,18 +10,20 @@ import mage.constants.CardType;
|
||||||
import mage.constants.TimingRule;
|
import mage.constants.TimingRule;
|
||||||
import mage.target.common.TargetControlledCreaturePermanent;
|
import mage.target.common.TargetControlledCreaturePermanent;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author noxx
|
* @author noxx
|
||||||
*/
|
*/
|
||||||
public final class MomentaryBlink extends CardImpl {
|
public final class MomentaryBlink extends CardImpl {
|
||||||
|
|
||||||
public MomentaryBlink(UUID ownerId, CardSetInfo setInfo) {
|
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.
|
// Exile target creature you control, then return it to the battlefield under its owner's control.
|
||||||
this.getSpellAbility().addTarget(new TargetControlledCreaturePermanent());
|
this.getSpellAbility().addTarget(new TargetControlledCreaturePermanent());
|
||||||
this.getSpellAbility().addEffect(new ExileTargetForSourceEffect());
|
this.getSpellAbility().addEffect(new ExileTargetForSourceEffect());
|
||||||
this.getSpellAbility().addEffect(new ReturnToBattlefieldUnderOwnerControlTargetEffect());
|
this.getSpellAbility().addEffect(new ReturnToBattlefieldUnderOwnerControlTargetEffect(false, false));
|
||||||
|
|
||||||
// Flashback {3}{U}
|
// Flashback {3}{U}
|
||||||
this.addAbility(new FlashbackAbility(new ManaCostsImpl("{3}{U}"), TimingRule.INSTANT));
|
this.addAbility(new FlashbackAbility(new ManaCostsImpl("{3}{U}"), TimingRule.INSTANT));
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
|
|
||||||
package mage.cards.m;
|
package mage.cards.m;
|
||||||
|
|
||||||
import java.util.UUID;
|
|
||||||
import mage.MageObject;
|
import mage.MageObject;
|
||||||
import mage.abilities.Ability;
|
import mage.abilities.Ability;
|
||||||
import mage.abilities.common.SimpleActivatedAbility;
|
import mage.abilities.common.SimpleActivatedAbility;
|
||||||
|
@ -24,8 +22,9 @@ import mage.game.permanent.Permanent;
|
||||||
import mage.target.common.TargetCreaturePermanent;
|
import mage.target.common.TargetCreaturePermanent;
|
||||||
import mage.target.targetpointer.FixedTarget;
|
import mage.target.targetpointer.FixedTarget;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* @author BetaSteward_at_googlemail.com
|
* @author BetaSteward_at_googlemail.com
|
||||||
*/
|
*/
|
||||||
public final class MystifyingMaze extends CardImpl {
|
public final class MystifyingMaze extends CardImpl {
|
||||||
|
@ -77,7 +76,7 @@ class MystifyingMazeEffect extends OneShotEffect {
|
||||||
if (permanent != null && sourceObject != null) {
|
if (permanent != null && sourceObject != null) {
|
||||||
if (permanent.moveToExile(source.getSourceId(), sourceObject.getIdName(), source.getSourceId(), game)) {
|
if (permanent.moveToExile(source.getSourceId(), sourceObject.getIdName(), source.getSourceId(), game)) {
|
||||||
//create delayed triggered ability
|
//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.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));
|
effect.setTargetPointer(new FixedTarget(source.getFirstTarget(), game));
|
||||||
game.addDelayedTriggeredAbility(new AtTheBeginOfNextEndStepDelayedTriggeredAbility(effect), source);
|
game.addDelayedTriggeredAbility(new AtTheBeginOfNextEndStepDelayedTriggeredAbility(effect), source);
|
||||||
|
|
|
@ -43,7 +43,7 @@ public final class N1Starfighter extends CardImpl {
|
||||||
// P.S. original card have error with missing target word (another target creature)
|
// P.S. original card have error with missing target word (another target creature)
|
||||||
Ability ability = new DealsCombatDamageToAPlayerTriggeredAbility(new DoIfCostPaid(
|
Ability ability = new DealsCombatDamageToAPlayerTriggeredAbility(new DoIfCostPaid(
|
||||||
new ExileTargetForSourceEffect(), new ManaCostsImpl("{1}{W/U}")), false);
|
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));
|
ability.addTarget(new TargetControlledCreaturePermanent(filter));
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
|
|
||||||
package mage.cards.n;
|
package mage.cards.n;
|
||||||
|
|
||||||
import java.util.UUID;
|
|
||||||
import mage.MageInt;
|
import mage.MageInt;
|
||||||
import mage.abilities.Ability;
|
import mage.abilities.Ability;
|
||||||
import mage.abilities.common.SimpleActivatedAbility;
|
import mage.abilities.common.SimpleActivatedAbility;
|
||||||
|
@ -18,18 +16,21 @@ import mage.filter.common.FilterControlledCreaturePermanent;
|
||||||
import mage.filter.predicate.permanent.AnotherPredicate;
|
import mage.filter.predicate.permanent.AnotherPredicate;
|
||||||
import mage.target.common.TargetControlledCreaturePermanent;
|
import mage.target.common.TargetControlledCreaturePermanent;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author noxx
|
* @author noxx
|
||||||
*/
|
*/
|
||||||
public final class NephaliaSmuggler extends CardImpl {
|
public final class NephaliaSmuggler extends CardImpl {
|
||||||
|
|
||||||
private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("another target creature you control");
|
private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("another target creature you control");
|
||||||
|
|
||||||
static {
|
static {
|
||||||
filter.add(AnotherPredicate.instance);
|
filter.add(AnotherPredicate.instance);
|
||||||
}
|
}
|
||||||
|
|
||||||
public NephaliaSmuggler(UUID ownerId, CardSetInfo setInfo) {
|
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.HUMAN);
|
||||||
this.subtype.add(SubType.ROGUE);
|
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.
|
// {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 ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new ExileTargetForSourceEffect(), new ManaCostsImpl("{3}{U}"));
|
||||||
ability.addCost(new TapSourceCost());
|
ability.addCost(new TapSourceCost());
|
||||||
ability.addEffect(new ReturnToBattlefieldUnderYourControlTargetEffect(true));
|
ability.addEffect(new ReturnToBattlefieldUnderYourControlTargetEffect(false));
|
||||||
ability.addTarget(new TargetControlledCreaturePermanent(filter));
|
ability.addTarget(new TargetControlledCreaturePermanent(filter));
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
|
|
||||||
package mage.cards.o;
|
package mage.cards.o;
|
||||||
|
|
||||||
import java.util.UUID;
|
|
||||||
import mage.abilities.Ability;
|
import mage.abilities.Ability;
|
||||||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||||
import mage.abilities.common.SimpleStaticAbility;
|
import mage.abilities.common.SimpleStaticAbility;
|
||||||
|
@ -10,15 +8,9 @@ import mage.abilities.effects.ContinuousEffectImpl;
|
||||||
import mage.abilities.effects.Effect;
|
import mage.abilities.effects.Effect;
|
||||||
import mage.abilities.effects.OneShotEffect;
|
import mage.abilities.effects.OneShotEffect;
|
||||||
import mage.abilities.effects.common.ReturnToBattlefieldUnderOwnerControlTargetEffect;
|
import mage.abilities.effects.common.ReturnToBattlefieldUnderOwnerControlTargetEffect;
|
||||||
import mage.constants.SuperType;
|
|
||||||
import mage.cards.CardImpl;
|
import mage.cards.CardImpl;
|
||||||
import mage.cards.CardSetInfo;
|
import mage.cards.CardSetInfo;
|
||||||
import mage.constants.CardType;
|
import mage.constants.*;
|
||||||
import mage.constants.Duration;
|
|
||||||
import mage.constants.Layer;
|
|
||||||
import mage.constants.Outcome;
|
|
||||||
import mage.constants.SubLayer;
|
|
||||||
import mage.constants.Zone;
|
|
||||||
import mage.filter.common.FilterControlledPermanent;
|
import mage.filter.common.FilterControlledPermanent;
|
||||||
import mage.filter.predicate.permanent.AnotherPredicate;
|
import mage.filter.predicate.permanent.AnotherPredicate;
|
||||||
import mage.game.Game;
|
import mage.game.Game;
|
||||||
|
@ -27,8 +19,9 @@ import mage.players.Player;
|
||||||
import mage.target.TargetPermanent;
|
import mage.target.TargetPermanent;
|
||||||
import mage.target.targetpointer.FixedTarget;
|
import mage.target.targetpointer.FixedTarget;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* @author TheElk801
|
* @author TheElk801
|
||||||
*/
|
*/
|
||||||
public final class OathOfTeferi extends CardImpl {
|
public final class OathOfTeferi extends CardImpl {
|
||||||
|
@ -85,7 +78,7 @@ class OathOfTeferiBlinkEffect extends OneShotEffect {
|
||||||
int zcc = permanent.getZoneChangeCounter(game);
|
int zcc = permanent.getZoneChangeCounter(game);
|
||||||
controller.moveCards(permanent, Zone.EXILED, source, game);
|
controller.moveCards(permanent, Zone.EXILED, source, game);
|
||||||
//create delayed triggered ability
|
//create delayed triggered ability
|
||||||
Effect effect = new ReturnToBattlefieldUnderOwnerControlTargetEffect();
|
Effect effect = new ReturnToBattlefieldUnderOwnerControlTargetEffect(false, false);
|
||||||
effect.setTargetPointer(new FixedTarget(permanent.getId(), zcc + 1));
|
effect.setTargetPointer(new FixedTarget(permanent.getId(), zcc + 1));
|
||||||
AtTheBeginOfNextEndStepDelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(effect);
|
AtTheBeginOfNextEndStepDelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(effect);
|
||||||
game.addDelayedTriggeredAbility(delayedAbility, source);
|
game.addDelayedTriggeredAbility(delayedAbility, source);
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
package mage.cards.p;
|
package mage.cards.p;
|
||||||
|
|
||||||
import java.util.UUID;
|
|
||||||
import mage.abilities.Ability;
|
import mage.abilities.Ability;
|
||||||
import mage.abilities.DelayedTriggeredAbility;
|
import mage.abilities.DelayedTriggeredAbility;
|
||||||
import mage.abilities.TriggeredAbility;
|
import mage.abilities.TriggeredAbility;
|
||||||
|
@ -13,11 +12,7 @@ import mage.abilities.effects.OneShotEffect;
|
||||||
import mage.abilities.effects.common.ReturnToBattlefieldUnderOwnerControlTargetEffect;
|
import mage.abilities.effects.common.ReturnToBattlefieldUnderOwnerControlTargetEffect;
|
||||||
import mage.cards.CardImpl;
|
import mage.cards.CardImpl;
|
||||||
import mage.cards.CardSetInfo;
|
import mage.cards.CardSetInfo;
|
||||||
import mage.constants.CardType;
|
import mage.constants.*;
|
||||||
import mage.constants.Duration;
|
|
||||||
import mage.constants.Outcome;
|
|
||||||
import mage.constants.SetTargetPointer;
|
|
||||||
import mage.constants.Zone;
|
|
||||||
import mage.filter.common.FilterCreaturePermanent;
|
import mage.filter.common.FilterCreaturePermanent;
|
||||||
import mage.game.Game;
|
import mage.game.Game;
|
||||||
import mage.game.events.GameEvent;
|
import mage.game.events.GameEvent;
|
||||||
|
@ -28,8 +23,9 @@ import mage.players.Player;
|
||||||
import mage.target.targetpointer.FixedTarget;
|
import mage.target.targetpointer.FixedTarget;
|
||||||
import mage.util.CardUtil;
|
import mage.util.CardUtil;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* @author spjspj
|
* @author spjspj
|
||||||
*/
|
*/
|
||||||
public final class Portcullis extends CardImpl {
|
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.
|
// 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 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.";
|
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);
|
filter, false, SetTargetPointer.PERMANENT, rule);
|
||||||
MoreThanXCreaturesOnBFCondition condition = new MoreThanXCreaturesOnBFCondition(2);
|
MoreThanXCreaturesOnBFCondition condition = new MoreThanXCreaturesOnBFCondition(2);
|
||||||
this.addAbility(new ConditionalInterveningIfTriggeredAbility(ability, condition, rule + rule2));
|
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));
|
UUID exileZoneId = CardUtil.getExileZoneId(game, creatureToExile.getId(), creatureToExile.getZoneChangeCounter(game));
|
||||||
controller.moveCardsToExile(creatureToExile, source, game, true, exileZoneId, portcullis.getName());
|
controller.moveCardsToExile(creatureToExile, source, game, true, exileZoneId, portcullis.getName());
|
||||||
FixedTarget fixedTarget = new FixedTarget(portcullis, game);
|
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())));
|
returnEffect.setTargetPointer(new FixedTarget(creatureToExile.getId(), game.getState().getZoneChangeCounter(creatureToExile.getId())));
|
||||||
DelayedTriggeredAbility delayedAbility = new PortcullisReturnToBattlefieldTriggeredAbility(fixedTarget, returnEffect);
|
DelayedTriggeredAbility delayedAbility = new PortcullisReturnToBattlefieldTriggeredAbility(fixedTarget, returnEffect);
|
||||||
game.addDelayedTriggeredAbility(delayedAbility, source);
|
game.addDelayedTriggeredAbility(delayedAbility, source);
|
||||||
|
|
|
@ -74,7 +74,7 @@ class RangeTrooperEffect extends OneShotEffect {
|
||||||
MageObject sourceObject = game.getObject(source.getSourceId());
|
MageObject sourceObject = game.getObject(source.getSourceId());
|
||||||
if (permanent != null && sourceObject != null) {
|
if (permanent != null && sourceObject != null) {
|
||||||
if (permanent.moveToExile(source.getSourceId(), sourceObject.getIdName(), source.getSourceId(), game)) {
|
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.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));
|
effect.setTargetPointer(new FixedTarget(source.getFirstTarget(), game));
|
||||||
game.addDelayedTriggeredAbility(new AtTheBeginOfNextEndStepDelayedTriggeredAbility(effect), source);
|
game.addDelayedTriggeredAbility(new AtTheBeginOfNextEndStepDelayedTriggeredAbility(effect), source);
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
|
|
||||||
package mage.cards.r;
|
package mage.cards.r;
|
||||||
|
|
||||||
import java.util.UUID;
|
|
||||||
import mage.MageInt;
|
import mage.MageInt;
|
||||||
import mage.MageObject;
|
import mage.MageObject;
|
||||||
import mage.abilities.Ability;
|
import mage.abilities.Ability;
|
||||||
|
@ -16,11 +14,7 @@ import mage.abilities.keyword.TrampleAbility;
|
||||||
import mage.abilities.keyword.VigilanceAbility;
|
import mage.abilities.keyword.VigilanceAbility;
|
||||||
import mage.cards.CardImpl;
|
import mage.cards.CardImpl;
|
||||||
import mage.cards.CardSetInfo;
|
import mage.cards.CardSetInfo;
|
||||||
import mage.constants.CardType;
|
import mage.constants.*;
|
||||||
import mage.constants.SubType;
|
|
||||||
import mage.constants.Outcome;
|
|
||||||
import mage.constants.SuperType;
|
|
||||||
import mage.constants.Zone;
|
|
||||||
import mage.filter.common.FilterCreaturePermanent;
|
import mage.filter.common.FilterCreaturePermanent;
|
||||||
import mage.filter.predicate.permanent.AnotherPredicate;
|
import mage.filter.predicate.permanent.AnotherPredicate;
|
||||||
import mage.game.Game;
|
import mage.game.Game;
|
||||||
|
@ -29,8 +23,9 @@ import mage.players.Player;
|
||||||
import mage.target.common.TargetCreaturePermanent;
|
import mage.target.common.TargetCreaturePermanent;
|
||||||
import mage.target.targetpointer.FixedTarget;
|
import mage.target.targetpointer.FixedTarget;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* @author LevelX2
|
* @author LevelX2
|
||||||
*/
|
*/
|
||||||
public final class RoonOfTheHiddenRealm extends CardImpl {
|
public final class RoonOfTheHiddenRealm extends CardImpl {
|
||||||
|
@ -42,7 +37,7 @@ public final class RoonOfTheHiddenRealm extends CardImpl {
|
||||||
}
|
}
|
||||||
|
|
||||||
public RoonOfTheHiddenRealm(UUID ownerId, CardSetInfo setInfo) {
|
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);
|
addSuperType(SuperType.LEGENDARY);
|
||||||
this.subtype.add(SubType.RHINO);
|
this.subtype.add(SubType.RHINO);
|
||||||
this.subtype.add(SubType.SOLDIER);
|
this.subtype.add(SubType.SOLDIER);
|
||||||
|
@ -98,7 +93,7 @@ class RoonOfTheHiddenRealmEffect extends OneShotEffect {
|
||||||
if (permanent != null) {
|
if (permanent != null) {
|
||||||
int zcc = permanent.getZoneChangeCounter(game);
|
int zcc = permanent.getZoneChangeCounter(game);
|
||||||
if (controller.moveCards(permanent, Zone.EXILED, source, 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));
|
effect.setTargetPointer(new FixedTarget(permanent.getId(), zcc + 1));
|
||||||
AtTheBeginOfNextEndStepDelayedTriggeredAbility delayedAbility
|
AtTheBeginOfNextEndStepDelayedTriggeredAbility delayedAbility
|
||||||
= new AtTheBeginOfNextEndStepDelayedTriggeredAbility(effect);
|
= new AtTheBeginOfNextEndStepDelayedTriggeredAbility(effect);
|
||||||
|
|
|
@ -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.
|
// {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 ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new ExileTargetForSourceEffect(), new ManaCostsImpl("{W"));
|
||||||
ability.addCost(new TapSourceCost());
|
ability.addCost(new TapSourceCost());
|
||||||
ability.addEffect(new ReturnToBattlefieldUnderYourControlTargetEffect(true));
|
ability.addEffect(new ReturnToBattlefieldUnderYourControlTargetEffect(false));
|
||||||
ability.addTarget(new TargetPermanent(new FilterControlledLandPermanent()));
|
ability.addTarget(new TargetPermanent(new FilterControlledLandPermanent()));
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
|
|
||||||
package mage.cards.s;
|
package mage.cards.s;
|
||||||
|
|
||||||
import java.util.UUID;
|
|
||||||
import mage.MageInt;
|
import mage.MageInt;
|
||||||
import mage.abilities.Ability;
|
import mage.abilities.Ability;
|
||||||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||||
|
@ -24,8 +22,9 @@ import mage.players.Player;
|
||||||
import mage.target.TargetPermanent;
|
import mage.target.TargetPermanent;
|
||||||
import mage.target.targetpointer.FixedTarget;
|
import mage.target.targetpointer.FixedTarget;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* @author TheElk801
|
* @author TheElk801
|
||||||
*/
|
*/
|
||||||
public final class SentinelOfThePearlTrident extends CardImpl {
|
public final class SentinelOfThePearlTrident extends CardImpl {
|
||||||
|
@ -87,7 +86,7 @@ class SentinelOfThePearlTridentEffect extends OneShotEffect {
|
||||||
int zcc = permanent.getZoneChangeCounter(game);
|
int zcc = permanent.getZoneChangeCounter(game);
|
||||||
controller.moveCards(permanent, Zone.EXILED, source, game);
|
controller.moveCards(permanent, Zone.EXILED, source, game);
|
||||||
//create delayed triggered ability
|
//create delayed triggered ability
|
||||||
Effect effect = new ReturnToBattlefieldUnderOwnerControlTargetEffect();
|
Effect effect = new ReturnToBattlefieldUnderOwnerControlTargetEffect(false, false);
|
||||||
effect.setTargetPointer(new FixedTarget(permanent.getId(), zcc + 1));
|
effect.setTargetPointer(new FixedTarget(permanent.getId(), zcc + 1));
|
||||||
AtTheBeginOfNextEndStepDelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(effect);
|
AtTheBeginOfNextEndStepDelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(effect);
|
||||||
game.addDelayedTriggeredAbility(delayedAbility, source);
|
game.addDelayedTriggeredAbility(delayedAbility, source);
|
||||||
|
|
|
@ -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.
|
// • Exile target creature you control, then return it to the battlefield under its owner's control.
|
||||||
Mode mode = new Mode(new ExileTargetForSourceEffect());
|
Mode mode = new Mode(new ExileTargetForSourceEffect());
|
||||||
mode.addEffect(new ReturnToBattlefieldUnderOwnerControlTargetEffect());
|
mode.addEffect(new ReturnToBattlefieldUnderOwnerControlTargetEffect(false, false));
|
||||||
mode.addTarget(new TargetControlledCreaturePermanent());
|
mode.addTarget(new TargetControlledCreaturePermanent());
|
||||||
this.getSpellAbility().addMode(mode);
|
this.getSpellAbility().addMode(mode);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
|
|
||||||
package mage.cards.s;
|
package mage.cards.s;
|
||||||
|
|
||||||
import mage.abilities.Ability;
|
import mage.abilities.Ability;
|
||||||
|
@ -16,7 +15,6 @@ import mage.target.common.TargetControlledCreaturePermanent;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* @author TheElk801
|
* @author TheElk801
|
||||||
*/
|
*/
|
||||||
public final class SirensRuse extends CardImpl {
|
public final class SirensRuse extends CardImpl {
|
||||||
|
@ -64,7 +62,7 @@ class SirensRuseEffect extends ExileTargetForSourceEffect {
|
||||||
isPirate = true;
|
isPirate = true;
|
||||||
}
|
}
|
||||||
if (super.apply(game, source)) {
|
if (super.apply(game, source)) {
|
||||||
new ReturnToBattlefieldUnderYourControlTargetEffect(true).apply(game, source);
|
new ReturnToBattlefieldUnderYourControlTargetEffect(false).apply(game, source);
|
||||||
if (isPirate && player != null) {
|
if (isPirate && player != null) {
|
||||||
player.drawCards(1, source.getSourceId(), game);
|
player.drawCards(1, source.getSourceId(), game);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
|
|
||||||
package mage.cards.s;
|
package mage.cards.s;
|
||||||
|
|
||||||
import java.util.UUID;
|
|
||||||
import mage.abilities.Ability;
|
import mage.abilities.Ability;
|
||||||
import mage.abilities.abilityword.ConstellationAbility;
|
import mage.abilities.abilityword.ConstellationAbility;
|
||||||
import mage.abilities.common.delayed.AtTheBeginOfNextEndStepDelayedTriggeredAbility;
|
import mage.abilities.common.delayed.AtTheBeginOfNextEndStepDelayedTriggeredAbility;
|
||||||
|
@ -19,8 +17,9 @@ import mage.game.permanent.Permanent;
|
||||||
import mage.target.TargetPermanent;
|
import mage.target.TargetPermanent;
|
||||||
import mage.target.targetpointer.FixedTarget;
|
import mage.target.targetpointer.FixedTarget;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* @author LevelX2
|
* @author LevelX2
|
||||||
*/
|
*/
|
||||||
public final class Skybind extends CardImpl {
|
public final class Skybind extends CardImpl {
|
||||||
|
@ -68,7 +67,7 @@ class SkybindEffect extends OneShotEffect {
|
||||||
if (permanent != null && sourcePermanent != null) {
|
if (permanent != null && sourcePermanent != null) {
|
||||||
if (permanent.moveToExile(source.getSourceId(), sourcePermanent.getName(), source.getSourceId(), game)) {
|
if (permanent.moveToExile(source.getSourceId(), sourcePermanent.getName(), source.getSourceId(), game)) {
|
||||||
//create delayed triggered ability
|
//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.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));
|
effect.setTargetPointer(new FixedTarget(getTargetPointer().getFirst(game, source), game));
|
||||||
game.addDelayedTriggeredAbility(new AtTheBeginOfNextEndStepDelayedTriggeredAbility(effect), source);
|
game.addDelayedTriggeredAbility(new AtTheBeginOfNextEndStepDelayedTriggeredAbility(effect), source);
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
|
|
||||||
package mage.cards.s;
|
package mage.cards.s;
|
||||||
|
|
||||||
import java.util.UUID;
|
|
||||||
import mage.MageInt;
|
import mage.MageInt;
|
||||||
import mage.abilities.common.DealtDamageAndDiedTriggeredAbility;
|
import mage.abilities.common.DealtDamageAndDiedTriggeredAbility;
|
||||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||||
|
@ -13,22 +11,25 @@ import mage.cards.CardSetInfo;
|
||||||
import mage.constants.CardType;
|
import mage.constants.CardType;
|
||||||
import mage.constants.SubType;
|
import mage.constants.SubType;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* @author markedagain
|
* @author markedagain
|
||||||
*/
|
*/
|
||||||
public final class SoulCollector extends CardImpl {
|
public final class SoulCollector extends CardImpl {
|
||||||
|
|
||||||
public SoulCollector(UUID ownerId, CardSetInfo setInfo) {
|
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.subtype.add(SubType.VAMPIRE);
|
||||||
this.power = new MageInt(3);
|
this.power = new MageInt(3);
|
||||||
this.toughness = new MageInt(4);
|
this.toughness = new MageInt(4);
|
||||||
|
|
||||||
// Flying
|
// Flying
|
||||||
this.addAbility(FlyingAbility.getInstance());
|
this.addAbility(FlyingAbility.getInstance());
|
||||||
|
|
||||||
// Whenever a creature dealt damage by Soul Collector this turn dies, return that card to the battlefield under your control.
|
// 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}
|
// Morph {B}{B}{B}
|
||||||
this.addAbility(new MorphAbility(this, new ManaCostsImpl("{B}{B}{B}")));
|
this.addAbility(new MorphAbility(this, new ManaCostsImpl("{B}{B}{B}")));
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
package mage.cards.s;
|
package mage.cards.s;
|
||||||
|
|
||||||
import java.util.UUID;
|
|
||||||
import mage.MageInt;
|
import mage.MageInt;
|
||||||
import mage.abilities.Ability;
|
import mage.abilities.Ability;
|
||||||
import mage.abilities.common.BeginningOfEndStepTriggeredAbility;
|
import mage.abilities.common.BeginningOfEndStepTriggeredAbility;
|
||||||
|
@ -23,6 +22,8 @@ import mage.game.events.ZoneChangeEvent;
|
||||||
import mage.game.permanent.Permanent;
|
import mage.game.permanent.Permanent;
|
||||||
import mage.target.common.TargetControlledCreaturePermanent;
|
import mage.target.common.TargetControlledCreaturePermanent;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author TheElk801
|
* @author TheElk801
|
||||||
*/
|
*/
|
||||||
|
@ -49,7 +50,7 @@ public final class Soulherder extends CardImpl {
|
||||||
Ability ability = new BeginningOfEndStepTriggeredAbility(
|
Ability ability = new BeginningOfEndStepTriggeredAbility(
|
||||||
new ExileTargetForSourceEffect(), TargetController.YOU, true
|
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));
|
ability.addTarget(new TargetControlledCreaturePermanent(filter));
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,20 +1,12 @@
|
||||||
|
|
||||||
package mage.cards.s;
|
package mage.cards.s;
|
||||||
|
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.Set;
|
|
||||||
import java.util.UUID;
|
|
||||||
import mage.MageObject;
|
import mage.MageObject;
|
||||||
import mage.abilities.Ability;
|
import mage.abilities.Ability;
|
||||||
import mage.abilities.common.delayed.AtTheBeginOfNextEndStepDelayedTriggeredAbility;
|
import mage.abilities.common.delayed.AtTheBeginOfNextEndStepDelayedTriggeredAbility;
|
||||||
import mage.abilities.effects.Effect;
|
import mage.abilities.effects.Effect;
|
||||||
import mage.abilities.effects.OneShotEffect;
|
import mage.abilities.effects.OneShotEffect;
|
||||||
import mage.abilities.effects.common.ReturnToBattlefieldUnderOwnerControlTargetEffect;
|
import mage.abilities.effects.common.ReturnToBattlefieldUnderOwnerControlTargetEffect;
|
||||||
import mage.cards.Card;
|
import mage.cards.*;
|
||||||
import mage.cards.CardImpl;
|
|
||||||
import mage.cards.CardSetInfo;
|
|
||||||
import mage.cards.Cards;
|
|
||||||
import mage.cards.CardsImpl;
|
|
||||||
import mage.constants.CardType;
|
import mage.constants.CardType;
|
||||||
import mage.constants.Outcome;
|
import mage.constants.Outcome;
|
||||||
import mage.filter.common.FilterNonlandPermanent;
|
import mage.filter.common.FilterNonlandPermanent;
|
||||||
|
@ -23,8 +15,11 @@ import mage.players.Player;
|
||||||
import mage.target.TargetPlayer;
|
import mage.target.TargetPlayer;
|
||||||
import mage.target.targetpointer.FixedTargets;
|
import mage.target.targetpointer.FixedTargets;
|
||||||
|
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* @author BetaSteward
|
* @author BetaSteward
|
||||||
*/
|
*/
|
||||||
public final class SuddenDisappearance extends CardImpl {
|
public final class SuddenDisappearance extends CardImpl {
|
||||||
|
@ -73,7 +68,7 @@ class SuddenDisappearanceEffect extends OneShotEffect {
|
||||||
for (Card card : permsSet) {
|
for (Card card : permsSet) {
|
||||||
targets.add(card.getId());
|
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.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));
|
effect.setTargetPointer(new FixedTargets(targets, game));
|
||||||
game.addDelayedTriggeredAbility(new AtTheBeginOfNextEndStepDelayedTriggeredAbility(effect), source);
|
game.addDelayedTriggeredAbility(new AtTheBeginOfNextEndStepDelayedTriggeredAbility(effect), source);
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
|
|
||||||
package mage.cards.t;
|
package mage.cards.t;
|
||||||
|
|
||||||
import java.util.UUID;
|
|
||||||
import mage.abilities.Ability;
|
import mage.abilities.Ability;
|
||||||
import mage.abilities.DelayedTriggeredAbility;
|
import mage.abilities.DelayedTriggeredAbility;
|
||||||
import mage.abilities.common.SimpleActivatedAbility;
|
import mage.abilities.common.SimpleActivatedAbility;
|
||||||
|
@ -25,8 +23,9 @@ import mage.game.permanent.Permanent;
|
||||||
import mage.game.permanent.token.TatsumaDragonToken;
|
import mage.game.permanent.token.TatsumaDragonToken;
|
||||||
import mage.target.targetpointer.FixedTarget;
|
import mage.target.targetpointer.FixedTarget;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* @author LevelX2
|
* @author LevelX2
|
||||||
*/
|
*/
|
||||||
public final class TatsumasaTheDragonsFang extends CardImpl {
|
public final class TatsumasaTheDragonsFang extends CardImpl {
|
||||||
|
@ -82,7 +81,7 @@ class TatsumaTheDragonsFangEffect extends OneShotEffect {
|
||||||
Permanent tokenPermanent = game.getPermanent(tokenId);
|
Permanent tokenPermanent = game.getPermanent(tokenId);
|
||||||
if (tokenPermanent != null) {
|
if (tokenPermanent != null) {
|
||||||
FixedTarget fixedTarget = new FixedTarget(tokenPermanent, game);
|
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())));
|
returnEffect.setTargetPointer(new FixedTarget(source.getSourceId(), game.getState().getZoneChangeCounter(source.getSourceId())));
|
||||||
DelayedTriggeredAbility delayedAbility = new TatsumaTheDragonsFangTriggeredAbility(fixedTarget, returnEffect);
|
DelayedTriggeredAbility delayedAbility = new TatsumaTheDragonsFangTriggeredAbility(fixedTarget, returnEffect);
|
||||||
game.addDelayedTriggeredAbility(delayedAbility, source);
|
game.addDelayedTriggeredAbility(delayedAbility, source);
|
||||||
|
|
|
@ -59,7 +59,7 @@ public final class ThassaDeepDwelling extends CardImpl {
|
||||||
new ExileTargetForSourceEffect(),
|
new ExileTargetForSourceEffect(),
|
||||||
TargetController.YOU, false
|
TargetController.YOU, false
|
||||||
);
|
);
|
||||||
ability.addEffect(new ReturnToBattlefieldUnderYourControlTargetEffect(true).concatBy(", then"));
|
ability.addEffect(new ReturnToBattlefieldUnderYourControlTargetEffect().concatBy(", then"));
|
||||||
ability.addTarget(new TargetPermanent(
|
ability.addTarget(new TargetPermanent(
|
||||||
0, 1, filterOther, false
|
0, 1, filterOther, false
|
||||||
));
|
));
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
|
|
||||||
package mage.cards.t;
|
package mage.cards.t;
|
||||||
|
|
||||||
import java.util.UUID;
|
|
||||||
import mage.MageInt;
|
import mage.MageInt;
|
||||||
import mage.abilities.Ability;
|
import mage.abilities.Ability;
|
||||||
import mage.abilities.common.SimpleActivatedAbility;
|
import mage.abilities.common.SimpleActivatedAbility;
|
||||||
|
@ -14,11 +12,7 @@ import mage.abilities.effects.common.ReturnToBattlefieldUnderOwnerControlTargetE
|
||||||
import mage.abilities.effects.common.counter.AddCountersTargetEffect;
|
import mage.abilities.effects.common.counter.AddCountersTargetEffect;
|
||||||
import mage.cards.CardImpl;
|
import mage.cards.CardImpl;
|
||||||
import mage.cards.CardSetInfo;
|
import mage.cards.CardSetInfo;
|
||||||
import mage.constants.CardType;
|
import mage.constants.*;
|
||||||
import mage.constants.SubType;
|
|
||||||
import mage.constants.Outcome;
|
|
||||||
import mage.constants.SuperType;
|
|
||||||
import mage.constants.Zone;
|
|
||||||
import mage.counters.CounterType;
|
import mage.counters.CounterType;
|
||||||
import mage.filter.common.FilterCreaturePermanent;
|
import mage.filter.common.FilterCreaturePermanent;
|
||||||
import mage.filter.predicate.permanent.AnotherPredicate;
|
import mage.filter.predicate.permanent.AnotherPredicate;
|
||||||
|
@ -29,8 +23,9 @@ import mage.players.Player;
|
||||||
import mage.target.Target;
|
import mage.target.Target;
|
||||||
import mage.target.common.TargetCreaturePermanent;
|
import mage.target.common.TargetCreaturePermanent;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* @author LevelX2
|
* @author LevelX2
|
||||||
*/
|
*/
|
||||||
public final class TriadOfFates extends CardImpl {
|
public final class TriadOfFates extends CardImpl {
|
||||||
|
@ -44,7 +39,7 @@ public final class TriadOfFates extends CardImpl {
|
||||||
}
|
}
|
||||||
|
|
||||||
public TriadOfFates(UUID ownerId, CardSetInfo setInfo) {
|
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);
|
addSuperType(SuperType.LEGENDARY);
|
||||||
this.subtype.add(SubType.HUMAN);
|
this.subtype.add(SubType.HUMAN);
|
||||||
this.subtype.add(SubType.WIZARD);
|
this.subtype.add(SubType.WIZARD);
|
||||||
|
@ -64,7 +59,7 @@ public final class TriadOfFates extends CardImpl {
|
||||||
ability.addCost(new TapSourceCost());
|
ability.addCost(new TapSourceCost());
|
||||||
target = new TargetCreaturePermanent(filterCounter);
|
target = new TargetCreaturePermanent(filterCounter);
|
||||||
ability.addTarget(target);
|
ability.addTarget(target);
|
||||||
ability.addEffect(new ReturnToBattlefieldUnderOwnerControlTargetEffect());
|
ability.addEffect(new ReturnToBattlefieldUnderOwnerControlTargetEffect(false, false));
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
|
|
||||||
// {B}, {T}: Exile target creature that has a fate counter on it. Its controller draws two cards.
|
// {B}, {T}: Exile target creature that has a fate counter on it. Its controller draws two cards.
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
|
|
||||||
package mage.cards.v;
|
package mage.cards.v;
|
||||||
|
|
||||||
import mage.MageInt;
|
import mage.MageInt;
|
||||||
|
@ -89,7 +88,7 @@ class VizierOfDefermentEffect extends OneShotEffect {
|
||||||
&& attackedOrBlocked
|
&& attackedOrBlocked
|
||||||
&& sourcePermanent != null) {
|
&& sourcePermanent != null) {
|
||||||
if (controller.moveCardToExileWithInfo(permanent, source.getSourceId(), sourcePermanent.getIdName(), source.getSourceId(), game, Zone.BATTLEFIELD, true)) {
|
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.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));
|
effect.setTargetPointer(new FixedTarget(source.getFirstTarget(), game));
|
||||||
game.addDelayedTriggeredAbility(new AtTheBeginOfNextEndStepDelayedTriggeredAbility(effect), source);
|
game.addDelayedTriggeredAbility(new AtTheBeginOfNextEndStepDelayedTriggeredAbility(effect), source);
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
|
|
||||||
package mage.cards.v;
|
package mage.cards.v;
|
||||||
|
|
||||||
import java.util.UUID;
|
|
||||||
import mage.MageObject;
|
import mage.MageObject;
|
||||||
import mage.abilities.Ability;
|
import mage.abilities.Ability;
|
||||||
import mage.abilities.common.delayed.AtTheBeginOfNextEndStepDelayedTriggeredAbility;
|
import mage.abilities.common.delayed.AtTheBeginOfNextEndStepDelayedTriggeredAbility;
|
||||||
|
@ -20,8 +18,9 @@ import mage.players.Player;
|
||||||
import mage.target.common.TargetCreaturePermanent;
|
import mage.target.common.TargetCreaturePermanent;
|
||||||
import mage.target.targetpointer.FixedTarget;
|
import mage.target.targetpointer.FixedTarget;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* @author jeffwadsworth
|
* @author jeffwadsworth
|
||||||
*/
|
*/
|
||||||
public final class Voidwalk extends CardImpl {
|
public final class Voidwalk extends CardImpl {
|
||||||
|
@ -66,7 +65,7 @@ class VoidwalkEffect extends OneShotEffect {
|
||||||
if (controller != null && permanent != null && sourceObject != null) {
|
if (controller != null && permanent != null && sourceObject != null) {
|
||||||
if (controller.moveCardToExileWithInfo(permanent, source.getSourceId(), sourceObject.getIdName(), source.getSourceId(), game, Zone.BATTLEFIELD, true)) {
|
if (controller.moveCardToExileWithInfo(permanent, source.getSourceId(), sourceObject.getIdName(), source.getSourceId(), game, Zone.BATTLEFIELD, true)) {
|
||||||
//create delayed triggered ability
|
//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.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));
|
effect.setTargetPointer(new FixedTarget(source.getFirstTarget(), game));
|
||||||
game.addDelayedTriggeredAbility(new AtTheBeginOfNextEndStepDelayedTriggeredAbility(effect), source);
|
game.addDelayedTriggeredAbility(new AtTheBeginOfNextEndStepDelayedTriggeredAbility(effect), source);
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
|
|
||||||
package mage.cards.v;
|
package mage.cards.v;
|
||||||
|
|
||||||
import java.util.UUID;
|
|
||||||
import mage.abilities.Ability;
|
import mage.abilities.Ability;
|
||||||
import mage.abilities.common.SimpleActivatedAbility;
|
import mage.abilities.common.SimpleActivatedAbility;
|
||||||
import mage.abilities.common.delayed.AtTheBeginOfNextEndStepDelayedTriggeredAbility;
|
import mage.abilities.common.delayed.AtTheBeginOfNextEndStepDelayedTriggeredAbility;
|
||||||
|
@ -21,8 +19,9 @@ import mage.players.Player;
|
||||||
import mage.target.common.TargetCreaturePermanent;
|
import mage.target.common.TargetCreaturePermanent;
|
||||||
import mage.target.targetpointer.FixedTarget;
|
import mage.target.targetpointer.FixedTarget;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* @author fireshoes
|
* @author fireshoes
|
||||||
*/
|
*/
|
||||||
public final class VoyagerStaff extends CardImpl {
|
public final class VoyagerStaff extends CardImpl {
|
||||||
|
@ -66,7 +65,7 @@ class VoyagerStaffEffect extends OneShotEffect {
|
||||||
if (controller != null && creature != null && sourcePermanent != null) {
|
if (controller != null && creature != null && sourcePermanent != null) {
|
||||||
if (controller.moveCardToExileWithInfo(creature, source.getSourceId(), sourcePermanent.getIdName(), source.getSourceId(), game, Zone.BATTLEFIELD, true)) {
|
if (controller.moveCardToExileWithInfo(creature, source.getSourceId(), sourcePermanent.getIdName(), source.getSourceId(), game, Zone.BATTLEFIELD, true)) {
|
||||||
//create delayed triggered ability
|
//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.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())));
|
effect.setTargetPointer(new FixedTarget(creature.getId(), game.getState().getZoneChangeCounter(creature.getId())));
|
||||||
game.addDelayedTriggeredAbility(new AtTheBeginOfNextEndStepDelayedTriggeredAbility(effect), source);
|
game.addDelayedTriggeredAbility(new AtTheBeginOfNextEndStepDelayedTriggeredAbility(effect), source);
|
||||||
|
|
|
@ -1,34 +1,22 @@
|
||||||
|
|
||||||
package mage.cards.w;
|
package mage.cards.w;
|
||||||
|
|
||||||
import java.util.UUID;
|
|
||||||
import mage.MageInt;
|
import mage.MageInt;
|
||||||
import mage.abilities.Ability;
|
import mage.abilities.Ability;
|
||||||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
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.ExileTargetForSourceEffect;
|
||||||
|
import mage.abilities.effects.common.ReturnToBattlefieldUnderOwnerControlTargetEffect;
|
||||||
import mage.abilities.keyword.FlyingAbility;
|
import mage.abilities.keyword.FlyingAbility;
|
||||||
import mage.cards.Card;
|
|
||||||
import mage.cards.CardImpl;
|
import mage.cards.CardImpl;
|
||||||
import mage.cards.CardSetInfo;
|
import mage.cards.CardSetInfo;
|
||||||
import mage.cards.Cards;
|
|
||||||
import mage.cards.CardsImpl;
|
|
||||||
import mage.cards.MeldCard;
|
|
||||||
import mage.constants.CardType;
|
import mage.constants.CardType;
|
||||||
import mage.constants.Outcome;
|
|
||||||
import mage.constants.SubType;
|
import mage.constants.SubType;
|
||||||
import mage.constants.Zone;
|
|
||||||
import mage.filter.common.FilterControlledCreaturePermanent;
|
import mage.filter.common.FilterControlledCreaturePermanent;
|
||||||
import mage.filter.predicate.permanent.AnotherPredicate;
|
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.target.common.TargetControlledCreaturePermanent;
|
||||||
import mage.util.CardUtil;
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* @author fireshoes
|
* @author fireshoes
|
||||||
*/
|
*/
|
||||||
public final class WispweaverAngel extends CardImpl {
|
public final class WispweaverAngel extends CardImpl {
|
||||||
|
@ -49,10 +37,9 @@ public final class WispweaverAngel extends CardImpl {
|
||||||
this.addAbility(FlyingAbility.getInstance());
|
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.
|
// 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(new ExileTargetForSourceEffect(), true);
|
||||||
Ability ability = new EntersBattlefieldTriggeredAbility(effect, true);
|
ability.addEffect(new ReturnToBattlefieldUnderOwnerControlTargetEffect(false, false));
|
||||||
ability.addTarget(new TargetControlledCreaturePermanent(1, 1, filter, false));
|
ability.addTarget(new TargetControlledCreaturePermanent(1, 1, filter, false));
|
||||||
ability.addEffect(new WispweaverAngelEffect());
|
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -65,57 +52,3 @@ public final class WispweaverAngel extends CardImpl {
|
||||||
return new WispweaverAngel(this);
|
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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
@ -132,7 +132,7 @@ class YorionSkyNomadEffect extends OneShotEffect {
|
||||||
cardsToReturn.add(exiled);
|
cardsToReturn.add(exiled);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Effect effect = new ReturnToBattlefieldUnderOwnerControlTargetEffect();
|
Effect effect = new ReturnToBattlefieldUnderOwnerControlTargetEffect(false, false);
|
||||||
effect.setTargetPointer(new FixedTargets(cardsToReturn, game));
|
effect.setTargetPointer(new FixedTargets(cardsToReturn, game));
|
||||||
AtTheBeginOfNextEndStepDelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(effect);
|
AtTheBeginOfNextEndStepDelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(effect);
|
||||||
game.addDelayedTriggeredAbility(delayedAbility, source);
|
game.addDelayedTriggeredAbility(delayedAbility, source);
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
|
|
||||||
package org.mage.test.cards.abilities.keywords;
|
package org.mage.test.cards.abilities.keywords;
|
||||||
|
|
||||||
import mage.constants.PhaseStep;
|
import mage.constants.PhaseStep;
|
||||||
|
@ -8,7 +7,6 @@ import org.junit.Test;
|
||||||
import org.mage.test.serverside.base.CardTestPlayerBase;
|
import org.mage.test.serverside.base.CardTestPlayerBase;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* @author LevelX2
|
* @author LevelX2
|
||||||
*/
|
*/
|
||||||
public class EvolveTest extends CardTestPlayerBase {
|
public class EvolveTest extends CardTestPlayerBase {
|
||||||
|
@ -166,9 +164,12 @@ public class EvolveTest extends CardTestPlayerBase {
|
||||||
addCard(Zone.HAND, playerB, "Sudden Disappearance", 2);
|
addCard(Zone.HAND, playerB, "Sudden Disappearance", 2);
|
||||||
|
|
||||||
castSpell(2, PhaseStep.PRECOMBAT_MAIN, playerB, "Sudden Disappearance", playerA);
|
castSpell(2, PhaseStep.PRECOMBAT_MAIN, playerB, "Sudden Disappearance", playerA);
|
||||||
|
setChoice(playerA, "Evolve"); // two triggers
|
||||||
|
|
||||||
|
setStrictChooseMode(true);
|
||||||
setStopAt(3, PhaseStep.PRECOMBAT_MAIN);
|
setStopAt(3, PhaseStep.PRECOMBAT_MAIN);
|
||||||
execute();
|
execute();
|
||||||
|
assertAllCommandsUsed();
|
||||||
|
|
||||||
assertLife(playerA, 20);
|
assertLife(playerA, 20);
|
||||||
assertLife(playerB, 20);
|
assertLife(playerB, 20);
|
||||||
|
|
|
@ -8,10 +8,8 @@ import mage.cards.CardsImpl;
|
||||||
import mage.cards.MeldCard;
|
import mage.cards.MeldCard;
|
||||||
import mage.constants.Outcome;
|
import mage.constants.Outcome;
|
||||||
import mage.constants.Zone;
|
import mage.constants.Zone;
|
||||||
import mage.game.ExileZone;
|
|
||||||
import mage.game.Game;
|
import mage.game.Game;
|
||||||
import mage.players.Player;
|
import mage.players.Player;
|
||||||
import mage.util.CardUtil;
|
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
|
@ -21,22 +19,19 @@ import java.util.UUID;
|
||||||
public class ReturnToBattlefieldUnderOwnerControlTargetEffect extends OneShotEffect {
|
public class ReturnToBattlefieldUnderOwnerControlTargetEffect extends OneShotEffect {
|
||||||
|
|
||||||
private boolean tapped;
|
private boolean tapped;
|
||||||
protected boolean fromExileZone;
|
protected boolean returnFromExileZoneOnly;
|
||||||
private String returnName = "that card";
|
private String returnName = "that card";
|
||||||
private String returnUnderControlName = "its owner's";
|
private String returnUnderControlName = "its owner's";
|
||||||
|
|
||||||
public ReturnToBattlefieldUnderOwnerControlTargetEffect() {
|
/**
|
||||||
this(false);
|
* @param returnFromExileZoneOnly see https://github.com/magefree/mage/issues/5151
|
||||||
}
|
* return it or that card - false
|
||||||
|
* return exiled card - true
|
||||||
public ReturnToBattlefieldUnderOwnerControlTargetEffect(boolean tapped) {
|
*/
|
||||||
this(tapped, false);
|
public ReturnToBattlefieldUnderOwnerControlTargetEffect(boolean tapped, boolean returnFromExileZoneOnly) {
|
||||||
}
|
|
||||||
|
|
||||||
public ReturnToBattlefieldUnderOwnerControlTargetEffect(boolean tapped, boolean fromExileZone) {
|
|
||||||
super(Outcome.Benefit);
|
super(Outcome.Benefit);
|
||||||
this.tapped = tapped;
|
this.tapped = tapped;
|
||||||
this.fromExileZone = fromExileZone;
|
this.returnFromExileZoneOnly = returnFromExileZoneOnly;
|
||||||
|
|
||||||
updateText();
|
updateText();
|
||||||
}
|
}
|
||||||
|
@ -44,7 +39,7 @@ public class ReturnToBattlefieldUnderOwnerControlTargetEffect extends OneShotEff
|
||||||
public ReturnToBattlefieldUnderOwnerControlTargetEffect(final ReturnToBattlefieldUnderOwnerControlTargetEffect effect) {
|
public ReturnToBattlefieldUnderOwnerControlTargetEffect(final ReturnToBattlefieldUnderOwnerControlTargetEffect effect) {
|
||||||
super(effect);
|
super(effect);
|
||||||
this.tapped = effect.tapped;
|
this.tapped = effect.tapped;
|
||||||
this.fromExileZone = effect.fromExileZone;
|
this.returnFromExileZoneOnly = effect.returnFromExileZoneOnly;
|
||||||
this.returnName = effect.returnName;
|
this.returnName = effect.returnName;
|
||||||
this.returnUnderControlName = effect.returnUnderControlName;
|
this.returnUnderControlName = effect.returnUnderControlName;
|
||||||
|
|
||||||
|
@ -67,27 +62,21 @@ public class ReturnToBattlefieldUnderOwnerControlTargetEffect extends OneShotEff
|
||||||
Player controller = game.getPlayer(source.getControllerId());
|
Player controller = game.getPlayer(source.getControllerId());
|
||||||
if (controller != null) {
|
if (controller != null) {
|
||||||
Cards cardsToBattlefield = new CardsImpl();
|
Cards cardsToBattlefield = new CardsImpl();
|
||||||
if (fromExileZone) {
|
if (returnFromExileZoneOnly) {
|
||||||
UUID exileZoneId = CardUtil.getExileZoneId(game, source.getSourceId(), source.getSourceObjectZoneChangeCounter());
|
for (UUID targetId : this.getTargetPointer().getTargets(game, source)) {
|
||||||
if (exileZoneId != null) {
|
if (game.getExile().containsId(targetId, game)) {
|
||||||
ExileZone exileZone = game.getExile().getExileZone(exileZoneId);
|
cardsToBattlefield.add(targetId);
|
||||||
if (exileZone != null) {
|
} else {
|
||||||
for (UUID targetId : this.getTargetPointer().getTargets(game, source)) {
|
Card card = game.getCard(targetId);
|
||||||
if (exileZone.contains(targetId)) {
|
if (card instanceof MeldCard) {
|
||||||
cardsToBattlefield.add(targetId);
|
MeldCard meldCard = (MeldCard) card;
|
||||||
} else {
|
Card topCard = meldCard.getTopHalfCard();
|
||||||
Card card = game.getCard(targetId);
|
Card bottomCard = meldCard.getBottomHalfCard();
|
||||||
if (card instanceof MeldCard) {
|
if (topCard.getZoneChangeCounter(game) == meldCard.getTopLastZoneChangeCounter() && game.getExile().containsId(topCard.getId(), game)) {
|
||||||
MeldCard meldCard = (MeldCard) card;
|
cardsToBattlefield.add(topCard);
|
||||||
Card topCard = meldCard.getTopHalfCard();
|
}
|
||||||
Card bottomCard = meldCard.getBottomHalfCard();
|
if (bottomCard.getZoneChangeCounter(game) == meldCard.getBottomLastZoneChangeCounter() && game.getExile().containsId(bottomCard.getId(), game)) {
|
||||||
if (topCard.getZoneChangeCounter(game) == meldCard.getTopLastZoneChangeCounter() && exileZone.contains(topCard.getId())) {
|
cardsToBattlefield.add(bottomCard);
|
||||||
cardsToBattlefield.add(topCard);
|
|
||||||
}
|
|
||||||
if (bottomCard.getZoneChangeCounter(game) == meldCard.getBottomLastZoneChangeCounter() && exileZone.contains(bottomCard.getId())) {
|
|
||||||
cardsToBattlefield.add(bottomCard);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,10 +8,8 @@ import mage.cards.CardsImpl;
|
||||||
import mage.cards.MeldCard;
|
import mage.cards.MeldCard;
|
||||||
import mage.constants.Outcome;
|
import mage.constants.Outcome;
|
||||||
import mage.constants.Zone;
|
import mage.constants.Zone;
|
||||||
import mage.game.ExileZone;
|
|
||||||
import mage.game.Game;
|
import mage.game.Game;
|
||||||
import mage.players.Player;
|
import mage.players.Player;
|
||||||
import mage.util.CardUtil;
|
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
|
@ -20,7 +18,7 @@ import java.util.UUID;
|
||||||
*/
|
*/
|
||||||
public class ReturnToBattlefieldUnderYourControlTargetEffect extends OneShotEffect {
|
public class ReturnToBattlefieldUnderYourControlTargetEffect extends OneShotEffect {
|
||||||
|
|
||||||
private boolean fromExileZone;
|
private boolean returnFromExileZoneOnly;
|
||||||
private boolean tapped;
|
private boolean tapped;
|
||||||
private boolean attacking;
|
private boolean attacking;
|
||||||
private String returnName = "that card";
|
private String returnName = "that card";
|
||||||
|
@ -30,17 +28,18 @@ public class ReturnToBattlefieldUnderYourControlTargetEffect extends OneShotEffe
|
||||||
this(false);
|
this(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public ReturnToBattlefieldUnderYourControlTargetEffect(boolean fromExileZone) {
|
public ReturnToBattlefieldUnderYourControlTargetEffect(boolean returnFromExileZoneOnly) {
|
||||||
this(fromExileZone, false, false);
|
this(returnFromExileZoneOnly, false, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param fromExileZone - the card will only be returned if it's still in
|
* @param returnFromExileZoneOnly see https://github.com/magefree/mage/issues/5151
|
||||||
* the source object specific exile zone
|
* 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);
|
super(Outcome.Benefit);
|
||||||
this.fromExileZone = fromExileZone;
|
this.returnFromExileZoneOnly = returnFromExileZoneOnly;
|
||||||
this.tapped = tapped;
|
this.tapped = tapped;
|
||||||
this.attacking = attacking;
|
this.attacking = attacking;
|
||||||
|
|
||||||
|
@ -49,7 +48,7 @@ public class ReturnToBattlefieldUnderYourControlTargetEffect extends OneShotEffe
|
||||||
|
|
||||||
public ReturnToBattlefieldUnderYourControlTargetEffect(final ReturnToBattlefieldUnderYourControlTargetEffect effect) {
|
public ReturnToBattlefieldUnderYourControlTargetEffect(final ReturnToBattlefieldUnderYourControlTargetEffect effect) {
|
||||||
super(effect);
|
super(effect);
|
||||||
this.fromExileZone = effect.fromExileZone;
|
this.returnFromExileZoneOnly = effect.returnFromExileZoneOnly;
|
||||||
this.tapped = effect.tapped;
|
this.tapped = effect.tapped;
|
||||||
this.attacking = effect.attacking;
|
this.attacking = effect.attacking;
|
||||||
this.returnName = effect.returnName;
|
this.returnName = effect.returnName;
|
||||||
|
@ -75,27 +74,21 @@ public class ReturnToBattlefieldUnderYourControlTargetEffect extends OneShotEffe
|
||||||
Player controller = game.getPlayer(source.getControllerId());
|
Player controller = game.getPlayer(source.getControllerId());
|
||||||
if (controller != null) {
|
if (controller != null) {
|
||||||
Cards cardsToBattlefield = new CardsImpl();
|
Cards cardsToBattlefield = new CardsImpl();
|
||||||
if (fromExileZone) {
|
if (returnFromExileZoneOnly) {
|
||||||
UUID exileZoneId = CardUtil.getExileZoneId(game, source.getSourceId(), source.getSourceObjectZoneChangeCounter());
|
for (UUID targetId : this.getTargetPointer().getTargets(game, source)) {
|
||||||
if (exileZoneId != null) {
|
if (game.getExile().containsId(targetId, game)) {
|
||||||
ExileZone exileZone = game.getExile().getExileZone(exileZoneId);
|
cardsToBattlefield.add(targetId);
|
||||||
if (exileZone != null) {
|
} else {
|
||||||
for (UUID targetId : this.getTargetPointer().getTargets(game, source)) {
|
Card card = game.getCard(targetId);
|
||||||
if (exileZone.contains(targetId)) {
|
if (card instanceof MeldCard) {
|
||||||
cardsToBattlefield.add(targetId);
|
MeldCard meldCard = (MeldCard) card;
|
||||||
} else {
|
Card topCard = meldCard.getTopHalfCard();
|
||||||
Card card = game.getCard(targetId);
|
Card bottomCard = meldCard.getBottomHalfCard();
|
||||||
if (card instanceof MeldCard) {
|
if (topCard.getZoneChangeCounter(game) == meldCard.getTopLastZoneChangeCounter() && game.getExile().containsId(topCard.getId(), game)) {
|
||||||
MeldCard meldCard = (MeldCard) card;
|
cardsToBattlefield.add(topCard);
|
||||||
Card topCard = meldCard.getTopHalfCard();
|
}
|
||||||
Card bottomCard = meldCard.getBottomHalfCard();
|
if (bottomCard.getZoneChangeCounter(game) == meldCard.getBottomLastZoneChangeCounter() && game.getExile().containsId(bottomCard.getId(), game)) {
|
||||||
if (topCard.getZoneChangeCounter(game) == meldCard.getTopLastZoneChangeCounter() && exileZone.contains(topCard.getId())) {
|
cardsToBattlefield.add(bottomCard);
|
||||||
cardsToBattlefield.add(topCard);
|
|
||||||
}
|
|
||||||
if (bottomCard.getZoneChangeCounter(game) == meldCard.getBottomLastZoneChangeCounter() && exileZone.contains(bottomCard.getId())) {
|
|
||||||
cardsToBattlefield.add(bottomCard);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -92,7 +92,7 @@ class AgyremEffect extends OneShotEffect {
|
||||||
public boolean apply(Game game, Ability source) {
|
public boolean apply(Game game, Ability source) {
|
||||||
Card card = game.getCard(getTargetPointer().getFirst(game, source));
|
Card card = game.getCard(getTargetPointer().getFirst(game, source));
|
||||||
if (card != null) {
|
if (card != null) {
|
||||||
Effect effect = new ReturnToBattlefieldUnderOwnerControlTargetEffect();
|
Effect effect = new ReturnToBattlefieldUnderOwnerControlTargetEffect(false, false);
|
||||||
effect.setTargetPointer(new FixedTarget(card.getId(), card.getZoneChangeCounter(game)));
|
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");
|
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);
|
game.addDelayedTriggeredAbility(new AtTheBeginOfNextEndStepDelayedTriggeredAbility(effect, TargetController.ANY), source);
|
||||||
|
|
Loading…
Reference in a new issue