From 5d61b8fb11d7d9fa86211c27c335a105048b6da5 Mon Sep 17 00:00:00 2001 From: jmlundeen Date: Wed, 5 Mar 2025 21:49:28 -0600 Subject: [PATCH] [DRC] Pia Nalaar, Chief Mechanic --- .../mage/cards/p/PiaNalaarChiefMechanic.java | 98 +++++++++++++++++++ .../src/mage/sets/AetherdriftCommander.java | 1 + .../permanent/token/NalaarAetherjetToken.java | 28 ++++++ 3 files changed, 127 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/p/PiaNalaarChiefMechanic.java create mode 100644 Mage/src/main/java/mage/game/permanent/token/NalaarAetherjetToken.java diff --git a/Mage.Sets/src/mage/cards/p/PiaNalaarChiefMechanic.java b/Mage.Sets/src/mage/cards/p/PiaNalaarChiefMechanic.java new file mode 100644 index 00000000000..02b816c6268 --- /dev/null +++ b/Mage.Sets/src/mage/cards/p/PiaNalaarChiefMechanic.java @@ -0,0 +1,98 @@ +package mage.cards.p; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.OneOrMoreCombatDamagePlayerTriggeredAbility; +import mage.abilities.costs.Cost; +import mage.abilities.costs.common.PayEnergyCost; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.counter.GetEnergyCountersControllerEffect; +import mage.abilities.triggers.BeginningOfEndStepTriggeredAbility; +import mage.constants.*; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.counters.CounterType; +import mage.filter.common.FilterCreaturePermanent; +import mage.game.Game; +import mage.game.permanent.token.NalaarAetherjetToken; +import mage.game.permanent.token.Token; +import mage.players.Player; + +/** + * + * @author Jmlundeen + */ +public final class PiaNalaarChiefMechanic extends CardImpl { + + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("artifact creatures you control"); + + static { + filter.add(TargetController.YOU.getControllerPredicate()); + } + + public PiaNalaarChiefMechanic(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{G}{U}{R}"); + + this.supertype.add(SuperType.LEGENDARY); + this.subtype.add(SubType.HUMAN); + this.subtype.add(SubType.ARTIFICER); + this.power = new MageInt(2); + this.toughness = new MageInt(4); + + // Whenever one or more artifact creatures you control deal combat damage to a player, you get {E}{E}. + this.addAbility(new OneOrMoreCombatDamagePlayerTriggeredAbility( + new GetEnergyCountersControllerEffect(2), filter) + ); + + // At the beginning of your end step, you may pay one or more {E}. If you do, create an X/X colorless Vehicle artifact token named Nalaar Aetherjet with flying and crew 2, where X is the amount of {E} spent this way. + this.addAbility(new BeginningOfEndStepTriggeredAbility(new PiaNalaarChiefMechanicEffect(), true)); + } + + private PiaNalaarChiefMechanic(final PiaNalaarChiefMechanic card) { + super(card); + } + + @Override + public PiaNalaarChiefMechanic copy() { + return new PiaNalaarChiefMechanic(this); + } +} + +class PiaNalaarChiefMechanicEffect extends OneShotEffect { + + public PiaNalaarChiefMechanicEffect() { + super(Outcome.Benefit); + staticText = "you may pay one or more {E}. If you do, create an X/X colorless Vehicle artifact token " + + "named Nalaar Aetherjet with flying and crew 2, where X is the amount of {E} spent this way"; + } + + public PiaNalaarChiefMechanicEffect(final PiaNalaarChiefMechanicEffect effect) { + super(effect); + } + + @Override + public PiaNalaarChiefMechanicEffect copy() { + return new PiaNalaarChiefMechanicEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player controller = game.getPlayer(source.getControllerId()); + if (controller == null) { + return false; + } + int energyToPay = controller.getAmount(1, controller.getCountersCount(CounterType.ENERGY), + "Pay 1 or more {E}", game); + if (energyToPay == 0) { + return true; + } + Cost cost = new PayEnergyCost(energyToPay); + if (cost.pay(source, game, source, controller.getId(), true)) { + Token token = new NalaarAetherjetToken(energyToPay); + token.putOntoBattlefield(1, game, source); + return true; + } + return false; + } +} \ No newline at end of file diff --git a/Mage.Sets/src/mage/sets/AetherdriftCommander.java b/Mage.Sets/src/mage/sets/AetherdriftCommander.java index 321005e2899..dcc3eb1dc9c 100644 --- a/Mage.Sets/src/mage/sets/AetherdriftCommander.java +++ b/Mage.Sets/src/mage/sets/AetherdriftCommander.java @@ -124,6 +124,7 @@ public final class AetherdriftCommander extends ExpansionSet { cards.add(new SetCardInfo("Path of Ancestry", 61, Rarity.COMMON, mage.cards.p.PathOfAncestry.class)); cards.add(new SetCardInfo("Peema Aether-Seer", 113, Rarity.UNCOMMON, mage.cards.p.PeemaAetherSeer.class)); cards.add(new SetCardInfo("Peema Trailblazer", 14, Rarity.RARE, mage.cards.p.PeemaTrailblazer.class)); + cards.add(new SetCardInfo("Pia Nalaar, Chief Mechanic", 2, Rarity.MYTHIC, mage.cards.p.PiaNalaarChiefMechanic.class)); cards.add(new SetCardInfo("Pia and Kiran Nalaar", 105, Rarity.RARE, mage.cards.p.PiaAndKiranNalaar.class)); cards.add(new SetCardInfo("Plague Belcher", 97, Rarity.RARE, mage.cards.p.PlagueBelcher.class)); cards.add(new SetCardInfo("Prairie Stream", 167, Rarity.RARE, mage.cards.p.PrairieStream.class)); diff --git a/Mage/src/main/java/mage/game/permanent/token/NalaarAetherjetToken.java b/Mage/src/main/java/mage/game/permanent/token/NalaarAetherjetToken.java new file mode 100644 index 00000000000..59128ff8e5d --- /dev/null +++ b/Mage/src/main/java/mage/game/permanent/token/NalaarAetherjetToken.java @@ -0,0 +1,28 @@ +package mage.game.permanent.token; + +import mage.MageInt; +import mage.abilities.keyword.CrewAbility; +import mage.abilities.keyword.FlyingAbility; +import mage.constants.CardType; +import mage.constants.SubType; + +public class NalaarAetherjetToken extends TokenImpl{ + + public NalaarAetherjetToken(int xValue) { + super("Nalaar Aetherjet", "X/X colorless Vehicle artifact token named Nalaar Aetherjet with flying and crew 2"); + cardType.add(CardType.ARTIFACT); + subtype.add(SubType.VEHICLE); + power = new MageInt(xValue); + toughness = new MageInt(xValue); + addAbility(FlyingAbility.getInstance()); + addAbility(new CrewAbility(2)); + } + + private NalaarAetherjetToken(final NalaarAetherjetToken token) { + super(token); + } + + public NalaarAetherjetToken copy() { + return new NalaarAetherjetToken(this); + } +}