From 249e7bf31bde99213786fa1b71575b747ee75ce6 Mon Sep 17 00:00:00 2001 From: Susucre <34709007+Susucre@users.noreply.github.com> Date: Sat, 9 Sep 2023 05:57:36 +0200 Subject: [PATCH] [WOC] Implement Court of Embereth (#10971) * Clean text generation of ConditionalOneShotEffect to prevent "if if" * [WOC] Implement Court of Embereth --- .../src/mage/cards/c/CourtOfEmbereth.java | 55 +++++++++++++++++++ .../mage/sets/WildsOfEldraineCommander.java | 1 + .../decorator/ConditionalOneShotEffect.java | 14 ++++- .../mage/abilities/effects/OneShotEffect.java | 6 ++ .../effects/common/DamagePlayersEffect.java | 4 ++ .../permanent/token/Knight31RedToken.java | 29 ++++++++++ 6 files changed, 106 insertions(+), 3 deletions(-) create mode 100644 Mage.Sets/src/mage/cards/c/CourtOfEmbereth.java create mode 100644 Mage/src/main/java/mage/game/permanent/token/Knight31RedToken.java diff --git a/Mage.Sets/src/mage/cards/c/CourtOfEmbereth.java b/Mage.Sets/src/mage/cards/c/CourtOfEmbereth.java new file mode 100644 index 00000000000..dc51260eb86 --- /dev/null +++ b/Mage.Sets/src/mage/cards/c/CourtOfEmbereth.java @@ -0,0 +1,55 @@ +package mage.cards.c; + +import mage.abilities.Ability; +import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.condition.common.MonarchIsSourceControllerCondition; +import mage.abilities.decorator.ConditionalOneShotEffect; +import mage.abilities.dynamicvalue.common.CreaturesYouControlCount; +import mage.abilities.effects.common.BecomesMonarchSourceEffect; +import mage.abilities.effects.common.CreateTokenEffect; +import mage.abilities.effects.common.DamagePlayersEffect; +import mage.abilities.hint.common.CreaturesYouControlHint; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.TargetController; +import mage.game.permanent.token.Knight31RedToken; + +import java.util.UUID; + +/** + * @author Susucr + */ +public final class CourtOfEmbereth extends CardImpl { + + public CourtOfEmbereth(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{2}{R}{R}"); + + + // When Court of Embereth enters the battlefield, you become the monarch. + this.addAbility(new EntersBattlefieldTriggeredAbility(new BecomesMonarchSourceEffect())); + + // At the beginning of your upkeep, create a 3/1 red Knight creature token. Then if you're the monarch, Court of Embereth deals X damage to each opponent, where X is the number of creatures you control. + Ability ability = new BeginningOfUpkeepTriggeredAbility( + new CreateTokenEffect(new Knight31RedToken()), + TargetController.YOU, false + ); + ability.addEffect(new ConditionalOneShotEffect( + new DamagePlayersEffect(CreaturesYouControlCount.instance, TargetController.OPPONENT) + .setText("{this} deals X damage to each opponent, where X is the number of creatures you control"), + MonarchIsSourceControllerCondition.instance + ).concatBy("Then")); + ability.addHint(CreaturesYouControlHint.instance); + this.addAbility(ability); + } + + private CourtOfEmbereth(final CourtOfEmbereth card) { + super(card); + } + + @Override + public CourtOfEmbereth copy() { + return new CourtOfEmbereth(this); + } +} diff --git a/Mage.Sets/src/mage/sets/WildsOfEldraineCommander.java b/Mage.Sets/src/mage/sets/WildsOfEldraineCommander.java index cad997eef6d..605a3295cfc 100644 --- a/Mage.Sets/src/mage/sets/WildsOfEldraineCommander.java +++ b/Mage.Sets/src/mage/sets/WildsOfEldraineCommander.java @@ -43,6 +43,7 @@ public final class WildsOfEldraineCommander extends ExpansionSet { cards.add(new SetCardInfo("Command Tower", 156, Rarity.COMMON, mage.cards.c.CommandTower.class)); cards.add(new SetCardInfo("Consider", 87, Rarity.COMMON, mage.cards.c.Consider.class)); cards.add(new SetCardInfo("Court of Ardenvale", 21, Rarity.RARE, mage.cards.c.CourtOfArdenvale.class)); + cards.add(new SetCardInfo("Court of Embereth", 24, Rarity.RARE, mage.cards.c.CourtOfEmbereth.class)); cards.add(new SetCardInfo("Court of Vantress", 22, Rarity.RARE, mage.cards.c.CourtOfVantress.class)); cards.add(new SetCardInfo("Danitha Capashen, Paragon", 64, Rarity.UNCOMMON, mage.cards.d.DanithaCapashenParagon.class)); cards.add(new SetCardInfo("Darkwater Catacombs", 157, Rarity.RARE, mage.cards.d.DarkwaterCatacombs.class)); diff --git a/Mage/src/main/java/mage/abilities/decorator/ConditionalOneShotEffect.java b/Mage/src/main/java/mage/abilities/decorator/ConditionalOneShotEffect.java index eab591fb5eb..ba2e32dd035 100644 --- a/Mage/src/main/java/mage/abilities/decorator/ConditionalOneShotEffect.java +++ b/Mage/src/main/java/mage/abilities/decorator/ConditionalOneShotEffect.java @@ -85,10 +85,18 @@ public class ConditionalOneShotEffect extends OneShotEffect { if (staticText != null && !staticText.isEmpty()) { return staticText; } - if (otherwiseEffects.isEmpty()) { - return "if " + condition.toString() + ", " + CardUtil.getTextWithFirstCharLowerCase(effects.getText(mode)); + + String conditionText = condition.toString(); + if (conditionText.startsWith("if ") || conditionText.startsWith("If ")) { + conditionText = conditionText.substring(3); } - return effects.getText(mode) + ". If " + condition.toString() + ", " + CardUtil.getTextWithFirstCharLowerCase(otherwiseEffects.getText(mode)); + + if (otherwiseEffects.isEmpty()) { + return "if " + conditionText + ", " + + CardUtil.getTextWithFirstCharLowerCase(effects.getText(mode)); + } + return effects.getText(mode) + ". If " + conditionText + ", " + + CardUtil.getTextWithFirstCharLowerCase(otherwiseEffects.getText(mode)); } @Override diff --git a/Mage/src/main/java/mage/abilities/effects/OneShotEffect.java b/Mage/src/main/java/mage/abilities/effects/OneShotEffect.java index c100fa19adb..927c5941f14 100644 --- a/Mage/src/main/java/mage/abilities/effects/OneShotEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/OneShotEffect.java @@ -18,4 +18,10 @@ public abstract class OneShotEffect extends EffectImpl { protected OneShotEffect(final OneShotEffect effect) { super(effect); } + + @Override + public OneShotEffect setText(String staticText) { + super.setText(staticText); + return this; + } } diff --git a/Mage/src/main/java/mage/abilities/effects/common/DamagePlayersEffect.java b/Mage/src/main/java/mage/abilities/effects/common/DamagePlayersEffect.java index 5b002e2e8bb..28051d6867b 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/DamagePlayersEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/DamagePlayersEffect.java @@ -38,6 +38,10 @@ public class DamagePlayersEffect extends OneShotEffect { this(outcome, amount, TargetController.ANY); } + public DamagePlayersEffect(DynamicValue amount, TargetController controller) { + this(Outcome.Damage, amount, controller, "{this}"); + } + public DamagePlayersEffect(Outcome outcome, DynamicValue amount, TargetController controller) { this(outcome, amount, controller, "{this}"); } diff --git a/Mage/src/main/java/mage/game/permanent/token/Knight31RedToken.java b/Mage/src/main/java/mage/game/permanent/token/Knight31RedToken.java new file mode 100644 index 00000000000..8d4fc1c6418 --- /dev/null +++ b/Mage/src/main/java/mage/game/permanent/token/Knight31RedToken.java @@ -0,0 +1,29 @@ +package mage.game.permanent.token; + +import mage.MageInt; +import mage.constants.CardType; +import mage.constants.SubType; + +/** + * @author LevelX2 + */ +public final class Knight31RedToken extends TokenImpl { + + public Knight31RedToken() { + super("Knight Token", "3/1 red Knight creature token"); + + cardType.add(CardType.CREATURE); + color.setRed(true); + subtype.add(SubType.KNIGHT); + power = new MageInt(3); + toughness = new MageInt(1); + } + + protected Knight31RedToken(final Knight31RedToken token) { + super(token); + } + + public Knight31RedToken copy() { + return new Knight31RedToken(this); + } +}