diff --git a/Mage.Sets/src/mage/cards/a/AbbotOfKeralKeep.java b/Mage.Sets/src/mage/cards/a/AbbotOfKeralKeep.java index addaf77b85..356d63c238 100644 --- a/Mage.Sets/src/mage/cards/a/AbbotOfKeralKeep.java +++ b/Mage.Sets/src/mage/cards/a/AbbotOfKeralKeep.java @@ -2,22 +2,12 @@ package mage.cards.a; import java.util.UUID; import mage.MageInt; -import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldTriggeredAbility; -import mage.abilities.effects.AsThoughEffectImpl; -import mage.abilities.effects.ContinuousEffect; -import mage.abilities.effects.OneShotEffect; -import mage.abilities.effects.common.asthought.PlayFromNotOwnHandZoneTargetEffect; +import mage.abilities.effects.common.ExileTopXMayPlayUntilEndOfTurnEffect; import mage.abilities.keyword.ProwessAbility; -import mage.cards.Card; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.*; -import mage.game.Game; -import mage.game.permanent.Permanent; -import mage.players.Library; -import mage.players.Player; -import mage.target.targetpointer.FixedTarget; /** * @@ -36,7 +26,7 @@ public final class AbbotOfKeralKeep extends CardImpl { this.addAbility(new ProwessAbility()); // When Abbot of Keral Keep enters the battlefield, exile the top card of your library. Until end of turn, you may play that card. - this.addAbility(new EntersBattlefieldTriggeredAbility(new AbbotOfKeralKeepExileEffect())); + this.addAbility(new EntersBattlefieldTriggeredAbility(new ExileTopXMayPlayUntilEndOfTurnEffect(1))); } private AbbotOfKeralKeep(final AbbotOfKeralKeep card) { @@ -48,67 +38,3 @@ public final class AbbotOfKeralKeep extends CardImpl { return new AbbotOfKeralKeep(this); } } - -class AbbotOfKeralKeepExileEffect extends OneShotEffect { - - public AbbotOfKeralKeepExileEffect() { - super(Outcome.Detriment); - this.staticText = "exile the top card of your library. Until end of turn, you may play that card"; - } - - public AbbotOfKeralKeepExileEffect(final AbbotOfKeralKeepExileEffect effect) { - super(effect); - } - - @Override - public AbbotOfKeralKeepExileEffect copy() { - return new AbbotOfKeralKeepExileEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - Player controller = game.getPlayer(source.getControllerId()); - Permanent sourcePermanent = game.getPermanentOrLKIBattlefield(source.getSourceId()); - if (sourcePermanent != null && controller != null && controller.getLibrary().hasCards()) { - Library library = controller.getLibrary(); - Card card = library.getFromTop(game); - if (card != null) { - String exileName = sourcePermanent.getIdName() + " <this card may be played the turn it was exiled>"; - controller.moveCardsToExile(card, source, game, true, source.getSourceId(), exileName); - ContinuousEffect effect = new PlayFromNotOwnHandZoneTargetEffect(Duration.EndOfTurn); - effect.setTargetPointer(new FixedTarget(card, game)); - game.addEffect(effect, source); - } - return true; - } - return false; - } -} - -class AbbotOfKeralKeepCastFromExileEffect extends AsThoughEffectImpl { - - public AbbotOfKeralKeepCastFromExileEffect() { - super(AsThoughEffectType.PLAY_FROM_NOT_OWN_HAND_ZONE, Duration.EndOfTurn, Outcome.Benefit); - staticText = "You may play the card from exile"; - } - - public AbbotOfKeralKeepCastFromExileEffect(final AbbotOfKeralKeepCastFromExileEffect effect) { - super(effect); - } - - @Override - public boolean apply(Game game, Ability source) { - return true; - } - - @Override - public AbbotOfKeralKeepCastFromExileEffect copy() { - return new AbbotOfKeralKeepCastFromExileEffect(this); - } - - @Override - public boolean applies(UUID objectId, Ability source, UUID affectedControllerId, Game game) { - return source.isControlledBy(affectedControllerId) - && objectId.equals(getTargetPointer().getFirst(game, source)); - } -} diff --git a/Mage.Sets/src/mage/cards/a/AerialCaravan.java b/Mage.Sets/src/mage/cards/a/AerialCaravan.java index 8867a11131..9a31d61cce 100644 --- a/Mage.Sets/src/mage/cards/a/AerialCaravan.java +++ b/Mage.Sets/src/mage/cards/a/AerialCaravan.java @@ -2,26 +2,14 @@ package mage.cards.a; import java.util.UUID; import mage.MageInt; -import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.mana.ManaCostsImpl; -import mage.abilities.effects.ContinuousEffect; -import mage.abilities.effects.OneShotEffect; -import mage.abilities.effects.common.asthought.PlayFromNotOwnHandZoneTargetEffect; +import mage.abilities.effects.common.ExileTopXMayPlayUntilEndOfTurnEffect; import mage.abilities.keyword.FlyingAbility; -import mage.cards.Card; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.constants.Duration; -import mage.constants.Outcome; import mage.constants.SubType; -import mage.constants.Zone; -import mage.game.Game; -import mage.game.permanent.Permanent; -import mage.players.Library; -import mage.players.Player; -import mage.target.targetpointer.FixedTarget; /** * @@ -41,7 +29,10 @@ public final class AerialCaravan extends CardImpl { this.addAbility(FlyingAbility.getInstance()); // {1}{U}{U}: Exile the top card of your library. Until end of turn, you may play that card. - this.addAbility(new SimpleActivatedAbility(new AerialCaravanExileEffect(), new ManaCostsImpl("{1}{U}{U}"))); + this.addAbility(new SimpleActivatedAbility( + new ExileTopXMayPlayUntilEndOfTurnEffect(1).setText("Exile the top card of your library. " + + "Until end of turn, you may play that card. <i>(Reveal the card as you exile it.)</i>"), + new ManaCostsImpl("{1}{U}{U}"))); } private AerialCaravan(final AerialCaravan card) { @@ -53,39 +44,3 @@ public final class AerialCaravan extends CardImpl { return new AerialCaravan(this); } } - -class AerialCaravanExileEffect extends OneShotEffect { - - public AerialCaravanExileEffect() { - super(Outcome.Detriment); - this.staticText = "Exile the top card of your library. Until end of turn, you may play that card"; - } - - public AerialCaravanExileEffect(final AerialCaravanExileEffect effect) { - super(effect); - } - - @Override - public AerialCaravanExileEffect copy() { - return new AerialCaravanExileEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - Player controller = game.getPlayer(source.getControllerId()); - Permanent sourcePermanent = game.getPermanentOrLKIBattlefield(source.getSourceId()); - if (sourcePermanent != null && controller != null && controller.getLibrary().hasCards()) { - Library library = controller.getLibrary(); - Card card = library.getFromTop(game); - if (card != null) { - String exileName = sourcePermanent.getIdName() + " <this card may be played the turn it was exiled>"; - controller.moveCardsToExile(card, source, game, true, source.getSourceId(), exileName); - ContinuousEffect effect = new PlayFromNotOwnHandZoneTargetEffect(Zone.EXILED, Duration.EndOfTurn); - effect.setTargetPointer(new FixedTarget(card, game)); - game.addEffect(effect, source); - } - return true; - } - return false; - } -} diff --git a/Mage.Sets/src/mage/cards/i/IreShaman.java b/Mage.Sets/src/mage/cards/i/IreShaman.java index ca3203f512..eca5196610 100644 --- a/Mage.Sets/src/mage/cards/i/IreShaman.java +++ b/Mage.Sets/src/mage/cards/i/IreShaman.java @@ -3,26 +3,15 @@ package mage.cards.i; import java.util.UUID; import mage.MageInt; -import mage.abilities.Ability; import mage.abilities.common.TurnedFaceUpSourceTriggeredAbility; import mage.abilities.costs.mana.ManaCostsImpl; -import mage.abilities.effects.AsThoughEffectImpl; -import mage.abilities.effects.ContinuousEffect; -import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.ExileTopXMayPlayUntilEndOfTurnEffect; import mage.abilities.keyword.MenaceAbility; import mage.abilities.keyword.MorphAbility; -import mage.cards.Card; import mage.cards.CardImpl; import mage.cards.CardSetInfo; -import mage.constants.AsThoughEffectType; import mage.constants.CardType; import mage.constants.SubType; -import mage.constants.Duration; -import mage.constants.Outcome; -import mage.game.Game; -import mage.game.permanent.Permanent; -import mage.players.Player; -import mage.target.targetpointer.FixedTarget; /** * @@ -44,7 +33,7 @@ public final class IreShaman extends CardImpl { this.addAbility(new MorphAbility(this, new ManaCostsImpl("{R}"), true)); // When Ire Shaman is turned face up, exile the top card of your library. Until end of turn, you may play that card. - this.addAbility(new TurnedFaceUpSourceTriggeredAbility(new IreShamanExileEffect(), false)); + this.addAbility(new TurnedFaceUpSourceTriggeredAbility(new ExileTopXMayPlayUntilEndOfTurnEffect(1), false)); } private IreShaman(final IreShaman card) { @@ -56,66 +45,3 @@ public final class IreShaman extends CardImpl { return new IreShaman(this); } } - -class IreShamanExileEffect extends OneShotEffect { - - public IreShamanExileEffect() { - super(Outcome.Detriment); - this.staticText = "exile the top card of your library. Until end of turn, you may play that card"; - } - - public IreShamanExileEffect(final IreShamanExileEffect effect) { - super(effect); - } - - @Override - public IreShamanExileEffect copy() { - return new IreShamanExileEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - Player controller = game.getPlayer(source.getControllerId()); - Permanent sourcePermanent = game.getPermanentOrLKIBattlefield(source.getSourceId()); - if (sourcePermanent != null && controller != null && controller.getLibrary().hasCards()) { - Card card = controller.getLibrary().getFromTop(game); - if (card != null) { - String exileName = sourcePermanent.getIdName() + " <this card may be played the turn it was exiled>"; - controller.moveCardsToExile(card, source, game, true, source.getSourceId(), exileName); - ContinuousEffect effect = new IreShamanCastFromExileEffect(); - effect.setTargetPointer(new FixedTarget(card.getId())); - game.addEffect(effect, source); - } - return true; - } - return false; - } -} - -class IreShamanCastFromExileEffect extends AsThoughEffectImpl { - - public IreShamanCastFromExileEffect() { - super(AsThoughEffectType.PLAY_FROM_NOT_OWN_HAND_ZONE, Duration.EndOfTurn, Outcome.Benefit); - staticText = "You may play the card from exile"; - } - - public IreShamanCastFromExileEffect(final IreShamanCastFromExileEffect effect) { - super(effect); - } - - @Override - public boolean apply(Game game, Ability source) { - return true; - } - - @Override - public IreShamanCastFromExileEffect copy() { - return new IreShamanCastFromExileEffect(this); - } - - @Override - public boolean applies(UUID objectId, Ability source, UUID affectedControllerId, Game game) { - return source.isControlledBy(affectedControllerId) - && objectId.equals(getTargetPointer().getFirst(game, source)); - } -} diff --git a/Mage.Sets/src/mage/cards/o/OraclesVault.java b/Mage.Sets/src/mage/cards/o/OraclesVault.java index 20fda3923a..f96e712185 100644 --- a/Mage.Sets/src/mage/cards/o/OraclesVault.java +++ b/Mage.Sets/src/mage/cards/o/OraclesVault.java @@ -8,6 +8,7 @@ import mage.abilities.costs.mana.GenericManaCost; import mage.abilities.decorator.ConditionalActivatedAbility; import mage.abilities.effects.Effect; import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.ExileTopXMayPlayUntilEndOfTurnEffect; import mage.abilities.effects.common.asthought.PlayFromNotOwnHandZoneTargetEffect; import mage.abilities.effects.common.counter.AddCountersSourceEffect; import mage.cards.CardImpl; @@ -27,13 +28,12 @@ public final class OraclesVault extends CardImpl { public OraclesVault(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{4}"); - // {2}, {T}: Exile the top card of your library. Until end of turn, you may play that card. Put a brick counter on Oracle's Vault. - Effect effect = new OraclesVaultEffect(); - effect.setText("Exile the top card of your library. Until end of turn, you may play that card"); - Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, effect, new GenericManaCost(2)); + // {2}, {T}: Exile the top card of your library. Until end of turn, you may play that card. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new ExileTopXMayPlayUntilEndOfTurnEffect(1), new GenericManaCost(2)); ability.addCost(new TapSourceCost()); + + // Put a brick counter on Oracle's Vault. Effect effect2 = new AddCountersSourceEffect(CounterType.BRICK.createInstance()); - effect2.setText("Put a brick counter on {this}"); ability.addEffect(effect2); this.addAbility(ability); @@ -55,32 +55,6 @@ public final class OraclesVault extends CardImpl { } } -class OraclesVaultEffect extends OneShotEffect { - - public OraclesVaultEffect() { - super(Outcome.Benefit); - } - - public OraclesVaultEffect(final OraclesVaultEffect effect) { - super(effect); - } - - @Override - public OraclesVaultEffect copy() { - return new OraclesVaultEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - Player controller = game.getPlayer(source.getControllerId()); - if (controller != null) { - return PlayFromNotOwnHandZoneTargetEffect.exileAndPlayFromExile(game, source, controller.getLibrary().getFromTop(game), - TargetController.YOU, Duration.EndOfTurn, false, false, false); - } - return false; - } -} - class OraclesVaultFreeEffect extends OneShotEffect { public OraclesVaultFreeEffect() { diff --git a/Mage.Sets/src/mage/cards/o/OutpostSiege.java b/Mage.Sets/src/mage/cards/o/OutpostSiege.java index 363ab9e6d5..b9b1e3ca73 100644 --- a/Mage.Sets/src/mage/cards/o/OutpostSiege.java +++ b/Mage.Sets/src/mage/cards/o/OutpostSiege.java @@ -7,26 +7,16 @@ import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.common.ZoneChangeAllTriggeredAbility; import mage.abilities.condition.common.ModeChoiceSourceCondition; import mage.abilities.decorator.ConditionalTriggeredAbility; -import mage.abilities.effects.AsThoughEffectImpl; -import mage.abilities.effects.ContinuousEffect; -import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.common.ChooseModeEffect; import mage.abilities.effects.common.DamageTargetEffect; -import mage.cards.Card; +import mage.abilities.effects.common.ExileTopXMayPlayUntilEndOfTurnEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; -import mage.constants.AsThoughEffectType; import mage.constants.CardType; -import mage.constants.Duration; -import mage.constants.Outcome; import mage.constants.TargetController; import mage.constants.Zone; import mage.filter.common.FilterControlledCreaturePermanent; -import mage.game.Game; -import mage.game.permanent.Permanent; -import mage.players.Player; import mage.target.common.TargetAnyTarget; -import mage.target.targetpointer.FixedTarget; /** * @@ -46,7 +36,7 @@ public final class OutpostSiege extends CardImpl { // * Khans - At the beginning of your upkeep, exile the top card of your library. Until end of turn, you may play that card. this.addAbility(new ConditionalTriggeredAbility( - new BeginningOfUpkeepTriggeredAbility(new OutpostSiegeExileEffect(), TargetController.YOU, false), + new BeginningOfUpkeepTriggeredAbility(new ExileTopXMayPlayUntilEndOfTurnEffect(1), TargetController.YOU, false), new ModeChoiceSourceCondition("Khans"), ruleTrigger1)); @@ -70,79 +60,3 @@ public final class OutpostSiege extends CardImpl { return new OutpostSiege(this); } } - -class OutpostSiegeExileEffect extends OneShotEffect { - - public OutpostSiegeExileEffect() { - super(Outcome.Benefit); - this.staticText = "exile the top card of your library. Until end of turn, you may play that card"; - } - - public OutpostSiegeExileEffect(final OutpostSiegeExileEffect effect) { - super(effect); - } - - @Override - public OutpostSiegeExileEffect copy() { - return new OutpostSiegeExileEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - Player controller = game.getPlayer(source.getControllerId()); - Permanent sourcePermanent = game.getPermanentOrLKIBattlefield(source.getSourceId()); - if (controller != null && sourcePermanent != null) { - Card card = controller.getLibrary().getFromTop(game); - if (card != null) { - String exileName = sourcePermanent.getIdName() + " <this card may be played the turn it was exiled"; - controller.moveCardsToExile(card, source, game, true, source.getSourceId(), exileName); - if (game.getState().getZone(card.getId()) == Zone.EXILED) { - ContinuousEffect effect = new CastFromNonHandZoneTargetEffect(Duration.EndOfTurn); - effect.setTargetPointer(new FixedTarget(card, game)); - game.addEffect(effect, source); - } - } - return true; - } - return false; - } -} - -class CastFromNonHandZoneTargetEffect extends AsThoughEffectImpl { - - public CastFromNonHandZoneTargetEffect(Duration duration) { - super(AsThoughEffectType.PLAY_FROM_NOT_OWN_HAND_ZONE, duration, Outcome.Benefit); - staticText = "until end of turn, you may play that card"; - } - - public CastFromNonHandZoneTargetEffect(final CastFromNonHandZoneTargetEffect effect) { - super(effect); - } - - @Override - public boolean apply(Game game, Ability source) { - return true; - } - - @Override - public CastFromNonHandZoneTargetEffect copy() { - return new CastFromNonHandZoneTargetEffect(this); - } - - @Override - public boolean applies(UUID objectId, Ability source, UUID affectedControllerId, Game game) { - Card theCard = game.getCard(objectId); - if (theCard == null) { - return false; - } - objectId = theCard.getMainCard().getId(); // for split cards and mdfc - if (getTargetPointer().getTargets(game, source).contains(objectId) - && source.isControlledBy(affectedControllerId)) { - Card card = game.getCard(objectId); - if (card != null) { - return true; - } - } - return false; - } -} diff --git a/Mage.Sets/src/mage/cards/s/StromkirkOccultist.java b/Mage.Sets/src/mage/cards/s/StromkirkOccultist.java index 7489eaaf92..a33db53e38 100644 --- a/Mage.Sets/src/mage/cards/s/StromkirkOccultist.java +++ b/Mage.Sets/src/mage/cards/s/StromkirkOccultist.java @@ -3,27 +3,15 @@ package mage.cards.s; import java.util.UUID; import mage.MageInt; -import mage.abilities.Ability; import mage.abilities.common.DealsCombatDamageToAPlayerTriggeredAbility; import mage.abilities.costs.mana.ManaCostsImpl; -import mage.abilities.effects.AsThoughEffectImpl; -import mage.abilities.effects.ContinuousEffect; -import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.ExileTopXMayPlayUntilEndOfTurnEffect; import mage.abilities.keyword.MadnessAbility; import mage.abilities.keyword.TrampleAbility; -import mage.cards.Card; import mage.cards.CardImpl; import mage.cards.CardSetInfo; -import mage.constants.AsThoughEffectType; import mage.constants.CardType; import mage.constants.SubType; -import mage.constants.Duration; -import mage.constants.Outcome; -import mage.constants.Zone; -import mage.game.Game; -import mage.game.permanent.Permanent; -import mage.players.Player; -import mage.target.targetpointer.FixedTarget; /** * @@ -42,7 +30,7 @@ public final class StromkirkOccultist extends CardImpl { this.addAbility(TrampleAbility.getInstance()); // Whenever Stromkirk Mystic deals combat damage to a player, exile the top card of your library. Until end of turn, you may play that card. - this.addAbility(new DealsCombatDamageToAPlayerTriggeredAbility(new StromkirkOccultistExileEffect(), false)); + this.addAbility(new DealsCombatDamageToAPlayerTriggeredAbility(new ExileTopXMayPlayUntilEndOfTurnEffect(1), false)); // Madness {1}{R} this.addAbility(new MadnessAbility(this, new ManaCostsImpl("{1}{R}"))); @@ -57,67 +45,3 @@ public final class StromkirkOccultist extends CardImpl { return new StromkirkOccultist(this); } } - -class StromkirkOccultistExileEffect extends OneShotEffect { - - public StromkirkOccultistExileEffect() { - super(Outcome.Detriment); - this.staticText = "exile the top card of your library. Until end of turn, you may play that card"; - } - - public StromkirkOccultistExileEffect(final StromkirkOccultistExileEffect effect) { - super(effect); - } - - @Override - public StromkirkOccultistExileEffect copy() { - return new StromkirkOccultistExileEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - Player controller = game.getPlayer(source.getControllerId()); - Permanent sourcePermanent = game.getPermanentOrLKIBattlefield(source.getSourceId()); - if (sourcePermanent != null && controller != null && controller.getLibrary().hasCards()) { - Card card = controller.getLibrary().getFromTop(game); - if (card != null) { - String exileName = sourcePermanent.getIdName() + " <this card may be played the turn it was exiled>"; - if (controller.moveCardToExileWithInfo(card, source.getSourceId(), exileName, source, game, Zone.LIBRARY, true)) { - ContinuousEffect effect = new StromkirkOccultistPlayFromExileEffect(); - effect.setTargetPointer(new FixedTarget(card.getId())); - game.addEffect(effect, source); - } - } - return true; - } - return false; - } -} - -class StromkirkOccultistPlayFromExileEffect extends AsThoughEffectImpl { - - public StromkirkOccultistPlayFromExileEffect() { - super(AsThoughEffectType.PLAY_FROM_NOT_OWN_HAND_ZONE, Duration.EndOfTurn, Outcome.Benefit); - staticText = "You may play the card from exile"; - } - - public StromkirkOccultistPlayFromExileEffect(final StromkirkOccultistPlayFromExileEffect effect) { - super(effect); - } - - @Override - public boolean apply(Game game, Ability source) { - return true; - } - - @Override - public StromkirkOccultistPlayFromExileEffect copy() { - return new StromkirkOccultistPlayFromExileEffect(this); - } - - @Override - public boolean applies(UUID objectId, Ability source, UUID affectedControllerId, Game game) { - return source.isControlledBy(affectedControllerId) - && objectId.equals(getTargetPointer().getFirst(game, source)); - } -}