diff --git a/Mage.Sets/src/mage/cards/e/EntreatTheAngels.java b/Mage.Sets/src/mage/cards/e/EntreatTheAngels.java index 8c6b068c01..e0a0f4cc41 100644 --- a/Mage.Sets/src/mage/cards/e/EntreatTheAngels.java +++ b/Mage.Sets/src/mage/cards/e/EntreatTheAngels.java @@ -40,15 +40,14 @@ import mage.game.permanent.token.AngelToken; /** * * @author noxx - + * */ public class EntreatTheAngels extends CardImpl { public EntreatTheAngels(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{X}{X}{W}{W}{W}"); + super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{X}{X}{W}{W}{W}"); - - // create X 4/4 white Angel creature tokens with flying. + // Create X 4/4 white Angel creature tokens with flying. this.getSpellAbility().addEffect(new CreateTokenEffect(new AngelToken(), new ManacostVariableValue())); // Miracle {X}{W}{W} diff --git a/Mage/src/main/java/mage/abilities/keyword/MiracleAbility.java b/Mage/src/main/java/mage/abilities/keyword/MiracleAbility.java index 20996fb662..8c50e898c0 100644 --- a/Mage/src/main/java/mage/abilities/keyword/MiracleAbility.java +++ b/Mage/src/main/java/mage/abilities/keyword/MiracleAbility.java @@ -24,11 +24,11 @@ * The views and conclusions contained in the software and documentation are those of the * authors and should not be interpreted as representing official policies, either expressed * or implied, of BetaSteward_at_googlemail.com. -*/ - + */ package mage.abilities.keyword; import mage.abilities.Ability; +import mage.abilities.SpellAbility; import mage.abilities.TriggeredAbilityImpl; import mage.abilities.costs.mana.ManaCost; import mage.abilities.costs.mana.ManaCosts; @@ -45,61 +45,67 @@ import mage.watchers.common.MiracleWatcher; /** * 702.92. Miracle * - * 702.92a Miracle is a static ability linked to a triggered ability (see rule 603.10). - * "Miracle [cost]" means "You may reveal this card from your hand as you draw it if - * it's the first card you've drawn this turn. When you reveal this card this way, - * you may cast it by paying [cost] rather than its mana cost." + * 702.92a Miracle is a static ability linked to a triggered ability (see rule + * 603.10). "Miracle [cost]" means "You may reveal this card from your hand as + * you draw it if it's the first card you've drawn this turn. When you reveal + * this card this way, you may cast it by paying [cost] rather than its mana + * cost." * - * 702.92b If a player chooses to reveal a card using its miracle ability, he or she - * plays with that card revealed until that card leaves his or her hand, that ability - * resolves, or that ability otherwise leaves the stack. + * 702.92b If a player chooses to reveal a card using its miracle ability, he or + * she plays with that card revealed until that card leaves his or her hand, + * that ability resolves, or that ability otherwise leaves the stack. * - * You can cast a card for its miracle cost only as the miracle triggered ability resolves. - * If you don't want to cast it at that time (or you can't cast it, perhaps because - * there are no legal targets available), you won't be able to cast it later for the miracle cost. + * You can cast a card for its miracle cost only as the miracle triggered + * ability resolves. If you don't want to cast it at that time (or you can't + * cast it, perhaps because there are no legal targets available), you won't be + * able to cast it later for the miracle cost. * - * RULINGS: - * You still draw the card, whether you use the miracle ability or not. Any ability that - * triggers whenever you draw a card, for example, will trigger. If you don't cast the card - * using its miracle ability, it will remain in your hand. + * RULINGS: You still draw the card, whether you use the miracle ability or not. + * Any ability that triggers whenever you draw a card, for example, will + * trigger. If you don't cast the card using its miracle ability, it will remain + * in your hand. * - * You can reveal and cast a card with miracle on any turn, not just your own, if it's the - * first card you've drawn that turn. + * You can reveal and cast a card with miracle on any turn, not just your own, + * if it's the first card you've drawn that turn. * - * You don't have to reveal a drawn card with miracle if you don't wish to cast it at that time. + * You don't have to reveal a drawn card with miracle if you don't wish to cast + * it at that time. * - * You can cast a card for its miracle cost only as the miracle triggered ability resolves. - * If you don't want to cast it at that time (or you can't cast it, perhaps because there are - * no legal targets available), you won't be able to cast it later for the miracle cost. + * You can cast a card for its miracle cost only as the miracle triggered + * ability resolves. If you don't want to cast it at that time (or you can't + * cast it, perhaps because there are no legal targets available), you won't be + * able to cast it later for the miracle cost. * - * You cast the card with miracle during the resolution of the triggered ability. Ignore any timing - * restrictions based on the card's type. + * You cast the card with miracle during the resolution of the triggered + * ability. Ignore any timing restrictions based on the card's type. * - * It's important to reveal a card with miracle before it is mixed with the other cards in your hand. + * It's important to reveal a card with miracle before it is mixed with the + * other cards in your hand. * - * Multiple card draws are always treated as a sequence of individual card draws. For example, if - * you haven't drawn any cards yet during a turn and cast a spell that instructs you to draw three - * cards, you'll draw them one at a time. Only the first card drawn this way may be revealed and cast - * using its miracle ability. + * Multiple card draws are always treated as a sequence of individual card + * draws. For example, if you haven't drawn any cards yet during a turn and cast + * a spell that instructs you to draw three cards, you'll draw them one at a + * time. Only the first card drawn this way may be revealed and cast using its + * miracle ability. * - * If the card with miracle leaves your hand before the triggered ability resolves, you won't be able - * to cast it using its miracle ability. + * If the card with miracle leaves your hand before the triggered ability + * resolves, you won't be able to cast it using its miracle ability. * - * You draw your opening hand before any turn begins. Cards you draw for your opening hand - * can't be cast using miracle. + * You draw your opening hand before any turn begins. Cards you draw for your + * opening hand can't be cast using miracle. * * @author noxx, LevelX2 */ - public class MiracleAbility extends TriggeredAbilityImpl { + private static final String staticRule = " (You may cast this card for its miracle cost when you draw it if it's the first card you drew this turn.)"; private String ruleText; @SuppressWarnings("unchecked") public MiracleAbility(Card card, ManaCosts miracleCosts) { - super(Zone.HAND, new MiracleEffect((ManaCosts)miracleCosts), true); - addWatcher(new MiracleWatcher()); - ruleText = "Miracle " + miracleCosts.getText() + staticRule; + super(Zone.HAND, new MiracleEffect((ManaCosts) miracleCosts), true); + addWatcher(new MiracleWatcher()); + ruleText = "Miracle " + miracleCosts.getText() + staticRule; } public MiracleAbility(final MiracleAbility ability) { @@ -161,17 +167,12 @@ class MiracleEffect extends OneShotEffect { // use target pointer here, so it's the same card that triggered the event (not gone back to library e.g.) Card card = game.getCard(getTargetPointer().getFirst(game, source)); if (controller != null && card != null) { - ManaCosts costRef = card.getSpellAbility().getManaCostsToPay(); + SpellAbility abilityToCast = card.getSpellAbility().copy(); + ManaCosts costRef = abilityToCast.getManaCostsToPay(); // replace with the new cost costRef.clear(); costRef.add(miracleCosts); - controller.cast(card.getSpellAbility(), game, false); - - // Reset the casting costs (in case the player cancels cast and plays the card later) - costRef.clear(); - for (ManaCost manaCost : card.getSpellAbility().getManaCosts()) { - costRef.add(manaCost); - } + controller.cast(abilityToCast, game, false); return true; } return false;