From 8ec4ffd9de202ff257e66650cb53bd4485ba0556 Mon Sep 17 00:00:00 2001 From: Susucre <34709007+Susucre@users.noreply.github.com> Date: Thu, 6 Jun 2024 15:47:19 +0200 Subject: [PATCH] implement [MH3] Genku, Future Shaper --- .../src/mage/cards/g/GenkuFutureShaper.java | 88 +++++++++++++++++++ Mage.Sets/src/mage/sets/ModernHorizons3.java | 1 + .../permanent/token/Fox22VigilanceToken.java | 32 +++++++ .../token/Moonfolk12FlyingToken.java | 32 +++++++ .../permanent/token/Rat11LifelinkToken.java | 32 +++++++ 5 files changed, 185 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/g/GenkuFutureShaper.java create mode 100644 Mage/src/main/java/mage/game/permanent/token/Fox22VigilanceToken.java create mode 100644 Mage/src/main/java/mage/game/permanent/token/Moonfolk12FlyingToken.java create mode 100644 Mage/src/main/java/mage/game/permanent/token/Rat11LifelinkToken.java diff --git a/Mage.Sets/src/mage/cards/g/GenkuFutureShaper.java b/Mage.Sets/src/mage/cards/g/GenkuFutureShaper.java new file mode 100644 index 00000000000..937d83c60ba --- /dev/null +++ b/Mage.Sets/src/mage/cards/g/GenkuFutureShaper.java @@ -0,0 +1,88 @@ +package mage.cards.g; + +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.Mode; +import mage.abilities.common.LeavesBattlefieldAllTriggeredAbility; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.CreateTokenEffect; +import mage.abilities.effects.common.counter.AddCountersAllEffect; +import mage.abilities.hint.common.ModesAlreadyUsedHint; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.SubType; +import mage.constants.SuperType; +import mage.counters.CounterType; +import mage.filter.FilterPermanent; +import mage.filter.StaticFilters; +import mage.filter.common.FilterControlledPermanent; +import mage.filter.predicate.mageobject.AnotherPredicate; +import mage.filter.predicate.permanent.TokenPredicate; +import mage.game.permanent.token.Fox22VigilanceToken; +import mage.game.permanent.token.Moonfolk12FlyingToken; +import mage.game.permanent.token.Rat11LifelinkToken; + +import java.util.UUID; + +/** + * @author Susucr + */ +public final class GenkuFutureShaper extends CardImpl { + + private static final FilterPermanent filter = new FilterControlledPermanent("another nontoken permanent you control"); + + static { + filter.add(AnotherPredicate.instance); + filter.add(TokenPredicate.FALSE); + } + + public GenkuFutureShaper(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{W}{U}"); + + this.supertype.add(SuperType.LEGENDARY); + this.subtype.add(SubType.MOONFOLK); + this.subtype.add(SubType.WIZARD); + this.power = new MageInt(2); + this.toughness = new MageInt(5); + + // Whenever another nontoken permanent you control leaves the battlefield, choose one that hasn't been chosen this turn. Create a creature token with those characteristics. + // * 2/2 white Fox with vigilance. + // * 1/2 blue Moonfolk with flying. + // * 1/1 black Rat with lifelink. + Ability ability = new LeavesBattlefieldAllTriggeredAbility( + new CreateTokenEffect(new Fox22VigilanceToken()), filter, false + ); + ability.setModeTag("2/2 white Fox with vigilance"); + ability.getModes().setLimitUsageByOnce(true); + + // • Create a tapped Treasure token. + ability.addMode( + new Mode(new CreateTokenEffect(new Moonfolk12FlyingToken())) + .setModeTag("1/2 blue Moonfolk with flying") + ); + // • You gain 2 life. + ability.addMode( + new Mode(new CreateTokenEffect(new Rat11LifelinkToken())) + .setModeTag("1/1 black Rat with lifelink") + ); + ability.addHint(ModesAlreadyUsedHint.instance); + this.addAbility(ability); + + // {3}{W}{U}: Put a +1/+1 counter on each creature you control. + this.addAbility(new SimpleActivatedAbility( + new AddCountersAllEffect(CounterType.P1P1.createInstance(), StaticFilters.FILTER_CONTROLLED_CREATURE), + new ManaCostsImpl<>("{3}{W}{U}") + )); + } + + private GenkuFutureShaper(final GenkuFutureShaper card) { + super(card); + } + + @Override + public GenkuFutureShaper copy() { + return new GenkuFutureShaper(this); + } +} diff --git a/Mage.Sets/src/mage/sets/ModernHorizons3.java b/Mage.Sets/src/mage/sets/ModernHorizons3.java index e91c66f8ba2..1788dd06d7d 100644 --- a/Mage.Sets/src/mage/sets/ModernHorizons3.java +++ b/Mage.Sets/src/mage/sets/ModernHorizons3.java @@ -125,6 +125,7 @@ public final class ModernHorizons3 extends ExpansionSet { cards.add(new SetCardInfo("Frogmyr Enforcer", 120, Rarity.UNCOMMON, mage.cards.f.FrogmyrEnforcer.class)); cards.add(new SetCardInfo("Furnace Hellkite", 121, Rarity.UNCOMMON, mage.cards.f.FurnaceHellkite.class)); cards.add(new SetCardInfo("Galvanic Discharge", 122, Rarity.COMMON, mage.cards.g.GalvanicDischarge.class)); + cards.add(new SetCardInfo("Genku, Future Shaper", 186, Rarity.RARE, mage.cards.g.GenkuFutureShaper.class)); cards.add(new SetCardInfo("Ghostfire Slice", 123, Rarity.UNCOMMON, mage.cards.g.GhostfireSlice.class)); cards.add(new SetCardInfo("Gift of the Viper", 156, Rarity.COMMON, mage.cards.g.GiftOfTheViper.class)); cards.add(new SetCardInfo("Glaring Fleshraker", 7, Rarity.UNCOMMON, mage.cards.g.GlaringFleshraker.class)); diff --git a/Mage/src/main/java/mage/game/permanent/token/Fox22VigilanceToken.java b/Mage/src/main/java/mage/game/permanent/token/Fox22VigilanceToken.java new file mode 100644 index 00000000000..1c42df12d87 --- /dev/null +++ b/Mage/src/main/java/mage/game/permanent/token/Fox22VigilanceToken.java @@ -0,0 +1,32 @@ +package mage.game.permanent.token; + +import mage.MageInt; +import mage.abilities.keyword.VigilanceAbility; +import mage.constants.CardType; +import mage.constants.SubType; + +/** + * @author Susucr + */ +public final class Fox22VigilanceToken extends TokenImpl { + + public Fox22VigilanceToken() { + super("Fox Token", "2/2 white Fox creature token with vigilance"); + cardType.add(CardType.CREATURE); + color.setWhite(true); + subtype.add(SubType.FOX); + power = new MageInt(2); + toughness = new MageInt(2); + + this.addAbility(VigilanceAbility.getInstance()); + } + + private Fox22VigilanceToken(final Fox22VigilanceToken token) { + super(token); + } + + @Override + public Fox22VigilanceToken copy() { + return new Fox22VigilanceToken(this); + } +} diff --git a/Mage/src/main/java/mage/game/permanent/token/Moonfolk12FlyingToken.java b/Mage/src/main/java/mage/game/permanent/token/Moonfolk12FlyingToken.java new file mode 100644 index 00000000000..0e40ad7c156 --- /dev/null +++ b/Mage/src/main/java/mage/game/permanent/token/Moonfolk12FlyingToken.java @@ -0,0 +1,32 @@ +package mage.game.permanent.token; + +import mage.MageInt; +import mage.abilities.keyword.FlyingAbility; +import mage.constants.CardType; +import mage.constants.SubType; + +/** + * @author Susucr + */ +public final class Moonfolk12FlyingToken extends TokenImpl { + + public Moonfolk12FlyingToken() { + super("Moonfolk Token", "1/2 blue Moonfolk creature token with flying"); + cardType.add(CardType.CREATURE); + color.setBlue(true); + subtype.add(SubType.MOONFOLK); + power = new MageInt(1); + toughness = new MageInt(2); + + this.addAbility(FlyingAbility.getInstance()); + } + + private Moonfolk12FlyingToken(final Moonfolk12FlyingToken token) { + super(token); + } + + @Override + public Moonfolk12FlyingToken copy() { + return new Moonfolk12FlyingToken(this); + } +} diff --git a/Mage/src/main/java/mage/game/permanent/token/Rat11LifelinkToken.java b/Mage/src/main/java/mage/game/permanent/token/Rat11LifelinkToken.java new file mode 100644 index 00000000000..8eb3e9fef54 --- /dev/null +++ b/Mage/src/main/java/mage/game/permanent/token/Rat11LifelinkToken.java @@ -0,0 +1,32 @@ +package mage.game.permanent.token; + +import mage.MageInt; +import mage.abilities.keyword.LifelinkAbility; +import mage.constants.CardType; +import mage.constants.SubType; + +/** + * @author Susucr + */ +public final class Rat11LifelinkToken extends TokenImpl { + + public Rat11LifelinkToken() { + super("Rat Token", "1/1 black Rat creature token with lifelink"); + cardType.add(CardType.CREATURE); + color.setBlack(true); + subtype.add(SubType.RAT); + power = new MageInt(1); + toughness = new MageInt(1); + + this.addAbility(LifelinkAbility.getInstance()); + } + + private Rat11LifelinkToken(final Rat11LifelinkToken token) { + super(token); + } + + @Override + public Rat11LifelinkToken copy() { + return new Rat11LifelinkToken(this); + } +}