[ECL] Implement Mutable Explorer

This commit is contained in:
theelk801 2025-09-28 19:11:23 -04:00
parent 454c7e0116
commit dd316ee61f
5 changed files with 100 additions and 29 deletions

View file

@ -0,0 +1,44 @@
package mage.cards.m;
import mage.MageInt;
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.keyword.ChangelingAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.game.permanent.token.MutavaultToken;
import java.util.UUID;
/**
* @author TheElk801
*/
public final class MutableExplorer extends CardImpl {
public MutableExplorer(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{G}");
this.subtype.add(SubType.SHAPESHIFTER);
this.power = new MageInt(1);
this.toughness = new MageInt(1);
// Changeling
this.addAbility(new ChangelingAbility());
// When this creature enters, create a tapped Mutavault token.
this.addAbility(new EntersBattlefieldTriggeredAbility(
new CreateTokenEffect(new MutavaultToken(), 1, true)
));
}
private MutableExplorer(final MutableExplorer card) {
super(card);
}
@Override
public MutableExplorer copy() {
return new MutableExplorer(this);
}
}

View file

@ -1,21 +1,18 @@
package mage.cards.m;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.costs.mana.GenericManaCost;
import mage.abilities.effects.common.continuous.BecomesCreatureSourceEffect;
import mage.abilities.mana.ColorlessManaAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.Zone;
import mage.game.permanent.token.TokenImpl;
import mage.game.permanent.token.custom.CreatureToken;
import java.util.UUID;
/**
*
* @author jonubuu
*/
public final class Mutavault extends CardImpl {
@ -25,10 +22,13 @@ public final class Mutavault extends CardImpl {
// {tap}: Add {C}.
this.addAbility(new ColorlessManaAbility());
// {1}: Mutavault becomes a 2/2 creature with all creature types until end of turn. It's still a land.
this.addAbility(new SimpleActivatedAbility(
new BecomesCreatureSourceEffect(new MutavaultToken(), CardType.LAND, Duration.EndOfTurn),
new ManaCostsImpl<>("{1}")));
this.addAbility(new SimpleActivatedAbility(new BecomesCreatureSourceEffect(
new CreatureToken(2, 2, "2/2 creature with all creature types")
.withAllCreatureTypes(true),
CardType.LAND, Duration.EndOfTurn
), new GenericManaCost(1)));
}
private Mutavault(final Mutavault card) {
@ -40,21 +40,3 @@ public final class Mutavault extends CardImpl {
return new Mutavault(this);
}
}
class MutavaultToken extends TokenImpl {
public MutavaultToken() {
super("", "2/2 creature with all creature types");
cardType.add(CardType.CREATURE);
subtype.setIsAllCreatureTypes(true);
power = new MageInt(2);
toughness = new MageInt(2);
}
private MutavaultToken(final MutavaultToken token) {
super(token);
}
public MutavaultToken copy() {
return new MutavaultToken(this);
}
}

View file

@ -27,6 +27,8 @@ public final class LorwynEclipsed extends ExpansionSet {
cards.add(new SetCardInfo("Blood Crypt", 349, Rarity.RARE, mage.cards.b.BloodCrypt.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Hallowed Fountain", 265, Rarity.RARE, mage.cards.h.HallowedFountain.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Hallowed Fountain", 347, Rarity.RARE, mage.cards.h.HallowedFountain.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Mutable Explorer", 186, Rarity.RARE, mage.cards.m.MutableExplorer.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Mutable Explorer", 327, Rarity.RARE, mage.cards.m.MutableExplorer.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Overgrown Tomb", 266, Rarity.RARE, mage.cards.o.OvergrownTomb.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Overgrown Tomb", 350, Rarity.RARE, mage.cards.o.OvergrownTomb.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Steam Vents", 267, Rarity.RARE, mage.cards.s.SteamVents.class, NON_FULL_USE_VARIOUS));

View file

@ -0,0 +1,38 @@
package mage.game.permanent.token;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.mana.GenericManaCost;
import mage.abilities.effects.common.continuous.BecomesCreatureSourceEffect;
import mage.abilities.mana.ColorlessManaAbility;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.game.permanent.token.custom.CreatureToken;
/**
* @author TheElk801
*/
public final class MutavaultToken extends TokenImpl {
public MutavaultToken() {
super("Mutavault", "Mutavault token");
cardType.add(CardType.LAND);
// {tap}: Add {C}.
this.addAbility(new ColorlessManaAbility());
// {1}: Mutavault becomes a 2/2 creature with all creature types until end of turn. It's still a land.
this.addAbility(new SimpleActivatedAbility(new BecomesCreatureSourceEffect(
new CreatureToken(2, 2, "2/2 creature with all creature types")
.withAllCreatureTypes(true),
CardType.LAND, Duration.EndOfTurn
), new GenericManaCost(1)));
}
private MutavaultToken(final MutavaultToken token) {
super(token);
}
public MutavaultToken copy() {
return new MutavaultToken(this);
}
}

View file

@ -73,6 +73,11 @@ public final class CreatureToken extends TokenImpl {
return this;
}
public CreatureToken withAllCreatureTypes(boolean allCreatureTypes) {
this.subtype.setIsAllCreatureTypes(allCreatureTypes);
return this;
}
private CreatureToken(final CreatureToken token) {
super(token);
}