From 679334dca08e9e546fbc92c91f248f55eade12db Mon Sep 17 00:00:00 2001 From: Muz Date: Fri, 9 Jan 2026 09:55:58 -0600 Subject: [PATCH] [ECL] Implement Unbury (#14200) --- Mage.Sets/src/mage/cards/u/Unbury.java | 110 ++++++++++++++++++++ Mage.Sets/src/mage/sets/LorwynEclipsed.java | 1 + 2 files changed, 111 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/u/Unbury.java diff --git a/Mage.Sets/src/mage/cards/u/Unbury.java b/Mage.Sets/src/mage/cards/u/Unbury.java new file mode 100644 index 00000000000..a79b8ba2902 --- /dev/null +++ b/Mage.Sets/src/mage/cards/u/Unbury.java @@ -0,0 +1,110 @@ +package mage.cards.u; + +import java.util.List; +import java.util.UUID; +import java.util.stream.Collectors; + +import mage.MageObject; +import mage.abilities.Ability; +import mage.abilities.Mode; +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.StaticFilters; +import mage.game.Game; +import mage.players.Player; +import mage.target.common.TargetCardInYourGraveyard; + +/** + * + * @author muz + */ +public final class Unbury extends CardImpl { + + public Unbury(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{1}{B}"); + + // Choose one -- + // * Return target creature card from your graveyard to your hand. + this.getSpellAbility().addEffect(new ReturnFromGraveyardToHandTargetEffect()); + this.getSpellAbility().addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_CREATURE_YOUR_GRAVEYARD)); + + // * Return two target creature cards that share a creature type from your graveyard to your hand. + Mode mode = new Mode(new ReturnFromGraveyardToHandTargetEffect()); + mode.addTarget(new UnburyTarget()); + this.getSpellAbility().addMode(mode); + } + + private Unbury(final Unbury card) { + super(card); + } + + @Override + public Unbury copy() { + return new Unbury(this); + } +} + +class UnburyTarget extends TargetCardInYourGraveyard { + + UnburyTarget() { + super(2, 2, StaticFilters.FILTER_CARD_CREATURE, false); + targetName = "creature cards that share a creature type from your graveyard"; + } + + private UnburyTarget(final UnburyTarget target) { + super(target); + } + + @Override + public boolean canTarget(UUID playerId, UUID id, Ability source, Game game) { + if (!super.canTarget(playerId, id, source, game)) { + return false; + } + if (getTargets().isEmpty()) { + return true; + } + Card targetOne = game.getCard(getTargets().get(0)); + Card targetTwo = game.getCard(id); + if (targetOne == null || targetTwo == null) { + return false; + } + return targetOne.shareCreatureTypes(game, targetTwo); + } + + @Override + public boolean canChoose(UUID sourceControllerId, Ability source, Game game) { + MageObject targetSource = game.getObject(source); + Player player = game.getPlayer(sourceControllerId); + if (player == null) { + return false; + } + if (targetSource == null) { + return false; + } + List cards = player.getGraveyard().getCards( + filter, sourceControllerId, source, game + ).stream().collect(Collectors.toList()); + if (cards.size() < 2) { + return false; + } + for (int i = 0; i < cards.size(); i++) { + for (int j = 0; j < cards.size(); j++) { + if (i <= j) { + continue; + } + if (cards.get(i).shareCreatureTypes(game, cards.get(j))) { + return true; + } + } + } + return false; + } + + @Override + public UnburyTarget copy() { + return new UnburyTarget(this); + } +} diff --git a/Mage.Sets/src/mage/sets/LorwynEclipsed.java b/Mage.Sets/src/mage/sets/LorwynEclipsed.java index a8f6d36a0db..af2c4c6cf33 100644 --- a/Mage.Sets/src/mage/sets/LorwynEclipsed.java +++ b/Mage.Sets/src/mage/sets/LorwynEclipsed.java @@ -251,6 +251,7 @@ public final class LorwynEclipsed extends ExpansionSet { cards.add(new SetCardInfo("Trystan, Callous Cultivator", 199, Rarity.RARE, mage.cards.t.TrystanCallousCultivator.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Trystan, Callous Cultivator", 291, Rarity.RARE, mage.cards.t.TrystanCallousCultivator.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Tweeze", 162, Rarity.COMMON, mage.cards.t.Tweeze.class)); + cards.add(new SetCardInfo("Unbury", 123, Rarity.UNCOMMON, mage.cards.u.Unbury.class)); cards.add(new SetCardInfo("Unexpected Assistance", 80, Rarity.COMMON, mage.cards.u.UnexpectedAssistance.class)); cards.add(new SetCardInfo("Unforgiving Aim", 200, Rarity.COMMON, mage.cards.u.UnforgivingAim.class)); cards.add(new SetCardInfo("Unwelcome Sprite", 81, Rarity.UNCOMMON, mage.cards.u.UnwelcomeSprite.class));