diff --git a/Mage.Sets/src/mage/cards/s/SanarUnfinishedGenius.java b/Mage.Sets/src/mage/cards/s/SanarUnfinishedGenius.java new file mode 100644 index 000000000000..09bf09d2905c --- /dev/null +++ b/Mage.Sets/src/mage/cards/s/SanarUnfinishedGenius.java @@ -0,0 +1,85 @@ +package mage.cards.s; + +import java.util.Objects; +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.ActivateIfConditionActivatedAbility; +import mage.abilities.common.EntersPreparedAbility; +import mage.abilities.condition.Condition; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.effects.common.CreateTokenEffect; +import mage.abilities.effects.common.search.SearchLibraryPutInHandEffect; +import mage.constants.SubType; +import mage.constants.SuperType; +import mage.filter.StaticFilters; +import mage.game.Game; +import mage.game.permanent.token.TreasureToken; +import mage.target.common.TargetCardInLibrary; +import mage.watchers.common.SpellsCastWatcher; +import mage.cards.CardSetInfo; +import mage.cards.PrepareCard; +import mage.constants.CardType; + +/** + * + * @author muz + */ +public final class SanarUnfinishedGenius extends PrepareCard { + + public SanarUnfinishedGenius(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{U}{R}", "Wild Idea", new CardType[]{CardType.SORCERY}, "{3}{U}{R}"); + + this.supertype.add(SuperType.LEGENDARY); + this.subtype.add(SubType.GOBLIN); + this.subtype.add(SubType.SORCERER); + this.power = new MageInt(0); + this.toughness = new MageInt(4); + + // Sanar enters prepared. + this.addAbility(new EntersPreparedAbility()); + + // {T}: Create a Treasure token. Activate only if you've cast an instant or sorcery spell this turn. + Ability ability = new ActivateIfConditionActivatedAbility( + new CreateTokenEffect(new TreasureToken(), 1), + new TapSourceCost(), + SanarUnfinishedGeniusCondition.instance + ); + this.addAbility(ability); + + // Wild Idea + // Sorcery {3}{U}{R} + // Search your library for an instant or sorcery card, reveal it, put it into your hand, then shuffle. + this.getSpellCard().getSpellAbility().addEffect(new SearchLibraryPutInHandEffect( + new TargetCardInLibrary(StaticFilters.FILTER_CARD_INSTANT_OR_SORCERY), true + )); + } + + private SanarUnfinishedGenius(final SanarUnfinishedGenius card) { + super(card); + } + + @Override + public SanarUnfinishedGenius copy() { + return new SanarUnfinishedGenius(this); + } +} + +enum SanarUnfinishedGeniusCondition implements Condition { + instance; + + @Override + public boolean apply(Game game, Ability source) { + SpellsCastWatcher watcher = game.getState().getWatcher(SpellsCastWatcher.class); + return watcher != null + && watcher.getSpellsCastThisTurn(source.getControllerId()) + .stream() + .filter(Objects::nonNull) + .anyMatch(spell -> spell.isInstantOrSorcery(game)); + } + + @Override + public String toString() { + return "you've cast an instant or sorcery spell this turn"; + } +} diff --git a/Mage.Sets/src/mage/sets/SecretsOfStrixhaven.java b/Mage.Sets/src/mage/sets/SecretsOfStrixhaven.java index ba6094b289df..67d1a8fbcc0c 100644 --- a/Mage.Sets/src/mage/sets/SecretsOfStrixhaven.java +++ b/Mage.Sets/src/mage/sets/SecretsOfStrixhaven.java @@ -288,6 +288,7 @@ private SecretsOfStrixhaven() { cards.add(new SetCardInfo("Root Manipulation", 222, Rarity.UNCOMMON, mage.cards.r.RootManipulation.class)); cards.add(new SetCardInfo("Rubble Rouser", 128, Rarity.COMMON, mage.cards.r.RubbleRouser.class)); cards.add(new SetCardInfo("Run Behind", 66, Rarity.COMMON, mage.cards.r.RunBehind.class)); + cards.add(new SetCardInfo("Sanar, Unfinished Genius", 223, Rarity.UNCOMMON, mage.cards.s.SanarUnfinishedGenius.class)); cards.add(new SetCardInfo("Scathing Shadelock", 98, Rarity.UNCOMMON, mage.cards.s.ScathingShadelock.class)); cards.add(new SetCardInfo("Scolding Administrator", 224, Rarity.UNCOMMON, mage.cards.s.ScoldingAdministrator.class)); cards.add(new SetCardInfo("Seize the Spoils", 129, Rarity.COMMON, mage.cards.s.SeizeTheSpoils.class));