/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package mage.abilities.effects.common; import mage.abilities.Ability; import mage.abilities.Gender; import mage.abilities.effects.ContinuousEffect; import mage.abilities.effects.Effect; import mage.abilities.effects.OneShotEffect; import mage.abilities.keyword.TransformAbility; import mage.cards.Card; import mage.constants.Outcome; import mage.constants.Zone; import mage.game.Game; import mage.game.permanent.Permanent; import mage.players.Player; /** * @author LevelX2 */ public class ExileAndReturnTransformedSourceEffect extends OneShotEffect { protected Effect additionalEffect; public ExileAndReturnTransformedSourceEffect(Gender gender) { this(gender, null); } /** * @param gender * @param additionalEffect that effect is applies as source is exiled */ public ExileAndReturnTransformedSourceEffect(Gender gender, Effect additionalEffect) { super(Outcome.Benefit); this.additionalEffect = additionalEffect; this.staticText = "exile {this}, then return " + gender.getPersonalPronoun() + " to the battlefield transformed under " + gender.getPossesivePronoun() + " owner's control"; } public ExileAndReturnTransformedSourceEffect(final ExileAndReturnTransformedSourceEffect effect) { super(effect); this.additionalEffect = effect.additionalEffect; } @Override public ExileAndReturnTransformedSourceEffect copy() { return new ExileAndReturnTransformedSourceEffect(this); } @Override public boolean apply(Game game, Ability source) { // Creature has to be on the battlefield to get exiled and be able to return transformed Permanent sourceObject = game.getPermanent(source.getSourceId()); Player controller = game.getPlayer(source.getControllerId()); if (sourceObject != null && controller != null && sourceObject.getZoneChangeCounter(game) == source.getSourceObjectZoneChangeCounter()) { if (controller.moveCards(sourceObject, Zone.EXILED, source, game)) { game.getState().setValue(TransformAbility.VALUE_KEY_ENTER_TRANSFORMED + source.getSourceId(), Boolean.TRUE); Card cardFromExile = game.getCard(source.getSourceId()); if (cardFromExile != null) { controller.moveCards(cardFromExile, Zone.BATTLEFIELD, source, game, false, false, true, null); if (additionalEffect != null) { if (additionalEffect instanceof ContinuousEffect) { game.addEffect((ContinuousEffect) additionalEffect, source); } else { additionalEffect.apply(game, source); } } } } } return true; } }