From c2e0a5e8e609db261c89ee8ec7840695e5e51608 Mon Sep 17 00:00:00 2001 From: Evan Kranzler Date: Fri, 30 Oct 2020 19:28:19 -0400 Subject: [PATCH] [CMR] Implemented Numa, Joraga Chieftain --- .../src/mage/cards/n/NumaJoragaChieftain.java | 98 +++++++++++++++++++ Mage.Sets/src/mage/sets/CommanderLegends.java | 1 + .../common/TargetCreaturePermanentAmount.java | 6 +- 3 files changed, 102 insertions(+), 3 deletions(-) create mode 100644 Mage.Sets/src/mage/cards/n/NumaJoragaChieftain.java diff --git a/Mage.Sets/src/mage/cards/n/NumaJoragaChieftain.java b/Mage.Sets/src/mage/cards/n/NumaJoragaChieftain.java new file mode 100644 index 00000000000..92ee8d9e3be --- /dev/null +++ b/Mage.Sets/src/mage/cards/n/NumaJoragaChieftain.java @@ -0,0 +1,98 @@ +package mage.cards.n; + +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.BeginningOfCombatTriggeredAbility; +import mage.abilities.common.delayed.ReflexiveTriggeredAbility; +import mage.abilities.costs.mana.GenericManaCost; +import mage.abilities.costs.mana.ManaCosts; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.counter.DistributeCountersEffect; +import mage.abilities.keyword.PartnerAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.*; +import mage.counters.CounterType; +import mage.filter.FilterPermanent; +import mage.game.Game; +import mage.players.Player; +import mage.target.common.TargetCreaturePermanentAmount; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class NumaJoragaChieftain extends CardImpl { + + public NumaJoragaChieftain(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{G}"); + + this.addSuperType(SuperType.LEGENDARY); + this.subtype.add(SubType.ELF); + this.subtype.add(SubType.WARRIOR); + this.power = new MageInt(2); + this.toughness = new MageInt(2); + + // At the beginning of combat on your turn, you may pay {X}{X}. When you do, distribute X +1/+1 counters among any number of target Elves. + this.addAbility(new BeginningOfCombatTriggeredAbility( + new NumaJoragaChieftainEffect(), TargetController.YOU, false + )); + + // Partner + this.addAbility(PartnerAbility.getInstance()); + } + + private NumaJoragaChieftain(final NumaJoragaChieftain card) { + super(card); + } + + @Override + public NumaJoragaChieftain copy() { + return new NumaJoragaChieftain(this); + } +} + +class NumaJoragaChieftainEffect extends OneShotEffect { + + private static final FilterPermanent filter = new FilterPermanent(SubType.ELF, "Elves"); + + NumaJoragaChieftainEffect() { + super(Outcome.Benefit); + staticText = "you may pay {X}{X}. When you do, distribute X +1/+1 counters among any number of target Elves"; + } + + private NumaJoragaChieftainEffect(final NumaJoragaChieftainEffect effect) { + super(effect); + } + + @Override + public NumaJoragaChieftainEffect copy() { + return new NumaJoragaChieftainEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player player = game.getPlayer(source.getControllerId()); + if (player == null) { + return false; + } + ManaCosts cost = new ManaCostsImpl("{X}{X}"); + if (!player.chooseUse(Outcome.BoostCreature, "Pay " + cost.getText() + "?", source, game)) { + return false; + } + int costX = player.announceXMana(0, Integer.MAX_VALUE, "Announce the value for {X}", game, source); + cost.add(new GenericManaCost(2 * costX)); + if (!cost.pay(source, game, source.getSourceId(), source.getControllerId(), false, null)) { + return false; + } + ReflexiveTriggeredAbility ability = new ReflexiveTriggeredAbility( + new DistributeCountersEffect(CounterType.P1P1, costX, false, ""), + false, "distribute " + costX + " +1/+1 counters among any number of target Elves" + ); + ability.addTarget(new TargetCreaturePermanentAmount(costX, filter)); + game.fireReflexiveTriggeredAbility(ability, source); + return true; + } +} diff --git a/Mage.Sets/src/mage/sets/CommanderLegends.java b/Mage.Sets/src/mage/sets/CommanderLegends.java index 86964fdceb0..6f24465f23f 100644 --- a/Mage.Sets/src/mage/sets/CommanderLegends.java +++ b/Mage.Sets/src/mage/sets/CommanderLegends.java @@ -103,6 +103,7 @@ public final class CommanderLegends extends ExpansionSet { cards.add(new SetCardInfo("Nekusar, the Mindrazer", 529, Rarity.MYTHIC, mage.cards.n.NekusarTheMindrazer.class)); cards.add(new SetCardInfo("Ninth Bridge Patrol", 33, Rarity.COMMON, mage.cards.n.NinthBridgePatrol.class)); cards.add(new SetCardInfo("Null Caller", 140, Rarity.UNCOMMON, mage.cards.n.NullCaller.class)); + cards.add(new SetCardInfo("Numa, Joraga Chieftain", 246, Rarity.UNCOMMON, mage.cards.n.NumaJoragaChieftain.class)); cards.add(new SetCardInfo("Nymris, Oona's Trickster", 288, Rarity.RARE, mage.cards.n.NymrisOonasTrickster.class)); cards.add(new SetCardInfo("Omenspeaker", 83, Rarity.COMMON, mage.cards.o.Omenspeaker.class)); cards.add(new SetCardInfo("Path of Ancestry", 353, Rarity.COMMON, mage.cards.p.PathOfAncestry.class)); diff --git a/Mage/src/main/java/mage/target/common/TargetCreaturePermanentAmount.java b/Mage/src/main/java/mage/target/common/TargetCreaturePermanentAmount.java index 855cb085166..921dea995d9 100644 --- a/Mage/src/main/java/mage/target/common/TargetCreaturePermanentAmount.java +++ b/Mage/src/main/java/mage/target/common/TargetCreaturePermanentAmount.java @@ -1,8 +1,8 @@ package mage.target.common; import mage.abilities.dynamicvalue.DynamicValue; +import mage.filter.FilterPermanent; import mage.filter.StaticFilters; -import mage.filter.common.FilterCreaturePermanent; /** * @author North @@ -17,11 +17,11 @@ public class TargetCreaturePermanentAmount extends TargetPermanentAmount { this(amount, StaticFilters.FILTER_PERMANENT_CREATURE); } - public TargetCreaturePermanentAmount(int amount, FilterCreaturePermanent filter) { + public TargetCreaturePermanentAmount(int amount, FilterPermanent filter) { super(amount, filter); } - public TargetCreaturePermanentAmount(DynamicValue amount, FilterCreaturePermanent filter) { + public TargetCreaturePermanentAmount(DynamicValue amount, FilterPermanent filter) { super(amount, filter); }