From 7bf97179c84f85f213082283523d56ae8721382a Mon Sep 17 00:00:00 2001 From: Muz Date: Fri, 9 Jan 2026 15:52:52 -0600 Subject: [PATCH] [ECL] Implement Mistmeadow Council (#14198) * [ECL] Implement Mistmeadow Council * Clean up cost reduction implementation across a few cards to be consistent --- .../src/mage/cards/a/AcademyJourneymage.java | 16 ++--- Mage.Sets/src/mage/cards/d/DraconicLore.java | 2 +- .../src/mage/cards/m/MistmeadowCouncil.java | 58 +++++++++++++++++++ Mage.Sets/src/mage/sets/LorwynEclipsed.java | 1 + 4 files changed, 66 insertions(+), 11 deletions(-) create mode 100644 Mage.Sets/src/mage/cards/m/MistmeadowCouncil.java diff --git a/Mage.Sets/src/mage/cards/a/AcademyJourneymage.java b/Mage.Sets/src/mage/cards/a/AcademyJourneymage.java index dd12271e5c0..1177e5c7336 100644 --- a/Mage.Sets/src/mage/cards/a/AcademyJourneymage.java +++ b/Mage.Sets/src/mage/cards/a/AcademyJourneymage.java @@ -9,16 +9,14 @@ import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition; import mage.abilities.effects.common.ReturnToHandTargetEffect; import mage.abilities.effects.common.cost.SpellCostReductionSourceEffect; import mage.abilities.hint.ConditionHint; +import mage.abilities.hint.Hint; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; import mage.constants.Zone; -import mage.filter.StaticFilters; import mage.filter.common.FilterControlledPermanent; import mage.target.TargetPermanent; -import mage.target.common.TargetCreaturePermanent; - import java.util.UUID; import static mage.filter.StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURE; @@ -28,11 +26,10 @@ import static mage.filter.StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURE; */ public final class AcademyJourneymage extends CardImpl { - private static final FilterControlledPermanent filter = new FilterControlledPermanent("you control a Wizard"); - - static { - filter.add(SubType.WIZARD.getPredicate()); - } + private static final Condition condition = new PermanentsOnTheBattlefieldCondition( + new FilterControlledPermanent(SubType.WIZARD, "you control a Wizard") + ); + private static final Hint hint = new ConditionHint(condition, "You control a Wizard"); public AcademyJourneymage(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{U}"); @@ -42,10 +39,9 @@ public final class AcademyJourneymage extends CardImpl { this.toughness = new MageInt(2); // This spell costs {1} less to cast if you control a Wizard. - Condition condition = new PermanentsOnTheBattlefieldCondition(filter); Ability ability = new SimpleStaticAbility(Zone.ALL, new SpellCostReductionSourceEffect(1, condition)); ability.setRuleAtTheTop(true); - ability.addHint(new ConditionHint(condition, "You control a Wizard")); + ability.addHint(hint); this.addAbility(ability); // When Academy Journeymage enters the battlefield, return target creature an opponent controls to its owner's hand. diff --git a/Mage.Sets/src/mage/cards/d/DraconicLore.java b/Mage.Sets/src/mage/cards/d/DraconicLore.java index c0044bb82b7..483df9618e1 100644 --- a/Mage.Sets/src/mage/cards/d/DraconicLore.java +++ b/Mage.Sets/src/mage/cards/d/DraconicLore.java @@ -23,7 +23,7 @@ import java.util.UUID; public final class DraconicLore extends CardImpl { private static final Condition condition = new PermanentsOnTheBattlefieldCondition( - new FilterControlledPermanent(SubType.DRAGON, "you control a Dragon") + new FilterControlledPermanent(SubType.DRAGON, "you control a Dragon") ); private static final Hint hint = new ConditionHint(condition, "You control a Dragon"); diff --git a/Mage.Sets/src/mage/cards/m/MistmeadowCouncil.java b/Mage.Sets/src/mage/cards/m/MistmeadowCouncil.java new file mode 100644 index 00000000000..bc360233d83 --- /dev/null +++ b/Mage.Sets/src/mage/cards/m/MistmeadowCouncil.java @@ -0,0 +1,58 @@ +package mage.cards.m; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.condition.Condition; +import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition; +import mage.abilities.effects.common.DrawCardSourceControllerEffect; +import mage.abilities.effects.common.cost.SpellCostReductionSourceEffect; +import mage.abilities.hint.ConditionHint; +import mage.abilities.hint.Hint; +import mage.constants.SubType; +import mage.constants.Zone; +import mage.filter.common.FilterControlledPermanent; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; + +/** + * + * @author muz + */ +public final class MistmeadowCouncil extends CardImpl { + + private static final Condition condition = new PermanentsOnTheBattlefieldCondition( + new FilterControlledPermanent(SubType.KITHKIN, "you control a Kithkin") + ); + private static final Hint hint = new ConditionHint(condition, "You control a Kithkin"); + + public MistmeadowCouncil(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{G}"); + + this.subtype.add(SubType.KITHKIN); + this.subtype.add(SubType.ADVISOR); + this.power = new MageInt(4); + this.toughness = new MageInt(3); + + // This spell costs {1} less to cast if you control a Kithkin. + Ability ability = new SimpleStaticAbility(Zone.ALL, new SpellCostReductionSourceEffect(1, condition)); + ability.setRuleAtTheTop(true); + ability.addHint(hint); + this.addAbility(ability); + + // When this creature enters, draw a card. + this.addAbility(new EntersBattlefieldTriggeredAbility(new DrawCardSourceControllerEffect(1))); + } + + private MistmeadowCouncil(final MistmeadowCouncil card) { + super(card); + } + + @Override + public MistmeadowCouncil copy() { + return new MistmeadowCouncil(this); + } +} diff --git a/Mage.Sets/src/mage/sets/LorwynEclipsed.java b/Mage.Sets/src/mage/sets/LorwynEclipsed.java index db2f6a055c0..bd2d330172b 100644 --- a/Mage.Sets/src/mage/sets/LorwynEclipsed.java +++ b/Mage.Sets/src/mage/sets/LorwynEclipsed.java @@ -193,6 +193,7 @@ public final class LorwynEclipsed extends ExpansionSet { cards.add(new SetCardInfo("Midnight Tilling", 182, Rarity.COMMON, mage.cards.m.MidnightTilling.class)); cards.add(new SetCardInfo("Mirrorform", 308, Rarity.MYTHIC, mage.cards.m.Mirrorform.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Mirrorform", 59, Rarity.MYTHIC, mage.cards.m.Mirrorform.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mistmeadow Council", 183, Rarity.COMMON, mage.cards.m.MistmeadowCouncil.class)); cards.add(new SetCardInfo("Moonglove Extractor", 109, Rarity.COMMON, mage.cards.m.MoongloveExtractor.class)); cards.add(new SetCardInfo("Morningtide's Light", 27, Rarity.MYTHIC, mage.cards.m.MorningtidesLight.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Morningtide's Light", 301, Rarity.MYTHIC, mage.cards.m.MorningtidesLight.class, NON_FULL_USE_VARIOUS));