From ac6577eafe443faa22b393d7370773c34f4bc8cd Mon Sep 17 00:00:00 2001 From: Evan Kranzler Date: Mon, 26 Oct 2020 19:47:15 -0400 Subject: [PATCH] [CMR] Implemented Bladegriff Prototype --- .../src/mage/cards/b/BladegriffPrototype.java | 104 ++++++++++++++++++ Mage.Sets/src/mage/cards/b/BlindZealot.java | 2 +- Mage.Sets/src/mage/sets/CommanderLegends.java | 1 + 3 files changed, 106 insertions(+), 1 deletion(-) create mode 100644 Mage.Sets/src/mage/cards/b/BladegriffPrototype.java diff --git a/Mage.Sets/src/mage/cards/b/BladegriffPrototype.java b/Mage.Sets/src/mage/cards/b/BladegriffPrototype.java new file mode 100644 index 00000000000..64655b2405f --- /dev/null +++ b/Mage.Sets/src/mage/cards/b/BladegriffPrototype.java @@ -0,0 +1,104 @@ +package mage.cards.b; + +import mage.MageInt; +import mage.abilities.TriggeredAbilityImpl; +import mage.abilities.effects.common.DestroyTargetEffect; +import mage.abilities.keyword.FlyingAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.SubType; +import mage.constants.Zone; +import mage.filter.FilterPermanent; +import mage.filter.common.FilterNonlandPermanent; +import mage.filter.predicate.Predicates; +import mage.filter.predicate.permanent.ControllerIdPredicate; +import mage.game.Game; +import mage.game.events.DamagedEvent; +import mage.game.events.GameEvent; +import mage.players.Player; +import mage.target.TargetPermanent; + +import java.util.UUID; +import java.util.stream.Collectors; + +/** + * @author TheElk801 + */ +public final class BladegriffPrototype extends CardImpl { + + public BladegriffPrototype(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{5}"); + + this.subtype.add(SubType.GRIFFIN); + this.power = new MageInt(3); + this.toughness = new MageInt(2); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + + // Whenever Bladegriff Prototype deals combat damage to a player, destroy target nonland permanent of that player's choice that one of your opponents controls. + this.addAbility(new BladegriffPrototypeAbility()); + } + + private BladegriffPrototype(final BladegriffPrototype card) { + super(card); + } + + @Override + public BladegriffPrototype copy() { + return new BladegriffPrototype(this); + } +} + +class BladegriffPrototypeAbility extends TriggeredAbilityImpl { + + BladegriffPrototypeAbility() { + super(Zone.BATTLEFIELD, new DestroyTargetEffect(), false); + } + + private BladegriffPrototypeAbility(final BladegriffPrototypeAbility ability) { + super(ability); + } + + @Override + public BladegriffPrototypeAbility copy() { + return new BladegriffPrototypeAbility(this); + } + + @Override + public boolean checkEventType(GameEvent event, Game game) { + return event.getType() == GameEvent.EventType.DAMAGED_PLAYER; + } + + @Override + public boolean checkTrigger(GameEvent event, Game game) { + Player player = game.getPlayer(getControllerId()); + if (player == null + || !event.getSourceId().equals(this.sourceId) + || !((DamagedEvent) event).isCombatDamage()) { + return false; + } + FilterPermanent filter = new FilterNonlandPermanent( + "nonland permanent controlled by an opponent of " + player.getName() + ); + filter.add(Predicates.or( + game.getOpponents(getControllerId()) + .stream() + .map(ControllerIdPredicate::new) + .collect(Collectors.toSet()) + )); + TargetPermanent target = new TargetPermanent(filter); + target.setTargetController(event.getPlayerId()); + this.getTargets().clear(); + this.addTarget(target); + return true; + } + + @Override + public String getRule() { + return "Whenever {this} deals combat damage to a player, " + + "destroy target nonland permanent of that player's choice " + + "that one of your opponents controls."; + } +} diff --git a/Mage.Sets/src/mage/cards/b/BlindZealot.java b/Mage.Sets/src/mage/cards/b/BlindZealot.java index 3c7e5b55f82..63f8d3ba6b0 100644 --- a/Mage.Sets/src/mage/cards/b/BlindZealot.java +++ b/Mage.Sets/src/mage/cards/b/BlindZealot.java @@ -91,6 +91,6 @@ class BlindZealotTriggeredAbility extends TriggeredAbilityImpl { @Override public String getRule() { return "Whenever {this} deals combat damage to a player, you may sacrifice it. " - + "If you do, destroy target creature that player controls"; + + "If you do, destroy target creature that player controls."; } } diff --git a/Mage.Sets/src/mage/sets/CommanderLegends.java b/Mage.Sets/src/mage/sets/CommanderLegends.java index 7384f7f861a..3482f5ed8c3 100644 --- a/Mage.Sets/src/mage/sets/CommanderLegends.java +++ b/Mage.Sets/src/mage/sets/CommanderLegends.java @@ -28,6 +28,7 @@ public final class CommanderLegends extends ExpansionSet { this.maxCardNumberInBooster = 361; cards.add(new SetCardInfo("Alena, Kessig Trapper", 160, Rarity.UNCOMMON, mage.cards.a.AlenaKessigTrapper.class)); + cards.add(new SetCardInfo("Bladegriff Prototype", 300, Rarity.RARE, mage.cards.b.BladegriffPrototype.class)); cards.add(new SetCardInfo("Briarblade Adept", 111, Rarity.COMMON, mage.cards.b.BriarbladeAdept.class)); cards.add(new SetCardInfo("Command Tower", 350, Rarity.COMMON, mage.cards.c.CommandTower.class)); cards.add(new SetCardInfo("Commander's Sphere", 306, Rarity.COMMON, mage.cards.c.CommandersSphere.class));