[ECL] Implement Unbury (#14200)

This commit is contained in:
Muz 2026-01-09 09:55:58 -06:00 committed by GitHub
parent c9b82e7742
commit 679334dca0
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 111 additions and 0 deletions

View file

@ -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<Card> 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);
}
}

View file

@ -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));