From 751739bb2bacf93b8d3e30cc9ee6775a504c142f Mon Sep 17 00:00:00 2001 From: theelk801 Date: Sun, 15 Oct 2023 17:48:52 -0400 Subject: [PATCH] [WHO] Implement Jo Grant --- Mage.Sets/src/mage/cards/j/JoGrant.java | 89 +++++++++++++++++++++++++ Mage.Sets/src/mage/sets/DoctorWho.java | 1 + 2 files changed, 90 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/j/JoGrant.java diff --git a/Mage.Sets/src/mage/cards/j/JoGrant.java b/Mage.Sets/src/mage/cards/j/JoGrant.java new file mode 100644 index 00000000000..d6c4ef8593e --- /dev/null +++ b/Mage.Sets/src/mage/cards/j/JoGrant.java @@ -0,0 +1,89 @@ +package mage.cards.j; + +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.CycleControllerTriggeredAbility; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.ContinuousEffectImpl; +import mage.abilities.effects.common.counter.AddCountersSourceEffect; +import mage.abilities.keyword.CyclingAbility; +import mage.abilities.keyword.DoctorsCompanionAbility; +import mage.cards.Card; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.*; +import mage.counters.CounterType; +import mage.filter.FilterCard; +import mage.filter.common.FilterHistoricCard; +import mage.game.Game; +import mage.players.Player; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class JoGrant extends CardImpl { + + public JoGrant(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{W}"); + + this.supertype.add(SuperType.LEGENDARY); + this.subtype.add(SubType.HUMAN); + this.subtype.add(SubType.SOLDIER); + this.power = new MageInt(3); + this.toughness = new MageInt(2); + + // Each historic card in your hand has cycling {2}{W}. + this.addAbility(new SimpleStaticAbility(new JoGrantEffect())); + + // Whenever you cycle a card, put a +1/+1 counter on Jo Grant. + this.addAbility(new CycleControllerTriggeredAbility( + new AddCountersSourceEffect(CounterType.P1P1.createInstance()) + )); + + // Doctor's companion + this.addAbility(DoctorsCompanionAbility.getInstance()); + } + + private JoGrant(final JoGrant card) { + super(card); + } + + @Override + public JoGrant copy() { + return new JoGrant(this); + } +} + +class JoGrantEffect extends ContinuousEffectImpl { + + private static final FilterCard filter = new FilterHistoricCard(); + + JoGrantEffect() { + super(Duration.WhileOnBattlefield, Layer.AbilityAddingRemovingEffects_6, SubLayer.NA, Outcome.AddAbility); + this.staticText = "each historic card in your hand has cycling {2}{W}"; + } + + private JoGrantEffect(final JoGrantEffect effect) { + super(effect); + } + + @Override + public JoGrantEffect copy() { + return new JoGrantEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player controller = game.getPlayer(source.getControllerId()); + if (controller == null) { + return false; + } + for (Card card : controller.getHand().getCards(filter, game)) { + game.getState().addOtherAbility(card, new CyclingAbility(new ManaCostsImpl<>("{2}{W}"))); + } + return true; + } +} diff --git a/Mage.Sets/src/mage/sets/DoctorWho.java b/Mage.Sets/src/mage/sets/DoctorWho.java index a9db840be9c..523749c9c2c 100644 --- a/Mage.Sets/src/mage/sets/DoctorWho.java +++ b/Mage.Sets/src/mage/sets/DoctorWho.java @@ -113,6 +113,7 @@ public final class DoctorWho extends ExpansionSet { cards.add(new SetCardInfo("Jamie McCrimmon", 105, Rarity.RARE, mage.cards.j.JamieMcCrimmon.class)); cards.add(new SetCardInfo("Jenny Flint", 136, Rarity.RARE, mage.cards.j.JennyFlint.class)); cards.add(new SetCardInfo("Jenny, Generated Anomaly", 137, Rarity.RARE, mage.cards.j.JennyGeneratedAnomaly.class)); + cards.add(new SetCardInfo("Jo Grant", 23, Rarity.RARE, mage.cards.j.JoGrant.class)); cards.add(new SetCardInfo("Judoon Enforcers", 138, Rarity.UNCOMMON, mage.cards.j.JudoonEnforcers.class)); cards.add(new SetCardInfo("K-9, Mark I", 47, Rarity.RARE, mage.cards.k.K9MarkI.class)); cards.add(new SetCardInfo("Karvanista, Loyal Lupari", 106, Rarity.RARE, mage.cards.k.KarvanistaLoyalLupari.class));