From 885963784472e791d9b1a7724713c0b26d2a05ae Mon Sep 17 00:00:00 2001 From: Susucre <34709007+Susucre@users.noreply.github.com> Date: Fri, 15 Sep 2023 23:56:08 +0200 Subject: [PATCH] [CMB1] Implement Innocuous Insect (#11143) --- .../src/mage/cards/i/InnocuousInsect.java | 51 +++++++++++++++++++ .../src/mage/sets/MysteryBoosterPlaytest.java | 1 + .../abilities/keyword/BuybackAbility.java | 9 +++- 3 files changed, 60 insertions(+), 1 deletion(-) create mode 100644 Mage.Sets/src/mage/cards/i/InnocuousInsect.java diff --git a/Mage.Sets/src/mage/cards/i/InnocuousInsect.java b/Mage.Sets/src/mage/cards/i/InnocuousInsect.java new file mode 100644 index 00000000000..d72b11b4ea3 --- /dev/null +++ b/Mage.Sets/src/mage/cards/i/InnocuousInsect.java @@ -0,0 +1,51 @@ +package mage.cards.i; + +import mage.MageInt; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.CastSourceTriggeredAbility; +import mage.abilities.effects.common.DrawCardSourceControllerEffect; +import mage.abilities.keyword.BuybackAbility; +import mage.abilities.keyword.FlashAbility; +import mage.abilities.keyword.FlyingAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.SubType; + +import java.util.UUID; + +/** + * @author Susucr + */ +public final class InnocuousInsect extends CardImpl { + + public InnocuousInsect(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{U}{U}"); + + this.subtype.add(SubType.ELDRAZI); + this.subtype.add(SubType.INSECT); + this.power = new MageInt(2); + this.toughness = new MageInt(1); + + // Buyback {1}{U} + this.addAbility(new BuybackAbility(new ManaCostsImpl<>("{1}{U}"))); + + // Flash + this.addAbility(FlashAbility.getInstance()); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + + // When you cast this spell, draw a card. + this.addAbility(new CastSourceTriggeredAbility(new DrawCardSourceControllerEffect(1))); + } + + private InnocuousInsect(final InnocuousInsect card) { + super(card); + } + + @Override + public InnocuousInsect copy() { + return new InnocuousInsect(this); + } +} \ No newline at end of file diff --git a/Mage.Sets/src/mage/sets/MysteryBoosterPlaytest.java b/Mage.Sets/src/mage/sets/MysteryBoosterPlaytest.java index 87432c9ad59..59522d60330 100644 --- a/Mage.Sets/src/mage/sets/MysteryBoosterPlaytest.java +++ b/Mage.Sets/src/mage/sets/MysteryBoosterPlaytest.java @@ -27,6 +27,7 @@ public class MysteryBoosterPlaytest extends ExpansionSet { cards.add(new SetCardInfo("Evil Boros Charm", 90, Rarity.RARE, mage.cards.e.EvilBorosCharm.class)); cards.add(new SetCardInfo("Frogkin Kidnapper", 42, Rarity.RARE, mage.cards.f.FrogkinKidnapper.class)); cards.add(new SetCardInfo("How to Keep an Izzet Mage Busy", 93, Rarity.RARE, mage.cards.h.HowToKeepAnIzzetMageBusy.class)); + cards.add(new SetCardInfo("Innocuous Insect", 23, Rarity.RARE, mage.cards.i.InnocuousInsect.class)); cards.add(new SetCardInfo("Recycla-bird", 28, Rarity.RARE, mage.cards.r.RecyclaBird.class)); cards.add(new SetCardInfo("Slivdrazi Monstrosity", 102, Rarity.RARE, mage.cards.s.SlivdraziMonstrosity.class)); cards.add(new SetCardInfo("Unicycle", 110, Rarity.RARE, mage.cards.u.Unicycle.class)); diff --git a/Mage/src/main/java/mage/abilities/keyword/BuybackAbility.java b/Mage/src/main/java/mage/abilities/keyword/BuybackAbility.java index e8db6ed38f8..d1d0e5377bc 100644 --- a/Mage/src/main/java/mage/abilities/keyword/BuybackAbility.java +++ b/Mage/src/main/java/mage/abilities/keyword/BuybackAbility.java @@ -191,7 +191,14 @@ class BuybackEffect extends ReplacementEffectImpl { if (event.getTargetId().equals(source.getSourceId())) { ZoneChangeEvent zEvent = (ZoneChangeEvent) event; // if spell fizzled, the sourceId is null - return zEvent.getFromZone() == Zone.STACK && zEvent.getToZone() == Zone.GRAVEYARD + return zEvent.getFromZone() == Zone.STACK + && (zEvent.getToZone() == Zone.GRAVEYARD || + // Innocuous Insect from Mystery Boosters is stretching a little what Buyback can do. + // Although that does not impact normal Buyback usage on instants/sorceries. + // + // (2019-11-12) If you pay the buyback cost for a permanent spell, it doesn't enter + // the battlefield as it resolves. It moves from the stack to its owner's hand. + zEvent.getToZone() == Zone.BATTLEFIELD) && source.getSourceId().equals(event.getSourceId()); } return false;