From ed3f6a7c83db5e2c5c543c7b5d5a2d213c7f4e6b Mon Sep 17 00:00:00 2001 From: Evan Kranzler Date: Fri, 9 Apr 2021 17:31:13 -0400 Subject: [PATCH] [STX] Implemented Devastating Mastery --- .../src/mage/cards/b/BalefulMastery.java | 9 +- .../src/mage/cards/d/DevastatingMastery.java | 95 +++++++++++++++++++ .../mage/sets/StrixhavenSchoolOfMages.java | 1 + 3 files changed, 101 insertions(+), 4 deletions(-) create mode 100644 Mage.Sets/src/mage/cards/d/DevastatingMastery.java diff --git a/Mage.Sets/src/mage/cards/b/BalefulMastery.java b/Mage.Sets/src/mage/cards/b/BalefulMastery.java index 790a5db1585..5c92ae781df 100644 --- a/Mage.Sets/src/mage/cards/b/BalefulMastery.java +++ b/Mage.Sets/src/mage/cards/b/BalefulMastery.java @@ -48,7 +48,7 @@ public final class BalefulMastery extends CardImpl { class BalefulMasteryAlternativeCostEffect extends OneShotEffect { - UUID alternativeCostOriginalID; + private final UUID alternativeCostOriginalID; BalefulMasteryAlternativeCostEffect(UUID alternativeCostOriginalID) { super(Outcome.Detriment); @@ -56,7 +56,7 @@ class BalefulMasteryAlternativeCostEffect extends OneShotEffect { this.alternativeCostOriginalID = alternativeCostOriginalID; } - BalefulMasteryAlternativeCostEffect(BalefulMasteryAlternativeCostEffect effect) { + private BalefulMasteryAlternativeCostEffect(BalefulMasteryAlternativeCostEffect effect) { super(effect); this.alternativeCostOriginalID = effect.alternativeCostOriginalID; } @@ -68,8 +68,9 @@ class BalefulMasteryAlternativeCostEffect extends OneShotEffect { @Override public boolean apply(Game game, Ability source) { - boolean wasActivated = AlternativeCostSourceAbility.getActivatedStatus(game, source, this.alternativeCostOriginalID, false); - if (!wasActivated) { + if (!AlternativeCostSourceAbility.getActivatedStatus( + game, source, this.alternativeCostOriginalID, false + )) { return false; } diff --git a/Mage.Sets/src/mage/cards/d/DevastatingMastery.java b/Mage.Sets/src/mage/cards/d/DevastatingMastery.java new file mode 100644 index 00000000000..204e2298e46 --- /dev/null +++ b/Mage.Sets/src/mage/cards/d/DevastatingMastery.java @@ -0,0 +1,95 @@ +package mage.cards.d; + +import mage.abilities.Ability; +import mage.abilities.costs.AlternativeCostSourceAbility; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.DestroyAllEffect; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.cards.CardsImpl; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.Zone; +import mage.filter.StaticFilters; +import mage.game.Game; +import mage.players.Player; +import mage.target.TargetPermanent; +import mage.target.common.TargetOpponent; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class DevastatingMastery extends CardImpl { + + public DevastatingMastery(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{2}{W}{W}{W}{W}"); + + // You may pay {2}{W}{W} rather than pay this spell's mana cost. + Ability costAbility = new AlternativeCostSourceAbility(new ManaCostsImpl<>("{2}{W}{W}")); + this.addAbility(costAbility); + + // If the {2}{W}{W} cost was paid, an opponent chooses up to two nonland permanents they control and returns them to their owner's hand. + this.getSpellAbility().addEffect(new DevastatingMasteryAlternativeCostEffect(costAbility.getOriginalId())); + + // Destroy all nonland permanents. + this.getSpellAbility().addEffect(new DestroyAllEffect(StaticFilters.FILTER_PERMANENTS_NON_LAND)); + } + + private DevastatingMastery(final DevastatingMastery card) { + super(card); + } + + @Override + public DevastatingMastery copy() { + return new DevastatingMastery(this); + } +} + +class DevastatingMasteryAlternativeCostEffect extends OneShotEffect { + + private final UUID alternativeCostOriginalID; + + DevastatingMasteryAlternativeCostEffect(UUID alternativeCostOriginalID) { + super(Outcome.Detriment); + staticText = "if the {2}{W}{W} cost was paid, an opponent chooses up to two nonland permanents " + + "they control and returns them to their owner's hand.
"; + this.alternativeCostOriginalID = alternativeCostOriginalID; + } + + private DevastatingMasteryAlternativeCostEffect(DevastatingMasteryAlternativeCostEffect effect) { + super(effect); + this.alternativeCostOriginalID = effect.alternativeCostOriginalID; + } + + @Override + public DevastatingMasteryAlternativeCostEffect copy() { + return new DevastatingMasteryAlternativeCostEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + if (!AlternativeCostSourceAbility.getActivatedStatus( + game, source, this.alternativeCostOriginalID, false + )) { + return false; + } + + Player player = game.getPlayer(source.getControllerId()); + TargetOpponent targetOpponent = new TargetOpponent(true); + if (!player.chooseTarget(Outcome.DrawCard, targetOpponent, source, game)) { + return false; + } + Player opponent = game.getPlayer(targetOpponent.getFirstTarget()); + if (opponent == null) { + return false; + } + TargetPermanent target = new TargetPermanent( + 0, 2, StaticFilters.FILTER_PERMANENTS_NON_LAND, true + ); + opponent.choose(Outcome.ReturnToHand, target, source.getSourceId(), game); + return opponent.moveCards(new CardsImpl(target.getTargets()), Zone.HAND, source, game); + } +} diff --git a/Mage.Sets/src/mage/sets/StrixhavenSchoolOfMages.java b/Mage.Sets/src/mage/sets/StrixhavenSchoolOfMages.java index df3c8805f82..38a1d183dc4 100644 --- a/Mage.Sets/src/mage/sets/StrixhavenSchoolOfMages.java +++ b/Mage.Sets/src/mage/sets/StrixhavenSchoolOfMages.java @@ -84,6 +84,7 @@ public final class StrixhavenSchoolOfMages extends ExpansionSet { cards.add(new SetCardInfo("Decisive Denial", 177, Rarity.UNCOMMON, mage.cards.d.DecisiveDenial.class)); cards.add(new SetCardInfo("Defend the Campus", 12, Rarity.COMMON, mage.cards.d.DefendTheCampus.class)); cards.add(new SetCardInfo("Detention Vortex", 13, Rarity.UNCOMMON, mage.cards.d.DetentionVortex.class)); + cards.add(new SetCardInfo("Devastating Mastery", 14, Rarity.RARE, mage.cards.d.DevastatingMastery.class)); cards.add(new SetCardInfo("Dina, Soul Steeper", 178, Rarity.UNCOMMON, mage.cards.d.DinaSoulSteeper.class)); cards.add(new SetCardInfo("Divide by Zero", 41, Rarity.UNCOMMON, mage.cards.d.DivideByZero.class)); cards.add(new SetCardInfo("Double Major", 179, Rarity.RARE, mage.cards.d.DoubleMajor.class));