diff --git a/Mage.Sets/src/mage/cards/j/JadeSeedstones.java b/Mage.Sets/src/mage/cards/j/JadeSeedstones.java new file mode 100644 index 00000000000..be343ff3ab6 --- /dev/null +++ b/Mage.Sets/src/mage/cards/j/JadeSeedstones.java @@ -0,0 +1,49 @@ +package mage.cards.j; + +import mage.abilities.Ability; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.effects.common.counter.DistributeCountersEffect; +import mage.abilities.keyword.CraftAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.counters.CounterType; +import mage.filter.StaticFilters; +import mage.target.common.TargetPermanentAmount; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class JadeSeedstones extends CardImpl { + + public JadeSeedstones(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{3}{G}"); + this.secondSideCardClazz = mage.cards.j.JadeheartAttendant.class; + + // When Jade Seedstones enters the battlefield, distribute three +1/+1 counters among one, two, or three target creatures you control. + Ability ability = new EntersBattlefieldTriggeredAbility(new DistributeCountersEffect( + CounterType.P1P1, 3, "one, two, or three target creatures you control" + )); + TargetPermanentAmount target = new TargetPermanentAmount(3, StaticFilters.FILTER_CONTROLLED_CREATURES); + target.setMinNumberOfTargets(1); + ability.addTarget(target); + this.addAbility(ability); + + // Craft with creature {5}{G}{G} + this.addAbility(new CraftAbility( + "{4}{B}", "creature", "another creature you control " + + "or a creature card in your graveyard", CardType.CREATURE.getPredicate()) + ); + } + + private JadeSeedstones(final JadeSeedstones card) { + super(card); + } + + @Override + public JadeSeedstones copy() { + return new JadeSeedstones(this); + } +} diff --git a/Mage.Sets/src/mage/cards/j/JadeheartAttendant.java b/Mage.Sets/src/mage/cards/j/JadeheartAttendant.java new file mode 100644 index 00000000000..fddf0981f84 --- /dev/null +++ b/Mage.Sets/src/mage/cards/j/JadeheartAttendant.java @@ -0,0 +1,80 @@ +package mage.cards.j; + +import mage.MageInt; +import mage.MageObject; +import mage.abilities.Ability; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.dynamicvalue.DynamicValue; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.GainLifeEffect; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.SubType; +import mage.game.ExileZone; +import mage.game.Game; +import mage.util.CardUtil; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class JadeheartAttendant extends CardImpl { + + public JadeheartAttendant(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, ""); + + this.subtype.add(SubType.GOLEM); + this.power = new MageInt(7); + this.toughness = new MageInt(7); + this.nightCard = true; + this.color.setGreen(true); + + // When Jadeheart Attendant enters the battlefield, you gain life equal to the mana value of the exiled card used to craft it. + this.addAbility(new EntersBattlefieldTriggeredAbility(new GainLifeEffect(JadeheartAttendantValue.instance) + .setText("you gain life equal to the mana value of the exiled card used to craft it"))); + } + + private JadeheartAttendant(final JadeheartAttendant card) { + super(card); + } + + @Override + public JadeheartAttendant copy() { + return new JadeheartAttendant(this); + } +} + +enum JadeheartAttendantValue implements DynamicValue { + instance; + + @Override + public int calculate(Game game, Ability sourceAbility, Effect effect) { + ExileZone exileZone = game + .getExile() + .getExileZone(CardUtil.getExileZoneId(game, sourceAbility, -2)); + return exileZone != null + ? exileZone + .getCards(game) + .stream() + .mapToInt(MageObject::getManaValue) + .sum() + : 0; + } + + @Override + public JadeheartAttendantValue copy() { + return this; + } + + @Override + public String getMessage() { + return ""; + } + + @Override + public String toString() { + return "1"; + } +} diff --git a/Mage.Sets/src/mage/sets/TheLostCavernsOfIxalan.java b/Mage.Sets/src/mage/sets/TheLostCavernsOfIxalan.java index 6dd20658aa0..b2ff690a49f 100644 --- a/Mage.Sets/src/mage/sets/TheLostCavernsOfIxalan.java +++ b/Mage.Sets/src/mage/sets/TheLostCavernsOfIxalan.java @@ -180,6 +180,8 @@ public final class TheLostCavernsOfIxalan extends ExpansionSet { cards.add(new SetCardInfo("Itlimoc, Cradle of the Sun", 188, Rarity.RARE, mage.cards.i.ItlimocCradleOfTheSun.class)); cards.add(new SetCardInfo("Itzquinth, Firstborn of Gishath", 230, Rarity.UNCOMMON, mage.cards.i.ItzquinthFirstbornOfGishath.class)); cards.add(new SetCardInfo("Ixalli's Lorekeeper", 194, Rarity.UNCOMMON, mage.cards.i.IxallisLorekeeper.class)); + cards.add(new SetCardInfo("Jade Seedstones", 195, Rarity.UNCOMMON, mage.cards.j.JadeSeedstones.class)); + cards.add(new SetCardInfo("Jadeheart Attendant", 195, Rarity.UNCOMMON, mage.cards.j.JadeheartAttendant.class)); cards.add(new SetCardInfo("Jadelight Spelunker", 196, Rarity.RARE, mage.cards.j.JadelightSpelunker.class)); cards.add(new SetCardInfo("Join the Dead", 110, Rarity.COMMON, mage.cards.j.JoinTheDead.class)); cards.add(new SetCardInfo("Kaslem's Stonetree", 197, Rarity.COMMON, mage.cards.k.KaslemsStonetree.class));