From d1839badb279f5fa2b86f003fbeca695ca32fc40 Mon Sep 17 00:00:00 2001
From: Evan Kranzler <theelk801@gmail.com>
Date: Sat, 4 Jan 2020 15:38:54 -0500
Subject: [PATCH] Implemented Blood Aspirant

---
 Mage.Sets/src/mage/cards/b/BloodAspirant.java | 104 ++++++++++++++++++
 .../src/mage/sets/TherosBeyondDeath.java      |   1 +
 2 files changed, 105 insertions(+)
 create mode 100644 Mage.Sets/src/mage/cards/b/BloodAspirant.java

diff --git a/Mage.Sets/src/mage/cards/b/BloodAspirant.java b/Mage.Sets/src/mage/cards/b/BloodAspirant.java
new file mode 100644
index 0000000000..7656ea802e
--- /dev/null
+++ b/Mage.Sets/src/mage/cards/b/BloodAspirant.java
@@ -0,0 +1,104 @@
+package mage.cards.b;
+
+import mage.MageInt;
+import mage.abilities.Ability;
+import mage.abilities.TriggeredAbilityImpl;
+import mage.abilities.common.SimpleActivatedAbility;
+import mage.abilities.costs.common.SacrificeTargetCost;
+import mage.abilities.costs.common.TapSourceCost;
+import mage.abilities.costs.mana.ManaCostsImpl;
+import mage.abilities.effects.common.DamageTargetEffect;
+import mage.abilities.effects.common.combat.CantBlockTargetEffect;
+import mage.abilities.effects.common.counter.AddCountersSourceEffect;
+import mage.cards.CardImpl;
+import mage.cards.CardSetInfo;
+import mage.constants.CardType;
+import mage.constants.Duration;
+import mage.constants.SubType;
+import mage.constants.Zone;
+import mage.counters.CounterType;
+import mage.filter.common.FilterControlledPermanent;
+import mage.filter.predicate.Predicates;
+import mage.filter.predicate.mageobject.CardTypePredicate;
+import mage.game.Game;
+import mage.game.events.GameEvent;
+import mage.target.common.TargetControlledPermanent;
+
+import java.util.UUID;
+
+/**
+ * @author TheElk801
+ */
+public final class BloodAspirant extends CardImpl {
+
+    private static final FilterControlledPermanent filter = new FilterControlledPermanent("a creature or enchantment");
+
+    static {
+        filter.add(Predicates.or(
+                new CardTypePredicate(CardType.CREATURE),
+                new CardTypePredicate(CardType.ENCHANTMENT)
+        ));
+    }
+
+    public BloodAspirant(UUID ownerId, CardSetInfo setInfo) {
+        super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{R}");
+
+        this.subtype.add(SubType.SATYR);
+        this.subtype.add(SubType.BERSERKER);
+        this.power = new MageInt(1);
+        this.toughness = new MageInt(1);
+
+        // Whenever you sacrifice a permanent, put a +1/+1 counter on Blood Aspirant.
+        this.addAbility(new BloodAspirantAbility());
+
+        // {1}{R}, {T}, Sacrifice a creature or enchantment: Blood Aspirant deals 1 damage to target creature. That creature can't block this turn.
+        Ability ability = new SimpleActivatedAbility(
+                new DamageTargetEffect(1), new ManaCostsImpl("{1}{R}")
+        );
+        ability.addCost(new TapSourceCost());
+        ability.addCost(new SacrificeTargetCost(new TargetControlledPermanent(filter)));
+        ability.addEffect(new CantBlockTargetEffect(Duration.EndOfTurn)
+                .setText("That creature can't block this turn."));
+        this.addAbility(ability);
+    }
+
+    private BloodAspirant(final BloodAspirant card) {
+        super(card);
+    }
+
+    @Override
+    public BloodAspirant copy() {
+        return new BloodAspirant(this);
+    }
+}
+
+class BloodAspirantAbility extends TriggeredAbilityImpl {
+
+    BloodAspirantAbility() {
+        super(Zone.BATTLEFIELD, new AddCountersSourceEffect(CounterType.P1P1.createInstance()));
+    }
+
+    private BloodAspirantAbility(final BloodAspirantAbility ability) {
+        super(ability);
+    }
+
+    @Override
+    public BloodAspirantAbility copy() {
+        return new BloodAspirantAbility(this);
+    }
+
+    @Override
+    public boolean checkEventType(GameEvent event, Game game) {
+        return event.getType() == GameEvent.EventType.SACRIFICED_PERMANENT;
+    }
+
+    @Override
+    public boolean checkTrigger(GameEvent event, Game game) {
+        return event.getPlayerId().equals(this.getControllerId());
+    }
+
+    @Override
+    public String getRule() {
+        return "Whenever you sacrifice a permanent, put a +1/+1 counter on {this}.";
+    }
+}
\ No newline at end of file
diff --git a/Mage.Sets/src/mage/sets/TherosBeyondDeath.java b/Mage.Sets/src/mage/sets/TherosBeyondDeath.java
index 899c13b20c..0679be80a8 100644
--- a/Mage.Sets/src/mage/sets/TherosBeyondDeath.java
+++ b/Mage.Sets/src/mage/sets/TherosBeyondDeath.java
@@ -36,6 +36,7 @@ public final class TherosBeyondDeath extends ExpansionSet {
         cards.add(new SetCardInfo("Athreos, Shroud-Veiled", 269, Rarity.MYTHIC, mage.cards.a.AthreosShroudVeiled.class));
         cards.add(new SetCardInfo("Atris, Oracle of Half-Truths", 209, Rarity.RARE, mage.cards.a.AtrisOracleOfHalfTruths.class));
         cards.add(new SetCardInfo("Banishing Light", 4, Rarity.UNCOMMON, mage.cards.b.BanishingLight.class));
+        cards.add(new SetCardInfo("Blood Aspirant", 128, Rarity.UNCOMMON, mage.cards.b.BloodAspirant.class));
         cards.add(new SetCardInfo("Brine Giant", 44, Rarity.COMMON, mage.cards.b.BrineGiant.class));
         cards.add(new SetCardInfo("Chainweb Aracnir", 167, Rarity.UNCOMMON, mage.cards.c.ChainwebAracnir.class));
         cards.add(new SetCardInfo("Cling to Dust", 87, Rarity.UNCOMMON, mage.cards.c.ClingToDust.class));