diff --git a/Mage.Sets/src/mage/cards/l/LoamcrafterFaun.java b/Mage.Sets/src/mage/cards/l/LoamcrafterFaun.java new file mode 100644 index 00000000000..938d3e7b196 --- /dev/null +++ b/Mage.Sets/src/mage/cards/l/LoamcrafterFaun.java @@ -0,0 +1,100 @@ +package mage.cards.l; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.common.delayed.ReflexiveTriggeredAbility; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect; +import mage.constants.SubType; +import mage.filter.FilterCard; +import mage.filter.StaticFilters; +import mage.filter.common.FilterPermanentCard; +import mage.filter.predicate.Predicates; +import mage.game.Game; +import mage.players.Player; +import mage.target.common.TargetCardInYourGraveyard; +import mage.target.common.TargetDiscard; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.cards.Cards; +import mage.cards.CardsImpl; +import mage.constants.CardType; +import mage.constants.Outcome; + +/** + * + * @author Xanderhall + */ +public final class LoamcrafterFaun extends CardImpl { + + public LoamcrafterFaun(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{G}"); + + this.subtype.add(SubType.SATYR); + this.subtype.add(SubType.DRUID); + this.power = new MageInt(3); + this.toughness = new MageInt(3); + + // When Loamcrafter Faun enters the battlefield, you may discard one or more land cards. When you do, return up to that many target nonland permanent cards from your graveyard to your hand. + this.addAbility(new EntersBattlefieldTriggeredAbility(new LoamcrafterFaunDiscardEffect())); + } + + private LoamcrafterFaun(final LoamcrafterFaun card) { + super(card); + } + + @Override + public LoamcrafterFaun copy() { + return new LoamcrafterFaun(this); + } +} + +class LoamcrafterFaunDiscardEffect extends OneShotEffect { + + private static FilterCard filter = new FilterPermanentCard("nonland permanent cards in your graveyard"); + + static { + filter.add(Predicates.not(CardType.LAND.getPredicate())); + } + + LoamcrafterFaunDiscardEffect() { + super(Outcome.Benefit); + this.staticText = "you may discard one or more land cards. When you do, return up to that many target nonland permanent cards from your graveyard to your hand."; + } + + private LoamcrafterFaunDiscardEffect(final LoamcrafterFaunDiscardEffect effect) { + super(effect); + } + + @Override + public LoamcrafterFaunDiscardEffect copy() { + return new LoamcrafterFaunDiscardEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player player = game.getPlayer(source.getControllerId()); + if (player == null) { + return false; + } + TargetDiscard target = new TargetDiscard( + 0, Integer.MAX_VALUE, + StaticFilters.FILTER_CARD_LANDS, player.getId() + ); + player.choose(Outcome.Discard, target, source, game); + Cards cards = player.discard(new CardsImpl(target.getTargets()), false, source, game); + + // No cards discarded, effect still resolves + if (cards.isEmpty()) { + return true; + } + + ReflexiveTriggeredAbility ability = new ReflexiveTriggeredAbility(new ReturnFromGraveyardToHandTargetEffect(), false); + ability.addTarget(new TargetCardInYourGraveyard(0, cards.size(), filter, false)); + game.fireReflexiveTriggeredAbility(ability, source); + return true; + } + +} \ No newline at end of file diff --git a/Mage.Sets/src/mage/sets/WildsOfEldraineCommander.java b/Mage.Sets/src/mage/sets/WildsOfEldraineCommander.java index 2a9a59e3460..567eca64eac 100644 --- a/Mage.Sets/src/mage/sets/WildsOfEldraineCommander.java +++ b/Mage.Sets/src/mage/sets/WildsOfEldraineCommander.java @@ -76,6 +76,7 @@ public final class WildsOfEldraineCommander extends ExpansionSet { cards.add(new SetCardInfo("Kindred Dominance", 113, Rarity.RARE, mage.cards.k.KindredDominance.class)); cards.add(new SetCardInfo("Kor Spiritdancer", 69, Rarity.RARE, mage.cards.k.KorSpiritdancer.class)); cards.add(new SetCardInfo("Krosan Verge", 163, Rarity.UNCOMMON, mage.cards.k.KrosanVerge.class)); + cards.add(new SetCardInfo("Loamcrafter Faun", 19, Rarity.RARE, mage.cards.l.LoamcrafterFaun.class)); cards.add(new SetCardInfo("Mantle of the Ancients", 70, Rarity.RARE, mage.cards.m.MantleOfTheAncients.class)); cards.add(new SetCardInfo("Midnight Clock", 99, Rarity.RARE, mage.cards.m.MidnightClock.class)); cards.add(new SetCardInfo("Mind Stone", 148, Rarity.COMMON, mage.cards.m.MindStone.class));