diff --git a/Mage.Sets/src/mage/cards/m/MagnanimousMagistrate.java b/Mage.Sets/src/mage/cards/m/MagnanimousMagistrate.java new file mode 100644 index 0000000000..9726d7e732 --- /dev/null +++ b/Mage.Sets/src/mage/cards/m/MagnanimousMagistrate.java @@ -0,0 +1,102 @@ +package mage.cards.m; + +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.DiesCreatureTriggeredAbility; +import mage.abilities.common.EntersBattlefieldAbility; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.counter.AddCountersSourceEffect; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.*; +import mage.counters.CounterType; +import mage.filter.FilterPermanent; +import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.predicate.mageobject.AnotherPredicate; +import mage.filter.predicate.mageobject.ManaValuePredicate; +import mage.filter.predicate.permanent.TokenPredicate; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.players.Player; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class MagnanimousMagistrate extends CardImpl { + + private static final FilterPermanent filter + = new FilterControlledCreaturePermanent("another nontoken creature you control"); + + static { + filter.add(AnotherPredicate.instance); + filter.add(TokenPredicate.FALSE); + filter.add(new ManaValuePredicate(ComparisonType.MORE_THAN, 0)); + } + + public MagnanimousMagistrate(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{5}{W}"); + + this.subtype.add(SubType.HUMAN); + this.subtype.add(SubType.ADVISOR); + this.power = new MageInt(3); + this.toughness = new MageInt(4); + + // Magnanimous Magistrate enters the battlefield with five reprieve counters on it. + this.addAbility(new EntersBattlefieldAbility( + new AddCountersSourceEffect(CounterType.REPRIEVE.createInstance(5)), + "with five reprieve counters on it" + )); + + // Whenever another nontoken creature you control dies, if its mana value was 1 or greater, you may remove that many reprieve counters from Magnanimous Magistrate. If you do, return that card to the battlefield under its owner's control. + this.addAbility(new DiesCreatureTriggeredAbility(new MagnanimousMagistrateEffect(), false, filter)); + } + + private MagnanimousMagistrate(final MagnanimousMagistrate card) { + super(card); + } + + @Override + public MagnanimousMagistrate copy() { + return new MagnanimousMagistrate(this); + } +} + +class MagnanimousMagistrateEffect extends OneShotEffect { + + MagnanimousMagistrateEffect() { + super(Outcome.Benefit); + staticText = "if its mana value was 1 or greater, you may remove that many reprieve counters " + + "from {this}. If you do, return that card to the battlefield under its owner's control"; + } + + private MagnanimousMagistrateEffect(final MagnanimousMagistrateEffect effect) { + super(effect); + } + + @Override + public MagnanimousMagistrateEffect copy() { + return new MagnanimousMagistrateEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player player = game.getPlayer(source.getControllerId()); + Permanent sourcePermanent = source.getSourcePermanentIfItStillExists(game); + Permanent creature = (Permanent) getValue("creatureDied"); + if (player == null || sourcePermanent == null || creature == null + || sourcePermanent.getCounters(game).getCount(CounterType.REPRIEVE) < creature.getManaValue() + || game.getState().getZoneChangeCounter(creature.getId()) != creature.getZoneChangeCounter(game) + 1 + || !player.chooseUse(outcome, "Remove " + creature.getManaValue() + + " reprieve counters from " + sourcePermanent.getName() + '?', source, game)) { + return false; + } + sourcePermanent.removeCounters(CounterType.REPRIEVE.createInstance(creature.getManaValue()), source, game); + player.moveCards( + game.getCard(creature.getId()), Zone.BATTLEFIELD, source, game, + false, false, true, null + ); + return true; + } +} diff --git a/Mage.Sets/src/mage/sets/Jumpstart2022.java b/Mage.Sets/src/mage/sets/Jumpstart2022.java index 2b3a09533e..914c3c9ddd 100644 --- a/Mage.Sets/src/mage/sets/Jumpstart2022.java +++ b/Mage.Sets/src/mage/sets/Jumpstart2022.java @@ -445,6 +445,7 @@ public final class Jumpstart2022 extends ExpansionSet { cards.add(new SetCardInfo("Maalfeld Twins", 438, Rarity.COMMON, mage.cards.m.MaalfeldTwins.class)); cards.add(new SetCardInfo("Mad Ratter", 570, Rarity.UNCOMMON, mage.cards.m.MadRatter.class)); cards.add(new SetCardInfo("Magmatic Channeler", 571, Rarity.RARE, mage.cards.m.MagmaticChanneler.class)); + cards.add(new SetCardInfo("Magnanimous Magistrate", 7, Rarity.UNCOMMON, mage.cards.m.MagnanimousMagistrate.class)); cards.add(new SetCardInfo("Magnifying Glass", 95, Rarity.UNCOMMON, mage.cards.m.MagnifyingGlass.class)); cards.add(new SetCardInfo("Make a Stand", 211, Rarity.UNCOMMON, mage.cards.m.MakeAStand.class)); cards.add(new SetCardInfo("Mammoth Spider", 687, Rarity.COMMON, mage.cards.m.MammothSpider.class)); diff --git a/Mage/src/main/java/mage/counters/CounterType.java b/Mage/src/main/java/mage/counters/CounterType.java index e74ef99d2e..2a37084e8b 100644 --- a/Mage/src/main/java/mage/counters/CounterType.java +++ b/Mage/src/main/java/mage/counters/CounterType.java @@ -161,6 +161,7 @@ public enum CounterType { PUPA("pupa"), REACH("reach"), REPAIR("repair"), + REPRIEVE("reprieve"), RITUAL("ritual"), ROPE("rope"), RUST("rust"),