From c6cc9bd83f71e3493477e8de61a08225201852f8 Mon Sep 17 00:00:00 2001 From: Daniel Bomar Date: Wed, 29 Jun 2022 11:55:30 -0500 Subject: [PATCH] [NCC] Implemented Dogged Detective --- .../src/mage/cards/d/DoggedDetective.java | 45 +++++++++++++++++++ .../src/mage/sets/NewCapennaCommander.java | 1 + .../DrawSecondCardTriggeredAbility.java | 15 ++++++- 3 files changed, 60 insertions(+), 1 deletion(-) create mode 100644 Mage.Sets/src/mage/cards/d/DoggedDetective.java diff --git a/Mage.Sets/src/mage/cards/d/DoggedDetective.java b/Mage.Sets/src/mage/cards/d/DoggedDetective.java new file mode 100644 index 00000000000..fa3e4d50c84 --- /dev/null +++ b/Mage.Sets/src/mage/cards/d/DoggedDetective.java @@ -0,0 +1,45 @@ +package mage.cards.d; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.DrawSecondCardTriggeredAbility; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.effects.common.ReturnSourceFromGraveyardToHandEffect; +import mage.abilities.effects.keyword.SurveilEffect; +import mage.constants.SubType; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.TargetController; +import mage.constants.Zone; + +/** + * + * @author weirddan455 + */ +public final class DoggedDetective extends CardImpl { + + public DoggedDetective(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{B}"); + + this.subtype.add(SubType.HUMAN); + this.subtype.add(SubType.ROGUE); + this.power = new MageInt(2); + this.toughness = new MageInt(1); + + // When Dogged Detective enters the battlefield, surveil 2. + this.addAbility(new EntersBattlefieldTriggeredAbility(new SurveilEffect(2))); + + // Whenever an opponent draws their second card each turn, you may return Dogged Detective from your graveyard to your hand. + this.addAbility(new DrawSecondCardTriggeredAbility(Zone.GRAVEYARD, new ReturnSourceFromGraveyardToHandEffect(), true, TargetController.OPPONENT)); + } + + private DoggedDetective(final DoggedDetective card) { + super(card); + } + + @Override + public DoggedDetective copy() { + return new DoggedDetective(this); + } +} diff --git a/Mage.Sets/src/mage/sets/NewCapennaCommander.java b/Mage.Sets/src/mage/sets/NewCapennaCommander.java index 6c0c546a0d2..ffd3d906edd 100644 --- a/Mage.Sets/src/mage/sets/NewCapennaCommander.java +++ b/Mage.Sets/src/mage/sets/NewCapennaCommander.java @@ -104,6 +104,7 @@ public final class NewCapennaCommander extends ExpansionSet { cards.add(new SetCardInfo("Dimir Signet", 365, Rarity.COMMON, mage.cards.d.DimirSignet.class)); cards.add(new SetCardInfo("Disciple of Bolas", 247, Rarity.RARE, mage.cards.d.DiscipleOfBolas.class)); cards.add(new SetCardInfo("Dodgy Jalopy", 58, Rarity.RARE, mage.cards.d.DodgyJalopy.class)); + cards.add(new SetCardInfo("Dogged Detective", 35, Rarity.RARE, mage.cards.d.DoggedDetective.class)); cards.add(new SetCardInfo("Double Vision", 267, Rarity.RARE, mage.cards.d.DoubleVision.class)); cards.add(new SetCardInfo("Dragonlord Ojutai", 337, Rarity.MYTHIC, mage.cards.d.DragonlordOjutai.class)); cards.add(new SetCardInfo("Drana, Liberator of Malakir", 248, Rarity.MYTHIC, mage.cards.d.DranaLiberatorOfMalakir.class)); diff --git a/Mage/src/main/java/mage/abilities/common/DrawSecondCardTriggeredAbility.java b/Mage/src/main/java/mage/abilities/common/DrawSecondCardTriggeredAbility.java index 537ce0a45c9..ba9b0d17e75 100644 --- a/Mage/src/main/java/mage/abilities/common/DrawSecondCardTriggeredAbility.java +++ b/Mage/src/main/java/mage/abilities/common/DrawSecondCardTriggeredAbility.java @@ -10,6 +10,7 @@ import mage.constants.WatcherScope; import mage.constants.Zone; import mage.game.Game; import mage.game.events.GameEvent; +import mage.players.Player; import mage.watchers.Watcher; import java.util.*; @@ -29,7 +30,11 @@ public class DrawSecondCardTriggeredAbility extends TriggeredAbilityImpl { } public DrawSecondCardTriggeredAbility(Effect effect, boolean optional, TargetController targetController) { - super(Zone.BATTLEFIELD, effect, optional); + this(Zone.BATTLEFIELD, effect, optional, targetController); + } + + public DrawSecondCardTriggeredAbility(Zone zone, Effect effect, boolean optional, TargetController targetController) { + super(zone, effect, optional); this.addWatcher(new DrawSecondCardWatcher()); this.targetController = targetController; this.addHint(hint); @@ -58,6 +63,12 @@ public class DrawSecondCardTriggeredAbility extends TriggeredAbilityImpl { return false; } break; + case OPPONENT: + Player controller = game.getPlayer(controllerId); + if (controller == null || !controller.hasOpponent(event.getPlayerId(), game)) { + return false; + } + break; default: throw new IllegalArgumentException("TargetController " + targetController + " not supported"); } @@ -71,6 +82,8 @@ public class DrawSecondCardTriggeredAbility extends TriggeredAbilityImpl { return "Whenever you draw your second card each turn, "; case ACTIVE: return "Whenever a player draws their second card during their turn, "; + case OPPONENT: + return "Whenever an opponent draws their second card each turn, "; default: throw new IllegalArgumentException("TargetController " + targetController + " not supported"); }