From a8f42de901c9cf861239741ad22fadfd167f0920 Mon Sep 17 00:00:00 2001 From: drmDev Date: Mon, 20 Mar 2017 21:30:48 -0400 Subject: [PATCH 1/7] First set of cards updated to simplifed token creation and exile at end step --- .../src/mage/cards/e/ElementalMastery.java | 20 +++-------- .../src/mage/cards/f/FeralLightning.java | 36 +++---------------- Mage.Sets/src/mage/cards/g/Giantbaiting.java | 19 +++------- .../src/mage/cards/r/RakdosGuildmage.java | 19 +++------- Mage.Sets/src/mage/cards/t/Thunderheads.java | 18 +++------- 5 files changed, 23 insertions(+), 89 deletions(-) diff --git a/Mage.Sets/src/mage/cards/e/ElementalMastery.java b/Mage.Sets/src/mage/cards/e/ElementalMastery.java index 76a92b7d97e..914b39854e1 100644 --- a/Mage.Sets/src/mage/cards/e/ElementalMastery.java +++ b/Mage.Sets/src/mage/cards/e/ElementalMastery.java @@ -32,11 +32,10 @@ import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.common.delayed.AtTheBeginOfNextEndStepDelayedTriggeredAbility; import mage.abilities.costs.common.TapSourceCost; import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.common.AttachEffect; -import mage.abilities.effects.common.ExileTargetEffect; +import mage.abilities.effects.common.CreateTokenEffect; import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect; import mage.abilities.keyword.EnchantAbility; import mage.abilities.keyword.HasteAbility; @@ -51,7 +50,6 @@ import mage.game.permanent.Permanent; import mage.game.permanent.token.Token; import mage.target.TargetPermanent; import mage.target.common.TargetCreaturePermanent; -import mage.target.targetpointer.FixedTarget; /** * @@ -73,7 +71,6 @@ public class ElementalMastery extends CardImpl { // Enchanted creature has "{tap}: create X 1/1 red Elemental creature tokens with haste, where X is this creature's power. Exile them at the beginning of the next end step." Ability ability2 = new SimpleActivatedAbility(Zone.BATTLEFIELD, new ElementalMasteryEffect(), new TapSourceCost()); this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAttachedEffect(ability2, AttachmentType.AURA))); - } public ElementalMastery(final ElementalMastery card) { @@ -108,18 +105,11 @@ class ElementalMasteryEffect extends OneShotEffect { if (creatureAttached != null) { int power = creatureAttached.getPower().getValue(); if (power > 0) { - ElementalToken token = new ElementalToken(); - token.putOntoBattlefield(power, game, creatureAttached.getId(), creatureAttached.getControllerId()); - for (UUID tokenId : token.getLastAddedTokenIds()) { - Permanent tokenPermanent = game.getPermanent(tokenId); - if (tokenPermanent != null) { - ExileTargetEffect exileEffect = new ExileTargetEffect(); - exileEffect.setTargetPointer(new FixedTarget(tokenPermanent, game)); - game.addDelayedTriggeredAbility(new AtTheBeginOfNextEndStepDelayedTriggeredAbility(exileEffect), source); - } - } + CreateTokenEffect effect = new CreateTokenEffect(new ElementalToken(), power); + effect.apply(game, source); + effect.exileTokensCreatedAtNextEndStep(game, source); + return true; } - return true; } return false; } diff --git a/Mage.Sets/src/mage/cards/f/FeralLightning.java b/Mage.Sets/src/mage/cards/f/FeralLightning.java index aab267a017d..2d159954f5e 100644 --- a/Mage.Sets/src/mage/cards/f/FeralLightning.java +++ b/Mage.Sets/src/mage/cards/f/FeralLightning.java @@ -28,23 +28,16 @@ package mage.cards.f; import java.util.UUID; -import mage.MageInt; import mage.abilities.Ability; -import mage.abilities.common.delayed.AtTheBeginOfNextEndStepDelayedTriggeredAbility; import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.common.CreateTokenEffect; -import mage.abilities.effects.common.ExileTargetEffect; -import mage.abilities.keyword.HasteAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Outcome; -import mage.constants.Zone; import mage.game.Game; -import mage.game.permanent.Permanent; -import mage.game.permanent.token.Token; +import mage.game.permanent.token.ElementalToken; import mage.players.Player; -import mage.target.targetpointer.FixedTarget; /** * @@ -90,33 +83,12 @@ class FeralLightningEffect extends OneShotEffect { public boolean apply(Game game, Ability source) { Player controller = game.getPlayer(source.getControllerId()); if (controller != null) { - CreateTokenEffect effect = new CreateTokenEffect(new FeralLightningElementalToken(), 3); + CreateTokenEffect effect = new CreateTokenEffect(new ElementalToken("CON", 1, true), 3); effect.apply(game, source); - for (UUID tokenId : effect.getLastAddedTokenIds()) { - Permanent tokenPermanent = game.getPermanent(tokenId); - if (tokenPermanent != null) { - ExileTargetEffect exileEffect = new ExileTargetEffect(null, "", Zone.BATTLEFIELD); - exileEffect.setTargetPointer(new FixedTarget(tokenPermanent, game)); - game.addDelayedTriggeredAbility(new AtTheBeginOfNextEndStepDelayedTriggeredAbility(exileEffect), source); - } - } + effect.exileTokensCreatedAtNextEndStep(game, source); return true; } return false; } -} - -class FeralLightningElementalToken extends Token { - - public FeralLightningElementalToken() { - super("Elemental", "3/1 red Elemental creature tokens with haste"); - cardType.add(CardType.CREATURE); - color.setRed(true); - subtype.add("Elemental"); - power = new MageInt(3); - toughness = new MageInt(1); - - this.addAbility(HasteAbility.getInstance()); - } -} +} \ No newline at end of file diff --git a/Mage.Sets/src/mage/cards/g/Giantbaiting.java b/Mage.Sets/src/mage/cards/g/Giantbaiting.java index 2bf9df6ad2c..6e741d2ccc9 100644 --- a/Mage.Sets/src/mage/cards/g/Giantbaiting.java +++ b/Mage.Sets/src/mage/cards/g/Giantbaiting.java @@ -30,9 +30,8 @@ package mage.cards.g; import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; -import mage.abilities.common.delayed.AtTheBeginOfNextEndStepDelayedTriggeredAbility; import mage.abilities.effects.OneShotEffect; -import mage.abilities.effects.common.ExileTargetEffect; +import mage.abilities.effects.common.CreateTokenEffect; import mage.abilities.keyword.ConspireAbility; import mage.abilities.keyword.HasteAbility; import mage.cards.CardImpl; @@ -40,9 +39,7 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Outcome; import mage.game.Game; -import mage.game.permanent.Permanent; import mage.game.permanent.token.Token; -import mage.target.targetpointer.FixedTarget; /** * @@ -89,16 +86,10 @@ class GiantbaitingEffect extends OneShotEffect { @Override public boolean apply(Game game, Ability source) { - Token token = new GiantWarriorToken(); - if (token.putOntoBattlefield(1, game, source.getSourceId(), source.getControllerId())) { - for (UUID tokenId : token.getLastAddedTokenIds()) { - Permanent tokenPermanent = game.getPermanent(tokenId); - if (tokenPermanent != null) { - ExileTargetEffect exileEffect = new ExileTargetEffect(); - exileEffect.setTargetPointer(new FixedTarget(tokenPermanent, game)); - game.addDelayedTriggeredAbility(new AtTheBeginOfNextEndStepDelayedTriggeredAbility(exileEffect), source); - } - } + CreateTokenEffect effect = new CreateTokenEffect(new GiantWarriorToken()); + if(effect.apply(game, source)) + { + effect.exileTokensCreatedAtNextEndStep(game, source); return true; } return false; diff --git a/Mage.Sets/src/mage/cards/r/RakdosGuildmage.java b/Mage.Sets/src/mage/cards/r/RakdosGuildmage.java index 8a41605e11b..1a8046b53c5 100644 --- a/Mage.Sets/src/mage/cards/r/RakdosGuildmage.java +++ b/Mage.Sets/src/mage/cards/r/RakdosGuildmage.java @@ -31,11 +31,10 @@ import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; -import mage.abilities.common.delayed.AtTheBeginOfNextEndStepDelayedTriggeredAbility; import mage.abilities.costs.common.DiscardCardCost; import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.effects.OneShotEffect; -import mage.abilities.effects.common.ExileTargetEffect; +import mage.abilities.effects.common.CreateTokenEffect; import mage.abilities.effects.common.continuous.BoostTargetEffect; import mage.abilities.keyword.HasteAbility; import mage.cards.CardImpl; @@ -45,10 +44,8 @@ import mage.constants.Duration; import mage.constants.Outcome; import mage.constants.Zone; import mage.game.Game; -import mage.game.permanent.Permanent; import mage.game.permanent.token.Token; import mage.target.common.TargetCreaturePermanent; -import mage.target.targetpointer.FixedTarget; /** * @@ -103,16 +100,10 @@ class RakdosGuildmageEffect extends OneShotEffect { @Override public boolean apply(Game game, Ability source) { - Token token = new RakdosGuildmageGoblinToken(); - if (token.putOntoBattlefield(1, game, source.getSourceId(), source.getControllerId())) { - for (UUID tokenId : token.getLastAddedTokenIds()) { - Permanent tokenPermanent = game.getPermanent(tokenId); - if (tokenPermanent != null) { - ExileTargetEffect exileEffect = new ExileTargetEffect(); - exileEffect.setTargetPointer(new FixedTarget(tokenPermanent, game)); - game.addDelayedTriggeredAbility(new AtTheBeginOfNextEndStepDelayedTriggeredAbility(exileEffect), source); - } - } + CreateTokenEffect effect = new CreateTokenEffect(new RakdosGuildmageGoblinToken()); + if (effect.apply(game, source)) + { + effect.exileTokensCreatedAtNextEndStep(game, source); return true; } return false; diff --git a/Mage.Sets/src/mage/cards/t/Thunderheads.java b/Mage.Sets/src/mage/cards/t/Thunderheads.java index 5893fecb606..c9c33c5d0c7 100644 --- a/Mage.Sets/src/mage/cards/t/Thunderheads.java +++ b/Mage.Sets/src/mage/cards/t/Thunderheads.java @@ -30,9 +30,8 @@ package mage.cards.t; import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; -import mage.abilities.common.delayed.AtTheBeginOfNextEndStepDelayedTriggeredAbility; import mage.abilities.effects.OneShotEffect; -import mage.abilities.effects.common.ExileTargetEffect; +import mage.abilities.effects.common.CreateTokenEffect; import mage.abilities.keyword.DefenderAbility; import mage.abilities.keyword.FlyingAbility; import mage.abilities.keyword.ReplicateAbility; @@ -41,9 +40,7 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Outcome; import mage.game.Game; -import mage.game.permanent.Permanent; import mage.game.permanent.token.Token; -import mage.target.targetpointer.FixedTarget; /** * @@ -88,16 +85,9 @@ class ThunderheadsEffect extends OneShotEffect { @Override public boolean apply(Game game, Ability source) { - Token token = new WeirdToken(); - if (token.putOntoBattlefield(1, game, source.getSourceId(), source.getControllerId())) { - for (UUID tokenId : token.getLastAddedTokenIds()) { - Permanent tokenPermanent = game.getPermanent(tokenId); - if (tokenPermanent != null) { - ExileTargetEffect exileEffect = new ExileTargetEffect(); - exileEffect.setTargetPointer(new FixedTarget(tokenPermanent, game)); - game.addDelayedTriggeredAbility(new AtTheBeginOfNextEndStepDelayedTriggeredAbility(exileEffect), source); - } - } + CreateTokenEffect effect = new CreateTokenEffect(new WeirdToken()); + if (effect.apply(game, source)) { + effect.exileTokensCreatedAtNextEndStep(game, source); return true; } return false; From 5c34022175744ce73a8aab9e2406828da38a8c3c Mon Sep 17 00:00:00 2001 From: drmDev Date: Mon, 20 Mar 2017 21:57:26 -0400 Subject: [PATCH 2/7] second set using refactored createtokeneffect for exiling at end step --- .../src/mage/cards/a/AkoumStonewaker.java | 19 +++------- .../src/mage/cards/c/ChandraFlamecaller.java | 36 ++----------------- .../src/mage/cards/e/ElementalAppeal.java | 34 +++++++----------- Mage.Sets/src/mage/cards/f/FirecatBlitz.java | 14 +------- .../src/mage/cards/g/GeistOfSaintTraft.java | 21 ++++------- .../mage/cards/i/InvocationOfSaintTraft.java | 20 +++-------- .../mage/cards/k/KariZevSkyshipRaider.java | 18 +++------- Mage.Sets/src/mage/cards/s/StoneIdolTrap.java | 24 +++++-------- .../mage/cards/z/ZektarShrineExpedition.java | 25 +++++-------- 9 files changed, 54 insertions(+), 157 deletions(-) diff --git a/Mage.Sets/src/mage/cards/a/AkoumStonewaker.java b/Mage.Sets/src/mage/cards/a/AkoumStonewaker.java index d1132285fea..0f87c37022c 100644 --- a/Mage.Sets/src/mage/cards/a/AkoumStonewaker.java +++ b/Mage.Sets/src/mage/cards/a/AkoumStonewaker.java @@ -31,11 +31,10 @@ import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.LandfallAbility; -import mage.abilities.common.delayed.AtTheBeginOfNextEndStepDelayedTriggeredAbility; import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.CreateTokenEffect; import mage.abilities.effects.common.DoIfCostPaid; -import mage.abilities.effects.common.ExileTargetEffect; import mage.abilities.keyword.HasteAbility; import mage.abilities.keyword.TrampleAbility; import mage.cards.CardImpl; @@ -43,9 +42,7 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Outcome; import mage.game.Game; -import mage.game.permanent.Permanent; import mage.game.permanent.token.Token; -import mage.target.targetpointer.FixedTarget; /** * @@ -94,16 +91,10 @@ class AkoumStonewakerEffect extends OneShotEffect { @Override public boolean apply(Game game, Ability source) { - Token token = new AkoumStonewakerElementalToken(); - if (token.putOntoBattlefield(1, game, source.getSourceId(), source.getControllerId())) { - for (UUID tokenId : token.getLastAddedTokenIds()) { - Permanent tokenPermanent = game.getPermanent(tokenId); - if (tokenPermanent != null) { - ExileTargetEffect exileEffect = new ExileTargetEffect(); - exileEffect.setTargetPointer(new FixedTarget(tokenPermanent, game)); - game.addDelayedTriggeredAbility(new AtTheBeginOfNextEndStepDelayedTriggeredAbility(exileEffect), source); - } - } + + CreateTokenEffect effect = new CreateTokenEffect(new AkoumStonewakerElementalToken()); + if(effect.apply(game, source)) { + effect.exileTokensCreatedAtNextEndStep(game, source); return true; } return false; diff --git a/Mage.Sets/src/mage/cards/c/ChandraFlamecaller.java b/Mage.Sets/src/mage/cards/c/ChandraFlamecaller.java index 3a59ff65eb6..6da4abe2230 100644 --- a/Mage.Sets/src/mage/cards/c/ChandraFlamecaller.java +++ b/Mage.Sets/src/mage/cards/c/ChandraFlamecaller.java @@ -29,11 +29,9 @@ package mage.cards.c; import java.util.Set; import java.util.UUID; -import mage.MageInt; import mage.abilities.Ability; import mage.abilities.LoyaltyAbility; import mage.abilities.common.PlanswalkerEntersWithLoyalityCountersAbility; -import mage.abilities.common.delayed.AtTheBeginOfNextEndStepDelayedTriggeredAbility; import mage.abilities.costs.Cost; import mage.abilities.costs.common.PayVariableLoyaltyCost; import mage.abilities.dynamicvalue.DynamicValue; @@ -41,20 +39,15 @@ import mage.abilities.effects.Effect; import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.common.CreateTokenEffect; import mage.abilities.effects.common.DamageAllEffect; -import mage.abilities.effects.common.ExileTargetEffect; -import mage.abilities.keyword.HasteAbility; import mage.cards.Card; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Outcome; -import mage.constants.Zone; import mage.filter.common.FilterCreaturePermanent; import mage.game.Game; -import mage.game.permanent.Permanent; -import mage.game.permanent.token.Token; +import mage.game.permanent.token.ElementalToken; import mage.players.Player; -import mage.target.targetpointer.FixedTarget; /** * @@ -108,16 +101,9 @@ class ChandraElementalEffect extends OneShotEffect { public boolean apply(Game game, Ability source) { Player controller = game.getPlayer(source.getControllerId()); if (controller != null) { - CreateTokenEffect effect = new CreateTokenEffect(new ChandraElementalElementalToken(), 2); + CreateTokenEffect effect = new CreateTokenEffect(new ElementalToken("OGW", 1, true), 2); effect.apply(game, source); - for (UUID tokenId : effect.getLastAddedTokenIds()) { - Permanent tokenPermanent = game.getPermanent(tokenId); - if (tokenPermanent != null) { - ExileTargetEffect exileEffect = new ExileTargetEffect(null, "", Zone.BATTLEFIELD); - exileEffect.setTargetPointer(new FixedTarget(tokenPermanent, game)); - game.addDelayedTriggeredAbility(new AtTheBeginOfNextEndStepDelayedTriggeredAbility(exileEffect), source); - } - } + effect.exileTokensCreatedAtNextEndStep(game, source); return true; } @@ -125,22 +111,6 @@ class ChandraElementalEffect extends OneShotEffect { } } -class ChandraElementalElementalToken extends Token { - - public ChandraElementalElementalToken() { - super("Elemental", "3/1 red Elemental creature tokens with haste"); - setTokenType(1); - setOriginalExpansionSetCode("OGW"); - cardType.add(CardType.CREATURE); - color.setRed(true); - subtype.add("Elemental"); - power = new MageInt(3); - toughness = new MageInt(1); - - this.addAbility(HasteAbility.getInstance()); - } -} - class ChandraDrawEffect extends OneShotEffect { ChandraDrawEffect() { diff --git a/Mage.Sets/src/mage/cards/e/ElementalAppeal.java b/Mage.Sets/src/mage/cards/e/ElementalAppeal.java index 1c6b468ff78..3313e9e046b 100644 --- a/Mage.Sets/src/mage/cards/e/ElementalAppeal.java +++ b/Mage.Sets/src/mage/cards/e/ElementalAppeal.java @@ -28,28 +28,24 @@ package mage.cards.e; import java.util.UUID; - import mage.MageInt; -import mage.abilities.keyword.HasteAbility; -import mage.abilities.keyword.TrampleAbility; -import mage.constants.CardType; -import mage.constants.Duration; -import mage.constants.Outcome; import mage.abilities.Ability; -import mage.abilities.common.delayed.AtTheBeginOfNextEndStepDelayedTriggeredAbility; import mage.abilities.condition.LockedInCondition; import mage.abilities.condition.common.KickedCondition; import mage.abilities.decorator.ConditionalContinuousEffect; import mage.abilities.effects.OneShotEffect; -import mage.abilities.effects.common.ExileTargetEffect; +import mage.abilities.effects.common.CreateTokenEffect; import mage.abilities.effects.common.continuous.BoostTargetEffect; +import mage.abilities.keyword.HasteAbility; import mage.abilities.keyword.KickerAbility; +import mage.abilities.keyword.TrampleAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Outcome; import mage.game.Game; -import mage.game.permanent.Permanent; import mage.game.permanent.token.Token; -import mage.target.targetpointer.FixedTarget; /** * @@ -100,18 +96,14 @@ class ElementalAppealEffect extends OneShotEffect { @Override public boolean apply(Game game, Ability source) { - ElementalToken token = new ElementalToken(); - token.putOntoBattlefield(1, game, source.getSourceId(), source.getControllerId()); - - for (UUID tokenId : token.getLastAddedTokenIds()) { - Permanent tokenPermanent = game.getPermanent(tokenId); - if (tokenPermanent != null) { - ExileTargetEffect exileEffect = new ExileTargetEffect(); - exileEffect.setTargetPointer(new FixedTarget(tokenPermanent, game)); - game.addDelayedTriggeredAbility(new AtTheBeginOfNextEndStepDelayedTriggeredAbility(exileEffect), source); - } + + CreateTokenEffect effect = new CreateTokenEffect(new ElementalToken()); + if(effect.apply(game, source)) + { + effect.exileTokensCreatedAtNextEndStep(game, source); + return true; } - return true; + return false; } class ElementalToken extends Token { diff --git a/Mage.Sets/src/mage/cards/f/FirecatBlitz.java b/Mage.Sets/src/mage/cards/f/FirecatBlitz.java index 6b4f904b6fa..708b71d5c14 100644 --- a/Mage.Sets/src/mage/cards/f/FirecatBlitz.java +++ b/Mage.Sets/src/mage/cards/f/FirecatBlitz.java @@ -30,14 +30,12 @@ package mage.cards.f; import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; -import mage.abilities.common.delayed.AtTheBeginOfNextEndStepDelayedTriggeredAbility; import mage.abilities.costs.Cost; import mage.abilities.costs.common.SacrificeTargetCost; import mage.abilities.costs.common.SacrificeXTargetCost; import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.common.CreateTokenEffect; -import mage.abilities.effects.common.ExileTargetEffect; import mage.abilities.keyword.FlashbackAbility; import mage.abilities.keyword.HasteAbility; import mage.cards.CardImpl; @@ -45,14 +43,11 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Outcome; import mage.constants.TimingRule; -import mage.constants.Zone; import mage.filter.common.FilterControlledLandPermanent; import mage.filter.predicate.mageobject.SubtypePredicate; import mage.game.Game; -import mage.game.permanent.Permanent; import mage.game.permanent.token.Token; import mage.players.Player; -import mage.target.targetpointer.FixedTarget; /** * @@ -116,14 +111,7 @@ class FirecatBlitzEffect extends OneShotEffect { } CreateTokenEffect effect = new CreateTokenEffect(new ElementalCatToken(), xValue); effect.apply(game, source); - for (UUID tokenId : effect.getLastAddedTokenIds()) { - Permanent tokenPermanent = game.getPermanent(tokenId); - if (tokenPermanent != null) { - ExileTargetEffect exileEffect = new ExileTargetEffect(null, "", Zone.BATTLEFIELD); - exileEffect.setTargetPointer(new FixedTarget(tokenPermanent, game)); - game.addDelayedTriggeredAbility(new AtTheBeginOfNextEndStepDelayedTriggeredAbility(exileEffect), source); - } - } + effect.exileTokensCreatedAtNextEndStep(game, source); return true; } diff --git a/Mage.Sets/src/mage/cards/g/GeistOfSaintTraft.java b/Mage.Sets/src/mage/cards/g/GeistOfSaintTraft.java index 8f247bd337b..deb7333d844 100644 --- a/Mage.Sets/src/mage/cards/g/GeistOfSaintTraft.java +++ b/Mage.Sets/src/mage/cards/g/GeistOfSaintTraft.java @@ -31,19 +31,16 @@ import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.AttacksTriggeredAbility; -import mage.abilities.common.delayed.AtTheEndOfCombatDelayedTriggeredAbility; import mage.abilities.effects.OneShotEffect; -import mage.abilities.effects.common.ExileTargetEffect; +import mage.abilities.effects.common.CreateTokenEffect; import mage.abilities.keyword.HexproofAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Outcome; import mage.game.Game; -import mage.game.permanent.Permanent; import mage.game.permanent.token.AngelToken; import mage.players.Player; -import mage.target.targetpointer.FixedTarget; /** * @author Loki @@ -87,18 +84,12 @@ class GeistOfSaintTraftEffect extends OneShotEffect { } @Override - public boolean apply(Game game, Ability source) { - AngelToken token = new AngelToken(); + public boolean apply(Game game, Ability source) { + CreateTokenEffect effect = new CreateTokenEffect(new AngelToken()); Player controller = game.getPlayer(source.getControllerId()); - if (controller != null && token.putOntoBattlefield(1, game, source.getSourceId(), source.getControllerId(), true, true)) { - for (UUID tokenId : token.getLastAddedTokenIds()) { - Permanent tokenPermanent = game.getPermanent(tokenId); - if (tokenPermanent != null) { - ExileTargetEffect exileEffect = new ExileTargetEffect(); - exileEffect.setTargetPointer(new FixedTarget(tokenPermanent, game)); - game.addDelayedTriggeredAbility(new AtTheEndOfCombatDelayedTriggeredAbility(exileEffect), source); - } - } + + if (controller != null && effect.apply(game, source)) { + effect.exileTokensCreatedAtNextEndStep(game, source); return true; } return false; diff --git a/Mage.Sets/src/mage/cards/i/InvocationOfSaintTraft.java b/Mage.Sets/src/mage/cards/i/InvocationOfSaintTraft.java index ceceff93e75..0980fbb1724 100644 --- a/Mage.Sets/src/mage/cards/i/InvocationOfSaintTraft.java +++ b/Mage.Sets/src/mage/cards/i/InvocationOfSaintTraft.java @@ -31,10 +31,9 @@ import java.util.UUID; import mage.abilities.Ability; import mage.abilities.common.AttacksTriggeredAbility; import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.common.delayed.AtTheEndOfCombatDelayedTriggeredAbility; import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.common.AttachEffect; -import mage.abilities.effects.common.ExileTargetEffect; +import mage.abilities.effects.common.CreateTokenEffect; import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect; import mage.abilities.keyword.EnchantAbility; import mage.cards.CardImpl; @@ -44,12 +43,10 @@ import mage.constants.CardType; import mage.constants.Outcome; import mage.constants.Zone; import mage.game.Game; -import mage.game.permanent.Permanent; import mage.game.permanent.token.AngelToken; import mage.players.Player; import mage.target.TargetPermanent; import mage.target.common.TargetCreaturePermanent; -import mage.target.targetpointer.FixedTarget; /** * @@ -96,18 +93,11 @@ class InvocationOfSaintTraftEffect extends OneShotEffect { } @Override - public boolean apply(Game game, Ability source) { - AngelToken token = new AngelToken(); + public boolean apply(Game game, Ability source) { + CreateTokenEffect effect = new CreateTokenEffect(new AngelToken()); Player controller = game.getPlayer(source.getControllerId()); - if (controller != null && token.putOntoBattlefield(1, game, source.getSourceId(), source.getControllerId(), true, true)) { - for (UUID tokenId : token.getLastAddedTokenIds()) { - Permanent tokenPermanent = game.getPermanent(tokenId); - if (tokenPermanent != null) { - ExileTargetEffect exileEffect = new ExileTargetEffect(); - exileEffect.setTargetPointer(new FixedTarget(tokenPermanent, game)); - game.addDelayedTriggeredAbility(new AtTheEndOfCombatDelayedTriggeredAbility(exileEffect), source); - } - } + if (controller != null && (effect.apply(game, source))) { + effect.exileTokensCreatedAtNextEndStep(game, source); return true; } return false; diff --git a/Mage.Sets/src/mage/cards/k/KariZevSkyshipRaider.java b/Mage.Sets/src/mage/cards/k/KariZevSkyshipRaider.java index 29b30a410cb..5117712f4b5 100644 --- a/Mage.Sets/src/mage/cards/k/KariZevSkyshipRaider.java +++ b/Mage.Sets/src/mage/cards/k/KariZevSkyshipRaider.java @@ -31,9 +31,8 @@ import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.AttacksTriggeredAbility; -import mage.abilities.common.delayed.AtTheEndOfCombatDelayedTriggeredAbility; import mage.abilities.effects.OneShotEffect; -import mage.abilities.effects.common.ExileTargetEffect; +import mage.abilities.effects.common.CreateTokenEffect; import mage.abilities.keyword.FirstStrikeAbility; import mage.abilities.keyword.MenaceAbility; import mage.cards.CardImpl; @@ -41,10 +40,8 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Outcome; import mage.game.Game; -import mage.game.permanent.Permanent; import mage.game.permanent.token.Token; import mage.players.Player; -import mage.target.targetpointer.FixedTarget; /** * @@ -94,17 +91,10 @@ class KariZevSkyshipRaiderEffect extends OneShotEffect { @Override public boolean apply(Game game, Ability source) { - RagavanToken token = new RagavanToken(); + CreateTokenEffect effect = new CreateTokenEffect(new RagavanToken()); Player controller = game.getPlayer(source.getControllerId()); - if (controller != null && token.putOntoBattlefield(1, game, source.getSourceId(), source.getControllerId(), true, true)) { - for (UUID tokenId : token.getLastAddedTokenIds()) { - Permanent tokenPermanent = game.getPermanent(tokenId); - if (tokenPermanent != null) { - ExileTargetEffect exileEffect = new ExileTargetEffect(); - exileEffect.setTargetPointer(new FixedTarget(tokenPermanent, game)); - game.addDelayedTriggeredAbility(new AtTheEndOfCombatDelayedTriggeredAbility(exileEffect), source); - } - } + if (controller != null && effect.apply(game, source)) { + effect.exileTokensCreatedAtNextEndStep(game, source); return true; } return false; diff --git a/Mage.Sets/src/mage/cards/s/StoneIdolTrap.java b/Mage.Sets/src/mage/cards/s/StoneIdolTrap.java index aafa296687d..b7614c51a32 100644 --- a/Mage.Sets/src/mage/cards/s/StoneIdolTrap.java +++ b/Mage.Sets/src/mage/cards/s/StoneIdolTrap.java @@ -32,9 +32,8 @@ import mage.MageInt; import mage.abilities.Ability; import mage.abilities.SpellAbility; import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.common.delayed.AtTheBeginOfNextEndStepDelayedTriggeredAbility; import mage.abilities.effects.OneShotEffect; -import mage.abilities.effects.common.ExileTargetEffect; +import mage.abilities.effects.common.CreateTokenEffect; import mage.abilities.effects.common.cost.CostModificationEffectImpl; import mage.abilities.keyword.TrampleAbility; import mage.cards.CardImpl; @@ -43,14 +42,11 @@ import mage.constants.CardType; import mage.constants.CostModificationType; import mage.constants.Duration; import mage.constants.Outcome; -import mage.constants.TargetController; import mage.constants.Zone; import mage.filter.common.FilterCreaturePermanent; import mage.filter.predicate.permanent.AttackingPredicate; import mage.game.Game; -import mage.game.permanent.Permanent; import mage.game.permanent.token.Token; -import mage.target.targetpointer.FixedTarget; import mage.util.CardUtil; /** @@ -137,18 +133,14 @@ class StoneIdolTrapEffect extends OneShotEffect { } @Override - public boolean apply(Game game, Ability source) { - StoneTrapIdolToken token = new StoneTrapIdolToken(); - token.putOntoBattlefield(1, game, source.getSourceId(), source.getControllerId()); - for (UUID tokenId : token.getLastAddedTokenIds()) { - Permanent tokenPermanent = game.getPermanent(tokenId); - if (tokenPermanent != null) { - ExileTargetEffect exileEffect = new ExileTargetEffect(); - exileEffect.setTargetPointer(new FixedTarget(tokenPermanent, game)); - game.addDelayedTriggeredAbility(new AtTheBeginOfNextEndStepDelayedTriggeredAbility(Zone.ALL, exileEffect, TargetController.YOU), source); - } + public boolean apply(Game game, Ability source) { + CreateTokenEffect effect = new CreateTokenEffect(new StoneTrapIdolToken()); + if(effect.apply(game, source)) + { + effect.exileTokensCreatedAtNextEndStep(game, source); + return true; } - return true; + return false; } } diff --git a/Mage.Sets/src/mage/cards/z/ZektarShrineExpedition.java b/Mage.Sets/src/mage/cards/z/ZektarShrineExpedition.java index fb61ce0e0c5..4227a03fee7 100644 --- a/Mage.Sets/src/mage/cards/z/ZektarShrineExpedition.java +++ b/Mage.Sets/src/mage/cards/z/ZektarShrineExpedition.java @@ -27,15 +27,15 @@ */ package mage.cards.z; +import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.LandfallAbility; import mage.abilities.common.SimpleActivatedAbility; -import mage.abilities.common.delayed.AtTheBeginOfNextEndStepDelayedTriggeredAbility; import mage.abilities.costs.common.RemoveCountersSourceCost; import mage.abilities.costs.common.SacrificeSourceCost; import mage.abilities.effects.OneShotEffect; -import mage.abilities.effects.common.ExileTargetEffect; +import mage.abilities.effects.common.CreateTokenEffect; import mage.abilities.effects.common.counter.AddCountersSourceEffect; import mage.abilities.keyword.HasteAbility; import mage.abilities.keyword.TrampleAbility; @@ -46,11 +46,7 @@ import mage.constants.Outcome; import mage.constants.Zone; import mage.counters.CounterType; import mage.game.Game; -import mage.game.permanent.Permanent; import mage.game.permanent.token.Token; -import mage.target.targetpointer.FixedTarget; - -import java.util.UUID; /** * @@ -97,17 +93,14 @@ class ZektarShrineExpeditionEffect extends OneShotEffect { @Override public boolean apply(Game game, Ability source) { - ElementalToken token = new ElementalToken(); - token.putOntoBattlefield(1, game, source.getSourceId(), source.getControllerId()); - for (UUID tokenId : token.getLastAddedTokenIds()) { - Permanent tokenPermanent = game.getPermanent(tokenId); - if (tokenPermanent != null) { - ExileTargetEffect exileEffect = new ExileTargetEffect(); - exileEffect.setTargetPointer(new FixedTarget(tokenPermanent, game)); - game.addDelayedTriggeredAbility(new AtTheBeginOfNextEndStepDelayedTriggeredAbility(exileEffect), source); - } + + CreateTokenEffect effect = new CreateTokenEffect(new ElementalToken()); + if(effect.apply(game, source)) + { + effect.exileTokensCreatedAtNextEndStep(game, source); + return true; } - return true; + return false; } static class ElementalToken extends Token { From 59eb2ed56865dc6f5e835edaa1289ec6729548c3 Mon Sep 17 00:00:00 2001 From: ingmargoudt Date: Mon, 20 Mar 2017 10:39:28 +0100 Subject: [PATCH 3/7] change map for list --- Mage.Sets/src/mage/cards/k/KynaiosAndTiroOfMeletis.java | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/Mage.Sets/src/mage/cards/k/KynaiosAndTiroOfMeletis.java b/Mage.Sets/src/mage/cards/k/KynaiosAndTiroOfMeletis.java index 3b0beda3b75..d56c6acce5f 100644 --- a/Mage.Sets/src/mage/cards/k/KynaiosAndTiroOfMeletis.java +++ b/Mage.Sets/src/mage/cards/k/KynaiosAndTiroOfMeletis.java @@ -47,12 +47,12 @@ import mage.players.PlayerList; import mage.target.Target; import mage.target.common.TargetCardInHand; +import java.util.ArrayList; import java.util.HashMap; import java.util.Objects; import java.util.UUID; /** - * * @author spjspj */ public class KynaiosAndTiroOfMeletis extends CardImpl { @@ -100,7 +100,6 @@ class KynaiosAndTirosEffect extends OneShotEffect { @Override public boolean apply(Game game, Ability source) { Player controller = game.getPlayer(source.getControllerId()); - Permanent permanent = game.getPermanent(source.getSourceId()); if (controller != null) { controller.drawCards(1, game); PlayerList playerList = game.getState().getPlayerList().copy(); @@ -111,7 +110,7 @@ class KynaiosAndTirosEffect extends OneShotEffect { Player currentPlayer = game.getPlayer(playerList.get()); UUID firstInactivePlayer = null; Target target = new TargetCardInHand(filter); - HashMap noLandPlayers = new HashMap<>(); + ArrayList noLandPlayers = new ArrayList<>(); while (controller.canRespond()) { if (currentPlayer != null && currentPlayer.canRespond() && game.getState().getPlayersInRange(controller.getId(), game).contains(currentPlayer.getId())) { @@ -130,7 +129,7 @@ class KynaiosAndTirosEffect extends OneShotEffect { } } if (!playedLand && !Objects.equals(currentPlayer, controller)) { - noLandPlayers.put(currentPlayer.getId(), playedLand); + noLandPlayers.add(currentPlayer.getId()); } } // get next player @@ -142,7 +141,7 @@ class KynaiosAndTirosEffect extends OneShotEffect { } } - for (UUID playerId : noLandPlayers.keySet()) { + for (UUID playerId : noLandPlayers) { Player player = game.getPlayer(playerId); if (player != null) { if (player.chooseUse(outcome.DrawCard, "Draw a card?", source, game)) { From 2f031f883c3dd8e9512a5eacfe6864c954438572 Mon Sep 17 00:00:00 2001 From: Max Lebedev Date: Tue, 21 Mar 2017 02:24:38 -0400 Subject: [PATCH 4/7] added Divining Witch --- Mage.Sets/src/mage/cards/d/DiviningWitch.java | 138 ++++++++++++++++++ Mage.Sets/src/mage/sets/Nemesis.java | 1 + 2 files changed, 139 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/d/DiviningWitch.java diff --git a/Mage.Sets/src/mage/cards/d/DiviningWitch.java b/Mage.Sets/src/mage/cards/d/DiviningWitch.java new file mode 100644 index 00000000000..baed1a0d79e --- /dev/null +++ b/Mage.Sets/src/mage/cards/d/DiviningWitch.java @@ -0,0 +1,138 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.cards.d; + +import java.util.UUID; +import mage.MageInt; +import mage.MageObject; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.DiscardTargetCost; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.OneShotEffect; +import mage.cards.*; +import mage.cards.repository.CardRepository; +import mage.choices.Choice; +import mage.choices.ChoiceImpl; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.Zone; +import mage.game.Game; +import mage.players.Player; +import mage.target.common.TargetCardInHand; + +/** + * + * @author anonymous + */ +public class DiviningWitch extends CardImpl { + + public DiviningWitch(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{B}"); + + this.subtype.add("Human"); + this.subtype.add("Spellshaper"); + this.power = new MageInt(1); + this.toughness = new MageInt(1); + + // {1}{B}, {tap}, Discard a card: Name a card. Exile the top six cards of your library. Reveal cards from the top of your library until you reveal the named card, then put that card into your hand. Exile all other cards revealed this way. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DiviningWitchEffect(), new ManaCostsImpl("{1}{B}")); + ability.addCost(new TapSourceCost()); + ability.addCost(new DiscardTargetCost(new TargetCardInHand())); + this.addAbility(ability); + } + + public DiviningWitch(final DiviningWitch card) { + super(card); + } + + @Override + public DiviningWitch copy() { + return new DiviningWitch(this); + } +} + +class DiviningWitchEffect extends OneShotEffect { + + DiviningWitchEffect() { + super(Outcome.Benefit); + this.staticText = "Name a card. Exile the top six cards of your library. Reveal cards from the top of your library until you reveal the named card, then put that card into your hand. Exile all other cards revealed this way"; + } + + DiviningWitchEffect(final DiviningWitchEffect effect) { + super(effect); + } + + @Override + public DiviningWitchEffect copy() { + return new DiviningWitchEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player controller = game.getPlayer(source.getControllerId()); + MageObject sourceObject = game.getObject(source.getSourceId()); + if (controller != null && sourceObject != null) { + // Name a card. + Choice choice = new ChoiceImpl(); + choice.setChoices(CardRepository.instance.getNames()); + while (!controller.choose(Outcome.Benefit, choice, game)) { + if (!controller.canRespond()) { + return false; + } + } + String name = choice.getChoice(); + game.informPlayers("Card named: " + name); + + // Exile the top six cards of your library, + controller.moveCards(controller.getLibrary().getTopCards(game, 6), Zone.EXILED, source, game); + + // then reveal cards from the top of your library until you reveal the named card. + Cards cardsToReaveal = new CardsImpl(); + Card cardToHand = null; + while (controller.getLibrary().hasCards()) { + Card card = controller.getLibrary().removeFromTop(game); + if (card != null) { + cardsToReaveal.add(card); + // Put that card into your hand + if (card.getName().equals(name)) { + cardToHand = card; + break; + } + } + } + controller.moveCards(cardToHand, Zone.HAND, source, game); + controller.revealCards(sourceObject.getIdName(), cardsToReaveal, game); + cardsToReaveal.remove(cardToHand); + controller.moveCards(cardsToReaveal, Zone.EXILED, source, game); + return true; + } + return false; + } +} diff --git a/Mage.Sets/src/mage/sets/Nemesis.java b/Mage.Sets/src/mage/sets/Nemesis.java index 2a01e357a01..1a84b91e6eb 100644 --- a/Mage.Sets/src/mage/sets/Nemesis.java +++ b/Mage.Sets/src/mage/sets/Nemesis.java @@ -72,6 +72,7 @@ public class Nemesis extends ExpansionSet { cards.add(new SetCardInfo("Death Pit Offering", 56, Rarity.RARE, mage.cards.d.DeathPitOffering.class)); cards.add(new SetCardInfo("Defender en-Vec", 5, Rarity.COMMON, mage.cards.d.DefenderEnVec.class)); cards.add(new SetCardInfo("Defiant Falcon", 6, Rarity.COMMON, mage.cards.d.DefiantFalcon.class)); + cards.add(new SetCardInfo("Divining Witch", 57, Rarity.RARE, mage.cards.d.DiviningWitch.class)); cards.add(new SetCardInfo("Dominate", 31, Rarity.UNCOMMON, mage.cards.d.Dominate.class)); cards.add(new SetCardInfo("Downhill Charge", 79, Rarity.COMMON, mage.cards.d.DownhillCharge.class)); cards.add(new SetCardInfo("Ensnare", 32, Rarity.UNCOMMON, mage.cards.e.Ensnare.class)); From 338d032a8b942cf352b837c45e003254554c9ac6 Mon Sep 17 00:00:00 2001 From: Max Lebedev Date: Tue, 21 Mar 2017 02:30:33 -0400 Subject: [PATCH 5/7] updated author --- Mage.Sets/src/mage/cards/d/DiviningWitch.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Mage.Sets/src/mage/cards/d/DiviningWitch.java b/Mage.Sets/src/mage/cards/d/DiviningWitch.java index baed1a0d79e..09a05685f1a 100644 --- a/Mage.Sets/src/mage/cards/d/DiviningWitch.java +++ b/Mage.Sets/src/mage/cards/d/DiviningWitch.java @@ -49,7 +49,7 @@ import mage.target.common.TargetCardInHand; /** * - * @author anonymous + * @author maxlebedev */ public class DiviningWitch extends CardImpl { From 4b8c2d19ad2324a84fe376610914f2fba46fc9ed Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Tue, 21 Mar 2017 11:37:22 +0100 Subject: [PATCH 6/7] Added Ogre Leadfoot. --- Mage.Sets/src/mage/cards/o/OgreLeadfoot.java | 64 ++ Mage.Sets/src/mage/sets/Mirrodin.java | 629 +++++++++--------- ...omesBlockedByCreatureTriggeredAbility.java | 4 +- 3 files changed, 382 insertions(+), 315 deletions(-) create mode 100644 Mage.Sets/src/mage/cards/o/OgreLeadfoot.java diff --git a/Mage.Sets/src/mage/cards/o/OgreLeadfoot.java b/Mage.Sets/src/mage/cards/o/OgreLeadfoot.java new file mode 100644 index 00000000000..b782730b2a1 --- /dev/null +++ b/Mage.Sets/src/mage/cards/o/OgreLeadfoot.java @@ -0,0 +1,64 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.cards.o; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.BecomesBlockedByCreatureTriggeredAbility; +import mage.abilities.effects.common.DestroyTargetEffect; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.filter.common.FilterArtifactCreaturePermanent; + +/** + * + * @author LevelX2 + */ +public class OgreLeadfoot extends CardImpl { + + public OgreLeadfoot(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{R}"); + + this.subtype.add("Ogre"); + this.power = new MageInt(3); + this.toughness = new MageInt(3); + + // Whenever Ogre Leadfoot becomes blocked by an artifact creature, destroy that creature. + this.addAbility(new BecomesBlockedByCreatureTriggeredAbility(new DestroyTargetEffect(), new FilterArtifactCreaturePermanent("an artifact creature"), false)); + } + + public OgreLeadfoot(final OgreLeadfoot card) { + super(card); + } + + @Override + public OgreLeadfoot copy() { + return new OgreLeadfoot(this); + } +} diff --git a/Mage.Sets/src/mage/sets/Mirrodin.java b/Mage.Sets/src/mage/sets/Mirrodin.java index a5692d782f7..d35973de0a5 100644 --- a/Mage.Sets/src/mage/sets/Mirrodin.java +++ b/Mage.Sets/src/mage/sets/Mirrodin.java @@ -1,314 +1,315 @@ -package mage.sets; - -import mage.cards.ExpansionSet; -import mage.constants.SetType; - -import mage.constants.Rarity; -import mage.cards.CardGraphicInfo; - -public class Mirrodin extends ExpansionSet { - private static final Mirrodin instance = new Mirrodin(); - - public static Mirrodin getInstance() { - return instance; - } - - private Mirrodin() { - super("Mirrodin", "MRD", ExpansionSet.buildDate(2003, 9, 2), SetType.EXPANSION); - this.blockName = "Mirrodin"; - this.hasBoosters = true; - this.numBoosterLands = 0; - this.numBoosterCommon = 11; - this.numBoosterUncommon = 3; - this.numBoosterRare = 1; - this.ratioBoosterMythic = 0; - cards.add(new SetCardInfo("Aether Spellbomb", 141, Rarity.COMMON, mage.cards.a.AetherSpellbomb.class)); - cards.add(new SetCardInfo("Alpha Myr", 142, Rarity.COMMON, mage.cards.a.AlphaMyr.class)); - cards.add(new SetCardInfo("Altar of Shadows", 143, Rarity.RARE, mage.cards.a.AltarOfShadows.class)); - cards.add(new SetCardInfo("Altar's Light", 1, Rarity.UNCOMMON, mage.cards.a.AltarsLight.class)); - cards.add(new SetCardInfo("Ancient Den", 278, Rarity.COMMON, mage.cards.a.AncientDen.class)); - cards.add(new SetCardInfo("Annul", 29, Rarity.COMMON, mage.cards.a.Annul.class)); - cards.add(new SetCardInfo("Arc-Slogger", 85, Rarity.RARE, mage.cards.a.ArcSlogger.class)); - cards.add(new SetCardInfo("Arrest", 2, Rarity.COMMON, mage.cards.a.Arrest.class)); - cards.add(new SetCardInfo("Assert Authority", 30, Rarity.UNCOMMON, mage.cards.a.AssertAuthority.class)); - cards.add(new SetCardInfo("Atog", 86, Rarity.UNCOMMON, mage.cards.a.Atog.class)); - cards.add(new SetCardInfo("Auriok Bladewarden", 3, Rarity.UNCOMMON, mage.cards.a.AuriokBladewarden.class)); - cards.add(new SetCardInfo("Auriok Steelshaper", 4, Rarity.RARE, mage.cards.a.AuriokSteelshaper.class)); - cards.add(new SetCardInfo("Auriok Transfixer", 5, Rarity.COMMON, mage.cards.a.AuriokTransfixer.class)); - cards.add(new SetCardInfo("Awe Strike", 6, Rarity.COMMON, mage.cards.a.AweStrike.class)); - cards.add(new SetCardInfo("Banshee's Blade", 144, Rarity.UNCOMMON, mage.cards.b.BansheesBlade.class)); - cards.add(new SetCardInfo("Barter in Blood", 57, Rarity.UNCOMMON, mage.cards.b.BarterInBlood.class)); - cards.add(new SetCardInfo("Battlegrowth", 113, Rarity.COMMON, mage.cards.b.Battlegrowth.class)); - cards.add(new SetCardInfo("Betrayal of Flesh", 58, Rarity.UNCOMMON, mage.cards.b.BetrayalOfFlesh.class)); - cards.add(new SetCardInfo("Blinding Beam", 7, Rarity.COMMON, mage.cards.b.BlindingBeam.class)); - cards.add(new SetCardInfo("Blinkmoth Urn", 145, Rarity.RARE, mage.cards.b.BlinkmothUrn.class)); - cards.add(new SetCardInfo("Blinkmoth Well", 279, Rarity.UNCOMMON, mage.cards.b.BlinkmothWell.class)); - cards.add(new SetCardInfo("Bloodscent", 114, Rarity.UNCOMMON, mage.cards.b.Bloodscent.class)); - cards.add(new SetCardInfo("Bonesplitter", 146, Rarity.COMMON, mage.cards.b.Bonesplitter.class)); - cards.add(new SetCardInfo("Bosh, Iron Golem", 147, Rarity.RARE, mage.cards.b.BoshIronGolem.class)); - cards.add(new SetCardInfo("Bottle Gnomes", 148, Rarity.UNCOMMON, mage.cards.b.BottleGnomes.class)); - cards.add(new SetCardInfo("Broodstar", 31, Rarity.RARE, mage.cards.b.Broodstar.class)); - cards.add(new SetCardInfo("Cathodion", 149, Rarity.UNCOMMON, mage.cards.c.Cathodion.class)); - cards.add(new SetCardInfo("Chalice of the Void", 150, Rarity.RARE, mage.cards.c.ChaliceOfTheVoid.class)); - cards.add(new SetCardInfo("Chimney Imp", 59, Rarity.COMMON, mage.cards.c.ChimneyImp.class)); - cards.add(new SetCardInfo("Chromatic Sphere", 151, Rarity.COMMON, mage.cards.c.ChromaticSphere.class)); - cards.add(new SetCardInfo("Chrome Mox", 152, Rarity.RARE, mage.cards.c.ChromeMox.class)); - cards.add(new SetCardInfo("Clockwork Beetle", 153, Rarity.COMMON, mage.cards.c.ClockworkBeetle.class)); - cards.add(new SetCardInfo("Clockwork Condor", 154, Rarity.COMMON, mage.cards.c.ClockworkCondor.class)); - cards.add(new SetCardInfo("Clockwork Dragon", 155, Rarity.RARE, mage.cards.c.ClockworkDragon.class)); - cards.add(new SetCardInfo("Clockwork Vorrac", 156, Rarity.UNCOMMON, mage.cards.c.ClockworkVorrac.class)); - cards.add(new SetCardInfo("Cloudpost", 280, Rarity.COMMON, mage.cards.c.Cloudpost.class)); - cards.add(new SetCardInfo("Cobalt Golem", 157, Rarity.COMMON, mage.cards.c.CobaltGolem.class)); - cards.add(new SetCardInfo("Confusion in the Ranks", 87, Rarity.RARE, mage.cards.c.ConfusionInTheRanks.class)); - cards.add(new SetCardInfo("Consume Spirit", 60, Rarity.COMMON, mage.cards.c.ConsumeSpirit.class)); - cards.add(new SetCardInfo("Contaminated Bond", 61, Rarity.COMMON, mage.cards.c.ContaminatedBond.class)); - cards.add(new SetCardInfo("Copperhoof Vorrac", 116, Rarity.RARE, mage.cards.c.CopperhoofVorrac.class)); - cards.add(new SetCardInfo("Copper Myr", 158, Rarity.COMMON, mage.cards.c.CopperMyr.class)); - cards.add(new SetCardInfo("Creeping Mold", 117, Rarity.UNCOMMON, mage.cards.c.CreepingMold.class)); - cards.add(new SetCardInfo("Crystal Shard", 159, Rarity.UNCOMMON, mage.cards.c.CrystalShard.class)); - cards.add(new SetCardInfo("Culling Scales", 160, Rarity.RARE, mage.cards.c.CullingScales.class)); - cards.add(new SetCardInfo("Damping Matrix", 161, Rarity.RARE, mage.cards.d.DampingMatrix.class)); - cards.add(new SetCardInfo("Deconstruct", 118, Rarity.COMMON, mage.cards.d.Deconstruct.class)); - cards.add(new SetCardInfo("Detonate", 88, Rarity.UNCOMMON, mage.cards.d.Detonate.class)); - cards.add(new SetCardInfo("Disarm", 32, Rarity.COMMON, mage.cards.d.Disarm.class)); - cards.add(new SetCardInfo("Disciple of the Vault", 62, Rarity.COMMON, mage.cards.d.DiscipleOfTheVault.class)); - cards.add(new SetCardInfo("Domineer", 33, Rarity.UNCOMMON, mage.cards.d.Domineer.class)); - cards.add(new SetCardInfo("Dragon Blood", 163, Rarity.UNCOMMON, mage.cards.d.DragonBlood.class)); - cards.add(new SetCardInfo("Dream's Grip", 34, Rarity.COMMON, mage.cards.d.DreamsGrip.class)); - cards.add(new SetCardInfo("Dross Harvester", 63, Rarity.RARE, mage.cards.d.DrossHarvester.class)); - cards.add(new SetCardInfo("Dross Prowler", 64, Rarity.COMMON, mage.cards.d.DrossProwler.class)); - cards.add(new SetCardInfo("Dross Scorpion", 164, Rarity.COMMON, mage.cards.d.DrossScorpion.class)); - cards.add(new SetCardInfo("Duplicant", 165, Rarity.RARE, mage.cards.d.Duplicant.class)); - cards.add(new SetCardInfo("Duskworker", 166, Rarity.UNCOMMON, mage.cards.d.Duskworker.class)); - cards.add(new SetCardInfo("Electrostatic Bolt", 89, Rarity.COMMON, mage.cards.e.ElectrostaticBolt.class)); - cards.add(new SetCardInfo("Elf Replica", 167, Rarity.COMMON, mage.cards.e.ElfReplica.class)); - cards.add(new SetCardInfo("Empyrial Plate", 168, Rarity.RARE, mage.cards.e.EmpyrialPlate.class)); - cards.add(new SetCardInfo("Extraplanar Lens", 169, Rarity.RARE, mage.cards.e.ExtraplanarLens.class)); - cards.add(new SetCardInfo("Fabricate", 35, Rarity.UNCOMMON, mage.cards.f.Fabricate.class)); - cards.add(new SetCardInfo("Fangren Hunter", 119, Rarity.COMMON, mage.cards.f.FangrenHunter.class)); - cards.add(new SetCardInfo("Farsight Mask", 170, Rarity.UNCOMMON, mage.cards.f.FarsightMask.class)); - cards.add(new SetCardInfo("Fatespinner", 36, Rarity.RARE, mage.cards.f.Fatespinner.class)); - cards.add(new SetCardInfo("Fiery Gambit", 90, Rarity.RARE, mage.cards.f.FieryGambit.class)); - cards.add(new SetCardInfo("Fireshrieker", 171, Rarity.UNCOMMON, mage.cards.f.Fireshrieker.class)); - cards.add(new SetCardInfo("Fists of the Anvil", 91, Rarity.COMMON, mage.cards.f.FistsOfTheAnvil.class)); - cards.add(new SetCardInfo("Forest", 303, Rarity.LAND, mage.cards.basiclands.Forest.class, new CardGraphicInfo(null, true))); - cards.add(new SetCardInfo("Forest", 304, Rarity.LAND, mage.cards.basiclands.Forest.class, new CardGraphicInfo(null, true))); - cards.add(new SetCardInfo("Forest", 305, Rarity.LAND, mage.cards.basiclands.Forest.class, new CardGraphicInfo(null, true))); - cards.add(new SetCardInfo("Forest", 306, Rarity.LAND, mage.cards.basiclands.Forest.class, new CardGraphicInfo(null, true))); - cards.add(new SetCardInfo("Forge Armor", 92, Rarity.UNCOMMON, mage.cards.f.ForgeArmor.class)); - cards.add(new SetCardInfo("Frogmite", 172, Rarity.COMMON, mage.cards.f.Frogmite.class)); - cards.add(new SetCardInfo("Galvanic Key", 173, Rarity.COMMON, mage.cards.g.GalvanicKey.class)); - cards.add(new SetCardInfo("Gate to the Aether", 174, Rarity.RARE, mage.cards.g.GateToTheAether.class)); - cards.add(new SetCardInfo("Gilded Lotus", 175, Rarity.RARE, mage.cards.g.GildedLotus.class)); - cards.add(new SetCardInfo("Glimmervoid", 281, Rarity.RARE, mage.cards.g.Glimmervoid.class)); - cards.add(new SetCardInfo("Glissa Sunseeker", 120, Rarity.RARE, mage.cards.g.GlissaSunseeker.class)); - cards.add(new SetCardInfo("Goblin Charbelcher", 176, Rarity.RARE, mage.cards.g.GoblinCharbelcher.class)); - cards.add(new SetCardInfo("Goblin Dirigible", 177, Rarity.UNCOMMON, mage.cards.g.GoblinDirigible.class)); - cards.add(new SetCardInfo("Goblin Replica", 178, Rarity.COMMON, mage.cards.g.GoblinReplica.class)); - cards.add(new SetCardInfo("Goblin Striker", 94, Rarity.COMMON, mage.cards.g.GoblinStriker.class)); - cards.add(new SetCardInfo("Goblin War Wagon", 179, Rarity.COMMON, mage.cards.g.GoblinWarWagon.class)); - cards.add(new SetCardInfo("Gold Myr", 180, Rarity.COMMON, mage.cards.g.GoldMyr.class)); - cards.add(new SetCardInfo("Golem-Skin Gauntlets", 181, Rarity.UNCOMMON, mage.cards.g.GolemSkinGauntlets.class)); - cards.add(new SetCardInfo("Grab the Reins", 95, Rarity.UNCOMMON, mage.cards.g.GrabTheReins.class)); - cards.add(new SetCardInfo("Granite Shard", 182, Rarity.UNCOMMON, mage.cards.g.GraniteShard.class)); - cards.add(new SetCardInfo("Great Furnace", 282, Rarity.COMMON, mage.cards.g.GreatFurnace.class)); - cards.add(new SetCardInfo("Grid Monitor", 183, Rarity.RARE, mage.cards.g.GridMonitor.class)); - cards.add(new SetCardInfo("Groffskithur", 121, Rarity.COMMON, mage.cards.g.Groffskithur.class)); - cards.add(new SetCardInfo("Heartwood Shard", 184, Rarity.UNCOMMON, mage.cards.h.HeartwoodShard.class)); - cards.add(new SetCardInfo("Hematite Golem", 185, Rarity.COMMON, mage.cards.h.HematiteGolem.class)); - cards.add(new SetCardInfo("Hum of the Radix", 122, Rarity.RARE, mage.cards.h.HumOfTheRadix.class)); - cards.add(new SetCardInfo("Icy Manipulator", 186, Rarity.UNCOMMON, mage.cards.i.IcyManipulator.class)); - cards.add(new SetCardInfo("Incite War", 96, Rarity.COMMON, mage.cards.i.InciteWar.class)); - cards.add(new SetCardInfo("Inertia Bubble", 37, Rarity.COMMON, mage.cards.i.InertiaBubble.class)); - cards.add(new SetCardInfo("Iron Myr", 187, Rarity.COMMON, mage.cards.i.IronMyr.class)); - cards.add(new SetCardInfo("Irradiate", 67, Rarity.COMMON, mage.cards.i.Irradiate.class)); - cards.add(new SetCardInfo("Island", 291, Rarity.LAND, mage.cards.basiclands.Island.class, new CardGraphicInfo(null, true))); - cards.add(new SetCardInfo("Island", 292, Rarity.LAND, mage.cards.basiclands.Island.class, new CardGraphicInfo(null, true))); - cards.add(new SetCardInfo("Island", 293, Rarity.LAND, mage.cards.basiclands.Island.class, new CardGraphicInfo(null, true))); - cards.add(new SetCardInfo("Island", 294, Rarity.LAND, mage.cards.basiclands.Island.class, new CardGraphicInfo(null, true))); - cards.add(new SetCardInfo("Isochron Scepter", 188, Rarity.UNCOMMON, mage.cards.i.IsochronScepter.class)); - cards.add(new SetCardInfo("Jinxed Choker", 189, Rarity.RARE, mage.cards.j.JinxedChoker.class)); - cards.add(new SetCardInfo("Journey of Discovery", 123, Rarity.COMMON, mage.cards.j.JourneyOfDiscovery.class)); - cards.add(new SetCardInfo("Krark-Clan Grunt", 97, Rarity.COMMON, mage.cards.k.KrarkClanGrunt.class)); - cards.add(new SetCardInfo("Krark-Clan Shaman", 98, Rarity.COMMON, mage.cards.k.KrarkClanShaman.class)); - cards.add(new SetCardInfo("Krark's Thumb", 190, Rarity.RARE, mage.cards.k.KrarksThumb.class)); - cards.add(new SetCardInfo("Leaden Myr", 191, Rarity.COMMON, mage.cards.l.LeadenMyr.class)); - cards.add(new SetCardInfo("Leonin Abunas", 8, Rarity.RARE, mage.cards.l.LeoninAbunas.class)); - cards.add(new SetCardInfo("Leonin Bladetrap", 192, Rarity.UNCOMMON, mage.cards.l.LeoninBladetrap.class)); - cards.add(new SetCardInfo("Leonin Den-Guard", 9, Rarity.COMMON, mage.cards.l.LeoninDenGuard.class)); - cards.add(new SetCardInfo("Leonin Elder", 10, Rarity.COMMON, mage.cards.l.LeoninElder.class)); - cards.add(new SetCardInfo("Leonin Scimitar", 193, Rarity.COMMON, mage.cards.l.LeoninScimitar.class)); - cards.add(new SetCardInfo("Leonin Skyhunter", 11, Rarity.UNCOMMON, mage.cards.l.LeoninSkyhunter.class)); - cards.add(new SetCardInfo("Leonin Sun Standard", 194, Rarity.RARE, mage.cards.l.LeoninSunStandard.class)); - cards.add(new SetCardInfo("Leveler", 195, Rarity.RARE, mage.cards.l.Leveler.class)); - cards.add(new SetCardInfo("Lifespark Spellbomb", 197, Rarity.COMMON, mage.cards.l.LifesparkSpellbomb.class)); - cards.add(new SetCardInfo("Lightning Coils", 198, Rarity.RARE, mage.cards.l.LightningCoils.class)); - cards.add(new SetCardInfo("Lightning Greaves", 199, Rarity.UNCOMMON, mage.cards.l.LightningGreaves.class)); - cards.add(new SetCardInfo("Living Hive", 124, Rarity.RARE, mage.cards.l.LivingHive.class)); - cards.add(new SetCardInfo("Lodestone Myr", 200, Rarity.RARE, mage.cards.l.LodestoneMyr.class)); - cards.add(new SetCardInfo("Looming Hoverguard", 38, Rarity.UNCOMMON, mage.cards.l.LoomingHoverguard.class)); - cards.add(new SetCardInfo("Loxodon Mender", 12, Rarity.COMMON, mage.cards.l.LoxodonMender.class)); - cards.add(new SetCardInfo("Loxodon Punisher", 14, Rarity.RARE, mage.cards.l.LoxodonPunisher.class)); - cards.add(new SetCardInfo("Loxodon Warhammer", 201, Rarity.UNCOMMON, mage.cards.l.LoxodonWarhammer.class)); - cards.add(new SetCardInfo("Lumengrid Sentinel", 40, Rarity.UNCOMMON, mage.cards.l.LumengridSentinel.class)); - cards.add(new SetCardInfo("Lumengrid Warden", 41, Rarity.COMMON, mage.cards.l.LumengridWarden.class)); - cards.add(new SetCardInfo("Luminous Angel", 15, Rarity.RARE, mage.cards.l.LuminousAngel.class)); - cards.add(new SetCardInfo("Malachite Golem", 202, Rarity.COMMON, mage.cards.m.MalachiteGolem.class)); - cards.add(new SetCardInfo("March of the Machines", 42, Rarity.RARE, mage.cards.m.MarchOfTheMachines.class)); - cards.add(new SetCardInfo("Mask of Memory", 203, Rarity.UNCOMMON, mage.cards.m.MaskOfMemory.class)); - cards.add(new SetCardInfo("Mass Hysteria", 99, Rarity.RARE, mage.cards.m.MassHysteria.class)); - cards.add(new SetCardInfo("Megatog", 100, Rarity.RARE, mage.cards.m.Megatog.class)); - cards.add(new SetCardInfo("Mesmeric Orb", 204, Rarity.RARE, mage.cards.m.MesmericOrb.class)); - cards.add(new SetCardInfo("Mind's Eye", 205, Rarity.RARE, mage.cards.m.MindsEye.class)); - cards.add(new SetCardInfo("Mindslaver", 206, Rarity.RARE, mage.cards.m.Mindslaver.class)); - cards.add(new SetCardInfo("Molder Slug", 125, Rarity.RARE, mage.cards.m.MolderSlug.class)); - cards.add(new SetCardInfo("Molten Rain", 101, Rarity.COMMON, mage.cards.m.MoltenRain.class)); - cards.add(new SetCardInfo("Moriok Scavenger", 68, Rarity.COMMON, mage.cards.m.MoriokScavenger.class)); - cards.add(new SetCardInfo("Mountain", 299, Rarity.LAND, mage.cards.basiclands.Mountain.class, new CardGraphicInfo(null, true))); - cards.add(new SetCardInfo("Mountain", 300, Rarity.LAND, mage.cards.basiclands.Mountain.class, new CardGraphicInfo(null, true))); - cards.add(new SetCardInfo("Mountain", 301, Rarity.LAND, mage.cards.basiclands.Mountain.class, new CardGraphicInfo(null, true))); - cards.add(new SetCardInfo("Mountain", 302, Rarity.LAND, mage.cards.basiclands.Mountain.class, new CardGraphicInfo(null, true))); - cards.add(new SetCardInfo("Myr Adapter", 210, Rarity.COMMON, mage.cards.m.MyrAdapter.class)); - cards.add(new SetCardInfo("Myr Enforcer", 211, Rarity.COMMON, mage.cards.m.MyrEnforcer.class)); - cards.add(new SetCardInfo("Myr Mindservant", 213, Rarity.UNCOMMON, mage.cards.m.MyrMindservant.class)); - cards.add(new SetCardInfo("Myr Retriever", 215, Rarity.UNCOMMON, mage.cards.m.MyrRetriever.class)); - cards.add(new SetCardInfo("Necrogen Mists", 69, Rarity.RARE, mage.cards.n.NecrogenMists.class)); - cards.add(new SetCardInfo("Necrogen Spellbomb", 216, Rarity.COMMON, mage.cards.n.NecrogenSpellbomb.class)); - cards.add(new SetCardInfo("Needlebug", 217, Rarity.UNCOMMON, mage.cards.n.Needlebug.class)); - cards.add(new SetCardInfo("Neurok Familiar", 43, Rarity.COMMON, mage.cards.n.NeurokFamiliar.class)); - cards.add(new SetCardInfo("Neurok Hoversail", 218, Rarity.COMMON, mage.cards.n.NeurokHoversail.class)); - cards.add(new SetCardInfo("Neurok Spy", 44, Rarity.COMMON, mage.cards.n.NeurokSpy.class)); - cards.add(new SetCardInfo("Nightmare Lash", 219, Rarity.RARE, mage.cards.n.NightmareLash.class)); - cards.add(new SetCardInfo("Nim Devourer", 70, Rarity.RARE, mage.cards.n.NimDevourer.class)); - cards.add(new SetCardInfo("Nim Lasher", 71, Rarity.COMMON, mage.cards.n.NimLasher.class)); - cards.add(new SetCardInfo("Nim Replica", 220, Rarity.COMMON, mage.cards.n.NimReplica.class)); - cards.add(new SetCardInfo("Nim Shambler", 72, Rarity.UNCOMMON, mage.cards.n.NimShambler.class)); - cards.add(new SetCardInfo("Nim Shrieker", 73, Rarity.COMMON, mage.cards.n.NimShrieker.class)); - cards.add(new SetCardInfo("Nuisance Engine", 221, Rarity.UNCOMMON, mage.cards.n.NuisanceEngine.class)); - cards.add(new SetCardInfo("Oblivion Stone", 222, Rarity.RARE, mage.cards.o.OblivionStone.class)); - cards.add(new SetCardInfo("Omega Myr", 223, Rarity.COMMON, mage.cards.o.OmegaMyr.class)); - cards.add(new SetCardInfo("One Dozen Eyes", 126, Rarity.UNCOMMON, mage.cards.o.OneDozenEyes.class)); - cards.add(new SetCardInfo("Ornithopter", 224, Rarity.UNCOMMON, mage.cards.o.Ornithopter.class)); - cards.add(new SetCardInfo("Override", 45, Rarity.COMMON, mage.cards.o.OverrideCard.class)); - cards.add(new SetCardInfo("Pearl Shard", 225, Rarity.UNCOMMON, mage.cards.p.PearlShard.class)); - cards.add(new SetCardInfo("Pentavus", 226, Rarity.RARE, mage.cards.p.Pentavus.class)); - cards.add(new SetCardInfo("Pewter Golem", 227, Rarity.COMMON, mage.cards.p.PewterGolem.class)); - cards.add(new SetCardInfo("Plains", 287, Rarity.LAND, mage.cards.basiclands.Plains.class, new CardGraphicInfo(null, true))); - cards.add(new SetCardInfo("Plains", 288, Rarity.LAND, mage.cards.basiclands.Plains.class, new CardGraphicInfo(null, true))); - cards.add(new SetCardInfo("Plains", 289, Rarity.LAND, mage.cards.basiclands.Plains.class, new CardGraphicInfo(null, true))); - cards.add(new SetCardInfo("Plains", 290, Rarity.LAND, mage.cards.basiclands.Plains.class, new CardGraphicInfo(null, true))); - cards.add(new SetCardInfo("Plated Slagwurm", 127, Rarity.RARE, mage.cards.p.PlatedSlagwurm.class)); - cards.add(new SetCardInfo("Platinum Angel", 228, Rarity.RARE, mage.cards.p.PlatinumAngel.class)); - cards.add(new SetCardInfo("Power Conduit", 229, Rarity.UNCOMMON, mage.cards.p.PowerConduit.class)); - cards.add(new SetCardInfo("Predator's Strike", 128, Rarity.COMMON, mage.cards.p.PredatorsStrike.class)); - cards.add(new SetCardInfo("Promise of Power", 74, Rarity.RARE, mage.cards.p.PromiseOfPower.class)); - cards.add(new SetCardInfo("Proteus Staff", 230, Rarity.RARE, mage.cards.p.ProteusStaff.class)); - cards.add(new SetCardInfo("Psychic Membrane", 46, Rarity.UNCOMMON, mage.cards.p.PsychicMembrane.class)); - cards.add(new SetCardInfo("Psychogenic Probe", 231, Rarity.RARE, mage.cards.p.PsychogenicProbe.class)); - cards.add(new SetCardInfo("Pyrite Spellbomb", 232, Rarity.COMMON, mage.cards.p.PyriteSpellbomb.class)); - cards.add(new SetCardInfo("Quicksilver Elemental", 47, Rarity.RARE, mage.cards.q.QuicksilverElemental.class)); - cards.add(new SetCardInfo("Raise the Alarm", 16, Rarity.COMMON, mage.cards.r.RaiseTheAlarm.class)); - cards.add(new SetCardInfo("Razor Barrier", 17, Rarity.COMMON, mage.cards.r.RazorBarrier.class)); - cards.add(new SetCardInfo("Regress", 48, Rarity.COMMON, mage.cards.r.Regress.class)); - cards.add(new SetCardInfo("Reiver Demon", 75, Rarity.RARE, mage.cards.r.ReiverDemon.class)); - cards.add(new SetCardInfo("Relic Bane", 76, Rarity.UNCOMMON, mage.cards.r.RelicBane.class)); - cards.add(new SetCardInfo("Roar of the Kha", 18, Rarity.UNCOMMON, mage.cards.r.RoarOfTheKha.class)); - cards.add(new SetCardInfo("Rule of Law", 19, Rarity.RARE, mage.cards.r.RuleOfLaw.class)); - cards.add(new SetCardInfo("Rust Elemental", 234, Rarity.UNCOMMON, mage.cards.r.RustElemental.class)); - cards.add(new SetCardInfo("Rustmouth Ogre", 103, Rarity.UNCOMMON, mage.cards.r.RustmouthOgre.class)); - cards.add(new SetCardInfo("Rustspore Ram", 235, Rarity.UNCOMMON, mage.cards.r.RustsporeRam.class)); - cards.add(new SetCardInfo("Scale of Chiss-Goria", 236, Rarity.COMMON, mage.cards.s.ScaleOfChissGoria.class)); - cards.add(new SetCardInfo("Scrabbling Claws", 237, Rarity.UNCOMMON, mage.cards.s.ScrabblingClaws.class)); - cards.add(new SetCardInfo("Sculpting Steel", 238, Rarity.RARE, mage.cards.s.SculptingSteel.class)); - cards.add(new SetCardInfo("Scythe of the Wretched", 239, Rarity.RARE, mage.cards.s.ScytheOfTheWretched.class)); - cards.add(new SetCardInfo("Seat of the Synod", 283, Rarity.COMMON, mage.cards.s.SeatOfTheSynod.class)); - cards.add(new SetCardInfo("Second Sunrise", 20, Rarity.RARE, mage.cards.s.SecondSunrise.class)); - cards.add(new SetCardInfo("Seething Song", 104, Rarity.COMMON, mage.cards.s.SeethingSong.class)); - cards.add(new SetCardInfo("Serum Tank", 240, Rarity.UNCOMMON, mage.cards.s.SerumTank.class)); - cards.add(new SetCardInfo("Shared Fate", 49, Rarity.RARE, mage.cards.s.SharedFate.class)); - cards.add(new SetCardInfo("Shatter", 105, Rarity.COMMON, mage.cards.s.Shatter.class)); - cards.add(new SetCardInfo("Shrapnel Blast", 106, Rarity.UNCOMMON, mage.cards.s.ShrapnelBlast.class)); - cards.add(new SetCardInfo("Silver Myr", 241, Rarity.COMMON, mage.cards.s.SilverMyr.class)); - cards.add(new SetCardInfo("Skeleton Shard", 242, Rarity.UNCOMMON, mage.cards.s.SkeletonShard.class)); - cards.add(new SetCardInfo("Skyhunter Cub", 21, Rarity.COMMON, mage.cards.s.SkyhunterCub.class)); - cards.add(new SetCardInfo("Skyhunter Patrol", 22, Rarity.COMMON, mage.cards.s.SkyhunterPatrol.class)); - cards.add(new SetCardInfo("Slagwurm Armor", 243, Rarity.COMMON, mage.cards.s.SlagwurmArmor.class)); - cards.add(new SetCardInfo("Slith Ascendant", 23, Rarity.UNCOMMON, mage.cards.s.SlithAscendant.class)); - cards.add(new SetCardInfo("Slith Bloodletter", 77, Rarity.UNCOMMON, mage.cards.s.SlithBloodletter.class)); - cards.add(new SetCardInfo("Slith Firewalker", 107, Rarity.UNCOMMON, mage.cards.s.SlithFirewalker.class)); - cards.add(new SetCardInfo("Slith Predator", 129, Rarity.UNCOMMON, mage.cards.s.SlithPredator.class)); - cards.add(new SetCardInfo("Slith Strider", 50, Rarity.UNCOMMON, mage.cards.s.SlithStrider.class)); - cards.add(new SetCardInfo("Solar Tide", 24, Rarity.RARE, mage.cards.s.SolarTide.class)); - cards.add(new SetCardInfo("Soldier Replica", 244, Rarity.COMMON, mage.cards.s.SoldierReplica.class)); - cards.add(new SetCardInfo("Solemn Simulacrum", 245, Rarity.RARE, mage.cards.s.SolemnSimulacrum.class)); - cards.add(new SetCardInfo("Somber Hoverguard", 51, Rarity.COMMON, mage.cards.s.SomberHoverguard.class)); - cards.add(new SetCardInfo("Soul Foundry", 246, Rarity.RARE, mage.cards.s.SoulFoundry.class)); - cards.add(new SetCardInfo("Spellweaver Helix", 247, Rarity.RARE, mage.cards.s.SpellweaverHelix.class)); - cards.add(new SetCardInfo("Spikeshot Goblin", 108, Rarity.COMMON, mage.cards.s.SpikeshotGoblin.class)); - cards.add(new SetCardInfo("Spoils of the Vault", 78, Rarity.RARE, mage.cards.s.SpoilsOfTheVault.class)); - cards.add(new SetCardInfo("Stalking Stones", 284, Rarity.UNCOMMON, mage.cards.s.StalkingStones.class)); - cards.add(new SetCardInfo("Steel Wall", 248, Rarity.COMMON, mage.cards.s.SteelWall.class)); - cards.add(new SetCardInfo("Sunbeam Spellbomb", 250, Rarity.COMMON, mage.cards.s.SunbeamSpellbomb.class)); - cards.add(new SetCardInfo("Sun Droplet", 249, Rarity.UNCOMMON, mage.cards.s.SunDroplet.class)); - cards.add(new SetCardInfo("Swamp", 295, Rarity.LAND, mage.cards.basiclands.Swamp.class, new CardGraphicInfo(null, true))); - cards.add(new SetCardInfo("Swamp", 296, Rarity.LAND, mage.cards.basiclands.Swamp.class, new CardGraphicInfo(null, true))); - cards.add(new SetCardInfo("Swamp", 297, Rarity.LAND, mage.cards.basiclands.Swamp.class, new CardGraphicInfo(null, true))); - cards.add(new SetCardInfo("Swamp", 298, Rarity.LAND, mage.cards.basiclands.Swamp.class, new CardGraphicInfo(null, true))); - cards.add(new SetCardInfo("Sword of Kaldra", 251, Rarity.RARE, mage.cards.s.SwordOfKaldra.class)); - cards.add(new SetCardInfo("Sylvan Scrying", 130, Rarity.UNCOMMON, mage.cards.s.SylvanScrying.class)); - cards.add(new SetCardInfo("Synod Sanctum", 252, Rarity.UNCOMMON, mage.cards.s.SynodSanctum.class)); - cards.add(new SetCardInfo("Taj-Nar Swordsmith", 27, Rarity.UNCOMMON, mage.cards.t.TajNarSwordsmith.class)); - cards.add(new SetCardInfo("Talisman of Dominance", 253, Rarity.UNCOMMON, mage.cards.t.TalismanOfDominance.class)); - cards.add(new SetCardInfo("Talisman of Impulse", 254, Rarity.UNCOMMON, mage.cards.t.TalismanOfImpulse.class)); - cards.add(new SetCardInfo("Talisman of Indulgence", 255, Rarity.UNCOMMON, mage.cards.t.TalismanOfIndulgence.class)); - cards.add(new SetCardInfo("Talisman of Progress", 256, Rarity.UNCOMMON, mage.cards.t.TalismanOfProgress.class)); - cards.add(new SetCardInfo("Talisman of Unity", 257, Rarity.UNCOMMON, mage.cards.t.TalismanOfUnity.class)); - cards.add(new SetCardInfo("Tanglebloom", 258, Rarity.COMMON, mage.cards.t.Tanglebloom.class)); - cards.add(new SetCardInfo("Tangleroot", 259, Rarity.RARE, mage.cards.t.Tangleroot.class)); - cards.add(new SetCardInfo("Tel-Jilad Archers", 131, Rarity.COMMON, mage.cards.t.TelJiladArchers.class)); - cards.add(new SetCardInfo("Tel-Jilad Chosen", 132, Rarity.COMMON, mage.cards.t.TelJiladChosen.class)); - cards.add(new SetCardInfo("Tel-Jilad Exile", 133, Rarity.COMMON, mage.cards.t.TelJiladExile.class)); - cards.add(new SetCardInfo("Tel-Jilad Stylus", 260, Rarity.UNCOMMON, mage.cards.t.TelJiladStylus.class)); - cards.add(new SetCardInfo("Tempest of Light", 28, Rarity.UNCOMMON, mage.cards.t.TempestOfLight.class)); - cards.add(new SetCardInfo("Temporal Cascade", 52, Rarity.RARE, mage.cards.t.TemporalCascade.class)); - cards.add(new SetCardInfo("Terror", 79, Rarity.COMMON, mage.cards.t.Terror.class)); - cards.add(new SetCardInfo("Thirst for Knowledge", 53, Rarity.UNCOMMON, mage.cards.t.ThirstForKnowledge.class)); - cards.add(new SetCardInfo("Thoughtcast", 54, Rarity.COMMON, mage.cards.t.Thoughtcast.class)); - cards.add(new SetCardInfo("Thought Prison", 261, Rarity.UNCOMMON, mage.cards.t.ThoughtPrison.class)); - cards.add(new SetCardInfo("Timesifter", 262, Rarity.RARE, mage.cards.t.Timesifter.class)); - cards.add(new SetCardInfo("Titanium Golem", 263, Rarity.COMMON, mage.cards.t.TitaniumGolem.class)); - cards.add(new SetCardInfo("Tooth and Nail", 134, Rarity.RARE, mage.cards.t.ToothAndNail.class)); - cards.add(new SetCardInfo("Tooth of Chiss-Goria", 264, Rarity.COMMON, mage.cards.t.ToothOfChissGoria.class)); - cards.add(new SetCardInfo("Tower of Champions", 265, Rarity.RARE, mage.cards.t.TowerOfChampions.class)); - cards.add(new SetCardInfo("Tower of Eons", 266, Rarity.RARE, mage.cards.t.TowerOfEons.class)); - cards.add(new SetCardInfo("Tower of Fortunes", 267, Rarity.RARE, mage.cards.t.TowerOfFortunes.class)); - cards.add(new SetCardInfo("Tower of Murmurs", 268, Rarity.RARE, mage.cards.t.TowerOfMurmurs.class)); - cards.add(new SetCardInfo("Trash for Treasure", 109, Rarity.RARE, mage.cards.t.TrashForTreasure.class)); - cards.add(new SetCardInfo("Tree of Tales", 285, Rarity.COMMON, mage.cards.t.TreeOfTales.class)); - cards.add(new SetCardInfo("Triskelion", 269, Rarity.RARE, mage.cards.t.Triskelion.class)); - cards.add(new SetCardInfo("Troll Ascetic", 135, Rarity.RARE, mage.cards.t.TrollAscetic.class)); - cards.add(new SetCardInfo("Trolls of Tel-Jilad", 136, Rarity.UNCOMMON, mage.cards.t.TrollsOfTelJilad.class)); - cards.add(new SetCardInfo("Turn to Dust", 137, Rarity.COMMON, mage.cards.t.TurnToDust.class)); - cards.add(new SetCardInfo("Vault of Whispers", 286, Rarity.COMMON, mage.cards.v.VaultOfWhispers.class)); - cards.add(new SetCardInfo("Vedalken Archmage", 55, Rarity.RARE, mage.cards.v.VedalkenArchmage.class)); - cards.add(new SetCardInfo("Vermiculos", 80, Rarity.RARE, mage.cards.v.Vermiculos.class)); - cards.add(new SetCardInfo("Viridian Joiner", 138, Rarity.COMMON, mage.cards.v.ViridianJoiner.class)); - cards.add(new SetCardInfo("Viridian Longbow", 270, Rarity.COMMON, mage.cards.v.ViridianLongbow.class)); - cards.add(new SetCardInfo("Viridian Shaman", 139, Rarity.UNCOMMON, mage.cards.v.ViridianShaman.class)); - cards.add(new SetCardInfo("Vorrac Battlehorns", 271, Rarity.COMMON, mage.cards.v.VorracBattlehorns.class)); - cards.add(new SetCardInfo("Vulshok Battlegear", 272, Rarity.UNCOMMON, mage.cards.v.VulshokBattlegear.class)); - cards.add(new SetCardInfo("Vulshok Battlemaster", 110, Rarity.RARE, mage.cards.v.VulshokBattlemaster.class)); - cards.add(new SetCardInfo("Vulshok Berserker", 111, Rarity.COMMON, mage.cards.v.VulshokBerserker.class)); - cards.add(new SetCardInfo("Vulshok Gauntlets", 273, Rarity.COMMON, mage.cards.v.VulshokGauntlets.class)); - cards.add(new SetCardInfo("Wail of the Nim", 81, Rarity.COMMON, mage.cards.w.WailOfTheNim.class)); - cards.add(new SetCardInfo("Wall of Blood", 82, Rarity.UNCOMMON, mage.cards.w.WallOfBlood.class)); - cards.add(new SetCardInfo("Wanderguard Sentry", 56, Rarity.COMMON, mage.cards.w.WanderguardSentry.class)); - cards.add(new SetCardInfo("Welding Jar", 274, Rarity.COMMON, mage.cards.w.WeldingJar.class)); - cards.add(new SetCardInfo("Wizard Replica", 275, Rarity.COMMON, mage.cards.w.WizardReplica.class)); - cards.add(new SetCardInfo("Woebearer", 83, Rarity.UNCOMMON, mage.cards.w.Woebearer.class)); - cards.add(new SetCardInfo("Worldslayer", 276, Rarity.RARE, mage.cards.w.Worldslayer.class)); - cards.add(new SetCardInfo("Wrench Mind", 84, Rarity.COMMON, mage.cards.w.WrenchMind.class)); - cards.add(new SetCardInfo("Wurmskin Forger", 140, Rarity.COMMON, mage.cards.w.WurmskinForger.class)); - cards.add(new SetCardInfo("Yotian Soldier", 277, Rarity.COMMON, mage.cards.y.YotianSoldier.class)); - } -} +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.SetType; + +import mage.constants.Rarity; +import mage.cards.CardGraphicInfo; + +public class Mirrodin extends ExpansionSet { + private static final Mirrodin instance = new Mirrodin(); + + public static Mirrodin getInstance() { + return instance; + } + + private Mirrodin() { + super("Mirrodin", "MRD", ExpansionSet.buildDate(2003, 9, 2), SetType.EXPANSION); + this.blockName = "Mirrodin"; + this.hasBoosters = true; + this.numBoosterLands = 0; + this.numBoosterCommon = 11; + this.numBoosterUncommon = 3; + this.numBoosterRare = 1; + this.ratioBoosterMythic = 0; + cards.add(new SetCardInfo("Aether Spellbomb", 141, Rarity.COMMON, mage.cards.a.AetherSpellbomb.class)); + cards.add(new SetCardInfo("Alpha Myr", 142, Rarity.COMMON, mage.cards.a.AlphaMyr.class)); + cards.add(new SetCardInfo("Altar of Shadows", 143, Rarity.RARE, mage.cards.a.AltarOfShadows.class)); + cards.add(new SetCardInfo("Altar's Light", 1, Rarity.UNCOMMON, mage.cards.a.AltarsLight.class)); + cards.add(new SetCardInfo("Ancient Den", 278, Rarity.COMMON, mage.cards.a.AncientDen.class)); + cards.add(new SetCardInfo("Annul", 29, Rarity.COMMON, mage.cards.a.Annul.class)); + cards.add(new SetCardInfo("Arc-Slogger", 85, Rarity.RARE, mage.cards.a.ArcSlogger.class)); + cards.add(new SetCardInfo("Arrest", 2, Rarity.COMMON, mage.cards.a.Arrest.class)); + cards.add(new SetCardInfo("Assert Authority", 30, Rarity.UNCOMMON, mage.cards.a.AssertAuthority.class)); + cards.add(new SetCardInfo("Atog", 86, Rarity.UNCOMMON, mage.cards.a.Atog.class)); + cards.add(new SetCardInfo("Auriok Bladewarden", 3, Rarity.UNCOMMON, mage.cards.a.AuriokBladewarden.class)); + cards.add(new SetCardInfo("Auriok Steelshaper", 4, Rarity.RARE, mage.cards.a.AuriokSteelshaper.class)); + cards.add(new SetCardInfo("Auriok Transfixer", 5, Rarity.COMMON, mage.cards.a.AuriokTransfixer.class)); + cards.add(new SetCardInfo("Awe Strike", 6, Rarity.COMMON, mage.cards.a.AweStrike.class)); + cards.add(new SetCardInfo("Banshee's Blade", 144, Rarity.UNCOMMON, mage.cards.b.BansheesBlade.class)); + cards.add(new SetCardInfo("Barter in Blood", 57, Rarity.UNCOMMON, mage.cards.b.BarterInBlood.class)); + cards.add(new SetCardInfo("Battlegrowth", 113, Rarity.COMMON, mage.cards.b.Battlegrowth.class)); + cards.add(new SetCardInfo("Betrayal of Flesh", 58, Rarity.UNCOMMON, mage.cards.b.BetrayalOfFlesh.class)); + cards.add(new SetCardInfo("Blinding Beam", 7, Rarity.COMMON, mage.cards.b.BlindingBeam.class)); + cards.add(new SetCardInfo("Blinkmoth Urn", 145, Rarity.RARE, mage.cards.b.BlinkmothUrn.class)); + cards.add(new SetCardInfo("Blinkmoth Well", 279, Rarity.UNCOMMON, mage.cards.b.BlinkmothWell.class)); + cards.add(new SetCardInfo("Bloodscent", 114, Rarity.UNCOMMON, mage.cards.b.Bloodscent.class)); + cards.add(new SetCardInfo("Bonesplitter", 146, Rarity.COMMON, mage.cards.b.Bonesplitter.class)); + cards.add(new SetCardInfo("Bosh, Iron Golem", 147, Rarity.RARE, mage.cards.b.BoshIronGolem.class)); + cards.add(new SetCardInfo("Bottle Gnomes", 148, Rarity.UNCOMMON, mage.cards.b.BottleGnomes.class)); + cards.add(new SetCardInfo("Broodstar", 31, Rarity.RARE, mage.cards.b.Broodstar.class)); + cards.add(new SetCardInfo("Cathodion", 149, Rarity.UNCOMMON, mage.cards.c.Cathodion.class)); + cards.add(new SetCardInfo("Chalice of the Void", 150, Rarity.RARE, mage.cards.c.ChaliceOfTheVoid.class)); + cards.add(new SetCardInfo("Chimney Imp", 59, Rarity.COMMON, mage.cards.c.ChimneyImp.class)); + cards.add(new SetCardInfo("Chromatic Sphere", 151, Rarity.COMMON, mage.cards.c.ChromaticSphere.class)); + cards.add(new SetCardInfo("Chrome Mox", 152, Rarity.RARE, mage.cards.c.ChromeMox.class)); + cards.add(new SetCardInfo("Clockwork Beetle", 153, Rarity.COMMON, mage.cards.c.ClockworkBeetle.class)); + cards.add(new SetCardInfo("Clockwork Condor", 154, Rarity.COMMON, mage.cards.c.ClockworkCondor.class)); + cards.add(new SetCardInfo("Clockwork Dragon", 155, Rarity.RARE, mage.cards.c.ClockworkDragon.class)); + cards.add(new SetCardInfo("Clockwork Vorrac", 156, Rarity.UNCOMMON, mage.cards.c.ClockworkVorrac.class)); + cards.add(new SetCardInfo("Cloudpost", 280, Rarity.COMMON, mage.cards.c.Cloudpost.class)); + cards.add(new SetCardInfo("Cobalt Golem", 157, Rarity.COMMON, mage.cards.c.CobaltGolem.class)); + cards.add(new SetCardInfo("Confusion in the Ranks", 87, Rarity.RARE, mage.cards.c.ConfusionInTheRanks.class)); + cards.add(new SetCardInfo("Consume Spirit", 60, Rarity.COMMON, mage.cards.c.ConsumeSpirit.class)); + cards.add(new SetCardInfo("Contaminated Bond", 61, Rarity.COMMON, mage.cards.c.ContaminatedBond.class)); + cards.add(new SetCardInfo("Copperhoof Vorrac", 116, Rarity.RARE, mage.cards.c.CopperhoofVorrac.class)); + cards.add(new SetCardInfo("Copper Myr", 158, Rarity.COMMON, mage.cards.c.CopperMyr.class)); + cards.add(new SetCardInfo("Creeping Mold", 117, Rarity.UNCOMMON, mage.cards.c.CreepingMold.class)); + cards.add(new SetCardInfo("Crystal Shard", 159, Rarity.UNCOMMON, mage.cards.c.CrystalShard.class)); + cards.add(new SetCardInfo("Culling Scales", 160, Rarity.RARE, mage.cards.c.CullingScales.class)); + cards.add(new SetCardInfo("Damping Matrix", 161, Rarity.RARE, mage.cards.d.DampingMatrix.class)); + cards.add(new SetCardInfo("Deconstruct", 118, Rarity.COMMON, mage.cards.d.Deconstruct.class)); + cards.add(new SetCardInfo("Detonate", 88, Rarity.UNCOMMON, mage.cards.d.Detonate.class)); + cards.add(new SetCardInfo("Disarm", 32, Rarity.COMMON, mage.cards.d.Disarm.class)); + cards.add(new SetCardInfo("Disciple of the Vault", 62, Rarity.COMMON, mage.cards.d.DiscipleOfTheVault.class)); + cards.add(new SetCardInfo("Domineer", 33, Rarity.UNCOMMON, mage.cards.d.Domineer.class)); + cards.add(new SetCardInfo("Dragon Blood", 163, Rarity.UNCOMMON, mage.cards.d.DragonBlood.class)); + cards.add(new SetCardInfo("Dream's Grip", 34, Rarity.COMMON, mage.cards.d.DreamsGrip.class)); + cards.add(new SetCardInfo("Dross Harvester", 63, Rarity.RARE, mage.cards.d.DrossHarvester.class)); + cards.add(new SetCardInfo("Dross Prowler", 64, Rarity.COMMON, mage.cards.d.DrossProwler.class)); + cards.add(new SetCardInfo("Dross Scorpion", 164, Rarity.COMMON, mage.cards.d.DrossScorpion.class)); + cards.add(new SetCardInfo("Duplicant", 165, Rarity.RARE, mage.cards.d.Duplicant.class)); + cards.add(new SetCardInfo("Duskworker", 166, Rarity.UNCOMMON, mage.cards.d.Duskworker.class)); + cards.add(new SetCardInfo("Electrostatic Bolt", 89, Rarity.COMMON, mage.cards.e.ElectrostaticBolt.class)); + cards.add(new SetCardInfo("Elf Replica", 167, Rarity.COMMON, mage.cards.e.ElfReplica.class)); + cards.add(new SetCardInfo("Empyrial Plate", 168, Rarity.RARE, mage.cards.e.EmpyrialPlate.class)); + cards.add(new SetCardInfo("Extraplanar Lens", 169, Rarity.RARE, mage.cards.e.ExtraplanarLens.class)); + cards.add(new SetCardInfo("Fabricate", 35, Rarity.UNCOMMON, mage.cards.f.Fabricate.class)); + cards.add(new SetCardInfo("Fangren Hunter", 119, Rarity.COMMON, mage.cards.f.FangrenHunter.class)); + cards.add(new SetCardInfo("Farsight Mask", 170, Rarity.UNCOMMON, mage.cards.f.FarsightMask.class)); + cards.add(new SetCardInfo("Fatespinner", 36, Rarity.RARE, mage.cards.f.Fatespinner.class)); + cards.add(new SetCardInfo("Fiery Gambit", 90, Rarity.RARE, mage.cards.f.FieryGambit.class)); + cards.add(new SetCardInfo("Fireshrieker", 171, Rarity.UNCOMMON, mage.cards.f.Fireshrieker.class)); + cards.add(new SetCardInfo("Fists of the Anvil", 91, Rarity.COMMON, mage.cards.f.FistsOfTheAnvil.class)); + cards.add(new SetCardInfo("Forest", 303, Rarity.LAND, mage.cards.basiclands.Forest.class, new CardGraphicInfo(null, true))); + cards.add(new SetCardInfo("Forest", 304, Rarity.LAND, mage.cards.basiclands.Forest.class, new CardGraphicInfo(null, true))); + cards.add(new SetCardInfo("Forest", 305, Rarity.LAND, mage.cards.basiclands.Forest.class, new CardGraphicInfo(null, true))); + cards.add(new SetCardInfo("Forest", 306, Rarity.LAND, mage.cards.basiclands.Forest.class, new CardGraphicInfo(null, true))); + cards.add(new SetCardInfo("Forge Armor", 92, Rarity.UNCOMMON, mage.cards.f.ForgeArmor.class)); + cards.add(new SetCardInfo("Frogmite", 172, Rarity.COMMON, mage.cards.f.Frogmite.class)); + cards.add(new SetCardInfo("Galvanic Key", 173, Rarity.COMMON, mage.cards.g.GalvanicKey.class)); + cards.add(new SetCardInfo("Gate to the Aether", 174, Rarity.RARE, mage.cards.g.GateToTheAether.class)); + cards.add(new SetCardInfo("Gilded Lotus", 175, Rarity.RARE, mage.cards.g.GildedLotus.class)); + cards.add(new SetCardInfo("Glimmervoid", 281, Rarity.RARE, mage.cards.g.Glimmervoid.class)); + cards.add(new SetCardInfo("Glissa Sunseeker", 120, Rarity.RARE, mage.cards.g.GlissaSunseeker.class)); + cards.add(new SetCardInfo("Goblin Charbelcher", 176, Rarity.RARE, mage.cards.g.GoblinCharbelcher.class)); + cards.add(new SetCardInfo("Goblin Dirigible", 177, Rarity.UNCOMMON, mage.cards.g.GoblinDirigible.class)); + cards.add(new SetCardInfo("Goblin Replica", 178, Rarity.COMMON, mage.cards.g.GoblinReplica.class)); + cards.add(new SetCardInfo("Goblin Striker", 94, Rarity.COMMON, mage.cards.g.GoblinStriker.class)); + cards.add(new SetCardInfo("Goblin War Wagon", 179, Rarity.COMMON, mage.cards.g.GoblinWarWagon.class)); + cards.add(new SetCardInfo("Gold Myr", 180, Rarity.COMMON, mage.cards.g.GoldMyr.class)); + cards.add(new SetCardInfo("Golem-Skin Gauntlets", 181, Rarity.UNCOMMON, mage.cards.g.GolemSkinGauntlets.class)); + cards.add(new SetCardInfo("Grab the Reins", 95, Rarity.UNCOMMON, mage.cards.g.GrabTheReins.class)); + cards.add(new SetCardInfo("Granite Shard", 182, Rarity.UNCOMMON, mage.cards.g.GraniteShard.class)); + cards.add(new SetCardInfo("Great Furnace", 282, Rarity.COMMON, mage.cards.g.GreatFurnace.class)); + cards.add(new SetCardInfo("Grid Monitor", 183, Rarity.RARE, mage.cards.g.GridMonitor.class)); + cards.add(new SetCardInfo("Groffskithur", 121, Rarity.COMMON, mage.cards.g.Groffskithur.class)); + cards.add(new SetCardInfo("Heartwood Shard", 184, Rarity.UNCOMMON, mage.cards.h.HeartwoodShard.class)); + cards.add(new SetCardInfo("Hematite Golem", 185, Rarity.COMMON, mage.cards.h.HematiteGolem.class)); + cards.add(new SetCardInfo("Hum of the Radix", 122, Rarity.RARE, mage.cards.h.HumOfTheRadix.class)); + cards.add(new SetCardInfo("Icy Manipulator", 186, Rarity.UNCOMMON, mage.cards.i.IcyManipulator.class)); + cards.add(new SetCardInfo("Incite War", 96, Rarity.COMMON, mage.cards.i.InciteWar.class)); + cards.add(new SetCardInfo("Inertia Bubble", 37, Rarity.COMMON, mage.cards.i.InertiaBubble.class)); + cards.add(new SetCardInfo("Iron Myr", 187, Rarity.COMMON, mage.cards.i.IronMyr.class)); + cards.add(new SetCardInfo("Irradiate", 67, Rarity.COMMON, mage.cards.i.Irradiate.class)); + cards.add(new SetCardInfo("Island", 291, Rarity.LAND, mage.cards.basiclands.Island.class, new CardGraphicInfo(null, true))); + cards.add(new SetCardInfo("Island", 292, Rarity.LAND, mage.cards.basiclands.Island.class, new CardGraphicInfo(null, true))); + cards.add(new SetCardInfo("Island", 293, Rarity.LAND, mage.cards.basiclands.Island.class, new CardGraphicInfo(null, true))); + cards.add(new SetCardInfo("Island", 294, Rarity.LAND, mage.cards.basiclands.Island.class, new CardGraphicInfo(null, true))); + cards.add(new SetCardInfo("Isochron Scepter", 188, Rarity.UNCOMMON, mage.cards.i.IsochronScepter.class)); + cards.add(new SetCardInfo("Jinxed Choker", 189, Rarity.RARE, mage.cards.j.JinxedChoker.class)); + cards.add(new SetCardInfo("Journey of Discovery", 123, Rarity.COMMON, mage.cards.j.JourneyOfDiscovery.class)); + cards.add(new SetCardInfo("Krark-Clan Grunt", 97, Rarity.COMMON, mage.cards.k.KrarkClanGrunt.class)); + cards.add(new SetCardInfo("Krark-Clan Shaman", 98, Rarity.COMMON, mage.cards.k.KrarkClanShaman.class)); + cards.add(new SetCardInfo("Krark's Thumb", 190, Rarity.RARE, mage.cards.k.KrarksThumb.class)); + cards.add(new SetCardInfo("Leaden Myr", 191, Rarity.COMMON, mage.cards.l.LeadenMyr.class)); + cards.add(new SetCardInfo("Leonin Abunas", 8, Rarity.RARE, mage.cards.l.LeoninAbunas.class)); + cards.add(new SetCardInfo("Leonin Bladetrap", 192, Rarity.UNCOMMON, mage.cards.l.LeoninBladetrap.class)); + cards.add(new SetCardInfo("Leonin Den-Guard", 9, Rarity.COMMON, mage.cards.l.LeoninDenGuard.class)); + cards.add(new SetCardInfo("Leonin Elder", 10, Rarity.COMMON, mage.cards.l.LeoninElder.class)); + cards.add(new SetCardInfo("Leonin Scimitar", 193, Rarity.COMMON, mage.cards.l.LeoninScimitar.class)); + cards.add(new SetCardInfo("Leonin Skyhunter", 11, Rarity.UNCOMMON, mage.cards.l.LeoninSkyhunter.class)); + cards.add(new SetCardInfo("Leonin Sun Standard", 194, Rarity.RARE, mage.cards.l.LeoninSunStandard.class)); + cards.add(new SetCardInfo("Leveler", 195, Rarity.RARE, mage.cards.l.Leveler.class)); + cards.add(new SetCardInfo("Lifespark Spellbomb", 197, Rarity.COMMON, mage.cards.l.LifesparkSpellbomb.class)); + cards.add(new SetCardInfo("Lightning Coils", 198, Rarity.RARE, mage.cards.l.LightningCoils.class)); + cards.add(new SetCardInfo("Lightning Greaves", 199, Rarity.UNCOMMON, mage.cards.l.LightningGreaves.class)); + cards.add(new SetCardInfo("Living Hive", 124, Rarity.RARE, mage.cards.l.LivingHive.class)); + cards.add(new SetCardInfo("Lodestone Myr", 200, Rarity.RARE, mage.cards.l.LodestoneMyr.class)); + cards.add(new SetCardInfo("Looming Hoverguard", 38, Rarity.UNCOMMON, mage.cards.l.LoomingHoverguard.class)); + cards.add(new SetCardInfo("Loxodon Mender", 12, Rarity.COMMON, mage.cards.l.LoxodonMender.class)); + cards.add(new SetCardInfo("Loxodon Punisher", 14, Rarity.RARE, mage.cards.l.LoxodonPunisher.class)); + cards.add(new SetCardInfo("Loxodon Warhammer", 201, Rarity.UNCOMMON, mage.cards.l.LoxodonWarhammer.class)); + cards.add(new SetCardInfo("Lumengrid Sentinel", 40, Rarity.UNCOMMON, mage.cards.l.LumengridSentinel.class)); + cards.add(new SetCardInfo("Lumengrid Warden", 41, Rarity.COMMON, mage.cards.l.LumengridWarden.class)); + cards.add(new SetCardInfo("Luminous Angel", 15, Rarity.RARE, mage.cards.l.LuminousAngel.class)); + cards.add(new SetCardInfo("Malachite Golem", 202, Rarity.COMMON, mage.cards.m.MalachiteGolem.class)); + cards.add(new SetCardInfo("March of the Machines", 42, Rarity.RARE, mage.cards.m.MarchOfTheMachines.class)); + cards.add(new SetCardInfo("Mask of Memory", 203, Rarity.UNCOMMON, mage.cards.m.MaskOfMemory.class)); + cards.add(new SetCardInfo("Mass Hysteria", 99, Rarity.RARE, mage.cards.m.MassHysteria.class)); + cards.add(new SetCardInfo("Megatog", 100, Rarity.RARE, mage.cards.m.Megatog.class)); + cards.add(new SetCardInfo("Mesmeric Orb", 204, Rarity.RARE, mage.cards.m.MesmericOrb.class)); + cards.add(new SetCardInfo("Mind's Eye", 205, Rarity.RARE, mage.cards.m.MindsEye.class)); + cards.add(new SetCardInfo("Mindslaver", 206, Rarity.RARE, mage.cards.m.Mindslaver.class)); + cards.add(new SetCardInfo("Molder Slug", 125, Rarity.RARE, mage.cards.m.MolderSlug.class)); + cards.add(new SetCardInfo("Molten Rain", 101, Rarity.COMMON, mage.cards.m.MoltenRain.class)); + cards.add(new SetCardInfo("Moriok Scavenger", 68, Rarity.COMMON, mage.cards.m.MoriokScavenger.class)); + cards.add(new SetCardInfo("Mountain", 299, Rarity.LAND, mage.cards.basiclands.Mountain.class, new CardGraphicInfo(null, true))); + cards.add(new SetCardInfo("Mountain", 300, Rarity.LAND, mage.cards.basiclands.Mountain.class, new CardGraphicInfo(null, true))); + cards.add(new SetCardInfo("Mountain", 301, Rarity.LAND, mage.cards.basiclands.Mountain.class, new CardGraphicInfo(null, true))); + cards.add(new SetCardInfo("Mountain", 302, Rarity.LAND, mage.cards.basiclands.Mountain.class, new CardGraphicInfo(null, true))); + cards.add(new SetCardInfo("Myr Adapter", 210, Rarity.COMMON, mage.cards.m.MyrAdapter.class)); + cards.add(new SetCardInfo("Myr Enforcer", 211, Rarity.COMMON, mage.cards.m.MyrEnforcer.class)); + cards.add(new SetCardInfo("Myr Mindservant", 213, Rarity.UNCOMMON, mage.cards.m.MyrMindservant.class)); + cards.add(new SetCardInfo("Myr Retriever", 215, Rarity.UNCOMMON, mage.cards.m.MyrRetriever.class)); + cards.add(new SetCardInfo("Necrogen Mists", 69, Rarity.RARE, mage.cards.n.NecrogenMists.class)); + cards.add(new SetCardInfo("Necrogen Spellbomb", 216, Rarity.COMMON, mage.cards.n.NecrogenSpellbomb.class)); + cards.add(new SetCardInfo("Needlebug", 217, Rarity.UNCOMMON, mage.cards.n.Needlebug.class)); + cards.add(new SetCardInfo("Neurok Familiar", 43, Rarity.COMMON, mage.cards.n.NeurokFamiliar.class)); + cards.add(new SetCardInfo("Neurok Hoversail", 218, Rarity.COMMON, mage.cards.n.NeurokHoversail.class)); + cards.add(new SetCardInfo("Neurok Spy", 44, Rarity.COMMON, mage.cards.n.NeurokSpy.class)); + cards.add(new SetCardInfo("Nightmare Lash", 219, Rarity.RARE, mage.cards.n.NightmareLash.class)); + cards.add(new SetCardInfo("Nim Devourer", 70, Rarity.RARE, mage.cards.n.NimDevourer.class)); + cards.add(new SetCardInfo("Nim Lasher", 71, Rarity.COMMON, mage.cards.n.NimLasher.class)); + cards.add(new SetCardInfo("Nim Replica", 220, Rarity.COMMON, mage.cards.n.NimReplica.class)); + cards.add(new SetCardInfo("Nim Shambler", 72, Rarity.UNCOMMON, mage.cards.n.NimShambler.class)); + cards.add(new SetCardInfo("Nim Shrieker", 73, Rarity.COMMON, mage.cards.n.NimShrieker.class)); + cards.add(new SetCardInfo("Nuisance Engine", 221, Rarity.UNCOMMON, mage.cards.n.NuisanceEngine.class)); + cards.add(new SetCardInfo("Oblivion Stone", 222, Rarity.RARE, mage.cards.o.OblivionStone.class)); + cards.add(new SetCardInfo("Ogre Leadfoot", 102, Rarity.COMMON, mage.cards.o.OgreLeadfoot.class)); + cards.add(new SetCardInfo("Omega Myr", 223, Rarity.COMMON, mage.cards.o.OmegaMyr.class)); + cards.add(new SetCardInfo("One Dozen Eyes", 126, Rarity.UNCOMMON, mage.cards.o.OneDozenEyes.class)); + cards.add(new SetCardInfo("Ornithopter", 224, Rarity.UNCOMMON, mage.cards.o.Ornithopter.class)); + cards.add(new SetCardInfo("Override", 45, Rarity.COMMON, mage.cards.o.OverrideCard.class)); + cards.add(new SetCardInfo("Pearl Shard", 225, Rarity.UNCOMMON, mage.cards.p.PearlShard.class)); + cards.add(new SetCardInfo("Pentavus", 226, Rarity.RARE, mage.cards.p.Pentavus.class)); + cards.add(new SetCardInfo("Pewter Golem", 227, Rarity.COMMON, mage.cards.p.PewterGolem.class)); + cards.add(new SetCardInfo("Plains", 287, Rarity.LAND, mage.cards.basiclands.Plains.class, new CardGraphicInfo(null, true))); + cards.add(new SetCardInfo("Plains", 288, Rarity.LAND, mage.cards.basiclands.Plains.class, new CardGraphicInfo(null, true))); + cards.add(new SetCardInfo("Plains", 289, Rarity.LAND, mage.cards.basiclands.Plains.class, new CardGraphicInfo(null, true))); + cards.add(new SetCardInfo("Plains", 290, Rarity.LAND, mage.cards.basiclands.Plains.class, new CardGraphicInfo(null, true))); + cards.add(new SetCardInfo("Plated Slagwurm", 127, Rarity.RARE, mage.cards.p.PlatedSlagwurm.class)); + cards.add(new SetCardInfo("Platinum Angel", 228, Rarity.RARE, mage.cards.p.PlatinumAngel.class)); + cards.add(new SetCardInfo("Power Conduit", 229, Rarity.UNCOMMON, mage.cards.p.PowerConduit.class)); + cards.add(new SetCardInfo("Predator's Strike", 128, Rarity.COMMON, mage.cards.p.PredatorsStrike.class)); + cards.add(new SetCardInfo("Promise of Power", 74, Rarity.RARE, mage.cards.p.PromiseOfPower.class)); + cards.add(new SetCardInfo("Proteus Staff", 230, Rarity.RARE, mage.cards.p.ProteusStaff.class)); + cards.add(new SetCardInfo("Psychic Membrane", 46, Rarity.UNCOMMON, mage.cards.p.PsychicMembrane.class)); + cards.add(new SetCardInfo("Psychogenic Probe", 231, Rarity.RARE, mage.cards.p.PsychogenicProbe.class)); + cards.add(new SetCardInfo("Pyrite Spellbomb", 232, Rarity.COMMON, mage.cards.p.PyriteSpellbomb.class)); + cards.add(new SetCardInfo("Quicksilver Elemental", 47, Rarity.RARE, mage.cards.q.QuicksilverElemental.class)); + cards.add(new SetCardInfo("Raise the Alarm", 16, Rarity.COMMON, mage.cards.r.RaiseTheAlarm.class)); + cards.add(new SetCardInfo("Razor Barrier", 17, Rarity.COMMON, mage.cards.r.RazorBarrier.class)); + cards.add(new SetCardInfo("Regress", 48, Rarity.COMMON, mage.cards.r.Regress.class)); + cards.add(new SetCardInfo("Reiver Demon", 75, Rarity.RARE, mage.cards.r.ReiverDemon.class)); + cards.add(new SetCardInfo("Relic Bane", 76, Rarity.UNCOMMON, mage.cards.r.RelicBane.class)); + cards.add(new SetCardInfo("Roar of the Kha", 18, Rarity.UNCOMMON, mage.cards.r.RoarOfTheKha.class)); + cards.add(new SetCardInfo("Rule of Law", 19, Rarity.RARE, mage.cards.r.RuleOfLaw.class)); + cards.add(new SetCardInfo("Rust Elemental", 234, Rarity.UNCOMMON, mage.cards.r.RustElemental.class)); + cards.add(new SetCardInfo("Rustmouth Ogre", 103, Rarity.UNCOMMON, mage.cards.r.RustmouthOgre.class)); + cards.add(new SetCardInfo("Rustspore Ram", 235, Rarity.UNCOMMON, mage.cards.r.RustsporeRam.class)); + cards.add(new SetCardInfo("Scale of Chiss-Goria", 236, Rarity.COMMON, mage.cards.s.ScaleOfChissGoria.class)); + cards.add(new SetCardInfo("Scrabbling Claws", 237, Rarity.UNCOMMON, mage.cards.s.ScrabblingClaws.class)); + cards.add(new SetCardInfo("Sculpting Steel", 238, Rarity.RARE, mage.cards.s.SculptingSteel.class)); + cards.add(new SetCardInfo("Scythe of the Wretched", 239, Rarity.RARE, mage.cards.s.ScytheOfTheWretched.class)); + cards.add(new SetCardInfo("Seat of the Synod", 283, Rarity.COMMON, mage.cards.s.SeatOfTheSynod.class)); + cards.add(new SetCardInfo("Second Sunrise", 20, Rarity.RARE, mage.cards.s.SecondSunrise.class)); + cards.add(new SetCardInfo("Seething Song", 104, Rarity.COMMON, mage.cards.s.SeethingSong.class)); + cards.add(new SetCardInfo("Serum Tank", 240, Rarity.UNCOMMON, mage.cards.s.SerumTank.class)); + cards.add(new SetCardInfo("Shared Fate", 49, Rarity.RARE, mage.cards.s.SharedFate.class)); + cards.add(new SetCardInfo("Shatter", 105, Rarity.COMMON, mage.cards.s.Shatter.class)); + cards.add(new SetCardInfo("Shrapnel Blast", 106, Rarity.UNCOMMON, mage.cards.s.ShrapnelBlast.class)); + cards.add(new SetCardInfo("Silver Myr", 241, Rarity.COMMON, mage.cards.s.SilverMyr.class)); + cards.add(new SetCardInfo("Skeleton Shard", 242, Rarity.UNCOMMON, mage.cards.s.SkeletonShard.class)); + cards.add(new SetCardInfo("Skyhunter Cub", 21, Rarity.COMMON, mage.cards.s.SkyhunterCub.class)); + cards.add(new SetCardInfo("Skyhunter Patrol", 22, Rarity.COMMON, mage.cards.s.SkyhunterPatrol.class)); + cards.add(new SetCardInfo("Slagwurm Armor", 243, Rarity.COMMON, mage.cards.s.SlagwurmArmor.class)); + cards.add(new SetCardInfo("Slith Ascendant", 23, Rarity.UNCOMMON, mage.cards.s.SlithAscendant.class)); + cards.add(new SetCardInfo("Slith Bloodletter", 77, Rarity.UNCOMMON, mage.cards.s.SlithBloodletter.class)); + cards.add(new SetCardInfo("Slith Firewalker", 107, Rarity.UNCOMMON, mage.cards.s.SlithFirewalker.class)); + cards.add(new SetCardInfo("Slith Predator", 129, Rarity.UNCOMMON, mage.cards.s.SlithPredator.class)); + cards.add(new SetCardInfo("Slith Strider", 50, Rarity.UNCOMMON, mage.cards.s.SlithStrider.class)); + cards.add(new SetCardInfo("Solar Tide", 24, Rarity.RARE, mage.cards.s.SolarTide.class)); + cards.add(new SetCardInfo("Soldier Replica", 244, Rarity.COMMON, mage.cards.s.SoldierReplica.class)); + cards.add(new SetCardInfo("Solemn Simulacrum", 245, Rarity.RARE, mage.cards.s.SolemnSimulacrum.class)); + cards.add(new SetCardInfo("Somber Hoverguard", 51, Rarity.COMMON, mage.cards.s.SomberHoverguard.class)); + cards.add(new SetCardInfo("Soul Foundry", 246, Rarity.RARE, mage.cards.s.SoulFoundry.class)); + cards.add(new SetCardInfo("Spellweaver Helix", 247, Rarity.RARE, mage.cards.s.SpellweaverHelix.class)); + cards.add(new SetCardInfo("Spikeshot Goblin", 108, Rarity.COMMON, mage.cards.s.SpikeshotGoblin.class)); + cards.add(new SetCardInfo("Spoils of the Vault", 78, Rarity.RARE, mage.cards.s.SpoilsOfTheVault.class)); + cards.add(new SetCardInfo("Stalking Stones", 284, Rarity.UNCOMMON, mage.cards.s.StalkingStones.class)); + cards.add(new SetCardInfo("Steel Wall", 248, Rarity.COMMON, mage.cards.s.SteelWall.class)); + cards.add(new SetCardInfo("Sunbeam Spellbomb", 250, Rarity.COMMON, mage.cards.s.SunbeamSpellbomb.class)); + cards.add(new SetCardInfo("Sun Droplet", 249, Rarity.UNCOMMON, mage.cards.s.SunDroplet.class)); + cards.add(new SetCardInfo("Swamp", 295, Rarity.LAND, mage.cards.basiclands.Swamp.class, new CardGraphicInfo(null, true))); + cards.add(new SetCardInfo("Swamp", 296, Rarity.LAND, mage.cards.basiclands.Swamp.class, new CardGraphicInfo(null, true))); + cards.add(new SetCardInfo("Swamp", 297, Rarity.LAND, mage.cards.basiclands.Swamp.class, new CardGraphicInfo(null, true))); + cards.add(new SetCardInfo("Swamp", 298, Rarity.LAND, mage.cards.basiclands.Swamp.class, new CardGraphicInfo(null, true))); + cards.add(new SetCardInfo("Sword of Kaldra", 251, Rarity.RARE, mage.cards.s.SwordOfKaldra.class)); + cards.add(new SetCardInfo("Sylvan Scrying", 130, Rarity.UNCOMMON, mage.cards.s.SylvanScrying.class)); + cards.add(new SetCardInfo("Synod Sanctum", 252, Rarity.UNCOMMON, mage.cards.s.SynodSanctum.class)); + cards.add(new SetCardInfo("Taj-Nar Swordsmith", 27, Rarity.UNCOMMON, mage.cards.t.TajNarSwordsmith.class)); + cards.add(new SetCardInfo("Talisman of Dominance", 253, Rarity.UNCOMMON, mage.cards.t.TalismanOfDominance.class)); + cards.add(new SetCardInfo("Talisman of Impulse", 254, Rarity.UNCOMMON, mage.cards.t.TalismanOfImpulse.class)); + cards.add(new SetCardInfo("Talisman of Indulgence", 255, Rarity.UNCOMMON, mage.cards.t.TalismanOfIndulgence.class)); + cards.add(new SetCardInfo("Talisman of Progress", 256, Rarity.UNCOMMON, mage.cards.t.TalismanOfProgress.class)); + cards.add(new SetCardInfo("Talisman of Unity", 257, Rarity.UNCOMMON, mage.cards.t.TalismanOfUnity.class)); + cards.add(new SetCardInfo("Tanglebloom", 258, Rarity.COMMON, mage.cards.t.Tanglebloom.class)); + cards.add(new SetCardInfo("Tangleroot", 259, Rarity.RARE, mage.cards.t.Tangleroot.class)); + cards.add(new SetCardInfo("Tel-Jilad Archers", 131, Rarity.COMMON, mage.cards.t.TelJiladArchers.class)); + cards.add(new SetCardInfo("Tel-Jilad Chosen", 132, Rarity.COMMON, mage.cards.t.TelJiladChosen.class)); + cards.add(new SetCardInfo("Tel-Jilad Exile", 133, Rarity.COMMON, mage.cards.t.TelJiladExile.class)); + cards.add(new SetCardInfo("Tel-Jilad Stylus", 260, Rarity.UNCOMMON, mage.cards.t.TelJiladStylus.class)); + cards.add(new SetCardInfo("Tempest of Light", 28, Rarity.UNCOMMON, mage.cards.t.TempestOfLight.class)); + cards.add(new SetCardInfo("Temporal Cascade", 52, Rarity.RARE, mage.cards.t.TemporalCascade.class)); + cards.add(new SetCardInfo("Terror", 79, Rarity.COMMON, mage.cards.t.Terror.class)); + cards.add(new SetCardInfo("Thirst for Knowledge", 53, Rarity.UNCOMMON, mage.cards.t.ThirstForKnowledge.class)); + cards.add(new SetCardInfo("Thoughtcast", 54, Rarity.COMMON, mage.cards.t.Thoughtcast.class)); + cards.add(new SetCardInfo("Thought Prison", 261, Rarity.UNCOMMON, mage.cards.t.ThoughtPrison.class)); + cards.add(new SetCardInfo("Timesifter", 262, Rarity.RARE, mage.cards.t.Timesifter.class)); + cards.add(new SetCardInfo("Titanium Golem", 263, Rarity.COMMON, mage.cards.t.TitaniumGolem.class)); + cards.add(new SetCardInfo("Tooth and Nail", 134, Rarity.RARE, mage.cards.t.ToothAndNail.class)); + cards.add(new SetCardInfo("Tooth of Chiss-Goria", 264, Rarity.COMMON, mage.cards.t.ToothOfChissGoria.class)); + cards.add(new SetCardInfo("Tower of Champions", 265, Rarity.RARE, mage.cards.t.TowerOfChampions.class)); + cards.add(new SetCardInfo("Tower of Eons", 266, Rarity.RARE, mage.cards.t.TowerOfEons.class)); + cards.add(new SetCardInfo("Tower of Fortunes", 267, Rarity.RARE, mage.cards.t.TowerOfFortunes.class)); + cards.add(new SetCardInfo("Tower of Murmurs", 268, Rarity.RARE, mage.cards.t.TowerOfMurmurs.class)); + cards.add(new SetCardInfo("Trash for Treasure", 109, Rarity.RARE, mage.cards.t.TrashForTreasure.class)); + cards.add(new SetCardInfo("Tree of Tales", 285, Rarity.COMMON, mage.cards.t.TreeOfTales.class)); + cards.add(new SetCardInfo("Triskelion", 269, Rarity.RARE, mage.cards.t.Triskelion.class)); + cards.add(new SetCardInfo("Troll Ascetic", 135, Rarity.RARE, mage.cards.t.TrollAscetic.class)); + cards.add(new SetCardInfo("Trolls of Tel-Jilad", 136, Rarity.UNCOMMON, mage.cards.t.TrollsOfTelJilad.class)); + cards.add(new SetCardInfo("Turn to Dust", 137, Rarity.COMMON, mage.cards.t.TurnToDust.class)); + cards.add(new SetCardInfo("Vault of Whispers", 286, Rarity.COMMON, mage.cards.v.VaultOfWhispers.class)); + cards.add(new SetCardInfo("Vedalken Archmage", 55, Rarity.RARE, mage.cards.v.VedalkenArchmage.class)); + cards.add(new SetCardInfo("Vermiculos", 80, Rarity.RARE, mage.cards.v.Vermiculos.class)); + cards.add(new SetCardInfo("Viridian Joiner", 138, Rarity.COMMON, mage.cards.v.ViridianJoiner.class)); + cards.add(new SetCardInfo("Viridian Longbow", 270, Rarity.COMMON, mage.cards.v.ViridianLongbow.class)); + cards.add(new SetCardInfo("Viridian Shaman", 139, Rarity.UNCOMMON, mage.cards.v.ViridianShaman.class)); + cards.add(new SetCardInfo("Vorrac Battlehorns", 271, Rarity.COMMON, mage.cards.v.VorracBattlehorns.class)); + cards.add(new SetCardInfo("Vulshok Battlegear", 272, Rarity.UNCOMMON, mage.cards.v.VulshokBattlegear.class)); + cards.add(new SetCardInfo("Vulshok Battlemaster", 110, Rarity.RARE, mage.cards.v.VulshokBattlemaster.class)); + cards.add(new SetCardInfo("Vulshok Berserker", 111, Rarity.COMMON, mage.cards.v.VulshokBerserker.class)); + cards.add(new SetCardInfo("Vulshok Gauntlets", 273, Rarity.COMMON, mage.cards.v.VulshokGauntlets.class)); + cards.add(new SetCardInfo("Wail of the Nim", 81, Rarity.COMMON, mage.cards.w.WailOfTheNim.class)); + cards.add(new SetCardInfo("Wall of Blood", 82, Rarity.UNCOMMON, mage.cards.w.WallOfBlood.class)); + cards.add(new SetCardInfo("Wanderguard Sentry", 56, Rarity.COMMON, mage.cards.w.WanderguardSentry.class)); + cards.add(new SetCardInfo("Welding Jar", 274, Rarity.COMMON, mage.cards.w.WeldingJar.class)); + cards.add(new SetCardInfo("Wizard Replica", 275, Rarity.COMMON, mage.cards.w.WizardReplica.class)); + cards.add(new SetCardInfo("Woebearer", 83, Rarity.UNCOMMON, mage.cards.w.Woebearer.class)); + cards.add(new SetCardInfo("Worldslayer", 276, Rarity.RARE, mage.cards.w.Worldslayer.class)); + cards.add(new SetCardInfo("Wrench Mind", 84, Rarity.COMMON, mage.cards.w.WrenchMind.class)); + cards.add(new SetCardInfo("Wurmskin Forger", 140, Rarity.COMMON, mage.cards.w.WurmskinForger.class)); + cards.add(new SetCardInfo("Yotian Soldier", 277, Rarity.COMMON, mage.cards.y.YotianSoldier.class)); + } +} diff --git a/Mage/src/main/java/mage/abilities/common/BecomesBlockedByCreatureTriggeredAbility.java b/Mage/src/main/java/mage/abilities/common/BecomesBlockedByCreatureTriggeredAbility.java index ee2b42f7d0f..8fbb14821a3 100644 --- a/Mage/src/main/java/mage/abilities/common/BecomesBlockedByCreatureTriggeredAbility.java +++ b/Mage/src/main/java/mage/abilities/common/BecomesBlockedByCreatureTriggeredAbility.java @@ -79,7 +79,9 @@ public class BecomesBlockedByCreatureTriggeredAbility extends TriggeredAbilityIm @Override public String getRule() { - return "Whenever {this} becomes blocked by a " + filter.getMessage() + ", " + super.getRule(); + return "Whenever {this} becomes blocked by " + + (filter.getMessage().startsWith("an ") ? "" : "a ") + + filter.getMessage() + ", " + super.getRule(); } @Override From 107b83c231832ae815ef1146f0883579e18887d7 Mon Sep 17 00:00:00 2001 From: drmDev Date: Tue, 21 Mar 2017 19:57:21 -0400 Subject: [PATCH 7/7] fixes tapped and attacking cards. reverted firecat blitz. created issue for that one --- Mage.Sets/src/mage/cards/f/FirecatBlitz.java | 16 ++++++++++++++-- .../src/mage/cards/g/GeistOfSaintTraft.java | 2 +- .../src/mage/cards/i/InvocationOfSaintTraft.java | 2 +- .../src/mage/cards/k/KariZevSkyshipRaider.java | 2 +- 4 files changed, 17 insertions(+), 5 deletions(-) diff --git a/Mage.Sets/src/mage/cards/f/FirecatBlitz.java b/Mage.Sets/src/mage/cards/f/FirecatBlitz.java index 708b71d5c14..a9be479a0c0 100644 --- a/Mage.Sets/src/mage/cards/f/FirecatBlitz.java +++ b/Mage.Sets/src/mage/cards/f/FirecatBlitz.java @@ -30,12 +30,14 @@ package mage.cards.f; import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; +import mage.abilities.common.delayed.AtTheBeginOfNextEndStepDelayedTriggeredAbility; import mage.abilities.costs.Cost; import mage.abilities.costs.common.SacrificeTargetCost; import mage.abilities.costs.common.SacrificeXTargetCost; import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.common.CreateTokenEffect; +import mage.abilities.effects.common.ExileTargetEffect; import mage.abilities.keyword.FlashbackAbility; import mage.abilities.keyword.HasteAbility; import mage.cards.CardImpl; @@ -43,11 +45,14 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Outcome; import mage.constants.TimingRule; +import mage.constants.Zone; import mage.filter.common.FilterControlledLandPermanent; import mage.filter.predicate.mageobject.SubtypePredicate; import mage.game.Game; +import mage.game.permanent.Permanent; import mage.game.permanent.token.Token; import mage.players.Player; +import mage.target.targetpointer.FixedTarget; /** * @@ -111,7 +116,14 @@ class FirecatBlitzEffect extends OneShotEffect { } CreateTokenEffect effect = new CreateTokenEffect(new ElementalCatToken(), xValue); effect.apply(game, source); - effect.exileTokensCreatedAtNextEndStep(game, source); + for (UUID tokenId : effect.getLastAddedTokenIds()) { + Permanent tokenPermanent = game.getPermanent(tokenId); + if (tokenPermanent != null) { + ExileTargetEffect exileEffect = new ExileTargetEffect(null, "", Zone.BATTLEFIELD); + exileEffect.setTargetPointer(new FixedTarget(tokenPermanent, game)); + game.addDelayedTriggeredAbility(new AtTheBeginOfNextEndStepDelayedTriggeredAbility(exileEffect), source); + } + } return true; } @@ -131,4 +143,4 @@ class ElementalCatToken extends Token { power = new MageInt(1); toughness = new MageInt(1); } -} +} \ No newline at end of file diff --git a/Mage.Sets/src/mage/cards/g/GeistOfSaintTraft.java b/Mage.Sets/src/mage/cards/g/GeistOfSaintTraft.java index deb7333d844..956bea71f34 100644 --- a/Mage.Sets/src/mage/cards/g/GeistOfSaintTraft.java +++ b/Mage.Sets/src/mage/cards/g/GeistOfSaintTraft.java @@ -85,7 +85,7 @@ class GeistOfSaintTraftEffect extends OneShotEffect { @Override public boolean apply(Game game, Ability source) { - CreateTokenEffect effect = new CreateTokenEffect(new AngelToken()); + CreateTokenEffect effect = new CreateTokenEffect(new AngelToken(), 1, true, true); Player controller = game.getPlayer(source.getControllerId()); if (controller != null && effect.apply(game, source)) { diff --git a/Mage.Sets/src/mage/cards/i/InvocationOfSaintTraft.java b/Mage.Sets/src/mage/cards/i/InvocationOfSaintTraft.java index 0980fbb1724..e0c45d5e6e3 100644 --- a/Mage.Sets/src/mage/cards/i/InvocationOfSaintTraft.java +++ b/Mage.Sets/src/mage/cards/i/InvocationOfSaintTraft.java @@ -94,7 +94,7 @@ class InvocationOfSaintTraftEffect extends OneShotEffect { @Override public boolean apply(Game game, Ability source) { - CreateTokenEffect effect = new CreateTokenEffect(new AngelToken()); + CreateTokenEffect effect = new CreateTokenEffect(new AngelToken(), 1, true, true); Player controller = game.getPlayer(source.getControllerId()); if (controller != null && (effect.apply(game, source))) { effect.exileTokensCreatedAtNextEndStep(game, source); diff --git a/Mage.Sets/src/mage/cards/k/KariZevSkyshipRaider.java b/Mage.Sets/src/mage/cards/k/KariZevSkyshipRaider.java index 5117712f4b5..9883c36222b 100644 --- a/Mage.Sets/src/mage/cards/k/KariZevSkyshipRaider.java +++ b/Mage.Sets/src/mage/cards/k/KariZevSkyshipRaider.java @@ -91,7 +91,7 @@ class KariZevSkyshipRaiderEffect extends OneShotEffect { @Override public boolean apply(Game game, Ability source) { - CreateTokenEffect effect = new CreateTokenEffect(new RagavanToken()); + CreateTokenEffect effect = new CreateTokenEffect(new RagavanToken(), 1, true, true); Player controller = game.getPlayer(source.getControllerId()); if (controller != null && effect.apply(game, source)) { effect.exileTokensCreatedAtNextEndStep(game, source);