From 8850b4243e81f623e1601062a9dc5280c962c6bf Mon Sep 17 00:00:00 2001 From: jmharmon <37360760+jmharmon@users.noreply.github.com> Date: Tue, 3 Sep 2019 23:28:51 -0700 Subject: [PATCH 01/19] Implement Witching Well --- Mage.Sets/src/mage/cards/w/WitchingWell.java | 44 ++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/w/WitchingWell.java diff --git a/Mage.Sets/src/mage/cards/w/WitchingWell.java b/Mage.Sets/src/mage/cards/w/WitchingWell.java new file mode 100644 index 0000000000..965e730f14 --- /dev/null +++ b/Mage.Sets/src/mage/cards/w/WitchingWell.java @@ -0,0 +1,44 @@ +package mage.cards.w; + +import mage.abilities.Ability; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.SacrificeSourceCost; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.DrawCardSourceControllerEffect; +import mage.abilities.effects.keyword.ScryEffect; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.Zone; + +import java.util.UUID; + +/** + * + * @author jmharmon + */ + +public final class WitchingWell extends CardImpl { + + public WitchingWell(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{U}"); + + // When Witching Well enters the battlefield, scry 2. + this.addAbility(new EntersBattlefieldTriggeredAbility(new ScryEffect(2))); + + // {3}{U}, Sacrifice Witching Well: Draw two cards. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DrawCardSourceControllerEffect(2), new ManaCostsImpl("{3}{U}")); + ability.addCost(new SacrificeSourceCost()); + this.addAbility(ability); + } + + public WitchingWell(final WitchingWell card) { + super(card); + } + + @Override + public WitchingWell copy() { + return new WitchingWell(this); + } +} From 69f7ae624b265e2c668f8b712621175f6075ce25 Mon Sep 17 00:00:00 2001 From: jmharmon <37360760+jmharmon@users.noreply.github.com> Date: Tue, 3 Sep 2019 23:29:47 -0700 Subject: [PATCH 02/19] Implement Golden Egg --- Mage.Sets/src/mage/cards/g/GoldenEgg.java | 56 +++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/g/GoldenEgg.java diff --git a/Mage.Sets/src/mage/cards/g/GoldenEgg.java b/Mage.Sets/src/mage/cards/g/GoldenEgg.java new file mode 100644 index 0000000000..65b9e5ed64 --- /dev/null +++ b/Mage.Sets/src/mage/cards/g/GoldenEgg.java @@ -0,0 +1,56 @@ +package mage.cards.g; + +import mage.abilities.Ability; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.SacrificeSourceCost; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.costs.mana.GenericManaCost; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.DrawCardSourceControllerEffect; +import mage.abilities.effects.common.GainLifeEffect; +import mage.abilities.mana.AnyColorManaAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.SubType; +import mage.constants.Zone; + +import java.util.UUID; + +/** + * + * @author jmharmon + */ + +public final class GoldenEgg extends CardImpl { + + public GoldenEgg(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{2}"); + this.subtype.add(SubType.FOOD); + + // When Golden Egg enters the battlefield, draw a card. + this.addAbility(new EntersBattlefieldTriggeredAbility(new DrawCardSourceControllerEffect(1))); + + // {1}, {T}: Sacrifice Golden Egg: Add one mana of any color. + Ability ability = new AnyColorManaAbility(new GenericManaCost(1)); + ability.addCost(new TapSourceCost()); + ability.addCost(new SacrificeSourceCost()); + this.addAbility(ability); + + // {2}, {T}, Sacrifice Golden Egg: You gain 3 life. + Ability ability1 = new SimpleActivatedAbility(Zone.BATTLEFIELD, new GainLifeEffect(3), new ManaCostsImpl("{1}")); + ability1.addCost(new TapSourceCost()); + ability1.addCost(new SacrificeSourceCost()); + this.addAbility(ability1); + } + + public GoldenEgg(final GoldenEgg card) { + super(card); + } + + @Override + public GoldenEgg copy() { + return new GoldenEgg(this); + } +} From 00dedb359a4cc33e63c435624d378825818752a6 Mon Sep 17 00:00:00 2001 From: jmharmon <37360760+jmharmon@users.noreply.github.com> Date: Tue, 3 Sep 2019 23:30:41 -0700 Subject: [PATCH 03/19] Implement GildedGoose --- Mage.Sets/src/mage/cards/GildedGoose.java | 71 +++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/GildedGoose.java diff --git a/Mage.Sets/src/mage/cards/GildedGoose.java b/Mage.Sets/src/mage/cards/GildedGoose.java new file mode 100644 index 0000000000..e733ac281e --- /dev/null +++ b/Mage.Sets/src/mage/cards/GildedGoose.java @@ -0,0 +1,71 @@ +package mage.cards.g; + +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.SacrificeTargetCost; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.CreateTokenEffect; +import mage.abilities.keyword.FlyingAbility; +import mage.abilities.mana.ActivatedManaAbilityImpl; +import mage.abilities.mana.AnyColorManaAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.SubType; +import mage.constants.Zone; +import mage.filter.common.FilterControlledPermanent; +import mage.filter.predicate.mageobject.SubtypePredicate; +import mage.game.permanent.token.custom.FoodToken; +import mage.target.common.TargetControlledPermanent; + +import java.util.UUID; + +/** + * + * @author jmharmon + */ + +public final class GildedGoose extends CardImpl { + + private static final FilterControlledPermanent filter = new FilterControlledPermanent("a Food"); + + static { + filter.add(new SubtypePredicate(SubType.FOOD)); + } + + public GildedGoose(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{G}"); + this.subtype.add(SubType.BIRD); + + this.power = new MageInt(0); + this.toughness = new MageInt(2); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + + // When Gilded Goose enters the battlefield, create a Food token. (It’s an artifact with “{2}, {T}, Sacrifice this artifact: You gain 3 life.”) + this.addAbility(new EntersBattlefieldTriggeredAbility(new CreateTokenEffect(new FoodToken()), false)); + + // {1}{G}, {T}: Create a Food token. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new CreateTokenEffect(new FoodToken()), new ManaCostsImpl("{1}{G}")); + ability.addCost(new TapSourceCost()); + this.addAbility(ability); + + // {T}, Sacrifice a Food: Add one mana of any color. + ActivatedManaAbilityImpl ability1 = new AnyColorManaAbility(new TapSourceCost()); + ability1.addCost(new SacrificeTargetCost(new TargetControlledPermanent(filter))); + this.addAbility(ability1); + } + + public GildedGoose(final GildedGoose card) { + super(card); + } + + @Override + public GildedGoose copy() { + return new GildedGoose(this); + } +} From b9f1c9ad6b8fa66d65dfd46e596e0c4630407347 Mon Sep 17 00:00:00 2001 From: jmharmon <37360760+jmharmon@users.noreply.github.com> Date: Tue, 3 Sep 2019 23:31:45 -0700 Subject: [PATCH 04/19] Implement Crystal Slipper --- .../src/mage/cards/c/CrystalSlipper.java | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/c/CrystalSlipper.java diff --git a/Mage.Sets/src/mage/cards/c/CrystalSlipper.java b/Mage.Sets/src/mage/cards/c/CrystalSlipper.java new file mode 100644 index 0000000000..1675e6e3c4 --- /dev/null +++ b/Mage.Sets/src/mage/cards/c/CrystalSlipper.java @@ -0,0 +1,42 @@ +package mage.cards.c; + +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.costs.mana.GenericManaCost; +import mage.abilities.effects.common.continuous.BoostEquippedEffect; +import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect; +import mage.abilities.keyword.EquipAbility; +import mage.abilities.keyword.HasteAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.*; + +import java.util.UUID; + +/** + * + * @author jmharmon + */ + +public final class CrystalSlipper extends CardImpl { + + public CrystalSlipper(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{1}{R}"); + this.subtype.add(SubType.EQUIPMENT); + + // Equipped creature gets +1/+0 and has haste. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEquippedEffect(1, 0))); + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAttachedEffect(HasteAbility.getInstance(), AttachmentType.EQUIPMENT))); + + // Equip {1} + this.addAbility(new EquipAbility(Outcome.BoostCreature, new GenericManaCost(1))); + } + + public CrystalSlipper(final CrystalSlipper card) { + super(card); + } + + @Override + public CrystalSlipper copy() { + return new CrystalSlipper(this); + } +} From 52f2d6399c9efa7eb5ab57939725e704d9f5b619 Mon Sep 17 00:00:00 2001 From: jmharmon <37360760+jmharmon@users.noreply.github.com> Date: Tue, 3 Sep 2019 23:36:51 -0700 Subject: [PATCH 05/19] Implement Food artifact subtype --- Mage/src/main/java/mage/constants/SubType.java | 1 + 1 file changed, 1 insertion(+) diff --git a/Mage/src/main/java/mage/constants/SubType.java b/Mage/src/main/java/mage/constants/SubType.java index e0d8c557db..449a6d7c1e 100644 --- a/Mage/src/main/java/mage/constants/SubType.java +++ b/Mage/src/main/java/mage/constants/SubType.java @@ -37,6 +37,7 @@ public enum SubType { CLUE("Clue", SubTypeSet.ArtifactType), CONTRAPTION("Contraption", SubTypeSet.ArtifactType), EQUIPMENT("Equipment", SubTypeSet.ArtifactType), + FOOD("Food", SubTypeSet.ArtifactType), FORTIFICATION("Fortification", SubTypeSet.ArtifactType), TREASURE("Treasure", SubTypeSet.ArtifactType), VEHICLE("Vehicle", SubTypeSet.ArtifactType), From a10fbc765f21408de615f985d85b3f6e4debb130 Mon Sep 17 00:00:00 2001 From: jmharmon <37360760+jmharmon@users.noreply.github.com> Date: Tue, 3 Sep 2019 23:38:08 -0700 Subject: [PATCH 06/19] Implement Food Token --- .../mage/game/permanent/token/FoodToken.java | 60 +++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 Mage/src/main/java/mage/game/permanent/token/FoodToken.java diff --git a/Mage/src/main/java/mage/game/permanent/token/FoodToken.java b/Mage/src/main/java/mage/game/permanent/token/FoodToken.java new file mode 100644 index 0000000000..e2d1b07221 --- /dev/null +++ b/Mage/src/main/java/mage/game/permanent/token/FoodToken.java @@ -0,0 +1,60 @@ +package mage.game.permanent.token.custom; + +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.SacrificeSourceCost; +import mage.abilities.costs.mana.GenericManaCost; +import mage.abilities.effects.common.GainLifeEffect; +import mage.constants.CardType; +import mage.constants.SubType; +import mage.constants.Zone; +import mage.game.permanent.token.TokenImpl; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +/** + * + * @author jmharmon + */ + +public final class FoodToken extends TokenImpl { + + static final private List tokenImageSets = new ArrayList<>(); + + static { + tokenImageSets.addAll(Arrays.asList("ELD")); + } + + public FoodToken() { + this(null, 0); + } + + public FoodToken(String setCode) { + this(setCode, 0); + } + + public FoodToken(String setCode, int tokenType) { + super("Food", "Food token"); + availableImageSetCodes = tokenImageSets; + setOriginalExpansionSetCode(setCode); + cardType.add(CardType.ARTIFACT); + subtype.add(SubType.FOOD); + + // {2}, {T}, Sacrifice this artifact: You gain 3 life.” + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new GainLifeEffect(3), new GenericManaCost(2)); + SacrificeSourceCost cost = new SacrificeSourceCost(); + cost.setText("Sacrifice this artifact"); + ability.addCost(cost); + this.addAbility(ability); + } + + public FoodToken(final FoodToken token) { + super(token); + } + + public FoodToken copy() { + return new FoodToken(this); + } +} From 335446b1db8ee57bbf56dbdc173aa86ae36a8899 Mon Sep 17 00:00:00 2001 From: jmharmon <37360760+jmharmon@users.noreply.github.com> Date: Tue, 3 Sep 2019 23:43:39 -0700 Subject: [PATCH 07/19] Implement Wishful Merfolk --- .../src/mage/cards/w/WishfulMerfolk.java | 65 +++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/w/WishfulMerfolk.java diff --git a/Mage.Sets/src/mage/cards/w/WishfulMerfolk.java b/Mage.Sets/src/mage/cards/w/WishfulMerfolk.java new file mode 100644 index 0000000000..4d7c663d70 --- /dev/null +++ b/Mage.Sets/src/mage/cards/w/WishfulMerfolk.java @@ -0,0 +1,65 @@ +package mage.cards.w; + +import mage.MageInt; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.continuous.BecomesCreatureSourceEffect; +import mage.abilities.keyword.DefenderAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.*; +import mage.game.permanent.token.TokenImpl; + +import java.util.UUID; + +/** + * + * @author jmharmon + */ + +public final class WishfulMerfolk extends CardImpl { + + public WishfulMerfolk(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{U}"); + this.subtype.add(SubType.MERFOLK); + + this.power = new MageInt(3); + this.toughness = new MageInt(2); + + // Defender + this.addAbility(DefenderAbility.getInstance()); + + // {1}{U}: Wishful Merfolk loses defender and becomes a Human until end of turn. + //this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new WishfulMerfolkEffect(), new ManaCostsImpl("{1}{U}"))); + this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new BecomesCreatureSourceEffect(new WishfulMerfolkToken(), "", Duration.EndOfTurn), new ManaCostsImpl("{1}{U}"))); + } + + public WishfulMerfolk(final WishfulMerfolk card) { + super(card); + } + + @Override + public WishfulMerfolk copy() { + return new WishfulMerfolk(this); + } +} + +class WishfulMerfolkToken extends TokenImpl { + + public WishfulMerfolkToken() { + super("Wishful Merfolk", ""); + this.cardType.add(CardType.CREATURE); + this.subtype.add(SubType.HUMAN); + this.color.setBlue(true); + this.power = new MageInt(3); + this.toughness = new MageInt(2); + } + + public WishfulMerfolkToken(final WishfulMerfolkToken token) { + super(token); + } + + public WishfulMerfolkToken copy() { + return new WishfulMerfolkToken(this); + } +} From 234aa6b264e8dd9af6d46f981564d7fde77a802c Mon Sep 17 00:00:00 2001 From: jmharmon <37360760+jmharmon@users.noreply.github.com> Date: Tue, 3 Sep 2019 23:45:08 -0700 Subject: [PATCH 08/19] Update file --- Mage.Sets/src/mage/sets/ThroneOfEldraine.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Mage.Sets/src/mage/sets/ThroneOfEldraine.java b/Mage.Sets/src/mage/sets/ThroneOfEldraine.java index 294a1326ae..69b482bf99 100644 --- a/Mage.Sets/src/mage/sets/ThroneOfEldraine.java +++ b/Mage.Sets/src/mage/sets/ThroneOfEldraine.java @@ -29,5 +29,10 @@ public final class ThroneOfEldraine extends ExpansionSet { cards.add(new SetCardInfo("Arcane Signet", 331, Rarity.COMMON, mage.cards.a.ArcaneSignet.class)); cards.add(new SetCardInfo("Chulane, Teller of Tales", 326, Rarity.MYTHIC, mage.cards.c.ChulaneTellerOfTales.class)); + cards.add(new SetCardInfo("Crystal Slipper", 119, Rarity.COMMON, mage.cards.c.CrystalSlipper.class)); + cards.add(new SetCardInfo("Gilded Goose", 160, Rarity.RARE, mage.cards.g.GildedGoose.class)); + cards.add(new SetCardInfo("Golden Egg", 220, Rarity.COMMON, mage.cards.g.GoldenEgg.class)); + cards.add(new SetCardInfo("Wishful Merfolk", 73, Rarity.COMMON, mage.cards.w.WishfulMerfolk.class)); + cards.add(new SetCardInfo("Witching Well", 74, Rarity.COMMON, mage.cards.w.WitchingWell.class)); } } From 95ef0d933c7ff124b13d7d0494894d69d79e9934 Mon Sep 17 00:00:00 2001 From: jmharmon <37360760+jmharmon@users.noreply.github.com> Date: Tue, 3 Sep 2019 23:54:11 -0700 Subject: [PATCH 09/19] Fixed cost on second ability --- Mage.Sets/src/mage/cards/g/GoldenEgg.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Mage.Sets/src/mage/cards/g/GoldenEgg.java b/Mage.Sets/src/mage/cards/g/GoldenEgg.java index 65b9e5ed64..55a7b8c6ad 100644 --- a/Mage.Sets/src/mage/cards/g/GoldenEgg.java +++ b/Mage.Sets/src/mage/cards/g/GoldenEgg.java @@ -39,7 +39,7 @@ public final class GoldenEgg extends CardImpl { this.addAbility(ability); // {2}, {T}, Sacrifice Golden Egg: You gain 3 life. - Ability ability1 = new SimpleActivatedAbility(Zone.BATTLEFIELD, new GainLifeEffect(3), new ManaCostsImpl("{1}")); + Ability ability1 = new SimpleActivatedAbility(Zone.BATTLEFIELD, new GainLifeEffect(3), new ManaCostsImpl("{2}")); ability1.addCost(new TapSourceCost()); ability1.addCost(new SacrificeSourceCost()); this.addAbility(ability1); From 9f304bf4aec334e10eb3c6958c09af92de335264 Mon Sep 17 00:00:00 2001 From: jmharmon <37360760+jmharmon@users.noreply.github.com> Date: Wed, 4 Sep 2019 00:15:49 -0700 Subject: [PATCH 10/19] Add TapSourceCost --- Mage/src/main/java/mage/game/permanent/token/FoodToken.java | 1 + 1 file changed, 1 insertion(+) diff --git a/Mage/src/main/java/mage/game/permanent/token/FoodToken.java b/Mage/src/main/java/mage/game/permanent/token/FoodToken.java index e2d1b07221..8751401608 100644 --- a/Mage/src/main/java/mage/game/permanent/token/FoodToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/FoodToken.java @@ -44,6 +44,7 @@ public final class FoodToken extends TokenImpl { // {2}, {T}, Sacrifice this artifact: You gain 3 life.” Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new GainLifeEffect(3), new GenericManaCost(2)); + ability.addCost(new TapSourceCost()); SacrificeSourceCost cost = new SacrificeSourceCost(); cost.setText("Sacrifice this artifact"); ability.addCost(cost); From 845cca99381e0e75cc6397adaf81baa6d4fa592e Mon Sep 17 00:00:00 2001 From: Evan Kranzler Date: Wed, 4 Sep 2019 07:28:46 -0400 Subject: [PATCH 11/19] added missing import to Food token --- Mage/src/main/java/mage/game/permanent/token/FoodToken.java | 1 + 1 file changed, 1 insertion(+) diff --git a/Mage/src/main/java/mage/game/permanent/token/FoodToken.java b/Mage/src/main/java/mage/game/permanent/token/FoodToken.java index 8751401608..1d539aa244 100644 --- a/Mage/src/main/java/mage/game/permanent/token/FoodToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/FoodToken.java @@ -3,6 +3,7 @@ package mage.game.permanent.token.custom; import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.common.SacrificeSourceCost; +import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.mana.GenericManaCost; import mage.abilities.effects.common.GainLifeEffect; import mage.constants.CardType; From b3ef87ef442b84dba9ffc1d00ee3edfa3910471f Mon Sep 17 00:00:00 2001 From: Evan Kranzler Date: Wed, 4 Sep 2019 07:30:38 -0400 Subject: [PATCH 12/19] fixed text on Crystal Slipper --- Mage.Sets/src/mage/cards/c/CrystalSlipper.java | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/Mage.Sets/src/mage/cards/c/CrystalSlipper.java b/Mage.Sets/src/mage/cards/c/CrystalSlipper.java index 1675e6e3c4..9c1cc98df4 100644 --- a/Mage.Sets/src/mage/cards/c/CrystalSlipper.java +++ b/Mage.Sets/src/mage/cards/c/CrystalSlipper.java @@ -1,5 +1,6 @@ package mage.cards.c; +import mage.abilities.Ability; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.costs.mana.GenericManaCost; import mage.abilities.effects.common.continuous.BoostEquippedEffect; @@ -8,12 +9,14 @@ import mage.abilities.keyword.EquipAbility; import mage.abilities.keyword.HasteAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; -import mage.constants.*; +import mage.constants.AttachmentType; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.SubType; import java.util.UUID; /** - * * @author jmharmon */ @@ -24,8 +27,10 @@ public final class CrystalSlipper extends CardImpl { this.subtype.add(SubType.EQUIPMENT); // Equipped creature gets +1/+0 and has haste. - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEquippedEffect(1, 0))); - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAttachedEffect(HasteAbility.getInstance(), AttachmentType.EQUIPMENT))); + Ability ability = new SimpleStaticAbility(new BoostEquippedEffect(1, 0)); + ability.addEffect(new GainAbilityAttachedEffect( + HasteAbility.getInstance(), AttachmentType.EQUIPMENT).setText("and has haste") + ); // Equip {1} this.addAbility(new EquipAbility(Outcome.BoostCreature, new GenericManaCost(1))); From baf5d42ef11ba67d5fec4bc0158ee081cf3e4fe8 Mon Sep 17 00:00:00 2001 From: Evan Kranzler Date: Wed, 4 Sep 2019 07:32:42 -0400 Subject: [PATCH 13/19] updated ELD spoiler --- Utils/mtg-cards-data.txt | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/Utils/mtg-cards-data.txt b/Utils/mtg-cards-data.txt index 23f932e2b4..f379f9a76c 100644 --- a/Utils/mtg-cards-data.txt +++ b/Utils/mtg-cards-data.txt @@ -35698,8 +35698,6 @@ Oakenform|Core Set 2020|341|C|{2}{G}|Enchantment - Aura|||Enchant creature$Encha Prized Unicorn|Core Set 2020|342|C|{3}{G}|Creature - Unicorn|2|2|All creatures able to block Prized Unicorn do so.| Titanic Growth|Core Set 2020|343|C|{1}{G}|Instant|||Target creature gets +4/+4 until end of turn.| Woodland Mystic|Core Set 2020|344|C|{1}{G}|Creature - Elf Druid|1|1|{T}: Add {G}.| -Chulane, Teller of Tales|Throne of Eldraine|326|M|{2}{G}{W}{U}|Legendary Creature - Human Druid|2|4|Vigilance$Whenever you cast a creature spell, draw a card, then you may put a land card from your hand onto the battlefield.${3}, {T}: Return target creature you control to its owner's hand.| -Arcane Signet|Throne of Eldraine|331|C|{2}|Artifact|||{T}: Add one mana of any color in your commander's color identity.| Cliffside Rescuer|Commander 2019|1|U|{1}{W}|Creature - Kor Soldier|2|2|Vigilance${T}, Sacrifice Cliffside Rescuer: Target permanent you control gets protection from each opponent until end of turn.| Commander's Insignia|Commander 2019|2|R|{2}{W}{W}|Enchantment|||Creatures you control get +1/+1 for each time you've cast your commander from the command zone this game.| Doomed Artisan|Commander 2019|3|R|{2}{W}|Creature - Human Artificer|1|1|Sculptures you control can't attack or block.$At the beginning of your end step, create a colorless Sculpture artifact creature token with "This creature's power and toughness are each equal to the number of Sculptures you control."| @@ -35995,3 +35993,21 @@ Island|Commander 2019|291|C||Basic Land - Island|||({T}: Add {U}.)| Swamp|Commander 2019|294|C||Basic Land - Swamp|||({T}: Add {B}.)| Mountain|Commander 2019|297|C||Basic Land - Mountain|||({T}: Add {R}.)| Forest|Commander 2019|300|C||Basic Land - Forest|||({T}: Add {G}.)| +Faerie Vandal|Throne of Eldraine|45|U|{1}{U}|Creature - Faerie Rogue|1|2|Flash$Flying$Whenever you draw your second card each turn, put a +1/+1 counter on Faerie Vandal.| +Run Away Together|Throne of Eldraine|62|C|{1}{U}|Instant|||Choose two target creatures controlled by different players. Return those creatures to their owners' hands.| +Tome Raider|Throne of Eldraine|68|C|{2}{U}|Creature - Faerie|1|1|Flying$When Tome Raider enters the battlefield, draw a card.| +Wishful Merfolk|Throne of Eldraine|73|C|{1}{U}|Creature - Merfolk|3|2|Defender${1}{U}: Wishful Merfolk loses defender and becomes a Human until end of turn.| +Witching Well|Throne of Eldraine|74|C|{U}|Artifact|||When Witching Well enters the battlefield, scry 2.${3}{U}, Sacrifice Witching Well: Draw two cards.| +Eye Collector|Throne of Eldraine|86|C|{B}|Creature - Faerie|1|1|Flying$Whenever Eye Collector deals combat damage to a player, each player puts the top card of their library into their graveyard.| +Crystal Slipper|Throne of Eldraine|119|C|{1}{R}|Artifact - Equipment|||Equipped creature gets +1/+0 and has haste.$Equip {1}| +Gilded Goose|Throne of Eldraine|160|R|{G}|Creature - Bird|0|2|Flying$When Gilded Goose enters the battlefield, create a Food token.${1}{G}, {T}: Create a Food token.${T}, Sacrifice a Food: Add one mana of any color.| +Maraleaf Pixie|Throne of Eldraine|196|U|{G}{U}|Creature - Faerie|2|2|Flying${T}: Add {G} or {U}.| +Oko, Thief of Crowns|Throne of Eldraine|197|M|{1}{G}{U}|Legendary Planeswalker - Oko|4|+2: Create a Food token.$+1: Target artifact or creature loses all abilities and becomes a green Elk creature with base power and toughness 3/3.$−5: Exchange control of target artifact or creature you control and target creature an opponent controls with power 3 or less.| +Golden Egg|Throne of Eldraine|220|C|{2}|Artifact - Food|||When Golden Egg enters the battlefield, draw a card.${1}, {T}: Sacrifice Golden Egg: Add one mana of any color.${2}, {T}, Sacrifice Golden Egg: You gain 3 life.| +Witch's Cottage|Throne of Eldraine|249|C||Land - Swamp|||({T}: Add {B}.)$Witch's Cottage enters the battlefield tapped unless you control three or more other Swamps.$When Witch's Cottage enters the battlefield untapped, you may put target creature card from your graveyard on top of your library.| +Flaxen Intruder|Throne of Eldraine|297|U|{G}|Creature - Human Berserker|1|2|Whenever Flaxen Intruder deals combat damage to a player, you may sacrifice it. When you do, destroy target artifact or enchantment.$Welcome Home {5}{G}{G}$Sorcery — Adventure$Create three 2/2 green Bear creature tokens.| +Lovestruck Beast|Throne of Eldraine|299|R|{2}{G}|Creature - Beast Noble|5|5|Lovestruck Beast can't attack unless you control a 1/1 creature.$Heart's Desire {G}$Sorcery — Adventure$Create a 1/1 white Human creature token.| +Chulane, Teller of Tales|Throne of Eldraine|326|M|{2}{G}{W}{U}|Legendary Creature - Human Druid|2|4|Vigilance$Whenever you cast a creature spell, draw a card, then you may put a land card from your hand onto the battlefield.${3}, {T}: Return target creature you control to its owner's hand.| +Arcane Signet|Throne of Eldraine|331|C|{2}|Artifact|||{T}: Add one mana of any color in your commander's color identity.| +Midnight Clock|Throne of Eldraine|346|R|{2}{U}|Artifact|||{T}: Add {U}.${2}{U}: Put an hour counter on Midnight Clock.$At the beginning of your upkeep, put an hour counter on Midnight Clock.$When the twelfth hour counter is put on Midnight Clock, shuffle your hand and graveyard into your library, then draw seven cards. Exile Midnight Clock.| +Rankle, Master of Pranks|Throne of Eldraine|356|M|{2}{B}{B}|Legendary Creature - Faerie Rogue|3|3|Flying, haste$Whenever Rankle, Master of Pranks deals combat damage to a player, choose any number —$• Each player discards a card.$• Each player loses 1 life and draws a card.$• Each player sacrifices a creature.| From 83eed8b81330b8c8c603594adb1f77bbf64775a7 Mon Sep 17 00:00:00 2001 From: Evan Kranzler Date: Wed, 4 Sep 2019 08:01:12 -0400 Subject: [PATCH 14/19] fixed a file location --- Mage.Sets/src/mage/cards/{ => g}/GildedGoose.java | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename Mage.Sets/src/mage/cards/{ => g}/GildedGoose.java (100%) diff --git a/Mage.Sets/src/mage/cards/GildedGoose.java b/Mage.Sets/src/mage/cards/g/GildedGoose.java similarity index 100% rename from Mage.Sets/src/mage/cards/GildedGoose.java rename to Mage.Sets/src/mage/cards/g/GildedGoose.java From 6419f5cb1cf2259098733f9669f6a50cfd796697 Mon Sep 17 00:00:00 2001 From: Evan Kranzler Date: Wed, 4 Sep 2019 08:05:45 -0400 Subject: [PATCH 15/19] Implemented Tome Raider --- Mage.Sets/src/mage/cards/t/TomeRaider.java | 41 +++++++++++++++++++ Mage.Sets/src/mage/sets/ThroneOfEldraine.java | 1 + 2 files changed, 42 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/t/TomeRaider.java diff --git a/Mage.Sets/src/mage/cards/t/TomeRaider.java b/Mage.Sets/src/mage/cards/t/TomeRaider.java new file mode 100644 index 0000000000..2661a4c17f --- /dev/null +++ b/Mage.Sets/src/mage/cards/t/TomeRaider.java @@ -0,0 +1,41 @@ +package mage.cards.t; + +import mage.MageInt; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.effects.common.DrawCardSourceControllerEffect; +import mage.abilities.keyword.FlyingAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.SubType; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class TomeRaider extends CardImpl { + + public TomeRaider(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{U}"); + + this.subtype.add(SubType.FAERIE); + this.power = new MageInt(1); + this.toughness = new MageInt(1); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + + // When Tome Raider enters the battlefield, draw a card. + this.addAbility(new EntersBattlefieldTriggeredAbility(new DrawCardSourceControllerEffect(1))); + } + + private TomeRaider(final TomeRaider card) { + super(card); + } + + @Override + public TomeRaider copy() { + return new TomeRaider(this); + } +} diff --git a/Mage.Sets/src/mage/sets/ThroneOfEldraine.java b/Mage.Sets/src/mage/sets/ThroneOfEldraine.java index 69b482bf99..74a53656b0 100644 --- a/Mage.Sets/src/mage/sets/ThroneOfEldraine.java +++ b/Mage.Sets/src/mage/sets/ThroneOfEldraine.java @@ -32,6 +32,7 @@ public final class ThroneOfEldraine extends ExpansionSet { cards.add(new SetCardInfo("Crystal Slipper", 119, Rarity.COMMON, mage.cards.c.CrystalSlipper.class)); cards.add(new SetCardInfo("Gilded Goose", 160, Rarity.RARE, mage.cards.g.GildedGoose.class)); cards.add(new SetCardInfo("Golden Egg", 220, Rarity.COMMON, mage.cards.g.GoldenEgg.class)); + cards.add(new SetCardInfo("Tome Raider", 68, Rarity.COMMON, mage.cards.t.TomeRaider.class)); cards.add(new SetCardInfo("Wishful Merfolk", 73, Rarity.COMMON, mage.cards.w.WishfulMerfolk.class)); cards.add(new SetCardInfo("Witching Well", 74, Rarity.COMMON, mage.cards.w.WitchingWell.class)); } From 6ab89127c9760f04339e240287cedc2e4ab8ee0f Mon Sep 17 00:00:00 2001 From: Evan Kranzler Date: Wed, 4 Sep 2019 08:07:59 -0400 Subject: [PATCH 16/19] Implemented Maraleaf Pixie --- Mage.Sets/src/mage/cards/m/MaraleafPixie.java | 42 +++++++++++++++++++ Mage.Sets/src/mage/sets/ThroneOfEldraine.java | 1 + 2 files changed, 43 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/m/MaraleafPixie.java diff --git a/Mage.Sets/src/mage/cards/m/MaraleafPixie.java b/Mage.Sets/src/mage/cards/m/MaraleafPixie.java new file mode 100644 index 0000000000..a18a32fa7a --- /dev/null +++ b/Mage.Sets/src/mage/cards/m/MaraleafPixie.java @@ -0,0 +1,42 @@ +package mage.cards.m; + +import mage.MageInt; +import mage.abilities.keyword.FlyingAbility; +import mage.abilities.mana.BlueManaAbility; +import mage.abilities.mana.GreenManaAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.SubType; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class MaraleafPixie extends CardImpl { + + public MaraleafPixie(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{G}{U}"); + + this.subtype.add(SubType.FAERIE); + this.power = new MageInt(2); + this.toughness = new MageInt(2); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + + // {T}: Add {G} or {U}. + this.addAbility(new GreenManaAbility()); + this.addAbility(new BlueManaAbility()); + } + + private MaraleafPixie(final MaraleafPixie card) { + super(card); + } + + @Override + public MaraleafPixie copy() { + return new MaraleafPixie(this); + } +} diff --git a/Mage.Sets/src/mage/sets/ThroneOfEldraine.java b/Mage.Sets/src/mage/sets/ThroneOfEldraine.java index 74a53656b0..c284aa9009 100644 --- a/Mage.Sets/src/mage/sets/ThroneOfEldraine.java +++ b/Mage.Sets/src/mage/sets/ThroneOfEldraine.java @@ -32,6 +32,7 @@ public final class ThroneOfEldraine extends ExpansionSet { cards.add(new SetCardInfo("Crystal Slipper", 119, Rarity.COMMON, mage.cards.c.CrystalSlipper.class)); cards.add(new SetCardInfo("Gilded Goose", 160, Rarity.RARE, mage.cards.g.GildedGoose.class)); cards.add(new SetCardInfo("Golden Egg", 220, Rarity.COMMON, mage.cards.g.GoldenEgg.class)); + cards.add(new SetCardInfo("Maraleaf Pixie", 196, Rarity.UNCOMMON, mage.cards.m.MaraleafPixie.class)); cards.add(new SetCardInfo("Tome Raider", 68, Rarity.COMMON, mage.cards.t.TomeRaider.class)); cards.add(new SetCardInfo("Wishful Merfolk", 73, Rarity.COMMON, mage.cards.w.WishfulMerfolk.class)); cards.add(new SetCardInfo("Witching Well", 74, Rarity.COMMON, mage.cards.w.WitchingWell.class)); From dd3bedb5c0e89ae350e4d49494bd27eec7396824 Mon Sep 17 00:00:00 2001 From: Evan Kranzler Date: Wed, 4 Sep 2019 08:38:27 -0400 Subject: [PATCH 17/19] Implemented Run Away Together --- .../src/mage/cards/r/RunAwayTogether.java | 71 +++++++++++++++++++ Mage.Sets/src/mage/sets/ThroneOfEldraine.java | 1 + 2 files changed, 72 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/r/RunAwayTogether.java diff --git a/Mage.Sets/src/mage/cards/r/RunAwayTogether.java b/Mage.Sets/src/mage/cards/r/RunAwayTogether.java new file mode 100644 index 0000000000..2b6f0628d4 --- /dev/null +++ b/Mage.Sets/src/mage/cards/r/RunAwayTogether.java @@ -0,0 +1,71 @@ +package mage.cards.r; + +import mage.abilities.Ability; +import mage.abilities.effects.common.ReturnToHandTargetEffect; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.filter.StaticFilters; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.target.common.TargetCreaturePermanent; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class RunAwayTogether extends CardImpl { + + public RunAwayTogether(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{1}{U}"); + + // Choose two target creatures controlled by different players. Return those creatures to their owners' hands. + this.getSpellAbility().addEffect(new ReturnToHandTargetEffect(true)); + this.getSpellAbility().addTarget(new RunAwayTogetherTarget()); + } + + private RunAwayTogether(final RunAwayTogether card) { + super(card); + } + + @Override + public RunAwayTogether copy() { + return new RunAwayTogether(this); + } +} + +class RunAwayTogetherTarget extends TargetCreaturePermanent { + + RunAwayTogetherTarget() { + super(2, 2, StaticFilters.FILTER_PERMANENT_CREATURE, false); + } + + private RunAwayTogetherTarget(final RunAwayTogetherTarget target) { + super(target); + } + + @Override + public RunAwayTogetherTarget copy() { + return new RunAwayTogetherTarget(this); + } + + @Override + public boolean canTarget(UUID controllerId, UUID id, Ability source, Game game) { + if (!super.canTarget(controllerId, id, source, game)) { + return false; + } + Permanent creature = game.getPermanent(id); + if (creature == null) { + return false; + } + return !this.getTargets() + .stream() + .map(game::getPermanent) + .anyMatch(permanent -> permanent != null + && !creature.getId().equals(permanent.getId()) + && !creature.isControlledBy(permanent.getControllerId()) + ); + } +} +// give carly rae jepsen a sword \ No newline at end of file diff --git a/Mage.Sets/src/mage/sets/ThroneOfEldraine.java b/Mage.Sets/src/mage/sets/ThroneOfEldraine.java index c284aa9009..e455f0dc5e 100644 --- a/Mage.Sets/src/mage/sets/ThroneOfEldraine.java +++ b/Mage.Sets/src/mage/sets/ThroneOfEldraine.java @@ -33,6 +33,7 @@ public final class ThroneOfEldraine extends ExpansionSet { cards.add(new SetCardInfo("Gilded Goose", 160, Rarity.RARE, mage.cards.g.GildedGoose.class)); cards.add(new SetCardInfo("Golden Egg", 220, Rarity.COMMON, mage.cards.g.GoldenEgg.class)); cards.add(new SetCardInfo("Maraleaf Pixie", 196, Rarity.UNCOMMON, mage.cards.m.MaraleafPixie.class)); + cards.add(new SetCardInfo("Run Away Together", 62, Rarity.COMMON, mage.cards.r.RunAwayTogether.class)); cards.add(new SetCardInfo("Tome Raider", 68, Rarity.COMMON, mage.cards.t.TomeRaider.class)); cards.add(new SetCardInfo("Wishful Merfolk", 73, Rarity.COMMON, mage.cards.w.WishfulMerfolk.class)); cards.add(new SetCardInfo("Witching Well", 74, Rarity.COMMON, mage.cards.w.WitchingWell.class)); From 52279895cfb072d4c0c7d3784711d9a9d910ee10 Mon Sep 17 00:00:00 2001 From: Evan Kranzler Date: Wed, 4 Sep 2019 10:11:49 -0400 Subject: [PATCH 18/19] Implemented Rankle, Master of Pranks --- .../mage/cards/r/RankleMasterOfPranks.java | 67 +++++++++++++++++++ Mage.Sets/src/mage/sets/ThroneOfEldraine.java | 1 + Mage/src/main/java/mage/abilities/Modes.java | 2 + .../effects/common/SacrificeAllEffect.java | 14 ++-- 4 files changed, 77 insertions(+), 7 deletions(-) create mode 100644 Mage.Sets/src/mage/cards/r/RankleMasterOfPranks.java diff --git a/Mage.Sets/src/mage/cards/r/RankleMasterOfPranks.java b/Mage.Sets/src/mage/cards/r/RankleMasterOfPranks.java new file mode 100644 index 0000000000..182ff06ed1 --- /dev/null +++ b/Mage.Sets/src/mage/cards/r/RankleMasterOfPranks.java @@ -0,0 +1,67 @@ +package mage.cards.r; + +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.Mode; +import mage.abilities.common.DealsCombatDamageToAPlayerTriggeredAbility; +import mage.abilities.effects.common.DrawCardAllEffect; +import mage.abilities.effects.common.LoseLifeAllPlayersEffect; +import mage.abilities.effects.common.SacrificeAllEffect; +import mage.abilities.effects.common.discard.DiscardEachPlayerEffect; +import mage.abilities.keyword.FlyingAbility; +import mage.abilities.keyword.HasteAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.SubType; +import mage.constants.SuperType; +import mage.filter.StaticFilters; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class RankleMasterOfPranks extends CardImpl { + + public RankleMasterOfPranks(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{B}{B}"); + + this.addSuperType(SuperType.LEGENDARY); + this.subtype.add(SubType.FAERIE); + this.subtype.add(SubType.ROGUE); + this.power = new MageInt(3); + this.toughness = new MageInt(3); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + + // Haste + this.addAbility(HasteAbility.getInstance()); + + // Whenever Rankle, Master of Pranks deals combat damage to a player, choose any number — + // • Each player discards a card. + Ability ability = new DealsCombatDamageToAPlayerTriggeredAbility(new DiscardEachPlayerEffect(), false); + + // • Each player loses 1 life and draws a card. + Mode mode = new Mode(new LoseLifeAllPlayersEffect(1)); + mode.addEffect(new DrawCardAllEffect(1).setText("and draws a card")); + ability.addMode(mode); + + // • Each player sacrifices a creature. + ability.addMode(new Mode(new SacrificeAllEffect(StaticFilters.FILTER_CONTROLLED_CREATURE_SHORT_TEXT))); + + ability.getModes().setMinModes(0); + ability.getModes().setMaxModes(3); + this.addAbility(ability); + } + + private RankleMasterOfPranks(final RankleMasterOfPranks card) { + super(card); + } + + @Override + public RankleMasterOfPranks copy() { + return new RankleMasterOfPranks(this); + } +} diff --git a/Mage.Sets/src/mage/sets/ThroneOfEldraine.java b/Mage.Sets/src/mage/sets/ThroneOfEldraine.java index e455f0dc5e..554e5d8929 100644 --- a/Mage.Sets/src/mage/sets/ThroneOfEldraine.java +++ b/Mage.Sets/src/mage/sets/ThroneOfEldraine.java @@ -33,6 +33,7 @@ public final class ThroneOfEldraine extends ExpansionSet { cards.add(new SetCardInfo("Gilded Goose", 160, Rarity.RARE, mage.cards.g.GildedGoose.class)); cards.add(new SetCardInfo("Golden Egg", 220, Rarity.COMMON, mage.cards.g.GoldenEgg.class)); cards.add(new SetCardInfo("Maraleaf Pixie", 196, Rarity.UNCOMMON, mage.cards.m.MaraleafPixie.class)); + cards.add(new SetCardInfo("Rankle, Master of Pranks", 356, Rarity.MYTHIC, mage.cards.r.RankleMasterOfPranks.class)); cards.add(new SetCardInfo("Run Away Together", 62, Rarity.COMMON, mage.cards.r.RunAwayTogether.class)); cards.add(new SetCardInfo("Tome Raider", 68, Rarity.COMMON, mage.cards.t.TomeRaider.class)); cards.add(new SetCardInfo("Wishful Merfolk", 73, Rarity.COMMON, mage.cards.w.WishfulMerfolk.class)); diff --git a/Mage/src/main/java/mage/abilities/Modes.java b/Mage/src/main/java/mage/abilities/Modes.java index 1fd429d2cd..d74e678baf 100644 --- a/Mage/src/main/java/mage/abilities/Modes.java +++ b/Mage/src/main/java/mage/abilities/Modes.java @@ -336,6 +336,8 @@ public class Modes extends LinkedHashMap { sb.append("choose one or more. Each mode must target ").append(getMaxModesFilter().getMessage()); } else if (this.getMinModes() == 0 && this.getMaxModes() == 1) { sb.append("choose up to one"); + } else if (this.getMinModes() == 0 && this.getMaxModes() == 3) { + sb.append("choose any number"); } else if (this.getMinModes() == 1 && this.getMaxModes() > 2) { sb.append("choose one or more"); } else if (this.getMinModes() == 1 && this.getMaxModes() == 2) { diff --git a/Mage/src/main/java/mage/abilities/effects/common/SacrificeAllEffect.java b/Mage/src/main/java/mage/abilities/effects/common/SacrificeAllEffect.java index 1f1057da90..8f5cdf4a3e 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/SacrificeAllEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/SacrificeAllEffect.java @@ -1,9 +1,6 @@ package mage.abilities.effects.common; -import java.util.ArrayList; -import java.util.List; -import java.util.UUID; import mage.abilities.Ability; import mage.abilities.dynamicvalue.DynamicValue; import mage.abilities.dynamicvalue.common.StaticValue; @@ -16,8 +13,11 @@ import mage.players.Player; import mage.target.common.TargetControlledPermanent; import mage.util.CardUtil; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + /** - * * @author BetaSteward_at_googlemail.com */ public class SacrificeAllEffect extends OneShotEffect { @@ -86,10 +86,10 @@ public class SacrificeAllEffect extends OneShotEffect { sb.append("each player sacrifices "); if (amount.toString().equals("X")) { sb.append(amount.toString()); - } else { - sb.append(CardUtil.numberToText(amount.toString(), "a")); + sb.append(' '); + } else if (!filter.getMessage().startsWith("a ")) { + sb.append(CardUtil.numberToText(amount.toString(), "a ")); } - sb.append(' '); sb.append(filter.getMessage()); staticText = sb.toString(); } From fc41a8ef43fd8b987e42a0076be97e276b7efe0f Mon Sep 17 00:00:00 2001 From: Evan Kranzler Date: Wed, 4 Sep 2019 10:14:48 -0400 Subject: [PATCH 19/19] updated ELD spoiler --- Utils/mtg-cards-data.txt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Utils/mtg-cards-data.txt b/Utils/mtg-cards-data.txt index f379f9a76c..0116f0b580 100644 --- a/Utils/mtg-cards-data.txt +++ b/Utils/mtg-cards-data.txt @@ -35999,15 +35999,20 @@ Tome Raider|Throne of Eldraine|68|C|{2}{U}|Creature - Faerie|1|1|Flying$When Tom Wishful Merfolk|Throne of Eldraine|73|C|{1}{U}|Creature - Merfolk|3|2|Defender${1}{U}: Wishful Merfolk loses defender and becomes a Human until end of turn.| Witching Well|Throne of Eldraine|74|C|{U}|Artifact|||When Witching Well enters the battlefield, scry 2.${3}{U}, Sacrifice Witching Well: Draw two cards.| Eye Collector|Throne of Eldraine|86|C|{B}|Creature - Faerie|1|1|Flying$Whenever Eye Collector deals combat damage to a player, each player puts the top card of their library into their graveyard.| +Syr Konrad, the Grim|Throne of Eldraine|107|U|{3}{B}{B}|Legendary Creature - Human Knight|5|4|Whenever another creature dies, or a creature card is put into a graveyard from anywhere other than the battlefield, or a creature card leaves your graveyard, Syr Konrad, the Grim deals 1 damage to each opponent.${1}{B}: Each player puts the top card of their library into their graveyard.| Crystal Slipper|Throne of Eldraine|119|C|{1}{R}|Artifact - Equipment|||Equipped creature gets +1/+0 and has haste.$Equip {1}| Gilded Goose|Throne of Eldraine|160|R|{G}|Creature - Bird|0|2|Flying$When Gilded Goose enters the battlefield, create a Food token.${1}{G}, {T}: Create a Food token.${T}, Sacrifice a Food: Add one mana of any color.| Maraleaf Pixie|Throne of Eldraine|196|U|{G}{U}|Creature - Faerie|2|2|Flying${T}: Add {G} or {U}.| Oko, Thief of Crowns|Throne of Eldraine|197|M|{1}{G}{U}|Legendary Planeswalker - Oko|4|+2: Create a Food token.$+1: Target artifact or creature loses all abilities and becomes a green Elk creature with base power and toughness 3/3.$−5: Exchange control of target artifact or creature you control and target creature an opponent controls with power 3 or less.| +Wintermoor Commander|Throne of Eldraine|205|U|{W}{B}|Creature - Human Knight|2|*|Deathtouch$Wintermoor Commander's toughness is equal to the number of Knights you control.$Whenever Wintermoor Commander attacks, another target Knight you control gains indestructible until end of turn.| Golden Egg|Throne of Eldraine|220|C|{2}|Artifact - Food|||When Golden Egg enters the battlefield, draw a card.${1}, {T}: Sacrifice Golden Egg: Add one mana of any color.${2}, {T}, Sacrifice Golden Egg: You gain 3 life.| +Tournament Grounds|Throne of Eldraine|248|U||Land|||{T}: Add {C}.${T}: Add {R}, {W}, or {B}. Spend this mana only to cast a Knight or Equipment spell.| Witch's Cottage|Throne of Eldraine|249|C||Land - Swamp|||({T}: Add {B}.)$Witch's Cottage enters the battlefield tapped unless you control three or more other Swamps.$When Witch's Cottage enters the battlefield untapped, you may put target creature card from your graveyard on top of your library.| +Embereth Shieldbreaker|Throne of Eldraine|292|U|{1}{R}|Creature - Human Knight|2|1|Battle Display {R}$Sorcery — Adventure$Destroy target artifact.| Flaxen Intruder|Throne of Eldraine|297|U|{G}|Creature - Human Berserker|1|2|Whenever Flaxen Intruder deals combat damage to a player, you may sacrifice it. When you do, destroy target artifact or enchantment.$Welcome Home {5}{G}{G}$Sorcery — Adventure$Create three 2/2 green Bear creature tokens.| Lovestruck Beast|Throne of Eldraine|299|R|{2}{G}|Creature - Beast Noble|5|5|Lovestruck Beast can't attack unless you control a 1/1 creature.$Heart's Desire {G}$Sorcery — Adventure$Create a 1/1 white Human creature token.| Chulane, Teller of Tales|Throne of Eldraine|326|M|{2}{G}{W}{U}|Legendary Creature - Human Druid|2|4|Vigilance$Whenever you cast a creature spell, draw a card, then you may put a land card from your hand onto the battlefield.${3}, {T}: Return target creature you control to its owner's hand.| Arcane Signet|Throne of Eldraine|331|C|{2}|Artifact|||{T}: Add one mana of any color in your commander's color identity.| +The Circle of Loyalty|Throne of Eldraine|336|M|{4}{W}{W}|Legendary Artifact|||This spell costs {1} less to cast for each Knight you control.$Creatures you control get +1/+1.$Whenever you cast a legendary spell, create a 2/2 white Knight creature token with vigilance.${3}{W}, {T}: Create a 2/2 white Knight creature token with vigilance.| Midnight Clock|Throne of Eldraine|346|R|{2}{U}|Artifact|||{T}: Add {U}.${2}{U}: Put an hour counter on Midnight Clock.$At the beginning of your upkeep, put an hour counter on Midnight Clock.$When the twelfth hour counter is put on Midnight Clock, shuffle your hand and graveyard into your library, then draw seven cards. Exile Midnight Clock.| Rankle, Master of Pranks|Throne of Eldraine|356|M|{2}{B}{B}|Legendary Creature - Faerie Rogue|3|3|Flying, haste$Whenever Rankle, Master of Pranks deals combat damage to a player, choose any number —$• Each player discards a card.$• Each player loses 1 life and draws a card.$• Each player sacrifices a creature.|