From f1ee1c08b24d72521dcfe0f086d19a562a7990ed Mon Sep 17 00:00:00 2001 From: theelk801 Date: Thu, 8 Jan 2026 09:29:22 -0500 Subject: [PATCH] [ECL] Implement Sapling Nursery --- .../src/mage/cards/s/SaplingNursery.java | 63 +++++++++++++++++++ Mage.Sets/src/mage/sets/LorwynEclipsed.java | 2 + 2 files changed, 65 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/s/SaplingNursery.java diff --git a/Mage.Sets/src/mage/cards/s/SaplingNursery.java b/Mage.Sets/src/mage/cards/s/SaplingNursery.java new file mode 100644 index 00000000000..65a705f09dc --- /dev/null +++ b/Mage.Sets/src/mage/cards/s/SaplingNursery.java @@ -0,0 +1,63 @@ +package mage.cards.s; + +import mage.abilities.Ability; +import mage.abilities.common.LandfallAbility; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.ExileSourceCost; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.CreateTokenEffect; +import mage.abilities.effects.common.continuous.GainAbilityControlledEffect; +import mage.abilities.keyword.AffinityAbility; +import mage.abilities.keyword.IndestructibleAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.AffinityType; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.SubType; +import mage.filter.FilterPermanent; +import mage.filter.predicate.Predicates; +import mage.game.permanent.token.TreefolkReachToken; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class SaplingNursery extends CardImpl { + + private static final FilterPermanent filter = new FilterPermanent("Treefolk and Forests"); + + static { + filter.add(Predicates.or( + SubType.TREEFOLK.getPredicate(), + SubType.FOREST.getPredicate() + )); + } + + public SaplingNursery(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{6}{G}{G}"); + + // Affinity for Forests + this.addAbility(new AffinityAbility(AffinityType.FORESTS)); + + // Landfall -- Whenever a land you control enters, create a 3/4 green Treefolk creature token with reach. + this.addAbility(new LandfallAbility(new CreateTokenEffect(new TreefolkReachToken()))); + + // {1}{G}, Exile this enchantment: Treefolk and Forests you control gain indestructible until end of turn. + Ability ability = new SimpleActivatedAbility(new GainAbilityControlledEffect( + IndestructibleAbility.getInstance(), Duration.EndOfTurn, filter + ), new ManaCostsImpl<>("{1}{G}")); + ability.addCost(new ExileSourceCost()); + this.addAbility(ability); + } + + private SaplingNursery(final SaplingNursery card) { + super(card); + } + + @Override + public SaplingNursery copy() { + return new SaplingNursery(this); + } +} diff --git a/Mage.Sets/src/mage/sets/LorwynEclipsed.java b/Mage.Sets/src/mage/sets/LorwynEclipsed.java index 6dca6111f10..55a70e7a44f 100644 --- a/Mage.Sets/src/mage/sets/LorwynEclipsed.java +++ b/Mage.Sets/src/mage/sets/LorwynEclipsed.java @@ -157,6 +157,8 @@ public final class LorwynEclipsed extends ExpansionSet { cards.add(new SetCardInfo("Run Away Together", 67, Rarity.COMMON, mage.cards.r.RunAwayTogether.class)); cards.add(new SetCardInfo("Sanar, Innovative First-Year", 241, Rarity.RARE, mage.cards.s.SanarInnovativeFirstYear.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Sanar, Innovative First-Year", 378, Rarity.RARE, mage.cards.s.SanarInnovativeFirstYear.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Sapling Nursery", 192, Rarity.RARE, mage.cards.s.SaplingNursery.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Sapling Nursery", 328, Rarity.RARE, mage.cards.s.SaplingNursery.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Sear", 154, Rarity.UNCOMMON, mage.cards.s.Sear.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Sear", 405, Rarity.UNCOMMON, mage.cards.s.Sear.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Shimmercreep", 120, Rarity.UNCOMMON, mage.cards.s.Shimmercreep.class));