From 8dd1bed1fa1aa3e8235a74eea14061005ae77c0f Mon Sep 17 00:00:00 2001 From: theelk801 Date: Tue, 8 Jul 2025 08:05:32 -0400 Subject: [PATCH] [EOE] Implement Galactic Wayfarer --- .../src/mage/cards/g/GalacticWayfarer.java | 39 +++++++++++++++++++ Mage.Sets/src/mage/sets/EdgeOfEternities.java | 1 + .../src/main/java/mage/constants/SubType.java | 1 + .../game/permanent/token/LanderToken.java | 39 +++++++++++++++++++ Utils/mtg-cards-data.txt | 1 + 5 files changed, 81 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/g/GalacticWayfarer.java create mode 100644 Mage/src/main/java/mage/game/permanent/token/LanderToken.java diff --git a/Mage.Sets/src/mage/cards/g/GalacticWayfarer.java b/Mage.Sets/src/mage/cards/g/GalacticWayfarer.java new file mode 100644 index 00000000000..7fb6e3daa56 --- /dev/null +++ b/Mage.Sets/src/mage/cards/g/GalacticWayfarer.java @@ -0,0 +1,39 @@ +package mage.cards.g; + +import mage.MageInt; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.effects.common.CreateTokenEffect; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.SubType; +import mage.game.permanent.token.LanderToken; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class GalacticWayfarer extends CardImpl { + + public GalacticWayfarer(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{G}"); + + this.subtype.add(SubType.HUMAN); + this.subtype.add(SubType.SCOUT); + this.power = new MageInt(3); + this.toughness = new MageInt(3); + + // When this creature enters, create a Lander token. + this.addAbility(new EntersBattlefieldTriggeredAbility(new CreateTokenEffect(new LanderToken()))); + } + + private GalacticWayfarer(final GalacticWayfarer card) { + super(card); + } + + @Override + public GalacticWayfarer copy() { + return new GalacticWayfarer(this); + } +} diff --git a/Mage.Sets/src/mage/sets/EdgeOfEternities.java b/Mage.Sets/src/mage/sets/EdgeOfEternities.java index 66a9aeb6c40..c8da13a1e5b 100644 --- a/Mage.Sets/src/mage/sets/EdgeOfEternities.java +++ b/Mage.Sets/src/mage/sets/EdgeOfEternities.java @@ -26,6 +26,7 @@ public final class EdgeOfEternities extends ExpansionSet { cards.add(new SetCardInfo("Embrace Oblivion", 98, Rarity.COMMON, mage.cards.e.EmbraceOblivion.class)); cards.add(new SetCardInfo("Forest", 266, Rarity.LAND, mage.cards.basiclands.Forest.class, FULL_ART_BFZ_VARIOUS)); cards.add(new SetCardInfo("Forest", 371, Rarity.LAND, mage.cards.basiclands.Forest.class, FULL_ART_BFZ_VARIOUS)); + cards.add(new SetCardInfo("Galactic Wayfarer", 185, Rarity.COMMON, mage.cards.g.GalacticWayfarer.class)); cards.add(new SetCardInfo("Godless Shrine", 254, Rarity.RARE, mage.cards.g.GodlessShrine.class)); cards.add(new SetCardInfo("Harmonious Grovestrider", 189, Rarity.UNCOMMON, mage.cards.h.HarmoniousGrovestrider.class)); cards.add(new SetCardInfo("Island", 263, Rarity.LAND, mage.cards.basiclands.Island.class, FULL_ART_BFZ_VARIOUS)); diff --git a/Mage/src/main/java/mage/constants/SubType.java b/Mage/src/main/java/mage/constants/SubType.java index eacbab09452..623965eafc2 100644 --- a/Mage/src/main/java/mage/constants/SubType.java +++ b/Mage/src/main/java/mage/constants/SubType.java @@ -61,6 +61,7 @@ public enum SubType { GOLD("Gold", SubTypeSet.ArtifactType), INCUBATOR("Incubator", SubTypeSet.ArtifactType), JUNK("Junk", SubTypeSet.ArtifactType), + LANDER("Lander", SubTypeSet.ArtifactType), MAP("Map", SubTypeSet.ArtifactType), POWERSTONE("Powerstone", SubTypeSet.ArtifactType), SPACECRAFT("Spacecraft", SubTypeSet.ArtifactType), diff --git a/Mage/src/main/java/mage/game/permanent/token/LanderToken.java b/Mage/src/main/java/mage/game/permanent/token/LanderToken.java new file mode 100644 index 00000000000..5ed109a96cd --- /dev/null +++ b/Mage/src/main/java/mage/game/permanent/token/LanderToken.java @@ -0,0 +1,39 @@ +package mage.game.permanent.token; + +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.search.SearchLibraryPutInPlayEffect; +import mage.constants.CardType; +import mage.constants.SubType; +import mage.filter.StaticFilters; +import mage.target.common.TargetCardInLibrary; + +/** + * @author TheElk801 + */ +public final class LanderToken extends TokenImpl { + + public LanderToken() { + super("Lander Token", "Lander token"); + cardType.add(CardType.ARTIFACT); + subtype.add(SubType.LANDER); + + Ability ability = new SimpleActivatedAbility(new SearchLibraryPutInPlayEffect( + new TargetCardInLibrary(StaticFilters.FILTER_CARD_BASIC_LAND_A), true + ), new GenericManaCost(2)); + ability.addCost(new TapSourceCost()); + ability.addCost(new SacrificeSourceCost()); + this.addAbility(ability); + } + + private LanderToken(final LanderToken token) { + super(token); + } + + public LanderToken copy() { + return new LanderToken(this); + } +} diff --git a/Utils/mtg-cards-data.txt b/Utils/mtg-cards-data.txt index dd5f675e781..ae9ddb98b4a 100644 --- a/Utils/mtg-cards-data.txt +++ b/Utils/mtg-cards-data.txt @@ -59113,6 +59113,7 @@ The Seriema|Edge of Eternities|35|R|{1}{W}{W}|Legendary Artifact - Spacecraft||| Embrace Oblivion|Edge of Eternities|98|C|{B}|Sorcery|||As an additional cost to cast this spell, sacrifice an artifact or creature.$Destroy target creature or Spacecraft.| Sothera, the Supervoid|Edge of Eternities|115|M|{2}{B}{B}|Legendary Enchantment|||Whenever a creature you control dies, each opponent chooses a creature they control and exiles it.$At the beginning of your end step, if a player controls no creatures, sacrifice Sothera, then put a creature card exiled with it onto the battlefield under your control with two additional +1/+1 counters on it.| Temporal Intervention|Edge of Eternities|120|C|{2}{B}|Sorcery|||Void -- This spell costs {2} less to cast if a nonland permanent left the battlefield this turn or a spell was warped this turn.$Target opponent reveals their hand. You choose a nonland card from it. That player discards that card.| +Galactic Wayfarer|Edge of Eternities|185|C|{2}{G}|Creature - Human Scout|3|3|When this creature enters, create a Lander token.| Harmonious Grovestrider|Edge of Eternities|189|U|{3}{G}{G}|Creature - Beast|*|*|Ward {2}$This creature's power and toughness are each equal to the number of lands you control.| Alpharael, Dreaming Acolyte|Edge of Eternities|212|U|{1}{U}{B}|Legendary Creature - Human Cleric|2|3|When Alpharael enters, draw two cards. Then discard two cards unless you discard an artifact card. During your turn, Alpharael has deathtouch.| Sami, Ship's Engineer|Edge of Eternities|225|U|{2}{R}{W}|Legendary Creature - Human Artificer|2|4|At the beginning of your end step, if you control two or more tapped creatures, create a tapped 2/2 colorless Robot artifact creature token.|