From 720b2fe16358e55bd0055063a2e639c674bcd9f6 Mon Sep 17 00:00:00 2001 From: Susucre <34709007+Susucre@users.noreply.github.com> Date: Mon, 19 Jun 2023 04:38:18 +0200 Subject: [PATCH] [LTC] Implement Oarth Of Eorl (#10469) Added one constructor for SagaAbility, accepting multiple effects and a target. --- Mage.Sets/src/mage/cards/o/OathOfEorl.java | 73 +++++++++++++++++++ .../sets/TalesOfMiddleEarthCommander.java | 1 + .../mage/abilities/common/SagaAbility.java | 4 + .../permanent/token/HumanKnightToken.java | 34 +++++++++ 4 files changed, 112 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/o/OathOfEorl.java create mode 100644 Mage/src/main/java/mage/game/permanent/token/HumanKnightToken.java diff --git a/Mage.Sets/src/mage/cards/o/OathOfEorl.java b/Mage.Sets/src/mage/cards/o/OathOfEorl.java new file mode 100644 index 00000000000..95c38b1c163 --- /dev/null +++ b/Mage.Sets/src/mage/cards/o/OathOfEorl.java @@ -0,0 +1,73 @@ +package mage.cards.o; + +import java.util.UUID; + +import mage.abilities.common.SagaAbility; +import mage.abilities.effects.Effects; +import mage.abilities.effects.common.BecomesMonarchSourceEffect; +import mage.abilities.effects.common.CreateTokenEffect; +import mage.abilities.effects.common.counter.AddCountersTargetEffect; +import mage.constants.SagaChapter; +import mage.constants.SubType; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.counters.CounterType; +import mage.filter.FilterPermanent; +import mage.filter.common.FilterControlledPermanent; +import mage.filter.common.FilterCreaturePermanent; +import mage.game.permanent.token.HumanKnightToken; +import mage.game.permanent.token.HumanSoldierToken; +import mage.target.TargetPermanent; + +/** + * + * @author Susucr + */ +public final class OathOfEorl extends CardImpl { + + private static final FilterPermanent filter = new FilterCreaturePermanent(SubType.HUMAN, "Human"); + + public OathOfEorl(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{3}{R}{W}"); + + this.subtype.add(SubType.SAGA); + + // (As this Saga enters and after your draw step, add a lore counter. Sacrifice after III.) + SagaAbility sagaAbility = new SagaAbility(this); + + + // I-- Create two 1/1 white Human Soldier creature tokens. + sagaAbility.addChapterEffect( + this, SagaChapter.CHAPTER_I, new CreateTokenEffect(new HumanSoldierToken(), 2) + ); + + // II-- Create two 2/2 red Human Knight creature tokens with trample and haste. + sagaAbility.addChapterEffect( + this, SagaChapter.CHAPTER_II, new CreateTokenEffect(new HumanKnightToken(), 2) + ); + + Effects chap3Effects = new Effects( + new AddCountersTargetEffect(CounterType.INDESTRUCTIBLE.createInstance()), + new BecomesMonarchSourceEffect() + ); + + // III-- Put an indestructible counter on up to one target Human. + sagaAbility.addChapterEffect( + this, SagaChapter.CHAPTER_III, + chap3Effects, + new TargetPermanent(0, 1, filter) + ); + + this.addAbility(sagaAbility); + } + + private OathOfEorl(final OathOfEorl card) { + super(card); + } + + @Override + public OathOfEorl copy() { + return new OathOfEorl(this); + } +} diff --git a/Mage.Sets/src/mage/sets/TalesOfMiddleEarthCommander.java b/Mage.Sets/src/mage/sets/TalesOfMiddleEarthCommander.java index 842f4168240..631b48f5ec5 100644 --- a/Mage.Sets/src/mage/sets/TalesOfMiddleEarthCommander.java +++ b/Mage.Sets/src/mage/sets/TalesOfMiddleEarthCommander.java @@ -148,6 +148,7 @@ public final class TalesOfMiddleEarthCommander extends ExpansionSet { cards.add(new SetCardInfo("Necroblossom Snarl", 321, Rarity.RARE, mage.cards.n.NecroblossomSnarl.class)); cards.add(new SetCardInfo("Night's Whisper", 205, Rarity.COMMON, mage.cards.n.NightsWhisper.class)); cards.add(new SetCardInfo("Notion Thief", 270, Rarity.RARE, mage.cards.n.NotionThief.class)); + cards.add(new SetCardInfo("Oath of Eorl", 64, Rarity.RARE, mage.cards.o.OathOfEorl.class)); cards.add(new SetCardInfo("Oboro, Palace in the Clouds", 371, Rarity.MYTHIC, mage.cards.o.OboroPalaceInTheClouds.class)); cards.add(new SetCardInfo("Opt", 194, Rarity.COMMON, mage.cards.o.Opt.class)); cards.add(new SetCardInfo("Orchard Strider", 253, Rarity.COMMON, mage.cards.o.OrchardStrider.class)); diff --git a/Mage/src/main/java/mage/abilities/common/SagaAbility.java b/Mage/src/main/java/mage/abilities/common/SagaAbility.java index b125f01c99a..2e097fa9901 100644 --- a/Mage/src/main/java/mage/abilities/common/SagaAbility.java +++ b/Mage/src/main/java/mage/abilities/common/SagaAbility.java @@ -63,6 +63,10 @@ public class SagaAbility extends SimpleStaticAbility { addChapterEffect(card, chapter, chapter, new Effects(effects)); } + public void addChapterEffect(Card card, SagaChapter chapter, Effects effects, Target target) { + addChapterEffect(card, chapter, chapter, effects, target); + } + public void addChapterEffect(Card card, SagaChapter chapter, Consumer applier) { addChapterEffect(card, chapter, chapter, applier); } diff --git a/Mage/src/main/java/mage/game/permanent/token/HumanKnightToken.java b/Mage/src/main/java/mage/game/permanent/token/HumanKnightToken.java new file mode 100644 index 00000000000..57fa05ca729 --- /dev/null +++ b/Mage/src/main/java/mage/game/permanent/token/HumanKnightToken.java @@ -0,0 +1,34 @@ +package mage.game.permanent.token; + +import mage.MageInt; +import mage.abilities.keyword.HasteAbility; +import mage.abilities.keyword.TrampleAbility; +import mage.constants.CardType; +import mage.constants.SubType; + +/** + * @author Susucr + */ +public final class HumanKnightToken extends TokenImpl { + + public HumanKnightToken() { + super("Human Knight Token", "2/2 red Human Knight creature token with trample and haste"); + cardType.add(CardType.CREATURE); + color.setRed(true); + subtype.add(SubType.HUMAN); + subtype.add(SubType.KNIGHT); + power = new MageInt(2); + toughness = new MageInt(2); + addAbility(TrampleAbility.getInstance()); + addAbility(HasteAbility.getInstance()); + } + + public HumanKnightToken(final HumanKnightToken token) { + super(token); + } + + @Override + public HumanKnightToken copy() { + return new HumanKnightToken(this); + } +}