From 218aa5079cf06947589b82e275ae1907a62e81ef Mon Sep 17 00:00:00 2001 From: theelk801 Date: Thu, 24 Jul 2025 09:49:52 -0400 Subject: [PATCH] [SPM] Implement Whoosh! --- Mage.Sets/src/mage/cards/b/BlinkOfAnEye.java | 14 +++--- Mage.Sets/src/mage/cards/i/IntoTheRoil.java | 13 +++--- Mage.Sets/src/mage/cards/w/Whoosh.java | 43 +++++++++++++++++++ Mage.Sets/src/mage/sets/MarvelsSpiderMan.java | 1 + 4 files changed, 56 insertions(+), 15 deletions(-) create mode 100644 Mage.Sets/src/mage/cards/w/Whoosh.java diff --git a/Mage.Sets/src/mage/cards/b/BlinkOfAnEye.java b/Mage.Sets/src/mage/cards/b/BlinkOfAnEye.java index 0441ef725cf..aa0c3013881 100644 --- a/Mage.Sets/src/mage/cards/b/BlinkOfAnEye.java +++ b/Mage.Sets/src/mage/cards/b/BlinkOfAnEye.java @@ -1,8 +1,5 @@ - package mage.cards.b; -import java.util.UUID; - import mage.abilities.condition.common.KickedCondition; import mage.abilities.decorator.ConditionalOneShotEffect; import mage.abilities.effects.common.DrawCardSourceControllerEffect; @@ -13,8 +10,9 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.target.common.TargetNonlandPermanent; +import java.util.UUID; + /** - * * @author JRHerlehy */ public final class BlinkOfAnEye extends CardImpl { @@ -26,10 +24,12 @@ public final class BlinkOfAnEye extends CardImpl { this.addAbility(new KickerAbility("{1}{U}")); // Return target nonland permanent to its owner's hand. If this spell was kicked, draw a card. - this.getSpellAbility().addTarget(new TargetNonlandPermanent()); this.getSpellAbility().addEffect(new ReturnToHandTargetEffect()); - this.getSpellAbility().addEffect(new ConditionalOneShotEffect(new DrawCardSourceControllerEffect(1), KickedCondition.ONCE, - "If this spell was kicked, draw a card")); + this.getSpellAbility().addEffect(new ConditionalOneShotEffect( + new DrawCardSourceControllerEffect(1), + KickedCondition.ONCE, "if this spell was kicked, draw a card" + )); + this.getSpellAbility().addTarget(new TargetNonlandPermanent()); } private BlinkOfAnEye(final BlinkOfAnEye card) { diff --git a/Mage.Sets/src/mage/cards/i/IntoTheRoil.java b/Mage.Sets/src/mage/cards/i/IntoTheRoil.java index 95337fc4f88..7322729f24a 100644 --- a/Mage.Sets/src/mage/cards/i/IntoTheRoil.java +++ b/Mage.Sets/src/mage/cards/i/IntoTheRoil.java @@ -1,8 +1,5 @@ - - package mage.cards.i; -import java.util.UUID; import mage.abilities.condition.common.KickedCondition; import mage.abilities.decorator.ConditionalOneShotEffect; import mage.abilities.effects.common.DrawCardSourceControllerEffect; @@ -13,15 +10,15 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.target.common.TargetNonlandPermanent; +import java.util.UUID; + /** - * * @author Viserion */ public final class IntoTheRoil extends CardImpl { public IntoTheRoil(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{1}{U}"); - + super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{1}{U}"); // Kicker {1}{U} (You may pay an additional {1}{U} as you cast this spell.) this.addAbility(new KickerAbility("{1}{U}")); @@ -30,8 +27,8 @@ public final class IntoTheRoil extends CardImpl { this.getSpellAbility().addEffect(new ReturnToHandTargetEffect()); this.getSpellAbility().addEffect(new ConditionalOneShotEffect( new DrawCardSourceControllerEffect(1), - KickedCondition.ONCE, - "if this spell was kicked, draw a card")); + KickedCondition.ONCE, "if this spell was kicked, draw a card" + )); this.getSpellAbility().addTarget(new TargetNonlandPermanent()); } diff --git a/Mage.Sets/src/mage/cards/w/Whoosh.java b/Mage.Sets/src/mage/cards/w/Whoosh.java new file mode 100644 index 00000000000..43fb9db1054 --- /dev/null +++ b/Mage.Sets/src/mage/cards/w/Whoosh.java @@ -0,0 +1,43 @@ +package mage.cards.w; + +import mage.abilities.condition.common.KickedCondition; +import mage.abilities.decorator.ConditionalOneShotEffect; +import mage.abilities.effects.common.DrawCardSourceControllerEffect; +import mage.abilities.effects.common.ReturnToHandTargetEffect; +import mage.abilities.keyword.KickerAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.target.common.TargetNonlandPermanent; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class Whoosh extends CardImpl { + + public Whoosh(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{1}{U}"); + + // Kicker {1}{U} + this.addAbility(new KickerAbility("{1}{U}")); + + // Return target nonland permanent to its owner's hand. If this spell was kicked, draw a card. + this.getSpellAbility().addEffect(new ReturnToHandTargetEffect()); + this.getSpellAbility().addEffect(new ConditionalOneShotEffect( + new DrawCardSourceControllerEffect(1), + KickedCondition.ONCE, "if this spell was kicked, draw a card" + )); + this.getSpellAbility().addTarget(new TargetNonlandPermanent()); + } + + private Whoosh(final Whoosh card) { + super(card); + } + + @Override + public Whoosh copy() { + return new Whoosh(this); + } +} diff --git a/Mage.Sets/src/mage/sets/MarvelsSpiderMan.java b/Mage.Sets/src/mage/sets/MarvelsSpiderMan.java index fffec23ddc5..cee7af12605 100644 --- a/Mage.Sets/src/mage/sets/MarvelsSpiderMan.java +++ b/Mage.Sets/src/mage/sets/MarvelsSpiderMan.java @@ -37,5 +37,6 @@ public final class MarvelsSpiderMan extends ExpansionSet { cards.add(new SetCardInfo("Starling, Aerial Ally", 18, Rarity.COMMON, mage.cards.s.StarlingAerialAlly.class)); cards.add(new SetCardInfo("Swamp", 196, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Web Up", 21, Rarity.COMMON, mage.cards.w.WebUp.class)); + cards.add(new SetCardInfo("Whoosh!", 48, Rarity.COMMON, mage.cards.w.Whoosh.class)); } }