From f7a3a6409b2599e7f4d100e6c032a31ac87b9f98 Mon Sep 17 00:00:00 2001 From: Evan Kranzler Date: Thu, 21 Jun 2018 21:39:57 -0400 Subject: [PATCH] Implemented Grim Feast --- Mage.Sets/src/mage/cards/g/GrimFeast.java | 100 ++++++++++++++++++++++ Mage.Sets/src/mage/sets/Mirage.java | 1 + 2 files changed, 101 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/g/GrimFeast.java diff --git a/Mage.Sets/src/mage/cards/g/GrimFeast.java b/Mage.Sets/src/mage/cards/g/GrimFeast.java new file mode 100644 index 00000000000..ea2bc8f21c2 --- /dev/null +++ b/Mage.Sets/src/mage/cards/g/GrimFeast.java @@ -0,0 +1,100 @@ +package mage.cards.g; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; +import mage.abilities.common.PutIntoGraveFromBattlefieldAllTriggeredAbility; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.DamageControllerEffect; +import mage.abilities.effects.common.GainLifeEffect; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.TargetController; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.other.OwnerPredicate; +import mage.game.Game; +import mage.game.permanent.Permanent; + +/** + * + * @author TheElk801 + */ +public final class GrimFeast extends CardImpl { + + public GrimFeast(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{B}{G}"); + + // At the beginning of your upkeep, Grim Feast deals 1 damage to you. + this.addAbility(new BeginningOfUpkeepTriggeredAbility( + new DamageControllerEffect(1), + TargetController.YOU, false + )); + + // Whenever a creature is put into an opponent's graveyard from the battlefield, you gain life equal to its toughness. + this.addAbility(new GrimFeastTriggeredAbility()); + } + + public GrimFeast(final GrimFeast card) { + super(card); + } + + @Override + public GrimFeast copy() { + return new GrimFeast(this); + } +} + +class GrimFeastTriggeredAbility extends PutIntoGraveFromBattlefieldAllTriggeredAbility { + + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("a creature"); + + static { + filter.add(new OwnerPredicate(TargetController.OPPONENT)); + } + + public GrimFeastTriggeredAbility() { + super(new GrimFeastEffect(), false, filter, true, false); + } + + public GrimFeastTriggeredAbility(final GrimFeastTriggeredAbility effect) { + super(effect); + } + + @Override + public GrimFeastTriggeredAbility copy() { + return new GrimFeastTriggeredAbility(this); + } + + @Override + public String getRule() { + return "Whenever a creature is put into an opponent’s graveyard from the battlefield, " + + "you gain life equal to its toughness."; + } +} + +class GrimFeastEffect extends OneShotEffect { + + public GrimFeastEffect() { + super(Outcome.GainLife); + } + + public GrimFeastEffect(final GrimFeastEffect effect) { + super(effect); + } + + @Override + public GrimFeastEffect copy() { + return new GrimFeastEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Permanent creature = game.getPermanentOrLKIBattlefield(source.getFirstTarget()); + if (creature == null) { + return false; + } + return new GainLifeEffect(creature.getToughness().getValue()).apply(game, source); + } +} diff --git a/Mage.Sets/src/mage/sets/Mirage.java b/Mage.Sets/src/mage/sets/Mirage.java index 5b5354966ca..402079a2589 100644 --- a/Mage.Sets/src/mage/sets/Mirage.java +++ b/Mage.Sets/src/mage/sets/Mirage.java @@ -139,6 +139,7 @@ public final class Mirage extends ExpansionSet { cards.add(new SetCardInfo("Grasslands", 327, Rarity.UNCOMMON, mage.cards.g.Grasslands.class)); cards.add(new SetCardInfo("Grave Servitude", 126, Rarity.COMMON, mage.cards.g.GraveServitude.class)); cards.add(new SetCardInfo("Gravebane Zombie", 127, Rarity.COMMON, mage.cards.g.GravebaneZombie.class)); + cards.add(new SetCardInfo("Grim Feast", 325, Rarity.RARE, mage.cards.g.GrimFeast.class)); cards.add(new SetCardInfo("Grinning Totem", 303, Rarity.RARE, mage.cards.g.GrinningTotem.class)); cards.add(new SetCardInfo("Hakim, Loreweaver", 68, Rarity.RARE, mage.cards.h.HakimLoreweaver.class)); cards.add(new SetCardInfo("Hall of Gemstone", 221, Rarity.RARE, mage.cards.h.HallOfGemstone.class));