From b4c2898b394b7497c3ff4e3988ced7ddfd3e3728 Mon Sep 17 00:00:00 2001 From: Evan Kranzler Date: Tue, 1 Sep 2020 17:30:48 -0400 Subject: [PATCH] [ZNR] Implemented Shepherd of Heroes --- .../src/mage/cards/s/ShepherdOfHeroes.java | 52 +++++++++++++++++++ Mage.Sets/src/mage/sets/ZendikarRising.java | 1 + .../dynamicvalue/common/PartyCount.java | 40 ++++++++++++++ .../abilities/hint/common/PartyCountHint.java | 27 ++++++++++ 4 files changed, 120 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/s/ShepherdOfHeroes.java create mode 100644 Mage/src/main/java/mage/abilities/dynamicvalue/common/PartyCount.java create mode 100644 Mage/src/main/java/mage/abilities/hint/common/PartyCountHint.java diff --git a/Mage.Sets/src/mage/cards/s/ShepherdOfHeroes.java b/Mage.Sets/src/mage/cards/s/ShepherdOfHeroes.java new file mode 100644 index 00000000000..b8169c376a9 --- /dev/null +++ b/Mage.Sets/src/mage/cards/s/ShepherdOfHeroes.java @@ -0,0 +1,52 @@ +package mage.cards.s; + +import java.util.UUID; + +import mage.MageInt; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.dynamicvalue.DynamicValue; +import mage.abilities.dynamicvalue.MultipliedValue; +import mage.abilities.dynamicvalue.common.PartyCount; +import mage.abilities.effects.common.GainLifeEffect; +import mage.abilities.hint.common.PartyCountHint; +import mage.constants.SubType; +import mage.abilities.keyword.FlyingAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; + +/** + * @author TheElk801 + */ +public final class ShepherdOfHeroes extends CardImpl { + + private static final DynamicValue xValue = new MultipliedValue(PartyCount.instance, 2); + private static final String rule = "you gain 2 life for each creature in your party. " + + "(Your party consists of up to one each of Cleric, Rogue, Warrior, and Wizard.)"; + + public ShepherdOfHeroes(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{W}"); + + this.subtype.add(SubType.ANGEL); + this.subtype.add(SubType.CLERIC); + this.power = new MageInt(3); + this.toughness = new MageInt(4); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + + // When Shepherd of Heroes enters the battlefield, you gain 2 life for each creature in your party. + this.addAbility(new EntersBattlefieldTriggeredAbility( + new GainLifeEffect(xValue).setText("" + rule) + ).addHint(PartyCountHint.instance)); + } + + private ShepherdOfHeroes(final ShepherdOfHeroes card) { + super(card); + } + + @Override + public ShepherdOfHeroes copy() { + return new ShepherdOfHeroes(this); + } +} diff --git a/Mage.Sets/src/mage/sets/ZendikarRising.java b/Mage.Sets/src/mage/sets/ZendikarRising.java index 7b059a85625..a127540ec34 100644 --- a/Mage.Sets/src/mage/sets/ZendikarRising.java +++ b/Mage.Sets/src/mage/sets/ZendikarRising.java @@ -34,5 +34,6 @@ public final class ZendikarRising extends ExpansionSet { cards.add(new SetCardInfo("Nahiri, Heir of the Ancients", 230, Rarity.MYTHIC, mage.cards.n.NahiriHeirOfTheAncients.class)); cards.add(new SetCardInfo("Ruin Crab", 75, Rarity.UNCOMMON, mage.cards.r.RuinCrab.class)); cards.add(new SetCardInfo("Shell Shield", 79, Rarity.COMMON, mage.cards.s.ShellShield.class)); + cards.add(new SetCardInfo("Shepherd of Heroes", 38, Rarity.COMMON, mage.cards.s.ShepherdOfHeroes.class)); } } diff --git a/Mage/src/main/java/mage/abilities/dynamicvalue/common/PartyCount.java b/Mage/src/main/java/mage/abilities/dynamicvalue/common/PartyCount.java new file mode 100644 index 00000000000..58b5acce234 --- /dev/null +++ b/Mage/src/main/java/mage/abilities/dynamicvalue/common/PartyCount.java @@ -0,0 +1,40 @@ +package mage.abilities.dynamicvalue.common; + +import mage.abilities.Ability; +import mage.abilities.dynamicvalue.DynamicValue; +import mage.abilities.effects.Effect; +import mage.constants.SubType; +import mage.filter.StaticFilters; +import mage.game.Game; +import mage.game.permanent.Permanent; + +import java.util.*; +import java.util.stream.Collectors; + +/** + * @author TheElk801 + */ +public enum PartyCount implements DynamicValue { + instance; + + @Override + public int calculate(Game game, Ability sourceAbility, Effect effect) { + // TODO: implement this (in separate branch for now) + return 0; + } + + @Override + public PartyCount copy() { + return instance; + } + + @Override + public String getMessage() { + return "for each creature in your party. (Your party consists of up to one each of Cleric, Rogue, Warrior, and Wizard.)"; + } + + @Override + public String toString() { + return "1"; + } +} diff --git a/Mage/src/main/java/mage/abilities/hint/common/PartyCountHint.java b/Mage/src/main/java/mage/abilities/hint/common/PartyCountHint.java new file mode 100644 index 00000000000..aeb1c59d3a9 --- /dev/null +++ b/Mage/src/main/java/mage/abilities/hint/common/PartyCountHint.java @@ -0,0 +1,27 @@ +package mage.abilities.hint.common; + +import mage.abilities.Ability; +import mage.abilities.dynamicvalue.common.PartyCount; +import mage.abilities.dynamicvalue.common.PermanentsYouControlCount; +import mage.abilities.hint.Hint; +import mage.abilities.hint.ValueHint; +import mage.game.Game; + +/** + * @author TheElk801 + */ +public enum PartyCountHint implements Hint { + + instance; + private static final Hint hint = new ValueHint("Party size", PartyCount.instance); + + @Override + public String getText(Game game, Ability ability) { + return hint.getText(game, ability); + } + + @Override + public Hint copy() { + return instance; + } +}