From 1674e00e70d33d2c218e99151c575fc4643ed3d8 Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Fri, 14 Oct 2016 10:55:15 +0200 Subject: [PATCH] Added Standard Bearer, Coalition Flag and Coalition Honor Guard. --- Mage.Sets/src/mage/cards/c/CoalitionFlag.java | 81 +++ .../src/mage/cards/s/StandardBearer.java | 66 ++ Mage.Sets/src/mage/sets/Apocalypse.java | 305 ++++----- Mage.Sets/src/mage/sets/EternalMasters.java | 619 +++++++++--------- .../ContinuousRuleModifyingEffectImpl.java | 2 +- ...getsHaveToTargetPermanentIfAbleEffect.java | 102 +++ .../main/java/mage/game/events/GameEvent.java | 7 + Mage/src/main/java/mage/target/Targets.java | 6 + 8 files changed, 727 insertions(+), 461 deletions(-) create mode 100644 Mage.Sets/src/mage/cards/c/CoalitionFlag.java create mode 100644 Mage.Sets/src/mage/cards/s/StandardBearer.java create mode 100644 Mage/src/main/java/mage/abilities/effects/common/ruleModifying/TargetsHaveToTargetPermanentIfAbleEffect.java diff --git a/Mage.Sets/src/mage/cards/c/CoalitionFlag.java b/Mage.Sets/src/mage/cards/c/CoalitionFlag.java new file mode 100644 index 0000000000..d4edb5ff74 --- /dev/null +++ b/Mage.Sets/src/mage/cards/c/CoalitionFlag.java @@ -0,0 +1,81 @@ +/* + * 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.c; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.effects.common.AttachEffect; +import mage.abilities.effects.common.continuous.SetCardSubtypeAttachedEffect; +import mage.abilities.effects.common.ruleModifying.TargetsHaveToTargetPermanentIfAbleEffect; +import mage.abilities.keyword.EnchantAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.AttachmentType; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Outcome; +import mage.constants.Zone; +import mage.filter.FilterPermanent; +import mage.target.TargetPermanent; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author LevelX2 + */ +public class CoalitionFlag extends CardImpl { + + public CoalitionFlag(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{W}"); + + this.subtype.add("Aura"); + + // Enchant creature you control + TargetPermanent auraTarget = new TargetCreaturePermanent(); + this.getSpellAbility().addTarget(auraTarget); + this.getSpellAbility().addEffect(new AttachEffect(Outcome.BoostCreature)); + Ability ability = new EnchantAbility(auraTarget.getTargetName()); + this.addAbility(ability); + + // Enchanted creature is a Flagbearer. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SetCardSubtypeAttachedEffect("Flagbearer", Duration.WhileOnBattlefield, AttachmentType.AURA))); + + // While choosing targets as part of casting a spell or activating an ability, your opponents must choose at least one Flagbearer on the battlefield if able. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new TargetsHaveToTargetPermanentIfAbleEffect(new FilterPermanent("Flagbearer", "one Flagbearer")))); + } + + public CoalitionFlag(final CoalitionFlag card) { + super(card); + } + + @Override + public CoalitionFlag copy() { + return new CoalitionFlag(this); + } +} diff --git a/Mage.Sets/src/mage/cards/s/StandardBearer.java b/Mage.Sets/src/mage/cards/s/StandardBearer.java new file mode 100644 index 0000000000..111bc6b1d6 --- /dev/null +++ b/Mage.Sets/src/mage/cards/s/StandardBearer.java @@ -0,0 +1,66 @@ +/* + * 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.s; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.effects.common.ruleModifying.TargetsHaveToTargetPermanentIfAbleEffect; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.Zone; +import mage.filter.FilterPermanent; + +/** + * + * @author LevelX2 + */ +public class StandardBearer extends CardImpl { + + public StandardBearer(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{W}"); + + this.subtype.add("Human"); + this.subtype.add("Flagbearer"); + this.power = new MageInt(1); + this.toughness = new MageInt(1); + + // While choosing targets as part of casting a spell or activating an ability, your opponents must choose at least one Flagbearer on the battlefield if able. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new TargetsHaveToTargetPermanentIfAbleEffect(new FilterPermanent("Flagbearer", "one Flagbearer")))); + } + + public StandardBearer(final StandardBearer card) { + super(card); + } + + @Override + public StandardBearer copy() { + return new StandardBearer(this); + } +} diff --git a/Mage.Sets/src/mage/sets/Apocalypse.java b/Mage.Sets/src/mage/sets/Apocalypse.java index ff3953f062..05e53cefb7 100644 --- a/Mage.Sets/src/mage/sets/Apocalypse.java +++ b/Mage.Sets/src/mage/sets/Apocalypse.java @@ -1,151 +1,154 @@ -package mage.sets; - -import java.util.GregorianCalendar; - -import mage.cards.ExpansionSet; -import mage.constants.SetType; -import mage.constants.Rarity; -import java.util.List; - -public class Apocalypse extends ExpansionSet { - private static final Apocalypse fINSTANCE = new Apocalypse(); - - public static Apocalypse getInstance() { - return fINSTANCE; - } - - private Apocalypse() { - super("Apocalypse", "APC", "mage.sets.apocalypse", ExpansionSet.buildDate(2001, 5, 1), SetType.EXPANSION); - this.blockName = "Invasion"; - this.parentSet = Invasion.getInstance(); - this.hasBasicLands = false; - this.hasBoosters = true; - this.numBoosterLands = 0; - this.numBoosterCommon = 11; - this.numBoosterUncommon = 3; - this.numBoosterRare = 1; - this.ratioBoosterMythic = 0; - cards.add(new SetCardInfo("Aether Mutation", 91, Rarity.UNCOMMON, mage.cards.a.AetherMutation.class)); - cards.add(new SetCardInfo("Ana Disciple", 73, Rarity.COMMON, mage.cards.a.AnaDisciple.class)); - cards.add(new SetCardInfo("Anavolver", 75, Rarity.RARE, mage.cards.a.Anavolver.class)); - cards.add(new SetCardInfo("Angelfire Crusader", 1, Rarity.COMMON, mage.cards.a.AngelfireCrusader.class)); - cards.add(new SetCardInfo("Battlefield Forge", 139, Rarity.RARE, mage.cards.b.BattlefieldForge.class)); - cards.add(new SetCardInfo("Bloodfire Colossus", 55, Rarity.RARE, mage.cards.b.BloodfireColossus.class)); - cards.add(new SetCardInfo("Bloodfire Dwarf", 56, Rarity.COMMON, mage.cards.b.BloodfireDwarf.class)); - cards.add(new SetCardInfo("Bloodfire Kavu", 58, Rarity.UNCOMMON, mage.cards.b.BloodfireKavu.class)); - cards.add(new SetCardInfo("Bog Gnarr", 76, Rarity.COMMON, mage.cards.b.BogGnarr.class)); - cards.add(new SetCardInfo("Brass Herald", 133, Rarity.UNCOMMON, mage.cards.b.BrassHerald.class)); - cards.add(new SetCardInfo("Caves of Koilos", 140, Rarity.RARE, mage.cards.c.CavesOfKoilos.class)); - cards.add(new SetCardInfo("Ceta Disciple", 19, Rarity.COMMON, mage.cards.c.CetaDisciple.class)); - cards.add(new SetCardInfo("Cetavolver", 21, Rarity.RARE, mage.cards.c.Cetavolver.class)); - cards.add(new SetCardInfo("Coastal Drake", 22, Rarity.COMMON, mage.cards.c.CoastalDrake.class)); - cards.add(new SetCardInfo("Consume Strength", 93, Rarity.COMMON, mage.cards.c.ConsumeStrength.class)); - cards.add(new SetCardInfo("Cromat", 94, Rarity.RARE, mage.cards.c.Cromat.class)); - cards.add(new SetCardInfo("Dead Ringers", 37, Rarity.COMMON, mage.cards.d.DeadRingers.class)); - cards.add(new SetCardInfo("Death Grasp", 95, Rarity.RARE, mage.cards.d.DeathGrasp.class)); - cards.add(new SetCardInfo("Death Mutation", 96, Rarity.UNCOMMON, mage.cards.d.DeathMutation.class)); - cards.add(new SetCardInfo("Dega Disciple", 4, Rarity.COMMON, mage.cards.d.DegaDisciple.class)); - cards.add(new SetCardInfo("Degavolver", 6, Rarity.RARE, mage.cards.d.Degavolver.class)); - cards.add(new SetCardInfo("Desolation Angel", 38, Rarity.RARE, mage.cards.d.DesolationAngel.class)); - cards.add(new SetCardInfo("Desolation Giant", 59, Rarity.RARE, mage.cards.d.DesolationGiant.class)); - cards.add(new SetCardInfo("Diversionary Tactics", 7, Rarity.UNCOMMON, mage.cards.d.DiversionaryTactics.class)); - cards.add(new SetCardInfo("Divine Light", 8, Rarity.COMMON, mage.cards.d.DivineLight.class)); - cards.add(new SetCardInfo("Dodecapod", 134, Rarity.UNCOMMON, mage.cards.d.Dodecapod.class)); - cards.add(new SetCardInfo("Dragon Arch", 135, Rarity.UNCOMMON, mage.cards.d.DragonArch.class)); - cards.add(new SetCardInfo("Dwarven Landslide", 60, Rarity.COMMON, mage.cards.d.DwarvenLandslide.class)); - cards.add(new SetCardInfo("Dwarven Patrol", 61, Rarity.UNCOMMON, mage.cards.d.DwarvenPatrol.class)); - cards.add(new SetCardInfo("Ebony Treefolk", 97, Rarity.UNCOMMON, mage.cards.e.EbonyTreefolk.class)); - cards.add(new SetCardInfo("Enlistment Officer", 9, Rarity.UNCOMMON, mage.cards.e.EnlistmentOfficer.class)); - cards.add(new SetCardInfo("Evasive Action", 23, Rarity.UNCOMMON, mage.cards.e.EvasiveAction.class)); - cards.add(new SetCardInfo("Fervent Charge", 98, Rarity.RARE, mage.cards.f.FerventCharge.class)); - cards.add(new SetCardInfo("Fire // Ice", 128, Rarity.UNCOMMON, mage.cards.f.FireIce.class)); - cards.add(new SetCardInfo("Flowstone Charger", 99, Rarity.UNCOMMON, mage.cards.f.FlowstoneCharger.class)); - cards.add(new SetCardInfo("Foul Presence", 39, Rarity.UNCOMMON, mage.cards.f.FoulPresence.class)); - cards.add(new SetCardInfo("Fungal Shambler", 100, Rarity.RARE, mage.cards.f.FungalShambler.class)); - cards.add(new SetCardInfo("Gaea's Skyfolk", 101, Rarity.COMMON, mage.cards.g.GaeasSkyfolk.class)); - cards.add(new SetCardInfo("Gerrard Capashen", 11, Rarity.RARE, mage.cards.g.GerrardCapashen.class)); - cards.add(new SetCardInfo("Gerrard's Verdict", 102, Rarity.UNCOMMON, mage.cards.g.GerrardsVerdict.class)); - cards.add(new SetCardInfo("Glade Gnarr", 78, Rarity.COMMON, mage.cards.g.GladeGnarr.class)); - cards.add(new SetCardInfo("Goblin Legionnaire", 103, Rarity.COMMON, mage.cards.g.GoblinLegionnaire.class)); - cards.add(new SetCardInfo("Goblin Ringleader", 62, Rarity.UNCOMMON, mage.cards.g.GoblinRingleader.class)); - cards.add(new SetCardInfo("Goblin Trenches", 104, Rarity.RARE, mage.cards.g.GoblinTrenches.class)); - cards.add(new SetCardInfo("Grave Defiler", 40, Rarity.UNCOMMON, mage.cards.g.GraveDefiler.class)); - cards.add(new SetCardInfo("Haunted Angel", 12, Rarity.UNCOMMON, mage.cards.h.HauntedAngel.class)); - cards.add(new SetCardInfo("Helionaut", 13, Rarity.COMMON, mage.cards.h.Helionaut.class)); - cards.add(new SetCardInfo("Illuminate", 63, Rarity.UNCOMMON, mage.cards.i.Illuminate.class)); - cards.add(new SetCardInfo("Illusion // Reality", 129, Rarity.UNCOMMON, mage.cards.i.IllusionReality.class)); - cards.add(new SetCardInfo("Index", 25, Rarity.COMMON, mage.cards.i.Index.class)); - cards.add(new SetCardInfo("Jilt", 27, Rarity.COMMON, mage.cards.j.Jilt.class)); - cards.add(new SetCardInfo("Jungle Barrier", 106, Rarity.UNCOMMON, mage.cards.j.JungleBarrier.class)); - cards.add(new SetCardInfo("Kavu Glider", 64, Rarity.COMMON, mage.cards.k.KavuGlider.class)); - cards.add(new SetCardInfo("Kavu Howler", 79, Rarity.UNCOMMON, mage.cards.k.KavuHowler.class)); - cards.add(new SetCardInfo("Kavu Mauler", 80, Rarity.RARE, mage.cards.k.KavuMauler.class)); - cards.add(new SetCardInfo("Last Caress", 41, Rarity.COMMON, mage.cards.l.LastCaress.class)); - cards.add(new SetCardInfo("Last Stand", 107, Rarity.RARE, mage.cards.l.LastStand.class)); - cards.add(new SetCardInfo("Lay of the Land", 81, Rarity.COMMON, mage.cards.l.LayOfTheLand.class)); - cards.add(new SetCardInfo("Legacy Weapon", 137, Rarity.RARE, mage.cards.l.LegacyWeapon.class)); - cards.add(new SetCardInfo("Life // Death", 130, Rarity.UNCOMMON, mage.cards.l.LifeDeath.class)); - cards.add(new SetCardInfo("Lightning Angel", 108, Rarity.RARE, mage.cards.l.LightningAngel.class)); - cards.add(new SetCardInfo("Living Airship", 28, Rarity.COMMON, mage.cards.l.LivingAirship.class)); - cards.add(new SetCardInfo("Llanowar Dead", 109, Rarity.COMMON, mage.cards.l.LlanowarDead.class)); - cards.add(new SetCardInfo("Llanowar Wastes", 141, Rarity.RARE, mage.cards.l.LlanowarWastes.class)); - cards.add(new SetCardInfo("Manacles of Decay", 14, Rarity.COMMON, mage.cards.m.ManaclesOfDecay.class)); - cards.add(new SetCardInfo("Martyrs' Tomb", 110, Rarity.UNCOMMON, mage.cards.m.MartyrsTomb.class)); - cards.add(new SetCardInfo("Mask of Intolerance", 138, Rarity.RARE, mage.cards.m.MaskOfIntolerance.class)); - cards.add(new SetCardInfo("Minotaur Illusionist", 111, Rarity.UNCOMMON, mage.cards.m.MinotaurIllusionist.class)); - cards.add(new SetCardInfo("Minotaur Tactician", 65, Rarity.COMMON, mage.cards.m.MinotaurTactician.class)); - cards.add(new SetCardInfo("Mournful Zombie", 43, Rarity.COMMON, mage.cards.m.MournfulZombie.class)); - cards.add(new SetCardInfo("Mystic Snake", 112, Rarity.RARE, mage.cards.m.MysticSnake.class)); - cards.add(new SetCardInfo("Necra Disciple", 44, Rarity.COMMON, mage.cards.n.NecraDisciple.class)); - cards.add(new SetCardInfo("Necravolver", 46, Rarity.RARE, mage.cards.n.Necravolver.class)); - cards.add(new SetCardInfo("Night // Day", 131, Rarity.UNCOMMON, mage.cards.n.NightDay.class)); - cards.add(new SetCardInfo("Order // Chaos", 132, Rarity.UNCOMMON, mage.cards.o.OrderChaos.class)); - cards.add(new SetCardInfo("Orim's Thunder", 15, Rarity.COMMON, mage.cards.o.OrimsThunder.class)); - cards.add(new SetCardInfo("Overgrown Estate", 113, Rarity.RARE, mage.cards.o.OvergrownEstate.class)); - cards.add(new SetCardInfo("Penumbra Bobcat", 82, Rarity.COMMON, mage.cards.p.PenumbraBobcat.class)); - cards.add(new SetCardInfo("Penumbra Kavu", 83, Rarity.UNCOMMON, mage.cards.p.PenumbraKavu.class)); - cards.add(new SetCardInfo("Penumbra Wurm", 84, Rarity.RARE, mage.cards.p.PenumbraWurm.class)); - cards.add(new SetCardInfo("Pernicious Deed", 114, Rarity.RARE, mage.cards.p.PerniciousDeed.class)); - cards.add(new SetCardInfo("Phyrexian Arena", 47, Rarity.RARE, mage.cards.p.PhyrexianArena.class)); - cards.add(new SetCardInfo("Phyrexian Gargantua", 48, Rarity.UNCOMMON, mage.cards.p.PhyrexianGargantua.class)); - cards.add(new SetCardInfo("Phyrexian Rager", 49, Rarity.COMMON, mage.cards.p.PhyrexianRager.class)); - cards.add(new SetCardInfo("Planar Despair", 50, Rarity.RARE, mage.cards.p.PlanarDespair.class)); - cards.add(new SetCardInfo("Prophetic Bolt", 116, Rarity.RARE, mage.cards.p.PropheticBolt.class)); - cards.add(new SetCardInfo("Putrid Warrior", 117, Rarity.COMMON, mage.cards.p.PutridWarrior.class)); - cards.add(new SetCardInfo("Quagmire Druid", 51, Rarity.COMMON, mage.cards.q.QuagmireDruid.class)); - cards.add(new SetCardInfo("Quicksilver Dagger", 118, Rarity.COMMON, mage.cards.q.QuicksilverDagger.class)); - cards.add(new SetCardInfo("Raka Disciple", 66, Rarity.COMMON, mage.cards.r.RakaDisciple.class)); - cards.add(new SetCardInfo("Rakavolver", 68, Rarity.RARE, mage.cards.r.Rakavolver.class)); - cards.add(new SetCardInfo("Razorfin Hunter", 119, Rarity.COMMON, mage.cards.r.RazorfinHunter.class)); - cards.add(new SetCardInfo("Reef Shaman", 29, Rarity.COMMON, mage.cards.r.ReefShaman.class)); - cards.add(new SetCardInfo("Savage Gorilla", 85, Rarity.COMMON, mage.cards.s.SavageGorilla.class)); - cards.add(new SetCardInfo("Shield of Duty and Reason", 16, Rarity.COMMON, mage.cards.s.ShieldOfDutyAndReason.class)); - cards.add(new SetCardInfo("Shimmering Mirage", 30, Rarity.COMMON, mage.cards.s.ShimmeringMirage.class)); - cards.add(new SetCardInfo("Shivan Reef", 142, Rarity.RARE, mage.cards.s.ShivanReef.class)); - cards.add(new SetCardInfo("Smash", 69, Rarity.COMMON, mage.cards.s.Smash.class)); - cards.add(new SetCardInfo("Soul Link", 120, Rarity.COMMON, mage.cards.s.SoulLink.class)); - cards.add(new SetCardInfo("Spectral Lynx", 17, Rarity.RARE, mage.cards.s.SpectralLynx.class)); - cards.add(new SetCardInfo("Spiritmonger", 121, Rarity.RARE, mage.cards.s.Spiritmonger.class)); - cards.add(new SetCardInfo("Squee's Embrace", 122, Rarity.COMMON, mage.cards.s.SqueesEmbrace.class)); - cards.add(new SetCardInfo("Squee's Revenge", 123, Rarity.UNCOMMON, mage.cards.s.SqueesRevenge.class)); - cards.add(new SetCardInfo("Strength of Night", 86, Rarity.COMMON, mage.cards.s.StrengthOfNight.class)); - cards.add(new SetCardInfo("Suffocating Blast", 124, Rarity.RARE, mage.cards.s.SuffocatingBlast.class)); - cards.add(new SetCardInfo("Sylvan Messenger", 87, Rarity.UNCOMMON, mage.cards.s.SylvanMessenger.class)); - cards.add(new SetCardInfo("Symbiotic Deployment", 88, Rarity.RARE, mage.cards.s.SymbioticDeployment.class)); - cards.add(new SetCardInfo("Temporal Spring", 125, Rarity.COMMON, mage.cards.t.TemporalSpring.class)); - cards.add(new SetCardInfo("Tidal Courier", 31, Rarity.UNCOMMON, mage.cards.t.TidalCourier.class)); - cards.add(new SetCardInfo("Tranquil Path", 89, Rarity.COMMON, mage.cards.t.TranquilPath.class)); - cards.add(new SetCardInfo("Tundra Kavu", 71, Rarity.COMMON, mage.cards.t.TundraKavu.class)); - cards.add(new SetCardInfo("Unnatural Selection", 32, Rarity.RARE, mage.cards.u.UnnaturalSelection.class)); - cards.add(new SetCardInfo("Urborg Elf", 90, Rarity.COMMON, mage.cards.u.UrborgElf.class)); - cards.add(new SetCardInfo("Urborg Uprising", 53, Rarity.COMMON, mage.cards.u.UrborgUprising.class)); - cards.add(new SetCardInfo("Vindicate", 126, Rarity.RARE, mage.cards.v.Vindicate.class)); - cards.add(new SetCardInfo("Vodalian Mystic", 33, Rarity.UNCOMMON, mage.cards.v.VodalianMystic.class)); - cards.add(new SetCardInfo("Whirlpool Drake", 34, Rarity.UNCOMMON, mage.cards.w.WhirlpoolDrake.class)); - cards.add(new SetCardInfo("Whirlpool Rider", 35, Rarity.COMMON, mage.cards.w.WhirlpoolRider.class)); - cards.add(new SetCardInfo("Whirlpool Warrior", 36, Rarity.RARE, mage.cards.w.WhirlpoolWarrior.class)); - cards.add(new SetCardInfo("Wild Research", 72, Rarity.RARE, mage.cards.w.WildResearch.class)); - cards.add(new SetCardInfo("Yavimaya Coast", 143, Rarity.RARE, mage.cards.y.YavimayaCoast.class)); - cards.add(new SetCardInfo("Yavimaya's Embrace", 127, Rarity.RARE, mage.cards.y.YavimayasEmbrace.class)); - } -} +package mage.sets; + +import java.util.GregorianCalendar; + +import mage.cards.ExpansionSet; +import mage.constants.SetType; +import mage.constants.Rarity; +import java.util.List; + +public class Apocalypse extends ExpansionSet { + private static final Apocalypse fINSTANCE = new Apocalypse(); + + public static Apocalypse getInstance() { + return fINSTANCE; + } + + private Apocalypse() { + super("Apocalypse", "APC", "mage.sets.apocalypse", ExpansionSet.buildDate(2001, 5, 1), SetType.EXPANSION); + this.blockName = "Invasion"; + this.parentSet = Invasion.getInstance(); + this.hasBasicLands = false; + this.hasBoosters = true; + this.numBoosterLands = 0; + this.numBoosterCommon = 11; + this.numBoosterUncommon = 3; + this.numBoosterRare = 1; + this.ratioBoosterMythic = 0; + cards.add(new SetCardInfo("Aether Mutation", 91, Rarity.UNCOMMON, mage.cards.a.AetherMutation.class)); + cards.add(new SetCardInfo("Ana Disciple", 73, Rarity.COMMON, mage.cards.a.AnaDisciple.class)); + cards.add(new SetCardInfo("Anavolver", 75, Rarity.RARE, mage.cards.a.Anavolver.class)); + cards.add(new SetCardInfo("Angelfire Crusader", 1, Rarity.COMMON, mage.cards.a.AngelfireCrusader.class)); + cards.add(new SetCardInfo("Battlefield Forge", 139, Rarity.RARE, mage.cards.b.BattlefieldForge.class)); + cards.add(new SetCardInfo("Bloodfire Colossus", 55, Rarity.RARE, mage.cards.b.BloodfireColossus.class)); + cards.add(new SetCardInfo("Bloodfire Dwarf", 56, Rarity.COMMON, mage.cards.b.BloodfireDwarf.class)); + cards.add(new SetCardInfo("Bloodfire Kavu", 58, Rarity.UNCOMMON, mage.cards.b.BloodfireKavu.class)); + cards.add(new SetCardInfo("Bog Gnarr", 76, Rarity.COMMON, mage.cards.b.BogGnarr.class)); + cards.add(new SetCardInfo("Brass Herald", 133, Rarity.UNCOMMON, mage.cards.b.BrassHerald.class)); + cards.add(new SetCardInfo("Caves of Koilos", 140, Rarity.RARE, mage.cards.c.CavesOfKoilos.class)); + cards.add(new SetCardInfo("Ceta Disciple", 19, Rarity.COMMON, mage.cards.c.CetaDisciple.class)); + cards.add(new SetCardInfo("Cetavolver", 21, Rarity.RARE, mage.cards.c.Cetavolver.class)); + cards.add(new SetCardInfo("Coalition Flag", 2, Rarity.UNCOMMON, mage.cards.c.CoalitionFlag.class)); + cards.add(new SetCardInfo("Coalition Honor Guard", 3, Rarity.COMMON, mage.cards.c.CoalitionHonorGuard.class)); + cards.add(new SetCardInfo("Coastal Drake", 22, Rarity.COMMON, mage.cards.c.CoastalDrake.class)); + cards.add(new SetCardInfo("Consume Strength", 93, Rarity.COMMON, mage.cards.c.ConsumeStrength.class)); + cards.add(new SetCardInfo("Cromat", 94, Rarity.RARE, mage.cards.c.Cromat.class)); + cards.add(new SetCardInfo("Dead Ringers", 37, Rarity.COMMON, mage.cards.d.DeadRingers.class)); + cards.add(new SetCardInfo("Death Grasp", 95, Rarity.RARE, mage.cards.d.DeathGrasp.class)); + cards.add(new SetCardInfo("Death Mutation", 96, Rarity.UNCOMMON, mage.cards.d.DeathMutation.class)); + cards.add(new SetCardInfo("Dega Disciple", 4, Rarity.COMMON, mage.cards.d.DegaDisciple.class)); + cards.add(new SetCardInfo("Degavolver", 6, Rarity.RARE, mage.cards.d.Degavolver.class)); + cards.add(new SetCardInfo("Desolation Angel", 38, Rarity.RARE, mage.cards.d.DesolationAngel.class)); + cards.add(new SetCardInfo("Desolation Giant", 59, Rarity.RARE, mage.cards.d.DesolationGiant.class)); + cards.add(new SetCardInfo("Diversionary Tactics", 7, Rarity.UNCOMMON, mage.cards.d.DiversionaryTactics.class)); + cards.add(new SetCardInfo("Divine Light", 8, Rarity.COMMON, mage.cards.d.DivineLight.class)); + cards.add(new SetCardInfo("Dodecapod", 134, Rarity.UNCOMMON, mage.cards.d.Dodecapod.class)); + cards.add(new SetCardInfo("Dragon Arch", 135, Rarity.UNCOMMON, mage.cards.d.DragonArch.class)); + cards.add(new SetCardInfo("Dwarven Landslide", 60, Rarity.COMMON, mage.cards.d.DwarvenLandslide.class)); + cards.add(new SetCardInfo("Dwarven Patrol", 61, Rarity.UNCOMMON, mage.cards.d.DwarvenPatrol.class)); + cards.add(new SetCardInfo("Ebony Treefolk", 97, Rarity.UNCOMMON, mage.cards.e.EbonyTreefolk.class)); + cards.add(new SetCardInfo("Enlistment Officer", 9, Rarity.UNCOMMON, mage.cards.e.EnlistmentOfficer.class)); + cards.add(new SetCardInfo("Evasive Action", 23, Rarity.UNCOMMON, mage.cards.e.EvasiveAction.class)); + cards.add(new SetCardInfo("Fervent Charge", 98, Rarity.RARE, mage.cards.f.FerventCharge.class)); + cards.add(new SetCardInfo("Fire // Ice", 128, Rarity.UNCOMMON, mage.cards.f.FireIce.class)); + cards.add(new SetCardInfo("Flowstone Charger", 99, Rarity.UNCOMMON, mage.cards.f.FlowstoneCharger.class)); + cards.add(new SetCardInfo("Foul Presence", 39, Rarity.UNCOMMON, mage.cards.f.FoulPresence.class)); + cards.add(new SetCardInfo("Fungal Shambler", 100, Rarity.RARE, mage.cards.f.FungalShambler.class)); + cards.add(new SetCardInfo("Gaea's Skyfolk", 101, Rarity.COMMON, mage.cards.g.GaeasSkyfolk.class)); + cards.add(new SetCardInfo("Gerrard Capashen", 11, Rarity.RARE, mage.cards.g.GerrardCapashen.class)); + cards.add(new SetCardInfo("Gerrard's Verdict", 102, Rarity.UNCOMMON, mage.cards.g.GerrardsVerdict.class)); + cards.add(new SetCardInfo("Glade Gnarr", 78, Rarity.COMMON, mage.cards.g.GladeGnarr.class)); + cards.add(new SetCardInfo("Goblin Legionnaire", 103, Rarity.COMMON, mage.cards.g.GoblinLegionnaire.class)); + cards.add(new SetCardInfo("Goblin Ringleader", 62, Rarity.UNCOMMON, mage.cards.g.GoblinRingleader.class)); + cards.add(new SetCardInfo("Goblin Trenches", 104, Rarity.RARE, mage.cards.g.GoblinTrenches.class)); + cards.add(new SetCardInfo("Grave Defiler", 40, Rarity.UNCOMMON, mage.cards.g.GraveDefiler.class)); + cards.add(new SetCardInfo("Haunted Angel", 12, Rarity.UNCOMMON, mage.cards.h.HauntedAngel.class)); + cards.add(new SetCardInfo("Helionaut", 13, Rarity.COMMON, mage.cards.h.Helionaut.class)); + cards.add(new SetCardInfo("Illuminate", 63, Rarity.UNCOMMON, mage.cards.i.Illuminate.class)); + cards.add(new SetCardInfo("Illusion // Reality", 129, Rarity.UNCOMMON, mage.cards.i.IllusionReality.class)); + cards.add(new SetCardInfo("Index", 25, Rarity.COMMON, mage.cards.i.Index.class)); + cards.add(new SetCardInfo("Jilt", 27, Rarity.COMMON, mage.cards.j.Jilt.class)); + cards.add(new SetCardInfo("Jungle Barrier", 106, Rarity.UNCOMMON, mage.cards.j.JungleBarrier.class)); + cards.add(new SetCardInfo("Kavu Glider", 64, Rarity.COMMON, mage.cards.k.KavuGlider.class)); + cards.add(new SetCardInfo("Kavu Howler", 79, Rarity.UNCOMMON, mage.cards.k.KavuHowler.class)); + cards.add(new SetCardInfo("Kavu Mauler", 80, Rarity.RARE, mage.cards.k.KavuMauler.class)); + cards.add(new SetCardInfo("Last Caress", 41, Rarity.COMMON, mage.cards.l.LastCaress.class)); + cards.add(new SetCardInfo("Last Stand", 107, Rarity.RARE, mage.cards.l.LastStand.class)); + cards.add(new SetCardInfo("Lay of the Land", 81, Rarity.COMMON, mage.cards.l.LayOfTheLand.class)); + cards.add(new SetCardInfo("Legacy Weapon", 137, Rarity.RARE, mage.cards.l.LegacyWeapon.class)); + cards.add(new SetCardInfo("Life // Death", 130, Rarity.UNCOMMON, mage.cards.l.LifeDeath.class)); + cards.add(new SetCardInfo("Lightning Angel", 108, Rarity.RARE, mage.cards.l.LightningAngel.class)); + cards.add(new SetCardInfo("Living Airship", 28, Rarity.COMMON, mage.cards.l.LivingAirship.class)); + cards.add(new SetCardInfo("Llanowar Dead", 109, Rarity.COMMON, mage.cards.l.LlanowarDead.class)); + cards.add(new SetCardInfo("Llanowar Wastes", 141, Rarity.RARE, mage.cards.l.LlanowarWastes.class)); + cards.add(new SetCardInfo("Manacles of Decay", 14, Rarity.COMMON, mage.cards.m.ManaclesOfDecay.class)); + cards.add(new SetCardInfo("Martyrs' Tomb", 110, Rarity.UNCOMMON, mage.cards.m.MartyrsTomb.class)); + cards.add(new SetCardInfo("Mask of Intolerance", 138, Rarity.RARE, mage.cards.m.MaskOfIntolerance.class)); + cards.add(new SetCardInfo("Minotaur Illusionist", 111, Rarity.UNCOMMON, mage.cards.m.MinotaurIllusionist.class)); + cards.add(new SetCardInfo("Minotaur Tactician", 65, Rarity.COMMON, mage.cards.m.MinotaurTactician.class)); + cards.add(new SetCardInfo("Mournful Zombie", 43, Rarity.COMMON, mage.cards.m.MournfulZombie.class)); + cards.add(new SetCardInfo("Mystic Snake", 112, Rarity.RARE, mage.cards.m.MysticSnake.class)); + cards.add(new SetCardInfo("Necra Disciple", 44, Rarity.COMMON, mage.cards.n.NecraDisciple.class)); + cards.add(new SetCardInfo("Necravolver", 46, Rarity.RARE, mage.cards.n.Necravolver.class)); + cards.add(new SetCardInfo("Night // Day", 131, Rarity.UNCOMMON, mage.cards.n.NightDay.class)); + cards.add(new SetCardInfo("Order // Chaos", 132, Rarity.UNCOMMON, mage.cards.o.OrderChaos.class)); + cards.add(new SetCardInfo("Orim's Thunder", 15, Rarity.COMMON, mage.cards.o.OrimsThunder.class)); + cards.add(new SetCardInfo("Overgrown Estate", 113, Rarity.RARE, mage.cards.o.OvergrownEstate.class)); + cards.add(new SetCardInfo("Penumbra Bobcat", 82, Rarity.COMMON, mage.cards.p.PenumbraBobcat.class)); + cards.add(new SetCardInfo("Penumbra Kavu", 83, Rarity.UNCOMMON, mage.cards.p.PenumbraKavu.class)); + cards.add(new SetCardInfo("Penumbra Wurm", 84, Rarity.RARE, mage.cards.p.PenumbraWurm.class)); + cards.add(new SetCardInfo("Pernicious Deed", 114, Rarity.RARE, mage.cards.p.PerniciousDeed.class)); + cards.add(new SetCardInfo("Phyrexian Arena", 47, Rarity.RARE, mage.cards.p.PhyrexianArena.class)); + cards.add(new SetCardInfo("Phyrexian Gargantua", 48, Rarity.UNCOMMON, mage.cards.p.PhyrexianGargantua.class)); + cards.add(new SetCardInfo("Phyrexian Rager", 49, Rarity.COMMON, mage.cards.p.PhyrexianRager.class)); + cards.add(new SetCardInfo("Planar Despair", 50, Rarity.RARE, mage.cards.p.PlanarDespair.class)); + cards.add(new SetCardInfo("Prophetic Bolt", 116, Rarity.RARE, mage.cards.p.PropheticBolt.class)); + cards.add(new SetCardInfo("Putrid Warrior", 117, Rarity.COMMON, mage.cards.p.PutridWarrior.class)); + cards.add(new SetCardInfo("Quagmire Druid", 51, Rarity.COMMON, mage.cards.q.QuagmireDruid.class)); + cards.add(new SetCardInfo("Quicksilver Dagger", 118, Rarity.COMMON, mage.cards.q.QuicksilverDagger.class)); + cards.add(new SetCardInfo("Raka Disciple", 66, Rarity.COMMON, mage.cards.r.RakaDisciple.class)); + cards.add(new SetCardInfo("Rakavolver", 68, Rarity.RARE, mage.cards.r.Rakavolver.class)); + cards.add(new SetCardInfo("Razorfin Hunter", 119, Rarity.COMMON, mage.cards.r.RazorfinHunter.class)); + cards.add(new SetCardInfo("Reef Shaman", 29, Rarity.COMMON, mage.cards.r.ReefShaman.class)); + cards.add(new SetCardInfo("Savage Gorilla", 85, Rarity.COMMON, mage.cards.s.SavageGorilla.class)); + cards.add(new SetCardInfo("Shield of Duty and Reason", 16, Rarity.COMMON, mage.cards.s.ShieldOfDutyAndReason.class)); + cards.add(new SetCardInfo("Shimmering Mirage", 30, Rarity.COMMON, mage.cards.s.ShimmeringMirage.class)); + cards.add(new SetCardInfo("Shivan Reef", 142, Rarity.RARE, mage.cards.s.ShivanReef.class)); + cards.add(new SetCardInfo("Smash", 69, Rarity.COMMON, mage.cards.s.Smash.class)); + cards.add(new SetCardInfo("Soul Link", 120, Rarity.COMMON, mage.cards.s.SoulLink.class)); + cards.add(new SetCardInfo("Spectral Lynx", 17, Rarity.RARE, mage.cards.s.SpectralLynx.class)); + cards.add(new SetCardInfo("Spiritmonger", 121, Rarity.RARE, mage.cards.s.Spiritmonger.class)); + cards.add(new SetCardInfo("Squee's Embrace", 122, Rarity.COMMON, mage.cards.s.SqueesEmbrace.class)); + cards.add(new SetCardInfo("Squee's Revenge", 123, Rarity.UNCOMMON, mage.cards.s.SqueesRevenge.class)); + cards.add(new SetCardInfo("Standard Bearer", 18, Rarity.COMMON, mage.cards.s.StandardBearer.class)); + cards.add(new SetCardInfo("Strength of Night", 86, Rarity.COMMON, mage.cards.s.StrengthOfNight.class)); + cards.add(new SetCardInfo("Suffocating Blast", 124, Rarity.RARE, mage.cards.s.SuffocatingBlast.class)); + cards.add(new SetCardInfo("Sylvan Messenger", 87, Rarity.UNCOMMON, mage.cards.s.SylvanMessenger.class)); + cards.add(new SetCardInfo("Symbiotic Deployment", 88, Rarity.RARE, mage.cards.s.SymbioticDeployment.class)); + cards.add(new SetCardInfo("Temporal Spring", 125, Rarity.COMMON, mage.cards.t.TemporalSpring.class)); + cards.add(new SetCardInfo("Tidal Courier", 31, Rarity.UNCOMMON, mage.cards.t.TidalCourier.class)); + cards.add(new SetCardInfo("Tranquil Path", 89, Rarity.COMMON, mage.cards.t.TranquilPath.class)); + cards.add(new SetCardInfo("Tundra Kavu", 71, Rarity.COMMON, mage.cards.t.TundraKavu.class)); + cards.add(new SetCardInfo("Unnatural Selection", 32, Rarity.RARE, mage.cards.u.UnnaturalSelection.class)); + cards.add(new SetCardInfo("Urborg Elf", 90, Rarity.COMMON, mage.cards.u.UrborgElf.class)); + cards.add(new SetCardInfo("Urborg Uprising", 53, Rarity.COMMON, mage.cards.u.UrborgUprising.class)); + cards.add(new SetCardInfo("Vindicate", 126, Rarity.RARE, mage.cards.v.Vindicate.class)); + cards.add(new SetCardInfo("Vodalian Mystic", 33, Rarity.UNCOMMON, mage.cards.v.VodalianMystic.class)); + cards.add(new SetCardInfo("Whirlpool Drake", 34, Rarity.UNCOMMON, mage.cards.w.WhirlpoolDrake.class)); + cards.add(new SetCardInfo("Whirlpool Rider", 35, Rarity.COMMON, mage.cards.w.WhirlpoolRider.class)); + cards.add(new SetCardInfo("Whirlpool Warrior", 36, Rarity.RARE, mage.cards.w.WhirlpoolWarrior.class)); + cards.add(new SetCardInfo("Wild Research", 72, Rarity.RARE, mage.cards.w.WildResearch.class)); + cards.add(new SetCardInfo("Yavimaya Coast", 143, Rarity.RARE, mage.cards.y.YavimayaCoast.class)); + cards.add(new SetCardInfo("Yavimaya's Embrace", 127, Rarity.RARE, mage.cards.y.YavimayasEmbrace.class)); + } +} diff --git a/Mage.Sets/src/mage/sets/EternalMasters.java b/Mage.Sets/src/mage/sets/EternalMasters.java index ab40673dac..a9ecd5e4f5 100644 --- a/Mage.Sets/src/mage/sets/EternalMasters.java +++ b/Mage.Sets/src/mage/sets/EternalMasters.java @@ -1,309 +1,310 @@ -/* -* 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.sets; - -import java.util.GregorianCalendar; -import mage.cards.ExpansionSet; -import mage.constants.SetType; -import mage.constants.Rarity; -import java.util.List; - -/** - * - * @author fireshoes - */ -public class EternalMasters extends ExpansionSet { - - private static final EternalMasters fINSTANCE = new EternalMasters(); - - public static EternalMasters getInstance() { - return fINSTANCE; - } - - private EternalMasters() { - super("Eternal Masters", "EMA", "mage.sets.eternalmasters", ExpansionSet.buildDate(2016, 6, 10), SetType.SUPPLEMENTAL); - this.blockName = "Reprint"; - this.hasBasicLands = false; - this.hasBoosters = true; - this.numBoosterLands = 0; - this.numBoosterCommon = 11; - this.numBoosterUncommon = 3; - this.numBoosterRare = 1; - this.ratioBoosterMythic = 8; - cards.add(new SetCardInfo("Abundant Growth", 156, Rarity.COMMON, mage.cards.a.AbundantGrowth.class)); - cards.add(new SetCardInfo("Ancestral Mask", 157, Rarity.UNCOMMON, mage.cards.a.AncestralMask.class)); - cards.add(new SetCardInfo("Animate Dead", 78, Rarity.UNCOMMON, mage.cards.a.AnimateDead.class)); - cards.add(new SetCardInfo("Annihilate", 79, Rarity.UNCOMMON, mage.cards.a.Annihilate.class)); - cards.add(new SetCardInfo("Arcanis the Omnipotent", 39, Rarity.RARE, mage.cards.a.ArcanisTheOmnipotent.class)); - cards.add(new SetCardInfo("Argothian Enchantress", 158, Rarity.MYTHIC, mage.cards.a.ArgothianEnchantress.class)); - cards.add(new SetCardInfo("Armadillo Cloak", 195, Rarity.UNCOMMON, mage.cards.a.ArmadilloCloak.class)); - cards.add(new SetCardInfo("Ashnod's Altar", 218, Rarity.UNCOMMON, mage.cards.a.AshnodsAltar.class)); - cards.add(new SetCardInfo("Avarax", 117, Rarity.COMMON, mage.cards.a.Avarax.class)); - cards.add(new SetCardInfo("Aven Riftwatcher", 1, Rarity.COMMON, mage.cards.a.AvenRiftwatcher.class)); - cards.add(new SetCardInfo("Balance", 2, Rarity.MYTHIC, mage.cards.b.Balance.class)); - cards.add(new SetCardInfo("Baleful Strix", 196, Rarity.RARE, mage.cards.b.BalefulStrix.class)); - cards.add(new SetCardInfo("Ballynock Cohort", 3, Rarity.COMMON, mage.cards.b.BallynockCohort.class)); - cards.add(new SetCardInfo("Battle Squadron", 118, Rarity.UNCOMMON, mage.cards.b.BattleSquadron.class)); - cards.add(new SetCardInfo("Beetleback Chief", 119, Rarity.UNCOMMON, mage.cards.b.BeetlebackChief.class)); - cards.add(new SetCardInfo("Benevolent Bodyguard", 4, Rarity.COMMON, mage.cards.b.BenevolentBodyguard.class)); - cards.add(new SetCardInfo("Blightsoil Druid", 80, Rarity.COMMON, mage.cards.b.BlightsoilDruid.class)); - cards.add(new SetCardInfo("Blood Artist", 81, Rarity.UNCOMMON, mage.cards.b.BloodArtist.class)); - cards.add(new SetCardInfo("Bloodbraid Elf", 197, Rarity.UNCOMMON, mage.cards.b.BloodbraidElf.class)); - cards.add(new SetCardInfo("Bloodfell Caves", 236, Rarity.COMMON, mage.cards.b.BloodfellCaves.class)); - cards.add(new SetCardInfo("Blossoming Sands", 237, Rarity.COMMON, mage.cards.b.BlossomingSands.class)); - cards.add(new SetCardInfo("Borderland Marauder", 120, Rarity.COMMON, mage.cards.b.BorderlandMarauder.class)); - cards.add(new SetCardInfo("Brago, King Eternal", 198, Rarity.RARE, mage.cards.b.BragoKingEternal.class)); - cards.add(new SetCardInfo("Braids, Cabal Minion", 82, Rarity.RARE, mage.cards.b.BraidsCabalMinion.class)); - cards.add(new SetCardInfo("Brainstorm", 40, Rarity.UNCOMMON, mage.cards.b.Brainstorm.class)); - cards.add(new SetCardInfo("Brawn", 159, Rarity.UNCOMMON, mage.cards.b.Brawn.class)); - cards.add(new SetCardInfo("Burning Vengeance", 121, Rarity.UNCOMMON, mage.cards.b.BurningVengeance.class)); - cards.add(new SetCardInfo("Cabal Therapy", 83, Rarity.UNCOMMON, mage.cards.c.CabalTherapy.class)); - cards.add(new SetCardInfo("Calciderm", 5, Rarity.UNCOMMON, mage.cards.c.Calciderm.class)); - cards.add(new SetCardInfo("Call the Skybreaker", 214, Rarity.RARE, mage.cards.c.CallTheSkybreaker.class)); - cards.add(new SetCardInfo("Carbonize", 122, Rarity.COMMON, mage.cards.c.Carbonize.class)); - cards.add(new SetCardInfo("Carrion Feeder", 84, Rarity.COMMON, mage.cards.c.CarrionFeeder.class)); - cards.add(new SetCardInfo("Centaur Chieftain", 160, Rarity.UNCOMMON, mage.cards.c.CentaurChieftain.class)); - cards.add(new SetCardInfo("Cephalid Sage", 41, Rarity.COMMON, mage.cards.c.CephalidSage.class)); - cards.add(new SetCardInfo("Chain Lightning", 123, Rarity.UNCOMMON, mage.cards.c.ChainLightning.class)); - cards.add(new SetCardInfo("Chrome Mox", 219, Rarity.MYTHIC, mage.cards.c.ChromeMox.class)); - cards.add(new SetCardInfo("Civic Wayfinder", 161, Rarity.COMMON, mage.cards.c.CivicWayfinder.class)); - cards.add(new SetCardInfo("Commune with the Gods", 162, Rarity.COMMON, mage.cards.c.CommuneWithTheGods.class)); - cards.add(new SetCardInfo("Control Magic", 42, Rarity.RARE, mage.cards.c.ControlMagic.class)); - cards.add(new SetCardInfo("Counterspell", 43, Rarity.COMMON, mage.cards.c.Counterspell.class)); - cards.add(new SetCardInfo("Crater Hellion", 124, Rarity.RARE, mage.cards.c.CraterHellion.class)); - cards.add(new SetCardInfo("Dack Fayden", 199, Rarity.MYTHIC, mage.cards.d.DackFayden.class)); - cards.add(new SetCardInfo("Daze", 44, Rarity.UNCOMMON, mage.cards.d.Daze.class)); - cards.add(new SetCardInfo("Deadbridge Shaman", 85, Rarity.COMMON, mage.cards.d.DeadbridgeShaman.class)); - cards.add(new SetCardInfo("Deathrite Shaman", 215, Rarity.RARE, mage.cards.d.DeathriteShaman.class)); - cards.add(new SetCardInfo("Deep Analysis", 45, Rarity.COMMON, mage.cards.d.DeepAnalysis.class)); - cards.add(new SetCardInfo("Desperate Ravings", 125, Rarity.COMMON, mage.cards.d.DesperateRavings.class)); - cards.add(new SetCardInfo("Diminishing Returns", 46, Rarity.RARE, mage.cards.d.DiminishingReturns.class)); - cards.add(new SetCardInfo("Dismal Backwater", 238, Rarity.COMMON, mage.cards.d.DismalBackwater.class)); - cards.add(new SetCardInfo("Dragon Egg", 126, Rarity.COMMON, mage.cards.d.DragonEgg.class)); - cards.add(new SetCardInfo("Dream Twist", 47, Rarity.COMMON, mage.cards.d.DreamTwist.class)); - cards.add(new SetCardInfo("Dualcaster Mage", 127, Rarity.RARE, mage.cards.d.DualcasterMage.class)); - cards.add(new SetCardInfo("Duplicant", 220, Rarity.RARE, mage.cards.d.Duplicant.class)); - cards.add(new SetCardInfo("Duress", 86, Rarity.COMMON, mage.cards.d.Duress.class)); - cards.add(new SetCardInfo("Eight-and-a-Half-Tails", 7, Rarity.RARE, mage.cards.e.EightAndAHalfTails.class)); - cards.add(new SetCardInfo("Elephant Guide", 163, Rarity.COMMON, mage.cards.e.ElephantGuide.class)); - cards.add(new SetCardInfo("Elite Vanguard", 8, Rarity.COMMON, mage.cards.e.EliteVanguard.class)); - cards.add(new SetCardInfo("Elvish Vanguard", 164, Rarity.COMMON, mage.cards.e.ElvishVanguard.class)); - cards.add(new SetCardInfo("Emmessi Tome", 221, Rarity.UNCOMMON, mage.cards.e.EmmessiTome.class)); - cards.add(new SetCardInfo("Emperor Crocodile", 165, Rarity.COMMON, mage.cards.e.EmperorCrocodile.class)); - cards.add(new SetCardInfo("Enlightened Tutor", 9, Rarity.RARE, mage.cards.e.EnlightenedTutor.class)); - cards.add(new SetCardInfo("Entomb", 87, Rarity.RARE, mage.cards.e.Entomb.class)); - cards.add(new SetCardInfo("Extract from Darkness", 200, Rarity.UNCOMMON, mage.cards.e.ExtractFromDarkness.class)); - cards.add(new SetCardInfo("Eyeblight's Ending", 88, Rarity.COMMON, mage.cards.e.EyeblightsEnding.class)); - cards.add(new SetCardInfo("Fact or Fiction", 48, Rarity.UNCOMMON, mage.cards.f.FactOrFiction.class)); - cards.add(new SetCardInfo("Faithless Looting", 128, Rarity.COMMON, mage.cards.f.FaithlessLooting.class)); - cards.add(new SetCardInfo("Faith's Fetters", 10, Rarity.UNCOMMON, mage.cards.f.FaithsFetters.class)); - cards.add(new SetCardInfo("Fervent Cathar", 129, Rarity.COMMON, mage.cards.f.FerventCathar.class)); - cards.add(new SetCardInfo("Field of Souls", 11, Rarity.UNCOMMON, mage.cards.f.FieldOfSouls.class)); - cards.add(new SetCardInfo("Firebolt", 130, Rarity.COMMON, mage.cards.f.Firebolt.class)); - cards.add(new SetCardInfo("Flame Jab", 131, Rarity.UNCOMMON, mage.cards.f.FlameJab.class)); - cards.add(new SetCardInfo("Flame-Kin Zealot", 201, Rarity.UNCOMMON, mage.cards.f.FlameKinZealot.class)); - cards.add(new SetCardInfo("Flinthoof Boar", 166, Rarity.UNCOMMON, mage.cards.f.FlinthoofBoar.class)); - cards.add(new SetCardInfo("Fog", 167, Rarity.COMMON, mage.cards.f.Fog.class)); - cards.add(new SetCardInfo("Force of Will", 49, Rarity.MYTHIC, mage.cards.f.ForceOfWill.class)); - cards.add(new SetCardInfo("Future Sight", 50, Rarity.RARE, mage.cards.f.FutureSight.class)); - cards.add(new SetCardInfo("Gaea's Blessing", 168, Rarity.UNCOMMON, mage.cards.g.GaeasBlessing.class)); - cards.add(new SetCardInfo("Gamble", 132, Rarity.RARE, mage.cards.g.Gamble.class)); - cards.add(new SetCardInfo("Gaseous Form", 51, Rarity.COMMON, mage.cards.g.GaseousForm.class)); - cards.add(new SetCardInfo("Ghitu Slinger", 133, Rarity.UNCOMMON, mage.cards.g.GhituSlinger.class)); - cards.add(new SetCardInfo("Giant Solifuge", 216, Rarity.RARE, mage.cards.g.GiantSolifuge.class)); - cards.add(new SetCardInfo("Giant Tortoise", 52, Rarity.COMMON, mage.cards.g.GiantTortoise.class)); - cards.add(new SetCardInfo("Glacial Wall", 53, Rarity.COMMON, mage.cards.g.GlacialWall.class)); - cards.add(new SetCardInfo("Glare of Subdual", 202, Rarity.RARE, mage.cards.g.GlareOfSubdual.class)); - cards.add(new SetCardInfo("Glimmerpoint Stag", 12, Rarity.UNCOMMON, mage.cards.g.GlimmerpointStag.class)); - cards.add(new SetCardInfo("Goblin Charbelcher", 222, Rarity.RARE, mage.cards.g.GoblinCharbelcher.class)); - cards.add(new SetCardInfo("Goblin Trenches", 203, Rarity.RARE, mage.cards.g.GoblinTrenches.class)); - cards.add(new SetCardInfo("Gravedigger", 89, Rarity.COMMON, mage.cards.g.Gravedigger.class)); - cards.add(new SetCardInfo("Green Sun's Zenith", 169, Rarity.RARE, mage.cards.g.GreenSunsZenith.class)); - cards.add(new SetCardInfo("Harmonize", 170, Rarity.UNCOMMON, mage.cards.h.Harmonize.class)); - cards.add(new SetCardInfo("Havoc Demon", 90, Rarity.UNCOMMON, mage.cards.h.HavocDemon.class)); - cards.add(new SetCardInfo("Heritage Druid", 171, Rarity.RARE, mage.cards.h.HeritageDruid.class)); - cards.add(new SetCardInfo("Honden of Cleansing Fire", 13, Rarity.UNCOMMON, mage.cards.h.HondenOfCleansingFire.class)); - cards.add(new SetCardInfo("Honden of Infinite Rage", 134, Rarity.UNCOMMON, mage.cards.h.HondenOfInfiniteRage.class)); - cards.add(new SetCardInfo("Honden of Life's Web", 172, Rarity.UNCOMMON, mage.cards.h.HondenOfLifesWeb.class)); - cards.add(new SetCardInfo("Honden of Night's Reach", 91, Rarity.UNCOMMON, mage.cards.h.HondenOfNightsReach.class)); - cards.add(new SetCardInfo("Honden of Seeing Winds", 54, Rarity.UNCOMMON, mage.cards.h.HondenOfSeeingWinds.class)); - cards.add(new SetCardInfo("Humble", 14, Rarity.COMMON, mage.cards.h.Humble.class)); - cards.add(new SetCardInfo("Hydroblast", 55, Rarity.UNCOMMON, mage.cards.h.Hydroblast.class)); - cards.add(new SetCardInfo("Hymn to Tourach", 92, Rarity.UNCOMMON, mage.cards.h.HymnToTourach1.class)); - cards.add(new SetCardInfo("Ichorid", 93, Rarity.RARE, mage.cards.i.Ichorid.class)); - cards.add(new SetCardInfo("Imperious Perfect", 173, Rarity.RARE, mage.cards.i.ImperiousPerfect.class)); - cards.add(new SetCardInfo("Inkwell Leviathan", 56, Rarity.RARE, mage.cards.i.InkwellLeviathan.class)); - cards.add(new SetCardInfo("Innocent Blood", 94, Rarity.COMMON, mage.cards.i.InnocentBlood.class)); - cards.add(new SetCardInfo("Intangible Virtue", 15, Rarity.UNCOMMON, mage.cards.i.IntangibleVirtue.class)); - cards.add(new SetCardInfo("Invigorate", 174, Rarity.UNCOMMON, mage.cards.i.Invigorate.class)); - cards.add(new SetCardInfo("Isochron Scepter", 223, Rarity.RARE, mage.cards.i.IsochronScepter.class)); - cards.add(new SetCardInfo("Jace, the Mind Sculptor", 57, Rarity.MYTHIC, mage.cards.j.JaceTheMindSculptor.class)); - cards.add(new SetCardInfo("Jareth, Leonine Titan", 16, Rarity.RARE, mage.cards.j.JarethLeonineTitan.class)); - cards.add(new SetCardInfo("Jetting Glasskite", 58, Rarity.UNCOMMON, mage.cards.j.JettingGlasskite.class)); - cards.add(new SetCardInfo("Juggernaut", 224, Rarity.UNCOMMON, mage.cards.j.Juggernaut.class)); - cards.add(new SetCardInfo("Jungle Hollow", 239, Rarity.COMMON, mage.cards.j.JungleHollow.class)); - cards.add(new SetCardInfo("Karakas", 240, Rarity.MYTHIC, mage.cards.k.Karakas.class)); - cards.add(new SetCardInfo("Karmic Guide", 17, Rarity.RARE, mage.cards.k.KarmicGuide.class)); - cards.add(new SetCardInfo("Keldon Champion", 135, Rarity.UNCOMMON, mage.cards.k.KeldonChampion.class)); - cards.add(new SetCardInfo("Keldon Marauders", 136, Rarity.COMMON, mage.cards.k.KeldonMarauders.class)); - cards.add(new SetCardInfo("Kird Ape", 137, Rarity.COMMON, mage.cards.k.KirdApe.class)); - cards.add(new SetCardInfo("Kor Hookmaster", 18, Rarity.COMMON, mage.cards.k.KorHookmaster.class)); - cards.add(new SetCardInfo("Llanowar Elves", 175, Rarity.COMMON, mage.cards.l.LlanowarElves.class)); - cards.add(new SetCardInfo("Lys Alana Huntmaster", 176, Rarity.COMMON, mage.cards.l.LysAlanaHuntmaster.class)); - cards.add(new SetCardInfo("Lys Alana Scarblade", 95, Rarity.UNCOMMON, mage.cards.l.LysAlanaScarblade.class)); - cards.add(new SetCardInfo("Maelstrom Wanderer", 204, Rarity.MYTHIC, mage.cards.m.MaelstromWanderer.class)); - cards.add(new SetCardInfo("Malicious Affliction", 96, Rarity.RARE, mage.cards.m.MaliciousAffliction.class)); - cards.add(new SetCardInfo("Mana Crypt", 225, Rarity.MYTHIC, mage.cards.m.ManaCrypt.class)); - cards.add(new SetCardInfo("Man-o'-War", 59, Rarity.COMMON, mage.cards.m.ManOWar.class)); - cards.add(new SetCardInfo("Maze of Ith", 241, Rarity.RARE, mage.cards.m.MazeOfIth.class)); - cards.add(new SetCardInfo("Memory Lapse", 60, Rarity.COMMON, mage.cards.m.MemoryLapse.class)); - cards.add(new SetCardInfo("Merfolk Looter", 61, Rarity.UNCOMMON, mage.cards.m.MerfolkLooter.class)); - cards.add(new SetCardInfo("Mesa Enchantress", 19, Rarity.UNCOMMON, mage.cards.m.MesaEnchantress.class)); - cards.add(new SetCardInfo("Millikin", 226, Rarity.UNCOMMON, mage.cards.m.Millikin.class)); - cards.add(new SetCardInfo("Mindless Automaton", 227, Rarity.UNCOMMON, mage.cards.m.MindlessAutomaton.class)); - cards.add(new SetCardInfo("Mishra's Factory", 242, Rarity.UNCOMMON, mage.cards.m.MishrasFactory.class)); - cards.add(new SetCardInfo("Mistral Charger", 20, Rarity.COMMON, mage.cards.m.MistralCharger.class)); - cards.add(new SetCardInfo("Mogg Fanatic", 138, Rarity.COMMON, mage.cards.m.MoggFanatic.class)); - cards.add(new SetCardInfo("Mogg War Marshal", 139, Rarity.COMMON, mage.cards.m.MoggWarMarshal.class)); - cards.add(new SetCardInfo("Monk Idealist", 21, Rarity.COMMON, mage.cards.m.MonkIdealist.class)); - cards.add(new SetCardInfo("Mother of Runes", 22, Rarity.RARE, mage.cards.m.MotherOfRunes.class)); - cards.add(new SetCardInfo("Mystical Tutor", 62, Rarity.RARE, mage.cards.m.MysticalTutor.class)); - cards.add(new SetCardInfo("Natural Order", 177, Rarity.MYTHIC, mage.cards.n.NaturalOrder.class)); - cards.add(new SetCardInfo("Nature's Claim", 178, Rarity.COMMON, mage.cards.n.NaturesClaim.class)); - cards.add(new SetCardInfo("Nausea", 97, Rarity.COMMON, mage.cards.n.Nausea.class)); - cards.add(new SetCardInfo("Necropotence", 98, Rarity.MYTHIC, mage.cards.n.Necropotence.class)); - cards.add(new SetCardInfo("Nekrataal", 99, Rarity.UNCOMMON, mage.cards.n.Nekrataal.class)); - cards.add(new SetCardInfo("Nevinyrral's Disk", 228, Rarity.RARE, mage.cards.n.NevinyrralsDisk.class)); - cards.add(new SetCardInfo("Night's Whisper", 100, Rarity.COMMON, mage.cards.n.NightsWhisper.class)); - cards.add(new SetCardInfo("Nimble Mongoose", 179, Rarity.COMMON, mage.cards.n.NimbleMongoose.class)); - cards.add(new SetCardInfo("Oona's Grace", 63, Rarity.COMMON, mage.cards.o.OonasGrace.class)); - cards.add(new SetCardInfo("Orcish Oriflamme", 140, Rarity.COMMON, mage.cards.o.OrcishOriflamme.class)); - cards.add(new SetCardInfo("Pacifism", 23, Rarity.COMMON, mage.cards.p.Pacifism.class)); - cards.add(new SetCardInfo("Peregrine Drake", 64, Rarity.COMMON, mage.cards.p.PeregrineDrake.class)); - cards.add(new SetCardInfo("Phantom Monster", 65, Rarity.COMMON, mage.cards.p.PhantomMonster.class)); - cards.add(new SetCardInfo("Phyrexian Gargantua", 101, Rarity.UNCOMMON, mage.cards.p.PhyrexianGargantua.class)); - cards.add(new SetCardInfo("Phyrexian Ingester", 66, Rarity.UNCOMMON, mage.cards.p.PhyrexianIngester.class)); - cards.add(new SetCardInfo("Phyrexian Rager", 102, Rarity.COMMON, mage.cards.p.PhyrexianRager.class)); - cards.add(new SetCardInfo("Pilgrim's Eye", 229, Rarity.COMMON, mage.cards.p.PilgrimsEye.class)); - cards.add(new SetCardInfo("Plague Witch", 103, Rarity.COMMON, mage.cards.p.PlagueWitch.class)); - cards.add(new SetCardInfo("Price of Progress", 141, Rarity.UNCOMMON, mage.cards.p.PriceOfProgress.class)); - cards.add(new SetCardInfo("Prismatic Lens", 230, Rarity.UNCOMMON, mage.cards.p.PrismaticLens.class)); - cards.add(new SetCardInfo("Prodigal Sorcerer", 67, Rarity.UNCOMMON, mage.cards.p.ProdigalSorcerer.class)); - cards.add(new SetCardInfo("Prowling Pangolin", 104, Rarity.COMMON, mage.cards.p.ProwlingPangolin.class)); - cards.add(new SetCardInfo("Pyroblast", 142, Rarity.UNCOMMON, mage.cards.p.Pyroblast.class)); - cards.add(new SetCardInfo("Pyrokinesis", 143, Rarity.RARE, mage.cards.p.Pyrokinesis.class)); - cards.add(new SetCardInfo("Quiet Speculation", 68, Rarity.UNCOMMON, mage.cards.q.QuietSpeculation.class)); - cards.add(new SetCardInfo("Raise the Alarm", 24, Rarity.COMMON, mage.cards.r.RaiseTheAlarm.class)); - cards.add(new SetCardInfo("Rally the Peasants", 25, Rarity.COMMON, mage.cards.r.RallyThePeasants.class)); - cards.add(new SetCardInfo("Rancor", 180, Rarity.UNCOMMON, mage.cards.r.Rancor.class)); - cards.add(new SetCardInfo("Reckless Charge", 144, Rarity.COMMON, mage.cards.r.RecklessCharge.class)); - cards.add(new SetCardInfo("Regal Force", 181, Rarity.RARE, mage.cards.r.RegalForce.class)); - cards.add(new SetCardInfo("Relic of Progenitus", 231, Rarity.UNCOMMON, mage.cards.r.RelicOfProgenitus.class)); - cards.add(new SetCardInfo("Roar of the Wurm", 182, Rarity.UNCOMMON, mage.cards.r.RoarOfTheWurm.class)); - cards.add(new SetCardInfo("Roots", 183, Rarity.COMMON, mage.cards.r.Roots.class)); - cards.add(new SetCardInfo("Rorix Bladewing", 145, Rarity.RARE, mage.cards.r.RorixBladewing.class)); - cards.add(new SetCardInfo("Rugged Highlands", 243, Rarity.COMMON, mage.cards.r.RuggedHighlands.class)); - cards.add(new SetCardInfo("Scoured Barrens", 244, Rarity.COMMON, mage.cards.s.ScouredBarrens.class)); - cards.add(new SetCardInfo("Screeching Skaab", 69, Rarity.COMMON, mage.cards.s.ScreechingSkaab.class)); - cards.add(new SetCardInfo("Seal of Cleansing", 26, Rarity.COMMON, mage.cards.s.SealOfCleansing.class)); - cards.add(new SetCardInfo("Seal of Strength", 184, Rarity.COMMON, mage.cards.s.SealOfStrength.class)); - cards.add(new SetCardInfo("Second Thoughts", 27, Rarity.COMMON, mage.cards.s.SecondThoughts.class)); - cards.add(new SetCardInfo("Seismic Stomp", 146, Rarity.COMMON, mage.cards.s.SeismicStomp.class)); - cards.add(new SetCardInfo("Sengir Autocrat", 105, Rarity.UNCOMMON, mage.cards.s.SengirAutocrat.class)); - cards.add(new SetCardInfo("Sensei's Divining Top", 232, Rarity.RARE, mage.cards.s.SenseisDiviningTop.class)); - cards.add(new SetCardInfo("Sentinel Spider", 185, Rarity.COMMON, mage.cards.s.SentinelSpider.class)); - cards.add(new SetCardInfo("Serendib Efreet", 70, Rarity.RARE, mage.cards.s.SerendibEfreet.class)); - cards.add(new SetCardInfo("Serra Angel", 28, Rarity.UNCOMMON, mage.cards.s.SerraAngel.class)); - cards.add(new SetCardInfo("Shaman of the Pack", 205, Rarity.UNCOMMON, mage.cards.s.ShamanOfThePack.class)); - cards.add(new SetCardInfo("Shardless Agent", 206, Rarity.RARE, mage.cards.s.ShardlessAgent.class)); - cards.add(new SetCardInfo("Shelter", 29, Rarity.COMMON, mage.cards.s.Shelter.class)); - cards.add(new SetCardInfo("Shoreline Ranger", 71, Rarity.COMMON, mage.cards.s.ShorelineRanger.class)); - cards.add(new SetCardInfo("Siege-Gang Commander", 147, Rarity.RARE, mage.cards.s.SiegeGangCommander.class)); - cards.add(new SetCardInfo("Silent Departure", 72, Rarity.COMMON, mage.cards.s.SilentDeparture.class)); - cards.add(new SetCardInfo("Silvos, Rogue Elemental", 186, Rarity.RARE, mage.cards.s.SilvosRogueElemental.class)); - cards.add(new SetCardInfo("Sinkhole", 106, Rarity.RARE, mage.cards.s.Sinkhole.class)); - cards.add(new SetCardInfo("Skulking Ghost", 107, Rarity.COMMON, mage.cards.s.SkulkingGhost.class)); - cards.add(new SetCardInfo("Sneak Attack", 148, Rarity.MYTHIC, mage.cards.s.SneakAttack.class)); - cards.add(new SetCardInfo("Soulcatcher", 30, Rarity.UNCOMMON, mage.cards.s.Soulcatcher.class)); - cards.add(new SetCardInfo("Sphinx of the Steel Wind", 207, Rarity.MYTHIC, mage.cards.s.SphinxOfTheSteelWind.class)); - cards.add(new SetCardInfo("Sprite Noble", 73, Rarity.UNCOMMON, mage.cards.s.SpriteNoble.class)); - cards.add(new SetCardInfo("Squadron Hawk", 31, Rarity.COMMON, mage.cards.s.SquadronHawk.class)); - cards.add(new SetCardInfo("Stingscourger", 149, Rarity.COMMON, mage.cards.s.Stingscourger.class)); - cards.add(new SetCardInfo("Stupefying Touch", 74, Rarity.COMMON, mage.cards.s.StupefyingTouch.class)); - cards.add(new SetCardInfo("Sulfuric Vortex", 150, Rarity.RARE, mage.cards.s.SulfuricVortex.class)); - cards.add(new SetCardInfo("Swiftwater Cliffs", 245, Rarity.COMMON, mage.cards.s.SwiftwaterCliffs.class)); - cards.add(new SetCardInfo("Swords to Plowshares", 32, Rarity.UNCOMMON, mage.cards.s.SwordsToPlowshares.class)); - cards.add(new SetCardInfo("Sylvan Library", 187, Rarity.RARE, mage.cards.s.SylvanLibrary.class)); - cards.add(new SetCardInfo("Sylvan Might", 188, Rarity.COMMON, mage.cards.s.SylvanMight.class)); - cards.add(new SetCardInfo("Thornweald Archer", 189, Rarity.COMMON, mage.cards.t.ThornwealdArcher.class)); - cards.add(new SetCardInfo("Thornwood Falls", 246, Rarity.COMMON, mage.cards.t.ThornwoodFalls.class)); - cards.add(new SetCardInfo("Thunderclap Wyvern", 208, Rarity.UNCOMMON, mage.cards.t.ThunderclapWyvern.class)); - cards.add(new SetCardInfo("Ticking Gnomes", 233, Rarity.UNCOMMON, mage.cards.t.TickingGnomes.class)); - cards.add(new SetCardInfo("Tidal Wave", 75, Rarity.COMMON, mage.cards.t.TidalWave.class)); - cards.add(new SetCardInfo("Timberwatch Elf", 190, Rarity.UNCOMMON, mage.cards.t.TimberwatchElf.class)); - cards.add(new SetCardInfo("Tooth and Claw", 151, Rarity.UNCOMMON, mage.cards.t.ToothAndClaw.class)); - cards.add(new SetCardInfo("Torrent of Souls", 217, Rarity.UNCOMMON, mage.cards.t.TorrentOfSouls.class)); - cards.add(new SetCardInfo("Toxic Deluge", 108, Rarity.RARE, mage.cards.t.ToxicDeluge.class)); - cards.add(new SetCardInfo("Tragic Slip", 109, Rarity.COMMON, mage.cards.t.TragicSlip.class)); - cards.add(new SetCardInfo("Tranquil Cove", 247, Rarity.COMMON, mage.cards.t.TranquilCove.class)); - cards.add(new SetCardInfo("Trygon Predator", 209, Rarity.UNCOMMON, mage.cards.t.TrygonPredator.class)); - cards.add(new SetCardInfo("Twisted Abomination", 110, Rarity.COMMON, mage.cards.t.TwistedAbomination.class)); - cards.add(new SetCardInfo("Undying Rage", 152, Rarity.COMMON, mage.cards.u.UndyingRage.class)); - cards.add(new SetCardInfo("Unexpectedly Absent", 33, Rarity.RARE, mage.cards.u.UnexpectedlyAbsent.class)); - cards.add(new SetCardInfo("Urborg Uprising", 111, Rarity.COMMON, mage.cards.u.UrborgUprising.class)); - cards.add(new SetCardInfo("Vampiric Tutor", 112, Rarity.MYTHIC, mage.cards.v.VampiricTutor.class)); - cards.add(new SetCardInfo("Victimize", 113, Rarity.UNCOMMON, mage.cards.v.Victimize.class)); - cards.add(new SetCardInfo("Vindicate", 210, Rarity.RARE, mage.cards.v.Vindicate.class)); - cards.add(new SetCardInfo("Visara the Dreadful", 114, Rarity.RARE, mage.cards.v.VisaraTheDreadful.class)); - cards.add(new SetCardInfo("Void", 211, Rarity.RARE, mage.cards.v.Void.class)); - cards.add(new SetCardInfo("Wakedancer", 116, Rarity.COMMON, mage.cards.w.Wakedancer.class)); - cards.add(new SetCardInfo("Wake of Vultures", 115, Rarity.COMMON, mage.cards.w.WakeOfVultures.class)); - cards.add(new SetCardInfo("Wall of Omens", 34, Rarity.UNCOMMON, mage.cards.w.WallOfOmens.class)); - cards.add(new SetCardInfo("Warden of Evos Isle", 76, Rarity.COMMON, mage.cards.w.WardenOfEvosIsle.class)); - cards.add(new SetCardInfo("War Priest of Thune", 35, Rarity.UNCOMMON, mage.cards.w.WarPriestOfThune.class)); - cards.add(new SetCardInfo("Wasteland", 248, Rarity.RARE, mage.cards.w.Wasteland.class)); - cards.add(new SetCardInfo("Wee Dragonauts", 212, Rarity.UNCOMMON, mage.cards.w.WeeDragonauts.class)); - cards.add(new SetCardInfo("Welkin Guide", 36, Rarity.COMMON, mage.cards.w.WelkinGuide.class)); - cards.add(new SetCardInfo("Werebear", 191, Rarity.COMMON, mage.cards.w.Werebear.class)); - cards.add(new SetCardInfo("Whitemane Lion", 37, Rarity.COMMON, mage.cards.w.WhitemaneLion.class)); - cards.add(new SetCardInfo("Wildfire Emissary", 153, Rarity.COMMON, mage.cards.w.WildfireEmissary.class)); - cards.add(new SetCardInfo("Wind-Scarred Crag", 249, Rarity.COMMON, mage.cards.w.WindScarredCrag.class)); - cards.add(new SetCardInfo("Winter Orb", 234, Rarity.RARE, mage.cards.w.WinterOrb.class)); - cards.add(new SetCardInfo("Wirewood Symbiote", 192, Rarity.UNCOMMON, mage.cards.w.WirewoodSymbiote.class)); - cards.add(new SetCardInfo("Wonder", 77, Rarity.UNCOMMON, mage.cards.w.Wonder.class)); - cards.add(new SetCardInfo("Worldgorger Dragon", 154, Rarity.MYTHIC, mage.cards.w.WorldgorgerDragon.class)); - cards.add(new SetCardInfo("Worn Powerstone", 235, Rarity.UNCOMMON, mage.cards.w.WornPowerstone.class)); - cards.add(new SetCardInfo("Wrath of God", 38, Rarity.RARE, mage.cards.w.WrathOfGod.class)); - cards.add(new SetCardInfo("Xantid Swarm", 193, Rarity.RARE, mage.cards.x.XantidSwarm.class)); - cards.add(new SetCardInfo("Yavimaya Enchantress", 194, Rarity.COMMON, mage.cards.y.YavimayaEnchantress.class)); - cards.add(new SetCardInfo("Young Pyromancer", 155, Rarity.UNCOMMON, mage.cards.y.YoungPyromancer.class)); - cards.add(new SetCardInfo("Zealous Persecution", 213, Rarity.UNCOMMON, mage.cards.z.ZealousPersecution.class)); - } - -} +/* +* 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.sets; + +import java.util.GregorianCalendar; +import mage.cards.ExpansionSet; +import mage.constants.SetType; +import mage.constants.Rarity; +import java.util.List; + +/** + * + * @author fireshoes + */ +public class EternalMasters extends ExpansionSet { + + private static final EternalMasters fINSTANCE = new EternalMasters(); + + public static EternalMasters getInstance() { + return fINSTANCE; + } + + private EternalMasters() { + super("Eternal Masters", "EMA", "mage.sets.eternalmasters", ExpansionSet.buildDate(2016, 6, 10), SetType.SUPPLEMENTAL); + this.blockName = "Reprint"; + this.hasBasicLands = false; + this.hasBoosters = true; + this.numBoosterLands = 0; + this.numBoosterCommon = 11; + this.numBoosterUncommon = 3; + this.numBoosterRare = 1; + this.ratioBoosterMythic = 8; + cards.add(new SetCardInfo("Abundant Growth", 156, Rarity.COMMON, mage.cards.a.AbundantGrowth.class)); + cards.add(new SetCardInfo("Ancestral Mask", 157, Rarity.UNCOMMON, mage.cards.a.AncestralMask.class)); + cards.add(new SetCardInfo("Animate Dead", 78, Rarity.UNCOMMON, mage.cards.a.AnimateDead.class)); + cards.add(new SetCardInfo("Annihilate", 79, Rarity.UNCOMMON, mage.cards.a.Annihilate.class)); + cards.add(new SetCardInfo("Arcanis the Omnipotent", 39, Rarity.RARE, mage.cards.a.ArcanisTheOmnipotent.class)); + cards.add(new SetCardInfo("Argothian Enchantress", 158, Rarity.MYTHIC, mage.cards.a.ArgothianEnchantress.class)); + cards.add(new SetCardInfo("Armadillo Cloak", 195, Rarity.UNCOMMON, mage.cards.a.ArmadilloCloak.class)); + cards.add(new SetCardInfo("Ashnod's Altar", 218, Rarity.UNCOMMON, mage.cards.a.AshnodsAltar.class)); + cards.add(new SetCardInfo("Avarax", 117, Rarity.COMMON, mage.cards.a.Avarax.class)); + cards.add(new SetCardInfo("Aven Riftwatcher", 1, Rarity.COMMON, mage.cards.a.AvenRiftwatcher.class)); + cards.add(new SetCardInfo("Balance", 2, Rarity.MYTHIC, mage.cards.b.Balance.class)); + cards.add(new SetCardInfo("Baleful Strix", 196, Rarity.RARE, mage.cards.b.BalefulStrix.class)); + cards.add(new SetCardInfo("Ballynock Cohort", 3, Rarity.COMMON, mage.cards.b.BallynockCohort.class)); + cards.add(new SetCardInfo("Battle Squadron", 118, Rarity.UNCOMMON, mage.cards.b.BattleSquadron.class)); + cards.add(new SetCardInfo("Beetleback Chief", 119, Rarity.UNCOMMON, mage.cards.b.BeetlebackChief.class)); + cards.add(new SetCardInfo("Benevolent Bodyguard", 4, Rarity.COMMON, mage.cards.b.BenevolentBodyguard.class)); + cards.add(new SetCardInfo("Blightsoil Druid", 80, Rarity.COMMON, mage.cards.b.BlightsoilDruid.class)); + cards.add(new SetCardInfo("Blood Artist", 81, Rarity.UNCOMMON, mage.cards.b.BloodArtist.class)); + cards.add(new SetCardInfo("Bloodbraid Elf", 197, Rarity.UNCOMMON, mage.cards.b.BloodbraidElf.class)); + cards.add(new SetCardInfo("Bloodfell Caves", 236, Rarity.COMMON, mage.cards.b.BloodfellCaves.class)); + cards.add(new SetCardInfo("Blossoming Sands", 237, Rarity.COMMON, mage.cards.b.BlossomingSands.class)); + cards.add(new SetCardInfo("Borderland Marauder", 120, Rarity.COMMON, mage.cards.b.BorderlandMarauder.class)); + cards.add(new SetCardInfo("Brago, King Eternal", 198, Rarity.RARE, mage.cards.b.BragoKingEternal.class)); + cards.add(new SetCardInfo("Braids, Cabal Minion", 82, Rarity.RARE, mage.cards.b.BraidsCabalMinion.class)); + cards.add(new SetCardInfo("Brainstorm", 40, Rarity.UNCOMMON, mage.cards.b.Brainstorm.class)); + cards.add(new SetCardInfo("Brawn", 159, Rarity.UNCOMMON, mage.cards.b.Brawn.class)); + cards.add(new SetCardInfo("Burning Vengeance", 121, Rarity.UNCOMMON, mage.cards.b.BurningVengeance.class)); + cards.add(new SetCardInfo("Cabal Therapy", 83, Rarity.UNCOMMON, mage.cards.c.CabalTherapy.class)); + cards.add(new SetCardInfo("Calciderm", 5, Rarity.UNCOMMON, mage.cards.c.Calciderm.class)); + cards.add(new SetCardInfo("Call the Skybreaker", 214, Rarity.RARE, mage.cards.c.CallTheSkybreaker.class)); + cards.add(new SetCardInfo("Carbonize", 122, Rarity.COMMON, mage.cards.c.Carbonize.class)); + cards.add(new SetCardInfo("Carrion Feeder", 84, Rarity.COMMON, mage.cards.c.CarrionFeeder.class)); + cards.add(new SetCardInfo("Centaur Chieftain", 160, Rarity.UNCOMMON, mage.cards.c.CentaurChieftain.class)); + cards.add(new SetCardInfo("Cephalid Sage", 41, Rarity.COMMON, mage.cards.c.CephalidSage.class)); + cards.add(new SetCardInfo("Chain Lightning", 123, Rarity.UNCOMMON, mage.cards.c.ChainLightning.class)); + cards.add(new SetCardInfo("Chrome Mox", 219, Rarity.MYTHIC, mage.cards.c.ChromeMox.class)); + cards.add(new SetCardInfo("Civic Wayfinder", 161, Rarity.COMMON, mage.cards.c.CivicWayfinder.class)); + cards.add(new SetCardInfo("Coalition Honor Guard", 6, Rarity.COMMON, mage.cards.c.CoalitionHonorGuard.class)); + cards.add(new SetCardInfo("Commune with the Gods", 162, Rarity.COMMON, mage.cards.c.CommuneWithTheGods.class)); + cards.add(new SetCardInfo("Control Magic", 42, Rarity.RARE, mage.cards.c.ControlMagic.class)); + cards.add(new SetCardInfo("Counterspell", 43, Rarity.COMMON, mage.cards.c.Counterspell.class)); + cards.add(new SetCardInfo("Crater Hellion", 124, Rarity.RARE, mage.cards.c.CraterHellion.class)); + cards.add(new SetCardInfo("Dack Fayden", 199, Rarity.MYTHIC, mage.cards.d.DackFayden.class)); + cards.add(new SetCardInfo("Daze", 44, Rarity.UNCOMMON, mage.cards.d.Daze.class)); + cards.add(new SetCardInfo("Deadbridge Shaman", 85, Rarity.COMMON, mage.cards.d.DeadbridgeShaman.class)); + cards.add(new SetCardInfo("Deathrite Shaman", 215, Rarity.RARE, mage.cards.d.DeathriteShaman.class)); + cards.add(new SetCardInfo("Deep Analysis", 45, Rarity.COMMON, mage.cards.d.DeepAnalysis.class)); + cards.add(new SetCardInfo("Desperate Ravings", 125, Rarity.COMMON, mage.cards.d.DesperateRavings.class)); + cards.add(new SetCardInfo("Diminishing Returns", 46, Rarity.RARE, mage.cards.d.DiminishingReturns.class)); + cards.add(new SetCardInfo("Dismal Backwater", 238, Rarity.COMMON, mage.cards.d.DismalBackwater.class)); + cards.add(new SetCardInfo("Dragon Egg", 126, Rarity.COMMON, mage.cards.d.DragonEgg.class)); + cards.add(new SetCardInfo("Dream Twist", 47, Rarity.COMMON, mage.cards.d.DreamTwist.class)); + cards.add(new SetCardInfo("Dualcaster Mage", 127, Rarity.RARE, mage.cards.d.DualcasterMage.class)); + cards.add(new SetCardInfo("Duplicant", 220, Rarity.RARE, mage.cards.d.Duplicant.class)); + cards.add(new SetCardInfo("Duress", 86, Rarity.COMMON, mage.cards.d.Duress.class)); + cards.add(new SetCardInfo("Eight-and-a-Half-Tails", 7, Rarity.RARE, mage.cards.e.EightAndAHalfTails.class)); + cards.add(new SetCardInfo("Elephant Guide", 163, Rarity.COMMON, mage.cards.e.ElephantGuide.class)); + cards.add(new SetCardInfo("Elite Vanguard", 8, Rarity.COMMON, mage.cards.e.EliteVanguard.class)); + cards.add(new SetCardInfo("Elvish Vanguard", 164, Rarity.COMMON, mage.cards.e.ElvishVanguard.class)); + cards.add(new SetCardInfo("Emmessi Tome", 221, Rarity.UNCOMMON, mage.cards.e.EmmessiTome.class)); + cards.add(new SetCardInfo("Emperor Crocodile", 165, Rarity.COMMON, mage.cards.e.EmperorCrocodile.class)); + cards.add(new SetCardInfo("Enlightened Tutor", 9, Rarity.RARE, mage.cards.e.EnlightenedTutor.class)); + cards.add(new SetCardInfo("Entomb", 87, Rarity.RARE, mage.cards.e.Entomb.class)); + cards.add(new SetCardInfo("Extract from Darkness", 200, Rarity.UNCOMMON, mage.cards.e.ExtractFromDarkness.class)); + cards.add(new SetCardInfo("Eyeblight's Ending", 88, Rarity.COMMON, mage.cards.e.EyeblightsEnding.class)); + cards.add(new SetCardInfo("Fact or Fiction", 48, Rarity.UNCOMMON, mage.cards.f.FactOrFiction.class)); + cards.add(new SetCardInfo("Faithless Looting", 128, Rarity.COMMON, mage.cards.f.FaithlessLooting.class)); + cards.add(new SetCardInfo("Faith's Fetters", 10, Rarity.UNCOMMON, mage.cards.f.FaithsFetters.class)); + cards.add(new SetCardInfo("Fervent Cathar", 129, Rarity.COMMON, mage.cards.f.FerventCathar.class)); + cards.add(new SetCardInfo("Field of Souls", 11, Rarity.UNCOMMON, mage.cards.f.FieldOfSouls.class)); + cards.add(new SetCardInfo("Firebolt", 130, Rarity.COMMON, mage.cards.f.Firebolt.class)); + cards.add(new SetCardInfo("Flame Jab", 131, Rarity.UNCOMMON, mage.cards.f.FlameJab.class)); + cards.add(new SetCardInfo("Flame-Kin Zealot", 201, Rarity.UNCOMMON, mage.cards.f.FlameKinZealot.class)); + cards.add(new SetCardInfo("Flinthoof Boar", 166, Rarity.UNCOMMON, mage.cards.f.FlinthoofBoar.class)); + cards.add(new SetCardInfo("Fog", 167, Rarity.COMMON, mage.cards.f.Fog.class)); + cards.add(new SetCardInfo("Force of Will", 49, Rarity.MYTHIC, mage.cards.f.ForceOfWill.class)); + cards.add(new SetCardInfo("Future Sight", 50, Rarity.RARE, mage.cards.f.FutureSight.class)); + cards.add(new SetCardInfo("Gaea's Blessing", 168, Rarity.UNCOMMON, mage.cards.g.GaeasBlessing.class)); + cards.add(new SetCardInfo("Gamble", 132, Rarity.RARE, mage.cards.g.Gamble.class)); + cards.add(new SetCardInfo("Gaseous Form", 51, Rarity.COMMON, mage.cards.g.GaseousForm.class)); + cards.add(new SetCardInfo("Ghitu Slinger", 133, Rarity.UNCOMMON, mage.cards.g.GhituSlinger.class)); + cards.add(new SetCardInfo("Giant Solifuge", 216, Rarity.RARE, mage.cards.g.GiantSolifuge.class)); + cards.add(new SetCardInfo("Giant Tortoise", 52, Rarity.COMMON, mage.cards.g.GiantTortoise.class)); + cards.add(new SetCardInfo("Glacial Wall", 53, Rarity.COMMON, mage.cards.g.GlacialWall.class)); + cards.add(new SetCardInfo("Glare of Subdual", 202, Rarity.RARE, mage.cards.g.GlareOfSubdual.class)); + cards.add(new SetCardInfo("Glimmerpoint Stag", 12, Rarity.UNCOMMON, mage.cards.g.GlimmerpointStag.class)); + cards.add(new SetCardInfo("Goblin Charbelcher", 222, Rarity.RARE, mage.cards.g.GoblinCharbelcher.class)); + cards.add(new SetCardInfo("Goblin Trenches", 203, Rarity.RARE, mage.cards.g.GoblinTrenches.class)); + cards.add(new SetCardInfo("Gravedigger", 89, Rarity.COMMON, mage.cards.g.Gravedigger.class)); + cards.add(new SetCardInfo("Green Sun's Zenith", 169, Rarity.RARE, mage.cards.g.GreenSunsZenith.class)); + cards.add(new SetCardInfo("Harmonize", 170, Rarity.UNCOMMON, mage.cards.h.Harmonize.class)); + cards.add(new SetCardInfo("Havoc Demon", 90, Rarity.UNCOMMON, mage.cards.h.HavocDemon.class)); + cards.add(new SetCardInfo("Heritage Druid", 171, Rarity.RARE, mage.cards.h.HeritageDruid.class)); + cards.add(new SetCardInfo("Honden of Cleansing Fire", 13, Rarity.UNCOMMON, mage.cards.h.HondenOfCleansingFire.class)); + cards.add(new SetCardInfo("Honden of Infinite Rage", 134, Rarity.UNCOMMON, mage.cards.h.HondenOfInfiniteRage.class)); + cards.add(new SetCardInfo("Honden of Life's Web", 172, Rarity.UNCOMMON, mage.cards.h.HondenOfLifesWeb.class)); + cards.add(new SetCardInfo("Honden of Night's Reach", 91, Rarity.UNCOMMON, mage.cards.h.HondenOfNightsReach.class)); + cards.add(new SetCardInfo("Honden of Seeing Winds", 54, Rarity.UNCOMMON, mage.cards.h.HondenOfSeeingWinds.class)); + cards.add(new SetCardInfo("Humble", 14, Rarity.COMMON, mage.cards.h.Humble.class)); + cards.add(new SetCardInfo("Hydroblast", 55, Rarity.UNCOMMON, mage.cards.h.Hydroblast.class)); + cards.add(new SetCardInfo("Hymn to Tourach", 92, Rarity.UNCOMMON, mage.cards.h.HymnToTourach1.class)); + cards.add(new SetCardInfo("Ichorid", 93, Rarity.RARE, mage.cards.i.Ichorid.class)); + cards.add(new SetCardInfo("Imperious Perfect", 173, Rarity.RARE, mage.cards.i.ImperiousPerfect.class)); + cards.add(new SetCardInfo("Inkwell Leviathan", 56, Rarity.RARE, mage.cards.i.InkwellLeviathan.class)); + cards.add(new SetCardInfo("Innocent Blood", 94, Rarity.COMMON, mage.cards.i.InnocentBlood.class)); + cards.add(new SetCardInfo("Intangible Virtue", 15, Rarity.UNCOMMON, mage.cards.i.IntangibleVirtue.class)); + cards.add(new SetCardInfo("Invigorate", 174, Rarity.UNCOMMON, mage.cards.i.Invigorate.class)); + cards.add(new SetCardInfo("Isochron Scepter", 223, Rarity.RARE, mage.cards.i.IsochronScepter.class)); + cards.add(new SetCardInfo("Jace, the Mind Sculptor", 57, Rarity.MYTHIC, mage.cards.j.JaceTheMindSculptor.class)); + cards.add(new SetCardInfo("Jareth, Leonine Titan", 16, Rarity.RARE, mage.cards.j.JarethLeonineTitan.class)); + cards.add(new SetCardInfo("Jetting Glasskite", 58, Rarity.UNCOMMON, mage.cards.j.JettingGlasskite.class)); + cards.add(new SetCardInfo("Juggernaut", 224, Rarity.UNCOMMON, mage.cards.j.Juggernaut.class)); + cards.add(new SetCardInfo("Jungle Hollow", 239, Rarity.COMMON, mage.cards.j.JungleHollow.class)); + cards.add(new SetCardInfo("Karakas", 240, Rarity.MYTHIC, mage.cards.k.Karakas.class)); + cards.add(new SetCardInfo("Karmic Guide", 17, Rarity.RARE, mage.cards.k.KarmicGuide.class)); + cards.add(new SetCardInfo("Keldon Champion", 135, Rarity.UNCOMMON, mage.cards.k.KeldonChampion.class)); + cards.add(new SetCardInfo("Keldon Marauders", 136, Rarity.COMMON, mage.cards.k.KeldonMarauders.class)); + cards.add(new SetCardInfo("Kird Ape", 137, Rarity.COMMON, mage.cards.k.KirdApe.class)); + cards.add(new SetCardInfo("Kor Hookmaster", 18, Rarity.COMMON, mage.cards.k.KorHookmaster.class)); + cards.add(new SetCardInfo("Llanowar Elves", 175, Rarity.COMMON, mage.cards.l.LlanowarElves.class)); + cards.add(new SetCardInfo("Lys Alana Huntmaster", 176, Rarity.COMMON, mage.cards.l.LysAlanaHuntmaster.class)); + cards.add(new SetCardInfo("Lys Alana Scarblade", 95, Rarity.UNCOMMON, mage.cards.l.LysAlanaScarblade.class)); + cards.add(new SetCardInfo("Maelstrom Wanderer", 204, Rarity.MYTHIC, mage.cards.m.MaelstromWanderer.class)); + cards.add(new SetCardInfo("Malicious Affliction", 96, Rarity.RARE, mage.cards.m.MaliciousAffliction.class)); + cards.add(new SetCardInfo("Mana Crypt", 225, Rarity.MYTHIC, mage.cards.m.ManaCrypt.class)); + cards.add(new SetCardInfo("Man-o'-War", 59, Rarity.COMMON, mage.cards.m.ManOWar.class)); + cards.add(new SetCardInfo("Maze of Ith", 241, Rarity.RARE, mage.cards.m.MazeOfIth.class)); + cards.add(new SetCardInfo("Memory Lapse", 60, Rarity.COMMON, mage.cards.m.MemoryLapse.class)); + cards.add(new SetCardInfo("Merfolk Looter", 61, Rarity.UNCOMMON, mage.cards.m.MerfolkLooter.class)); + cards.add(new SetCardInfo("Mesa Enchantress", 19, Rarity.UNCOMMON, mage.cards.m.MesaEnchantress.class)); + cards.add(new SetCardInfo("Millikin", 226, Rarity.UNCOMMON, mage.cards.m.Millikin.class)); + cards.add(new SetCardInfo("Mindless Automaton", 227, Rarity.UNCOMMON, mage.cards.m.MindlessAutomaton.class)); + cards.add(new SetCardInfo("Mishra's Factory", 242, Rarity.UNCOMMON, mage.cards.m.MishrasFactory.class)); + cards.add(new SetCardInfo("Mistral Charger", 20, Rarity.COMMON, mage.cards.m.MistralCharger.class)); + cards.add(new SetCardInfo("Mogg Fanatic", 138, Rarity.COMMON, mage.cards.m.MoggFanatic.class)); + cards.add(new SetCardInfo("Mogg War Marshal", 139, Rarity.COMMON, mage.cards.m.MoggWarMarshal.class)); + cards.add(new SetCardInfo("Monk Idealist", 21, Rarity.COMMON, mage.cards.m.MonkIdealist.class)); + cards.add(new SetCardInfo("Mother of Runes", 22, Rarity.RARE, mage.cards.m.MotherOfRunes.class)); + cards.add(new SetCardInfo("Mystical Tutor", 62, Rarity.RARE, mage.cards.m.MysticalTutor.class)); + cards.add(new SetCardInfo("Natural Order", 177, Rarity.MYTHIC, mage.cards.n.NaturalOrder.class)); + cards.add(new SetCardInfo("Nature's Claim", 178, Rarity.COMMON, mage.cards.n.NaturesClaim.class)); + cards.add(new SetCardInfo("Nausea", 97, Rarity.COMMON, mage.cards.n.Nausea.class)); + cards.add(new SetCardInfo("Necropotence", 98, Rarity.MYTHIC, mage.cards.n.Necropotence.class)); + cards.add(new SetCardInfo("Nekrataal", 99, Rarity.UNCOMMON, mage.cards.n.Nekrataal.class)); + cards.add(new SetCardInfo("Nevinyrral's Disk", 228, Rarity.RARE, mage.cards.n.NevinyrralsDisk.class)); + cards.add(new SetCardInfo("Night's Whisper", 100, Rarity.COMMON, mage.cards.n.NightsWhisper.class)); + cards.add(new SetCardInfo("Nimble Mongoose", 179, Rarity.COMMON, mage.cards.n.NimbleMongoose.class)); + cards.add(new SetCardInfo("Oona's Grace", 63, Rarity.COMMON, mage.cards.o.OonasGrace.class)); + cards.add(new SetCardInfo("Orcish Oriflamme", 140, Rarity.COMMON, mage.cards.o.OrcishOriflamme.class)); + cards.add(new SetCardInfo("Pacifism", 23, Rarity.COMMON, mage.cards.p.Pacifism.class)); + cards.add(new SetCardInfo("Peregrine Drake", 64, Rarity.COMMON, mage.cards.p.PeregrineDrake.class)); + cards.add(new SetCardInfo("Phantom Monster", 65, Rarity.COMMON, mage.cards.p.PhantomMonster.class)); + cards.add(new SetCardInfo("Phyrexian Gargantua", 101, Rarity.UNCOMMON, mage.cards.p.PhyrexianGargantua.class)); + cards.add(new SetCardInfo("Phyrexian Ingester", 66, Rarity.UNCOMMON, mage.cards.p.PhyrexianIngester.class)); + cards.add(new SetCardInfo("Phyrexian Rager", 102, Rarity.COMMON, mage.cards.p.PhyrexianRager.class)); + cards.add(new SetCardInfo("Pilgrim's Eye", 229, Rarity.COMMON, mage.cards.p.PilgrimsEye.class)); + cards.add(new SetCardInfo("Plague Witch", 103, Rarity.COMMON, mage.cards.p.PlagueWitch.class)); + cards.add(new SetCardInfo("Price of Progress", 141, Rarity.UNCOMMON, mage.cards.p.PriceOfProgress.class)); + cards.add(new SetCardInfo("Prismatic Lens", 230, Rarity.UNCOMMON, mage.cards.p.PrismaticLens.class)); + cards.add(new SetCardInfo("Prodigal Sorcerer", 67, Rarity.UNCOMMON, mage.cards.p.ProdigalSorcerer.class)); + cards.add(new SetCardInfo("Prowling Pangolin", 104, Rarity.COMMON, mage.cards.p.ProwlingPangolin.class)); + cards.add(new SetCardInfo("Pyroblast", 142, Rarity.UNCOMMON, mage.cards.p.Pyroblast.class)); + cards.add(new SetCardInfo("Pyrokinesis", 143, Rarity.RARE, mage.cards.p.Pyrokinesis.class)); + cards.add(new SetCardInfo("Quiet Speculation", 68, Rarity.UNCOMMON, mage.cards.q.QuietSpeculation.class)); + cards.add(new SetCardInfo("Raise the Alarm", 24, Rarity.COMMON, mage.cards.r.RaiseTheAlarm.class)); + cards.add(new SetCardInfo("Rally the Peasants", 25, Rarity.COMMON, mage.cards.r.RallyThePeasants.class)); + cards.add(new SetCardInfo("Rancor", 180, Rarity.UNCOMMON, mage.cards.r.Rancor.class)); + cards.add(new SetCardInfo("Reckless Charge", 144, Rarity.COMMON, mage.cards.r.RecklessCharge.class)); + cards.add(new SetCardInfo("Regal Force", 181, Rarity.RARE, mage.cards.r.RegalForce.class)); + cards.add(new SetCardInfo("Relic of Progenitus", 231, Rarity.UNCOMMON, mage.cards.r.RelicOfProgenitus.class)); + cards.add(new SetCardInfo("Roar of the Wurm", 182, Rarity.UNCOMMON, mage.cards.r.RoarOfTheWurm.class)); + cards.add(new SetCardInfo("Roots", 183, Rarity.COMMON, mage.cards.r.Roots.class)); + cards.add(new SetCardInfo("Rorix Bladewing", 145, Rarity.RARE, mage.cards.r.RorixBladewing.class)); + cards.add(new SetCardInfo("Rugged Highlands", 243, Rarity.COMMON, mage.cards.r.RuggedHighlands.class)); + cards.add(new SetCardInfo("Scoured Barrens", 244, Rarity.COMMON, mage.cards.s.ScouredBarrens.class)); + cards.add(new SetCardInfo("Screeching Skaab", 69, Rarity.COMMON, mage.cards.s.ScreechingSkaab.class)); + cards.add(new SetCardInfo("Seal of Cleansing", 26, Rarity.COMMON, mage.cards.s.SealOfCleansing.class)); + cards.add(new SetCardInfo("Seal of Strength", 184, Rarity.COMMON, mage.cards.s.SealOfStrength.class)); + cards.add(new SetCardInfo("Second Thoughts", 27, Rarity.COMMON, mage.cards.s.SecondThoughts.class)); + cards.add(new SetCardInfo("Seismic Stomp", 146, Rarity.COMMON, mage.cards.s.SeismicStomp.class)); + cards.add(new SetCardInfo("Sengir Autocrat", 105, Rarity.UNCOMMON, mage.cards.s.SengirAutocrat.class)); + cards.add(new SetCardInfo("Sensei's Divining Top", 232, Rarity.RARE, mage.cards.s.SenseisDiviningTop.class)); + cards.add(new SetCardInfo("Sentinel Spider", 185, Rarity.COMMON, mage.cards.s.SentinelSpider.class)); + cards.add(new SetCardInfo("Serendib Efreet", 70, Rarity.RARE, mage.cards.s.SerendibEfreet.class)); + cards.add(new SetCardInfo("Serra Angel", 28, Rarity.UNCOMMON, mage.cards.s.SerraAngel.class)); + cards.add(new SetCardInfo("Shaman of the Pack", 205, Rarity.UNCOMMON, mage.cards.s.ShamanOfThePack.class)); + cards.add(new SetCardInfo("Shardless Agent", 206, Rarity.RARE, mage.cards.s.ShardlessAgent.class)); + cards.add(new SetCardInfo("Shelter", 29, Rarity.COMMON, mage.cards.s.Shelter.class)); + cards.add(new SetCardInfo("Shoreline Ranger", 71, Rarity.COMMON, mage.cards.s.ShorelineRanger.class)); + cards.add(new SetCardInfo("Siege-Gang Commander", 147, Rarity.RARE, mage.cards.s.SiegeGangCommander.class)); + cards.add(new SetCardInfo("Silent Departure", 72, Rarity.COMMON, mage.cards.s.SilentDeparture.class)); + cards.add(new SetCardInfo("Silvos, Rogue Elemental", 186, Rarity.RARE, mage.cards.s.SilvosRogueElemental.class)); + cards.add(new SetCardInfo("Sinkhole", 106, Rarity.RARE, mage.cards.s.Sinkhole.class)); + cards.add(new SetCardInfo("Skulking Ghost", 107, Rarity.COMMON, mage.cards.s.SkulkingGhost.class)); + cards.add(new SetCardInfo("Sneak Attack", 148, Rarity.MYTHIC, mage.cards.s.SneakAttack.class)); + cards.add(new SetCardInfo("Soulcatcher", 30, Rarity.UNCOMMON, mage.cards.s.Soulcatcher.class)); + cards.add(new SetCardInfo("Sphinx of the Steel Wind", 207, Rarity.MYTHIC, mage.cards.s.SphinxOfTheSteelWind.class)); + cards.add(new SetCardInfo("Sprite Noble", 73, Rarity.UNCOMMON, mage.cards.s.SpriteNoble.class)); + cards.add(new SetCardInfo("Squadron Hawk", 31, Rarity.COMMON, mage.cards.s.SquadronHawk.class)); + cards.add(new SetCardInfo("Stingscourger", 149, Rarity.COMMON, mage.cards.s.Stingscourger.class)); + cards.add(new SetCardInfo("Stupefying Touch", 74, Rarity.COMMON, mage.cards.s.StupefyingTouch.class)); + cards.add(new SetCardInfo("Sulfuric Vortex", 150, Rarity.RARE, mage.cards.s.SulfuricVortex.class)); + cards.add(new SetCardInfo("Swiftwater Cliffs", 245, Rarity.COMMON, mage.cards.s.SwiftwaterCliffs.class)); + cards.add(new SetCardInfo("Swords to Plowshares", 32, Rarity.UNCOMMON, mage.cards.s.SwordsToPlowshares.class)); + cards.add(new SetCardInfo("Sylvan Library", 187, Rarity.RARE, mage.cards.s.SylvanLibrary.class)); + cards.add(new SetCardInfo("Sylvan Might", 188, Rarity.COMMON, mage.cards.s.SylvanMight.class)); + cards.add(new SetCardInfo("Thornweald Archer", 189, Rarity.COMMON, mage.cards.t.ThornwealdArcher.class)); + cards.add(new SetCardInfo("Thornwood Falls", 246, Rarity.COMMON, mage.cards.t.ThornwoodFalls.class)); + cards.add(new SetCardInfo("Thunderclap Wyvern", 208, Rarity.UNCOMMON, mage.cards.t.ThunderclapWyvern.class)); + cards.add(new SetCardInfo("Ticking Gnomes", 233, Rarity.UNCOMMON, mage.cards.t.TickingGnomes.class)); + cards.add(new SetCardInfo("Tidal Wave", 75, Rarity.COMMON, mage.cards.t.TidalWave.class)); + cards.add(new SetCardInfo("Timberwatch Elf", 190, Rarity.UNCOMMON, mage.cards.t.TimberwatchElf.class)); + cards.add(new SetCardInfo("Tooth and Claw", 151, Rarity.UNCOMMON, mage.cards.t.ToothAndClaw.class)); + cards.add(new SetCardInfo("Torrent of Souls", 217, Rarity.UNCOMMON, mage.cards.t.TorrentOfSouls.class)); + cards.add(new SetCardInfo("Toxic Deluge", 108, Rarity.RARE, mage.cards.t.ToxicDeluge.class)); + cards.add(new SetCardInfo("Tragic Slip", 109, Rarity.COMMON, mage.cards.t.TragicSlip.class)); + cards.add(new SetCardInfo("Tranquil Cove", 247, Rarity.COMMON, mage.cards.t.TranquilCove.class)); + cards.add(new SetCardInfo("Trygon Predator", 209, Rarity.UNCOMMON, mage.cards.t.TrygonPredator.class)); + cards.add(new SetCardInfo("Twisted Abomination", 110, Rarity.COMMON, mage.cards.t.TwistedAbomination.class)); + cards.add(new SetCardInfo("Undying Rage", 152, Rarity.COMMON, mage.cards.u.UndyingRage.class)); + cards.add(new SetCardInfo("Unexpectedly Absent", 33, Rarity.RARE, mage.cards.u.UnexpectedlyAbsent.class)); + cards.add(new SetCardInfo("Urborg Uprising", 111, Rarity.COMMON, mage.cards.u.UrborgUprising.class)); + cards.add(new SetCardInfo("Vampiric Tutor", 112, Rarity.MYTHIC, mage.cards.v.VampiricTutor.class)); + cards.add(new SetCardInfo("Victimize", 113, Rarity.UNCOMMON, mage.cards.v.Victimize.class)); + cards.add(new SetCardInfo("Vindicate", 210, Rarity.RARE, mage.cards.v.Vindicate.class)); + cards.add(new SetCardInfo("Visara the Dreadful", 114, Rarity.RARE, mage.cards.v.VisaraTheDreadful.class)); + cards.add(new SetCardInfo("Void", 211, Rarity.RARE, mage.cards.v.Void.class)); + cards.add(new SetCardInfo("Wakedancer", 116, Rarity.COMMON, mage.cards.w.Wakedancer.class)); + cards.add(new SetCardInfo("Wake of Vultures", 115, Rarity.COMMON, mage.cards.w.WakeOfVultures.class)); + cards.add(new SetCardInfo("Wall of Omens", 34, Rarity.UNCOMMON, mage.cards.w.WallOfOmens.class)); + cards.add(new SetCardInfo("Warden of Evos Isle", 76, Rarity.COMMON, mage.cards.w.WardenOfEvosIsle.class)); + cards.add(new SetCardInfo("War Priest of Thune", 35, Rarity.UNCOMMON, mage.cards.w.WarPriestOfThune.class)); + cards.add(new SetCardInfo("Wasteland", 248, Rarity.RARE, mage.cards.w.Wasteland.class)); + cards.add(new SetCardInfo("Wee Dragonauts", 212, Rarity.UNCOMMON, mage.cards.w.WeeDragonauts.class)); + cards.add(new SetCardInfo("Welkin Guide", 36, Rarity.COMMON, mage.cards.w.WelkinGuide.class)); + cards.add(new SetCardInfo("Werebear", 191, Rarity.COMMON, mage.cards.w.Werebear.class)); + cards.add(new SetCardInfo("Whitemane Lion", 37, Rarity.COMMON, mage.cards.w.WhitemaneLion.class)); + cards.add(new SetCardInfo("Wildfire Emissary", 153, Rarity.COMMON, mage.cards.w.WildfireEmissary.class)); + cards.add(new SetCardInfo("Wind-Scarred Crag", 249, Rarity.COMMON, mage.cards.w.WindScarredCrag.class)); + cards.add(new SetCardInfo("Winter Orb", 234, Rarity.RARE, mage.cards.w.WinterOrb.class)); + cards.add(new SetCardInfo("Wirewood Symbiote", 192, Rarity.UNCOMMON, mage.cards.w.WirewoodSymbiote.class)); + cards.add(new SetCardInfo("Wonder", 77, Rarity.UNCOMMON, mage.cards.w.Wonder.class)); + cards.add(new SetCardInfo("Worldgorger Dragon", 154, Rarity.MYTHIC, mage.cards.w.WorldgorgerDragon.class)); + cards.add(new SetCardInfo("Worn Powerstone", 235, Rarity.UNCOMMON, mage.cards.w.WornPowerstone.class)); + cards.add(new SetCardInfo("Wrath of God", 38, Rarity.RARE, mage.cards.w.WrathOfGod.class)); + cards.add(new SetCardInfo("Xantid Swarm", 193, Rarity.RARE, mage.cards.x.XantidSwarm.class)); + cards.add(new SetCardInfo("Yavimaya Enchantress", 194, Rarity.COMMON, mage.cards.y.YavimayaEnchantress.class)); + cards.add(new SetCardInfo("Young Pyromancer", 155, Rarity.UNCOMMON, mage.cards.y.YoungPyromancer.class)); + cards.add(new SetCardInfo("Zealous Persecution", 213, Rarity.UNCOMMON, mage.cards.z.ZealousPersecution.class)); + } + +} diff --git a/Mage/src/main/java/mage/abilities/effects/ContinuousRuleModifyingEffectImpl.java b/Mage/src/main/java/mage/abilities/effects/ContinuousRuleModifyingEffectImpl.java index 8beb47a99a..03008ae039 100644 --- a/Mage/src/main/java/mage/abilities/effects/ContinuousRuleModifyingEffectImpl.java +++ b/Mage/src/main/java/mage/abilities/effects/ContinuousRuleModifyingEffectImpl.java @@ -47,7 +47,7 @@ public abstract class ContinuousRuleModifyingEffectImpl extends ContinuousEffect // 613.10 // Some continuous effects affect game rules rather than objects. For example, effects may modify - // a player’s maximum hand size, or say that a creature must attack this turn if able. These effects + // a player's maximum hand size, or say that a creature must attack this turn if able. These effects // are applied after all other continuous effects have been applied. Continuous effects that affect // the costs of spells or abilities are applied according to the order specified in rule 601.2e. // All other such effects are applied in timestamp order. See also the rules for timestamp order diff --git a/Mage/src/main/java/mage/abilities/effects/common/ruleModifying/TargetsHaveToTargetPermanentIfAbleEffect.java b/Mage/src/main/java/mage/abilities/effects/common/ruleModifying/TargetsHaveToTargetPermanentIfAbleEffect.java new file mode 100644 index 0000000000..464a8af00e --- /dev/null +++ b/Mage/src/main/java/mage/abilities/effects/common/ruleModifying/TargetsHaveToTargetPermanentIfAbleEffect.java @@ -0,0 +1,102 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package mage.abilities.effects.common.ruleModifying; + +import java.util.List; +import java.util.UUID; +import mage.MageObject; +import mage.abilities.Ability; +import mage.abilities.effects.ContinuousRuleModifyingEffectImpl; +import mage.constants.Duration; +import mage.constants.Outcome; +import mage.filter.FilterPermanent; +import mage.game.Game; +import mage.game.events.GameEvent; +import mage.game.permanent.Permanent; +import mage.game.stack.StackObject; +import mage.players.Player; +import mage.target.Target; + +/** + * 6/8/2016 If a spell or ability’s targets are changed, or if a copy of a spell + * or ability is put onto the stack and has new targets chosen, it doesn’t have + * to target a Flagbearer. + * + * @author LevelX2 + */ +public class TargetsHaveToTargetPermanentIfAbleEffect extends ContinuousRuleModifyingEffectImpl { + + private final FilterPermanent filter; + + public TargetsHaveToTargetPermanentIfAbleEffect(FilterPermanent filter) { + super(Duration.WhileOnBattlefield, Outcome.Detriment); + this.filter = filter; + staticText = "While choosing targets as part of casting a spell or activating an ability, your opponents must choose at least " + this.filter.getMessage() + " on the battlefield if able"; + + } + + public TargetsHaveToTargetPermanentIfAbleEffect(final TargetsHaveToTargetPermanentIfAbleEffect effect) { + super(effect); + this.filter = effect.filter; + } + + @Override + public TargetsHaveToTargetPermanentIfAbleEffect copy() { + return new TargetsHaveToTargetPermanentIfAbleEffect(this); + } + + @Override + public boolean checksEventType(GameEvent event, Game game) { + return event.getType() == GameEvent.EventType.TARGETS_VALID; + } + + @Override + public String getInfoMessage(Ability source, GameEvent event, Game game) { + MageObject mageObject = game.getObject(source.getSourceId()); + if (mageObject != null) { + return "You must choose at least " + this.filter.getMessage() + " on the battlefield as target if able (" + mageObject.getIdName() + ")."; + } + return null; + } + + @Override + public boolean applies(GameEvent event, Ability source, Game game) { + Player controller = game.getPlayer(source.getControllerId()); + if (controller != null + && controller.isHuman() // TODO: This target handling does only work for non AI players so AI logic + && controller.hasOpponent(event.getPlayerId(), game)) { + StackObject stackObject = game.getStack().getStackObject(event.getSourceId()); + if (stackObject.isCopy()) { + return false; + } + Ability ability = (Ability) getValue("targetAbility"); + if (ability != null) { + // Get all the allowed permanents on the battlefield in range of the abilities controller + List allowedPermanents = game.getBattlefield().getActivePermanents(filter, event.getPlayerId(), event.getSourceId(), game); + if (!allowedPermanents.isEmpty()) { + boolean canTargetAllowedPermanent = false; + for (UUID modeId : ability.getModes().getSelectedModes()) { + ability.getModes().setActiveMode(modeId); + for (Target target : ability.getTargets()) { + // Check if already targeted + for (Permanent allowedPermanent : allowedPermanents) { + if (target.getTargets().contains(allowedPermanent.getId())) { + return false; + } + if (target.canTarget(allowedPermanent.getId(), source, game)) { + canTargetAllowedPermanent = true; + } + } + } + } + return canTargetAllowedPermanent; + } + } + } + return false; + + } +} diff --git a/Mage/src/main/java/mage/game/events/GameEvent.java b/Mage/src/main/java/mage/game/events/GameEvent.java index f3313ad4fd..c7f2e94a9f 100644 --- a/Mage/src/main/java/mage/game/events/GameEvent.java +++ b/Mage/src/main/java/mage/game/events/GameEvent.java @@ -171,6 +171,13 @@ public class GameEvent implements Serializable { MANA_PAYED, LOSES, LOST, WINS, TARGET, TARGETED, + /* TARGETS_VALID + targetId id of the spell or id of stack ability the targets were set to + sourceId = targetId + playerId controller of the spell or stack ability + amount not used for this event + */ + TARGETS_VALID, /* COUNTER targetId id of the spell or id of stack ability sourceId sourceId of the ability countering the spell or stack ability diff --git a/Mage/src/main/java/mage/target/Targets.java b/Mage/src/main/java/mage/target/Targets.java index fd4715e449..c8c4266e69 100644 --- a/Mage/src/main/java/mage/target/Targets.java +++ b/Mage/src/main/java/mage/target/Targets.java @@ -33,6 +33,7 @@ import java.util.UUID; import mage.abilities.Ability; import mage.constants.Outcome; import mage.game.Game; +import mage.game.events.GameEvent; /** * @@ -106,6 +107,11 @@ public class Targets extends ArrayList { if (!target.chooseTarget(outcome, targetController, source, game)) { return false; } + // Check if there are some rules for targets are violated, if so reset the targets and start again + if (this.getUnchosen().isEmpty() + && game.replaceEvent(new GameEvent(GameEvent.EventType.TARGETS_VALID, source.getSourceId(), source.getSourceId(), source.getControllerId()), source)) { + this.clearChosen(); + } } } return true;