From 61a665712786a10d07cc13d5ca34363217ea08bb Mon Sep 17 00:00:00 2001 From: Susucre <34709007+Susucre@users.noreply.github.com> Date: Tue, 1 Aug 2023 05:52:43 +0200 Subject: [PATCH] [LTC] Implement Crown of Gondor (#10722) --- Mage.Sets/src/mage/cards/c/CrownOfGondor.java | 79 +++++++++++++++++++ .../sets/TalesOfMiddleEarthCommander.java | 1 + ...BattlefieldControlledTriggeredAbility.java | 2 +- ...ditionalInterveningIfTriggeredAbility.java | 2 +- .../mage/abilities/keyword/EquipAbility.java | 2 +- .../abilities/keyword/SuspendAbility.java | 2 +- 6 files changed, 84 insertions(+), 4 deletions(-) create mode 100644 Mage.Sets/src/mage/cards/c/CrownOfGondor.java diff --git a/Mage.Sets/src/mage/cards/c/CrownOfGondor.java b/Mage.Sets/src/mage/cards/c/CrownOfGondor.java new file mode 100644 index 00000000000..50c89899811 --- /dev/null +++ b/Mage.Sets/src/mage/cards/c/CrownOfGondor.java @@ -0,0 +1,79 @@ +package mage.cards.c; + +import mage.abilities.Ability; +import mage.abilities.common.EntersBattlefieldControlledTriggeredAbility; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.condition.common.MonarchIsNotSetCondition; +import mage.abilities.condition.common.MonarchIsSourceControllerCondition; +import mage.abilities.costs.CostAdjuster; +import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility; +import mage.abilities.dynamicvalue.DynamicValue; +import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount; +import mage.abilities.effects.common.BecomesMonarchSourceEffect; +import mage.abilities.effects.common.continuous.BoostEquippedEffect; +import mage.abilities.keyword.EquipAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.SubType; +import mage.constants.SuperType; +import mage.constants.Zone; +import mage.filter.StaticFilters; +import mage.game.Game; +import mage.util.CardUtil; + +import java.util.UUID; + +/** + * @author Susucr + */ +public final class CrownOfGondor extends CardImpl { + + private final static DynamicValue xValue = new PermanentsOnBattlefieldCount(StaticFilters.FILTER_CONTROLLED_CREATURE); + + public CrownOfGondor(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{3}"); + + this.supertype.add(SuperType.LEGENDARY); + this.subtype.add(SubType.EQUIPMENT); + + // Equipped creature gets +1/+1 for each creature you control. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEquippedEffect(xValue, xValue))); + + // When a legendary creature enters the battlefield under your control, if there is no monarch, you become the monarch. + this.addAbility(new ConditionalInterveningIfTriggeredAbility( + new EntersBattlefieldControlledTriggeredAbility( + new BecomesMonarchSourceEffect(), + StaticFilters.FILTER_CREATURE_LEGENDARY + ), + MonarchIsNotSetCondition.instance, + "When a legendary creature enters the battlefield under your control, if there is no monarch, you become the monarch." + )); + + // Equip {4}. This ability costs {3} less to activate if you're the monarch. + EquipAbility equip = new EquipAbility(4, false); + equip.setCostReduceText("This ability costs {3} less to activate if you're the monarch"); + equip.setCostAdjuster(CrownOfGondorAdjuster.instance); + this.addAbility(equip); + } + + private CrownOfGondor(final CrownOfGondor card) { + super(card); + } + + @Override + public CrownOfGondor copy() { + return new CrownOfGondor(this); + } +} + +enum CrownOfGondorAdjuster implements CostAdjuster { + instance; + + @Override + public void adjustCosts(Ability ability, Game game) { + if (MonarchIsSourceControllerCondition.instance.apply(game, ability)) { + CardUtil.reduceCost(ability, 3); + } + } +} diff --git a/Mage.Sets/src/mage/sets/TalesOfMiddleEarthCommander.java b/Mage.Sets/src/mage/sets/TalesOfMiddleEarthCommander.java index 0ab8d57f05a..3a74869d54f 100644 --- a/Mage.Sets/src/mage/sets/TalesOfMiddleEarthCommander.java +++ b/Mage.Sets/src/mage/sets/TalesOfMiddleEarthCommander.java @@ -61,6 +61,7 @@ public final class TalesOfMiddleEarthCommander extends ExpansionSet { cards.add(new SetCardInfo("Consider", 187, Rarity.COMMON, mage.cards.c.Consider.class)); cards.add(new SetCardInfo("Corsairs of Umbar", 19, Rarity.RARE, mage.cards.c.CorsairsOfUmbar.class)); cards.add(new SetCardInfo("Court of Ire", 213, Rarity.RARE, mage.cards.c.CourtOfIre.class)); + cards.add(new SetCardInfo("Crown of Gondor", 75, Rarity.RARE, mage.cards.c.CrownOfGondor.class)); cards.add(new SetCardInfo("Crumbling Necropolis", 302, Rarity.UNCOMMON, mage.cards.c.CrumblingNecropolis.class)); cards.add(new SetCardInfo("Crypt Incursion", 198, Rarity.COMMON, mage.cards.c.CryptIncursion.class)); cards.add(new SetCardInfo("Cultivate", 236, Rarity.COMMON, mage.cards.c.Cultivate.class)); diff --git a/Mage/src/main/java/mage/abilities/common/EntersBattlefieldControlledTriggeredAbility.java b/Mage/src/main/java/mage/abilities/common/EntersBattlefieldControlledTriggeredAbility.java index 7a0f5accc27..753df5c46ab 100644 --- a/Mage/src/main/java/mage/abilities/common/EntersBattlefieldControlledTriggeredAbility.java +++ b/Mage/src/main/java/mage/abilities/common/EntersBattlefieldControlledTriggeredAbility.java @@ -45,7 +45,7 @@ public class EntersBattlefieldControlledTriggeredAbility extends EntersBattlefie super(zone, effect, filter, optional, setTargetPointer, rule, true); } - public EntersBattlefieldControlledTriggeredAbility(final EntersBattlefieldControlledTriggeredAbility ability) { + protected EntersBattlefieldControlledTriggeredAbility(final EntersBattlefieldControlledTriggeredAbility ability) { super(ability); } diff --git a/Mage/src/main/java/mage/abilities/decorator/ConditionalInterveningIfTriggeredAbility.java b/Mage/src/main/java/mage/abilities/decorator/ConditionalInterveningIfTriggeredAbility.java index eb69a7bca35..b8e0b6f57d3 100644 --- a/Mage/src/main/java/mage/abilities/decorator/ConditionalInterveningIfTriggeredAbility.java +++ b/Mage/src/main/java/mage/abilities/decorator/ConditionalInterveningIfTriggeredAbility.java @@ -45,7 +45,7 @@ public class ConditionalInterveningIfTriggeredAbility extends TriggeredAbilityIm this.abilityText = text; } - public ConditionalInterveningIfTriggeredAbility(final ConditionalInterveningIfTriggeredAbility triggered) { + protected ConditionalInterveningIfTriggeredAbility(final ConditionalInterveningIfTriggeredAbility triggered) { super(triggered); this.ability = triggered.ability.copy(); this.condition = triggered.condition; diff --git a/Mage/src/main/java/mage/abilities/keyword/EquipAbility.java b/Mage/src/main/java/mage/abilities/keyword/EquipAbility.java index 6f1c4b2ce7a..1473fa3598a 100644 --- a/Mage/src/main/java/mage/abilities/keyword/EquipAbility.java +++ b/Mage/src/main/java/mage/abilities/keyword/EquipAbility.java @@ -45,7 +45,7 @@ public class EquipAbility extends ActivatedAbilityImpl { this.showAbilityHint = showAbilityHint; } - public EquipAbility(final EquipAbility ability) { + protected EquipAbility(final EquipAbility ability) { super(ability); this.costReduceText = ability.costReduceText; this.showAbilityHint = ability.showAbilityHint; diff --git a/Mage/src/main/java/mage/abilities/keyword/SuspendAbility.java b/Mage/src/main/java/mage/abilities/keyword/SuspendAbility.java index 03b0be94367..324995ff246 100644 --- a/Mage/src/main/java/mage/abilities/keyword/SuspendAbility.java +++ b/Mage/src/main/java/mage/abilities/keyword/SuspendAbility.java @@ -438,7 +438,7 @@ class SuspendBeginningOfUpkeepInterveningIfTriggeredAbility extends ConditionalI } - public SuspendBeginningOfUpkeepInterveningIfTriggeredAbility(final SuspendBeginningOfUpkeepInterveningIfTriggeredAbility effect) { + private SuspendBeginningOfUpkeepInterveningIfTriggeredAbility(final SuspendBeginningOfUpkeepInterveningIfTriggeredAbility effect) { super(effect); }