From 97b53416886d06dad0b2f1e111f763fa6278ef89 Mon Sep 17 00:00:00 2001 From: androosss <101566943+androosss@users.noreply.github.com> Date: Sat, 5 Apr 2025 19:44:16 +0200 Subject: [PATCH] - Implemented Highspire Bell-Ringer (#13495) - Commonized second spell condition --- .../src/mage/cards/h/HighspireBellRinger.java | 48 +++++++++++++++++++ .../src/mage/cards/r/RagingBattleMouse.java | 14 +----- .../src/mage/sets/TarkirDragonstorm.java | 1 + ...YouCastExactOneSpellThisTurnCondition.java | 19 ++++++++ 4 files changed, 69 insertions(+), 13 deletions(-) create mode 100644 Mage.Sets/src/mage/cards/h/HighspireBellRinger.java create mode 100644 Mage/src/main/java/mage/abilities/condition/common/YouCastExactOneSpellThisTurnCondition.java diff --git a/Mage.Sets/src/mage/cards/h/HighspireBellRinger.java b/Mage.Sets/src/mage/cards/h/HighspireBellRinger.java new file mode 100644 index 00000000000..c42a4e7c72c --- /dev/null +++ b/Mage.Sets/src/mage/cards/h/HighspireBellRinger.java @@ -0,0 +1,48 @@ +package mage.cards.h; + +import java.util.UUID; +import mage.MageInt; +import mage.constants.SubType; +import mage.filter.StaticFilters; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.condition.common.YouCastExactOneSpellThisTurnCondition; +import mage.abilities.decorator.ConditionalCostModificationEffect; +import mage.abilities.effects.common.cost.SpellsCostReductionControllerEffect; +import mage.abilities.keyword.FlyingAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; + +/** + * + * @author androosss + */ +public final class HighspireBellRinger extends CardImpl { + + public HighspireBellRinger(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{U}"); + + this.subtype.add(SubType.DJINN); + this.subtype.add(SubType.MONK); + this.power = new MageInt(1); + this.toughness = new MageInt(4); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + + // The second spell you cast each turn costs {1} less to cast. + this.addAbility(new SimpleStaticAbility(new ConditionalCostModificationEffect( + new SpellsCostReductionControllerEffect(StaticFilters.FILTER_CARD, 1), + YouCastExactOneSpellThisTurnCondition.instance, "the second spell you cast each turn costs {1} less to cast" + ))); + } + + private HighspireBellRinger(final HighspireBellRinger card) { + super(card); + } + + @Override + public HighspireBellRinger copy() { + return new HighspireBellRinger(this); + } +} \ No newline at end of file diff --git a/Mage.Sets/src/mage/cards/r/RagingBattleMouse.java b/Mage.Sets/src/mage/cards/r/RagingBattleMouse.java index 3f7ae7785d6..fbd10b2475b 100644 --- a/Mage.Sets/src/mage/cards/r/RagingBattleMouse.java +++ b/Mage.Sets/src/mage/cards/r/RagingBattleMouse.java @@ -4,7 +4,6 @@ import mage.MageInt; import mage.abilities.Ability; import mage.abilities.triggers.BeginningOfCombatTriggeredAbility; import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.condition.Condition; import mage.abilities.condition.common.CelebrationCondition; import mage.abilities.decorator.ConditionalCostModificationEffect; import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility; @@ -14,10 +13,9 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.*; import mage.filter.StaticFilters; -import mage.game.Game; import mage.target.common.TargetControlledCreaturePermanent; import mage.watchers.common.PermanentsEnteredBattlefieldWatcher; -import mage.watchers.common.SpellsCastWatcher; +import mage.abilities.condition.common.YouCastExactOneSpellThisTurnCondition; import java.util.UUID; @@ -63,13 +61,3 @@ public final class RagingBattleMouse extends CardImpl { return new RagingBattleMouse(this); } } - -enum YouCastExactOneSpellThisTurnCondition 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()).size() == 1; - } -} diff --git a/Mage.Sets/src/mage/sets/TarkirDragonstorm.java b/Mage.Sets/src/mage/sets/TarkirDragonstorm.java index 1b6d33d1b3c..91bd8ef6d1d 100644 --- a/Mage.Sets/src/mage/sets/TarkirDragonstorm.java +++ b/Mage.Sets/src/mage/sets/TarkirDragonstorm.java @@ -104,6 +104,7 @@ public final class TarkirDragonstorm extends ExpansionSet { cards.add(new SetCardInfo("Gurmag Rakshasa", 81, Rarity.UNCOMMON, mage.cards.g.GurmagRakshasa.class)); cards.add(new SetCardInfo("Hardened Tactician", 191, Rarity.UNCOMMON, mage.cards.h.HardenedTactician.class)); cards.add(new SetCardInfo("Heritage Reclamation", 145, Rarity.COMMON, mage.cards.h.HeritageReclamation.class)); + cards.add(new SetCardInfo("Highspire Bell-Ringer", 47, Rarity.COMMON, mage.cards.h.HighspireBellRinger.class)); cards.add(new SetCardInfo("Humbling Elder", 48, Rarity.COMMON, mage.cards.h.HumblingElder.class)); cards.add(new SetCardInfo("Iceridge Serpent", 49, Rarity.COMMON, mage.cards.i.IceridgeSerpent.class)); cards.add(new SetCardInfo("Inevitable Defeat", 194, Rarity.RARE, mage.cards.i.InevitableDefeat.class)); diff --git a/Mage/src/main/java/mage/abilities/condition/common/YouCastExactOneSpellThisTurnCondition.java b/Mage/src/main/java/mage/abilities/condition/common/YouCastExactOneSpellThisTurnCondition.java new file mode 100644 index 00000000000..98aa5c75dc0 --- /dev/null +++ b/Mage/src/main/java/mage/abilities/condition/common/YouCastExactOneSpellThisTurnCondition.java @@ -0,0 +1,19 @@ +package mage.abilities.condition.common; + +import mage.abilities.Ability; +import mage.abilities.condition.Condition; +import mage.game.Game; +import mage.watchers.common.SpellsCastWatcher; + +/** + * @author androosss + */ +public enum YouCastExactOneSpellThisTurnCondition 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()).size() == 1; + } +}