From c94ef8dbc523ff4510445f792d336ce6cfe11ffd Mon Sep 17 00:00:00 2001 From: Evan Kranzler Date: Wed, 9 Jan 2019 12:04:51 -0500 Subject: [PATCH] Implemented Dovin's Acuity --- Mage.Sets/src/mage/cards/d/DovinsAcuity.java | 72 +++++++++++++++++++ .../src/mage/sets/RavnicaAllegiance.java | 1 + 2 files changed, 73 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/d/DovinsAcuity.java diff --git a/Mage.Sets/src/mage/cards/d/DovinsAcuity.java b/Mage.Sets/src/mage/cards/d/DovinsAcuity.java new file mode 100644 index 00000000000..96efb5f9772 --- /dev/null +++ b/Mage.Sets/src/mage/cards/d/DovinsAcuity.java @@ -0,0 +1,72 @@ +package mage.cards.d; + +import mage.abilities.Ability; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.common.SpellCastControllerTriggeredAbility; +import mage.abilities.condition.Condition; +import mage.abilities.decorator.ConditionalTriggeredAbility; +import mage.abilities.effects.common.DrawCardSourceControllerEffect; +import mage.abilities.effects.common.GainLifeEffect; +import mage.abilities.effects.common.ReturnToHandSourceEffect; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.TurnPhase; +import mage.filter.FilterSpell; +import mage.filter.predicate.mageobject.CardTypePredicate; +import mage.game.Game; + +import java.util.EnumSet; +import java.util.Set; +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class DovinsAcuity extends CardImpl { + + private static final FilterSpell filter = new FilterSpell(); + + static { + filter.add(new CardTypePredicate(CardType.INSTANT)); + } + + public DovinsAcuity(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{W}{U}"); + + // When Dovin's Acuity enters the battlefield, you gain 2 life and draw a card. + Ability ability = new EntersBattlefieldTriggeredAbility(new GainLifeEffect(2)); + ability.addEffect(new DrawCardSourceControllerEffect(1).setText("and draw a card")); + this.addAbility(ability); + + // Whenever you cast an instant spell during your main phase, you may return Dovin's Acuity to its owner's hand. + this.addAbility(new ConditionalTriggeredAbility( + new SpellCastControllerTriggeredAbility( + new ReturnToHandSourceEffect(true), filter, true + ), DovinsAcuityCondition.instance, + "Whenever you cast an instant spell during your main phase, " + + "you may return {this} to its owner's hand." + )); + } + + private DovinsAcuity(final DovinsAcuity card) { + super(card); + } + + @Override + public DovinsAcuity copy() { + return new DovinsAcuity(this); + } +} + +enum DovinsAcuityCondition implements Condition { + + instance; + private static final Set turnPhases = EnumSet.of(TurnPhase.PRECOMBAT_MAIN, TurnPhase.POSTCOMBAT_MAIN); + + @Override + public boolean apply(Game game, Ability source) { + return game.isActivePlayer(source.getControllerId()) + && turnPhases.contains(game.getTurn().getPhase().getType()); + } +} \ No newline at end of file diff --git a/Mage.Sets/src/mage/sets/RavnicaAllegiance.java b/Mage.Sets/src/mage/sets/RavnicaAllegiance.java index e54767dfd85..670de0fd1fb 100644 --- a/Mage.Sets/src/mage/sets/RavnicaAllegiance.java +++ b/Mage.Sets/src/mage/sets/RavnicaAllegiance.java @@ -65,6 +65,7 @@ public final class RavnicaAllegiance extends ExpansionSet { cards.add(new SetCardInfo("Depose // Deploy", 225, Rarity.UNCOMMON, mage.cards.d.DeposeDeploy.class)); cards.add(new SetCardInfo("Deputy of Detention", 165, Rarity.RARE, mage.cards.d.DeputyOfDetention.class)); cards.add(new SetCardInfo("Domri, Chaos Bringer", 166, Rarity.MYTHIC, mage.cards.d.DomriChaosBringer.class)); + cards.add(new SetCardInfo("Dovin's Acuity", 168, Rarity.UNCOMMON, mage.cards.d.DovinsAcuity.class)); cards.add(new SetCardInfo("Dovin, Grand Arbiter", 167, Rarity.MYTHIC, mage.cards.d.DovinGrandArbiter.class)); cards.add(new SetCardInfo("Drill Bit", 73, Rarity.UNCOMMON, mage.cards.d.DrillBit.class)); cards.add(new SetCardInfo("Electrodominance", 99, Rarity.RARE, mage.cards.e.Electrodominance.class));