From f6540d1394fac8abf6ac165cbf093972d47b0d7a Mon Sep 17 00:00:00 2001
From: Evan Kranzler <theelk801@gmail.com>
Date: Fri, 5 Apr 2019 20:00:24 -0400
Subject: [PATCH] Implemented Devouring Hellion

---
 .../src/mage/cards/d/DevouringHellion.java    | 97 +++++++++++++++++++
 Mage.Sets/src/mage/sets/WarOfTheSpark.java    |  1 +
 2 files changed, 98 insertions(+)
 create mode 100644 Mage.Sets/src/mage/cards/d/DevouringHellion.java

diff --git a/Mage.Sets/src/mage/cards/d/DevouringHellion.java b/Mage.Sets/src/mage/cards/d/DevouringHellion.java
new file mode 100644
index 0000000000..293a1f6616
--- /dev/null
+++ b/Mage.Sets/src/mage/cards/d/DevouringHellion.java
@@ -0,0 +1,97 @@
+package mage.cards.d;
+
+import mage.MageInt;
+import mage.abilities.Ability;
+import mage.abilities.common.AsEntersBattlefieldAbility;
+import mage.abilities.effects.OneShotEffect;
+import mage.abilities.effects.common.counter.AddCountersSourceEffect;
+import mage.cards.CardImpl;
+import mage.cards.CardSetInfo;
+import mage.constants.CardType;
+import mage.constants.Outcome;
+import mage.constants.SubType;
+import mage.counters.CounterType;
+import mage.filter.FilterPermanent;
+import mage.filter.common.FilterControlledPermanent;
+import mage.filter.predicate.Predicates;
+import mage.filter.predicate.mageobject.CardTypePredicate;
+import mage.game.Game;
+import mage.game.permanent.Permanent;
+import mage.players.Player;
+import mage.target.Target;
+import mage.target.TargetPermanent;
+
+import java.util.UUID;
+
+/**
+ * @author TheElk801
+ */
+public final class DevouringHellion extends CardImpl {
+
+    public DevouringHellion(UUID ownerId, CardSetInfo setInfo) {
+        super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{R}");
+
+        this.subtype.add(SubType.HELLION);
+        this.power = new MageInt(2);
+        this.toughness = new MageInt(2);
+
+        // As Devouring Hellion enters the battlefield, you may sacrifice any number of creatures and/or planeswalkers. If you do, it enters with twice that many +1/+1 counters on it.
+        this.addAbility(new AsEntersBattlefieldAbility(new DevouringHellionEffect()));
+    }
+
+    private DevouringHellion(final DevouringHellion card) {
+        super(card);
+    }
+
+    @Override
+    public DevouringHellion copy() {
+        return new DevouringHellion(this);
+    }
+}
+
+class DevouringHellionEffect extends OneShotEffect {
+
+    private static final FilterPermanent filter = new FilterControlledPermanent("creatures and/or planeswalkers");
+
+    static {
+        filter.add(Predicates.or(
+                new CardTypePredicate(CardType.CREATURE),
+                new CardTypePredicate(CardType.PLANESWALKER)
+        ));
+    }
+
+    DevouringHellionEffect() {
+        super(Outcome.Benefit);
+        staticText = "you may sacrifice any number of creatures and/or planeswalkers. " +
+                "If you do, it enters with twice that many +1/+1 counters on it.";
+    }
+
+    private DevouringHellionEffect(final DevouringHellionEffect effect) {
+        super(effect);
+    }
+
+    @Override
+    public DevouringHellionEffect copy() {
+        return new DevouringHellionEffect(this);
+    }
+
+    @Override
+    public boolean apply(Game game, Ability source) {
+        Player player = game.getPlayer(source.getControllerId());
+        if (player == null) {
+            return false;
+        }
+        Target target = new TargetPermanent(0, Integer.MAX_VALUE, filter, true);
+        if (!player.choose(outcome, target, source.getSourceId(), game)) {
+            return false;
+        }
+        int xValue = 0;
+        for (UUID targetId : target.getTargets()) {
+            Permanent permanent = game.getPermanent(targetId);
+            if (permanent != null && permanent.sacrifice(source.getSourceId(), game)) {
+                xValue++;
+            }
+        }
+        return new AddCountersSourceEffect(CounterType.P1P1.createInstance(2 * xValue)).apply(game, source);
+    }
+}
\ No newline at end of file
diff --git a/Mage.Sets/src/mage/sets/WarOfTheSpark.java b/Mage.Sets/src/mage/sets/WarOfTheSpark.java
index ed3510239e..4039c1e9ff 100644
--- a/Mage.Sets/src/mage/sets/WarOfTheSpark.java
+++ b/Mage.Sets/src/mage/sets/WarOfTheSpark.java
@@ -44,6 +44,7 @@ public final class WarOfTheSpark extends ExpansionSet {
         cards.add(new SetCardInfo("Davriel, Rogue Shadowmage", 83, Rarity.UNCOMMON, mage.cards.d.DavrielRogueShadowmage.class));
         cards.add(new SetCardInfo("Deathsprout", 189, Rarity.UNCOMMON, mage.cards.d.Deathsprout.class));
         cards.add(new SetCardInfo("Defiant Strike", 9, Rarity.COMMON, mage.cards.d.DefiantStrike.class));
+        cards.add(new SetCardInfo("Devouring Hellion", 124, Rarity.UNCOMMON, mage.cards.d.DevouringHellion.class));
         cards.add(new SetCardInfo("Dovin's Veto", 193, Rarity.UNCOMMON, mage.cards.d.DovinsVeto.class));
         cards.add(new SetCardInfo("Dreadhorde Arcanist", 125, Rarity.RARE, mage.cards.d.DreadhordeArcanist.class));
         cards.add(new SetCardInfo("Dreadhorde Butcher", 194, Rarity.RARE, mage.cards.d.DreadhordeButcher.class));