[ECC] Implement Puca's Covenant

This commit is contained in:
theelk801 2026-01-20 10:43:01 -05:00
parent b5d751cb51
commit a28eba0ca2
2 changed files with 73 additions and 0 deletions

View file

@ -0,0 +1,71 @@
package mage.cards.p;
import mage.abilities.Ability;
import mage.abilities.common.DiesCreatureTriggeredAbility;
import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect;
import mage.cards.Card;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.filter.FilterCard;
import mage.filter.FilterPermanent;
import mage.filter.common.FilterControlledCreaturePermanent;
import mage.filter.common.FilterPermanentCard;
import mage.filter.predicate.ObjectSourcePlayer;
import mage.filter.predicate.ObjectSourcePlayerPredicate;
import mage.filter.predicate.permanent.CounterAnyPredicate;
import mage.game.Game;
import mage.game.permanent.Permanent;
import mage.target.common.TargetCardInYourGraveyard;
import mage.util.CardUtil;
import java.util.UUID;
/**
* @author TheElk801
*/
public final class PucasCovenant extends CardImpl {
private static final FilterPermanent filter = new FilterControlledCreaturePermanent("a creature you control with a counter on it");
private static final FilterCard filter2 = new FilterPermanentCard("another target permanent card " +
"with mana value less than or equal to the number of counters on that creature from your graveyard");
static {
filter.add(CounterAnyPredicate.instance);
filter2.add(PucasCovenantPredicate.instance);
}
public PucasCovenant(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{2}{G}");
// Whenever a creature you control with a counter on it dies, you may return another target permanent card with mana value less than or equal to the number of counters on that creature from your graveyard to your hand. Do this only once each turn.
Ability ability = new DiesCreatureTriggeredAbility(
new ReturnFromGraveyardToHandTargetEffect(), true, filter
).setDoOnlyOnceEachTurn(true);
ability.addTarget(new TargetCardInYourGraveyard(filter2));
this.addAbility(ability);
}
private PucasCovenant(final PucasCovenant card) {
super(card);
}
@Override
public PucasCovenant copy() {
return new PucasCovenant(this);
}
}
enum PucasCovenantPredicate implements ObjectSourcePlayerPredicate<Card> {
instance;
@Override
public boolean apply(ObjectSourcePlayer<Card> input, Game game) {
return CardUtil
.getEffectValueFromAbility(input.getSource(), "creatureDied", Permanent.class)
.filter(permanent -> !input.getObject().getId().equals(permanent.getId()))
.map(permanent -> permanent.getCounters(game).getTotalCount())
.filter(count -> input.getObject().getManaValue() <= count)
.isPresent();
}
}

View file

@ -134,6 +134,8 @@ public final class LorwynEclipsedCommander extends ExpansionSet {
cards.add(new SetCardInfo("Path to Exile", 65, Rarity.UNCOMMON, mage.cards.p.PathToExile.class));
cards.add(new SetCardInfo("Persist", 83, Rarity.RARE, mage.cards.p.Persist.class));
cards.add(new SetCardInfo("Primal Beyond", 159, Rarity.RARE, mage.cards.p.PrimalBeyond.class));
cards.add(new SetCardInfo("Puca's Covenant", 18, Rarity.RARE, mage.cards.p.PucasCovenant.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Puca's Covenant", 38, Rarity.RARE, mage.cards.p.PucasCovenant.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Puppeteer Clique", 84, Rarity.RARE, mage.cards.p.PuppeteerClique.class));
cards.add(new SetCardInfo("Putrefy", 131, Rarity.UNCOMMON, mage.cards.p.Putrefy.class));
cards.add(new SetCardInfo("Raging Ravine", 160, Rarity.RARE, mage.cards.r.RagingRavine.class));