From b722eac8550fab55c221d00134e5cc9dbf330d8e Mon Sep 17 00:00:00 2001 From: Evan Kranzler Date: Mon, 2 Aug 2021 10:12:03 -0400 Subject: [PATCH] [AFC] Implemented Klauth, Unrivaled Ancient --- .../mage/cards/k/KlauthUnrivaledAncient.java | 132 ++++++++++++++++++ .../mage/sets/ForgottenRealmsCommander.java | 1 + 2 files changed, 133 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/k/KlauthUnrivaledAncient.java diff --git a/Mage.Sets/src/mage/cards/k/KlauthUnrivaledAncient.java b/Mage.Sets/src/mage/cards/k/KlauthUnrivaledAncient.java new file mode 100644 index 00000000000..4e85729c2f0 --- /dev/null +++ b/Mage.Sets/src/mage/cards/k/KlauthUnrivaledAncient.java @@ -0,0 +1,132 @@ +package mage.cards.k; + +import mage.ConditionalMana; +import mage.MageInt; +import mage.MageObject; +import mage.Mana; +import mage.abilities.Ability; +import mage.abilities.SpellAbility; +import mage.abilities.common.AttacksTriggeredAbility; +import mage.abilities.condition.Condition; +import mage.abilities.costs.Cost; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.keyword.FlyingAbility; +import mage.abilities.keyword.HasteAbility; +import mage.abilities.mana.conditional.ManaCondition; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.*; +import mage.filter.StaticFilters; +import mage.game.Game; +import mage.players.Player; + +import java.util.Arrays; +import java.util.List; +import java.util.Objects; +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class KlauthUnrivaledAncient extends CardImpl { + + public KlauthUnrivaledAncient(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{5}{R}{G}"); + + this.addSuperType(SuperType.LEGENDARY); + this.subtype.add(SubType.DRAGON); + this.power = new MageInt(4); + this.toughness = new MageInt(4); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + + // Haste + this.addAbility(HasteAbility.getInstance()); + + // Whenever Klauth, Unrivaled Ancient attacks, add X mana in any combination of colors, where X is the total power of attacking creatures. Spend this mana only to cast spells. Until end of turn, you don't lose this mana as steps and phases end. + this.addAbility(new AttacksTriggeredAbility(new KlauthUnrivaledAncientEffect())); + } + + private KlauthUnrivaledAncient(final KlauthUnrivaledAncient card) { + super(card); + } + + @Override + public KlauthUnrivaledAncient copy() { + return new KlauthUnrivaledAncient(this); + } +} + +class KlauthUnrivaledAncientEffect extends OneShotEffect { + + private static final List manaSymbols = Arrays.asList("W", "U", "B", "R", "G"); + + KlauthUnrivaledAncientEffect() { + super(Outcome.Benefit); + staticText = "add X mana in any combination of colors, where X is the total power of attacking creatures. " + + "Spend this mana only to cast spells. Until end of turn, you don't lose this mana as steps and phases end"; + } + + private KlauthUnrivaledAncientEffect(final KlauthUnrivaledAncientEffect effect) { + super(effect); + } + + @Override + public KlauthUnrivaledAncientEffect copy() { + return new KlauthUnrivaledAncientEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player player = game.getPlayer(source.getControllerId()); + if (player == null) { + return false; + } + int attackerPower = game + .getBattlefield() + .getActivePermanents( + StaticFilters.FILTER_ATTACKING_CREATURES, + source.getControllerId(), source.getSourceId(), game + ).stream() + .filter(Objects::nonNull) + .map(MageObject::getPower) + .mapToInt(MageInt::getValue) + .sum(); + List manaList = player.getMultiAmount( + outcome, manaSymbols, attackerPower, attackerPower, MultiAmountType.MANA, game + ); + player.getManaPool().addMana( + new KlauthUnrivaledAncientConditionalMana(manaList), game, source, false + ); + return true; + } +} + +class KlauthUnrivaledAncientConditionalMana extends ConditionalMana { + + public KlauthUnrivaledAncientConditionalMana(List manaList) { + super(new Mana( + manaList.get(0), + manaList.get(1), + manaList.get(2), + manaList.get(3), + manaList.get(4), + 0, 0, 0 + )); + addCondition(new KlauthUnrivaledAncientManaCondition()); + } +} + +class KlauthUnrivaledAncientManaCondition extends ManaCondition implements Condition { + + @Override + public boolean apply(Game game, Ability source) { + return source instanceof SpellAbility; + } + + @Override + public boolean apply(Game game, Ability source, UUID originalId, Cost costToPay) { + return apply(game, source); + } +} diff --git a/Mage.Sets/src/mage/sets/ForgottenRealmsCommander.java b/Mage.Sets/src/mage/sets/ForgottenRealmsCommander.java index 55a49c5e93c..4a347af8c16 100644 --- a/Mage.Sets/src/mage/sets/ForgottenRealmsCommander.java +++ b/Mage.Sets/src/mage/sets/ForgottenRealmsCommander.java @@ -135,6 +135,7 @@ public final class ForgottenRealmsCommander extends ExpansionSet { cards.add(new SetCardInfo("Karmic Guide", 68, Rarity.RARE, mage.cards.k.KarmicGuide.class)); cards.add(new SetCardInfo("Kenrith's Transformation", 162, Rarity.UNCOMMON, mage.cards.k.KenrithsTransformation.class)); cards.add(new SetCardInfo("Kindred Summons", 163, Rarity.RARE, mage.cards.k.KindredSummons.class)); + cards.add(new SetCardInfo("Klauth, Unrivaled Ancient", 50, Rarity.MYTHIC, mage.cards.k.KlauthUnrivaledAncient.class)); cards.add(new SetCardInfo("Knight of Autumn", 187, Rarity.RARE, mage.cards.k.KnightOfAutumn.class)); cards.add(new SetCardInfo("Light Up the Stage", 131, Rarity.UNCOMMON, mage.cards.l.LightUpTheStage.class)); cards.add(new SetCardInfo("Lightning Greaves", 331, Rarity.UNCOMMON, mage.cards.l.LightningGreaves.class));