Merge remote-tracking branch 'origin/master'

This commit is contained in:
Oleg Agafonov 2019-05-29 07:53:59 +04:00
commit 2cb2b5e813
13 changed files with 640 additions and 0 deletions

View file

@ -0,0 +1,53 @@
package mage.cards.d;
import mage.abilities.dynamicvalue.DynamicValue;
import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount;
import mage.abilities.effects.common.continuous.BoostAllEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.SuperType;
import mage.filter.FilterPermanent;
import mage.filter.common.FilterControlledPermanent;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.Predicates;
import mage.filter.predicate.mageobject.SupertypePredicate;
import java.util.UUID;
/**
* @author TheElk801
*/
public final class DeadOfWinter extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent();
private static final FilterPermanent filter2 = new FilterControlledPermanent();
static {
filter.add(Predicates.not(new SupertypePredicate(SuperType.SNOW)));
filter2.add(new SupertypePredicate(SuperType.SNOW));
}
private static final DynamicValue xValue = new PermanentsOnBattlefieldCount(filter, -1);
public DeadOfWinter(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{2}{B}");
// All nonsnow creatures get -X/-X until end of turn, where X is the number of snow permanents you control.
this.getSpellAbility().addEffect(new BoostAllEffect(
xValue, xValue, Duration.EndOfTurn, filter, false,
"All nonsnow creatures get -X/-X until end of turn," +
" where X is the number of snow permanents you control.", true
));
}
private DeadOfWinter(final DeadOfWinter card) {
super(card);
}
@Override
public DeadOfWinter copy() {
return new DeadOfWinter(this);
}
}

View file

@ -0,0 +1,107 @@
package mage.cards.e;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.mana.GenericManaCost;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.continuous.BoostSourceEffect;
import mage.abilities.effects.common.continuous.GainAbilitySourceEffect;
import mage.abilities.keyword.DeathtouchAbility;
import mage.abilities.keyword.MenaceAbility;
import mage.abilities.keyword.UndyingAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.Outcome;
import mage.constants.SubType;
import mage.game.Game;
import mage.game.permanent.Permanent;
import mage.players.Player;
import java.util.UUID;
/**
* @author TheElk801
*/
public final class Endling extends CardImpl {
public Endling(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{B}{B}");
this.subtype.add(SubType.ZOMBIE);
this.subtype.add(SubType.SHAPESHIFTER);
this.power = new MageInt(3);
this.toughness = new MageInt(3);
// {B}: Endling gains menace until end of turn.
this.addAbility(new SimpleActivatedAbility(
new GainAbilitySourceEffect(
new MenaceAbility(),
Duration.EndOfTurn
), new ManaCostsImpl("{B}")
));
// {B}: Endling gains deathtouch until end of turn.
this.addAbility(new SimpleActivatedAbility(
new GainAbilitySourceEffect(
DeathtouchAbility.getInstance(),
Duration.EndOfTurn
), new ManaCostsImpl("{B}")
));
// {B}: Endling gains undying until end of turn.
this.addAbility(new SimpleActivatedAbility(
new GainAbilitySourceEffect(
new UndyingAbility(),
Duration.EndOfTurn
), new ManaCostsImpl("{B}")
));
// {1}: Endling gets +1/-1 or -1/+1 until end of turn.
this.addAbility(new SimpleActivatedAbility(
new EndlingEffect(),
new GenericManaCost(1)
));
}
private Endling(final Endling card) {
super(card);
}
@Override
public Endling copy() {
return new Endling(this);
}
}
class EndlingEffect extends OneShotEffect {
EndlingEffect() {
super(Outcome.BoostCreature);
this.staticText = "{this} gets +1/-1 or -1/+1 until end of turn";
}
private EndlingEffect(final EndlingEffect effect) {
super(effect);
}
@Override
public EndlingEffect copy() {
return new EndlingEffect(this);
}
@Override
public boolean apply(Game game, Ability source) {
Player player = game.getPlayer(source.getControllerId());
Permanent permanent = game.getPermanent(source.getSourceId());
if (player == null || permanent == null) {
return false;
}
int boost = player.chooseUse(outcome, "Give +1/-1 or -1/+1?", null, "+1/-1", "-1/+1", source, game) ? 1 : -1;
game.addEffect(new BoostSourceEffect(boost, -1 * boost, Duration.EndOfTurn), source);
return true;
}
}

View file

@ -0,0 +1,41 @@
package mage.cards.i;
import mage.MageInt;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.common.InfoEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.SuperType;
import java.util.UUID;
/**
* @author TheElk801
*/
public final class IceSkinGolem extends CardImpl {
public IceSkinGolem(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{S}");
this.addSuperType(SuperType.SNOW);
this.subtype.add(SubType.GOLEM);
this.power = new MageInt(2);
this.toughness = new MageInt(2);
// ({S} can be paid with one mana from a snow permanent.)
this.addAbility(new SimpleStaticAbility(
new InfoEffect("<i>({S} can be paid with one mana from a snow permanent.)</i>")
));
}
private IceSkinGolem(final IceSkinGolem card) {
super(card);
}
@Override
public IceSkinGolem copy() {
return new IceSkinGolem(this);
}
}

View file

@ -0,0 +1,40 @@
package mage.cards.l;
import mage.MageInt;
import mage.Mana;
import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.mana.SimpleManaAbility;
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 TheElk801
*/
public final class LlanowarTribe extends CardImpl {
public LlanowarTribe(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{G}{G}{G}");
this.subtype.add(SubType.ELF);
this.subtype.add(SubType.DRUID);
this.power = new MageInt(3);
this.toughness = new MageInt(3);
// {T}: Add {G}{G}{G}.
this.addAbility(new SimpleManaAbility(Zone.BATTLEFIELD, Mana.GreenMana(3), new TapSourceCost()));
}
private LlanowarTribe(final LlanowarTribe card) {
super(card);
}
@Override
public LlanowarTribe copy() {
return new LlanowarTribe(this);
}
}

View file

@ -0,0 +1,63 @@
package mage.cards.o;
import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
import mage.abilities.common.delayed.OnLeaveReturnExiledToBattlefieldAbility;
import mage.abilities.effects.common.AttachEffect;
import mage.abilities.effects.common.CreateDelayedTriggeredAbilityEffect;
import mage.abilities.effects.common.ExileUntilSourceLeavesEffect;
import mage.abilities.keyword.EnchantAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Outcome;
import mage.constants.SubType;
import mage.constants.SuperType;
import mage.filter.FilterPermanent;
import mage.filter.common.FilterControlledLandPermanent;
import mage.filter.predicate.mageobject.SupertypePredicate;
import mage.target.TargetPermanent;
import mage.target.common.TargetOpponentsCreaturePermanent;
import java.util.UUID;
/**
* @author TheElk801
*/
public final class OnThinIce extends CardImpl {
private static final FilterPermanent filter = new FilterControlledLandPermanent("snow land you control");
static {
filter.add(new SupertypePredicate(SuperType.SNOW));
}
public OnThinIce(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{W}");
this.addSuperType(SuperType.SNOW);
this.subtype.add(SubType.AURA);
// Enchant snow land you control
TargetPermanent auraTarget = new TargetPermanent(filter);
this.getSpellAbility().addTarget(auraTarget);
this.getSpellAbility().addEffect(new AttachEffect(Outcome.BoostCreature));
Ability ability = new EnchantAbility(auraTarget.getTargetName());
this.addAbility(ability);
// When On Thin Ice enters the battlefield, exile target creature an opponent controls until On Thin Ice leaves the battlefield.
ability = new EntersBattlefieldTriggeredAbility(new ExileUntilSourceLeavesEffect("creature"));
ability.addTarget(new TargetOpponentsCreaturePermanent());
ability.addEffect(new CreateDelayedTriggeredAbilityEffect(new OnLeaveReturnExiledToBattlefieldAbility()));
this.addAbility(ability);
}
private OnThinIce(final OnThinIce card) {
super(card);
}
@Override
public OnThinIce copy() {
return new OnThinIce(this);
}
}

View file

@ -0,0 +1,53 @@
package mage.cards.o;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.common.cost.SourceCostReductionForEachCardInGraveyardEffect;
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.Zone;
import mage.filter.StaticFilters;
import java.util.UUID;
/**
* @author TheElk801
*/
public final class OreScaleGuardian extends CardImpl {
public OreScaleGuardian(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{5}{R}{R}");
this.subtype.add(SubType.DRAGON);
this.power = new MageInt(4);
this.toughness = new MageInt(4);
// This spell costs {1} less to cast for each land card in your graveyard.
Ability ability = new SimpleStaticAbility(
Zone.ALL, new SourceCostReductionForEachCardInGraveyardEffect(StaticFilters.FILTER_CARD_LAND)
);
ability.setRuleAtTheTop(true);
this.addAbility(ability);
// Flying
this.addAbility(FlyingAbility.getInstance());
// Haste
this.addAbility(HasteAbility.getInstance());
}
private OreScaleGuardian(final OreScaleGuardian card) {
super(card);
}
@Override
public OreScaleGuardian copy() {
return new OreScaleGuardian(this);
}
}

View file

@ -0,0 +1,75 @@
package mage.cards.p;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.DiesThisOrAnotherCreatureTriggeredAbility;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.common.SacrificeTargetCost;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.effects.common.DamageTargetEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.SuperType;
import mage.constants.TargetController;
import mage.filter.common.FilterControlledCreaturePermanent;
import mage.filter.common.FilterControlledPermanent;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.permanent.AnotherPredicate;
import mage.filter.predicate.permanent.ControllerPredicate;
import mage.game.permanent.token.GoblinToken;
import mage.target.common.TargetAnyTarget;
import mage.target.common.TargetControlledPermanent;
import java.util.UUID;
/**
* @author TheElk801
*/
public final class PashalikMons extends CardImpl {
private static final FilterCreaturePermanent filter
= new FilterCreaturePermanent(SubType.GOBLIN, "Goblin you control");
private static final FilterControlledPermanent filter2
= new FilterControlledCreaturePermanent(SubType.GOBLIN, "a Goblin");
static {
filter.add(AnotherPredicate.instance);
filter.add(new ControllerPredicate(TargetController.YOU));
}
public PashalikMons(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{R}");
this.addSuperType(SuperType.LEGENDARY);
this.subtype.add(SubType.GOBLIN);
this.subtype.add(SubType.WARRIOR);
this.power = new MageInt(2);
this.toughness = new MageInt(2);
// Whenever Pashalik Mons or another Goblin you control dies, Pashalik Mons deals 1 damage to any target.
Ability ability = new DiesThisOrAnotherCreatureTriggeredAbility(
new DamageTargetEffect(1), false, filter
);
ability.addTarget(new TargetAnyTarget());
this.addAbility(ability);
// {3}{R}, Sacrifice a Goblin: Create two 1/1 red Goblin creature tokens.
ability = new SimpleActivatedAbility(
new CreateTokenEffect(new GoblinToken(), 2), new ManaCostsImpl("{3}{R}")
);
ability.addCost(new SacrificeTargetCost(new TargetControlledPermanent(filter2)));
this.addAbility(ability);
}
private PashalikMons(final PashalikMons card) {
super(card);
}
@Override
public PashalikMons copy() {
return new PashalikMons(this);
}
}

View file

@ -0,0 +1,50 @@
package mage.cards.r;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.DiesTriggeredAbility;
import mage.abilities.dynamicvalue.DynamicValue;
import mage.abilities.dynamicvalue.common.CardsInControllerGraveyardCount;
import mage.abilities.effects.common.DamageTargetEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.filter.StaticFilters;
import mage.target.common.TargetAnyTarget;
import java.util.UUID;
/**
* @author TheElk801
*/
public final class RuinationRioter extends CardImpl {
private static final DynamicValue xValue = new CardsInControllerGraveyardCount(StaticFilters.FILTER_CARD_LAND);
public RuinationRioter(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{R}{G}");
this.subtype.add(SubType.HUMAN);
this.subtype.add(SubType.BERSERKER);
this.power = new MageInt(1);
this.toughness = new MageInt(1);
// When Ruination Rioter dies, you may have it deal damage to any target equal to the number of land cards in your graveyard.
Ability ability = new DiesTriggeredAbility(
new DamageTargetEffect(xValue).setText("you may have it deal damage to any target " +
"equal to the number of land cards in your graveyard."), true
);
ability.addTarget(new TargetAnyTarget());
this.addAbility(ability);
}
private RuinationRioter(final RuinationRioter card) {
super(card);
}
@Override
public RuinationRioter copy() {
return new RuinationRioter(this);
}
}

View file

@ -0,0 +1,34 @@
package mage.cards.t;
import mage.abilities.keyword.CascadeAbility;
import mage.abilities.keyword.RetraceAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import java.util.UUID;
/**
* @author TheElk801
*/
public final class ThroesOfChaos extends CardImpl {
public ThroesOfChaos(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{3}{R}");
// Cascade
this.addAbility(new CascadeAbility());
// Retrace
this.addAbility(new RetraceAbility(this));
}
private ThroesOfChaos(final ThroesOfChaos card) {
super(card);
}
@Override
public ThroesOfChaos copy() {
return new ThroesOfChaos(this);
}
}

View file

@ -0,0 +1,45 @@
package mage.cards.t;
import mage.abilities.Mode;
import mage.abilities.effects.common.continuous.BoostTargetEffect;
import mage.abilities.effects.common.continuous.SwitchPowerToughnessTargetEffect;
import mage.abilities.keyword.EntwineAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.target.common.TargetCreaturePermanent;
import java.util.UUID;
/**
* @author TheElk801
*/
public final class TwistedReflection extends CardImpl {
public TwistedReflection(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{1}{U}");
// Choose one
// Target creature gets -6/-0 until end of turn.
this.getSpellAbility().addEffect(new BoostTargetEffect(-6, 0, Duration.EndOfTurn));
this.getSpellAbility().addTarget(new TargetCreaturePermanent());
// Switch target creature's power and toughness until end of turn.
Mode mode = new Mode(new SwitchPowerToughnessTargetEffect(Duration.EndOfTurn));
mode.addTarget(new TargetCreaturePermanent());
this.getSpellAbility().addMode(mode);
// Entwine {B}
this.addAbility(new EntwineAbility("{B}"));
}
private TwistedReflection(final TwistedReflection card) {
super(card);
}
@Override
public TwistedReflection copy() {
return new TwistedReflection(this);
}
}

View file

@ -0,0 +1,62 @@
package mage.cards.v;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.LeavesBattlefieldTriggeredAbility;
import mage.abilities.effects.common.ReturnFromGraveyardToBattlefieldTargetEffect;
import mage.abilities.keyword.EvokeAbility;
import mage.abilities.keyword.FlyingAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.ComparisonType;
import mage.constants.SubType;
import mage.filter.FilterCard;
import mage.filter.common.FilterCreatureCard;
import mage.filter.predicate.mageobject.PowerPredicate;
import mage.target.common.TargetCardInYourGraveyard;
import java.util.UUID;
/**
* @author TheElk801
*/
public final class Vesperlark extends CardImpl {
private static final FilterCard filter
= new FilterCreatureCard("creature card with power 1 or less from your graveyard");
static {
filter.add(new PowerPredicate(ComparisonType.FEWER_THAN, 2));
}
public Vesperlark(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{W}");
this.subtype.add(SubType.ELEMENTAL);
this.power = new MageInt(2);
this.toughness = new MageInt(1);
// Flying
this.addAbility(FlyingAbility.getInstance());
// When Vesperlark leaves the battlefield, return target creature card with power 1 or less from your graveyard to the battlefield.
Ability ability = new LeavesBattlefieldTriggeredAbility(
new ReturnFromGraveyardToBattlefieldTargetEffect(), false
);
ability.addTarget(new TargetCardInYourGraveyard(filter));
this.addAbility(ability);
// Evoke {1}{W}
this.addAbility(new EvokeAbility(this, "{1}{W}"));
}
private Vesperlark(final Vesperlark card) {
super(card);
}
@Override
public Vesperlark copy() {
return new Vesperlark(this);
}
}

View file

@ -46,12 +46,14 @@ public final class ModernHorizons extends ExpansionSet {
cards.add(new SetCardInfo("Collector Ouphe", 158, Rarity.RARE, mage.cards.c.CollectorOuphe.class));
cards.add(new SetCardInfo("Crashing Footfalls", 160, Rarity.RARE, mage.cards.c.CrashingFootfalls.class));
cards.add(new SetCardInfo("Crypt Rats", 84, Rarity.UNCOMMON, mage.cards.c.CryptRats.class));
cards.add(new SetCardInfo("Dead of Winter", 85, Rarity.RARE, mage.cards.d.DeadOfWinter.class));
cards.add(new SetCardInfo("Deep Forest Hermit", 161, Rarity.RARE, mage.cards.d.DeepForestHermit.class));
cards.add(new SetCardInfo("Diabolic Edict", 87, Rarity.COMMON, mage.cards.d.DiabolicEdict.class));
cards.add(new SetCardInfo("Dismantling Blow", 5, Rarity.UNCOMMON, mage.cards.d.DismantlingBlow.class));
cards.add(new SetCardInfo("Dregscape Sliver", 88, Rarity.UNCOMMON, mage.cards.d.DregscapeSliver.class));
cards.add(new SetCardInfo("Eladamri's Call", 197, Rarity.RARE, mage.cards.e.EladamrisCall.class));
cards.add(new SetCardInfo("Elvish Fury", 162, Rarity.COMMON, mage.cards.e.ElvishFury.class));
cards.add(new SetCardInfo("Endling", 89, Rarity.RARE, mage.cards.e.Endling.class));
cards.add(new SetCardInfo("Enduring Sliver", 8, Rarity.COMMON, mage.cards.e.EnduringSliver.class));
cards.add(new SetCardInfo("Etchings of the Chosen", 198, Rarity.UNCOMMON, mage.cards.e.EtchingsOfTheChosen.class));
cards.add(new SetCardInfo("Exclude", 48, Rarity.UNCOMMON, mage.cards.e.Exclude.class));
@ -85,6 +87,7 @@ public final class ModernHorizons extends ExpansionSet {
cards.add(new SetCardInfo("Hexdrinker", 168, Rarity.MYTHIC, mage.cards.h.Hexdrinker.class));
cards.add(new SetCardInfo("Hollowhead Sliver", 132, Rarity.UNCOMMON, mage.cards.h.HollowheadSliver.class));
cards.add(new SetCardInfo("Ice-Fang Coatl", 203, Rarity.RARE, mage.cards.i.IceFangCoatl.class));
cards.add(new SetCardInfo("Ice-Skin Golem", 224, Rarity.UNCOMMON, mage.cards.i.IceSkinGolem.class));
cards.add(new SetCardInfo("Impostor of the Sixth Pride", 14, Rarity.COMMON, mage.cards.i.ImpostorOfTheSixthPride.class));
cards.add(new SetCardInfo("Ingenious Infiltrator", 204, Rarity.UNCOMMON, mage.cards.i.IngeniousInfiltrator.class));
cards.add(new SetCardInfo("Kaya's Guile", 205, Rarity.RARE, mage.cards.k.KayasGuile.class));
@ -94,6 +97,7 @@ public final class ModernHorizons extends ExpansionSet {
cards.add(new SetCardInfo("Lavabelly Sliver", 207, Rarity.UNCOMMON, mage.cards.l.LavabellySliver.class));
cards.add(new SetCardInfo("Lesser Masticore", 225, Rarity.UNCOMMON, mage.cards.l.LesserMasticore.class));
cards.add(new SetCardInfo("Lightning Skelemental", 208, Rarity.RARE, mage.cards.l.LightningSkelemental.class));
cards.add(new SetCardInfo("Llanowar Tribe", 170, Rarity.UNCOMMON, mage.cards.l.LlanowarTribe.class));
cards.add(new SetCardInfo("Man-o'-War", 55, Rarity.COMMON, mage.cards.m.ManOWar.class));
cards.add(new SetCardInfo("Martyr's Soul", 19, Rarity.COMMON, mage.cards.m.MartyrsSoul.class));
cards.add(new SetCardInfo("Morophon, the Boundless", 1, Rarity.MYTHIC, mage.cards.m.MorophonTheBoundless.class));
@ -105,7 +109,10 @@ public final class ModernHorizons extends ExpansionSet {
cards.add(new SetCardInfo("Nether Spirit", 98, Rarity.RARE, mage.cards.n.NetherSpirit.class));
cards.add(new SetCardInfo("Nimble Mongoose", 174, Rarity.COMMON, mage.cards.n.NimbleMongoose.class));
cards.add(new SetCardInfo("Nurturing Peatland", 243, Rarity.RARE, mage.cards.n.NurturingPeatland.class));
cards.add(new SetCardInfo("On Thin Ice", 20, Rarity.RARE, mage.cards.o.OnThinIce.class));
cards.add(new SetCardInfo("Orcish Hellraiser", 136, Rarity.COMMON, mage.cards.o.OrcishHellraiser.class));
cards.add(new SetCardInfo("Ore-Scale Guardian", 137, Rarity.UNCOMMON, mage.cards.o.OreScaleGuardian.class));
cards.add(new SetCardInfo("Pashalik Mons", 138, Rarity.RARE, mage.cards.p.PashalikMons.class));
cards.add(new SetCardInfo("Pillage", 139, Rarity.UNCOMMON, mage.cards.p.Pillage.class));
cards.add(new SetCardInfo("Plague Engineer", 100, Rarity.RARE, mage.cards.p.PlagueEngineer.class));
cards.add(new SetCardInfo("Planebound Accomplice", 140, Rarity.RARE, mage.cards.p.PlaneboundAccomplice.class));
@ -116,6 +123,7 @@ public final class ModernHorizons extends ExpansionSet {
cards.add(new SetCardInfo("Ranger-Captain of Eos", 21, Rarity.MYTHIC, mage.cards.r.RangerCaptainOfEos.class));
cards.add(new SetCardInfo("Ravenous Giant", 143, Rarity.UNCOMMON, mage.cards.r.RavenousGiant.class));
cards.add(new SetCardInfo("Regrowth", 175, Rarity.UNCOMMON, mage.cards.r.Regrowth.class));
cards.add(new SetCardInfo("Ruination Rioter", 213, Rarity.UNCOMMON, mage.cards.r.RuinationRioter.class));
cards.add(new SetCardInfo("Savage Swipe", 178, Rarity.COMMON, mage.cards.s.SavageSwipe.class));
cards.add(new SetCardInfo("Scale Up", 179, Rarity.UNCOMMON, mage.cards.s.ScaleUp.class));
cards.add(new SetCardInfo("Scour All Possibilities", 67, Rarity.COMMON, mage.cards.s.ScourAllPossibilities.class));
@ -149,13 +157,16 @@ public final class ModernHorizons extends ExpansionSet {
cards.add(new SetCardInfo("Talisman of Resilience", 234, Rarity.UNCOMMON, mage.cards.t.TalismanOfResilience.class));
cards.add(new SetCardInfo("Tempered Sliver", 183, Rarity.UNCOMMON, mage.cards.t.TemperedSliver.class));
cards.add(new SetCardInfo("The First Sliver", 200, Rarity.MYTHIC, mage.cards.t.TheFirstSliver.class));
cards.add(new SetCardInfo("Throes of Chaos", 150, Rarity.UNCOMMON, mage.cards.t.ThroesOfChaos.class));
cards.add(new SetCardInfo("Thundering Djinn", 215, Rarity.UNCOMMON, mage.cards.t.ThunderingDjinn.class));
cards.add(new SetCardInfo("Twisted Reflection", 74, Rarity.UNCOMMON, mage.cards.t.TwistedReflection.class));
cards.add(new SetCardInfo("Umezawa's Charm", 111, Rarity.COMMON, mage.cards.u.UmezawasCharm.class));
cards.add(new SetCardInfo("Undead Augur", 112, Rarity.UNCOMMON, mage.cards.u.UndeadAugur.class));
cards.add(new SetCardInfo("Unearth", 113, Rarity.COMMON, mage.cards.u.Unearth.class));
cards.add(new SetCardInfo("Urza, Lord High Artificer", 75, Rarity.MYTHIC, mage.cards.u.UrzaLordHighArtificer.class));
cards.add(new SetCardInfo("Valiant Changeling", 34, Rarity.UNCOMMON, mage.cards.v.ValiantChangeling.class));
cards.add(new SetCardInfo("Venomous Changeling", 114, Rarity.COMMON, mage.cards.v.VenomousChangeling.class));
cards.add(new SetCardInfo("Vesperlark", 35, Rarity.UNCOMMON, mage.cards.v.Vesperlark.class));
cards.add(new SetCardInfo("Wall of One Thousand Cuts", 36, Rarity.COMMON, mage.cards.w.WallOfOneThousandCuts.class));
cards.add(new SetCardInfo("Waterlogged Grove", 249, Rarity.RARE, mage.cards.w.WaterloggedGrove.class));
cards.add(new SetCardInfo("Weather the Storm", 191, Rarity.COMMON, mage.cards.w.WeatherTheStorm.class));

View file

@ -35115,6 +35115,7 @@ Jace's Ruse|War of the Spark|273|R|{3}{U}{U}|Sorcery|||Return up to two target c
Simic Guildgate|War of the Spark|274|C||Land - Gate|||Simic Guildgate enters the battlefield tapped.${T}: Add {G} or {U}.|
Tezzeret, Master of the Bridge|War of the Spark|275|M|{4}{U}{B}|Legendary Planeswalker - Tezzeret|5|Creature and planeswalker spells you cast have affinity for artifacts.$+2: Tezzeret, Master of the Bridge deals X damage to each opponent, where X is the number of artifacts you control. You gain X life.$-3: Return target artifact card from your graveyard to your hand.$-8: Exile the top ten cards of your library. Put all artifact cards from among them onto the battlefield.|
Morophon, the Boundless|Modern Horizons|1|M|{7}|Legendary Creature - Shapeshifter|6|6|Changeling$As Morophon, the Boundless enters the battlefield, choose a creature type.$Spells of the chosen type you cast cost {W}{U}{B}{R}{G} less to cast. This effect reduces only the amount of colored mana you pay.$Other creatures you control of the chosen type get +1/+1.|
Answered Prayers|Modern Horizons|2|C|{1}{W}{W}|Enchantment|||Whenever a creature enters the battlefield under your control, you gain 1 life. If Answered Prayers isn't a creature, it becomes a 3/3 Angel creature with flying in addition to its other types until end of turn.|
Astral Drift|Modern Horizons|3|R|{2}{W}|Enchantment|||Whenever you cycle Astral Drift or cycle another card while Astral Drift is on the battlefield, you may exile target creature. If you do, return that card to the battlefield under its owner's control at the beginning of the next end step.$Cycling {2}{W}|
Battle Screech|Modern Horizons|4|U|{2}{W}{W}|Sorcery|||Create two 1/1 white Bird creature tokens with flying.$Flashback—Tap three untapped white creatures you control.|
Dismantling Blow|Modern Horizons|5|U|{2}{W}|Instant|||Kicker {2}{U}$Destroy target artifact or enchantment. If this spell was kicked, draw two cards.|
@ -35132,6 +35133,7 @@ Serra the Benevolent|Modern Horizons|26|M|{2}{W}{W}|Legendary Planeswalker - Ser
Sisay, Weatherlight Captain|Modern Horizons|29|R|{2}{W}|Legendary Creature - Human Soldier|2|2|Sisay, Weatherlight Captain gets +1/+1 for each color among other legendary permanents you control.${W}{U}{B}{R}{G}: Search your library for a legendary permanent card with converted mana cost less than Sisay's power, put that card onto the battlefield, then shuffle your library.|
Splicer's Skill|Modern Horizons|31|U|{2}{W}|Sorcery|||Create a 3/3 colorless Golem artifact creature token.$Splice onto instant or sorcery {3}{W}|
Valiant Changeling|Modern Horizons|34|U|{5}{W}{W}|Creature - Shapeshifter|3|3|This spell costs {1} less to cast for each creature type among creatures you control. This effect can't reduce the amount of mana this spell costs by more than {5}.$Changeling$Double strike|
Vesperlark|Modern Horizons|35|U|{2}{W}|Creature - Elemental|2|1|Flying$When Vesperlark leaves the battlefield, return target creature card with power 1 or less from your graveyard to the battlefield.$Evoke {1}{W}|
Wall of One Thousand Cuts|Modern Horizons|36|C|{3}{W}{W}|Creature - Wall|3|5|Defender, flying${W}: Wall of One Thousand Cuts can attack this turn as though it didn't have defender.|
Winds of Abandon|Modern Horizons|37|R|{1}{W}|Sorcery|||Exile target creature you don't control. For each creature exiled this way, its controller searches their library for a basic land card. Those players put those cards onto the battlefield tapped, then shuffle their libraries.$Overload {4}{W}{W}|
Wing Shards|Modern Horizons|38|U|{1}{W}{W}|Instant|||Target player sacrifices an attacking creature.$Storm|
@ -35152,6 +35154,7 @@ Scuttling Sliver|Modern Horizons|68|U|{2}{U}|Creature - Sliver Trilobite|2|2|Sli
Spell Snuff|Modern Horizons|70|C|{1}{U}{U}|Instant|||Counter target spell.$Fateful hour — If you have 5 or less life, draw a card.|
Stream of Thought|Modern Horizons|71|C|{U}|Sorcery|||Target player puts the top four cards of their library into their graveyard. You shuffle up to four cards from your graveyard into your library.$Replicate {2}{U}{U}|
String of Disappearances|Modern Horizons|72|C|{U}|Instant|||Return target creature to its owner's hand. Then that creature's controller may pay {U}{U}. If the player does, they may copy this spell and may choose a new target for that copy.|
Twisted Reflection|Modern Horizons|74|U|{1}{U}|Instant|||Choose one—$• Target creature gets -6/-0 until end of turn.$• Switch target creature's power and toughness until end of turn.$Entwine {B}|
Urza, Lord High Artificer|Modern Horizons|75|M|{2}{U}{U}|Legendary Creature - Human Artificer|1|4|When Urza, Lord High Artificer enters the battlefield, create a 0/0 colorless Construct artifact creature token with "This creature gets +1/+1 for each artifact you control."$Tap an untapped artifact you control: Add {U}.${5}: Shuffle your library, then exile the top card. Until end of turn, you may play that card without paying its mana cost.|
Cabal Therapist|Modern Horizons|80|R|{B}|Creature - Horror|1|1|Menace$At the beginning of your precombat main phase, you may sacrifice a creature. When you do, choose a nonland card name, then target player reveals their hand and discards all cards with that name.|
Changeling Outcast|Modern Horizons|82|C|{B}|Creature - Shapeshifter|1|1|Changeling$Changeling Outcast can't block and can't be blocked.|
@ -35192,6 +35195,7 @@ Planebound Accomplice|Modern Horizons|140|R|{2}{R}|Creature - Human Wizard|1|3|{
Pyrophobia|Modern Horizons|141|C|{1}{R}|Sorcery|||Pyrophobia deals 3 damage to target creature. Cowards can't block this turn.|
Ravenous Giant|Modern Horizons|143|U|{2}{R}{R}|Creature - Giant|5|5|At the beginning of your upkeep, Ravenous Giant deals 1 damage to you.|
Seasoned Pyromancer|Modern Horizons|145|M|{1}{R}{R}|Creature - Human Shaman|2|2|When Seasoned Pyromancer enters the battlefield, discard two cards, then draw two cards. For each nonland card discarded this way, create a 1/1 red Elemental creature token.${3}{R}{R}, Exile Seasoned Pyromancer from your graveyard: Create two 1/1 red Elemental creature tokens.|
Spiteful Sliver|Modern Horizons|148|R|{2}{R}|Creature - Sliver|2|2|Sliver creatures you control have "Whenever this creature is dealt damage, it deals that much damage to target player or planeswalker."|
Throes of Chaos|Modern Horizons|150|U|{3}{R}|Sorcery|||Cascade$Retrace|
Ayula, Queen Among Bears|Modern Horizons|155|R|{1}{G}|Legendary Creature - Bear|2|2|Whenever another Bear enters the battlefield under your control, choose one —$• Put two +1/+1 counters on target Bear.$• Target Bear you control fights target creature you don't control.|
Ayula's Influence|Modern Horizons|156|R|{G}{G}{G}|Enchantment|||Discard a land card: Create a 2/2 green Bear creature token.|
@ -35203,6 +35207,7 @@ Force of Vigor|Modern Horizons|164|R|{2}{G}{G}|Instant|||If it's not your turn,
Genesis|Modern Horizons|166|R|{4}{G}|Creature - Incarnation|4|4|At the beginning of your upkeep, if Genesis is in your graveyard, you may pay {2}{G}. If you do, return target creature card from your graveyard to your hand.|
Glacial Revelation|Modern Horizons|167|U|{2}{G}|Sorcery|||Reveal the top six cards of your library. You may put any number of snow permanent cards from among them into your hand. Put the rest into your graveyard.|
Hexdrinker|Modern Horizons|168|M|{G}|Creature - Snake|2|1|Level up {1}$LEVEL 3-7$4/4$Protection from instants$LEVEL 8+$6/6$Protection from everything|
Llanowar Tribe|Modern Horizons|170|U|{G}{G}{G}|Creature - Elf Druid|3|3|{T}: Add {G}{G}{G}.|
Mother Bear|Modern Horizons|171|C|{1}{G}|Creature - Bear|2|2|{3}{G}{G}, Exile Mother Bear from your graveyard: Create two 2/2 green Bear creature tokens. Activate this ability only any time you could cast a sorcery.|
Nantuko Cultivator|Modern Horizons|173|U|{3}{G}|Creature - Insect Druid|2|2|When Nantuko Cultivator enters the battlefield, you may discard any number of land cards. Put that many +1/+1 counters on Nantuko Cultivator and draw that many cards.|
Nimble Mongoose|Modern Horizons|174|C|{G}|Creature - Mongoose|1|1|Shroud$Threshold — Nimble Mongoose gets +2/+2 as long as seven or more cards are in your graveyard.|
@ -35238,6 +35243,7 @@ Wrenn and Six|Modern Horizons|217|M|{R}{G}|Legendary Planeswalker - Wrenn|3|+1:
Altar of Dementia|Modern Horizons|218|R|{2}|Artifact|||Sacrifice a creature: Target player puts a number of cards equal to the sacrificed creature's power from the top of their library into their graveyard.|
Arcum's Astrolabe|Modern Horizons|220|C|{S}|Snow Artifact|||({S} can be paid with one mana from a snow permanent.)$When Arcum's Astrolabe enters the battlefield, draw a card.${1}, {T}: Add one mana of any color.|
Farmstead Gleaner|Modern Horizons|222|U|{3}|Artifact Creature - Scarecrow|2|2|Farmstead Gleaner doesn't untap during your untap step.${2}, {Q}: Put a +1/+1 counter on Farmstead Gleaner.|
Ice-Skin Golem|Modern Horizons|224|U|{S}|Snow Artifact Creature - Golem|2|2|({S} can be paid with one mana from a snow permanent.)|
Lesser Masticore|Modern Horizons|225|U|{2}|Artifact Creature - Masticore|2|2|As an additional cost to cast this spell, discard a card.${4}: Lesser Masticore deals 1 damage to target creature.$Persist|
Mox Tantalite|Modern Horizons|226|M||Artifact|||Suspend 3—{0}${T}: Add one mana of any color.|
Scrapyard Recombiner|Modern Horizons|227|R|{3}|Artifact Creature - Construct|0|0|Modular 2${T}, Sacrifice an artifact: Search your library for a Construct card, reveal it, put it into your hand, then shuffle your library.|