From e51ebbec936f8fc73a6ecfd3cf057c66c51bf29a Mon Sep 17 00:00:00 2001 From: Evan Kranzler Date: Mon, 12 Apr 2021 09:47:27 -0400 Subject: [PATCH] [C21] Implemented Felisa, Fang of Silverquill --- .../mage/cards/f/FelisaFangOfSilverquill.java | 104 ++++++++++++++++++ .../src/mage/sets/Commander2021Edition.java | 1 + .../common/DiesCreatureTriggeredAbility.java | 15 ++- 3 files changed, 112 insertions(+), 8 deletions(-) create mode 100644 Mage.Sets/src/mage/cards/f/FelisaFangOfSilverquill.java diff --git a/Mage.Sets/src/mage/cards/f/FelisaFangOfSilverquill.java b/Mage.Sets/src/mage/cards/f/FelisaFangOfSilverquill.java new file mode 100644 index 00000000000..db7be7dfbb0 --- /dev/null +++ b/Mage.Sets/src/mage/cards/f/FelisaFangOfSilverquill.java @@ -0,0 +1,104 @@ +package mage.cards.f; + +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.DiesCreatureTriggeredAbility; +import mage.abilities.dynamicvalue.DynamicValue; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.CreateTokenEffect; +import mage.abilities.keyword.FlyingAbility; +import mage.abilities.keyword.MentorAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.SubType; +import mage.constants.SuperType; +import mage.counters.Counter; +import mage.filter.FilterPermanent; +import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.predicate.Predicates; +import mage.filter.predicate.permanent.CounterAnyPredicate; +import mage.filter.predicate.permanent.TokenPredicate; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.game.permanent.token.SilverquillToken; + +import java.util.Map; +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class FelisaFangOfSilverquill extends CardImpl { + + private static final FilterPermanent filter + = new FilterControlledCreaturePermanent("nontoken creature you control"); + + static { + filter.add(Predicates.not(TokenPredicate.instance)); + filter.add(CounterAnyPredicate.instance); + } + + private static final String rule = "if it had counters on it, " + + "create X tapped 2/1 white and black Inkling creature tokens with flying, " + + "where X is the number of counters it had on it"; + + public FelisaFangOfSilverquill(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{W}{B}"); + + this.addSuperType(SuperType.LEGENDARY); + this.subtype.add(SubType.VAMPIRE); + this.subtype.add(SubType.WIZARD); + this.power = new MageInt(3); + this.toughness = new MageInt(2); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + + // Mentor + this.addAbility(new MentorAbility()); + + // Whenever a nontoken creature you control dies, if it had counters on it, create X tapped 2/1 white and black Inkling creature tokens with flying, where X is the number of counters it had on it. + this.addAbility(new DiesCreatureTriggeredAbility(new CreateTokenEffect( + new SilverquillToken(), FelisaFangOfSilverquillValue.instance, true, false + ).setText(rule), false, filter)); + } + + private FelisaFangOfSilverquill(final FelisaFangOfSilverquill card) { + super(card); + } + + @Override + public FelisaFangOfSilverquill copy() { + return new FelisaFangOfSilverquill(this); + } +} + +enum FelisaFangOfSilverquillValue implements DynamicValue { + instance; + + @Override + public int calculate(Game game, Ability sourceAbility, Effect effect) { + Permanent permanent = (Permanent) effect.getValue("creatureDied"); + if (permanent == null) { + return 0; + } + return permanent + .getCounters(game) + .entrySet() + .stream() + .map(Map.Entry::getValue) + .mapToInt(Counter::getCount) + .sum(); + } + + @Override + public FelisaFangOfSilverquillValue copy() { + return instance; + } + + @Override + public String getMessage() { + return ""; + } +} diff --git a/Mage.Sets/src/mage/sets/Commander2021Edition.java b/Mage.Sets/src/mage/sets/Commander2021Edition.java index 11c0c0b587e..06a26fb559a 100644 --- a/Mage.Sets/src/mage/sets/Commander2021Edition.java +++ b/Mage.Sets/src/mage/sets/Commander2021Edition.java @@ -94,6 +94,7 @@ public final class Commander2021Edition extends ExpansionSet { cards.add(new SetCardInfo("Ezzaroot Channeler", 60, Rarity.RARE, mage.cards.e.EzzarootChanneler.class)); cards.add(new SetCardInfo("Faithless Looting", 168, Rarity.COMMON, mage.cards.f.FaithlessLooting.class)); cards.add(new SetCardInfo("Feldon of the Third Path", 169, Rarity.MYTHIC, mage.cards.f.FeldonOfTheThirdPath.class)); + cards.add(new SetCardInfo("Felisa, Fang of Silverquill", 2, Rarity.MYTHIC, mage.cards.f.FelisaFangOfSilverquill.class)); cards.add(new SetCardInfo("Fiery Encore", 51, Rarity.RARE, mage.cards.f.FieryEncore.class)); cards.add(new SetCardInfo("Fiery Fall", 170, Rarity.COMMON, mage.cards.f.FieryFall.class)); cards.add(new SetCardInfo("Forgotten Ancient", 137, Rarity.RARE, mage.cards.f.ForgottenAncient.class)); diff --git a/Mage/src/main/java/mage/abilities/common/DiesCreatureTriggeredAbility.java b/Mage/src/main/java/mage/abilities/common/DiesCreatureTriggeredAbility.java index 5e9511b2097..110cd39be28 100644 --- a/Mage/src/main/java/mage/abilities/common/DiesCreatureTriggeredAbility.java +++ b/Mage/src/main/java/mage/abilities/common/DiesCreatureTriggeredAbility.java @@ -69,15 +69,14 @@ public class DiesCreatureTriggeredAbility extends TriggeredAbilityImpl { @Override public boolean checkTrigger(GameEvent event, Game game) { ZoneChangeEvent zEvent = (ZoneChangeEvent) event; - if (zEvent.isDiesEvent()) { - if (filter.match(zEvent.getTarget(), sourceId, controllerId, game)) { - if (setTargetPointer) { - this.getEffects().setTargetPointer(new FixedTarget(event.getTargetId(), game)); - } - return true; - } + if (!zEvent.isDiesEvent() || !filter.match(zEvent.getTarget(), sourceId, controllerId, game)) { + return false; } - return false; + getEffects().setValue("creatureDied", zEvent.getTarget()); + if (setTargetPointer) { + this.getEffects().setTargetPointer(new FixedTarget(event.getTargetId(), game)); + } + return true; } @Override