diff --git a/Mage.Sets/src/mage/cards/b/BeholdTheSinisterSix.java b/Mage.Sets/src/mage/cards/b/BeholdTheSinisterSix.java new file mode 100644 index 00000000000..a37ca39c4bb --- /dev/null +++ b/Mage.Sets/src/mage/cards/b/BeholdTheSinisterSix.java @@ -0,0 +1,91 @@ +package mage.cards.b; + +import mage.MageObject; +import mage.abilities.Ability; +import mage.abilities.effects.common.ReturnFromGraveyardToBattlefieldTargetEffect; +import mage.cards.Card; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.filter.FilterCard; +import mage.filter.common.FilterPermanentCard; +import mage.game.Game; +import mage.target.common.TargetCardInYourGraveyard; + +import java.util.Objects; +import java.util.Set; +import java.util.UUID; +import java.util.stream.Collectors; + +/** + * @author TheElk801 + */ +public final class BeholdTheSinisterSix extends CardImpl { + + public BeholdTheSinisterSix(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{6}{B}"); + + // Return up to six target creature cards with different names from your graveyard to the battlefield. + this.getSpellAbility().addEffect(new ReturnFromGraveyardToBattlefieldTargetEffect()); + this.getSpellAbility().addTarget(new BeholdTheSinisterSixTarget()); + } + + private BeholdTheSinisterSix(final BeholdTheSinisterSix card) { + super(card); + } + + @Override + public BeholdTheSinisterSix copy() { + return new BeholdTheSinisterSix(this); + } +} + +class BeholdTheSinisterSixTarget extends TargetCardInYourGraveyard { + + private static final FilterCard filter = new FilterPermanentCard("creature cards with different names"); + + BeholdTheSinisterSixTarget() { + super(0, 6, filter, false); + } + + private BeholdTheSinisterSixTarget(final BeholdTheSinisterSixTarget target) { + super(target); + } + + @Override + public BeholdTheSinisterSixTarget copy() { + return new BeholdTheSinisterSixTarget(this); + } + + @Override + public boolean canTarget(UUID playerId, UUID id, Ability ability, Game game) { + if (!super.canTarget(playerId, id, ability, game)) { + return false; + } + Set names = this.getTargets() + .stream() + .map(game::getCard) + .map(MageObject::getName) + .filter(Objects::nonNull) + .collect(Collectors.toSet()); + Card card = game.getCard(id); + return card != null && !names.contains(card.getName()); + } + + + @Override + public Set possibleTargets(UUID sourceControllerId, Ability source, Game game) { + Set possibleTargets = super.possibleTargets(sourceControllerId, source, game); + Set names = this.getTargets() + .stream() + .map(game::getCard) + .map(MageObject::getName) + .filter(Objects::nonNull) + .collect(Collectors.toSet()); + possibleTargets.removeIf(uuid -> { + Card card = game.getCard(uuid); + return card != null && names.contains(card.getName()); + }); + return possibleTargets; + } +} diff --git a/Mage.Sets/src/mage/sets/MarvelsSpiderMan.java b/Mage.Sets/src/mage/sets/MarvelsSpiderMan.java index d9d2c03801e..f47b98fa738 100644 --- a/Mage.Sets/src/mage/sets/MarvelsSpiderMan.java +++ b/Mage.Sets/src/mage/sets/MarvelsSpiderMan.java @@ -25,6 +25,8 @@ public final class MarvelsSpiderMan extends ExpansionSet { cards.add(new SetCardInfo("Anti-Venom, Horrifying Healer", 244, Rarity.MYTHIC, mage.cards.a.AntiVenomHorrifyingHealer.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Aunt May", 3, Rarity.UNCOMMON, mage.cards.a.AuntMay.class)); cards.add(new SetCardInfo("Beetle, Legacy Criminal", 26, Rarity.COMMON, mage.cards.b.BeetleLegacyCriminal.class)); + cards.add(new SetCardInfo("Behold the Sinister Six!", 221, Rarity.MYTHIC, mage.cards.b.BeholdTheSinisterSix.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Behold the Sinister Six!", 51, Rarity.MYTHIC, mage.cards.b.BeholdTheSinisterSix.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Carnage, Crimson Chaos", 125, Rarity.RARE, mage.cards.c.CarnageCrimsonChaos.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Carnage, Crimson Chaos", 227, Rarity.RARE, mage.cards.c.CarnageCrimsonChaos.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("City Pigeon", 4, Rarity.COMMON, mage.cards.c.CityPigeon.class));