From 8879a5fdf7cb336ab73ea26f4a111ed021eda518 Mon Sep 17 00:00:00 2001 From: Daniel Bomar Date: Wed, 2 Jun 2021 17:01:55 -0500 Subject: [PATCH] [MH2] Implemented Breathless Knight (#7876) --- .../src/mage/cards/b/BreathlessKnight.java | 96 +++++++++++++++++++ Mage.Sets/src/mage/sets/ModernHorizons2.java | 1 + 2 files changed, 97 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/b/BreathlessKnight.java diff --git a/Mage.Sets/src/mage/cards/b/BreathlessKnight.java b/Mage.Sets/src/mage/cards/b/BreathlessKnight.java new file mode 100644 index 00000000000..50c3dca10bc --- /dev/null +++ b/Mage.Sets/src/mage/cards/b/BreathlessKnight.java @@ -0,0 +1,96 @@ +package mage.cards.b; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.TriggeredAbilityImpl; +import mage.abilities.effects.common.counter.AddCountersSourceEffect; +import mage.constants.SubType; +import mage.abilities.keyword.FlyingAbility; +import mage.abilities.keyword.LifelinkAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.Zone; +import mage.counters.CounterType; +import mage.game.Game; +import mage.game.events.EntersTheBattlefieldEvent; +import mage.game.events.GameEvent; +import mage.game.permanent.Permanent; +import mage.watchers.common.CastFromGraveyardWatcher; + +/** + * + * @author weirddan455 + */ +public final class BreathlessKnight extends CardImpl { + + public BreathlessKnight(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{W}{B}"); + + this.subtype.add(SubType.SPIRIT); + this.subtype.add(SubType.KNIGHT); + this.power = new MageInt(2); + this.toughness = new MageInt(2); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + + // Lifelink + this.addAbility(LifelinkAbility.getInstance()); + + // Whenever Breathless Knight or another creature enters the battlefield under your control, if that creature entered from a graveyard or you cast it from a graveyard, put a +1/+1 counter on Breathless Knight. + this.addAbility(new BreathlessKnightTriggeredAbility(), new CastFromGraveyardWatcher()); + } + + private BreathlessKnight(final BreathlessKnight card) { + super(card); + } + + @Override + public BreathlessKnight copy() { + return new BreathlessKnight(this); + } +} + +class BreathlessKnightTriggeredAbility extends TriggeredAbilityImpl { + + public BreathlessKnightTriggeredAbility() { + super(Zone.BATTLEFIELD, new AddCountersSourceEffect(CounterType.P1P1.createInstance())); + } + + private BreathlessKnightTriggeredAbility(final BreathlessKnightTriggeredAbility ability) { + super(ability); + } + + @Override + public BreathlessKnightTriggeredAbility copy() { + return new BreathlessKnightTriggeredAbility(this); + } + + @Override + public boolean checkEventType(GameEvent event, Game game) { + return event.getType() == GameEvent.EventType.ENTERS_THE_BATTLEFIELD; + } + + @Override + public boolean checkTrigger(GameEvent event, Game game) { + if (event instanceof EntersTheBattlefieldEvent) { + EntersTheBattlefieldEvent entersEvent = (EntersTheBattlefieldEvent) event; + Permanent permanent = entersEvent.getTarget(); + if (permanent != null && permanent.isCreature() && permanent.isControlledBy(this.getControllerId())) { + if (entersEvent.getFromZone() == Zone.GRAVEYARD) { + return true; + } + CastFromGraveyardWatcher watcher = game.getState().getWatcher(CastFromGraveyardWatcher.class); + int zcc = game.getState().getZoneChangeCounter(entersEvent.getSourceId()); + return watcher != null && watcher.spellWasCastFromGraveyard(entersEvent.getSourceId(), zcc - 1); + } + } + return false; + } + + @Override + public String getRule() { + return "Whenever {this} or another creature enters the battlefield under your control, if that creature entered from a graveyard or you cast it from a graveyard, " + super.getRule(); + } +} diff --git a/Mage.Sets/src/mage/sets/ModernHorizons2.java b/Mage.Sets/src/mage/sets/ModernHorizons2.java index d0a65893c67..d0de0f36dfd 100644 --- a/Mage.Sets/src/mage/sets/ModernHorizons2.java +++ b/Mage.Sets/src/mage/sets/ModernHorizons2.java @@ -55,6 +55,7 @@ public final class ModernHorizons2 extends ExpansionSet { cards.add(new SetCardInfo("Brainstone", 223, Rarity.UNCOMMON, mage.cards.b.Brainstone.class)); cards.add(new SetCardInfo("Break Ties", 8, Rarity.COMMON, mage.cards.b.BreakTies.class)); cards.add(new SetCardInfo("Break the Ice", 77, Rarity.UNCOMMON, mage.cards.b.BreakTheIce.class)); + cards.add(new SetCardInfo("Breathless Knight", 187, Rarity.COMMON, mage.cards.b.BreathlessKnight.class)); cards.add(new SetCardInfo("Breya's Apprentice", 117, Rarity.RARE, mage.cards.b.BreyasApprentice.class)); cards.add(new SetCardInfo("Cabal Coffers", 301, Rarity.MYTHIC, mage.cards.c.CabalCoffers.class)); cards.add(new SetCardInfo("Calibrated Blast", 118, Rarity.RARE, mage.cards.c.CalibratedBlast.class));