From e39a9706bc3b4859f33dbacfc7a8d2499574d8cf Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Tue, 17 Mar 2020 22:24:29 +0100 Subject: [PATCH 001/182] Fix booster generation issues with Mystery Booster set. - Split the foil sheet into a separate set as listed on Scryfall. - Added unit test cases that verify booster generation. --- Mage.Sets/src/mage/sets/MysteryBooster.java | 3775 ++++++++--------- .../MysteryBoosterRetailEditionFoils.java | 145 + .../mage/test/sets/BoosterGenerationTest.java | 59 +- 3 files changed, 1996 insertions(+), 1983 deletions(-) create mode 100644 Mage.Sets/src/mage/sets/MysteryBoosterRetailEditionFoils.java diff --git a/Mage.Sets/src/mage/sets/MysteryBooster.java b/Mage.Sets/src/mage/sets/MysteryBooster.java index 51b7cbf4464..cccc859a11f 100644 --- a/Mage.Sets/src/mage/sets/MysteryBooster.java +++ b/Mage.Sets/src/mage/sets/MysteryBooster.java @@ -2,19 +2,30 @@ package mage.sets; import mage.cards.Card; import mage.cards.ExpansionSet; +import mage.cards.repository.CardCriteria; import mage.cards.repository.CardInfo; import mage.cards.repository.CardRepository; import mage.constants.Rarity; import mage.constants.SetType; import mage.util.RandomUtil; +import static java.util.Arrays.asList; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; /** + * https://mtg.gamepedia.com/Mystery_Booster + * https://magic.wizards.com/en/articles/archive/feature/unraveling-mystery-booster-2019-11-14 + * https://scryfall.com/sets/mb1 + * Print sheets used for booster construction sourced from http://www.lethe.xyz/mtg/collation/mb1.html + * + * This set has a very special booster layout: Each slot draws from it’s own distinct print sheet and + * all cards have an equal probability. Therefore, this class implements booster construction by using 14 card lists. * @author TheElk801 */ -public final class MysteryBooster extends ExpansionSet { +public class MysteryBooster extends ExpansionSet { private static final MysteryBooster instance = new MysteryBooster(); @@ -22,8 +33,15 @@ public final class MysteryBooster extends ExpansionSet { return instance; } + /** + * This map defines which cards can go into which booster slot. + * Will be populated when the first booster is requested. + */ + protected final Map> possibleCardsPerBoosterSlot = new HashMap<>(); + + private MysteryBooster() { - super("Mystery Booster", "MB1", ExpansionSet.buildDate(2020, 3, 13), SetType.SUPPLEMENTAL); + super("Mystery Booster", "MB1", ExpansionSet.buildDate(2019, 11, 7), SetType.SUPPLEMENTAL); this.hasBoosters = true; this.hasBasicLands = false; @@ -94,8 +112,8 @@ public final class MysteryBooster extends ExpansionSet { cards.add(new SetCardInfo("Angelic Gift", 17, Rarity.COMMON, mage.cards.a.AngelicGift.class)); cards.add(new SetCardInfo("Angelic Purge", 18, Rarity.COMMON, mage.cards.a.AngelicPurge.class)); cards.add(new SetCardInfo("Angelsong", 22, Rarity.COMMON, mage.cards.a.Angelsong.class)); - cards.add(new SetCardInfo("Anger of the Gods", 840, Rarity.RARE, mage.cards.a.AngerOfTheGods.class)); cards.add(new SetCardInfo("Anger", 839, Rarity.UNCOMMON, mage.cards.a.Anger.class)); + cards.add(new SetCardInfo("Anger of the Gods", 840, Rarity.RARE, mage.cards.a.AngerOfTheGods.class)); cards.add(new SetCardInfo("Animar, Soul of Elements", 1387, Rarity.MYTHIC, mage.cards.a.AnimarSoulOfElements.class)); cards.add(new SetCardInfo("Animate Dead", 566, Rarity.UNCOMMON, mage.cards.a.AnimateDead.class)); cards.add(new SetCardInfo("Annihilate", 567, Rarity.UNCOMMON, mage.cards.a.Annihilate.class)); @@ -331,6 +349,7 @@ public final class MysteryBooster extends ExpansionSet { cards.add(new SetCardInfo("Citadel Castellan", 1408, Rarity.UNCOMMON, mage.cards.c.CitadelCastellan.class)); cards.add(new SetCardInfo("Citanul Woodreaders", 1162, Rarity.COMMON, mage.cards.c.CitanulWoodreaders.class)); cards.add(new SetCardInfo("Citywatch Sphinx", 318, Rarity.UNCOMMON, mage.cards.c.CitywatchSphinx.class)); + cards.add(new SetCardInfo("Claim // Fame", 1536, Rarity.UNCOMMON, mage.cards.c.ClaimFame.class)); cards.add(new SetCardInfo("Claustrophobia", 319, Rarity.COMMON, mage.cards.c.Claustrophobia.class)); cards.add(new SetCardInfo("Cleansing Screech", 889, Rarity.COMMON, mage.cards.c.CleansingScreech.class)); cards.add(new SetCardInfo("Clear the Mind", 320, Rarity.COMMON, mage.cards.c.ClearTheMind.class)); @@ -352,6 +371,7 @@ public final class MysteryBooster extends ExpansionSet { cards.add(new SetCardInfo("Collective Brutality", 600, Rarity.RARE, mage.cards.c.CollectiveBrutality.class)); cards.add(new SetCardInfo("Colossal Dreadmaw", 1164, Rarity.COMMON, mage.cards.c.ColossalDreadmaw.class)); cards.add(new SetCardInfo("Combo Attack", 1165, Rarity.COMMON, mage.cards.c.ComboAttack.class)); + cards.add(new SetCardInfo("Commit // Memory", 1537, Rarity.RARE, mage.cards.c.CommitMemory.class)); cards.add(new SetCardInfo("Commune with Nature", 1166, Rarity.COMMON, mage.cards.c.CommuneWithNature.class)); cards.add(new SetCardInfo("Commune with the Gods", 1167, Rarity.COMMON, mage.cards.c.CommuneWithTheGods.class)); cards.add(new SetCardInfo("Compelling Argument", 326, Rarity.COMMON, mage.cards.c.CompellingArgument.class)); @@ -645,6 +665,7 @@ public final class MysteryBooster extends ExpansionSet { cards.add(new SetCardInfo("Fiery Temper", 925, Rarity.COMMON, mage.cards.f.FieryTemper.class)); cards.add(new SetCardInfo("Filigree Familiar", 1582, Rarity.UNCOMMON, mage.cards.f.FiligreeFamiliar.class)); cards.add(new SetCardInfo("Fill with Fright", 661, Rarity.COMMON, mage.cards.f.FillWithFright.class)); + cards.add(new SetCardInfo("Fire // Ice", 1538, Rarity.COMMON, mage.cards.f.FireIce.class)); cards.add(new SetCardInfo("Fire Elemental", 929, Rarity.COMMON, mage.cards.f.FireElemental.class)); cards.add(new SetCardInfo("Fireball", 926, Rarity.UNCOMMON, mage.cards.f.Fireball.class)); cards.add(new SetCardInfo("Firebolt", 927, Rarity.COMMON, mage.cards.f.Firebolt.class)); @@ -664,8 +685,8 @@ public final class MysteryBooster extends ExpansionSet { cards.add(new SetCardInfo("Flesh to Dust", 663, Rarity.COMMON, mage.cards.f.FleshToDust.class)); cards.add(new SetCardInfo("Fling", 934, Rarity.COMMON, mage.cards.f.Fling.class)); cards.add(new SetCardInfo("Floodgate", 381, Rarity.UNCOMMON, mage.cards.f.Floodgate.class)); - cards.add(new SetCardInfo("Fog Bank", 382, Rarity.UNCOMMON, mage.cards.f.FogBank.class)); cards.add(new SetCardInfo("Fog", 1213, Rarity.COMMON, mage.cards.f.Fog.class)); + cards.add(new SetCardInfo("Fog Bank", 382, Rarity.UNCOMMON, mage.cards.f.FogBank.class)); cards.add(new SetCardInfo("Fogwalker", 383, Rarity.COMMON, mage.cards.f.Fogwalker.class)); cards.add(new SetCardInfo("Foil", 384, Rarity.COMMON, mage.cards.f.Foil.class)); cards.add(new SetCardInfo("Font of Mythos", 1584, Rarity.RARE, mage.cards.f.FontOfMythos.class)); @@ -944,6 +965,7 @@ public final class MysteryBooster extends ExpansionSet { cards.add(new SetCardInfo("Lead by Example", 1258, Rarity.COMMON, mage.cards.l.LeadByExample.class)); cards.add(new SetCardInfo("Lead the Stampede", 1259, Rarity.COMMON, mage.cards.l.LeadTheStampede.class)); cards.add(new SetCardInfo("Leapfrog", 418, Rarity.COMMON, mage.cards.l.Leapfrog.class)); + cards.add(new SetCardInfo("Leaping Master", 999, Rarity.COMMON, mage.cards.l.LeapingMaster.class)); cards.add(new SetCardInfo("Leonin Relic-Warder", 158, Rarity.UNCOMMON, mage.cards.l.LeoninRelicWarder.class)); cards.add(new SetCardInfo("Leopard-Spotted Jiao", 1000, Rarity.COMMON, mage.cards.l.LeopardSpottedJiao.class)); cards.add(new SetCardInfo("Lethal Sting", 700, Rarity.COMMON, mage.cards.l.LethalSting.class)); @@ -1061,8 +1083,8 @@ public final class MysteryBooster extends ExpansionSet { cards.add(new SetCardInfo("Mother of Runes", 183, Rarity.UNCOMMON, mage.cards.m.MotherOfRunes.class)); cards.add(new SetCardInfo("Mulch", 1271, Rarity.COMMON, mage.cards.m.Mulch.class)); cards.add(new SetCardInfo("Mulldrifter", 437, Rarity.COMMON, mage.cards.m.Mulldrifter.class)); - cards.add(new SetCardInfo("Murder of Crows", 438, Rarity.UNCOMMON, mage.cards.m.MurderOfCrows.class)); cards.add(new SetCardInfo("Murder", 717, Rarity.COMMON, mage.cards.m.Murder.class)); + cards.add(new SetCardInfo("Murder of Crows", 438, Rarity.UNCOMMON, mage.cards.m.MurderOfCrows.class)); cards.add(new SetCardInfo("Murderous Compulsion", 718, Rarity.COMMON, mage.cards.m.MurderousCompulsion.class)); cards.add(new SetCardInfo("Mutiny", 1018, Rarity.COMMON, mage.cards.m.Mutiny.class)); cards.add(new SetCardInfo("Mycoloth", 1272, Rarity.RARE, mage.cards.m.Mycoloth.class)); @@ -1437,6 +1459,9 @@ public final class MysteryBooster extends ExpansionSet { cards.add(new SetCardInfo("Spire Monitor", 503, Rarity.COMMON, mage.cards.s.SpireMonitor.class)); cards.add(new SetCardInfo("Spreading Rot", 779, Rarity.COMMON, mage.cards.s.SpreadingRot.class)); cards.add(new SetCardInfo("Sprouting Thrinax", 1489, Rarity.UNCOMMON, mage.cards.s.SproutingThrinax.class)); + // Card not implemented. BEWARE: When enabling this entry, add it to the appropriate booster slot! + // It belongs into the Artifact/Land booster. Just uncomment the relevant entry down there. + //cards.add(new SetCardInfo("Spy Kit", 1635, Rarity.UNCOMMON, mage.cards.s.SpyKit.class)); cards.add(new SetCardInfo("Squirrel Wrangler", 1340, Rarity.RARE, mage.cards.s.SquirrelWrangler.class)); cards.add(new SetCardInfo("Stab Wound", 780, Rarity.UNCOMMON, mage.cards.s.StabWound.class)); cards.add(new SetCardInfo("Staggershock", 1067, Rarity.UNCOMMON, mage.cards.s.Staggershock.class)); @@ -1716,1989 +1741,1777 @@ public final class MysteryBooster extends ExpansionSet { cards.add(new SetCardInfo("Zendikar's Roil", 1382, Rarity.UNCOMMON, mage.cards.z.ZendikarsRoil.class)); cards.add(new SetCardInfo("Zhur-Taa Druid", 1517, Rarity.COMMON, mage.cards.z.ZhurTaaDruid.class)); cards.add(new SetCardInfo("Zulaport Chainmage", 830, Rarity.COMMON, mage.cards.z.ZulaportChainmage.class)); - cards.add(new SetCardInfo("Alchemist's Refuge", 1811, Rarity.RARE, mage.cards.a.AlchemistsRefuge.class)); - cards.add(new SetCardInfo("Allosaurus Rider", 1755, Rarity.RARE, mage.cards.a.AllosaurusRider.class)); - cards.add(new SetCardInfo("Amulet of Vigor", 1792, Rarity.RARE, mage.cards.a.AmuletOfVigor.class)); - cards.add(new SetCardInfo("Archetype of Endurance", 1756, Rarity.UNCOMMON, mage.cards.a.ArchetypeOfEndurance.class)); - cards.add(new SetCardInfo("Aurelia's Fury", 1777, Rarity.MYTHIC, mage.cards.a.AureliasFury.class)); - cards.add(new SetCardInfo("Balduvian Rage", 1740, Rarity.UNCOMMON, mage.cards.b.BalduvianRage.class)); - cards.add(new SetCardInfo("Balefire Liege", 1787, Rarity.RARE, mage.cards.b.BalefireLiege.class)); - cards.add(new SetCardInfo("Blasting Station", 1793, Rarity.UNCOMMON, mage.cards.b.BlastingStation.class)); - cards.add(new SetCardInfo("Blighted Agent", 1714, Rarity.COMMON, mage.cards.b.BlightedAgent.class)); - cards.add(new SetCardInfo("Boreal Druid", 1757, Rarity.COMMON, mage.cards.b.BorealDruid.class)); - cards.add(new SetCardInfo("Boundless Realms", 1758, Rarity.RARE, mage.cards.b.BoundlessRealms.class)); - cards.add(new SetCardInfo("Braid of Fire", 1741, Rarity.RARE, mage.cards.b.BraidOfFire.class)); - cards.add(new SetCardInfo("Bramblewood Paragon", 1759, Rarity.UNCOMMON, mage.cards.b.BramblewoodParagon.class)); - cards.add(new SetCardInfo("Bringer of the Black Dawn", 1727, Rarity.RARE, mage.cards.b.BringerOfTheBlackDawn.class)); - cards.add(new SetCardInfo("Burning Inquiry", 1742, Rarity.COMMON, mage.cards.b.BurningInquiry.class)); - cards.add(new SetCardInfo("Celestial Dawn", 1696, Rarity.RARE, mage.cards.c.CelestialDawn.class)); - cards.add(new SetCardInfo("Celestial Kirin", 1697, Rarity.RARE, mage.cards.c.CelestialKirin.class)); - cards.add(new SetCardInfo("Changeling Hero", 1698, Rarity.UNCOMMON, mage.cards.c.ChangelingHero.class)); - cards.add(new SetCardInfo("Chimney Imp", 1728, Rarity.COMMON, mage.cards.c.ChimneyImp.class)); - cards.add(new SetCardInfo("Codex Shredder", 1794, Rarity.UNCOMMON, mage.cards.c.CodexShredder.class)); - cards.add(new SetCardInfo("Conspiracy", 1729, Rarity.RARE, mage.cards.c.Conspiracy.class)); - cards.add(new SetCardInfo("Council Guardian", 1699, Rarity.UNCOMMON, mage.cards.c.CouncilGuardian.class)); - cards.add(new SetCardInfo("Delay", 1715, Rarity.UNCOMMON, mage.cards.d.Delay.class)); - cards.add(new SetCardInfo("Drogskol Captain", 1778, Rarity.UNCOMMON, mage.cards.d.DrogskolCaptain.class)); - cards.add(new SetCardInfo("Echoing Decay", 1730, Rarity.COMMON, mage.cards.e.EchoingDecay.class)); - cards.add(new SetCardInfo("Eidolon of Rhetoric", 1700, Rarity.UNCOMMON, mage.cards.e.EidolonOfRhetoric.class)); - cards.add(new SetCardInfo("Fatespinner", 1716, Rarity.RARE, mage.cards.f.Fatespinner.class)); - cards.add(new SetCardInfo("Fiery Gambit", 1743, Rarity.RARE, mage.cards.f.FieryGambit.class)); - cards.add(new SetCardInfo("Flamekin Harbinger", 1744, Rarity.UNCOMMON, mage.cards.f.FlamekinHarbinger.class)); - cards.add(new SetCardInfo("Form of the Dragon", 1745, Rarity.RARE, mage.cards.f.FormOfTheDragon.class)); - cards.add(new SetCardInfo("Frozen Aether", 1717, Rarity.UNCOMMON, mage.cards.f.FrozenAether.class)); - cards.add(new SetCardInfo("Funeral Charm", 1731, Rarity.RARE, mage.cards.f.FuneralCharm.class)); - cards.add(new SetCardInfo("Fungusaur", 1760, Rarity.RARE, mage.cards.f.Fungusaur.class)); - cards.add(new SetCardInfo("Game-Trail Changeling", 1761, Rarity.COMMON, mage.cards.g.GameTrailChangeling.class)); - cards.add(new SetCardInfo("Geth's Grimoire", 1795, Rarity.UNCOMMON, mage.cards.g.GethsGrimoire.class)); - cards.add(new SetCardInfo("Gilder Bairn", 1788, Rarity.UNCOMMON, mage.cards.g.GilderBairn.class)); - cards.add(new SetCardInfo("Gleeful Sabotage", 1762, Rarity.COMMON, mage.cards.g.GleefulSabotage.class)); - cards.add(new SetCardInfo("Glittering Wish", 1779, Rarity.RARE, mage.cards.g.GlitteringWish.class)); - cards.add(new SetCardInfo("Goblin Bushwhacker", 1746, Rarity.COMMON, mage.cards.g.GoblinBushwhacker.class)); - cards.add(new SetCardInfo("Grand Architect", 1718, Rarity.RARE, mage.cards.g.GrandArchitect.class)); - cards.add(new SetCardInfo("Greater Mossdog", 1763, Rarity.COMMON, mage.cards.g.GreaterMossdog.class)); - cards.add(new SetCardInfo("Guerrilla Tactics", 1747, Rarity.UNCOMMON, mage.cards.g.GuerrillaTactics.class)); - cards.add(new SetCardInfo("Harmonic Sliver", 1780, Rarity.UNCOMMON, mage.cards.h.HarmonicSliver.class)); - cards.add(new SetCardInfo("Helix Pinnacle", 1764, Rarity.RARE, mage.cards.h.HelixPinnacle.class)); - cards.add(new SetCardInfo("Herald of Leshrac", 1732, Rarity.RARE, mage.cards.h.HeraldOfLeshrac.class)); - cards.add(new SetCardInfo("Hornet Sting", 1765, Rarity.COMMON, mage.cards.h.HornetSting.class)); - cards.add(new SetCardInfo("Intruder Alarm", 1719, Rarity.RARE, mage.cards.i.IntruderAlarm.class)); - cards.add(new SetCardInfo("Iron Myr", 1796, Rarity.COMMON, mage.cards.i.IronMyr.class)); - cards.add(new SetCardInfo("Isamaru, Hound of Konda", 1701, Rarity.RARE, mage.cards.i.IsamaruHoundOfKonda.class)); - cards.add(new SetCardInfo("Karrthus, Tyrant of Jund", 1781, Rarity.MYTHIC, mage.cards.k.KarrthusTyrantOfJund.class)); - cards.add(new SetCardInfo("Knowledge Pool", 1797, Rarity.RARE, mage.cards.k.KnowledgePool.class)); - cards.add(new SetCardInfo("Kulrath Knight", 1789, Rarity.UNCOMMON, mage.cards.k.KulrathKnight.class)); - cards.add(new SetCardInfo("Lantern of Insight", 1798, Rarity.UNCOMMON, mage.cards.l.LanternOfInsight.class)); - cards.add(new SetCardInfo("Lapse of Certainty", 1702, Rarity.COMMON, mage.cards.l.LapseOfCertainty.class)); - cards.add(new SetCardInfo("Leveler", 1799, Rarity.RARE, mage.cards.l.Leveler.class)); - cards.add(new SetCardInfo("Lich's Mirror", 1800, Rarity.MYTHIC, mage.cards.l.LichsMirror.class)); - cards.add(new SetCardInfo("Lightning Storm", 1748, Rarity.UNCOMMON, mage.cards.l.LightningStorm.class)); - cards.add(new SetCardInfo("Lumithread Field", 1703, Rarity.COMMON, mage.cards.l.LumithreadField.class)); - cards.add(new SetCardInfo("Maelstrom Nexus", 1782, Rarity.MYTHIC, mage.cards.m.MaelstromNexus.class)); - cards.add(new SetCardInfo("Magewright's Stone", 1801, Rarity.UNCOMMON, mage.cards.m.MagewrightsStone.class)); - cards.add(new SetCardInfo("Manaweft Sliver", 1766, Rarity.UNCOMMON, mage.cards.m.ManaweftSliver.class)); - cards.add(new SetCardInfo("Maro", 1767, Rarity.RARE, mage.cards.m.Maro.class)); - cards.add(new SetCardInfo("Marrow-Gnawer", 1733, Rarity.RARE, mage.cards.m.MarrowGnawer.class)); - cards.add(new SetCardInfo("Memnite", 1802, Rarity.UNCOMMON, mage.cards.m.Memnite.class)); - cards.add(new SetCardInfo("Minamo, School at Water's Edge", 1812, Rarity.RARE, mage.cards.m.MinamoSchoolAtWatersEdge.class)); - cards.add(new SetCardInfo("Mind Funeral", 1783, Rarity.UNCOMMON, mage.cards.m.MindFuneral.class)); - cards.add(new SetCardInfo("Mindslaver", 1803, Rarity.RARE, mage.cards.m.Mindslaver.class)); - cards.add(new SetCardInfo("Mirrodin's Core", 1813, Rarity.UNCOMMON, mage.cards.m.MirrodinsCore.class)); - cards.add(new SetCardInfo("Misthollow Griffin", 1720, Rarity.MYTHIC, mage.cards.m.MisthollowGriffin.class)); - cards.add(new SetCardInfo("Myojin of Life's Web", 1768, Rarity.RARE, mage.cards.m.MyojinOfLifesWeb.class)); - cards.add(new SetCardInfo("Nezumi Shortfang", 1734, Rarity.RARE, mage.cards.n.NezumiShortfang.class)); - cards.add(new SetCardInfo("Noggle Bandit", 1790, Rarity.COMMON, mage.cards.n.NoggleBandit.class)); - cards.add(new SetCardInfo("Norin the Wary", 1749, Rarity.RARE, mage.cards.n.NorinTheWary.class)); - cards.add(new SetCardInfo("Norn's Annex", 1704, Rarity.RARE, mage.cards.n.NornsAnnex.class)); - cards.add(new SetCardInfo("Not of This World", 1695, Rarity.UNCOMMON, mage.cards.n.NotOfThisWorld.class)); - cards.add(new SetCardInfo("Ogre Gatecrasher", 1750, Rarity.COMMON, mage.cards.o.OgreGatecrasher.class)); - cards.add(new SetCardInfo("One with Nothing", 1735, Rarity.RARE, mage.cards.o.OneWithNothing.class)); - cards.add(new SetCardInfo("Panglacial Wurm", 1769, Rarity.RARE, mage.cards.p.PanglacialWurm.class)); - cards.add(new SetCardInfo("Paradox Haze", 1721, Rarity.UNCOMMON, mage.cards.p.ParadoxHaze.class)); - cards.add(new SetCardInfo("Patron of the Moon", 1722, Rarity.RARE, mage.cards.p.PatronOfTheMoon.class)); - cards.add(new SetCardInfo("Pili-Pala", 1804, Rarity.COMMON, mage.cards.p.PiliPala.class)); - cards.add(new SetCardInfo("Proclamation of Rebirth", 1705, Rarity.RARE, mage.cards.p.ProclamationOfRebirth.class)); - cards.add(new SetCardInfo("Puca's Mischief", 1723, Rarity.RARE, mage.cards.p.PucasMischief.class)); - cards.add(new SetCardInfo("Pull from Eternity", 1706, Rarity.UNCOMMON, mage.cards.p.PullFromEternity.class)); - cards.add(new SetCardInfo("Pyretic Ritual", 1751, Rarity.COMMON, mage.cards.p.PyreticRitual.class)); - cards.add(new SetCardInfo("Ravenous Trap", 1736, Rarity.UNCOMMON, mage.cards.r.RavenousTrap.class)); - cards.add(new SetCardInfo("Reaper King", 1805, Rarity.RARE, mage.cards.r.ReaperKing.class)); - cards.add(new SetCardInfo("Reki, the History of Kamigawa", 1770, Rarity.RARE, mage.cards.r.RekiTheHistoryOfKamigawa.class)); - cards.add(new SetCardInfo("Rescue from the Underworld", 1737, Rarity.UNCOMMON, mage.cards.r.RescueFromTheUnderworld.class)); - cards.add(new SetCardInfo("Rhox", 1771, Rarity.RARE, mage.cards.r.Rhox.class)); - cards.add(new SetCardInfo("Rune-Tail, Kitsune Ascendant", 1707, Rarity.RARE, mage.cards.r.RuneTailKitsuneAscendant.class)); - cards.add(new SetCardInfo("Sakura-Tribe Scout", 1772, Rarity.COMMON, mage.cards.s.SakuraTribeScout.class)); - cards.add(new SetCardInfo("Sarkhan the Mad", 1784, Rarity.MYTHIC, mage.cards.s.SarkhanTheMad.class)); - cards.add(new SetCardInfo("Scourge of the Throne", 1752, Rarity.MYTHIC, mage.cards.s.ScourgeOfTheThrone.class)); - cards.add(new SetCardInfo("Scryb Ranger", 1773, Rarity.UNCOMMON, mage.cards.s.ScrybRanger.class)); - cards.add(new SetCardInfo("Sen Triplets", 1785, Rarity.MYTHIC, mage.cards.s.SenTriplets.class)); - cards.add(new SetCardInfo("Sheltering Ancient", 1774, Rarity.UNCOMMON, mage.cards.s.ShelteringAncient.class)); - cards.add(new SetCardInfo("Shizo, Death's Storehouse", 1814, Rarity.RARE, mage.cards.s.ShizoDeathsStorehouse.class)); - cards.add(new SetCardInfo("Sinew Sliver", 1708, Rarity.COMMON, mage.cards.s.SinewSliver.class)); - cards.add(new SetCardInfo("Sosuke, Son of Seshiro", 1775, Rarity.UNCOMMON, mage.cards.s.SosukeSonOfSeshiro.class)); - cards.add(new SetCardInfo("Soul's Attendant", 1709, Rarity.COMMON, mage.cards.s.SoulsAttendant.class)); - cards.add(new SetCardInfo("Spelltithe Enforcer", 1710, Rarity.RARE, mage.cards.s.SpelltitheEnforcer.class)); - cards.add(new SetCardInfo("Spellweaver Volute", 1724, Rarity.RARE, mage.cards.s.SpellweaverVolute.class)); - cards.add(new SetCardInfo("Spike Feeder", 1776, Rarity.RARE, mage.cards.s.SpikeFeeder.class)); - cards.add(new SetCardInfo("Springjack Shepherd", 1711, Rarity.UNCOMMON, mage.cards.s.SpringjackShepherd.class)); - cards.add(new SetCardInfo("Stalking Stones", 1815, Rarity.UNCOMMON, mage.cards.s.StalkingStones.class)); - cards.add(new SetCardInfo("Stigma Lasher", 1753, Rarity.RARE, mage.cards.s.StigmaLasher.class)); - cards.add(new SetCardInfo("Storm Crow", 1725, Rarity.COMMON, mage.cards.s.StormCrow.class)); - cards.add(new SetCardInfo("Sundial of the Infinite", 1806, Rarity.RARE, mage.cards.s.SundialOfTheInfinite.class)); - cards.add(new SetCardInfo("Teferi's Puzzle Box", 1807, Rarity.RARE, mage.cards.t.TeferisPuzzleBox.class)); - cards.add(new SetCardInfo("Trailblazer's Boots", 1808, Rarity.UNCOMMON, mage.cards.t.TrailblazersBoots.class)); - cards.add(new SetCardInfo("Treasonous Ogre", 1754, Rarity.UNCOMMON, mage.cards.t.TreasonousOgre.class)); - cards.add(new SetCardInfo("Triskelion", 1809, Rarity.RARE, mage.cards.t.Triskelion.class)); - cards.add(new SetCardInfo("Undead Warchief", 1738, Rarity.RARE, mage.cards.u.UndeadWarchief.class)); - cards.add(new SetCardInfo("Viscera Seer", 1739, Rarity.COMMON, mage.cards.v.VisceraSeer.class)); - cards.add(new SetCardInfo("Wall of Shards", 1712, Rarity.UNCOMMON, mage.cards.w.WallOfShards.class)); - cards.add(new SetCardInfo("White Knight", 1713, Rarity.UNCOMMON, mage.cards.w.WhiteKnight.class)); - cards.add(new SetCardInfo("Witchbane Orb", 1810, Rarity.RARE, mage.cards.w.WitchbaneOrb.class)); - cards.add(new SetCardInfo("Yore-Tiller Nephilim", 1786, Rarity.RARE, mage.cards.y.YoreTillerNephilim.class)); - cards.add(new SetCardInfo("Zur's Weirding", 1726, Rarity.RARE, mage.cards.z.ZursWeirding.class)); + } + + private void populateBoosterSlotMap() { + for(int i = 1; i < 16; ++i) + this.possibleCardsPerBoosterSlot.put(i, new ArrayList<>()); + this.populateSlot(1, asList( // White A + "Abzan Falconer", + "Abzan Runemark", + "Acrobatic Maneuver", + "Affa Protector", + "Ainok Bond-Kin", + "Alley Evasion", + "Angelic Purge", + "Angelsong", + "Apostle's Blessing", + "Arrester's Zeal", + "Artful Maneuver", + "Aura of Silence", + "Bartered Cow", + "Bonds of Faith", + "Borrowed Grace", + "Bulwark Giant", + "Caravan Escort", + "Caught in the Brights", + "Celestial Crusader", + "Celestial Flare", + "Center Soul", + "Cliffside Lookout", + "Conviction", + "Countless Gears Renegade", + "Court Street Denizen", + "Crib Swap", + "Danitha Capashen, Paragon", + "Daring Skyjek", + "Decommission", + "Defiant Strike", + "Desperate Sentry", + "Devilthorn Fox", + "Disposal Mummy", + "Divine Favor", + "Dragon's Eye Sentry", + "Dragon's Presence", + "Eddytrail Hawk", + "Enduring Victory", + "Enlightened Ascetic", + "Ephemeral Shields", + "Ephemerate", + "Excoriate", + "Expose Evil", + "Eyes in the Skies", + "Faith's Fetters", + "Feat of Resistance", + "Felidar Umbra", + "Firehoof Cavalry", + "Ghostblade Eidolon", + "Gift of Estates", + "Glaring Aegis", + "Glint-Sleeve Artisan", + "God-Pharaoh's Faithful", + "Grasp of the Hieromancer", + "Gust Walker", + "Gustcloak Skirmisher", + "Healing Hands", + "Hyena Umbra", + "Infantry Veteran", + "Inquisitor's Ox", + "Isolation Zone", + "Knight of Old Benalia", + "Knight of Sorrows", + "Kor Skyfisher", + "Leonin Relic-Warder", + "Lightform", + "Lone Missionary", + "Lonesome Unicorn", + "Lotus-Eye Mystics", + "Loxodon Partisan", + "Mardu Hordechief", + "Marked by Honor", + "Meditation Puzzle", + "Mortal's Ardor", + "Mother of Runes", + "Ninth Bridge Patrol", + "Ondu Greathorn", + "Ondu War Cleric", + "Oreskos Swiftclaw", + "Oust", + "Palace Jailer", + "Path to Exile", + "Peace of Mind", + "Prowling Caracal", + "Resurrection", + "Rhet-Crop Spearmaster", + "Righteous Cause", + "Savannah Lions", + "Searing Light", + "Serra's Embrace", + "Sheer Drop", + "Shining Aerosaur", + "Shining Armor", + "Siegecraft", + "Skymarcher Aspirant", + "Skyspear Cavalry", + "Snubhorn Sentry", + "Soul Parry", + "Soul Summons", + "Soul-Strike Technique", + "Soulmender", + "Sparring Mummy", + "Spectral Gateguards", + "Stave Off", + "Steadfast Sentinel", + "Stone Haven Medic", + "Suppression Bonds", + "Survive the Night", + "Territorial Hammerskull", + "Thraben Inspector", + "Thraben Standard Bearer", + "Topan Freeblade", + "Veteran Swordsmith", + "Village Bell-Ringer", + "Voice of the Provinces", + "Wall of One Thousand Cuts", + "Wandering Champion", + "War Behemoth", + "Windborne Charge", + "Wing Shards", + "Winged Shepherd" + )); + this.populateSlot(2, asList( // White B + "Adanto Vanguard", + "Ajani's Pridemate", + "Angel of Mercy", + "Angel of Renewal", + "Angelic Gift", + "Arrest", + "Aven Battle Priest", + "Aven Sentry", + "Ballynock Cohort", + "Battle Mastery", + "Benevolent Ancestor", + "Blade Instructor", + "Blessed Spirits", + "Built to Last", + "Candlelight Vigil", + "Cartouche of Solidarity", + "Cast Out", + "Cathar's Companion", + "Champion of Arashin", + "Charge", + "Cloudshift", + "Coalition Honor Guard", + "Collar the Culprit", + "Congregate", + "Court Homunculus", + "Darksteel Mutation", + "Dauntless Cathar", + "Dawnglare Invoker", + "Disenchant", + "Dismantling Blow", + "Djeru's Renunciation", + "Djeru's Resolve", + "Doomed Traveler", + "Dragon Bell Monk", + "Emerge Unscathed", + "Encampment Keeper", + "Encircling Fissure", + "Excavation Elephant", + "Expedition Raptor", + "Exultant Skymarcher", + "Faithbearer Paladin", + "Felidar Guardian", + "Fencing Ace", + "Fiend Hunter", + "Forsake the Worldly", + "Fortify", + "Fragmentize", + "Geist of the Moors", + "Gideon's Lawkeeper", + "Gleam of Resistance", + "Gods Willing", + "Great-Horn Krushok", + "Guided Strike", + "Healer's Hawk", + "Healing Grace", + "Heavy Infantry", + "Humble", + "Inspired Charge", + "Intrusive Packbeast", + "Iona's Judgment", + "Jubilant Mascot", + "Knight of Cliffhaven", + "Knight of the Skyward Eye", + "Knight of the Tusk", + "Kor Bladewhirl", + "Kor Firewalker", + "Kor Hookmaster", + "Kor Sky Climber", + "Lieutenants of the Guard", + "Lightwalker", + "Lingering Souls", + "Looming Altisaur", + "Loyal Sentry", + "Lunarch Mantle", + "Midnight Guard", + "Momentary Blink", + "Moonlit Strider", + "Nyx-Fleece Ram", + "Pacifism", + "Palace Sentinels", + "Paladin of the Bloodstained", + "Path of Peace", + "Pegasus Courser", + "Pentarch Ward", + "Pitfall Trap", + "Pressure Point", + "Promise of Bunrei", + "Rally the Peasants", + "Raptor Companion", + "Refurbish", + "Renewed Faith", + "Retreat to Emeria", + "Reviving Dose", + "Rootborn Defenses", + "Sacred Cat", + "Sanctum Gargoyle", + "Sandstorm Charger", + "Seal of Cleansing", + "Seeker of the Way", + "Sensor Splicer", + "Seraph of the Suns", + "Serra Disciple", + "Shoulder to Shoulder", + "Silverchase Fox", + "Skyhunter Skirmisher", + "Slash of Talons", + "Soul Warden", + "Stalwart Aven", + "Star-Crowned Stag", + "Sunlance", + "Sunrise Seeker", + "Swords to Plowshares", + "Take Vengeance", + "Tandem Tactics", + "Terashi's Grasp", + "Unwavering Initiate", + "Wake the Reflections", + "Wall of Omens", + "Wild Griffin", + "Youthful Knight", + "Zealous Strike" + )); + this.populateSlot(3, asList( // Blue A + "Amass the Components", + "Anticipate", + "Artificer's Assistant", + "Augury Owl", + "Befuddle", + "Benthic Giant", + "Calculated Dismissal", + "Call to Heel", + "Caller of Gales", + "Cancel", + "Capture Sphere", + "Catalog", + "Chart a Course", + "Chillbringer", + "Chronostutter", + "Circular Logic", + "Clear the Mind", + "Cloak of Mists", + "Cloudkin Seer", + "Clutch of Currents", + "Compelling Argument", + "Condescend", + "Containment Membrane", + "Contingency Plan", + "Contradict", + "Crashing Tide", + "Crush Dissent", + "Curio Vendor", + "Daze", + "Decision Paralysis", + "Deep Freeze", + "Dispel", + "Displace", + "Drag Under", + "Dragon's Eye Savants", + "Dreadwaters", + "Embodiment of Spring", + "Ensoul Artifact", + "Everdream", + "Failed Inspection", + "Flashfreeze", + "Fledgling Mawcor", + "Fleeting Distraction", + "Fogwalker", + "Foil", + "Frantic Search", + "Frilled Sea Serpent", + "Gaseous Form", + "Glint", + "Gone Missing", + "Grasp of Phantoms", + "Guard Gomazoa", + "Gurmag Drowner", + "Gush", + "Hightide Hermit", + "Hinterland Drake", + "Humongulus", + "Inkfathom Divers", + "Invisibility", + "Jeering Homunculus", + "Jeskai Sage", + "Kiora's Dambreaker", + "Laboratory Brute", + "Laboratory Maniac", + "Labyrinth Guardian", + "Messenger Jays", + "Mind Sculpt", + "Mist Raven", + "Mnemonic Wall", + "Monastery Loremaster", + "Murder of Crows", + "Nagging Thoughts", + "Niblis of Dusk", + "Nine-Tail White Fox", + "Ojutai's Breath", + "Phyrexian Ingester", + "Pondering Mage", + "Predict", + "Purple-Crystal Crab", + "Refocus", + "Riftwing Cloudskate", + "River Darter", + "Sailor of Means", + "Scroll Thief", + "Send to Sleep", + "Shipwreck Looter", + "Silent Observer", + "Silvergill Adept", + "Singing Bell Strike", + "Skaab Goliath", + "Skitter Eel", + "Sleep", + "Slipstream Eel", + "Slither Blade", + "Sphinx's Tutelage", + "Stream of Thought", + "Surrakar Banisher", + "Syr Elenora, the Discerning", + "Thought Collapse", + "Thunder Drake", + "Tidal Warrior", + "Trail of Evidence", + "Treasure Cruise", + "Treasure Mage", + "Trinket Mage", + "Turn Aside", + "Uncomfortable Chill", + "Wall of Frost", + "Warden of Evos Isle", + "Watercourser", + "Weldfast Wingsmith", + "Welkin Tern", + "Wind Drake", + "Wind Strider", + "Wind-Kin Raiders", + "Windcaller Aven", + "Wishcoin Crab", + "Wishful Merfolk", + "Wretched Gryff", + "Write into Being", + "Youthful Scholar" + )); + this.populateSlot(4, asList( // Blue B + "Academy Journeymage", + "Aether Tradewinds", + "Aethersnipe", + "Amphin Pathmage", + "Arcane Denial", + "Archaeomancer", + "Archetype of Imagination", + "Augur of Bolas", + "Bastion Inventor", + "Bewilder", + "Blue Elemental Blast", + "Borrowing 100,000 Arrows", + "Brainstorm", + "Brilliant Spectrum", + "Brine Elemental", + "Cartouche of Knowledge", + "Castaway's Despair", + "Choking Tethers", + "Citywatch Sphinx", + "Claustrophobia", + "Cloud Elemental", + "Cloudreader Sphinx", + "Concentrate", + "Convolute", + "Coral Trickster", + "Coralhelm Guide", + "Counterspell", + "Court Hussar", + "Curiosity", + "Dazzling Lights", + "Deep Analysis", + "Diminish", + "Dirgur Nemesis", + "Distortion Strike", + "Divination", + "Doorkeeper", + "Dream Cache", + "Dream Twist", + "Eel Umbra", + "Enlightened Maniac", + "Errant Ephemeron", + "Essence Scatter", + "Exclude", + "Fact or Fiction", + "Faerie Invaders", + "Faerie Mechanist", + "Fascination", + "Fathom Seer", + "Fog Bank", + "Forbidden Alchemy", + "Frost Lynx", + "Ghost Ship", + "Glacial Crasher", + "Hieroglyphic Illumination", + "Horseshoe Crab", + "Impulse", + "Ior Ruin Expedition", + "Jace's Phantasm", + "Jwar Isle Avenger", + "Lay Claim", + "Leapfrog", + "Mahamoti Djinn", + "Man-o'-War", + "Mana Leak", + "Maximize Altitude", + "Memory Lapse", + "Merfolk Looter", + "Metallic Rebuke", + "Mulldrifter", + "Mystic of the Hidden Way", + "Mystical Teachings", + "Negate", + "Ninja of the Deep Hours", + "Ojutai Interceptor", + "Omenspeaker", + "Opportunity", + "Opt", + "Peel from Reality", + "Phantasmal Bear", + "Portent", + "Preordain", + "Prodigal Sorcerer", + "Propaganda", + "Prosperous Pirates", + "Repulse", + "Retraction Helix", + "Ringwarden Owl", + "River Serpent", + "Riverwheel Aerialists", + "Sage of Lat-Nam", + "Sea Gate Oracle", + "Sealock Monster", + "Secrets of the Golden City", + "Shaper Parasite", + "Shimmerscale Drake", + "Sigiled Starfish", + "Skittering Crustacean", + "Snap", + "Snapping Drake", + "Somber Hoverguard", + "Spire Monitor", + "Steady Progress", + "Stitched Drake", + "Storm Sculptor", + "Strategic Planning", + "Syncopate", + "Tandem Lookout", + "Temporal Fissure", + "Thornwind Faeries", + "Thought Scour", + "Thoughtcast", + "Thrummingbird", + "Tidal Wave", + "Totally Lost", + "Treasure Hunt", + "Triton Tactics", + "Vapor Snag", + "Vigean Graftmage", + "Wave-Wing Elemental", + "Whiplash Trap", + "Windrider Eel" + )); + this.populateSlot(5, asList( // Black A + "Aid the Fallen", + "Alesha's Vanguard", + "Alley Strangler", + "Ambitious Aetherborn", + "Ancestral Vengeance", + "Annihilate", + "Bala Ged Scorpion", + "Bitter Revelation", + "Bladebrand", + "Blighted Bat", + "Blistergrub", + "Bone Splinters", + "Boon of Emrakul", + "Breeding Pit", + "Butcher's Glee", + "Cabal Therapy", + "Cackling Imp", + "Cadaver Imp", + "Catacomb Slug", + "Certain Death", + "Coat with Venom", + "Corpsehatch", + "Covenant of Blood", + "Crow of Dark Tidings", + "Dark Dabbling", + "Dark Withering", + "Darkblast", + "Dead Reveler", + "Deadeye Tormentor", + "Defeat", + "Demon's Grasp", + "Demonic Tutor", + "Demonic Vigor", + "Dismember", + "Disowned Ancestor", + "Doomed Dissenter", + "Douse in Gloom", + "Dread Return", + "Dregscape Zombie", + "Dukhara Scavenger", + "Dune Beetle", + "Duress", + "Farbog Revenant", + "Fetid Imp", + "First-Sphere Gargantua", + "Flesh to Dust", + "Fretwork Colony", + "Genju of the Fens", + "Ghoulcaller's Accomplice", + "Grasping Scoundrel", + "Gravepurge", + "Grim Discovery", + "Hideous End", + "Induce Despair", + "Infernal Scarring", + "Infest", + "Instill Infection", + "Kalastria Nightwatch", + "Krumar Bond-Kin", + "Lazotep Behemoth", + "Macabre Waltz", + "Marauding Boneslasher", + "Mark of the Vampire", + "Marsh Hulk", + "Merciless Resolve", + "Miasmic Mummy", + "Mind Rake", + "Mire's Malice", + "Murder", + "Murderous Compulsion", + "Nantuko Husk", + "Never Happened", + "Nirkana Assassin", + "Plaguecrafter", + "Prowling Pangolin", + "Rakshasa's Secret", + "Read the Bones", + "Reaper of Night", + "Reassembling Skeleton", + "Reckless Imp", + "Reckless Spite", + "Returned Centaur", + "Revenant", + "Rite of the Serpent", + "Ruin Rat", + "Scrounger of Souls", + "Sengir Vampire", + "Shambling Attendants", + "Shambling Goblin", + "Shriekmaw", + "Silumgar Butcher", + "Skeleton Archer", + "Stab Wound", + "Stallion of Ashmouth", + "Stinkweed Imp", + "Stromkirk Patrol", + "Subtle Strike", + "Sultai Runemark", + "Tar Snare", + "Thallid Omnivore", + "The Eldest Reborn", + "Thornbow Archer", + "Thraben Foulbloods", + "Torment of Venom", + "Touch of Moonglove", + "Twins of Maurer Estate", + "Undercity's Embrace", + "Untamed Hunger", + "Unyielding Krumar", + "Vampire Champion", + "Vampire Envoy", + "Vampire Nighthawk", + "Vessel of Malignity", + "Voracious Null", + "Vraska's Finisher", + "Walk the Plank", + "Warteye Witch", + "Weight of the Underworld", + "Weirded Vampire", + "Yargle, Glutton of Urborg", + "Zulaport Chainmage" + )); + this.populateSlot(6, asList( // Black B + "Absorb Vis", + "Accursed Spirit", + "Altar's Reap", + "Animate Dead", + "Baleful Ammit", + "Balustrade Spy", + "Bartizan Bats", + "Black Cat", + "Blessing of Belzenlok", + "Blightsoil Druid", + "Blood Artist", + "Bloodrite Invoker", + "Caligo Skin-Witch", + "Carrion Feeder", + "Carrion Imp", + "Catacomb Crocodile", + "Caustic Tar", + "Child of Night", + "Costly Plunder", + "Cower in Fear", + "Crippling Blight", + "Cursed Minotaur", + "Daring Demolition", + "Dark Ritual", + "Deadbridge Shaman", + "Death Denied", + "Desperate Castaways", + "Diabolic Edict", + "Die Young", + "Dinosaur Hunter", + "Dirge of Dread", + "Dread Drone", + "Dreadbringer Lampads", + "Driver of the Dead", + "Drudge Sentinel", + "Dusk Charger", + "Dusk Legion Zealot", + "Epicure of Blood", + "Erg Raiders", + "Eternal Thirst", + "Evincar's Justice", + "Executioner's Capsule", + "Eyeblight's Ending", + "Fallen Angel", + "Fatal Push", + "Fen Hauler", + "Feral Abomination", + "Festercreep", + "Festering Newt", + "Fill with Fright", + "Fungal Infection", + "Ghostly Changeling", + "Gifted Aetherborn", + "Go for the Throat", + "Gravedigger", + "Gray Merchant of Asphodel", + "Grim Affliction", + "Grixis Slavedriver", + "Grotesque Mutation", + "Gruesome Fate", + "Gurmag Angler", + "Hired Blade", + "Hound of the Farbogs", + "Innocent Blood", + "Inquisition of Kozilek", + "Lawless Broker", + "Lethal Sting", + "Lord of the Accursed", + "March of the Drowned", + "Mephitic Vapors", + "Mind Rot", + "Moment of Craving", + "Nameless Inversion", + "Night's Whisper", + "Noxious Dragon", + "Okiba-Gang Shinobi", + "Painful Lesson", + "Phyrexian Rager", + "Phyrexian Reclamation", + "Pit Keeper", + "Plague Wight", + "Plagued Rusalka", + "Prakhata Club Security", + "Queen's Agent", + "Quest for the Gravelord", + "Rabid Bloodsucker", + "Rakdos Drake", + "Ravenous Chupacabra", + "Recover", + "Renegade Demon", + "Renegade's Getaway", + "Rotfeaster Maggot", + "Scarab Feast", + "Scuttling Death", + "Seal of Doom", + "Shadowcloak Vampire", + "Skeletal Scrying", + "Skulking Ghost", + "Smiting Helix", + "Spreading Rot", + "Street Wraith", + "Tavern Swindler", + "Tendrils of Corruption", + "Thorn of the Black Rose", + "Tidy Conclusion", + "Tragic Slip", + "Trespasser's Curse", + "Trial of Ambition", + "Typhoid Rats", + "Unburden", + "Urborg Uprising", + "Vampire Hexmage", + "Vampire Lacerator", + "Virulent Swipe", + "Wake of Vultures", + "Walking Corpse", + "Wander in Death", + "Wight of Precinct Six", + "Will-o'-the-Wisp", + "Windgrace Acolyte", + "Wrench Mind" + )); + this.populateSlot(7, asList( // Red A + "Act on Impulse", + "Ainok Tracker", + "Alchemist's Greeting", + "Ancient Grudge", + "Arc Trail", + "Arrow Storm", + "Azra Bladeseeker", + "Balduvian Horde", + "Barrage of Boulders", + "Beetleback Chief", + "Bellows Lizard", + "Blastfire Bolt", + "Blazing Volley", + "Blindblast", + "Blood Ogre", + "Bloodfire Expert", + "Bloodlust Inciter", + "Bloodstone Goblin", + "Blow Your House Down", + "Bombard", + "Bomber Corps", + "Borrowed Hostility", + "Brazen Buccaneers", + "Brazen Wolves", + "Bring Low", + "Brute Strength", + "Built to Smash", + "Burst Lightning", + "Canyon Lurkers", + "Chandra's Pyrohelix", + "Charging Monstrosaur", + "Cobblebrute", + "Crowd's Favor", + "Crown-Hunter Hireling", + "Curse of Opulence", + "Destructive Tampering", + "Direct Current", + "Dragon Fodder", + "Dynacharge", + "Erratic Explosion", + "Expedite", + "Falkenrath Reaver", + "Fireball", + "Flame Jab", + "Forge Devil", + "Foundry Street Denizen", + "Frontline Rebel", + "Furnace Whelp", + "Galvanic Blast", + "Generator Servant", + "Geomancer's Gambit", + "Ghitu Lavarunner", + "Giant Spectacle", + "Goblin Assault", + "Goblin Bombardment", + "Goblin Fireslinger", + "Goblin Matron", + "Goblin Roughrider", + "Goblin War Paint", + "Gore Swine", + "Gorehorn Minotaurs", + "Granitic Titan", + "Grapeshot", + "Gravitic Punch", + "Guttersnipe", + "Hammerhand", + "Hardened Berserker", + "Hyena Pack", + "Ill-Tempered Cyclops", + "Impact Tremors", + "Incorrigible Youths", + "Inferno Fist", + "Inferno Jet", + "Ingot Chewer", + "Keldon Halberdier", + "Kiln Fiend", + "Krenko's Enforcer", + "Leaping Master", + "Leopard-Spotted Jiao", + "Madcap Skills", + "Mardu Warshrieker", + "Maximize Velocity", + "Miner's Bane", + "Mogg Flunkies", + "Molten Rain", + "Monastery Swiftspear", + "Ondu Champion", + "Outnumber", + "Price of Progress", + "Pyrotechnics", + "Quakefoot Cyclops", + "Reckless Fireweaver", + "Reckless Wurm", + "Rivals' Duel", + "Ruinous Gremlin", + "Samut's Sprint", + "Sarkhan's Rage", + "Screamreach Brawler", + "Seismic Shift", + "Shattering Spree", + "Shenanigans", + "Smelt", + "Sparkmage Apprentice", + "Sparkspitter", + "Staggershock", + "Stormblood Berserker", + "Swift Kick", + "Tectonic Rift", + "Temur Battle Rage", + "Thrill of Possibility", + "Tibalt's Rager", + "Torch Courier", + "Valakut Invoker", + "Valakut Predator", + "Valley Dasher", + "Vandalize", + "Volcanic Dragon", + "Volcanic Rush", + "Wall of Fire", + "Wayward Giant", + "Wojek Bodyguard" + )); + this.populateSlot(8, asList( // Red B + "Act of Treason", + "Ahn-Crop Crasher", + "Akroan Sergeant", + "Anger", + "Atarka Efreet", + "Avarax", + "Barging Sergeant", + "Battle Rampart", + "Battle-Rattle Shaman", + "Blades of Velis Vel", + "Bloodmad Vampire", + "Blur of Blades", + "Boggart Brute", + "Boiling Earth", + "Boulder Salvo", + "Browbeat", + "Cartouche of Zeal", + "Cathartic Reunion", + "Chandra's Revolution", + "Chartooth Cougar", + "Cinder Hellion", + "Cleansing Screech", + "Cosmotronic Wave", + "Crash Through", + "Curse of the Nightly Hunt", + "Death by Dragons", + "Defiant Ogre", + "Demolish", + "Desert Cerodon", + "Desperate Ravings", + "Distemper of the Blood", + "Dragon Breath", + "Dragon Egg", + "Dragon Whelp", + "Dragonsoul Knight", + "Dual Shot", + "Earth Elemental", + "Emrakul's Hatcher", + "Enthralling Victor", + "Faithless Looting", + "Fall of the Hammer", + "Fervent Strike", + "Fierce Invocation", + "Fiery Hellhound", + "Fiery Temper", + "Fire Elemental", + "Firebolt", + "Firebrand Archer", + "Flametongue Kavu", + "Flamewave Invoker", + "Fling", + "Frenzied Raptor", + "Frilled Deathspitter", + "Frontline Devastator", + "Fury Charm", + "Genju of the Spires", + "Goblin Balloon Brigade", + "Goblin Locksmith", + "Goblin Motivator", + "Goblin Oriflamme", + "Goblin Warchief", + "Gut Shot", + "Hanweir Lancer", + "Hijack", + "Hulking Devil", + "Insolent Neonate", + "Jackal Pup", + "Keldon Overseer", + "Khenra Scrapper", + "Kird Ape", + "Kolaghan Stormsinger", + "Krenko's Command", + "Lightning Bolt", + "Lightning Javelin", + "Lightning Shrieker", + "Lightning Talons", + "Magma Spray", + "Makindi Sliderunner", + "Mark of Mutiny", + "Mogg Fanatic", + "Mogg War Marshal", + "Mutiny", + "Nimble-Blade Khenra", + "Orcish Cannonade", + "Orcish Oriflamme", + "Pillage", + "Prickleboar", + "Prophetic Ravings", + "Rampaging Cyclops", + "Renegade Tactics", + "Roast", + "Rolling Thunder", + "Rubblebelt Maaka", + "Rummaging Goblin", + "Run Amok", + "Rush of Adrenaline", + "Salivating Gremlins", + "Seismic Stomp", + "Shatter", + "Shock", + "Skirk Commando", + "Skirk Prospector", + "Smash to Smithereens", + "Sparktongue Dragon", + "Spikeshot Goblin", + "Sulfurous Blast", + "Summit Prowler", + "Sun-Crowned Hunters", + "Swashbuckling", + "Sweatworks Brawler", + "Tarfire", + "Thresher Lizard", + "Uncaged Fury", + "Undying Rage", + "Vent Sentinel", + "Vessel of Volatility", + "Voldaren Duelist", + "Wildfire Emissary", + "Young Pyromancer", + "Zada's Commando", + "Zealot of the God-Pharaoh" + )); + this.populateSlot(9, asList( // Green A + "Affectionate Indrik", + "Ancestral Mask", + "Ancient Brontodon", + "Arbor Armament", + "Beastbreaker of Bala Ged", + "Become Immense", + "Blanchwood Armor", + "Blastoderm", + "Borderland Explorer", + "Briarhorn", + "Broodhunter Wurm", + "Byway Courier", + "Centaur Courser", + "Creeping Mold", + "Destructor Dragon", + "Domesticated Hydra", + "Dragon-Scarred Bear", + "Elemental Uprising", + "Elvish Fury", + "Eternal Witness", + "Feral Prowler", + "Fierce Empath", + "Frontier Mastodon", + "Gaea's Blessing", + "Gaea's Protector", + "Gift of Growth", + "Glade Watcher", + "Grapple with the Past", + "Greater Basilisk", + "Greater Sandwurm", + "Hamlet Captain", + "Hooded Brawler", + "Hooting Mandrills", + "Jungle Delver", + "Jungle Wayfinder", + "Kin-Tree Warden", + "Kraul Foragers", + "Krosan Druid", + "Lead by Example", + "Lead the Stampede", + "Lifespring Druid", + "Lignify", + "Llanowar Elves", + "Llanowar Empath", + "Lure", + "Mantle of Webs", + "Map the Wastes", + "Mulch", + "Natural Connection", + "Naturalize", + "Nature's Lore", + "Nest Invader", + "Nettle Sentinel", + "New Horizons", + "Nimble Mongoose", + "Ondu Giant", + "Oran-Rief Invoker", + "Overgrown Armasaur", + "Pack's Favor", + "Penumbra Spider", + "Pierce the Sky", + "Plummet", + "Prey Upon", + "Prey's Vengeance", + "Pulse of Murasa", + "Quiet Disrepair", + "Rampant Growth", + "Ranger's Guile", + "Ravenous Leucrocota", + "Reclaim", + "Revive", + "Rhox Maulers", + "Riparian Tiger", + "Roar of the Wurm", + "Root Out", + "Rosethorn Halberd", + "Runeclaw Bear", + "Sagu Archer", + "Sakura-Tribe Elder", + "Saproling Migration", + "Savage Punch", + "Seal of Strength", + "Search for Tomorrow", + "Seek the Horizon", + "Seek the Wilds", + "Shape the Sands", + "Siege Wurm", + "Silhana Ledgewalker", + "Silkweaver Elite", + "Snake Umbra", + "Snapping Sailback", + "Spider Spawning", + "Stoic Builder", + "Strength in Numbers", + "Sylvan Bounty", + "Tajuru Pathwarden", + "Take Down", + "Talons of Wildwood", + "Territorial Baloth", + "Thornhide Wolves", + "Thornweald Archer", + "Thrive", + "Timberwatch Elf", + "Time to Feed", + "Titanic Growth", + "Tukatongue Thallid", + "Turntimber Basilisk", + "Vastwood Gorger", + "Watcher in the Web", + "Wellwisher", + "Wild Growth", + "Wild Mongrel", + "Wildsize", + "Wolfkin Bond", + "Woodborn Behemoth", + "Woolly Loxodon", + "Wren's Run Vanquisher", + "Yavimaya Elder", + "Yavimaya Sapherd", + "Yeva's Forcemage", + "Zendikar's Roil" + )); + this.populateSlot(10, asList( // Green B + "Abundant Growth", + "Acidic Slime", + "Adventurous Impulse", + "Aerie Bowmasters", + "Aggressive Instinct", + "Aggressive Urge", + "Ainok Survivalist", + "Alpine Grizzly", + "Ambassador Oak", + "Ancient Stirrings", + "Arachnus Web", + "Arbor Elf", + "Aura Gnarlid", + "Avacyn's Pilgrim", + "Backwoods Survivalists", + "Baloth Gorger", + "Basking Rootwalla", + "Beast Within", + "Beneath the Sands", + "Bestial Menace", + "Bitterblade Warrior", + "Bitterbow Sharpshooters", + "Blossom Dryad", + "Borderland Ranger", + "Bristling Boar", + "Broken Bond", + "Canopy Spider", + "Carnivorous Moss-Beast", + "Caustic Caterpillar", + "Charging Rhino", + "Citanul Woodreaders", + "Clip Wings", + "Colossal Dreadmaw", + "Combo Attack", + "Commune with Nature", + "Commune with the Gods", + "Conifer Strider", + "Crop Rotation", + "Crossroads Consecrator", + "Crowned Ceratok", + "Crushing Canopy", + "Cultivate", + "Daggerback Basilisk", + "Dawn's Reflection", + "Death-Hood Cobra", + "Desert Twister", + "Dissenter's Deliverance", + "Dragonscale Boon", + "Durkwood Baloth", + "Earthen Arms", + "Elephant Guide", + "Elves of Deep Shadow", + "Elvish Visionary", + "Elvish Warrior", + "Ember Weaver", + "Epic Confrontation", + "Essence Warden", + "Experiment One", + "Explore", + "Explosive Vegetation", + "Ezuri's Archers", + "Fade into Antiquity", + "Farseek", + "Feed the Clan", + "Feral Krushok", + "Ferocious Zheng", + "Fertile Ground", + "Fog", + "Formless Nurturing", + "Giant Growth", + "Giant Spider", + "Gift of Paradise", + "Gnarlid Pack", + "Grazing Gladehart", + "Greenwood Sentinel", + "Groundswell", + "Guardian Shield-Bearer", + "Hardy Veteran", + "Harmonize", + "Harrow", + "Hunt the Weak", + "Hunter's Ambush", + "Imperious Perfect", + "Invigorate", + "Ivy Lane Denizen", + "Kavu Climber", + "Kavu Primarch", + "Khalni Heart Expedition", + "Kozilek's Predator", + "Kraul Warrior", + "Krosan Tusker", + "Larger Than Life", + "Lay of the Land", + "Longshot Squad", + "Manglehorn", + "Might of the Masses", + "Nature's Claim", + "Oakgnarl Warrior", + "Overgrown Battlement", + "Overrun", + "Peema Outrider", + "Pelakka Wurm", + "Pinion Feast", + "Pouncing Cheetah", + "Priest of Titania", + "Rain of Thorns", + "Rancor", + "Reclaiming Vines", + "Regrowth", + "Relic Crush", + "Return to the Earth", + "Roots", + "Scatter the Seeds", + "Stalking Tiger", + "Sylvan Scrying", + "Tajuru Warcaller", + "Terrain Elemental", + "The Crowd Goes Wild", + "Thornscape Battlemage", + "Thrashing Brontodon", + "Venom Sliver" + )); + this.populateSlot(11, asList( // Multicolored + "Abzan Charm", + "Abzan Guide", + "Agony Warp", + "Akroan Hoplite", + "Armadillo Cloak", + "Armament Corps", + "Azorius Charm", + "Azra Oddsmaker", + "Baleful Strix", + "Baloth Null", + "Bear's Companion", + "Belligerent Brontodon", + "Bituminous Blast", + "Bladewing the Risen", + "Blightning", + "Bloodbraid Elf", + "Boros Challenger", + "Bounding Krasis", + "Call of the Nightwing", + "Campaign of Vengeance", + "Cauldron Dance", + "Citadel Castellan", + "Claim // Fame", + "Coiling Oracle", + "Contraband Kingpin", + "Corpsejack Menace", + "Crosis's Charm", + "Cunning Breezedancer", + "Deathreap Ritual", + "Deny Reality", + "Draconic Disciple", + "Drana's Emissary", + "Engineered Might", + "Esper Charm", + "Ethercaste Knight", + "Ethereal Ambush", + "Extract from Darkness", + "Fire // Ice", + "Fires of Yavimaya", + "Flame-Kin Zealot", + "Fusion Elemental", + "Gelectrode", + "Ghor-Clan Rampager", + "Giantbaiting", + "Gift of Orzhova", + "Goblin Deathraiders", + "Grim Contest", + "Gwyllion Hedge-Mage", + "Hammer Dropper", + "Hidden Stockpile", + "Highspire Mantis", + "Hypothesizzle", + "Iroas's Champion", + "Join Shields", + "Jungle Barrier", + "Kathari Remnant", + "Kin-Tree Invocation", + "Kiora's Follower", + "Kiss of the Amesha", + "Lawmage's Binding", + "Lightning Helix", + "Mardu Roughrider", + "Martial Glory", + "Maverick Thopterist", + "Mercurial Geists", + "Migratory Route", + "Mistmeadow Witch", + "Mortify", + "Naya Charm", + "Nucklavee", + "Obelisk Spider", + "Ochran Assassin", + "Pillory of the Sleepless", + "Plaxcaster Frogling", + "Pollenbright Wings", + "Putrefy", + "Qasali Pridemage", + "Raff Capashen, Ship's Mage", + "Raging Swordtooth", + "Reclusive Artificer", + "Reflector Mage", + "Rhox War Monk", + "Riptide Crab", + "River Hoopoe", + "Rosemane Centaur", + "Rosheen Meanderer", + "Satyr Enchanter", + "Savage Twister", + "Sedraxis Specter", + "Selesnya Guildmage", + "Shambling Remains", + "Shardless Agent", + "Shipwreck Singer", + "Shrewd Hatchling", + "Skyward Eye Prophets", + "Slave of Bolas", + "Soul Manipulation", + "Sprouting Thrinax", + "Stormchaser Chimera", + "Sultai Charm", + "Sultai Soothsayer", + "Tatyova, Benthic Druid", + "Terminate", + "Thopter Foundry", + "Thought Erasure", + "Tithe Drinker", + "Tower Gargoyle", + "Treacherous Terrain", + "Underworld Coinsmith", + "Unflinching Courage", + "Unlicensed Disintegration", + "Urban Evolution", + "Vengeful Rebirth", + "Warden of the Eye", + "Wayfaring Temple", + "Weapons Trainer", + "Wee Dragonauts", + "Winding Constrictor", + "Woolly Thoctar", + "Zealous Persecution", + "Zhur-Taa Druid" + )); + this.populateSlot(12, asList( // Artifact/Land + "Aether Hub", + "Aether Spellbomb", + "Akoum Refuge", + "Alchemist's Vial", + "Alloy Myr", + "Arcane Sanctum", + "Armillary Sphere", + "Artisan of Kozilek", + "Ash Barrens", + "Ashnod's Altar", + "Benthic Infiltrator", + "Blasted Landscape", + "Blighted Fen", + "Blinding Souleater", + "Blossoming Sands", + "Bojuka Bog", + "Bomat Bazaar Barge", + "Bone Saw", + "Bottle Gnomes", + "Breaker of Armies", + "Burnished Hart", + "Call the Scions", + "Cathodion", + "Coldsteel Heart", + "Consulate Dreadnought", + "Copper Carapace", + "Crumbling Necropolis", + "Crystal Ball", + "Crystal Chimes", + "Darksteel Citadel", + "Diamond Mare", + "Dismal Backwater", + "Dreadship Reef", + "Eldrazi Devastator", + "Emmessi Tome", + "Etched Oracle", + "Evolving Wilds", + "Faerie Conclave", + "Farmstead Gleaner", + "Field of Ruin", + "Filigree Familiar", + "Flayer Husk", + "Forgotten Cave", + "Foundry Inspector", + "Fountain of Renewal", + "Frogmite", + "Frontier Bivouac", + "Gateway Plaza", + "Ghost Quarter", + "Goblin Burrows", + "Graypelt Refuge", + "Great Furnace", + "Gruul Signet", + "Guardians of Meletis", + "Heavy Arbalest", + "Herald's Horn", + "Hexplate Golem", + "Hot Soup", + "Icy Manipulator", + "Implement of Malice", + "Irontread Crusher", + "Juggernaut", + "Jungle Hollow", + "Jungle Shrine", + "Kazandu Refuge", + "Krosan Verge", + "Lightning Greaves", + "Loxodon Warhammer", + "Mask of Memory", + "Meteorite", + "Millikin", + "Millstone", + "Mind Stone", + "Mishra's Bauble", + "Mishra's Factory", + "Moonglove Extract", + "Mortarpod", + "Myr Retriever", + "Myr Sire", + "New Benalia", + "Ornithopter", + "Orzhov Basilica", + "Palladium Myr", + "Peace Strider", + "Perilous Myr", + "Pilgrim's Eye", + "Prophetic Prism", + "Reliquary Tower", + "Renegade Map", + "Rhonas's Monument", + "Rogue's Passage", + "Sandsteppe Citadel", + "Sandstone Oracle", + "Scoured Barrens", + "Sejiri Refuge", + "Serrated Arrows", + "Short Sword", + "Sigil of Valor", + "Simic Locket", + "Skarrg, the Rage Pits", + "Skullclamp", + "Skyscanner", + "Sol Ring", + "Sorcerer's Broom", + //"Spy Kit", + "Sunset Pyramid", + "Suspicious Bookcase", + "Swiftwater Cliffs", + "Tectonic Edge", + "Temple of the False God", + "Thornwood Falls", + "Thought Vessel", + "Thran Dynamo", + "Thran Golem", + "Tormod's Crypt", + "Trepanation Blade", + "Unclaimed Territory", + "Universal Automaton", + "Universal Solvent", + "Whispersilk Cloak", + "Wirewood Lodge" + )); + this.populateSlot(13, asList( // Pre-M15, sourced from magic.wizards.com + "Avalanche Riders", + "Belbe's Portal", + "Black Knight", + "Dauthi Mindripper", + "Knight of Dawn", + "Maelstrom Archangel", + "Mana Tithe", + "Oracle of Nectars", + "Perish", + "Pestilence", + "Tower of Eons", + "Ana Sanctuary", + "Ancient Den", + "Ancient Ziggurat", + "Angelic Destiny", + "Archangel", + "Asceticism", + "Assemble the Legion", + "Athreos, God of Passage", + "Aura Shards", + "Bear Cub", + "Bloom Tender", + "Bonesplitter", + "Bow of Nylea", + "Brimstone Dragon", + "Brimstone Mage", + "Cairn Wanderer", + "Carpet of Flowers", + "Centaur Glade", + "Chancellor of the Annex", + "Chatter of the Squirrel", + "Chromatic Star", + "Contagion Clasp", + "Corrupted Conscience", + "Cragganwick Cremator", + "Crenellated Wall", + "Crystal Shard", + "Darksteel Garrison", + "Defense of the Heart", + "Dictate of Erebos", + "Dolmen Gate", + "Dominus of Fealty", + "Doomgape", + "Draco", + "Dragon Broodmother", + "Dragon Mask", + "Dungrove Elder", + "Eater of Days", + "Elixir of Immortality", + "Empyrial Armor", + "Enchanted Evening", + "Energy Field", + "Exsanguinate", + "Flameshot", + "Floodgate", + "Font of Mythos", + "Ghitu War Cry", + "Gilt-Leaf Palace", + "Goblin Game", + "Greater Gargadon", + "Guided Passage", + "Haakon, Stromgald Scourge", + "Hedron Crab", + "Helm of Awakening", + "Hunter of Eyeblights", + "Hurricane", + "Hypnotic Specter", + "Impending Disaster", + "Jushi Apprentice", + "Kaervek's Torch", + "Kargan Dragonlord", + "Knollspine Dragon", + "Kor Chant", + "Kruphix, God of Horizons", + "Lashknife Barrier", + "Lotus Petal", + "Magus of the Moat", + "Manamorphose", + "Martyr's Bond", + "Martyr's Cause", + "Master Transmuter", + "Meddling Mage", + "Mistform Shrieker", + "Nemesis of Reason", + "Pathrazer of Ulamog", + "Phantasmal Dragon", + "Phantom Centaur", + "Phyrexian Metamorph", + "Phyrexian Soulgorger", + "Purphoros, God of the Forge", + "Questing Phelddagrif", + "Rage Reflection", + "Recoup", + "Release the Ants", + "Rhys the Redeemed", + "Rhystic Study", + "Rishadan Footpad", + "Rith, the Awakener", + "River Boa", + "Sadistic Hypnotist", + "Sakashima the Impostor", + "Sapphire Charm", + "Shrouded Lore", + "Soothsaying", + "Sorin Markov", + "Squirrel Wrangler", + "Thieving Magpie", + "Thrun, the Last Troll", + "Time Sieve", + "Timely Reinforcements", + "Tinker", + "Toxin Sliver", + "Triumph of the Hordes", + "Umbral Mantle", + "Viashino Sandstalker", + "Violent Ultimatum", + "Volunteer Reserves", + "Wargate", + "Weathered Wayfarer", + "Wild Nacatl", + "Yavimaya's Embrace" + )); + this.populateSlot(14, asList( // Post-M15 rare / mythic, sourced from magic.wizards.com + "Adorned Pouncer", + "Aetherflux Reservoir", + "Akroan Horse", + "Alesha, Who Smiles at Death", + "Alhammarret's Archive", + "All Is Dust", + "Aminatou's Augury", + "Angel of the Dire Hour", + "Anger of the Gods", + "Animar, Soul of Elements", + "Approach of the Second Sun", + "Arch of Orazca", + "Basilisk Collar", + "Beacon of Immortality", + "Beastmaster Ascension", + "Birds of Paradise", + "Black Market", + "Boompile", + "Boros Reckoner", + "Caged Sun", + "Cauldron of Souls", + "Champion of the Parish", + "Chaos Warp", + "Chasm Skulker", + "Chromatic Lantern", + "Coat of Arms", + "Collective Brutality", + "Commit // Memory", + "Courser of Kruphix", + "Coveted Jewel", + "Daretti, Scrap Savant", + "Deadly Tempest", + "Debtors' Knell", + "Decree of Justice", + "Deepglow Skate", + "Desolation Twin", + "Dictate of Heliod", + "Djinn of Wishes", + "Dragonlord Ojutai", + "Drana, Kalastria Bloodchief", + "Eldrazi Monument", + "Eldritch Evolution", + "Elesh Norn, Grand Cenobite", + "Evra, Halcyon Witness", + "Expropriate", + "Fblthp, the Lost", + "Felidar Sovereign", + "Gideon Jura", + "Goblin Charbelcher", + "Goblin Piledriver", + "Gonti, Lord of Luxury", + "Grasp of Fate", + "Grave Titan", + "Gravecrawler", + "Greenbelt Rampager", + "Hornet Nest", + "Kiki-Jiki, Mirror Breaker", + "Kolaghan's Command", + "Krenko, Mob Boss", + "Liliana, Death's Majesty", + "Living Death", + "Mana Crypt", + "Meandering Towershell", + "Memory Erosion", + "Meren of Clan Nel Toth", + "Mimic Vat", + "Mind Shatter", + "Mind Spring", + "Mirran Crusader", + "Mirror Entity", + "Misdirection", + "Mizzix's Mastery", + "Mycoloth", + "Mystic Confluence", + "Nighthowler", + "Nin, the Pain Artist", + "Nissa, Voice of Zendikar", + "Odric, Lunarch Marshal", + "Phyrexian Arena", + "Phyrexian Plaguelord", + "Precursor Golem", + "Preyseizer Dragon", + "Queen Marchesa", + "Reality Scramble", + "Recruiter of the Guard", + "Release the Gremlins", + "Revel in Riches", + "Rune-Scarred Demon", + "Savage Knuckleblade", + "Selvala, Heart of the Wilds", + "Serendib Efreet", + "Sewer Nemesis", + "Shamanic Revelation", + "Sliver Hivelord", + "Solemn Simulacrum", + "Spawning Grounds", + "Star of Extinction", + "Steamflogger Boss", + "Stunt Double", + "Sudden Demise", + "Supreme Verdict", + "Sword of the Animist", + "Talrand, Sky Summoner", + "Taurean Mauler", + "Teferi, Temporal Archmage", + "Teferi's Protection", + "Temporal Mastery", + "Tempt with Discovery", + "Thalia's Lancers", + "The Gitrog Monster", + "The Mirari Conjecture", + "Tireless Tracker", + "Torment of Hailfire", + "Trading Post", + "Two-Headed Giant", + "Urza's Rage", + "Vigor", + "Wheel of Fate", + "Whelming Wave", + "Whir of Invention", + "Yuriko, the Tiger's Shadow" + )); + this.populateBoosterSpecialSlot(); + } + + /** + * Populate the given booster slot. + * @param slotNumber booster slot number. 1-indexed, valid range is 1-14, as 15 is the special slot + * @param cardNames List of English card names found on the given slot + */ + private void populateSlot(int slotNumber, List cardNames) { + final List cardInfoList = this.possibleCardsPerBoosterSlot.get(slotNumber); + for(String name : cardNames) { + final CardInfo cardWithGivenName = CardRepository.instance.findCardWPreferredSet(name, this.code, false); + cardInfoList.add(cardWithGivenName); + } + } + + /** + * Populate the special slot. Defined as protected to allow overwriting this if the playtest cards + * from the convention edition are ever implemented. + */ + protected void populateBoosterSpecialSlot() { + CardCriteria criteria = new CardCriteria(); + criteria.setCodes("FMB1"); + this.possibleCardsPerBoosterSlot.get(15).addAll(CardRepository.instance.findCards(criteria)); } @Override public List createBooster() { - List booster = new ArrayList(); - for (List cardSheet : cardSheets) { - String cardName = cardSheet.get(RandomUtil.nextInt(121)); - List cardInfo = new ArrayList(); - cardInfo.add(CardRepository.instance.findCard(this.code, cardName)); - addToBooster(booster, cardInfo); + if(this.possibleCardsPerBoosterSlot.isEmpty()) { + // Generate the map only once + this.populateBoosterSlotMap(); + } + final List booster = new ArrayList<>(15); + for(int slot = 1; slot < 16; ++slot) { + final List availableCards = this.possibleCardsPerBoosterSlot.get(slot); + final int printSheetCardNumber = RandomUtil.nextInt(availableCards.size()); + final Card chosenCard = availableCards.get(printSheetCardNumber).getCard(); + booster.add(chosenCard); } return booster; } - private static final List> cardSheets = new ArrayList(); - - static { - // Sheet data comes from http://www.lethe.xyz/mtg/collation/mb1.html - List sheet; - sheet = new ArrayList(); - sheet.add("Abzan Falconer"); - sheet.add("Abzan Runemark"); - sheet.add("Acrobatic Maneuver"); - sheet.add("Affa Protector"); - sheet.add("Ainok Bond-Kin"); - sheet.add("Alley Evasion"); - sheet.add("Angelic Purge"); - sheet.add("Angelsong"); - sheet.add("Apostle's Blessing"); - sheet.add("Arrester's Zeal"); - sheet.add("Artful Maneuver"); - sheet.add("Aura of Silence"); - sheet.add("Bartered Cow"); - sheet.add("Bonds of Faith"); - sheet.add("Borrowed Grace"); - sheet.add("Bulwark Giant"); - sheet.add("Caravan Escort"); - sheet.add("Caught in the Brights"); - sheet.add("Celestial Crusader"); - sheet.add("Celestial Flare"); - sheet.add("Center Soul"); - sheet.add("Cliffside Lookout"); - sheet.add("Conviction"); - sheet.add("Countless Gears Renegade"); - sheet.add("Court Street Denizen"); - sheet.add("Crib Swap"); - sheet.add("Danitha Capashen, Paragon"); - sheet.add("Daring Skyjek"); - sheet.add("Decommission"); - sheet.add("Defiant Strike"); - sheet.add("Desperate Sentry"); - sheet.add("Devilthorn Fox"); - sheet.add("Disposal Mummy"); - sheet.add("Divine Favor"); - sheet.add("Dragon's Eye Sentry"); - sheet.add("Dragon's Presence"); - sheet.add("Eddytrail Hawk"); - sheet.add("Enduring Victory"); - sheet.add("Enlightened Ascetic"); - sheet.add("Ephemeral Shields"); - sheet.add("Ephemerate"); - sheet.add("Excoriate"); - sheet.add("Expose Evil"); - sheet.add("Eyes in the Skies"); - sheet.add("Faith's Fetters"); - sheet.add("Feat of Resistance"); - sheet.add("Felidar Umbra"); - sheet.add("Firehoof Cavalry"); - sheet.add("Ghostblade Eidolon"); - sheet.add("Gift of Estates"); - sheet.add("Glaring Aegis"); - sheet.add("Glint-Sleeve Artisan"); - sheet.add("God-Pharaoh's Faithful"); - sheet.add("Grasp of the Hieromancer"); - sheet.add("Gust Walker"); - sheet.add("Gustcloak Skirmisher"); - sheet.add("Healing Hands"); - sheet.add("Hyena Umbra"); - sheet.add("Infantry Veteran"); - sheet.add("Inquisitor's Ox"); - sheet.add("Isolation Zone"); - sheet.add("Knight of Old Benalia"); - sheet.add("Knight of Sorrows"); - sheet.add("Kor Skyfisher"); - sheet.add("Leonin Relic-Warder"); - sheet.add("Lightform"); - sheet.add("Lone Missionary"); - sheet.add("Lonesome Unicorn // Rider in Need"); - sheet.add("Lotus-Eye Mystics"); - sheet.add("Loxodon Partisan"); - sheet.add("Mardu Hordechief"); - sheet.add("Marked by Honor"); - sheet.add("Meditation Puzzle"); - sheet.add("Mortal's Ardor"); - sheet.add("Mother of Runes"); - sheet.add("Ninth Bridge Patrol"); - sheet.add("Ondu Greathorn"); - sheet.add("Ondu War Cleric"); - sheet.add("Oreskos Swiftclaw"); - sheet.add("Oust"); - sheet.add("Palace Jailer"); - sheet.add("Path to Exile"); - sheet.add("Peace of Mind"); - sheet.add("Prowling Caracal"); - sheet.add("Resurrection"); - sheet.add("Rhet-Crop Spearmaster"); - sheet.add("Righteous Cause"); - sheet.add("Savannah Lions"); - sheet.add("Searing Light"); - sheet.add("Serra's Embrace"); - sheet.add("Sheer Drop"); - sheet.add("Shining Aerosaur"); - sheet.add("Shining Armor"); - sheet.add("Siegecraft"); - sheet.add("Skymarcher Aspirant"); - sheet.add("Skyspear Cavalry"); - sheet.add("Snubhorn Sentry"); - sheet.add("Soul Parry"); - sheet.add("Soul Summons"); - sheet.add("Soul-Strike Technique"); - sheet.add("Soulmender"); - sheet.add("Sparring Mummy"); - sheet.add("Spectral Gateguards"); - sheet.add("Stave Off"); - sheet.add("Steadfast Sentinel"); - sheet.add("Stone Haven Medic"); - sheet.add("Suppression Bonds"); - sheet.add("Survive the Night"); - sheet.add("Territorial Hammerskull"); - sheet.add("Thraben Inspector"); - sheet.add("Thraben Standard Bearer"); - sheet.add("Topan Freeblade"); - sheet.add("Veteran Swordsmith"); - sheet.add("Village Bell-Ringer"); - sheet.add("Voice of the Provinces"); - sheet.add("Wall of One Thousand Cuts"); - sheet.add("Wandering Champion"); - sheet.add("War Behemoth"); - sheet.add("Windborne Charge"); - sheet.add("Wing Shards"); - sheet.add("Winged Shepherd"); - cardSheets.add(sheet); - sheet = new ArrayList(); - sheet.add("Adanto Vanguard"); - sheet.add("Ajani's Pridemate"); - sheet.add("Angel of Mercy"); - sheet.add("Angel of Renewal"); - sheet.add("Angelic Gift"); - sheet.add("Arrest"); - sheet.add("Aven Battle Priest"); - sheet.add("Aven Sentry"); - sheet.add("Ballynock Cohort"); - sheet.add("Battle Mastery"); - sheet.add("Benevolent Ancestor"); - sheet.add("Blade Instructor"); - sheet.add("Blessed Spirits"); - sheet.add("Built to Last"); - sheet.add("Candlelight Vigil"); - sheet.add("Cartouche of Solidarity"); - sheet.add("Cast Out"); - sheet.add("Cathar's Companion"); - sheet.add("Champion of Arashin"); - sheet.add("Charge"); - sheet.add("Cloudshift"); - sheet.add("Coalition Honor Guard"); - sheet.add("Collar the Culprit"); - sheet.add("Congregate"); - sheet.add("Court Homunculus"); - sheet.add("Darksteel Mutation"); - sheet.add("Dauntless Cathar"); - sheet.add("Dawnglare Invoker"); - sheet.add("Disenchant"); - sheet.add("Dismantling Blow"); - sheet.add("Djeru's Renunciation"); - sheet.add("Djeru's Resolve"); - sheet.add("Doomed Traveler"); - sheet.add("Dragon Bell Monk"); - sheet.add("Emerge Unscathed"); - sheet.add("Encampment Keeper"); - sheet.add("Encircling Fissure"); - sheet.add("Excavation Elephant"); - sheet.add("Expedition Raptor"); - sheet.add("Exultant Skymarcher"); - sheet.add("Faithbearer Paladin"); - sheet.add("Felidar Guardian"); - sheet.add("Fencing Ace"); - sheet.add("Fiend Hunter"); - sheet.add("Forsake the Worldly"); - sheet.add("Fortify"); - sheet.add("Fragmentize"); - sheet.add("Geist of the Moors"); - sheet.add("Gideon's Lawkeeper"); - sheet.add("Gleam of Resistance"); - sheet.add("Gods Willing"); - sheet.add("Great-Horn Krushok"); - sheet.add("Guided Strike"); - sheet.add("Healer's Hawk"); - sheet.add("Healing Grace"); - sheet.add("Heavy Infantry"); - sheet.add("Humble"); - sheet.add("Inspired Charge"); - sheet.add("Intrusive Packbeast"); - sheet.add("Iona's Judgment"); - sheet.add("Jubilant Mascot"); - sheet.add("Knight of Cliffhaven"); - sheet.add("Knight of the Skyward Eye"); - sheet.add("Knight of the Tusk"); - sheet.add("Kor Bladewhirl"); - sheet.add("Kor Firewalker"); - sheet.add("Kor Hookmaster"); - sheet.add("Kor Sky Climber"); - sheet.add("Lieutenants of the Guard"); - sheet.add("Lightwalker"); - sheet.add("Lingering Souls"); - sheet.add("Looming Altisaur"); - sheet.add("Loyal Sentry"); - sheet.add("Lunarch Mantle"); - sheet.add("Midnight Guard"); - sheet.add("Momentary Blink"); - sheet.add("Moonlit Strider"); - sheet.add("Nyx-Fleece Ram"); - sheet.add("Pacifism"); - sheet.add("Palace Sentinels"); - sheet.add("Paladin of the Bloodstained"); - sheet.add("Path of Peace"); - sheet.add("Pegasus Courser"); - sheet.add("Pentarch Ward"); - sheet.add("Pitfall Trap"); - sheet.add("Pressure Point"); - sheet.add("Promise of Bunrei"); - sheet.add("Rally the Peasants"); - sheet.add("Raptor Companion"); - sheet.add("Refurbish"); - sheet.add("Renewed Faith"); - sheet.add("Retreat to Emeria"); - sheet.add("Reviving Dose"); - sheet.add("Rootborn Defenses"); - sheet.add("Sacred Cat"); - sheet.add("Sanctum Gargoyle"); - sheet.add("Sandstorm Charger"); - sheet.add("Seal of Cleansing"); - sheet.add("Seeker of the Way"); - sheet.add("Sensor Splicer"); - sheet.add("Seraph of the Suns"); - sheet.add("Serra Disciple"); - sheet.add("Shoulder to Shoulder"); - sheet.add("Silverchase Fox"); - sheet.add("Skyhunter Skirmisher"); - sheet.add("Slash of Talons"); - sheet.add("Soul Warden"); - sheet.add("Stalwart Aven"); - sheet.add("Star-Crowned Stag"); - sheet.add("Sunlance"); - sheet.add("Sunrise Seeker"); - sheet.add("Swords to Plowshares"); - sheet.add("Take Vengeance"); - sheet.add("Tandem Tactics"); - sheet.add("Terashi's Grasp"); - sheet.add("Unwavering Initiate"); - sheet.add("Wake the Reflections"); - sheet.add("Wall of Omens"); - sheet.add("Wild Griffin"); - sheet.add("Youthful Knight"); - sheet.add("Zealous Strike"); - cardSheets.add(sheet); - sheet = new ArrayList(); - sheet.add("Amass the Components"); - sheet.add("Anticipate"); - sheet.add("Artificer's Assistant"); - sheet.add("Augury Owl"); - sheet.add("Befuddle"); - sheet.add("Benthic Giant"); - sheet.add("Calculated Dismissal"); - sheet.add("Call to Heel"); - sheet.add("Caller of Gales"); - sheet.add("Cancel"); - sheet.add("Capture Sphere"); - sheet.add("Catalog"); - sheet.add("Chart a Course"); - sheet.add("Chillbringer"); - sheet.add("Chronostutter"); - sheet.add("Circular Logic"); - sheet.add("Clear the Mind"); - sheet.add("Cloak of Mists"); - sheet.add("Cloudkin Seer"); - sheet.add("Clutch of Currents"); - sheet.add("Compelling Argument"); - sheet.add("Condescend"); - sheet.add("Containment Membrane"); - sheet.add("Contingency Plan"); - sheet.add("Contradict"); - sheet.add("Crashing Tide"); - sheet.add("Crush Dissent"); - sheet.add("Curio Vendor"); - sheet.add("Daze"); - sheet.add("Decision Paralysis"); - sheet.add("Deep Freeze"); - sheet.add("Dispel"); - sheet.add("Displace"); - sheet.add("Drag Under"); - sheet.add("Dragon's Eye Savants"); - sheet.add("Dreadwaters"); - sheet.add("Embodiment of Spring"); - sheet.add("Ensoul Artifact"); - sheet.add("Everdream"); - sheet.add("Failed Inspection"); - sheet.add("Flashfreeze"); - sheet.add("Fledgling Mawcor"); - sheet.add("Fleeting Distraction"); - sheet.add("Fogwalker"); - sheet.add("Foil"); - sheet.add("Frantic Search"); - sheet.add("Frilled Sea Serpent"); - sheet.add("Gaseous Form"); - sheet.add("Glint"); - sheet.add("Gone Missing"); - sheet.add("Grasp of Phantoms"); - sheet.add("Guard Gomazoa"); - sheet.add("Gurmag Drowner"); - sheet.add("Gush"); - sheet.add("Hightide Hermit"); - sheet.add("Hinterland Drake"); - sheet.add("Humongulus"); - sheet.add("Inkfathom Divers"); - sheet.add("Invisibility"); - sheet.add("Jeering Homunculus"); - sheet.add("Jeskai Sage"); - sheet.add("Kiora's Dambreaker"); - sheet.add("Laboratory Brute"); - sheet.add("Laboratory Maniac"); - sheet.add("Labyrinth Guardian"); - sheet.add("Messenger Jays"); - sheet.add("Mind Sculpt"); - sheet.add("Mist Raven"); - sheet.add("Mnemonic Wall"); - sheet.add("Monastery Loremaster"); - sheet.add("Murder of Crows"); - sheet.add("Nagging Thoughts"); - sheet.add("Niblis of Dusk"); - sheet.add("Nine-Tail White Fox"); - sheet.add("Ojutai's Breath"); - sheet.add("Phyrexian Ingester"); - sheet.add("Pondering Mage"); - sheet.add("Predict"); - sheet.add("Purple-Crystal Crab"); - sheet.add("Refocus"); - sheet.add("Riftwing Cloudskate"); - sheet.add("River Darter"); - sheet.add("Sailor of Means"); - sheet.add("Scroll Thief"); - sheet.add("Send to Sleep"); - sheet.add("Shipwreck Looter"); - sheet.add("Silent Observer"); - sheet.add("Silvergill Adept"); - sheet.add("Singing Bell Strike"); - sheet.add("Skaab Goliath"); - sheet.add("Skitter Eel"); - sheet.add("Sleep"); - sheet.add("Slipstream Eel"); - sheet.add("Slither Blade"); - sheet.add("Sphinx's Tutelage"); - sheet.add("Stream of Thought"); - sheet.add("Surrakar Banisher"); - sheet.add("Syr Elenora, the Discerning"); - sheet.add("Thought Collapse"); - sheet.add("Thunder Drake"); - sheet.add("Tidal Warrior"); - sheet.add("Trail of Evidence"); - sheet.add("Treasure Cruise"); - sheet.add("Treasure Mage"); - sheet.add("Trinket Mage"); - sheet.add("Turn Aside"); - sheet.add("Uncomfortable Chill"); - sheet.add("Wall of Frost"); - sheet.add("Warden of Evos Isle"); - sheet.add("Watercourser"); - sheet.add("Weldfast Wingsmith"); - sheet.add("Welkin Tern"); - sheet.add("Wind Drake"); - sheet.add("Wind Strider"); - sheet.add("Wind-Kin Raiders"); - sheet.add("Windcaller Aven"); - sheet.add("Wishcoin Crab"); - sheet.add("Wishful Merfolk"); - sheet.add("Wretched Gryff"); - sheet.add("Write into Being"); - sheet.add("Youthful Scholar"); - cardSheets.add(sheet); - sheet = new ArrayList(); - sheet.add("Academy Journeymage"); - sheet.add("Aether Tradewinds"); - sheet.add("Aethersnipe"); - sheet.add("Amphin Pathmage"); - sheet.add("Arcane Denial"); - sheet.add("Archaeomancer"); - sheet.add("Archetype of Imagination"); - sheet.add("Augur of Bolas"); - sheet.add("Bastion Inventor"); - sheet.add("Bewilder"); - sheet.add("Blue Elemental Blast"); - sheet.add("Borrowing 100,000 Arrows"); - sheet.add("Brainstorm"); - sheet.add("Brilliant Spectrum"); - sheet.add("Brine Elemental"); - sheet.add("Cartouche of Knowledge"); - sheet.add("Castaway's Despair"); - sheet.add("Choking Tethers"); - sheet.add("Citywatch Sphinx"); - sheet.add("Claustrophobia"); - sheet.add("Cloud Elemental"); - sheet.add("Cloudreader Sphinx"); - sheet.add("Concentrate"); - sheet.add("Convolute"); - sheet.add("Coral Trickster"); - sheet.add("Coralhelm Guide"); - sheet.add("Counterspell"); - sheet.add("Court Hussar"); - sheet.add("Curiosity"); - sheet.add("Dazzling Lights"); - sheet.add("Deep Analysis"); - sheet.add("Diminish"); - sheet.add("Dirgur Nemesis"); - sheet.add("Distortion Strike"); - sheet.add("Divination"); - sheet.add("Doorkeeper"); - sheet.add("Dream Cache"); - sheet.add("Dream Twist"); - sheet.add("Eel Umbra"); - sheet.add("Enlightened Maniac"); - sheet.add("Errant Ephemeron"); - sheet.add("Essence Scatter"); - sheet.add("Exclude"); - sheet.add("Fact or Fiction"); - sheet.add("Faerie Invaders"); - sheet.add("Faerie Mechanist"); - sheet.add("Fascination"); - sheet.add("Fathom Seer"); - sheet.add("Fog Bank"); - sheet.add("Forbidden Alchemy"); - sheet.add("Frost Lynx"); - sheet.add("Ghost Ship"); - sheet.add("Glacial Crasher"); - sheet.add("Hieroglyphic Illumination"); - sheet.add("Horseshoe Crab"); - sheet.add("Impulse"); - sheet.add("Ior Ruin Expedition"); - sheet.add("Jace's Phantasm"); - sheet.add("Jwar Isle Avenger"); - sheet.add("Lay Claim"); - sheet.add("Leapfrog"); - sheet.add("Mahamoti Djinn"); - sheet.add("Man-o'-War"); - sheet.add("Mana Leak"); - sheet.add("Maximize Altitude"); - sheet.add("Memory Lapse"); - sheet.add("Merfolk Looter"); - sheet.add("Metallic Rebuke"); - sheet.add("Mulldrifter"); - sheet.add("Mystic of the Hidden Way"); - sheet.add("Mystical Teachings"); - sheet.add("Negate"); - sheet.add("Ninja of the Deep Hours"); - sheet.add("Ojutai Interceptor"); - sheet.add("Omenspeaker"); - sheet.add("Opportunity"); - sheet.add("Opt"); - sheet.add("Peel from Reality"); - sheet.add("Phantasmal Bear"); - sheet.add("Portent"); - sheet.add("Preordain"); - sheet.add("Prodigal Sorcerer"); - sheet.add("Propaganda"); - sheet.add("Prosperous Pirates"); - sheet.add("Repulse"); - sheet.add("Retraction Helix"); - sheet.add("Ringwarden Owl"); - sheet.add("River Serpent"); - sheet.add("Riverwheel Aerialists"); - sheet.add("Sage of Lat-Nam"); - sheet.add("Sea Gate Oracle"); - sheet.add("Sealock Monster"); - sheet.add("Secrets of the Golden City"); - sheet.add("Shaper Parasite"); - sheet.add("Shimmerscale Drake"); - sheet.add("Sigiled Starfish"); - sheet.add("Skittering Crustacean"); - sheet.add("Snap"); - sheet.add("Snapping Drake"); - sheet.add("Somber Hoverguard"); - sheet.add("Spire Monitor"); - sheet.add("Steady Progress"); - sheet.add("Stitched Drake"); - sheet.add("Storm Sculptor"); - sheet.add("Strategic Planning"); - sheet.add("Syncopate"); - sheet.add("Tandem Lookout"); - sheet.add("Temporal Fissure"); - sheet.add("Thornwind Faeries"); - sheet.add("Thought Scour"); - sheet.add("Thoughtcast"); - sheet.add("Thrummingbird"); - sheet.add("Tidal Wave"); - sheet.add("Totally Lost"); - sheet.add("Treasure Hunt"); - sheet.add("Triton Tactics"); - sheet.add("Vapor Snag"); - sheet.add("Vigean Graftmage"); - sheet.add("Wave-Wing Elemental"); - sheet.add("Whiplash Trap"); - sheet.add("Windrider Eel"); - cardSheets.add(sheet); - sheet = new ArrayList(); - sheet.add("Aid the Fallen"); - sheet.add("Alesha's Vanguard"); - sheet.add("Alley Strangler"); - sheet.add("Ambitious Aetherborn"); - sheet.add("Ancestral Vengeance"); - sheet.add("Annihilate"); - sheet.add("Bala Ged Scorpion"); - sheet.add("Bitter Revelation"); - sheet.add("Bladebrand"); - sheet.add("Blighted Bat"); - sheet.add("Blistergrub"); - sheet.add("Bone Splinters"); - sheet.add("Boon of Emrakul"); - sheet.add("Breeding Pit"); - sheet.add("Butcher's Glee"); - sheet.add("Cabal Therapy"); - sheet.add("Cackling Imp"); - sheet.add("Cadaver Imp"); - sheet.add("Catacomb Slug"); - sheet.add("Certain Death"); - sheet.add("Coat with Venom"); - sheet.add("Corpsehatch"); - sheet.add("Covenant of Blood"); - sheet.add("Crow of Dark Tidings"); - sheet.add("Dark Dabbling"); - sheet.add("Dark Withering"); - sheet.add("Darkblast"); - sheet.add("Dead Reveler"); - sheet.add("Deadeye Tormentor"); - sheet.add("Defeat"); - sheet.add("Demon's Grasp"); - sheet.add("Demonic Tutor"); - sheet.add("Demonic Vigor"); - sheet.add("Dismember"); - sheet.add("Disowned Ancestor"); - sheet.add("Doomed Dissenter"); - sheet.add("Douse in Gloom"); - sheet.add("Dread Return"); - sheet.add("Dregscape Zombie"); - sheet.add("Dukhara Scavenger"); - sheet.add("Dune Beetle"); - sheet.add("Duress"); - sheet.add("Farbog Revenant"); - sheet.add("Fetid Imp"); - sheet.add("First-Sphere Gargantua"); - sheet.add("Flesh to Dust"); - sheet.add("Fretwork Colony"); - sheet.add("Genju of the Fens"); - sheet.add("Ghoulcaller's Accomplice"); - sheet.add("Grasping Scoundrel"); - sheet.add("Gravepurge"); - sheet.add("Grim Discovery"); - sheet.add("Hideous End"); - sheet.add("Induce Despair"); - sheet.add("Infernal Scarring"); - sheet.add("Infest"); - sheet.add("Instill Infection"); - sheet.add("Kalastria Nightwatch"); - sheet.add("Krumar Bond-Kin"); - sheet.add("Lazotep Behemoth"); - sheet.add("Macabre Waltz"); - sheet.add("Marauding Boneslasher"); - sheet.add("Mark of the Vampire"); - sheet.add("Marsh Hulk"); - sheet.add("Merciless Resolve"); - sheet.add("Miasmic Mummy"); - sheet.add("Mind Rake"); - sheet.add("Mire's Malice"); - sheet.add("Murder"); - sheet.add("Murderous Compulsion"); - sheet.add("Nantuko Husk"); - sheet.add("Never Happened"); - sheet.add("Nirkana Assassin"); - sheet.add("Plaguecrafter"); - sheet.add("Prowling Pangolin"); - sheet.add("Rakshasa's Secret"); - sheet.add("Read the Bones"); - sheet.add("Reaper of Night // Harvest Fear"); - sheet.add("Reassembling Skeleton"); - sheet.add("Reckless Imp"); - sheet.add("Reckless Spite"); - sheet.add("Returned Centaur"); - sheet.add("Revenant"); - sheet.add("Rite of the Serpent"); - sheet.add("Ruin Rat"); - sheet.add("Scrounger of Souls"); - sheet.add("Sengir Vampire"); - sheet.add("Shambling Attendants"); - sheet.add("Shambling Goblin"); - sheet.add("Shriekmaw"); - sheet.add("Silumgar Butcher"); - sheet.add("Skeleton Archer"); - sheet.add("Stab Wound"); - sheet.add("Stallion of Ashmouth"); - sheet.add("Stinkweed Imp"); - sheet.add("Stromkirk Patrol"); - sheet.add("Subtle Strike"); - sheet.add("Sultai Runemark"); - sheet.add("Tar Snare"); - sheet.add("Thallid Omnivore"); - sheet.add("The Eldest Reborn"); - sheet.add("Thornbow Archer"); - sheet.add("Thraben Foulbloods"); - sheet.add("Torment of Venom"); - sheet.add("Touch of Moonglove"); - sheet.add("Twins of Maurer Estate"); - sheet.add("Undercity's Embrace"); - sheet.add("Untamed Hunger"); - sheet.add("Unyielding Krumar"); - sheet.add("Vampire Champion"); - sheet.add("Vampire Envoy"); - sheet.add("Vampire Nighthawk"); - sheet.add("Vessel of Malignity"); - sheet.add("Voracious Null"); - sheet.add("Vraska's Finisher"); - sheet.add("Walk the Plank"); - sheet.add("Warteye Witch"); - sheet.add("Weight of the Underworld"); - sheet.add("Weirded Vampire"); - sheet.add("Yargle, Glutton of Urborg"); - sheet.add("Zulaport Chainmage"); - cardSheets.add(sheet); - sheet = new ArrayList(); - sheet.add("Absorb Vis"); - sheet.add("Accursed Spirit"); - sheet.add("Altar's Reap"); - sheet.add("Animate Dead"); - sheet.add("Baleful Ammit"); - sheet.add("Balustrade Spy"); - sheet.add("Bartizan Bats"); - sheet.add("Black Cat"); - sheet.add("Blessing of Belzenlok"); - sheet.add("Blightsoil Druid"); - sheet.add("Blood Artist"); - sheet.add("Bloodrite Invoker"); - sheet.add("Caligo Skin-Witch"); - sheet.add("Carrion Feeder"); - sheet.add("Carrion Imp"); - sheet.add("Catacomb Crocodile"); - sheet.add("Caustic Tar"); - sheet.add("Child of Night"); - sheet.add("Costly Plunder"); - sheet.add("Cower in Fear"); - sheet.add("Crippling Blight"); - sheet.add("Cursed Minotaur"); - sheet.add("Daring Demolition"); - sheet.add("Dark Ritual"); - sheet.add("Deadbridge Shaman"); - sheet.add("Death Denied"); - sheet.add("Desperate Castaways"); - sheet.add("Diabolic Edict"); - sheet.add("Die Young"); - sheet.add("Dinosaur Hunter"); - sheet.add("Dirge of Dread"); - sheet.add("Dread Drone"); - sheet.add("Dreadbringer Lampads"); - sheet.add("Driver of the Dead"); - sheet.add("Drudge Sentinel"); - sheet.add("Dusk Charger"); - sheet.add("Dusk Legion Zealot"); - sheet.add("Epicure of Blood"); - sheet.add("Erg Raiders"); - sheet.add("Eternal Thirst"); - sheet.add("Evincar's Justice"); - sheet.add("Executioner's Capsule"); - sheet.add("Eyeblight's Ending"); - sheet.add("Fallen Angel"); - sheet.add("Fatal Push"); - sheet.add("Fen Hauler"); - sheet.add("Feral Abomination"); - sheet.add("Festercreep"); - sheet.add("Festering Newt"); - sheet.add("Fill with Fright"); - sheet.add("Fungal Infection"); - sheet.add("Ghostly Changeling"); - sheet.add("Gifted Aetherborn"); - sheet.add("Go for the Throat"); - sheet.add("Gravedigger"); - sheet.add("Gray Merchant of Asphodel"); - sheet.add("Grim Affliction"); - sheet.add("Grixis Slavedriver"); - sheet.add("Grotesque Mutation"); - sheet.add("Gruesome Fate"); - sheet.add("Gurmag Angler"); - sheet.add("Hired Blade"); - sheet.add("Hound of the Farbogs"); - sheet.add("Innocent Blood"); - sheet.add("Inquisition of Kozilek"); - sheet.add("Lawless Broker"); - sheet.add("Lethal Sting"); - sheet.add("Lord of the Accursed"); - sheet.add("March of the Drowned"); - sheet.add("Mephitic Vapors"); - sheet.add("Mind Rot"); - sheet.add("Moment of Craving"); - sheet.add("Nameless Inversion"); - sheet.add("Night's Whisper"); - sheet.add("Noxious Dragon"); - sheet.add("Okiba-Gang Shinobi"); - sheet.add("Painful Lesson"); - sheet.add("Phyrexian Rager"); - sheet.add("Phyrexian Reclamation"); - sheet.add("Pit Keeper"); - sheet.add("Plague Wight"); - sheet.add("Plagued Rusalka"); - sheet.add("Prakhata Club Security"); - sheet.add("Queen's Agent"); - sheet.add("Quest for the Gravelord"); - sheet.add("Rabid Bloodsucker"); - sheet.add("Rakdos Drake"); - sheet.add("Ravenous Chupacabra"); - sheet.add("Recover"); - sheet.add("Renegade Demon"); - sheet.add("Renegade's Getaway"); - sheet.add("Rotfeaster Maggot"); - sheet.add("Scarab Feast"); - sheet.add("Scuttling Death"); - sheet.add("Seal of Doom"); - sheet.add("Shadowcloak Vampire"); - sheet.add("Skeletal Scrying"); - sheet.add("Skulking Ghost"); - sheet.add("Smiting Helix"); - sheet.add("Spreading Rot"); - sheet.add("Street Wraith"); - sheet.add("Tavern Swindler"); - sheet.add("Tendrils of Corruption"); - sheet.add("Thorn of the Black Rose"); - sheet.add("Tidy Conclusion"); - sheet.add("Tragic Slip"); - sheet.add("Trespasser's Curse"); - sheet.add("Trial of Ambition"); - sheet.add("Typhoid Rats"); - sheet.add("Unburden"); - sheet.add("Urborg Uprising"); - sheet.add("Vampire Hexmage"); - sheet.add("Vampire Lacerator"); - sheet.add("Virulent Swipe"); - sheet.add("Wake of Vultures"); - sheet.add("Walking Corpse"); - sheet.add("Wander in Death"); - sheet.add("Wight of Precinct Six"); - sheet.add("Will-o'-the-Wisp"); - sheet.add("Windgrace Acolyte"); - sheet.add("Wrench Mind"); - cardSheets.add(sheet); - sheet = new ArrayList(); - sheet.add("Act on Impulse"); - sheet.add("Ainok Tracker"); - sheet.add("Alchemist's Greeting"); - sheet.add("Ancient Grudge"); - sheet.add("Arc Trail"); - sheet.add("Arrow Storm"); - sheet.add("Azra Bladeseeker"); - sheet.add("Balduvian Horde"); - sheet.add("Barrage of Boulders"); - sheet.add("Beetleback Chief"); - sheet.add("Bellows Lizard"); - sheet.add("Blastfire Bolt"); - sheet.add("Blazing Volley"); - sheet.add("Blindblast"); - sheet.add("Blood Ogre"); - sheet.add("Bloodfire Expert"); - sheet.add("Bloodlust Inciter"); - sheet.add("Bloodstone Goblin"); - sheet.add("Blow Your House Down"); - sheet.add("Bombard"); - sheet.add("Bomber Corps"); - sheet.add("Borrowed Hostility"); - sheet.add("Brazen Buccaneers"); - sheet.add("Brazen Wolves"); - sheet.add("Bring Low"); - sheet.add("Brute Strength"); - sheet.add("Built to Smash"); - sheet.add("Burst Lightning"); - sheet.add("Canyon Lurkers"); - sheet.add("Chandra's Pyrohelix"); - sheet.add("Charging Monstrosaur"); - sheet.add("Cobblebrute"); - sheet.add("Crowd's Favor"); - sheet.add("Crown-Hunter Hireling"); - sheet.add("Curse of Opulence"); - sheet.add("Destructive Tampering"); - sheet.add("Direct Current"); - sheet.add("Dragon Fodder"); - sheet.add("Dynacharge"); - sheet.add("Erratic Explosion"); - sheet.add("Expedite"); - sheet.add("Falkenrath Reaver"); - sheet.add("Fireball"); - sheet.add("Flame Jab"); - sheet.add("Forge Devil"); - sheet.add("Foundry Street Denizen"); - sheet.add("Frontline Rebel"); - sheet.add("Furnace Whelp"); - sheet.add("Galvanic Blast"); - sheet.add("Generator Servant"); - sheet.add("Geomancer's Gambit"); - sheet.add("Ghitu Lavarunner"); - sheet.add("Giant Spectacle"); - sheet.add("Goblin Assault"); - sheet.add("Goblin Bombardment"); - sheet.add("Goblin Fireslinger"); - sheet.add("Goblin Matron"); - sheet.add("Goblin Roughrider"); - sheet.add("Goblin War Paint"); - sheet.add("Gore Swine"); - sheet.add("Gorehorn Minotaurs"); - sheet.add("Granitic Titan"); - sheet.add("Grapeshot"); - sheet.add("Gravitic Punch"); - sheet.add("Guttersnipe"); - sheet.add("Hammerhand"); - sheet.add("Hardened Berserker"); - sheet.add("Hyena Pack"); - sheet.add("Ill-Tempered Cyclops"); - sheet.add("Impact Tremors"); - sheet.add("Incorrigible Youths"); - sheet.add("Inferno Fist"); - sheet.add("Inferno Jet"); - sheet.add("Ingot Chewer"); - sheet.add("Keldon Halberdier"); - sheet.add("Kiln Fiend"); - sheet.add("Krenko's Enforcer"); - sheet.add("Leaping Master"); - sheet.add("Leopard-Spotted Jiao"); - sheet.add("Madcap Skills"); - sheet.add("Mardu Warshrieker"); - sheet.add("Maximize Velocity"); - sheet.add("Miner's Bane"); - sheet.add("Mogg Flunkies"); - sheet.add("Molten Rain"); - sheet.add("Monastery Swiftspear"); - sheet.add("Ondu Champion"); - sheet.add("Outnumber"); - sheet.add("Price of Progress"); - sheet.add("Pyrotechnics"); - sheet.add("Quakefoot Cyclops"); - sheet.add("Reckless Fireweaver"); - sheet.add("Reckless Wurm"); - sheet.add("Rivals' Duel"); - sheet.add("Ruinous Gremlin"); - sheet.add("Samut's Sprint"); - sheet.add("Sarkhan's Rage"); - sheet.add("Screamreach Brawler"); - sheet.add("Seismic Shift"); - sheet.add("Shattering Spree"); - sheet.add("Shenanigans"); - sheet.add("Smelt"); - sheet.add("Sparkmage Apprentice"); - sheet.add("Sparkspitter"); - sheet.add("Staggershock"); - sheet.add("Stormblood Berserker"); - sheet.add("Swift Kick"); - sheet.add("Tectonic Rift"); - sheet.add("Temur Battle Rage"); - sheet.add("Thrill of Possibility"); - sheet.add("Tibalt's Rager"); - sheet.add("Torch Courier"); - sheet.add("Valakut Invoker"); - sheet.add("Valakut Predator"); - sheet.add("Valley Dasher"); - sheet.add("Vandalize"); - sheet.add("Volcanic Dragon"); - sheet.add("Volcanic Rush"); - sheet.add("Wall of Fire"); - sheet.add("Wayward Giant"); - sheet.add("Wojek Bodyguard"); - cardSheets.add(sheet); - sheet = new ArrayList(); - sheet.add("Act of Treason"); - sheet.add("Ahn-Crop Crasher"); - sheet.add("Akroan Sergeant"); - sheet.add("Anger"); - sheet.add("Atarka Efreet"); - sheet.add("Avarax"); - sheet.add("Barging Sergeant"); - sheet.add("Battle Rampart"); - sheet.add("Battle-Rattle Shaman"); - sheet.add("Blades of Velis Vel"); - sheet.add("Bloodmad Vampire"); - sheet.add("Blur of Blades"); - sheet.add("Boggart Brute"); - sheet.add("Boiling Earth"); - sheet.add("Boulder Salvo"); - sheet.add("Browbeat"); - sheet.add("Cartouche of Zeal"); - sheet.add("Cathartic Reunion"); - sheet.add("Chandra's Revolution"); - sheet.add("Chartooth Cougar"); - sheet.add("Cinder Hellion"); - sheet.add("Cleansing Screech"); - sheet.add("Cosmotronic Wave"); - sheet.add("Crash Through"); - sheet.add("Curse of the Nightly Hunt"); - sheet.add("Death by Dragons"); - sheet.add("Defiant Ogre"); - sheet.add("Demolish"); - sheet.add("Desert Cerodon"); - sheet.add("Desperate Ravings"); - sheet.add("Distemper of the Blood"); - sheet.add("Dragon Breath"); - sheet.add("Dragon Egg"); - sheet.add("Dragon Whelp"); - sheet.add("Dragonsoul Knight"); - sheet.add("Dual Shot"); - sheet.add("Earth Elemental"); - sheet.add("Emrakul's Hatcher"); - sheet.add("Enthralling Victor"); - sheet.add("Faithless Looting"); - sheet.add("Fall of the Hammer"); - sheet.add("Fervent Strike"); - sheet.add("Fierce Invocation"); - sheet.add("Fiery Hellhound"); - sheet.add("Fiery Temper"); - sheet.add("Fire Elemental"); - sheet.add("Firebolt"); - sheet.add("Firebrand Archer"); - sheet.add("Flametongue Kavu"); - sheet.add("Flamewave Invoker"); - sheet.add("Fling"); - sheet.add("Frenzied Raptor"); - sheet.add("Frilled Deathspitter"); - sheet.add("Frontline Devastator"); - sheet.add("Fury Charm"); - sheet.add("Genju of the Spires"); - sheet.add("Goblin Balloon Brigade"); - sheet.add("Goblin Locksmith"); - sheet.add("Goblin Motivator"); - sheet.add("Goblin Oriflamme"); - sheet.add("Goblin Warchief"); - sheet.add("Gut Shot"); - sheet.add("Hanweir Lancer"); - sheet.add("Hijack"); - sheet.add("Hulking Devil"); - sheet.add("Insolent Neonate"); - sheet.add("Jackal Pup"); - sheet.add("Keldon Overseer"); - sheet.add("Khenra Scrapper"); - sheet.add("Kird Ape"); - sheet.add("Kolaghan Stormsinger"); - sheet.add("Krenko's Command"); - sheet.add("Lightning Bolt"); - sheet.add("Lightning Javelin"); - sheet.add("Lightning Shrieker"); - sheet.add("Lightning Talons"); - sheet.add("Magma Spray"); - sheet.add("Makindi Sliderunner"); - sheet.add("Mark of Mutiny"); - sheet.add("Mogg Fanatic"); - sheet.add("Mogg War Marshal"); - sheet.add("Mutiny"); - sheet.add("Nimble-Blade Khenra"); - sheet.add("Orcish Cannonade"); - sheet.add("Orcish Oriflamme"); - sheet.add("Pillage"); - sheet.add("Prickleboar"); - sheet.add("Prophetic Ravings"); - sheet.add("Rampaging Cyclops"); - sheet.add("Renegade Tactics"); - sheet.add("Roast"); - sheet.add("Rolling Thunder"); - sheet.add("Rubblebelt Maaka"); - sheet.add("Rummaging Goblin"); - sheet.add("Run Amok"); - sheet.add("Rush of Adrenaline"); - sheet.add("Salivating Gremlins"); - sheet.add("Seismic Stomp"); - sheet.add("Shatter"); - sheet.add("Shock"); - sheet.add("Skirk Commando"); - sheet.add("Skirk Prospector"); - sheet.add("Smash to Smithereens"); - sheet.add("Sparktongue Dragon"); - sheet.add("Spikeshot Goblin"); - sheet.add("Sulfurous Blast"); - sheet.add("Summit Prowler"); - sheet.add("Sun-Crowned Hunters"); - sheet.add("Swashbuckling"); - sheet.add("Sweatworks Brawler"); - sheet.add("Tarfire"); - sheet.add("Thresher Lizard"); - sheet.add("Uncaged Fury"); - sheet.add("Undying Rage"); - sheet.add("Vent Sentinel"); - sheet.add("Vessel of Volatility"); - sheet.add("Voldaren Duelist"); - sheet.add("Wildfire Emissary"); - sheet.add("Young Pyromancer"); - sheet.add("Zada's Commando"); - sheet.add("Zealot of the God-Pharaoh"); - cardSheets.add(sheet); - sheet = new ArrayList(); - sheet.add("Affectionate Indrik"); - sheet.add("Ancestral Mask"); - sheet.add("Ancient Brontodon"); - sheet.add("Arbor Armament"); - sheet.add("Beastbreaker of Bala Ged"); - sheet.add("Become Immense"); - sheet.add("Blanchwood Armor"); - sheet.add("Blastoderm"); - sheet.add("Borderland Explorer"); - sheet.add("Briarhorn"); - sheet.add("Broodhunter Wurm"); - sheet.add("Byway Courier"); - sheet.add("Centaur Courser"); - sheet.add("Creeping Mold"); - sheet.add("Destructor Dragon"); - sheet.add("Domesticated Hydra"); - sheet.add("Dragon-Scarred Bear"); - sheet.add("Elemental Uprising"); - sheet.add("Elvish Fury"); - sheet.add("Eternal Witness"); - sheet.add("Feral Prowler"); - sheet.add("Fierce Empath"); - sheet.add("Frontier Mastodon"); - sheet.add("Gaea's Blessing"); - sheet.add("Gaea's Protector"); - sheet.add("Gift of Growth"); - sheet.add("Glade Watcher"); - sheet.add("Grapple with the Past"); - sheet.add("Greater Basilisk"); - sheet.add("Greater Sandwurm"); - sheet.add("Hamlet Captain"); - sheet.add("Hooded Brawler"); - sheet.add("Hooting Mandrills"); - sheet.add("Jungle Delver"); - sheet.add("Jungle Wayfinder"); - sheet.add("Kin-Tree Warden"); - sheet.add("Kraul Foragers"); - sheet.add("Krosan Druid"); - sheet.add("Lead by Example"); - sheet.add("Lead the Stampede"); - sheet.add("Lifespring Druid"); - sheet.add("Lignify"); - sheet.add("Llanowar Elves"); - sheet.add("Llanowar Empath"); - sheet.add("Lure"); - sheet.add("Mantle of Webs"); - sheet.add("Map the Wastes"); - sheet.add("Mulch"); - sheet.add("Natural Connection"); - sheet.add("Naturalize"); - sheet.add("Nature's Lore"); - sheet.add("Nest Invader"); - sheet.add("Nettle Sentinel"); - sheet.add("New Horizons"); - sheet.add("Nimble Mongoose"); - sheet.add("Ondu Giant"); - sheet.add("Oran-Rief Invoker"); - sheet.add("Overgrown Armasaur"); - sheet.add("Pack's Favor"); - sheet.add("Penumbra Spider"); - sheet.add("Pierce the Sky"); - sheet.add("Plummet"); - sheet.add("Prey Upon"); - sheet.add("Prey's Vengeance"); - sheet.add("Pulse of Murasa"); - sheet.add("Quiet Disrepair"); - sheet.add("Rampant Growth"); - sheet.add("Ranger's Guile"); - sheet.add("Ravenous Leucrocota"); - sheet.add("Reclaim"); - sheet.add("Revive"); - sheet.add("Rhox Maulers"); - sheet.add("Riparian Tiger"); - sheet.add("Roar of the Wurm"); - sheet.add("Root Out"); - sheet.add("Rosethorn Halberd"); - sheet.add("Runeclaw Bear"); - sheet.add("Sagu Archer"); - sheet.add("Sakura-Tribe Elder"); - sheet.add("Saproling Migration"); - sheet.add("Savage Punch"); - sheet.add("Seal of Strength"); - sheet.add("Search for Tomorrow"); - sheet.add("Seek the Horizon"); - sheet.add("Seek the Wilds"); - sheet.add("Shape the Sands"); - sheet.add("Siege Wurm"); - sheet.add("Silhana Ledgewalker"); - sheet.add("Silkweaver Elite"); - sheet.add("Snake Umbra"); - sheet.add("Snapping Sailback"); - sheet.add("Spider Spawning"); - sheet.add("Stoic Builder"); - sheet.add("Strength in Numbers"); - sheet.add("Sylvan Bounty"); - sheet.add("Tajuru Pathwarden"); - sheet.add("Take Down"); - sheet.add("Talons of Wildwood"); - sheet.add("Territorial Baloth"); - sheet.add("Thornhide Wolves"); - sheet.add("Thornweald Archer"); - sheet.add("Thrive"); - sheet.add("Timberwatch Elf"); - sheet.add("Time to Feed"); - sheet.add("Titanic Growth"); - sheet.add("Tukatongue Thallid"); - sheet.add("Turntimber Basilisk"); - sheet.add("Vastwood Gorger"); - sheet.add("Watcher in the Web"); - sheet.add("Wellwisher"); - sheet.add("Wild Growth"); - sheet.add("Wild Mongrel"); - sheet.add("Wildsize"); - sheet.add("Wolfkin Bond"); - sheet.add("Woodborn Behemoth"); - sheet.add("Woolly Loxodon"); - sheet.add("Wren's Run Vanquisher"); - sheet.add("Yavimaya Elder"); - sheet.add("Yavimaya Sapherd"); - sheet.add("Yeva's Forcemage"); - sheet.add("Zendikar's Roil"); - cardSheets.add(sheet); - sheet = new ArrayList(); - sheet.add("Abundant Growth"); - sheet.add("Acidic Slime"); - sheet.add("Adventurous Impulse"); - sheet.add("Aerie Bowmasters"); - sheet.add("Aggressive Instinct"); - sheet.add("Aggressive Urge"); - sheet.add("Ainok Survivalist"); - sheet.add("Alpine Grizzly"); - sheet.add("Ambassador Oak"); - sheet.add("Ancient Stirrings"); - sheet.add("Arachnus Web"); - sheet.add("Arbor Elf"); - sheet.add("Aura Gnarlid"); - sheet.add("Avacyn's Pilgrim"); - sheet.add("Backwoods Survivalists"); - sheet.add("Baloth Gorger"); - sheet.add("Basking Rootwalla"); - sheet.add("Beast Within"); - sheet.add("Beneath the Sands"); - sheet.add("Bestial Menace"); - sheet.add("Bitterblade Warrior"); - sheet.add("Bitterbow Sharpshooters"); - sheet.add("Blossom Dryad"); - sheet.add("Borderland Ranger"); - sheet.add("Bristling Boar"); - sheet.add("Broken Bond"); - sheet.add("Canopy Spider"); - sheet.add("Carnivorous Moss-Beast"); - sheet.add("Caustic Caterpillar"); - sheet.add("Charging Rhino"); - sheet.add("Citanul Woodreaders"); - sheet.add("Clip Wings"); - sheet.add("Colossal Dreadmaw"); - sheet.add("Combo Attack"); - sheet.add("Commune with Nature"); - sheet.add("Commune with the Gods"); - sheet.add("Conifer Strider"); - sheet.add("Crop Rotation"); - sheet.add("Crossroads Consecrator"); - sheet.add("Crowned Ceratok"); - sheet.add("Crushing Canopy"); - sheet.add("Cultivate"); - sheet.add("Daggerback Basilisk"); - sheet.add("Dawn's Reflection"); - sheet.add("Death-Hood Cobra"); - sheet.add("Desert Twister"); - sheet.add("Dissenter's Deliverance"); - sheet.add("Dragonscale Boon"); - sheet.add("Durkwood Baloth"); - sheet.add("Earthen Arms"); - sheet.add("Elephant Guide"); - sheet.add("Elves of Deep Shadow"); - sheet.add("Elvish Visionary"); - sheet.add("Elvish Warrior"); - sheet.add("Ember Weaver"); - sheet.add("Epic Confrontation"); - sheet.add("Essence Warden"); - sheet.add("Experiment One"); - sheet.add("Explore"); - sheet.add("Explosive Vegetation"); - sheet.add("Ezuri's Archers"); - sheet.add("Fade into Antiquity"); - sheet.add("Farseek"); - sheet.add("Feed the Clan"); - sheet.add("Feral Krushok"); - sheet.add("Ferocious Zheng"); - sheet.add("Fertile Ground"); - sheet.add("Fog"); - sheet.add("Formless Nurturing"); - sheet.add("Giant Growth"); - sheet.add("Giant Spider"); - sheet.add("Gift of Paradise"); - sheet.add("Gnarlid Pack"); - sheet.add("Grazing Gladehart"); - sheet.add("Greenwood Sentinel"); - sheet.add("Groundswell"); - sheet.add("Guardian Shield-Bearer"); - sheet.add("Hardy Veteran"); - sheet.add("Harmonize"); - sheet.add("Harrow"); - sheet.add("Hunt the Weak"); - sheet.add("Hunter's Ambush"); - sheet.add("Imperious Perfect"); - sheet.add("Invigorate"); - sheet.add("Ivy Lane Denizen"); - sheet.add("Kavu Climber"); - sheet.add("Kavu Primarch"); - sheet.add("Khalni Heart Expedition"); - sheet.add("Kozilek's Predator"); - sheet.add("Kraul Warrior"); - sheet.add("Krosan Tusker"); - sheet.add("Larger Than Life"); - sheet.add("Lay of the Land"); - sheet.add("Longshot Squad"); - sheet.add("Manglehorn"); - sheet.add("Might of the Masses"); - sheet.add("Nature's Claim"); - sheet.add("Oakgnarl Warrior"); - sheet.add("Overgrown Battlement"); - sheet.add("Overrun"); - sheet.add("Peema Outrider"); - sheet.add("Pelakka Wurm"); - sheet.add("Pinion Feast"); - sheet.add("Pouncing Cheetah"); - sheet.add("Priest of Titania"); - sheet.add("Rain of Thorns"); - sheet.add("Rancor"); - sheet.add("Reclaiming Vines"); - sheet.add("Regrowth"); - sheet.add("Relic Crush"); - sheet.add("Return to the Earth"); - sheet.add("Roots"); - sheet.add("Scatter the Seeds"); - sheet.add("Stalking Tiger"); - sheet.add("Sylvan Scrying"); - sheet.add("Tajuru Warcaller"); - sheet.add("Terrain Elemental"); - sheet.add("The Crowd Goes Wild"); - sheet.add("Thornscape Battlemage"); - sheet.add("Thrashing Brontodon"); - sheet.add("Venom Sliver"); - cardSheets.add(sheet); - sheet = new ArrayList(); - sheet.add("Abzan Charm"); - sheet.add("Abzan Guide"); - sheet.add("Agony Warp"); - sheet.add("Akroan Hoplite"); - sheet.add("Armadillo Cloak"); - sheet.add("Armament Corps"); - sheet.add("Azorius Charm"); - sheet.add("Azra Oddsmaker"); - sheet.add("Baleful Strix"); - sheet.add("Baloth Null"); - sheet.add("Bear's Companion"); - sheet.add("Belligerent Brontodon"); - sheet.add("Bituminous Blast"); - sheet.add("Bladewing the Risen"); - sheet.add("Blightning"); - sheet.add("Bloodbraid Elf"); - sheet.add("Boros Challenger"); - sheet.add("Bounding Krasis"); - sheet.add("Call of the Nightwing"); - sheet.add("Campaign of Vengeance"); - sheet.add("Cauldron Dance"); - sheet.add("Citadel Castellan"); - sheet.add("Claim // Fame"); - sheet.add("Coiling Oracle"); - sheet.add("Contraband Kingpin"); - sheet.add("Corpsejack Menace"); - sheet.add("Crosis's Charm"); - sheet.add("Cunning Breezedancer"); - sheet.add("Deathreap Ritual"); - sheet.add("Deny Reality"); - sheet.add("Draconic Disciple"); - sheet.add("Drana's Emissary"); - sheet.add("Engineered Might"); - sheet.add("Esper Charm"); - sheet.add("Ethercaste Knight"); - sheet.add("Ethereal Ambush"); - sheet.add("Extract from Darkness"); - sheet.add("Fire // Ice"); - sheet.add("Fires of Yavimaya"); - sheet.add("Flame-Kin Zealot"); - sheet.add("Fusion Elemental"); - sheet.add("Gelectrode"); - sheet.add("Ghor-Clan Rampager"); - sheet.add("Giantbaiting"); - sheet.add("Gift of Orzhova"); - sheet.add("Goblin Deathraiders"); - sheet.add("Grim Contest"); - sheet.add("Gwyllion Hedge-Mage"); - sheet.add("Hammer Dropper"); - sheet.add("Hidden Stockpile"); - sheet.add("Highspire Mantis"); - sheet.add("Hypothesizzle"); - sheet.add("Iroas's Champion"); - sheet.add("Join Shields"); - sheet.add("Jungle Barrier"); - sheet.add("Kathari Remnant"); - sheet.add("Kin-Tree Invocation"); - sheet.add("Kiora's Follower"); - sheet.add("Kiss of the Amesha"); - sheet.add("Lawmage's Binding"); - sheet.add("Lightning Helix"); - sheet.add("Mardu Roughrider"); - sheet.add("Martial Glory"); - sheet.add("Maverick Thopterist"); - sheet.add("Mercurial Geists"); - sheet.add("Migratory Route"); - sheet.add("Mistmeadow Witch"); - sheet.add("Mortify"); - sheet.add("Naya Charm"); - sheet.add("Nucklavee"); - sheet.add("Obelisk Spider"); - sheet.add("Ochran Assassin"); - sheet.add("Pillory of the Sleepless"); - sheet.add("Plaxcaster Frogling"); - sheet.add("Pollenbright Wings"); - sheet.add("Putrefy"); - sheet.add("Qasali Pridemage"); - sheet.add("Raff Capashen, Ship's Mage"); - sheet.add("Raging Swordtooth"); - sheet.add("Reclusive Artificer"); - sheet.add("Reflector Mage"); - sheet.add("Rhox War Monk"); - sheet.add("Riptide Crab"); - sheet.add("River Hoopoe"); - sheet.add("Rosemane Centaur"); - sheet.add("Rosheen Meanderer"); - sheet.add("Satyr Enchanter"); - sheet.add("Savage Twister"); - sheet.add("Sedraxis Specter"); - sheet.add("Selesnya Guildmage"); - sheet.add("Shambling Remains"); - sheet.add("Shardless Agent"); - sheet.add("Shipwreck Singer"); - sheet.add("Shrewd Hatchling"); - sheet.add("Skyward Eye Prophets"); - sheet.add("Slave of Bolas"); - sheet.add("Soul Manipulation"); - sheet.add("Sprouting Thrinax"); - sheet.add("Stormchaser Chimera"); - sheet.add("Sultai Charm"); - sheet.add("Sultai Soothsayer"); - sheet.add("Tatyova, Benthic Druid"); - sheet.add("Terminate"); - sheet.add("Thopter Foundry"); - sheet.add("Thought Erasure"); - sheet.add("Tithe Drinker"); - sheet.add("Tower Gargoyle"); - sheet.add("Treacherous Terrain"); - sheet.add("Underworld Coinsmith"); - sheet.add("Unflinching Courage"); - sheet.add("Unlicensed Disintegration"); - sheet.add("Urban Evolution"); - sheet.add("Vengeful Rebirth"); - sheet.add("Warden of the Eye"); - sheet.add("Wayfaring Temple"); - sheet.add("Weapons Trainer"); - sheet.add("Wee Dragonauts"); - sheet.add("Winding Constrictor"); - sheet.add("Woolly Thoctar"); - sheet.add("Zealous Persecution"); - sheet.add("Zhur-Taa Druid"); - cardSheets.add(sheet); - sheet = new ArrayList(); - sheet.add("Aether Hub"); - sheet.add("Aether Spellbomb"); - sheet.add("Akoum Refuge"); - sheet.add("Alchemist's Vial"); - sheet.add("Alloy Myr"); - sheet.add("Arcane Sanctum"); - sheet.add("Armillary Sphere"); - sheet.add("Artisan of Kozilek"); - sheet.add("Ash Barrens"); - sheet.add("Ashnod's Altar"); - sheet.add("Benthic Infiltrator"); - sheet.add("Blasted Landscape"); - sheet.add("Blighted Fen"); - sheet.add("Blinding Souleater"); - sheet.add("Blossoming Sands"); - sheet.add("Bojuka Bog"); - sheet.add("Bomat Bazaar Barge"); - sheet.add("Bone Saw"); - sheet.add("Bottle Gnomes"); - sheet.add("Breaker of Armies"); - sheet.add("Burnished Hart"); - sheet.add("Call the Scions"); - sheet.add("Cathodion"); - sheet.add("Coldsteel Heart"); - sheet.add("Consulate Dreadnought"); - sheet.add("Copper Carapace"); - sheet.add("Crumbling Necropolis"); - sheet.add("Crystal Ball"); - sheet.add("Crystal Chimes"); - sheet.add("Darksteel Citadel"); - sheet.add("Diamond Mare"); - sheet.add("Dismal Backwater"); - sheet.add("Dreadship Reef"); - sheet.add("Eldrazi Devastator"); - sheet.add("Emmessi Tome"); - sheet.add("Etched Oracle"); - sheet.add("Evolving Wilds"); - sheet.add("Faerie Conclave"); - sheet.add("Farmstead Gleaner"); - sheet.add("Field of Ruin"); - sheet.add("Filigree Familiar"); - sheet.add("Flayer Husk"); - sheet.add("Forgotten Cave"); - sheet.add("Foundry Inspector"); - sheet.add("Fountain of Renewal"); - sheet.add("Frogmite"); - sheet.add("Frontier Bivouac"); - sheet.add("Gateway Plaza"); - sheet.add("Ghost Quarter"); - sheet.add("Goblin Burrows"); - sheet.add("Graypelt Refuge"); - sheet.add("Great Furnace"); - sheet.add("Gruul Signet"); - sheet.add("Guardians of Meletis"); - sheet.add("Heavy Arbalest"); - sheet.add("Herald's Horn"); - sheet.add("Hexplate Golem"); - sheet.add("Hot Soup"); - sheet.add("Icy Manipulator"); - sheet.add("Implement of Malice"); - sheet.add("Irontread Crusher"); - sheet.add("Juggernaut"); - sheet.add("Jungle Hollow"); - sheet.add("Jungle Shrine"); - sheet.add("Kazandu Refuge"); - sheet.add("Krosan Verge"); - sheet.add("Lightning Greaves"); - sheet.add("Loxodon Warhammer"); - sheet.add("Mask of Memory"); - sheet.add("Meteorite"); - sheet.add("Millikin"); - sheet.add("Millstone"); - sheet.add("Mind Stone"); - sheet.add("Mishra's Bauble"); - sheet.add("Mishra's Factory"); - sheet.add("Moonglove Extract"); - sheet.add("Mortarpod"); - sheet.add("Myr Retriever"); - sheet.add("Myr Sire"); - sheet.add("New Benalia"); - sheet.add("Ornithopter"); - sheet.add("Orzhov Basilica"); - sheet.add("Palladium Myr"); - sheet.add("Peace Strider"); - sheet.add("Perilous Myr"); - sheet.add("Pilgrim's Eye"); - sheet.add("Prophetic Prism"); - sheet.add("Reliquary Tower"); - sheet.add("Renegade Map"); - sheet.add("Rhonas's Monument"); - sheet.add("Rogue's Passage"); - sheet.add("Sandsteppe Citadel"); - sheet.add("Sandstone Oracle"); - sheet.add("Scoured Barrens"); - sheet.add("Sejiri Refuge"); - sheet.add("Serrated Arrows"); - sheet.add("Short Sword"); - sheet.add("Sigil of Valor"); - sheet.add("Simic Locket"); - sheet.add("Skarrg, the Rage Pits"); - sheet.add("Skullclamp"); - sheet.add("Skyscanner"); - sheet.add("Sol Ring"); - sheet.add("Sorcerer's Broom"); - sheet.add("Spy Kit"); - sheet.add("Sunset Pyramid"); - sheet.add("Suspicious Bookcase"); - sheet.add("Swiftwater Cliffs"); - sheet.add("Tectonic Edge"); - sheet.add("Temple of the False God"); - sheet.add("Thornwood Falls"); - sheet.add("Thought Vessel"); - sheet.add("Thran Dynamo"); - sheet.add("Thran Golem"); - sheet.add("Tormod's Crypt"); - sheet.add("Trepanation Blade"); - sheet.add("Unclaimed Territory"); - sheet.add("Universal Automaton"); - sheet.add("Universal Solvent"); - sheet.add("Whispersilk Cloak"); - sheet.add("Wirewood Lodge"); - cardSheets.add(sheet); - sheet = new ArrayList(); - sheet.add("Ana Sanctuary"); - sheet.add("Ancient Den"); - sheet.add("Ancient Ziggurat"); - sheet.add("Angelic Destiny"); - sheet.add("Archangel"); - sheet.add("Asceticism"); - sheet.add("Assemble the Legion"); - sheet.add("Athreos, God of Passage"); - sheet.add("Aura Shards"); - sheet.add("Avalanche Riders"); - sheet.add("Bear Cub"); - sheet.add("Belbe's Portal"); - sheet.add("Black Knight"); - sheet.add("Bloom Tender"); - sheet.add("Bonesplitter"); - sheet.add("Bow of Nylea"); - sheet.add("Brimstone Dragon"); - sheet.add("Brimstone Mage"); - sheet.add("Cairn Wanderer"); - sheet.add("Carpet of Flowers"); - sheet.add("Centaur Glade"); - sheet.add("Chancellor of the Annex"); - sheet.add("Chatter of the Squirrel"); - sheet.add("Chromatic Star"); - sheet.add("Contagion Clasp"); - sheet.add("Corrupted Conscience"); - sheet.add("Cragganwick Cremator"); - sheet.add("Crenellated Wall"); - sheet.add("Crystal Shard"); - sheet.add("Darksteel Garrison"); - sheet.add("Dauthi Mindripper"); - sheet.add("Defense of the Heart"); - sheet.add("Dictate of Erebos"); - sheet.add("Dolmen Gate"); - sheet.add("Dominus of Fealty"); - sheet.add("Doomgape"); - sheet.add("Draco"); - sheet.add("Dragon Broodmother"); - sheet.add("Dragon Mask"); - sheet.add("Dungrove Elder"); - sheet.add("Eater of Days"); - sheet.add("Elixir of Immortality"); - sheet.add("Empyrial Armor"); - sheet.add("Enchanted Evening"); - sheet.add("Energy Field"); - sheet.add("Exsanguinate"); - sheet.add("Flameshot"); - sheet.add("Floodgate"); - sheet.add("Font of Mythos"); - sheet.add("Ghitu War Cry"); - sheet.add("Gilt-Leaf Palace"); - sheet.add("Goblin Game"); - sheet.add("Greater Gargadon"); - sheet.add("Guided Passage"); - sheet.add("Haakon, Stromgald Scourge"); - sheet.add("Hedron Crab"); - sheet.add("Helm of Awakening"); - sheet.add("Hunter of Eyeblights"); - sheet.add("Hurricane"); - sheet.add("Hypnotic Specter"); - sheet.add("Impending Disaster"); - sheet.add("Jushi Apprentice // Tomoya the Revealer"); - sheet.add("Kaervek's Torch"); - sheet.add("Kargan Dragonlord"); - sheet.add("Knight of Dawn"); - sheet.add("Knollspine Dragon"); - sheet.add("Kor Chant"); - sheet.add("Kruphix, God of Horizons"); - sheet.add("Lashknife Barrier"); - sheet.add("Lotus Petal"); - sheet.add("Maelstrom Archangel"); - sheet.add("Magus of the Moat"); - sheet.add("Mana Tithe"); - sheet.add("Manamorphose"); - sheet.add("Martyr's Bond"); - sheet.add("Martyr's Cause"); - sheet.add("Master Transmuter"); - sheet.add("Meddling Mage"); - sheet.add("Mistform Shrieker"); - sheet.add("Nemesis of Reason"); - sheet.add("Oracle of Nectars"); - sheet.add("Pathrazer of Ulamog"); - sheet.add("Perish"); - sheet.add("Pestilence"); - sheet.add("Phantasmal Dragon"); - sheet.add("Phantom Centaur"); - sheet.add("Phyrexian Metamorph"); - sheet.add("Phyrexian Soulgorger"); - sheet.add("Purphoros, God of the Forge"); - sheet.add("Questing Phelddagrif"); - sheet.add("Rage Reflection"); - sheet.add("Recoup"); - sheet.add("Release the Ants"); - sheet.add("Rhys the Redeemed"); - sheet.add("Rhystic Study"); - sheet.add("Rishadan Footpad"); - sheet.add("Rith, the Awakener"); - sheet.add("River Boa"); - sheet.add("Sadistic Hypnotist"); - sheet.add("Sakashima the Impostor"); - sheet.add("Sapphire Charm"); - sheet.add("Shrouded Lore"); - sheet.add("Soothsaying"); - sheet.add("Sorin Markov"); - sheet.add("Squirrel Wrangler"); - sheet.add("Thieving Magpie"); - sheet.add("Thrun, the Last Troll"); - sheet.add("Time Sieve"); - sheet.add("Timely Reinforcements"); - sheet.add("Tinker"); - sheet.add("Tower of Eons"); - sheet.add("Toxin Sliver"); - sheet.add("Triumph of the Hordes"); - sheet.add("Umbral Mantle"); - sheet.add("Viashino Sandstalker"); - sheet.add("Violent Ultimatum"); - sheet.add("Volunteer Reserves"); - sheet.add("Wargate"); - sheet.add("Weathered Wayfarer"); - sheet.add("Wild Nacatl"); - sheet.add("Yavimaya's Embrace"); - cardSheets.add(sheet); - sheet = new ArrayList(); - sheet.add("Adorned Pouncer"); - sheet.add("Aetherflux Reservoir"); - sheet.add("Akroan Horse"); - sheet.add("Alesha, Who Smiles at Death"); - sheet.add("Alhammarret's Archive"); - sheet.add("All Is Dust"); - sheet.add("Aminatou's Augury"); - sheet.add("Angel of the Dire Hour"); - sheet.add("Anger of the Gods"); - sheet.add("Animar, Soul of Elements"); - sheet.add("Approach of the Second Sun"); - sheet.add("Arch of Orazca"); - sheet.add("Basilisk Collar"); - sheet.add("Beacon of Immortality"); - sheet.add("Beastmaster Ascension"); - sheet.add("Birds of Paradise"); - sheet.add("Black Market"); - sheet.add("Boompile"); - sheet.add("Boros Reckoner"); - sheet.add("Caged Sun"); - sheet.add("Cauldron of Souls"); - sheet.add("Champion of the Parish"); - sheet.add("Chaos Warp"); - sheet.add("Chasm Skulker"); - sheet.add("Chromatic Lantern"); - sheet.add("Coat of Arms"); - sheet.add("Collective Brutality"); - sheet.add("Commit // Memory"); - sheet.add("Courser of Kruphix"); - sheet.add("Coveted Jewel"); - sheet.add("Daretti, Scrap Savant"); - sheet.add("Deadly Tempest"); - sheet.add("Debtors' Knell"); - sheet.add("Decree of Justice"); - sheet.add("Deepglow Skate"); - sheet.add("Desolation Twin"); - sheet.add("Dictate of Heliod"); - sheet.add("Djinn of Wishes"); - sheet.add("Dragonlord Ojutai"); - sheet.add("Drana, Kalastria Bloodchief"); - sheet.add("Eldrazi Monument"); - sheet.add("Eldritch Evolution"); - sheet.add("Elesh Norn, Grand Cenobite"); - sheet.add("Evra, Halcyon Witness"); - sheet.add("Expropriate"); - sheet.add("Fblthp, the Lost"); - sheet.add("Felidar Sovereign"); - sheet.add("Gideon Jura"); - sheet.add("Goblin Charbelcher"); - sheet.add("Goblin Piledriver"); - sheet.add("Gonti, Lord of Luxury"); - sheet.add("Grasp of Fate"); - sheet.add("Grave Titan"); - sheet.add("Gravecrawler"); - sheet.add("Greenbelt Rampager"); - sheet.add("Hornet Nest"); - sheet.add("Kiki-Jiki, Mirror Breaker"); - sheet.add("Kolaghan's Command"); - sheet.add("Krenko, Mob Boss"); - sheet.add("Liliana, Death's Majesty"); - sheet.add("Living Death"); - sheet.add("Mana Crypt"); - sheet.add("Meandering Towershell"); - sheet.add("Memory Erosion"); - sheet.add("Meren of Clan Nel Toth"); - sheet.add("Mimic Vat"); - sheet.add("Mind Shatter"); - sheet.add("Mind Spring"); - sheet.add("Mirran Crusader"); - sheet.add("Mirror Entity"); - sheet.add("Misdirection"); - sheet.add("Mizzix's Mastery"); - sheet.add("Mycoloth"); - sheet.add("Mystic Confluence"); - sheet.add("Nighthowler"); - sheet.add("Nin, the Pain Artist"); - sheet.add("Nissa, Voice of Zendikar"); - sheet.add("Odric, Lunarch Marshal"); - sheet.add("Phyrexian Arena"); - sheet.add("Phyrexian Plaguelord"); - sheet.add("Precursor Golem"); - sheet.add("Preyseizer Dragon"); - sheet.add("Queen Marchesa"); - sheet.add("Reality Scramble"); - sheet.add("Recruiter of the Guard"); - sheet.add("Release the Gremlins"); - sheet.add("Revel in Riches"); - sheet.add("Rune-Scarred Demon"); - sheet.add("Savage Knuckleblade"); - sheet.add("Selvala, Heart of the Wilds"); - sheet.add("Serendib Efreet"); - sheet.add("Sewer Nemesis"); - sheet.add("Shamanic Revelation"); - sheet.add("Sliver Hivelord"); - sheet.add("Solemn Simulacrum"); - sheet.add("Spawning Grounds"); - sheet.add("Star of Extinction"); - sheet.add("Steamflogger Boss"); - sheet.add("Stunt Double"); - sheet.add("Sudden Demise"); - sheet.add("Supreme Verdict"); - sheet.add("Sword of the Animist"); - sheet.add("Talrand, Sky Summoner"); - sheet.add("Taurean Mauler"); - sheet.add("Teferi's Protection"); - sheet.add("Teferi, Temporal Archmage"); - sheet.add("Temporal Mastery"); - sheet.add("Tempt with Discovery"); - sheet.add("Thalia's Lancers"); - sheet.add("The Gitrog Monster"); - sheet.add("The Mirari Conjecture"); - sheet.add("Tireless Tracker"); - sheet.add("Torment of Hailfire"); - sheet.add("Trading Post"); - sheet.add("Two-Headed Giant"); - sheet.add("Urza's Rage"); - sheet.add("Vigor"); - sheet.add("Wheel of Fate"); - sheet.add("Whelming Wave"); - sheet.add("Whir of Invention"); - sheet.add("Yuriko, the Tiger's Shadow"); - cardSheets.add(sheet); - sheet = new ArrayList(); - sheet.add("Alchemist's Refuge"); - sheet.add("Allosaurus Rider"); - sheet.add("Amulet of Vigor"); - sheet.add("Archetype of Endurance"); - sheet.add("Aurelia's Fury"); - sheet.add("Balduvian Rage"); - sheet.add("Balefire Liege"); - sheet.add("Blasting Station"); - sheet.add("Blighted Agent"); - sheet.add("Boreal Druid"); - sheet.add("Boundless Realms"); - sheet.add("Braid of Fire"); - sheet.add("Bramblewood Paragon"); - sheet.add("Bringer of the Black Dawn"); - sheet.add("Burning Inquiry"); - sheet.add("Celestial Dawn"); - sheet.add("Celestial Kirin"); - sheet.add("Changeling Hero"); - sheet.add("Chimney Imp"); - sheet.add("Codex Shredder"); - sheet.add("Conspiracy"); - sheet.add("Council Guardian"); - sheet.add("Delay"); - sheet.add("Drogskol Captain"); - sheet.add("Echoing Decay"); - sheet.add("Eidolon of Rhetoric"); - sheet.add("Fatespinner"); - sheet.add("Fiery Gambit"); - sheet.add("Flamekin Harbinger"); - sheet.add("Form of the Dragon"); - sheet.add("Frozen Aether"); - sheet.add("Funeral Charm"); - sheet.add("Fungusaur"); - sheet.add("Game-Trail Changeling"); - sheet.add("Geth's Grimoire"); - sheet.add("Gilder Bairn"); - sheet.add("Gleeful Sabotage"); - sheet.add("Glittering Wish"); - sheet.add("Goblin Bushwhacker"); - sheet.add("Grand Architect"); - sheet.add("Greater Mossdog"); - sheet.add("Guerrilla Tactics"); - sheet.add("Harmonic Sliver"); - sheet.add("Helix Pinnacle"); - sheet.add("Herald of Leshrac"); - sheet.add("Hornet Sting"); - sheet.add("Intruder Alarm"); - sheet.add("Iron Myr"); - sheet.add("Isamaru, Hound of Konda"); - sheet.add("Karrthus, Tyrant of Jund"); - sheet.add("Knowledge Pool"); - sheet.add("Kulrath Knight"); - sheet.add("Lantern of Insight"); - sheet.add("Lapse of Certainty"); - sheet.add("Leveler"); - sheet.add("Lich's Mirror"); - sheet.add("Lightning Storm"); - sheet.add("Lumithread Field"); - sheet.add("Maelstrom Nexus"); - sheet.add("Magewright's Stone"); - sheet.add("Manaweft Sliver"); - sheet.add("Maro"); - sheet.add("Marrow-Gnawer"); - sheet.add("Memnite"); - sheet.add("Minamo, School at Water's Edge"); - sheet.add("Mind Funeral"); - sheet.add("Mindslaver"); - sheet.add("Mirrodin's Core"); - sheet.add("Misthollow Griffin"); - sheet.add("Myojin of Life's Web"); - sheet.add("Nezumi Shortfang // Stabwhisker the Odious"); - sheet.add("Noggle Bandit"); - sheet.add("Norin the Wary"); - sheet.add("Norn's Annex"); - sheet.add("Not of This World"); - sheet.add("Ogre Gatecrasher"); - sheet.add("One with Nothing"); - sheet.add("Panglacial Wurm"); - sheet.add("Paradox Haze"); - sheet.add("Patron of the Moon"); - sheet.add("Pili-Pala"); - sheet.add("Proclamation of Rebirth"); - sheet.add("Puca's Mischief"); - sheet.add("Pull from Eternity"); - sheet.add("Pyretic Ritual"); - sheet.add("Ravenous Trap"); - sheet.add("Reaper King"); - sheet.add("Reki, the History of Kamigawa"); - sheet.add("Rescue from the Underworld"); - sheet.add("Rhox"); - sheet.add("Rune-Tail, Kitsune Ascendant // Rune-Tail's Essence"); - sheet.add("Sakura-Tribe Scout"); - sheet.add("Sarkhan the Mad"); - sheet.add("Scourge of the Throne"); - sheet.add("Scryb Ranger"); - sheet.add("Sen Triplets"); - sheet.add("Sheltering Ancient"); - sheet.add("Shizo, Death's Storehouse"); - sheet.add("Sinew Sliver"); - sheet.add("Sosuke, Son of Seshiro"); - sheet.add("Soul's Attendant"); - sheet.add("Spelltithe Enforcer"); - sheet.add("Spellweaver Volute"); - sheet.add("Spike Feeder"); - sheet.add("Springjack Shepherd"); - sheet.add("Stalking Stones"); - sheet.add("Stigma Lasher"); - sheet.add("Storm Crow"); - sheet.add("Sundial of the Infinite"); - sheet.add("Teferi's Puzzle Box"); - sheet.add("Trailblazer's Boots"); - sheet.add("Treasonous Ogre"); - sheet.add("Triskelion"); - sheet.add("Undead Warchief"); - sheet.add("Viscera Seer"); - sheet.add("Wall of Shards"); - sheet.add("Wear // Tear"); - sheet.add("White Knight"); - sheet.add("Witchbane Orb"); - sheet.add("Yore-Tiller Nephilim"); - sheet.add("Zur's Weirding"); - cardSheets.add(sheet); + @Override + public List create15CardBooster() { + return this.createBooster(); } } diff --git a/Mage.Sets/src/mage/sets/MysteryBoosterRetailEditionFoils.java b/Mage.Sets/src/mage/sets/MysteryBoosterRetailEditionFoils.java new file mode 100644 index 00000000000..b48229fc757 --- /dev/null +++ b/Mage.Sets/src/mage/sets/MysteryBoosterRetailEditionFoils.java @@ -0,0 +1,145 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/fmb1 + */ +public class MysteryBoosterRetailEditionFoils extends ExpansionSet { + + private static final MysteryBoosterRetailEditionFoils instance = new MysteryBoosterRetailEditionFoils(); + + public static MysteryBoosterRetailEditionFoils getInstance() { + return instance; + } + + private MysteryBoosterRetailEditionFoils() { + super("Mystery Booster Retail Edition Foils", "FMB1", ExpansionSet.buildDate(2020, 3, 8), SetType.SUPPLEMENTAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Alchemist's Refuge", 117, Rarity.RARE, mage.cards.a.AlchemistsRefuge.class)); + cards.add(new SetCardInfo("Allosaurus Rider", 61, Rarity.RARE, mage.cards.a.AllosaurusRider.class)); + cards.add(new SetCardInfo("Amulet of Vigor", 98, Rarity.RARE, mage.cards.a.AmuletOfVigor.class)); + cards.add(new SetCardInfo("Archetype of Endurance", 62, Rarity.UNCOMMON, mage.cards.a.ArchetypeOfEndurance.class)); + cards.add(new SetCardInfo("Aurelia's Fury", 83, Rarity.MYTHIC, mage.cards.a.AureliasFury.class)); + cards.add(new SetCardInfo("Balduvian Rage", 46, Rarity.UNCOMMON, mage.cards.b.BalduvianRage.class)); + cards.add(new SetCardInfo("Balefire Liege", 93, Rarity.RARE, mage.cards.b.BalefireLiege.class)); + cards.add(new SetCardInfo("Blasting Station", 99, Rarity.UNCOMMON, mage.cards.b.BlastingStation.class)); + cards.add(new SetCardInfo("Blighted Agent", 20, Rarity.COMMON, mage.cards.b.BlightedAgent.class)); + cards.add(new SetCardInfo("Boreal Druid", 63, Rarity.COMMON, mage.cards.b.BorealDruid.class)); + cards.add(new SetCardInfo("Boundless Realms", 64, Rarity.RARE, mage.cards.b.BoundlessRealms.class)); + cards.add(new SetCardInfo("Braid of Fire", 47, Rarity.RARE, mage.cards.b.BraidOfFire.class)); + cards.add(new SetCardInfo("Bramblewood Paragon", 65, Rarity.UNCOMMON, mage.cards.b.BramblewoodParagon.class)); + cards.add(new SetCardInfo("Bringer of the Black Dawn", 33, Rarity.RARE, mage.cards.b.BringerOfTheBlackDawn.class)); + cards.add(new SetCardInfo("Burning Inquiry", 48, Rarity.COMMON, mage.cards.b.BurningInquiry.class)); + cards.add(new SetCardInfo("Celestial Dawn", 2, Rarity.RARE, mage.cards.c.CelestialDawn.class)); + cards.add(new SetCardInfo("Celestial Kirin", 3, Rarity.RARE, mage.cards.c.CelestialKirin.class)); + cards.add(new SetCardInfo("Changeling Hero", 4, Rarity.UNCOMMON, mage.cards.c.ChangelingHero.class)); + cards.add(new SetCardInfo("Chimney Imp", 34, Rarity.COMMON, mage.cards.c.ChimneyImp.class)); + cards.add(new SetCardInfo("Codex Shredder", 100, Rarity.UNCOMMON, mage.cards.c.CodexShredder.class)); + cards.add(new SetCardInfo("Conspiracy", 35, Rarity.RARE, mage.cards.c.Conspiracy.class)); + cards.add(new SetCardInfo("Council Guardian", 5, Rarity.UNCOMMON, mage.cards.c.CouncilGuardian.class)); + cards.add(new SetCardInfo("Delay", 21, Rarity.UNCOMMON, mage.cards.d.Delay.class)); + cards.add(new SetCardInfo("Drogskol Captain", 84, Rarity.UNCOMMON, mage.cards.d.DrogskolCaptain.class)); + cards.add(new SetCardInfo("Echoing Decay", 36, Rarity.COMMON, mage.cards.e.EchoingDecay.class)); + cards.add(new SetCardInfo("Eidolon of Rhetoric", 6, Rarity.UNCOMMON, mage.cards.e.EidolonOfRhetoric.class)); + cards.add(new SetCardInfo("Fatespinner", 22, Rarity.RARE, mage.cards.f.Fatespinner.class)); + cards.add(new SetCardInfo("Fiery Gambit", 49, Rarity.RARE, mage.cards.f.FieryGambit.class)); + cards.add(new SetCardInfo("Flamekin Harbinger", 50, Rarity.UNCOMMON, mage.cards.f.FlamekinHarbinger.class)); + cards.add(new SetCardInfo("Form of the Dragon", 51, Rarity.RARE, mage.cards.f.FormOfTheDragon.class)); + cards.add(new SetCardInfo("Frozen Aether", 23, Rarity.UNCOMMON, mage.cards.f.FrozenAether.class)); + cards.add(new SetCardInfo("Funeral Charm", 37, Rarity.RARE, mage.cards.f.FuneralCharm.class)); + cards.add(new SetCardInfo("Fungusaur", 66, Rarity.RARE, mage.cards.f.Fungusaur.class)); + cards.add(new SetCardInfo("Game-Trail Changeling", 67, Rarity.COMMON, mage.cards.g.GameTrailChangeling.class)); + cards.add(new SetCardInfo("Geth's Grimoire", 101, Rarity.UNCOMMON, mage.cards.g.GethsGrimoire.class)); + cards.add(new SetCardInfo("Gilder Bairn", 94, Rarity.UNCOMMON, mage.cards.g.GilderBairn.class)); + cards.add(new SetCardInfo("Gleeful Sabotage", 68, Rarity.COMMON, mage.cards.g.GleefulSabotage.class)); + cards.add(new SetCardInfo("Glittering Wish", 85, Rarity.RARE, mage.cards.g.GlitteringWish.class)); + cards.add(new SetCardInfo("Goblin Bushwhacker", 52, Rarity.COMMON, mage.cards.g.GoblinBushwhacker.class)); + cards.add(new SetCardInfo("Grand Architect", 24, Rarity.RARE, mage.cards.g.GrandArchitect.class)); + cards.add(new SetCardInfo("Greater Mossdog", 69, Rarity.COMMON, mage.cards.g.GreaterMossdog.class)); + cards.add(new SetCardInfo("Guerrilla Tactics", 53, Rarity.UNCOMMON, mage.cards.g.GuerrillaTactics.class)); + cards.add(new SetCardInfo("Harmonic Sliver", 86, Rarity.UNCOMMON, mage.cards.h.HarmonicSliver.class)); + cards.add(new SetCardInfo("Helix Pinnacle", 70, Rarity.RARE, mage.cards.h.HelixPinnacle.class)); + cards.add(new SetCardInfo("Herald of Leshrac", 38, Rarity.RARE, mage.cards.h.HeraldOfLeshrac.class)); + cards.add(new SetCardInfo("Hornet Sting", 71, Rarity.COMMON, mage.cards.h.HornetSting.class)); + cards.add(new SetCardInfo("Intruder Alarm", 25, Rarity.RARE, mage.cards.i.IntruderAlarm.class)); + cards.add(new SetCardInfo("Iron Myr", 102, Rarity.COMMON, mage.cards.i.IronMyr.class)); + cards.add(new SetCardInfo("Isamaru, Hound of Konda", 7, Rarity.RARE, mage.cards.i.IsamaruHoundOfKonda.class)); + cards.add(new SetCardInfo("Karrthus, Tyrant of Jund", 87, Rarity.MYTHIC, mage.cards.k.KarrthusTyrantOfJund.class)); + cards.add(new SetCardInfo("Knowledge Pool", 103, Rarity.RARE, mage.cards.k.KnowledgePool.class)); + cards.add(new SetCardInfo("Kulrath Knight", 95, Rarity.UNCOMMON, mage.cards.k.KulrathKnight.class)); + cards.add(new SetCardInfo("Lantern of Insight", 104, Rarity.UNCOMMON, mage.cards.l.LanternOfInsight.class)); + cards.add(new SetCardInfo("Lapse of Certainty", 8, Rarity.COMMON, mage.cards.l.LapseOfCertainty.class)); + cards.add(new SetCardInfo("Leveler", 105, Rarity.RARE, mage.cards.l.Leveler.class)); + cards.add(new SetCardInfo("Lich's Mirror", 106, Rarity.MYTHIC, mage.cards.l.LichsMirror.class)); + cards.add(new SetCardInfo("Lightning Storm", 54, Rarity.UNCOMMON, mage.cards.l.LightningStorm.class)); + cards.add(new SetCardInfo("Lumithread Field", 9, Rarity.COMMON, mage.cards.l.LumithreadField.class)); + cards.add(new SetCardInfo("Maelstrom Nexus", 88, Rarity.MYTHIC, mage.cards.m.MaelstromNexus.class)); + cards.add(new SetCardInfo("Magewright's Stone", 107, Rarity.UNCOMMON, mage.cards.m.MagewrightsStone.class)); + cards.add(new SetCardInfo("Manaweft Sliver", 72, Rarity.UNCOMMON, mage.cards.m.ManaweftSliver.class)); + cards.add(new SetCardInfo("Maro", 73, Rarity.RARE, mage.cards.m.Maro.class)); + cards.add(new SetCardInfo("Marrow-Gnawer", 39, Rarity.RARE, mage.cards.m.MarrowGnawer.class)); + cards.add(new SetCardInfo("Memnite", 108, Rarity.UNCOMMON, mage.cards.m.Memnite.class)); + cards.add(new SetCardInfo("Minamo, School at Water's Edge", 118, Rarity.RARE, mage.cards.m.MinamoSchoolAtWatersEdge.class)); + cards.add(new SetCardInfo("Mind Funeral", 89, Rarity.UNCOMMON, mage.cards.m.MindFuneral.class)); + cards.add(new SetCardInfo("Mindslaver", 109, Rarity.RARE, mage.cards.m.Mindslaver.class)); + cards.add(new SetCardInfo("Mirrodin's Core", 119, Rarity.UNCOMMON, mage.cards.m.MirrodinsCore.class)); + cards.add(new SetCardInfo("Misthollow Griffin", 26, Rarity.MYTHIC, mage.cards.m.MisthollowGriffin.class)); + cards.add(new SetCardInfo("Myojin of Life's Web", 74, Rarity.RARE, mage.cards.m.MyojinOfLifesWeb.class)); + cards.add(new SetCardInfo("Nezumi Shortfang", 40, Rarity.RARE, mage.cards.n.NezumiShortfang.class)); + cards.add(new SetCardInfo("Noggle Bandit", 96, Rarity.COMMON, mage.cards.n.NoggleBandit.class)); + cards.add(new SetCardInfo("Norin the Wary", 55, Rarity.RARE, mage.cards.n.NorinTheWary.class)); + cards.add(new SetCardInfo("Norn's Annex", 10, Rarity.RARE, mage.cards.n.NornsAnnex.class)); + cards.add(new SetCardInfo("Not of This World", 1, Rarity.UNCOMMON, mage.cards.n.NotOfThisWorld.class)); + cards.add(new SetCardInfo("Ogre Gatecrasher", 56, Rarity.COMMON, mage.cards.o.OgreGatecrasher.class)); + cards.add(new SetCardInfo("One with Nothing", 41, Rarity.RARE, mage.cards.o.OneWithNothing.class)); + cards.add(new SetCardInfo("Panglacial Wurm", 75, Rarity.RARE, mage.cards.p.PanglacialWurm.class)); + cards.add(new SetCardInfo("Paradox Haze", 27, Rarity.UNCOMMON, mage.cards.p.ParadoxHaze.class)); + cards.add(new SetCardInfo("Patron of the Moon", 28, Rarity.RARE, mage.cards.p.PatronOfTheMoon.class)); + cards.add(new SetCardInfo("Pili-Pala", 110, Rarity.COMMON, mage.cards.p.PiliPala.class)); + cards.add(new SetCardInfo("Proclamation of Rebirth", 11, Rarity.RARE, mage.cards.p.ProclamationOfRebirth.class)); + cards.add(new SetCardInfo("Puca's Mischief", 29, Rarity.RARE, mage.cards.p.PucasMischief.class)); + cards.add(new SetCardInfo("Pull from Eternity", 12, Rarity.UNCOMMON, mage.cards.p.PullFromEternity.class)); + cards.add(new SetCardInfo("Pyretic Ritual", 57, Rarity.COMMON, mage.cards.p.PyreticRitual.class)); + cards.add(new SetCardInfo("Ravenous Trap", 42, Rarity.UNCOMMON, mage.cards.r.RavenousTrap.class)); + cards.add(new SetCardInfo("Reaper King", 111, Rarity.RARE, mage.cards.r.ReaperKing.class)); + cards.add(new SetCardInfo("Reki, the History of Kamigawa", 76, Rarity.RARE, mage.cards.r.RekiTheHistoryOfKamigawa.class)); + cards.add(new SetCardInfo("Rescue from the Underworld", 43, Rarity.UNCOMMON, mage.cards.r.RescueFromTheUnderworld.class)); + cards.add(new SetCardInfo("Rhox", 77, Rarity.RARE, mage.cards.r.Rhox.class)); + cards.add(new SetCardInfo("Rune-Tail, Kitsune Ascendant", 13, Rarity.RARE, mage.cards.r.RuneTailKitsuneAscendant.class)); + cards.add(new SetCardInfo("Sakura-Tribe Scout", 78, Rarity.COMMON, mage.cards.s.SakuraTribeScout.class)); + cards.add(new SetCardInfo("Sarkhan the Mad", 90, Rarity.MYTHIC, mage.cards.s.SarkhanTheMad.class)); + cards.add(new SetCardInfo("Scourge of the Throne", 58, Rarity.MYTHIC, mage.cards.s.ScourgeOfTheThrone.class)); + cards.add(new SetCardInfo("Scryb Ranger", 79, Rarity.UNCOMMON, mage.cards.s.ScrybRanger.class)); + cards.add(new SetCardInfo("Sen Triplets", 91, Rarity.MYTHIC, mage.cards.s.SenTriplets.class)); + cards.add(new SetCardInfo("Sheltering Ancient", 80, Rarity.UNCOMMON, mage.cards.s.ShelteringAncient.class)); + cards.add(new SetCardInfo("Shizo, Death's Storehouse", 120, Rarity.RARE, mage.cards.s.ShizoDeathsStorehouse.class)); + cards.add(new SetCardInfo("Sinew Sliver", 14, Rarity.COMMON, mage.cards.s.SinewSliver.class)); + cards.add(new SetCardInfo("Sosuke, Son of Seshiro", 81, Rarity.UNCOMMON, mage.cards.s.SosukeSonOfSeshiro.class)); + cards.add(new SetCardInfo("Soul's Attendant", 15, Rarity.COMMON, mage.cards.s.SoulsAttendant.class)); + cards.add(new SetCardInfo("Spelltithe Enforcer", 16, Rarity.RARE, mage.cards.s.SpelltitheEnforcer.class)); + cards.add(new SetCardInfo("Spellweaver Volute", 30, Rarity.RARE, mage.cards.s.SpellweaverVolute.class)); + cards.add(new SetCardInfo("Spike Feeder", 82, Rarity.RARE, mage.cards.s.SpikeFeeder.class)); + cards.add(new SetCardInfo("Springjack Shepherd", 17, Rarity.UNCOMMON, mage.cards.s.SpringjackShepherd.class)); + cards.add(new SetCardInfo("Stalking Stones", 121, Rarity.UNCOMMON, mage.cards.s.StalkingStones.class)); + cards.add(new SetCardInfo("Stigma Lasher", 59, Rarity.RARE, mage.cards.s.StigmaLasher.class)); + cards.add(new SetCardInfo("Storm Crow", 31, Rarity.COMMON, mage.cards.s.StormCrow.class)); + cards.add(new SetCardInfo("Sundial of the Infinite", 112, Rarity.RARE, mage.cards.s.SundialOfTheInfinite.class)); + cards.add(new SetCardInfo("Teferi's Puzzle Box", 113, Rarity.RARE, mage.cards.t.TeferisPuzzleBox.class)); + cards.add(new SetCardInfo("Trailblazer's Boots", 114, Rarity.UNCOMMON, mage.cards.t.TrailblazersBoots.class)); + cards.add(new SetCardInfo("Treasonous Ogre", 60, Rarity.UNCOMMON, mage.cards.t.TreasonousOgre.class)); + cards.add(new SetCardInfo("Triskelion", 115, Rarity.RARE, mage.cards.t.Triskelion.class)); + cards.add(new SetCardInfo("Undead Warchief", 44, Rarity.RARE, mage.cards.u.UndeadWarchief.class)); + cards.add(new SetCardInfo("Viscera Seer", 45, Rarity.COMMON, mage.cards.v.VisceraSeer.class)); + cards.add(new SetCardInfo("Wall of Shards", 18, Rarity.UNCOMMON, mage.cards.w.WallOfShards.class)); + cards.add(new SetCardInfo("Wear // Tear", 97, Rarity.UNCOMMON, mage.cards.w.WearTear.class)); + cards.add(new SetCardInfo("White Knight", 19, Rarity.UNCOMMON, mage.cards.w.WhiteKnight.class)); + cards.add(new SetCardInfo("Witchbane Orb", 116, Rarity.RARE, mage.cards.w.WitchbaneOrb.class)); + cards.add(new SetCardInfo("Yore-Tiller Nephilim", 92, Rarity.RARE, mage.cards.y.YoreTillerNephilim.class)); + cards.add(new SetCardInfo("Zur's Weirding", 32, Rarity.RARE, mage.cards.z.ZursWeirding.class)); + } +} diff --git a/Mage.Tests/src/test/java/org/mage/test/sets/BoosterGenerationTest.java b/Mage.Tests/src/test/java/org/mage/test/sets/BoosterGenerationTest.java index 4975b4c51c6..fa58846ab45 100644 --- a/Mage.Tests/src/test/java/org/mage/test/sets/BoosterGenerationTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/sets/BoosterGenerationTest.java @@ -16,8 +16,7 @@ import org.mage.test.serverside.base.MageTestBase; import java.util.*; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; +import static org.junit.Assert.*; /** * @author nigelzor, JayDi85 @@ -72,6 +71,62 @@ public class BoosterGenerationTest extends MageTestBase { // assertFalse(str(booster), contains(booster, basics, null)); } + @Test + public void testMysteryBooster1() { + // https://magic.wizards.com/en/articles/archive/feature/unraveling-mystery-booster-2019-11-14 + List booster = MysteryBooster.getInstance().createBooster(); + Assert.assertNotNull(booster); + Assert.assertEquals("Pack contains 15 cards", 15, booster.size()); + + Assert.assertTrue("Slot 1 is white", booster.get(0).getColor(null).isWhite()); + Assert.assertTrue("Slot 2 is white", booster.get(1).getColor(null).isWhite()); + + Assert.assertTrue("Slot 3 is blue", booster.get(2).getColor(null).isBlue()); + Assert.assertTrue("Slot 4 is blue", booster.get(3).getColor(null).isBlue()); + + Assert.assertTrue("Slot 5 is black", booster.get(4).getColor(null).isBlack()); + Assert.assertTrue("Slot 6 is black", booster.get(5).getColor(null).isBlack()); + + Assert.assertTrue("Slot 7 is red", booster.get(6).getColor(null).isRed()); + Assert.assertTrue("Slot 8 is red", booster.get(7).getColor(null).isRed()); + + Assert.assertTrue("Slot 9 is green", booster.get(8).getColor(null).isGreen()); + Assert.assertTrue("Slot 10 is green", booster.get(9).getColor(null).isGreen()); + + Assert.assertTrue("Slot 11 is multicolored", booster.get(10).getColor(null).isMulticolored()); + Assert.assertTrue("Slot 12 is colorless", booster.get(11).getColor(null).isColorless()); + + Assert.assertEquals("Slot 15 is from FMB1 set","FMB1", booster.get(14).getExpansionSetCode()); + } + + @Test + public void testMysteryBooster1Create15CardBooster() { + // https://magic.wizards.com/en/articles/archive/feature/unraveling-mystery-booster-2019-11-14 + List booster = MysteryBooster.getInstance().create15CardBooster(); + Assert.assertNotNull(booster); + Assert.assertEquals("Pack contains 15 cards", 15, booster.size()); + + Assert.assertTrue("Slot 1 is white", booster.get(0).getColor(null).isWhite()); + Assert.assertTrue("Slot 2 is white", booster.get(1).getColor(null).isWhite()); + + Assert.assertTrue("Slot 3 is blue", booster.get(2).getColor(null).isBlue()); + Assert.assertTrue("Slot 4 is blue", booster.get(3).getColor(null).isBlue()); + + Assert.assertTrue("Slot 5 is black", booster.get(4).getColor(null).isBlack()); + Assert.assertTrue("Slot 6 is black", booster.get(5).getColor(null).isBlack()); + + Assert.assertTrue("Slot 7 is red", booster.get(6).getColor(null).isRed()); + Assert.assertTrue("Slot 8 is red", booster.get(7).getColor(null).isRed()); + + Assert.assertTrue("Slot 9 is green", booster.get(8).getColor(null).isGreen()); + Assert.assertTrue("Slot 10 is green", booster.get(9).getColor(null).isGreen()); + + Assert.assertTrue("Slot 11 is multicolored", booster.get(10).getColor(null).isMulticolored()); + Assert.assertTrue("Slot 12 is colorless", booster.get(11).getColor(null).isColorless()); + + Assert.assertEquals("Slot 15 is from FMB1 set","FMB1", booster.get(14).getExpansionSetCode()); + } + @Test public void testMastersEditionII() { List snowCoveredLand = new ArrayList<>(Arrays.asList( From 736f207801b11cb09a28e02bcf7751fb96acdc43 Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Wed, 15 Jan 2020 22:59:25 +0100 Subject: [PATCH 002/182] Add the DragonCon (PDRC) promotional set. --- .../dl/sources/ScryfallImageSupportCards.java | 14 ++++++++++ Mage.Sets/src/mage/sets/DragonCon.java | 26 +++++++++++++++++++ 2 files changed, 40 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/DragonCon.java diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java index 1f0eddb3a55..331162db55b 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java @@ -60,6 +60,20 @@ public class ScryfallImageSupportCards { add("DD3GVL"); add("DD3JVC"); + // Judge gift sets + add("JGP"); + add("G99"); + add("G00"); + add("G01"); + + // Other promo sets + add("PWOR"); + add("PWOS"); + add("PDRC"); + add("PHPR"); + add("PLGM"); + + add("MGB"); add("ULG"); add("6ED"); add("UDS"); diff --git a/Mage.Sets/src/mage/sets/DragonCon.java b/Mage.Sets/src/mage/sets/DragonCon.java new file mode 100644 index 00000000000..6861774a697 --- /dev/null +++ b/Mage.Sets/src/mage/sets/DragonCon.java @@ -0,0 +1,26 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/pdrc + * https://gatherer.wizards.com/pages/card/Details.aspx?name=Nalathni+Dragon + */ +public class DragonCon extends ExpansionSet { + + private static final DragonCon instance = new DragonCon(); + + public static DragonCon getInstance() { + return instance; + } + + private DragonCon() { + super("Dragon Con", "PDRC", ExpansionSet.buildDate(1995, 7, 15), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Nalathni Dragon", 1, Rarity.RARE, mage.cards.n.NalathniDragon.class)); + } +} \ No newline at end of file From 07cef62dfb628f032cd3b4e35b492d86e7cf5f6b Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Wed, 15 Jan 2020 23:03:13 +0100 Subject: [PATCH 003/182] Removed the DragonCon cards from the MediaInserts set. Removed the cards from the OldSchool* ban lists, because this change makes them unavailable to the format. --- .../Mage.Deck.Constructed/src/mage/deck/OldSchool9394CFB.java | 1 - .../Mage.Deck.Constructed/src/mage/deck/OldSchool9394EC.java | 1 - Mage.Sets/src/mage/sets/MediaInserts.java | 1 - 3 files changed, 3 deletions(-) diff --git a/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/OldSchool9394CFB.java b/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/OldSchool9394CFB.java index 51b5c74daf1..2829b74c33e 100644 --- a/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/OldSchool9394CFB.java +++ b/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/OldSchool9394CFB.java @@ -172,7 +172,6 @@ public class OldSchool9394CFB extends Constructed { banned.add("Merfolk Mesmerist"); banned.add("Mirran Crusader"); banned.add("Munda's Vanguard"); - banned.add("Nalathni Dragon"); banned.add("Necromaster Dragon"); banned.add("Nephalia Moondrakes"); banned.add("Niblis of Frost"); diff --git a/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/OldSchool9394EC.java b/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/OldSchool9394EC.java index 34b112c8e1b..861846fb95d 100644 --- a/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/OldSchool9394EC.java +++ b/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/OldSchool9394EC.java @@ -173,7 +173,6 @@ public class OldSchool9394EC extends Constructed { banned.add("Merfolk Mesmerist"); banned.add("Mirran Crusader"); banned.add("Munda's Vanguard"); - banned.add("Nalathni Dragon"); banned.add("Necromaster Dragon"); banned.add("Nephalia Moondrakes"); banned.add("Niblis of Frost"); diff --git a/Mage.Sets/src/mage/sets/MediaInserts.java b/Mage.Sets/src/mage/sets/MediaInserts.java index 47d1bd4566f..0addb67a0aa 100644 --- a/Mage.Sets/src/mage/sets/MediaInserts.java +++ b/Mage.Sets/src/mage/sets/MediaInserts.java @@ -136,7 +136,6 @@ public final class MediaInserts extends ExpansionSet { cards.add(new SetCardInfo("Merfolk Mesmerist", 45, Rarity.COMMON, mage.cards.m.MerfolkMesmerist.class)); cards.add(new SetCardInfo("Mirran Crusader", 32, Rarity.RARE, mage.cards.m.MirranCrusader.class)); cards.add(new SetCardInfo("Munda's Vanguard", 143, Rarity.RARE, mage.cards.m.MundasVanguard.class)); - cards.add(new SetCardInfo("Nalathni Dragon", 3, Rarity.SPECIAL, mage.cards.n.NalathniDragon.class)); cards.add(new SetCardInfo("Necromaster Dragon", 114, Rarity.SPECIAL, mage.cards.n.NecromasterDragon.class)); cards.add(new SetCardInfo("Nephalia Moondrakes", 150, Rarity.RARE, mage.cards.n.NephaliaMoondrakes.class)); cards.add(new SetCardInfo("Niblis of Frost", 158, Rarity.RARE, mage.cards.n.NiblisOfFrost.class)); From e795991fa8c0c75d0fcff547889748f0ec2e2f51 Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Wed, 15 Jan 2020 23:05:11 +0100 Subject: [PATCH 004/182] Converted CLRF line endings to LF for some formats. --- .../src/mage/deck/OldSchool9394CFB.java | 546 ++++++++--------- .../src/mage/deck/OldSchool9394EC.java | 548 +++++++++--------- .../src/mage/deck/OldSchool9394EG.java | 184 +++--- .../src/mage/deck/OldSchool9394Italian.java | 174 +++--- .../src/mage/deck/StarWarsBlock.java | 42 +- 5 files changed, 747 insertions(+), 747 deletions(-) diff --git a/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/OldSchool9394CFB.java b/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/OldSchool9394CFB.java index 2829b74c33e..d5322be62bd 100644 --- a/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/OldSchool9394CFB.java +++ b/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/OldSchool9394CFB.java @@ -1,273 +1,273 @@ - -package mage.deck; - -import mage.cards.ExpansionSet; -import mage.cards.Sets; -import mage.cards.decks.Constructed; -import mage.constants.SetType; - -/** - * This class validates a deck for the Old School 93/94 format, specifically for - * the Channel Fireball Rules. - * - * This was originally made to follow the deck construction rules found at the - * Old School Mtg blog found at: - * http://oldschool-mtg.blogspot.com/p/banrestriction.html - * - * There is no mana burn in this version of old school - * - * @author jmharmon - */ -public class OldSchool9394CFB extends Constructed { - - public OldSchool9394CFB() { - super("Constructed - Old School 93/94 - Channel Fireball Rules"); - - // use the set instances to make sure that we get the correct set codes - setCodes.add(mage.sets.LimitedEditionAlpha.getInstance().getCode()); - setCodes.add(mage.sets.LimitedEditionBeta.getInstance().getCode()); - setCodes.add(mage.sets.UnlimitedEdition.getInstance().getCode()); - setCodes.add(mage.sets.ArabianNights.getInstance().getCode()); - setCodes.add(mage.sets.Antiquities.getInstance().getCode()); - setCodes.add(mage.sets.Legends.getInstance().getCode()); - setCodes.add(mage.sets.TheDark.getInstance().getCode()); - setCodes.add(mage.sets.FallenEmpires.getInstance().getCode()); - setCodes.add(mage.sets.MediaInserts.getInstance().getCode()); - - // ante cards and conspiracies banned, with specifically mentioned ones called out. - banned.add("Advantageous Proclamation"); - banned.add("Amulet of Quoz"); - banned.add("Backup Plan"); - banned.add("Brago's Favor"); - banned.add("Bronze Tablet"); /// - banned.add("Contract from Below"); /// - banned.add("Darkpact"); /// - banned.add("Demonic Attorney"); /// - banned.add("Double Stroke"); - banned.add("Immediate Action"); - banned.add("Iterative Analysis"); - banned.add("Jeweled Bird"); /// - banned.add("Muzzio's Preparations"); - banned.add("Power Play"); - banned.add("Rebirth"); /// - banned.add("Secret Summoning"); - banned.add("Secrets of Paradise"); - banned.add("Sentinel Dispatch"); - banned.add("Tempest Efreet"); /// - banned.add("Timmerian Fiends"); - banned.add("Unexpected Potential"); - banned.add("Worldknit"); - - //Let Media Inserts Arena and Sewers of Estark being only cards playable - banned.add("Acquire"); - banned.add("Aeronaut Tinkerer"); - banned.add("Ajani, Caller of the Pride"); - banned.add("Ajani Steadfast"); - banned.add("Alhammarret, High Arbiter"); - banned.add("Angelic Skirmisher"); - banned.add("Angel of Glory's Rise"); - banned.add("Ankle Shanker"); - banned.add("Arashin Sovereign"); - banned.add("Archfiend of Depravity"); - banned.add("Archfiend of Ifnir"); - banned.add("Arrest"); - banned.add("Assembled Alphas"); - banned.add("Avalanche Tusker"); - banned.add("Barrage Tyrant"); - banned.add("Bloodthrone Vampire"); - banned.add("Boltwing Marauder"); - banned.add("Bonescythe Sliver"); - banned.add("Breath of Malfegor"); - banned.add("Brion Stoutarm"); - banned.add("Broodmate Dragon"); - banned.add("Burning Sun's Avatar"); - banned.add("Canopy Vista"); - banned.add("Cathedral of War"); - banned.add("Celestial Colonnade"); - banned.add("Chandra, Fire of Kaladesh"); - banned.add("Chandra, Flamecaller"); - banned.add("Chandra, Pyromaster"); - banned.add("Chandra, Pyromaster"); - banned.add("Chandra, Roaring Flame"); - banned.add("Chandra, Torch of Defiance"); - banned.add("Chandra's Fury"); - banned.add("Chandra's Phoenix"); - banned.add("Cinder Glade"); - banned.add("Consume Spirit"); - banned.add("Corrupt"); - banned.add("Day of Judgment"); - banned.add("Deepfathom Skulker"); - banned.add("Defiant Bloodlord"); - banned.add("Devil's Play"); - banned.add("Dragon Fodder"); - banned.add("Dragonlord's Servant"); - banned.add("Dragonscale General"); - banned.add("Dread Defiler"); - banned.add("Dreg Mangler"); - banned.add("Drogskol Cavalry"); - banned.add("Dromoka, the Eternal"); - banned.add("Drowner of Hope"); - banned.add("Duress"); - banned.add("Dwynen, Gilt-Leaf Daen"); - banned.add("Eidolon of Blossoms"); - banned.add("Electrolyze"); - banned.add("Elusive Tormentor"); - banned.add("Emrakul, the Aeons Torn"); - banned.add("Evolving Wilds"); - banned.add("Faithless Looting"); - banned.add("Fated Conflagration"); - banned.add("Feast of Blood"); - banned.add("Flameblade Angel"); - banned.add("Flamerush Rider"); - banned.add("Foe-Razer Regent"); - banned.add("Frost Titan"); - banned.add("Garruk, Apex Predator"); - banned.add("Garruk, Caller of Beasts"); - banned.add("Garruk Wildspeaker"); - banned.add("Gaze of Granite"); - banned.add("Genesis Hydra"); - banned.add("Giant Badger"); - banned.add("Gideon of the Trials"); - banned.add("Gideon, Ally of Zendikar"); - banned.add("Gideon, Battle-Forged"); - banned.add("Gladehart Cavalry"); - banned.add("Goblin Dark-Dwellers"); - banned.add("Goblin Rabblemaster"); - banned.add("Gravecrawler"); - banned.add("Grave Titan"); - banned.add("Guul Draz Assassin"); - banned.add("Hamletback Goliath"); - banned.add("Harbinger of the Hunt"); - banned.add("Hero of Goma Fada"); - banned.add("Hixus, Prison Warden"); - banned.add("Honored Hierarch"); - banned.add("Honor of the Pure"); - banned.add("Inferno Titan"); - banned.add("Insidious Mist"); - banned.add("Ivorytusk Fortress"); - banned.add("Jace Beleren"); - banned.add("Jace, Memory Adept"); - banned.add("Jace, Telepath Unbound"); - banned.add("Jace, the Living Guildpact"); - banned.add("Jace, Unraveler of Secrets"); - banned.add("Jace, Unraveler of Secrets"); - banned.add("Jace, Vryn's Prodigy"); - banned.add("Jaya Ballard, Task Mage"); - banned.add("Karametra's Acolyte"); - banned.add("Knight Exemplar"); - banned.add("Kor Skyfisher"); - banned.add("Kothophed, Soul Hoarder"); - banned.add("Kytheon, Hero of Akros"); - banned.add("Lightning Hounds"); - banned.add("Liliana of the Dark Realms"); - banned.add("Liliana, Death's Majesty"); - banned.add("Liliana, Defiant Necromancer"); - banned.add("Liliana, the Last Hope"); - banned.add("Liliana Vess"); - banned.add("Liliana Vess"); - banned.add("Magister of Worth"); - banned.add("Mana Crypt"); - banned.add("Markov Dreadknight"); - banned.add("Memoricide"); - banned.add("Merfolk Mesmerist"); - banned.add("Mirran Crusader"); - banned.add("Munda's Vanguard"); - banned.add("Necromaster Dragon"); - banned.add("Nephalia Moondrakes"); - banned.add("Niblis of Frost"); - banned.add("Nicol Bolas, God-Pharaoh"); - banned.add("Nightveil Specter"); - banned.add("Nissa Revane"); - banned.add("Nissa, Sage Animist"); - banned.add("Nissa, Steward of Elements"); - banned.add("Nissa, Vastwood Seer"); - banned.add("Nissa, Voice of Zendikar"); - banned.add("Nissa, Worldwaker"); - banned.add("Noosegraf Mob"); - banned.add("Ogre Arsonist"); - banned.add("Ogre Battledriver"); - banned.add("Ojutai's Command"); - banned.add("Oran-Rief Hydra"); - banned.add("Phyrexian Rager"); - banned.add("Pia and Kiran Nalaar"); - banned.add("Prairie Stream"); - banned.add("Primordial Hydra"); - banned.add("Pristine Skywise"); - banned.add("Rakshasa Vizier"); - banned.add("Ratchet Bomb"); - banned.add("Rattleclaw Mystic"); - banned.add("Ravenous Bloodseeker"); - banned.add("Relic Seeker"); - banned.add("Render Silent"); - banned.add("Retaliator Griffin"); - banned.add("Ruinous Path"); - banned.add("Sage-Eye Avengers"); - banned.add("Sage of the Inward Eye"); - banned.add("Sanctifier of Souls"); - banned.add("Sandsteppe Citadel"); - banned.add("Scavenging Ooze"); - banned.add("Scrap Trawler"); - banned.add("Scythe Leopard"); - banned.add("Seeker of the Way"); - banned.add("Serra Avatar"); - banned.add("Shamanic Revelation"); - banned.add("Siege Rhino"); - banned.add("Silverblade Paladin"); - banned.add("Silver Drake"); - banned.add("Skyship Stalker"); - banned.add("Smoldering Marsh"); - banned.add("Soul of Ravnica"); - banned.add("Soul of Zendikar"); - banned.add("Soul Swallower"); - banned.add("Spined Wurm"); - banned.add("Standstill"); - banned.add("Stealer of Secrets"); - banned.add("Steward of Valeron"); - banned.add("Sultai Charm"); - banned.add("Sunblast Angel"); - banned.add("Sunken Hollow"); - banned.add("Supreme Verdict"); - banned.add("Surgical Extraction"); - banned.add("Sylvan Caryatid"); - banned.add("Temur War Shaman"); - banned.add("Terastodon"); - banned.add("Thalia, Heretic Cathar"); - banned.add("Treasure Hunt"); - banned.add("Turnabout"); - banned.add("Tyrant of Valakut"); - banned.add("Ulvenwald Observer"); - banned.add("Valorous Stance"); - banned.add("Vampire Nocturnus"); - banned.add("Voidmage Husher"); - banned.add("Warmonger"); - banned.add("Wash Out"); - banned.add("Wildfire Eternal"); - banned.add("Windseeker Centaur"); - banned.add("Xathrid Necromancer"); - - restricted.add("Ancestral Recall"); - restricted.add("Balance"); - restricted.add("Black Lotus"); - restricted.add("Braingeyser"); - restricted.add("Channel"); - restricted.add("Chaos Orb"); - restricted.add("Demonic Tutor"); - restricted.add("Library of Alexandria"); - restricted.add("Mana Drain"); - restricted.add("Maze of Ith"); - restricted.add("Mind Twist"); - restricted.add("Mox Emerald"); - restricted.add("Mox Jet"); - restricted.add("Mox Pearl"); - restricted.add("Mox Ruby"); - restricted.add("Mox Sapphire"); - restricted.add("Recall"); - restricted.add("Regrowth"); - restricted.add("Sol Ring"); - restricted.add("Strip Mine"); - restricted.add("Time Vault"); - restricted.add("Time Walk"); - restricted.add("Timetwister"); - restricted.add("Wheel of Fortune"); - } -} + +package mage.deck; + +import mage.cards.ExpansionSet; +import mage.cards.Sets; +import mage.cards.decks.Constructed; +import mage.constants.SetType; + +/** + * This class validates a deck for the Old School 93/94 format, specifically for + * the Channel Fireball Rules. + * + * This was originally made to follow the deck construction rules found at the + * Old School Mtg blog found at: + * http://oldschool-mtg.blogspot.com/p/banrestriction.html + * + * There is no mana burn in this version of old school + * + * @author jmharmon + */ +public class OldSchool9394CFB extends Constructed { + + public OldSchool9394CFB() { + super("Constructed - Old School 93/94 - Channel Fireball Rules"); + + // use the set instances to make sure that we get the correct set codes + setCodes.add(mage.sets.LimitedEditionAlpha.getInstance().getCode()); + setCodes.add(mage.sets.LimitedEditionBeta.getInstance().getCode()); + setCodes.add(mage.sets.UnlimitedEdition.getInstance().getCode()); + setCodes.add(mage.sets.ArabianNights.getInstance().getCode()); + setCodes.add(mage.sets.Antiquities.getInstance().getCode()); + setCodes.add(mage.sets.Legends.getInstance().getCode()); + setCodes.add(mage.sets.TheDark.getInstance().getCode()); + setCodes.add(mage.sets.FallenEmpires.getInstance().getCode()); + setCodes.add(mage.sets.MediaInserts.getInstance().getCode()); + + // ante cards and conspiracies banned, with specifically mentioned ones called out. + banned.add("Advantageous Proclamation"); + banned.add("Amulet of Quoz"); + banned.add("Backup Plan"); + banned.add("Brago's Favor"); + banned.add("Bronze Tablet"); /// + banned.add("Contract from Below"); /// + banned.add("Darkpact"); /// + banned.add("Demonic Attorney"); /// + banned.add("Double Stroke"); + banned.add("Immediate Action"); + banned.add("Iterative Analysis"); + banned.add("Jeweled Bird"); /// + banned.add("Muzzio's Preparations"); + banned.add("Power Play"); + banned.add("Rebirth"); /// + banned.add("Secret Summoning"); + banned.add("Secrets of Paradise"); + banned.add("Sentinel Dispatch"); + banned.add("Tempest Efreet"); /// + banned.add("Timmerian Fiends"); + banned.add("Unexpected Potential"); + banned.add("Worldknit"); + + //Let Media Inserts Arena and Sewers of Estark being only cards playable + banned.add("Acquire"); + banned.add("Aeronaut Tinkerer"); + banned.add("Ajani, Caller of the Pride"); + banned.add("Ajani Steadfast"); + banned.add("Alhammarret, High Arbiter"); + banned.add("Angelic Skirmisher"); + banned.add("Angel of Glory's Rise"); + banned.add("Ankle Shanker"); + banned.add("Arashin Sovereign"); + banned.add("Archfiend of Depravity"); + banned.add("Archfiend of Ifnir"); + banned.add("Arrest"); + banned.add("Assembled Alphas"); + banned.add("Avalanche Tusker"); + banned.add("Barrage Tyrant"); + banned.add("Bloodthrone Vampire"); + banned.add("Boltwing Marauder"); + banned.add("Bonescythe Sliver"); + banned.add("Breath of Malfegor"); + banned.add("Brion Stoutarm"); + banned.add("Broodmate Dragon"); + banned.add("Burning Sun's Avatar"); + banned.add("Canopy Vista"); + banned.add("Cathedral of War"); + banned.add("Celestial Colonnade"); + banned.add("Chandra, Fire of Kaladesh"); + banned.add("Chandra, Flamecaller"); + banned.add("Chandra, Pyromaster"); + banned.add("Chandra, Pyromaster"); + banned.add("Chandra, Roaring Flame"); + banned.add("Chandra, Torch of Defiance"); + banned.add("Chandra's Fury"); + banned.add("Chandra's Phoenix"); + banned.add("Cinder Glade"); + banned.add("Consume Spirit"); + banned.add("Corrupt"); + banned.add("Day of Judgment"); + banned.add("Deepfathom Skulker"); + banned.add("Defiant Bloodlord"); + banned.add("Devil's Play"); + banned.add("Dragon Fodder"); + banned.add("Dragonlord's Servant"); + banned.add("Dragonscale General"); + banned.add("Dread Defiler"); + banned.add("Dreg Mangler"); + banned.add("Drogskol Cavalry"); + banned.add("Dromoka, the Eternal"); + banned.add("Drowner of Hope"); + banned.add("Duress"); + banned.add("Dwynen, Gilt-Leaf Daen"); + banned.add("Eidolon of Blossoms"); + banned.add("Electrolyze"); + banned.add("Elusive Tormentor"); + banned.add("Emrakul, the Aeons Torn"); + banned.add("Evolving Wilds"); + banned.add("Faithless Looting"); + banned.add("Fated Conflagration"); + banned.add("Feast of Blood"); + banned.add("Flameblade Angel"); + banned.add("Flamerush Rider"); + banned.add("Foe-Razer Regent"); + banned.add("Frost Titan"); + banned.add("Garruk, Apex Predator"); + banned.add("Garruk, Caller of Beasts"); + banned.add("Garruk Wildspeaker"); + banned.add("Gaze of Granite"); + banned.add("Genesis Hydra"); + banned.add("Giant Badger"); + banned.add("Gideon of the Trials"); + banned.add("Gideon, Ally of Zendikar"); + banned.add("Gideon, Battle-Forged"); + banned.add("Gladehart Cavalry"); + banned.add("Goblin Dark-Dwellers"); + banned.add("Goblin Rabblemaster"); + banned.add("Gravecrawler"); + banned.add("Grave Titan"); + banned.add("Guul Draz Assassin"); + banned.add("Hamletback Goliath"); + banned.add("Harbinger of the Hunt"); + banned.add("Hero of Goma Fada"); + banned.add("Hixus, Prison Warden"); + banned.add("Honored Hierarch"); + banned.add("Honor of the Pure"); + banned.add("Inferno Titan"); + banned.add("Insidious Mist"); + banned.add("Ivorytusk Fortress"); + banned.add("Jace Beleren"); + banned.add("Jace, Memory Adept"); + banned.add("Jace, Telepath Unbound"); + banned.add("Jace, the Living Guildpact"); + banned.add("Jace, Unraveler of Secrets"); + banned.add("Jace, Unraveler of Secrets"); + banned.add("Jace, Vryn's Prodigy"); + banned.add("Jaya Ballard, Task Mage"); + banned.add("Karametra's Acolyte"); + banned.add("Knight Exemplar"); + banned.add("Kor Skyfisher"); + banned.add("Kothophed, Soul Hoarder"); + banned.add("Kytheon, Hero of Akros"); + banned.add("Lightning Hounds"); + banned.add("Liliana of the Dark Realms"); + banned.add("Liliana, Death's Majesty"); + banned.add("Liliana, Defiant Necromancer"); + banned.add("Liliana, the Last Hope"); + banned.add("Liliana Vess"); + banned.add("Liliana Vess"); + banned.add("Magister of Worth"); + banned.add("Mana Crypt"); + banned.add("Markov Dreadknight"); + banned.add("Memoricide"); + banned.add("Merfolk Mesmerist"); + banned.add("Mirran Crusader"); + banned.add("Munda's Vanguard"); + banned.add("Necromaster Dragon"); + banned.add("Nephalia Moondrakes"); + banned.add("Niblis of Frost"); + banned.add("Nicol Bolas, God-Pharaoh"); + banned.add("Nightveil Specter"); + banned.add("Nissa Revane"); + banned.add("Nissa, Sage Animist"); + banned.add("Nissa, Steward of Elements"); + banned.add("Nissa, Vastwood Seer"); + banned.add("Nissa, Voice of Zendikar"); + banned.add("Nissa, Worldwaker"); + banned.add("Noosegraf Mob"); + banned.add("Ogre Arsonist"); + banned.add("Ogre Battledriver"); + banned.add("Ojutai's Command"); + banned.add("Oran-Rief Hydra"); + banned.add("Phyrexian Rager"); + banned.add("Pia and Kiran Nalaar"); + banned.add("Prairie Stream"); + banned.add("Primordial Hydra"); + banned.add("Pristine Skywise"); + banned.add("Rakshasa Vizier"); + banned.add("Ratchet Bomb"); + banned.add("Rattleclaw Mystic"); + banned.add("Ravenous Bloodseeker"); + banned.add("Relic Seeker"); + banned.add("Render Silent"); + banned.add("Retaliator Griffin"); + banned.add("Ruinous Path"); + banned.add("Sage-Eye Avengers"); + banned.add("Sage of the Inward Eye"); + banned.add("Sanctifier of Souls"); + banned.add("Sandsteppe Citadel"); + banned.add("Scavenging Ooze"); + banned.add("Scrap Trawler"); + banned.add("Scythe Leopard"); + banned.add("Seeker of the Way"); + banned.add("Serra Avatar"); + banned.add("Shamanic Revelation"); + banned.add("Siege Rhino"); + banned.add("Silverblade Paladin"); + banned.add("Silver Drake"); + banned.add("Skyship Stalker"); + banned.add("Smoldering Marsh"); + banned.add("Soul of Ravnica"); + banned.add("Soul of Zendikar"); + banned.add("Soul Swallower"); + banned.add("Spined Wurm"); + banned.add("Standstill"); + banned.add("Stealer of Secrets"); + banned.add("Steward of Valeron"); + banned.add("Sultai Charm"); + banned.add("Sunblast Angel"); + banned.add("Sunken Hollow"); + banned.add("Supreme Verdict"); + banned.add("Surgical Extraction"); + banned.add("Sylvan Caryatid"); + banned.add("Temur War Shaman"); + banned.add("Terastodon"); + banned.add("Thalia, Heretic Cathar"); + banned.add("Treasure Hunt"); + banned.add("Turnabout"); + banned.add("Tyrant of Valakut"); + banned.add("Ulvenwald Observer"); + banned.add("Valorous Stance"); + banned.add("Vampire Nocturnus"); + banned.add("Voidmage Husher"); + banned.add("Warmonger"); + banned.add("Wash Out"); + banned.add("Wildfire Eternal"); + banned.add("Windseeker Centaur"); + banned.add("Xathrid Necromancer"); + + restricted.add("Ancestral Recall"); + restricted.add("Balance"); + restricted.add("Black Lotus"); + restricted.add("Braingeyser"); + restricted.add("Channel"); + restricted.add("Chaos Orb"); + restricted.add("Demonic Tutor"); + restricted.add("Library of Alexandria"); + restricted.add("Mana Drain"); + restricted.add("Maze of Ith"); + restricted.add("Mind Twist"); + restricted.add("Mox Emerald"); + restricted.add("Mox Jet"); + restricted.add("Mox Pearl"); + restricted.add("Mox Ruby"); + restricted.add("Mox Sapphire"); + restricted.add("Recall"); + restricted.add("Regrowth"); + restricted.add("Sol Ring"); + restricted.add("Strip Mine"); + restricted.add("Time Vault"); + restricted.add("Time Walk"); + restricted.add("Timetwister"); + restricted.add("Wheel of Fortune"); + } +} diff --git a/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/OldSchool9394EC.java b/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/OldSchool9394EC.java index 861846fb95d..0735f872ee2 100644 --- a/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/OldSchool9394EC.java +++ b/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/OldSchool9394EC.java @@ -1,274 +1,274 @@ - -package mage.deck; - -import mage.cards.ExpansionSet; -import mage.cards.Sets; -import mage.cards.decks.Constructed; -import mage.constants.SetType; - -/** - * This class validates a deck for the Old School 93/94 format, specifically for - * the EC Rules. - * - * This was originally made to follow the deck construction rules found at the - * Old School Mtg blog found at: - * http://oldschool-mtg.blogspot.com/p/banrestriction.html - * - * There is no mana burn in this version of old school - * - * @author jmharmon - */ -public class OldSchool9394EC extends Constructed { - - public OldSchool9394EC() { - super("Constructed - Old School 93/94 - EC Rules"); - - // use the set instances to make sure that we get the correct set codes - setCodes.add(mage.sets.LimitedEditionAlpha.getInstance().getCode()); - setCodes.add(mage.sets.LimitedEditionBeta.getInstance().getCode()); - setCodes.add(mage.sets.UnlimitedEdition.getInstance().getCode()); - setCodes.add(mage.sets.ArabianNights.getInstance().getCode()); - setCodes.add(mage.sets.Antiquities.getInstance().getCode()); - setCodes.add(mage.sets.Legends.getInstance().getCode()); - setCodes.add(mage.sets.TheDark.getInstance().getCode()); - setCodes.add(mage.sets.FallenEmpires.getInstance().getCode()); - setCodes.add(mage.sets.MediaInserts.getInstance().getCode()); - - // ante cards and conspiracies banned, with specifically mentioned ones called out. - banned.add("Advantageous Proclamation"); - banned.add("Amulet of Quoz"); - banned.add("Backup Plan"); - banned.add("Brago's Favor"); - banned.add("Bronze Tablet"); /// - banned.add("Contract from Below"); /// - banned.add("Darkpact"); /// - banned.add("Demonic Attorney"); /// - banned.add("Double Stroke"); - banned.add("Immediate Action"); - banned.add("Iterative Analysis"); - banned.add("Jeweled Bird"); /// - banned.add("Muzzio's Preparations"); - banned.add("Power Play"); - banned.add("Rebirth"); /// - banned.add("Secret Summoning"); - banned.add("Secrets of Paradise"); - banned.add("Sentinel Dispatch"); - banned.add("Shahrazad"); - banned.add("Tempest Efreet"); /// - banned.add("Timmerian Fiends"); - banned.add("Unexpected Potential"); - banned.add("Worldknit"); - - //Let Media Inserts Arena and Sewers of Estark being only cards playable - banned.add("Acquire"); - banned.add("Aeronaut Tinkerer"); - banned.add("Ajani, Caller of the Pride"); - banned.add("Ajani Steadfast"); - banned.add("Alhammarret, High Arbiter"); - banned.add("Angelic Skirmisher"); - banned.add("Angel of Glory's Rise"); - banned.add("Ankle Shanker"); - banned.add("Arashin Sovereign"); - banned.add("Archfiend of Depravity"); - banned.add("Archfiend of Ifnir"); - banned.add("Arrest"); - banned.add("Assembled Alphas"); - banned.add("Avalanche Tusker"); - banned.add("Barrage Tyrant"); - banned.add("Bloodthrone Vampire"); - banned.add("Boltwing Marauder"); - banned.add("Bonescythe Sliver"); - banned.add("Breath of Malfegor"); - banned.add("Brion Stoutarm"); - banned.add("Broodmate Dragon"); - banned.add("Burning Sun's Avatar"); - banned.add("Canopy Vista"); - banned.add("Cathedral of War"); - banned.add("Celestial Colonnade"); - banned.add("Chandra, Fire of Kaladesh"); - banned.add("Chandra, Flamecaller"); - banned.add("Chandra, Pyromaster"); - banned.add("Chandra, Pyromaster"); - banned.add("Chandra, Roaring Flame"); - banned.add("Chandra, Torch of Defiance"); - banned.add("Chandra's Fury"); - banned.add("Chandra's Phoenix"); - banned.add("Cinder Glade"); - banned.add("Consume Spirit"); - banned.add("Corrupt"); - banned.add("Day of Judgment"); - banned.add("Deepfathom Skulker"); - banned.add("Defiant Bloodlord"); - banned.add("Devil's Play"); - banned.add("Dragon Fodder"); - banned.add("Dragonlord's Servant"); - banned.add("Dragonscale General"); - banned.add("Dread Defiler"); - banned.add("Dreg Mangler"); - banned.add("Drogskol Cavalry"); - banned.add("Dromoka, the Eternal"); - banned.add("Drowner of Hope"); - banned.add("Duress"); - banned.add("Dwynen, Gilt-Leaf Daen"); - banned.add("Eidolon of Blossoms"); - banned.add("Electrolyze"); - banned.add("Elusive Tormentor"); - banned.add("Emrakul, the Aeons Torn"); - banned.add("Evolving Wilds"); - banned.add("Faithless Looting"); - banned.add("Fated Conflagration"); - banned.add("Feast of Blood"); - banned.add("Flameblade Angel"); - banned.add("Flamerush Rider"); - banned.add("Foe-Razer Regent"); - banned.add("Frost Titan"); - banned.add("Garruk, Apex Predator"); - banned.add("Garruk, Caller of Beasts"); - banned.add("Garruk Wildspeaker"); - banned.add("Gaze of Granite"); - banned.add("Genesis Hydra"); - banned.add("Giant Badger"); - banned.add("Gideon of the Trials"); - banned.add("Gideon, Ally of Zendikar"); - banned.add("Gideon, Battle-Forged"); - banned.add("Gladehart Cavalry"); - banned.add("Goblin Dark-Dwellers"); - banned.add("Goblin Rabblemaster"); - banned.add("Gravecrawler"); - banned.add("Grave Titan"); - banned.add("Guul Draz Assassin"); - banned.add("Hamletback Goliath"); - banned.add("Harbinger of the Hunt"); - banned.add("Hero of Goma Fada"); - banned.add("Hixus, Prison Warden"); - banned.add("Honored Hierarch"); - banned.add("Honor of the Pure"); - banned.add("Inferno Titan"); - banned.add("Insidious Mist"); - banned.add("Ivorytusk Fortress"); - banned.add("Jace Beleren"); - banned.add("Jace, Memory Adept"); - banned.add("Jace, Telepath Unbound"); - banned.add("Jace, the Living Guildpact"); - banned.add("Jace, Unraveler of Secrets"); - banned.add("Jace, Unraveler of Secrets"); - banned.add("Jace, Vryn's Prodigy"); - banned.add("Jaya Ballard, Task Mage"); - banned.add("Karametra's Acolyte"); - banned.add("Knight Exemplar"); - banned.add("Kor Skyfisher"); - banned.add("Kothophed, Soul Hoarder"); - banned.add("Kytheon, Hero of Akros"); - banned.add("Lightning Hounds"); - banned.add("Liliana of the Dark Realms"); - banned.add("Liliana, Death's Majesty"); - banned.add("Liliana, Defiant Necromancer"); - banned.add("Liliana, the Last Hope"); - banned.add("Liliana Vess"); - banned.add("Liliana Vess"); - banned.add("Magister of Worth"); - banned.add("Mana Crypt"); - banned.add("Markov Dreadknight"); - banned.add("Memoricide"); - banned.add("Merfolk Mesmerist"); - banned.add("Mirran Crusader"); - banned.add("Munda's Vanguard"); - banned.add("Necromaster Dragon"); - banned.add("Nephalia Moondrakes"); - banned.add("Niblis of Frost"); - banned.add("Nicol Bolas, God-Pharaoh"); - banned.add("Nightveil Specter"); - banned.add("Nissa Revane"); - banned.add("Nissa, Sage Animist"); - banned.add("Nissa, Steward of Elements"); - banned.add("Nissa, Vastwood Seer"); - banned.add("Nissa, Voice of Zendikar"); - banned.add("Nissa, Worldwaker"); - banned.add("Noosegraf Mob"); - banned.add("Ogre Arsonist"); - banned.add("Ogre Battledriver"); - banned.add("Ojutai's Command"); - banned.add("Oran-Rief Hydra"); - banned.add("Phyrexian Rager"); - banned.add("Pia and Kiran Nalaar"); - banned.add("Prairie Stream"); - banned.add("Primordial Hydra"); - banned.add("Pristine Skywise"); - banned.add("Rakshasa Vizier"); - banned.add("Ratchet Bomb"); - banned.add("Rattleclaw Mystic"); - banned.add("Ravenous Bloodseeker"); - banned.add("Relic Seeker"); - banned.add("Render Silent"); - banned.add("Retaliator Griffin"); - banned.add("Ruinous Path"); - banned.add("Sage-Eye Avengers"); - banned.add("Sage of the Inward Eye"); - banned.add("Sanctifier of Souls"); - banned.add("Sandsteppe Citadel"); - banned.add("Scavenging Ooze"); - banned.add("Scrap Trawler"); - banned.add("Scythe Leopard"); - banned.add("Seeker of the Way"); - banned.add("Serra Avatar"); - banned.add("Shamanic Revelation"); - banned.add("Siege Rhino"); - banned.add("Silverblade Paladin"); - banned.add("Silver Drake"); - banned.add("Skyship Stalker"); - banned.add("Smoldering Marsh"); - banned.add("Soul of Ravnica"); - banned.add("Soul of Zendikar"); - banned.add("Soul Swallower"); - banned.add("Spined Wurm"); - banned.add("Standstill"); - banned.add("Stealer of Secrets"); - banned.add("Steward of Valeron"); - banned.add("Sultai Charm"); - banned.add("Sunblast Angel"); - banned.add("Sunken Hollow"); - banned.add("Supreme Verdict"); - banned.add("Surgical Extraction"); - banned.add("Sylvan Caryatid"); - banned.add("Temur War Shaman"); - banned.add("Terastodon"); - banned.add("Thalia, Heretic Cathar"); - banned.add("Treasure Hunt"); - banned.add("Turnabout"); - banned.add("Tyrant of Valakut"); - banned.add("Ulvenwald Observer"); - banned.add("Valorous Stance"); - banned.add("Vampire Nocturnus"); - banned.add("Voidmage Husher"); - banned.add("Warmonger"); - banned.add("Wash Out"); - banned.add("Wildfire Eternal"); - banned.add("Windseeker Centaur"); - banned.add("Xathrid Necromancer"); - - restricted.add("Ancestral Recall"); - restricted.add("Balance"); - restricted.add("Black Lotus"); - restricted.add("Braingeyser"); - restricted.add("Channel"); - restricted.add("Chaos Orb"); - restricted.add("Demonic Tutor"); - restricted.add("Library of Alexandria"); - restricted.add("Mana Drain"); - restricted.add("Maze of Ith"); - restricted.add("Mind Twist"); - restricted.add("Mox Emerald"); - restricted.add("Mox Jet"); - restricted.add("Mox Pearl"); - restricted.add("Mox Ruby"); - restricted.add("Mox Sapphire"); - restricted.add("Recall"); - restricted.add("Regrowth"); - restricted.add("Sol Ring"); - restricted.add("Time Vault"); - restricted.add("Time Walk"); - restricted.add("Timetwister"); - restricted.add("Wheel of Fortune"); - } - -} + +package mage.deck; + +import mage.cards.ExpansionSet; +import mage.cards.Sets; +import mage.cards.decks.Constructed; +import mage.constants.SetType; + +/** + * This class validates a deck for the Old School 93/94 format, specifically for + * the EC Rules. + * + * This was originally made to follow the deck construction rules found at the + * Old School Mtg blog found at: + * http://oldschool-mtg.blogspot.com/p/banrestriction.html + * + * There is no mana burn in this version of old school + * + * @author jmharmon + */ +public class OldSchool9394EC extends Constructed { + + public OldSchool9394EC() { + super("Constructed - Old School 93/94 - EC Rules"); + + // use the set instances to make sure that we get the correct set codes + setCodes.add(mage.sets.LimitedEditionAlpha.getInstance().getCode()); + setCodes.add(mage.sets.LimitedEditionBeta.getInstance().getCode()); + setCodes.add(mage.sets.UnlimitedEdition.getInstance().getCode()); + setCodes.add(mage.sets.ArabianNights.getInstance().getCode()); + setCodes.add(mage.sets.Antiquities.getInstance().getCode()); + setCodes.add(mage.sets.Legends.getInstance().getCode()); + setCodes.add(mage.sets.TheDark.getInstance().getCode()); + setCodes.add(mage.sets.FallenEmpires.getInstance().getCode()); + setCodes.add(mage.sets.MediaInserts.getInstance().getCode()); + + // ante cards and conspiracies banned, with specifically mentioned ones called out. + banned.add("Advantageous Proclamation"); + banned.add("Amulet of Quoz"); + banned.add("Backup Plan"); + banned.add("Brago's Favor"); + banned.add("Bronze Tablet"); /// + banned.add("Contract from Below"); /// + banned.add("Darkpact"); /// + banned.add("Demonic Attorney"); /// + banned.add("Double Stroke"); + banned.add("Immediate Action"); + banned.add("Iterative Analysis"); + banned.add("Jeweled Bird"); /// + banned.add("Muzzio's Preparations"); + banned.add("Power Play"); + banned.add("Rebirth"); /// + banned.add("Secret Summoning"); + banned.add("Secrets of Paradise"); + banned.add("Sentinel Dispatch"); + banned.add("Shahrazad"); + banned.add("Tempest Efreet"); /// + banned.add("Timmerian Fiends"); + banned.add("Unexpected Potential"); + banned.add("Worldknit"); + + //Let Media Inserts Arena and Sewers of Estark being only cards playable + banned.add("Acquire"); + banned.add("Aeronaut Tinkerer"); + banned.add("Ajani, Caller of the Pride"); + banned.add("Ajani Steadfast"); + banned.add("Alhammarret, High Arbiter"); + banned.add("Angelic Skirmisher"); + banned.add("Angel of Glory's Rise"); + banned.add("Ankle Shanker"); + banned.add("Arashin Sovereign"); + banned.add("Archfiend of Depravity"); + banned.add("Archfiend of Ifnir"); + banned.add("Arrest"); + banned.add("Assembled Alphas"); + banned.add("Avalanche Tusker"); + banned.add("Barrage Tyrant"); + banned.add("Bloodthrone Vampire"); + banned.add("Boltwing Marauder"); + banned.add("Bonescythe Sliver"); + banned.add("Breath of Malfegor"); + banned.add("Brion Stoutarm"); + banned.add("Broodmate Dragon"); + banned.add("Burning Sun's Avatar"); + banned.add("Canopy Vista"); + banned.add("Cathedral of War"); + banned.add("Celestial Colonnade"); + banned.add("Chandra, Fire of Kaladesh"); + banned.add("Chandra, Flamecaller"); + banned.add("Chandra, Pyromaster"); + banned.add("Chandra, Pyromaster"); + banned.add("Chandra, Roaring Flame"); + banned.add("Chandra, Torch of Defiance"); + banned.add("Chandra's Fury"); + banned.add("Chandra's Phoenix"); + banned.add("Cinder Glade"); + banned.add("Consume Spirit"); + banned.add("Corrupt"); + banned.add("Day of Judgment"); + banned.add("Deepfathom Skulker"); + banned.add("Defiant Bloodlord"); + banned.add("Devil's Play"); + banned.add("Dragon Fodder"); + banned.add("Dragonlord's Servant"); + banned.add("Dragonscale General"); + banned.add("Dread Defiler"); + banned.add("Dreg Mangler"); + banned.add("Drogskol Cavalry"); + banned.add("Dromoka, the Eternal"); + banned.add("Drowner of Hope"); + banned.add("Duress"); + banned.add("Dwynen, Gilt-Leaf Daen"); + banned.add("Eidolon of Blossoms"); + banned.add("Electrolyze"); + banned.add("Elusive Tormentor"); + banned.add("Emrakul, the Aeons Torn"); + banned.add("Evolving Wilds"); + banned.add("Faithless Looting"); + banned.add("Fated Conflagration"); + banned.add("Feast of Blood"); + banned.add("Flameblade Angel"); + banned.add("Flamerush Rider"); + banned.add("Foe-Razer Regent"); + banned.add("Frost Titan"); + banned.add("Garruk, Apex Predator"); + banned.add("Garruk, Caller of Beasts"); + banned.add("Garruk Wildspeaker"); + banned.add("Gaze of Granite"); + banned.add("Genesis Hydra"); + banned.add("Giant Badger"); + banned.add("Gideon of the Trials"); + banned.add("Gideon, Ally of Zendikar"); + banned.add("Gideon, Battle-Forged"); + banned.add("Gladehart Cavalry"); + banned.add("Goblin Dark-Dwellers"); + banned.add("Goblin Rabblemaster"); + banned.add("Gravecrawler"); + banned.add("Grave Titan"); + banned.add("Guul Draz Assassin"); + banned.add("Hamletback Goliath"); + banned.add("Harbinger of the Hunt"); + banned.add("Hero of Goma Fada"); + banned.add("Hixus, Prison Warden"); + banned.add("Honored Hierarch"); + banned.add("Honor of the Pure"); + banned.add("Inferno Titan"); + banned.add("Insidious Mist"); + banned.add("Ivorytusk Fortress"); + banned.add("Jace Beleren"); + banned.add("Jace, Memory Adept"); + banned.add("Jace, Telepath Unbound"); + banned.add("Jace, the Living Guildpact"); + banned.add("Jace, Unraveler of Secrets"); + banned.add("Jace, Unraveler of Secrets"); + banned.add("Jace, Vryn's Prodigy"); + banned.add("Jaya Ballard, Task Mage"); + banned.add("Karametra's Acolyte"); + banned.add("Knight Exemplar"); + banned.add("Kor Skyfisher"); + banned.add("Kothophed, Soul Hoarder"); + banned.add("Kytheon, Hero of Akros"); + banned.add("Lightning Hounds"); + banned.add("Liliana of the Dark Realms"); + banned.add("Liliana, Death's Majesty"); + banned.add("Liliana, Defiant Necromancer"); + banned.add("Liliana, the Last Hope"); + banned.add("Liliana Vess"); + banned.add("Liliana Vess"); + banned.add("Magister of Worth"); + banned.add("Mana Crypt"); + banned.add("Markov Dreadknight"); + banned.add("Memoricide"); + banned.add("Merfolk Mesmerist"); + banned.add("Mirran Crusader"); + banned.add("Munda's Vanguard"); + banned.add("Necromaster Dragon"); + banned.add("Nephalia Moondrakes"); + banned.add("Niblis of Frost"); + banned.add("Nicol Bolas, God-Pharaoh"); + banned.add("Nightveil Specter"); + banned.add("Nissa Revane"); + banned.add("Nissa, Sage Animist"); + banned.add("Nissa, Steward of Elements"); + banned.add("Nissa, Vastwood Seer"); + banned.add("Nissa, Voice of Zendikar"); + banned.add("Nissa, Worldwaker"); + banned.add("Noosegraf Mob"); + banned.add("Ogre Arsonist"); + banned.add("Ogre Battledriver"); + banned.add("Ojutai's Command"); + banned.add("Oran-Rief Hydra"); + banned.add("Phyrexian Rager"); + banned.add("Pia and Kiran Nalaar"); + banned.add("Prairie Stream"); + banned.add("Primordial Hydra"); + banned.add("Pristine Skywise"); + banned.add("Rakshasa Vizier"); + banned.add("Ratchet Bomb"); + banned.add("Rattleclaw Mystic"); + banned.add("Ravenous Bloodseeker"); + banned.add("Relic Seeker"); + banned.add("Render Silent"); + banned.add("Retaliator Griffin"); + banned.add("Ruinous Path"); + banned.add("Sage-Eye Avengers"); + banned.add("Sage of the Inward Eye"); + banned.add("Sanctifier of Souls"); + banned.add("Sandsteppe Citadel"); + banned.add("Scavenging Ooze"); + banned.add("Scrap Trawler"); + banned.add("Scythe Leopard"); + banned.add("Seeker of the Way"); + banned.add("Serra Avatar"); + banned.add("Shamanic Revelation"); + banned.add("Siege Rhino"); + banned.add("Silverblade Paladin"); + banned.add("Silver Drake"); + banned.add("Skyship Stalker"); + banned.add("Smoldering Marsh"); + banned.add("Soul of Ravnica"); + banned.add("Soul of Zendikar"); + banned.add("Soul Swallower"); + banned.add("Spined Wurm"); + banned.add("Standstill"); + banned.add("Stealer of Secrets"); + banned.add("Steward of Valeron"); + banned.add("Sultai Charm"); + banned.add("Sunblast Angel"); + banned.add("Sunken Hollow"); + banned.add("Supreme Verdict"); + banned.add("Surgical Extraction"); + banned.add("Sylvan Caryatid"); + banned.add("Temur War Shaman"); + banned.add("Terastodon"); + banned.add("Thalia, Heretic Cathar"); + banned.add("Treasure Hunt"); + banned.add("Turnabout"); + banned.add("Tyrant of Valakut"); + banned.add("Ulvenwald Observer"); + banned.add("Valorous Stance"); + banned.add("Vampire Nocturnus"); + banned.add("Voidmage Husher"); + banned.add("Warmonger"); + banned.add("Wash Out"); + banned.add("Wildfire Eternal"); + banned.add("Windseeker Centaur"); + banned.add("Xathrid Necromancer"); + + restricted.add("Ancestral Recall"); + restricted.add("Balance"); + restricted.add("Black Lotus"); + restricted.add("Braingeyser"); + restricted.add("Channel"); + restricted.add("Chaos Orb"); + restricted.add("Demonic Tutor"); + restricted.add("Library of Alexandria"); + restricted.add("Mana Drain"); + restricted.add("Maze of Ith"); + restricted.add("Mind Twist"); + restricted.add("Mox Emerald"); + restricted.add("Mox Jet"); + restricted.add("Mox Pearl"); + restricted.add("Mox Ruby"); + restricted.add("Mox Sapphire"); + restricted.add("Recall"); + restricted.add("Regrowth"); + restricted.add("Sol Ring"); + restricted.add("Time Vault"); + restricted.add("Time Walk"); + restricted.add("Timetwister"); + restricted.add("Wheel of Fortune"); + } + +} diff --git a/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/OldSchool9394EG.java b/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/OldSchool9394EG.java index e11aabb7715..3ce11e196af 100644 --- a/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/OldSchool9394EG.java +++ b/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/OldSchool9394EG.java @@ -1,92 +1,92 @@ - -package mage.deck; - -import mage.cards.ExpansionSet; -import mage.cards.Sets; -import mage.cards.decks.Constructed; -import mage.constants.SetType; - -/** - * This class validates a deck for the Old School 93/94 format, specifically the - * EudoGames Rules. - * - * This was originally made to follow the deck construction rules found at the - * Old School Mtg blog found at: - * http://oldschool-mtg.blogspot.com/p/banrestriction.html - * - * There is no mana burn in this version of old school. - * - * @author jmharmon - */ -public class OldSchool9394EG extends Constructed { - - public OldSchool9394EG() { - super("Constructed - Old School 93/94 - EudoGames Rules"); - - // use the set instances to make sure that we get the correct set codes - setCodes.add(mage.sets.LimitedEditionAlpha.getInstance().getCode()); - setCodes.add(mage.sets.LimitedEditionBeta.getInstance().getCode()); - setCodes.add(mage.sets.UnlimitedEdition.getInstance().getCode()); - setCodes.add(mage.sets.ArabianNights.getInstance().getCode()); - setCodes.add(mage.sets.Antiquities.getInstance().getCode()); - setCodes.add(mage.sets.Legends.getInstance().getCode()); - setCodes.add(mage.sets.TheDark.getInstance().getCode()); - setCodes.add(mage.sets.RevisedEdition.getInstance().getCode()); - setCodes.add(mage.sets.FallenEmpires.getInstance().getCode()); - setCodes.add(mage.sets.Chronicles.getInstance().getCode()); - - // ante cards and conspiracies banned, with specifically mentioned ones called out. - banned.add("Advantageous Proclamation"); - banned.add("Amulet of Quoz"); - banned.add("Backup Plan"); - banned.add("Brago's Favor"); - banned.add("Bronze Tablet"); /// - banned.add("Contract from Below"); /// - banned.add("Darkpact"); /// - banned.add("Demonic Attorney"); /// - banned.add("Double Stroke"); - banned.add("Immediate Action"); - banned.add("Iterative Analysis"); - banned.add("Jeweled Bird"); /// - banned.add("Muzzio's Preparations"); - banned.add("Power Play"); - banned.add("Rebirth"); /// - banned.add("Secret Summoning"); - banned.add("Secrets of Paradise"); - banned.add("Sentinel Dispatch"); - banned.add("Shahrazad"); - banned.add("Tempest Efreet"); /// - banned.add("Timmerian Fiends"); - banned.add("Unexpected Potential"); - banned.add("Worldknit"); - - restricted.add("Ancestral Recall"); - restricted.add("Balance"); - restricted.add("Black Lotus"); - restricted.add("Braingeyser"); - restricted.add("Channel"); - restricted.add("Chaos Orb"); - restricted.add("Demonic Tutor"); - restricted.add("Library of Alexandria"); - restricted.add("Mana Drain"); - restricted.add("Mana Vault"); - restricted.add("Maze of Ith"); - restricted.add("Mind Twist"); - restricted.add("Mishra's Workshop"); - restricted.add("Mox Emerald"); - restricted.add("Mox Jet"); - restricted.add("Mox Pearl"); - restricted.add("Mox Ruby"); - restricted.add("Mox Sapphire"); - restricted.add("Regrowth"); - restricted.add("Recall"); - restricted.add("Shahrazad"); - restricted.add("Sol Ring"); - restricted.add("Strip Mine"); - restricted.add("Time Vault"); - restricted.add("Time Walk"); - restricted.add("Timetwister"); - restricted.add("Wheel of Fortune"); - } - -} + +package mage.deck; + +import mage.cards.ExpansionSet; +import mage.cards.Sets; +import mage.cards.decks.Constructed; +import mage.constants.SetType; + +/** + * This class validates a deck for the Old School 93/94 format, specifically the + * EudoGames Rules. + * + * This was originally made to follow the deck construction rules found at the + * Old School Mtg blog found at: + * http://oldschool-mtg.blogspot.com/p/banrestriction.html + * + * There is no mana burn in this version of old school. + * + * @author jmharmon + */ +public class OldSchool9394EG extends Constructed { + + public OldSchool9394EG() { + super("Constructed - Old School 93/94 - EudoGames Rules"); + + // use the set instances to make sure that we get the correct set codes + setCodes.add(mage.sets.LimitedEditionAlpha.getInstance().getCode()); + setCodes.add(mage.sets.LimitedEditionBeta.getInstance().getCode()); + setCodes.add(mage.sets.UnlimitedEdition.getInstance().getCode()); + setCodes.add(mage.sets.ArabianNights.getInstance().getCode()); + setCodes.add(mage.sets.Antiquities.getInstance().getCode()); + setCodes.add(mage.sets.Legends.getInstance().getCode()); + setCodes.add(mage.sets.TheDark.getInstance().getCode()); + setCodes.add(mage.sets.RevisedEdition.getInstance().getCode()); + setCodes.add(mage.sets.FallenEmpires.getInstance().getCode()); + setCodes.add(mage.sets.Chronicles.getInstance().getCode()); + + // ante cards and conspiracies banned, with specifically mentioned ones called out. + banned.add("Advantageous Proclamation"); + banned.add("Amulet of Quoz"); + banned.add("Backup Plan"); + banned.add("Brago's Favor"); + banned.add("Bronze Tablet"); /// + banned.add("Contract from Below"); /// + banned.add("Darkpact"); /// + banned.add("Demonic Attorney"); /// + banned.add("Double Stroke"); + banned.add("Immediate Action"); + banned.add("Iterative Analysis"); + banned.add("Jeweled Bird"); /// + banned.add("Muzzio's Preparations"); + banned.add("Power Play"); + banned.add("Rebirth"); /// + banned.add("Secret Summoning"); + banned.add("Secrets of Paradise"); + banned.add("Sentinel Dispatch"); + banned.add("Shahrazad"); + banned.add("Tempest Efreet"); /// + banned.add("Timmerian Fiends"); + banned.add("Unexpected Potential"); + banned.add("Worldknit"); + + restricted.add("Ancestral Recall"); + restricted.add("Balance"); + restricted.add("Black Lotus"); + restricted.add("Braingeyser"); + restricted.add("Channel"); + restricted.add("Chaos Orb"); + restricted.add("Demonic Tutor"); + restricted.add("Library of Alexandria"); + restricted.add("Mana Drain"); + restricted.add("Mana Vault"); + restricted.add("Maze of Ith"); + restricted.add("Mind Twist"); + restricted.add("Mishra's Workshop"); + restricted.add("Mox Emerald"); + restricted.add("Mox Jet"); + restricted.add("Mox Pearl"); + restricted.add("Mox Ruby"); + restricted.add("Mox Sapphire"); + restricted.add("Regrowth"); + restricted.add("Recall"); + restricted.add("Shahrazad"); + restricted.add("Sol Ring"); + restricted.add("Strip Mine"); + restricted.add("Time Vault"); + restricted.add("Time Walk"); + restricted.add("Timetwister"); + restricted.add("Wheel of Fortune"); + } + +} diff --git a/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/OldSchool9394Italian.java b/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/OldSchool9394Italian.java index 271283e1c73..c5e97d44b19 100644 --- a/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/OldSchool9394Italian.java +++ b/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/OldSchool9394Italian.java @@ -1,87 +1,87 @@ - -package mage.deck; - -import mage.cards.ExpansionSet; -import mage.cards.Sets; -import mage.cards.decks.Constructed; -import mage.constants.SetType; - -/** - * This class validates a deck for the Old School 93/94 format, specifically for - * the Italian Rules. - * - * This was originally made to follow the deck construction rules found at the - * Old School Mtg blog found at: - * http://oldschool-mtg.blogspot.com/p/banrestriction.html - * - * There is no mana burn in this version of old school - * - * @author jmharmon - */ -public class OldSchool9394Italian extends Constructed{ - - public OldSchool9394Italian() { - super("Constructed - Old School 93/94 - Italian Rules"); - - // use the set instances to make sure that we get the correct set codes - setCodes.add(mage.sets.LimitedEditionAlpha.getInstance().getCode()); - setCodes.add(mage.sets.LimitedEditionBeta.getInstance().getCode()); - setCodes.add(mage.sets.UnlimitedEdition.getInstance().getCode()); - setCodes.add(mage.sets.ArabianNights.getInstance().getCode()); - setCodes.add(mage.sets.Antiquities.getInstance().getCode()); - setCodes.add(mage.sets.Legends.getInstance().getCode()); - setCodes.add(mage.sets.TheDark.getInstance().getCode()); - setCodes.add(mage.sets.RevisedEdition.getInstance().getCode()); - - // ante cards and conspiracies banned, with specifically mentioned ones called out. - banned.add("Advantageous Proclamation"); - banned.add("Amulet of Quoz"); - banned.add("Backup Plan"); - banned.add("Brago's Favor"); - banned.add("Bronze Tablet"); /// - banned.add("Contract from Below"); /// - banned.add("Darkpact"); /// - banned.add("Demonic Attorney"); /// - banned.add("Double Stroke"); - banned.add("Immediate Action"); - banned.add("Iterative Analysis"); - banned.add("Jeweled Bird"); /// - banned.add("Muzzio's Preparations"); - banned.add("Power Play"); - banned.add("Rebirth"); /// - banned.add("Secret Summoning"); - banned.add("Secrets of Paradise"); - banned.add("Sentinel Dispatch"); - banned.add("Shahrazad"); - banned.add("Tempest Efreet"); /// - banned.add("Timmerian Fiends"); - banned.add("Unexpected Potential"); - banned.add("Worldknit"); - - restricted.add("Ancestral Recall"); - restricted.add("Balance"); - restricted.add("Black Lotus"); - restricted.add("Braingeyser"); - restricted.add("Channel"); - restricted.add("Chaos Orb"); - restricted.add("Demonic Tutor"); - restricted.add("Library of Alexandria"); - restricted.add("Mana Drain"); - restricted.add("Mind Twist"); - restricted.add("Mishra's Workshop"); - restricted.add("Mox Emerald"); - restricted.add("Mox Jet"); - restricted.add("Mox Pearl"); - restricted.add("Mox Ruby"); - restricted.add("Mox Sapphire"); - restricted.add("Regrowth"); - restricted.add("Shahrazad"); - restricted.add("Sol Ring"); - restricted.add("Strip Mine"); - restricted.add("Time Vault"); - restricted.add("Time Walk"); - restricted.add("Timetwister"); - restricted.add("Wheel of Fortune"); - - } -} + +package mage.deck; + +import mage.cards.ExpansionSet; +import mage.cards.Sets; +import mage.cards.decks.Constructed; +import mage.constants.SetType; + +/** + * This class validates a deck for the Old School 93/94 format, specifically for + * the Italian Rules. + * + * This was originally made to follow the deck construction rules found at the + * Old School Mtg blog found at: + * http://oldschool-mtg.blogspot.com/p/banrestriction.html + * + * There is no mana burn in this version of old school + * + * @author jmharmon + */ +public class OldSchool9394Italian extends Constructed{ + + public OldSchool9394Italian() { + super("Constructed - Old School 93/94 - Italian Rules"); + + // use the set instances to make sure that we get the correct set codes + setCodes.add(mage.sets.LimitedEditionAlpha.getInstance().getCode()); + setCodes.add(mage.sets.LimitedEditionBeta.getInstance().getCode()); + setCodes.add(mage.sets.UnlimitedEdition.getInstance().getCode()); + setCodes.add(mage.sets.ArabianNights.getInstance().getCode()); + setCodes.add(mage.sets.Antiquities.getInstance().getCode()); + setCodes.add(mage.sets.Legends.getInstance().getCode()); + setCodes.add(mage.sets.TheDark.getInstance().getCode()); + setCodes.add(mage.sets.RevisedEdition.getInstance().getCode()); + + // ante cards and conspiracies banned, with specifically mentioned ones called out. + banned.add("Advantageous Proclamation"); + banned.add("Amulet of Quoz"); + banned.add("Backup Plan"); + banned.add("Brago's Favor"); + banned.add("Bronze Tablet"); /// + banned.add("Contract from Below"); /// + banned.add("Darkpact"); /// + banned.add("Demonic Attorney"); /// + banned.add("Double Stroke"); + banned.add("Immediate Action"); + banned.add("Iterative Analysis"); + banned.add("Jeweled Bird"); /// + banned.add("Muzzio's Preparations"); + banned.add("Power Play"); + banned.add("Rebirth"); /// + banned.add("Secret Summoning"); + banned.add("Secrets of Paradise"); + banned.add("Sentinel Dispatch"); + banned.add("Shahrazad"); + banned.add("Tempest Efreet"); /// + banned.add("Timmerian Fiends"); + banned.add("Unexpected Potential"); + banned.add("Worldknit"); + + restricted.add("Ancestral Recall"); + restricted.add("Balance"); + restricted.add("Black Lotus"); + restricted.add("Braingeyser"); + restricted.add("Channel"); + restricted.add("Chaos Orb"); + restricted.add("Demonic Tutor"); + restricted.add("Library of Alexandria"); + restricted.add("Mana Drain"); + restricted.add("Mind Twist"); + restricted.add("Mishra's Workshop"); + restricted.add("Mox Emerald"); + restricted.add("Mox Jet"); + restricted.add("Mox Pearl"); + restricted.add("Mox Ruby"); + restricted.add("Mox Sapphire"); + restricted.add("Regrowth"); + restricted.add("Shahrazad"); + restricted.add("Sol Ring"); + restricted.add("Strip Mine"); + restricted.add("Time Vault"); + restricted.add("Time Walk"); + restricted.add("Timetwister"); + restricted.add("Wheel of Fortune"); + + } +} diff --git a/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/StarWarsBlock.java b/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/StarWarsBlock.java index a65dafcd6f7..37d129c61c3 100644 --- a/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/StarWarsBlock.java +++ b/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/StarWarsBlock.java @@ -1,21 +1,21 @@ -/* - * 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.deck; - -import mage.cards.decks.Constructed; - -/** - * - * @author LevelX2 - */ -public class StarWarsBlock extends Constructed { - - public StarWarsBlock() { - super("Constructed Custom - Star Wars Block"); - setCodes.add(mage.sets.StarWars.getInstance().getCode()); - } - -} +/* + * 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.deck; + +import mage.cards.decks.Constructed; + +/** + * + * @author LevelX2 + */ +public class StarWarsBlock extends Constructed { + + public StarWarsBlock() { + super("Constructed Custom - Star Wars Block"); + setCodes.add(mage.sets.StarWars.getInstance().getCode()); + } + +} From 8fdd3511b023d4d4ff9277228393ff8ff57a1da6 Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Wed, 15 Jan 2020 23:17:20 +0100 Subject: [PATCH 005/182] Add the HarperPrism Book Promos (PHPR) promotional set. --- .../dl/sources/ScryfallImageSupportCards.java | 2 +- .../src/mage/sets/HarperPrismBookPromos.java | 30 +++++++++++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 Mage.Sets/src/mage/sets/HarperPrismBookPromos.java diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java index 331162db55b..5f88be6b28c 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java @@ -65,7 +65,7 @@ public class ScryfallImageSupportCards { add("G99"); add("G00"); add("G01"); - + // Other promo sets add("PWOR"); add("PWOS"); diff --git a/Mage.Sets/src/mage/sets/HarperPrismBookPromos.java b/Mage.Sets/src/mage/sets/HarperPrismBookPromos.java new file mode 100644 index 00000000000..f2894f81d0c --- /dev/null +++ b/Mage.Sets/src/mage/sets/HarperPrismBookPromos.java @@ -0,0 +1,30 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/phpr + */ +public class HarperPrismBookPromos extends ExpansionSet { + + private static final HarperPrismBookPromos instance = new HarperPrismBookPromos(); + + public static HarperPrismBookPromos getInstance() { + return instance; + } + + private HarperPrismBookPromos() { + super("HarperPrism Book Promos", "PHPR", ExpansionSet.buildDate(1994, 9, 1), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Arena", 1, Rarity.RARE, mage.cards.a.Arena.class)); + cards.add(new SetCardInfo("Giant Badger", 4, Rarity.RARE, mage.cards.g.GiantBadger.class)); + cards.add(new SetCardInfo("Mana Crypt", 5, Rarity.RARE, mage.cards.m.ManaCrypt.class)); + // TODO: Card not implemented + //cards.add(new SetCardInfo("Sewers of Estark", 2, Rarity.RARE, mage.cards.s.SewersOfEstark.class)) + cards.add(new SetCardInfo("Windseeker Centaur", 3, Rarity.RARE, mage.cards.w.WindseekerCentaur.class)); + } +} \ No newline at end of file From 0a7cc9672e7a2b5f0123224c9f7f35892350ca64 Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Wed, 15 Jan 2020 23:22:57 +0100 Subject: [PATCH 006/182] Removed the HarperPrism Book Promos cards from the MediaInserts set. Removed the cards from the OldSchool* ban lists, because this change makes them unavailable to the format. --- .../Mage.Deck.Constructed/src/mage/deck/OldSchool9394CFB.java | 3 --- .../Mage.Deck.Constructed/src/mage/deck/OldSchool9394EC.java | 3 --- Mage.Sets/src/mage/sets/MediaInserts.java | 3 --- 3 files changed, 9 deletions(-) diff --git a/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/OldSchool9394CFB.java b/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/OldSchool9394CFB.java index d5322be62bd..36dfa55fcec 100644 --- a/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/OldSchool9394CFB.java +++ b/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/OldSchool9394CFB.java @@ -126,7 +126,6 @@ public class OldSchool9394CFB extends Constructed { banned.add("Garruk Wildspeaker"); banned.add("Gaze of Granite"); banned.add("Genesis Hydra"); - banned.add("Giant Badger"); banned.add("Gideon of the Trials"); banned.add("Gideon, Ally of Zendikar"); banned.add("Gideon, Battle-Forged"); @@ -166,7 +165,6 @@ public class OldSchool9394CFB extends Constructed { banned.add("Liliana Vess"); banned.add("Liliana Vess"); banned.add("Magister of Worth"); - banned.add("Mana Crypt"); banned.add("Markov Dreadknight"); banned.add("Memoricide"); banned.add("Merfolk Mesmerist"); @@ -242,7 +240,6 @@ public class OldSchool9394CFB extends Constructed { banned.add("Warmonger"); banned.add("Wash Out"); banned.add("Wildfire Eternal"); - banned.add("Windseeker Centaur"); banned.add("Xathrid Necromancer"); restricted.add("Ancestral Recall"); diff --git a/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/OldSchool9394EC.java b/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/OldSchool9394EC.java index 0735f872ee2..b502c7d6788 100644 --- a/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/OldSchool9394EC.java +++ b/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/OldSchool9394EC.java @@ -127,7 +127,6 @@ public class OldSchool9394EC extends Constructed { banned.add("Garruk Wildspeaker"); banned.add("Gaze of Granite"); banned.add("Genesis Hydra"); - banned.add("Giant Badger"); banned.add("Gideon of the Trials"); banned.add("Gideon, Ally of Zendikar"); banned.add("Gideon, Battle-Forged"); @@ -167,7 +166,6 @@ public class OldSchool9394EC extends Constructed { banned.add("Liliana Vess"); banned.add("Liliana Vess"); banned.add("Magister of Worth"); - banned.add("Mana Crypt"); banned.add("Markov Dreadknight"); banned.add("Memoricide"); banned.add("Merfolk Mesmerist"); @@ -243,7 +241,6 @@ public class OldSchool9394EC extends Constructed { banned.add("Warmonger"); banned.add("Wash Out"); banned.add("Wildfire Eternal"); - banned.add("Windseeker Centaur"); banned.add("Xathrid Necromancer"); restricted.add("Ancestral Recall"); diff --git a/Mage.Sets/src/mage/sets/MediaInserts.java b/Mage.Sets/src/mage/sets/MediaInserts.java index 0addb67a0aa..4ca2dbfb030 100644 --- a/Mage.Sets/src/mage/sets/MediaInserts.java +++ b/Mage.Sets/src/mage/sets/MediaInserts.java @@ -89,7 +89,6 @@ public final class MediaInserts extends ExpansionSet { cards.add(new SetCardInfo("Garruk Wildspeaker", 16, Rarity.RARE, mage.cards.g.GarrukWildspeaker.class)); cards.add(new SetCardInfo("Gaze of Granite", 81, Rarity.RARE, mage.cards.g.GazeOfGranite.class)); cards.add(new SetCardInfo("Genesis Hydra", 142, Rarity.SPECIAL, mage.cards.g.GenesisHydra.class)); - cards.add(new SetCardInfo("Giant Badger", 8, Rarity.SPECIAL, mage.cards.g.GiantBadger.class)); cards.add(new SetCardInfo("Gideon of the Trials", 177, Rarity.MYTHIC, mage.cards.g.GideonOfTheTrials.class)); cards.add(new SetCardInfo("Gideon, Ally of Zendikar", 172, Rarity.MYTHIC, mage.cards.g.GideonAllyOfZendikar.class)); cards.add(new SetCardInfo("Gideon, Battle-Forged", 994, Rarity.SPECIAL, mage.cards.g.GideonBattleForged.class)); @@ -130,7 +129,6 @@ public final class MediaInserts extends ExpansionSet { cards.add(new SetCardInfo("Liliana Vess", 30, Rarity.RARE, mage.cards.l.LilianaVess.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Liliana Vess", 101, Rarity.MYTHIC, mage.cards.l.LilianaVess.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Magister of Worth", 86, Rarity.SPECIAL, mage.cards.m.MagisterOfWorth.class)); - cards.add(new SetCardInfo("Mana Crypt", 6, Rarity.RARE, mage.cards.m.ManaCrypt.class)); cards.add(new SetCardInfo("Markov Dreadknight", 151, Rarity.RARE, mage.cards.m.MarkovDreadknight.class)); cards.add(new SetCardInfo("Memoricide", 29, Rarity.RARE, mage.cards.m.Memoricide.class)); cards.add(new SetCardInfo("Merfolk Mesmerist", 45, Rarity.COMMON, mage.cards.m.MerfolkMesmerist.class)); @@ -207,7 +205,6 @@ public final class MediaInserts extends ExpansionSet { cards.add(new SetCardInfo("Warmonger", 12, Rarity.SPECIAL, mage.cards.w.Warmonger.class)); cards.add(new SetCardInfo("Wash Out", 82, Rarity.UNCOMMON, mage.cards.w.WashOut.class)); cards.add(new SetCardInfo("Wildfire Eternal", 166, Rarity.RARE, mage.cards.w.WildfireEternal.class)); - cards.add(new SetCardInfo("Windseeker Centaur", 7, Rarity.SPECIAL, mage.cards.w.WindseekerCentaur.class)); cards.add(new SetCardInfo("Xathrid Necromancer", 91, Rarity.SPECIAL, mage.cards.x.XathridNecromancer.class)); } } \ No newline at end of file From fcf43e0dcb23b7c129c6518fc968ea4ef6bfa139 Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Wed, 15 Jan 2020 23:30:44 +0100 Subject: [PATCH 007/182] Add the DCI Legend Membership (PLGM) promotional set. --- .../src/mage/sets/DCILegendMembership.java | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/DCILegendMembership.java diff --git a/Mage.Sets/src/mage/sets/DCILegendMembership.java b/Mage.Sets/src/mage/sets/DCILegendMembership.java new file mode 100644 index 00000000000..429d24018ff --- /dev/null +++ b/Mage.Sets/src/mage/sets/DCILegendMembership.java @@ -0,0 +1,26 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/plgm + */ +public class DCILegendMembership extends ExpansionSet { + + private static final DCILegendMembership instance = new DCILegendMembership(); + + public static DCILegendMembership getInstance() { + return instance; + } + + private DCILegendMembership() { + super("DCI Legend Membership", "PLGM", ExpansionSet.buildDate(1995, 1, 1), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Counterspell", 1, Rarity.RARE, mage.cards.c.Counterspell.class)); + cards.add(new SetCardInfo("Incinerate", 2, Rarity.RARE, mage.cards.i.Incinerate.class)); + } +} From 98ac50167dba820edb90b597af2ddd4ff30f5284 Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Thu, 16 Jan 2020 14:18:15 +0100 Subject: [PATCH 008/182] Add the Rivals Quick Start Set (RQS) set. --- .../src/mage/sets/RivalsQuickStartSet.java | 89 +++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/RivalsQuickStartSet.java diff --git a/Mage.Sets/src/mage/sets/RivalsQuickStartSet.java b/Mage.Sets/src/mage/sets/RivalsQuickStartSet.java new file mode 100644 index 00000000000..ecb7a241296 --- /dev/null +++ b/Mage.Sets/src/mage/sets/RivalsQuickStartSet.java @@ -0,0 +1,89 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/rqs + */ +public class RivalsQuickStartSet extends ExpansionSet { + + private static final RivalsQuickStartSet instance = new RivalsQuickStartSet(); + + public static RivalsQuickStartSet getInstance() { + return instance; + } + + private RivalsQuickStartSet() { + super("Rivals Quick Start Set", "RQS", ExpansionSet.buildDate(1996, 7, 1), SetType.SUPPLEMENTAL); + this.hasBoosters = false; + this.hasBasicLands = true; + + cards.add(new SetCardInfo("Alabaster Potion", 1, Rarity.COMMON, mage.cards.a.AlabasterPotion.class)); + cards.add(new SetCardInfo("Battering Ram", 47, Rarity.COMMON, mage.cards.b.BatteringRam.class)); + cards.add(new SetCardInfo("Bog Imp", 15, Rarity.COMMON, mage.cards.b.BogImp.class)); + cards.add(new SetCardInfo("Bog Wraith", 16, Rarity.UNCOMMON, mage.cards.b.BogWraith.class)); + cards.add(new SetCardInfo("Circle of Protection: Black", 2, Rarity.COMMON, mage.cards.c.CircleOfProtectionBlack.class)); + cards.add(new SetCardInfo("Circle of Protection: Red", 3, Rarity.COMMON, mage.cards.c.CircleOfProtectionRed.class)); + cards.add(new SetCardInfo("Clockwork Beast", 48, Rarity.RARE, mage.cards.c.ClockworkBeast.class)); + cards.add(new SetCardInfo("Cursed Land", 17, Rarity.UNCOMMON, mage.cards.c.CursedLand.class)); + cards.add(new SetCardInfo("Dark Ritual", 18, Rarity.COMMON, mage.cards.d.DarkRitual.class)); + cards.add(new SetCardInfo("Detonate", 29, Rarity.UNCOMMON, mage.cards.d.Detonate.class)); + cards.add(new SetCardInfo("Disintegrate", 30, Rarity.COMMON, mage.cards.d.Disintegrate.class)); + cards.add(new SetCardInfo("Durkwood Boars", 38, Rarity.COMMON, mage.cards.d.DurkwoodBoars.class)); + cards.add(new SetCardInfo("Elven Riders", 39, Rarity.UNCOMMON, mage.cards.e.ElvenRiders.class)); + cards.add(new SetCardInfo("Elvish Archers", 40, Rarity.RARE, mage.cards.e.ElvishArchers.class)); + cards.add(new SetCardInfo("Energy Flux", 8, Rarity.UNCOMMON, mage.cards.e.EnergyFlux.class)); + cards.add(new SetCardInfo("Feedback", 9, Rarity.UNCOMMON, mage.cards.f.Feedback.class)); + cards.add(new SetCardInfo("Fireball", 31, Rarity.COMMON, mage.cards.f.Fireball.class)); + cards.add(new SetCardInfo("Forest", 65, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", 64, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", 63, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Glasses of Urza", 49, Rarity.UNCOMMON, mage.cards.g.GlassesOfUrza.class)); + cards.add(new SetCardInfo("Grizzly Bears", 41, Rarity.COMMON, mage.cards.g.GrizzlyBears.class)); + cards.add(new SetCardInfo("Healing Salve", 4, Rarity.COMMON, mage.cards.h.HealingSalve.class)); + cards.add(new SetCardInfo("Hill Giant", 32, Rarity.COMMON, mage.cards.h.HillGiant.class)); + cards.add(new SetCardInfo("Ironclaw Orcs", 33, Rarity.COMMON, mage.cards.i.IronclawOrcs.class)); + cards.add(new SetCardInfo("Island", 56, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", 55, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Jayemdae Tome", 50, Rarity.RARE, mage.cards.j.JayemdaeTome.class)); + cards.add(new SetCardInfo("Lost Soul", 19, Rarity.COMMON, mage.cards.l.LostSoul.class)); + cards.add(new SetCardInfo("Merfolk of the Pearl Trident", 10, Rarity.COMMON, mage.cards.m.MerfolkOfThePearlTrident.class)); + cards.add(new SetCardInfo("Mesa Pegasus", 5, Rarity.COMMON, mage.cards.m.MesaPegasus.class)); + cards.add(new SetCardInfo("Mons's Goblin Raiders", 34, Rarity.COMMON, mage.cards.m.MonssGoblinRaiders.class)); + cards.add(new SetCardInfo("Mountain", 62, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", 61, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", 60, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Murk Dwellers", 20, Rarity.COMMON, mage.cards.m.MurkDwellers.class)); + cards.add(new SetCardInfo("Orcish Artillery", 35, Rarity.UNCOMMON, mage.cards.o.OrcishArtillery.class)); + cards.add(new SetCardInfo("Orcish Oriflamme", 36, Rarity.UNCOMMON, mage.cards.o.OrcishOriflamme.class)); + cards.add(new SetCardInfo("Pearled Unicorn", 6, Rarity.COMMON, mage.cards.p.PearledUnicorn.class)); + cards.add(new SetCardInfo("Plains", 54, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", 53, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", 52, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Power Sink", 11, Rarity.COMMON, mage.cards.p.PowerSink.class)); + cards.add(new SetCardInfo("Pyrotechnics", 37, Rarity.UNCOMMON, mage.cards.p.Pyrotechnics.class)); + cards.add(new SetCardInfo("Raise Dead", 21, Rarity.COMMON, mage.cards.r.RaiseDead.class)); + cards.add(new SetCardInfo("Reverse Damage", 7, Rarity.RARE, mage.cards.r.ReverseDamage.class)); + cards.add(new SetCardInfo("Rod of Ruin", 51, Rarity.UNCOMMON, mage.cards.r.RodOfRuin.class)); + cards.add(new SetCardInfo("Scathe Zombies", 22, Rarity.COMMON, mage.cards.s.ScatheZombies.class)); + cards.add(new SetCardInfo("Scryb Sprites", 42, Rarity.COMMON, mage.cards.s.ScrybSprites.class)); + cards.add(new SetCardInfo("Sorceress Queen", 23, Rarity.RARE, mage.cards.s.SorceressQueen.class)); + cards.add(new SetCardInfo("Swamp", 59, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", 58, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", 57, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Terror", 24, Rarity.COMMON, mage.cards.t.Terror.class)); + cards.add(new SetCardInfo("Twiddle", 12, Rarity.COMMON, mage.cards.t.Twiddle.class)); + cards.add(new SetCardInfo("Unsummon", 13, Rarity.COMMON, mage.cards.u.Unsummon.class)); + cards.add(new SetCardInfo("Untamed Wilds", 43, Rarity.UNCOMMON, mage.cards.u.UntamedWilds.class)); + cards.add(new SetCardInfo("Vampire Bats", 25, Rarity.COMMON, mage.cards.v.VampireBats.class)); + cards.add(new SetCardInfo("Wall of Bone", 26, Rarity.UNCOMMON, mage.cards.w.WallOfBone.class)); + cards.add(new SetCardInfo("War Mammoth", 44, Rarity.COMMON, mage.cards.w.WarMammoth.class)); + cards.add(new SetCardInfo("Warp Artifact", 27, Rarity.RARE, mage.cards.w.WarpArtifact.class)); + cards.add(new SetCardInfo("Weakness", 28, Rarity.COMMON, mage.cards.w.Weakness.class)); + cards.add(new SetCardInfo("Whirling Dervish", 45, Rarity.UNCOMMON, mage.cards.w.WhirlingDervish.class)); + cards.add(new SetCardInfo("Winter Blast", 46, Rarity.UNCOMMON, mage.cards.w.WinterBlast.class)); + cards.add(new SetCardInfo("Zephyr Falcon", 14, Rarity.COMMON, mage.cards.z.ZephyrFalcon.class)); + } +} From 2947d157db6eb253199fb25851649def397ce08f Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Thu, 16 Jan 2020 14:19:22 +0100 Subject: [PATCH 009/182] Add the Introductory Two-Player Set (ITP) set. --- .../mage/sets/IntroductoryTwoPlayerSet.java | 91 +++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/IntroductoryTwoPlayerSet.java diff --git a/Mage.Sets/src/mage/sets/IntroductoryTwoPlayerSet.java b/Mage.Sets/src/mage/sets/IntroductoryTwoPlayerSet.java new file mode 100644 index 00000000000..791a04b7f37 --- /dev/null +++ b/Mage.Sets/src/mage/sets/IntroductoryTwoPlayerSet.java @@ -0,0 +1,91 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/itp + */ +public class IntroductoryTwoPlayerSet extends ExpansionSet { + + private static final IntroductoryTwoPlayerSet instance = new IntroductoryTwoPlayerSet(); + + public static IntroductoryTwoPlayerSet getInstance() { + return instance; + } + + private IntroductoryTwoPlayerSet() { + super("Introductory Two-Player Set", "ITP", ExpansionSet.buildDate(1996, 12, 31), SetType.SUPPLEMENTAL); + this.hasBoosters = false; + this.hasBasicLands = true; + + cards.add(new SetCardInfo("Alabaster Potion", 1, Rarity.COMMON, mage.cards.a.AlabasterPotion.class)); + cards.add(new SetCardInfo("Battering Ram", 48, Rarity.COMMON, mage.cards.b.BatteringRam.class)); + cards.add(new SetCardInfo("Bog Imp", 16, Rarity.COMMON, mage.cards.b.BogImp.class)); + cards.add(new SetCardInfo("Bog Wraith", 17, Rarity.UNCOMMON, mage.cards.b.BogWraith.class)); + cards.add(new SetCardInfo("Circle of Protection: Black", 2, Rarity.COMMON, mage.cards.c.CircleOfProtectionBlack.class)); + cards.add(new SetCardInfo("Circle of Protection: Red", 3, Rarity.COMMON, mage.cards.c.CircleOfProtectionRed.class)); + cards.add(new SetCardInfo("Clockwork Beast", 49, Rarity.RARE, mage.cards.c.ClockworkBeast.class)); + cards.add(new SetCardInfo("Cursed Land", 18, Rarity.UNCOMMON, mage.cards.c.CursedLand.class)); + cards.add(new SetCardInfo("Dark Ritual", 19, Rarity.COMMON, mage.cards.d.DarkRitual.class)); + cards.add(new SetCardInfo("Detonate", 30, Rarity.UNCOMMON, mage.cards.d.Detonate.class)); + cards.add(new SetCardInfo("Disintegrate", 31, Rarity.COMMON, mage.cards.d.Disintegrate.class)); + cards.add(new SetCardInfo("Durkwood Boars", 39, Rarity.COMMON, mage.cards.d.DurkwoodBoars.class)); + cards.add(new SetCardInfo("Elven Riders", 40, Rarity.UNCOMMON, mage.cards.e.ElvenRiders.class)); + cards.add(new SetCardInfo("Elvish Archers", 41, Rarity.RARE, mage.cards.e.ElvishArchers.class)); + cards.add(new SetCardInfo("Energy Flux", 8, Rarity.UNCOMMON, mage.cards.e.EnergyFlux.class)); + cards.add(new SetCardInfo("Feedback", 9, Rarity.UNCOMMON, mage.cards.f.Feedback.class)); + cards.add(new SetCardInfo("Fireball", 32, Rarity.COMMON, mage.cards.f.Fireball.class)); + cards.add(new SetCardInfo("Forest", 67, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", 66, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", 65, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Glasses of Urza", 50, Rarity.UNCOMMON, mage.cards.g.GlassesOfUrza.class)); + cards.add(new SetCardInfo("Grizzly Bears", 42, Rarity.COMMON, mage.cards.g.GrizzlyBears.class)); + cards.add(new SetCardInfo("Healing Salve", 4, Rarity.COMMON, mage.cards.h.HealingSalve.class)); + cards.add(new SetCardInfo("Hill Giant", 33, Rarity.COMMON, mage.cards.h.HillGiant.class)); + cards.add(new SetCardInfo("Ironclaw Orcs", 34, Rarity.COMMON, mage.cards.i.IronclawOrcs.class)); + cards.add(new SetCardInfo("Island", 58, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", 57, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", 56, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Jayemdae Tome", 51, Rarity.RARE, mage.cards.j.JayemdaeTome.class)); + cards.add(new SetCardInfo("Lost Soul", 20, Rarity.COMMON, mage.cards.l.LostSoul.class)); + cards.add(new SetCardInfo("Merfolk of the Pearl Trident", 10, Rarity.COMMON, mage.cards.m.MerfolkOfThePearlTrident.class)); + cards.add(new SetCardInfo("Mesa Pegasus", 5, Rarity.COMMON, mage.cards.m.MesaPegasus.class)); + cards.add(new SetCardInfo("Mons's Goblin Raiders", 35, Rarity.COMMON, mage.cards.m.MonssGoblinRaiders.class)); + cards.add(new SetCardInfo("Mountain", 64, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", 63, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", 62, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Murk Dwellers", 21, Rarity.COMMON, mage.cards.m.MurkDwellers.class)); + cards.add(new SetCardInfo("Orcish Artillery", 36, Rarity.UNCOMMON, mage.cards.o.OrcishArtillery.class)); + cards.add(new SetCardInfo("Orcish Oriflamme", 37, Rarity.UNCOMMON, mage.cards.o.OrcishOriflamme.class)); + cards.add(new SetCardInfo("Pearled Unicorn", 6, Rarity.COMMON, mage.cards.p.PearledUnicorn.class)); + cards.add(new SetCardInfo("Phantom Monster", 11, Rarity.UNCOMMON, mage.cards.p.PhantomMonster.class)); + cards.add(new SetCardInfo("Plains", 55, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", 54, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", 53, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Power Sink", 12, Rarity.COMMON, mage.cards.p.PowerSink.class)); + cards.add(new SetCardInfo("Pyrotechnics", 38, Rarity.UNCOMMON, mage.cards.p.Pyrotechnics.class)); + cards.add(new SetCardInfo("Raise Dead", 22, Rarity.COMMON, mage.cards.r.RaiseDead.class)); + cards.add(new SetCardInfo("Reverse Damage", 7, Rarity.RARE, mage.cards.r.ReverseDamage.class)); + cards.add(new SetCardInfo("Rod of Ruin", 52, Rarity.UNCOMMON, mage.cards.r.RodOfRuin.class)); + cards.add(new SetCardInfo("Scathe Zombies", 23, Rarity.COMMON, mage.cards.s.ScatheZombies.class)); + cards.add(new SetCardInfo("Scryb Sprites", 43, Rarity.COMMON, mage.cards.s.ScrybSprites.class)); + cards.add(new SetCardInfo("Sorceress Queen", 24, Rarity.RARE, mage.cards.s.SorceressQueen.class)); + cards.add(new SetCardInfo("Swamp", 61, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", 60, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", 59, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Terror", 25, Rarity.COMMON, mage.cards.t.Terror.class)); + cards.add(new SetCardInfo("Twiddle", 13, Rarity.COMMON, mage.cards.t.Twiddle.class)); + cards.add(new SetCardInfo("Unsummon", 14, Rarity.COMMON, mage.cards.u.Unsummon.class)); + cards.add(new SetCardInfo("Untamed Wilds", 44, Rarity.UNCOMMON, mage.cards.u.UntamedWilds.class)); + cards.add(new SetCardInfo("Vampire Bats", 26, Rarity.COMMON, mage.cards.v.VampireBats.class)); + cards.add(new SetCardInfo("Wall of Bone", 27, Rarity.UNCOMMON, mage.cards.w.WallOfBone.class)); + cards.add(new SetCardInfo("War Mammoth", 45, Rarity.COMMON, mage.cards.w.WarMammoth.class)); + cards.add(new SetCardInfo("Warp Artifact", 28, Rarity.RARE, mage.cards.w.WarpArtifact.class)); + cards.add(new SetCardInfo("Weakness", 29, Rarity.COMMON, mage.cards.w.Weakness.class)); + cards.add(new SetCardInfo("Whirling Dervish", 46, Rarity.UNCOMMON, mage.cards.w.WhirlingDervish.class)); + cards.add(new SetCardInfo("Winter Blast", 47, Rarity.UNCOMMON, mage.cards.w.WinterBlast.class)); + cards.add(new SetCardInfo("Zephyr Falcon", 15, Rarity.COMMON, mage.cards.z.ZephyrFalcon.class)); + } +} From c2a55903d7808529be45ae64968f8b16d45ea0ba Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Thu, 16 Jan 2020 14:28:32 +0100 Subject: [PATCH 010/182] Add the Summer Magic (SUM) set. --- Mage.Sets/src/mage/sets/SummerMagic.java | 334 +++++++++++++++++++++++ 1 file changed, 334 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/SummerMagic.java diff --git a/Mage.Sets/src/mage/sets/SummerMagic.java b/Mage.Sets/src/mage/sets/SummerMagic.java new file mode 100644 index 00000000000..192e50d94c9 --- /dev/null +++ b/Mage.Sets/src/mage/sets/SummerMagic.java @@ -0,0 +1,334 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/sum + */ +public class SummerMagic extends ExpansionSet { + + private static final SummerMagic instance = new SummerMagic(); + + public static SummerMagic getInstance() { + return instance; + } + + private SummerMagic() { + super("Summer Magic", "SUM", ExpansionSet.buildDate(1994, 6, 21), SetType.CORE); + this.hasBoosters = true; + this.numBoosterLands = 0; + this.numBoosterCommon = 11; + this.numBoosterUncommon = 3; + this.numBoosterRare = 1; + this.ratioBoosterMythic = 0; + + cards.add(new SetCardInfo("Air Elemental", 47, Rarity.UNCOMMON, mage.cards.a.AirElemental.class)); + cards.add(new SetCardInfo("Aladdin's Lamp", 231, Rarity.RARE, mage.cards.a.AladdinsLamp.class)); + cards.add(new SetCardInfo("Aladdin's Ring", 232, Rarity.RARE, mage.cards.a.AladdinsRing.class)); + cards.add(new SetCardInfo("Animate Artifact", 48, Rarity.UNCOMMON, mage.cards.a.AnimateArtifact.class)); + cards.add(new SetCardInfo("Animate Dead", 93, Rarity.UNCOMMON, mage.cards.a.AnimateDead.class)); + cards.add(new SetCardInfo("Animate Wall", 1, Rarity.RARE, mage.cards.a.AnimateWall.class)); + cards.add(new SetCardInfo("Ankh of Mishra", 233, Rarity.RARE, mage.cards.a.AnkhOfMishra.class)); + cards.add(new SetCardInfo("Armageddon", 2, Rarity.RARE, mage.cards.a.Armageddon.class)); + cards.add(new SetCardInfo("Armageddon Clock", 234, Rarity.RARE, mage.cards.a.ArmageddonClock.class)); + cards.add(new SetCardInfo("Aspect of Wolf", 186, Rarity.RARE, mage.cards.a.AspectOfWolf.class)); + cards.add(new SetCardInfo("Atog", 139, Rarity.COMMON, mage.cards.a.Atog.class)); + cards.add(new SetCardInfo("Bad Moon", 94, Rarity.RARE, mage.cards.b.BadMoon.class)); + cards.add(new SetCardInfo("Badlands", 282, Rarity.RARE, mage.cards.b.Badlands.class)); + cards.add(new SetCardInfo("Balance", 3, Rarity.RARE, mage.cards.b.Balance.class)); + cards.add(new SetCardInfo("Basalt Monolith", 235, Rarity.UNCOMMON, mage.cards.b.BasaltMonolith.class)); + cards.add(new SetCardInfo("Bayou", 283, Rarity.RARE, mage.cards.b.Bayou.class)); + cards.add(new SetCardInfo("Benalish Hero", 4, Rarity.COMMON, mage.cards.b.BenalishHero.class)); + cards.add(new SetCardInfo("Birds of Paradise", 187, Rarity.RARE, mage.cards.b.BirdsOfParadise.class)); + cards.add(new SetCardInfo("Black Knight", 95, Rarity.UNCOMMON, mage.cards.b.BlackKnight.class)); + cards.add(new SetCardInfo("Black Vise", 236, Rarity.UNCOMMON, mage.cards.b.BlackVise.class)); + cards.add(new SetCardInfo("Black Ward", 5, Rarity.UNCOMMON, mage.cards.b.BlackWard.class)); + cards.add(new SetCardInfo("Blessing", 6, Rarity.RARE, mage.cards.b.Blessing.class)); + cards.add(new SetCardInfo("Blue Elemental Blast", 49, Rarity.COMMON, mage.cards.b.BlueElementalBlast.class)); + cards.add(new SetCardInfo("Blue Ward", 7, Rarity.UNCOMMON, mage.cards.b.BlueWard.class)); + cards.add(new SetCardInfo("Bog Wraith", 96, Rarity.UNCOMMON, mage.cards.b.BogWraith.class)); + cards.add(new SetCardInfo("Bottle of Suleiman", 237, Rarity.RARE, mage.cards.b.BottleOfSuleiman.class)); + cards.add(new SetCardInfo("Braingeyser", 50, Rarity.RARE, mage.cards.b.Braingeyser.class)); + cards.add(new SetCardInfo("Brass Man", 238, Rarity.UNCOMMON, mage.cards.b.BrassMan.class)); + cards.add(new SetCardInfo("Burrowing", 140, Rarity.UNCOMMON, mage.cards.b.Burrowing.class)); + cards.add(new SetCardInfo("Castle", 8, Rarity.UNCOMMON, mage.cards.c.Castle.class)); + cards.add(new SetCardInfo("Celestial Prism", 239, Rarity.UNCOMMON, mage.cards.c.CelestialPrism.class)); + cards.add(new SetCardInfo("Channel", 188, Rarity.UNCOMMON, mage.cards.c.Channel.class)); + cards.add(new SetCardInfo("Chaoslace", 141, Rarity.RARE, mage.cards.c.Chaoslace.class)); + cards.add(new SetCardInfo("Circle of Protection: Black", 9, Rarity.COMMON, mage.cards.c.CircleOfProtectionBlack.class)); + cards.add(new SetCardInfo("Circle of Protection: Blue", 10, Rarity.COMMON, mage.cards.c.CircleOfProtectionBlue.class)); + cards.add(new SetCardInfo("Circle of Protection: Green", 11, Rarity.COMMON, mage.cards.c.CircleOfProtectionGreen.class)); + cards.add(new SetCardInfo("Circle of Protection: Red", 12, Rarity.COMMON, mage.cards.c.CircleOfProtectionRed.class)); + cards.add(new SetCardInfo("Circle of Protection: White", 13, Rarity.COMMON, mage.cards.c.CircleOfProtectionWhite.class)); + cards.add(new SetCardInfo("Clockwork Beast", 240, Rarity.RARE, mage.cards.c.ClockworkBeast.class)); + cards.add(new SetCardInfo("Clone", 51, Rarity.UNCOMMON, mage.cards.c.Clone.class)); + cards.add(new SetCardInfo("Cockatrice", 189, Rarity.RARE, mage.cards.c.Cockatrice.class)); + cards.add(new SetCardInfo("Conservator", 241, Rarity.UNCOMMON, mage.cards.c.Conservator.class)); + //cards.add(new SetCardInfo("Contract from Below", 97, Rarity.RARE, mage.cards.c.ContractFromBelow.class)); + cards.add(new SetCardInfo("Control Magic", 52, Rarity.UNCOMMON, mage.cards.c.ControlMagic.class)); + cards.add(new SetCardInfo("Conversion", 14, Rarity.UNCOMMON, mage.cards.c.Conversion.class)); + cards.add(new SetCardInfo("Copy Artifact", 53, Rarity.RARE, mage.cards.c.CopyArtifact.class)); + cards.add(new SetCardInfo("Counterspell", 54, Rarity.UNCOMMON, mage.cards.c.Counterspell.class)); + cards.add(new SetCardInfo("Craw Wurm", 190, Rarity.COMMON, mage.cards.c.CrawWurm.class)); + cards.add(new SetCardInfo("Creature Bond", 55, Rarity.COMMON, mage.cards.c.CreatureBond.class)); + cards.add(new SetCardInfo("Crumble", 191, Rarity.UNCOMMON, mage.cards.c.Crumble.class)); + cards.add(new SetCardInfo("Crusade", 15, Rarity.RARE, mage.cards.c.Crusade.class)); + cards.add(new SetCardInfo("Crystal Rod", 242, Rarity.UNCOMMON, mage.cards.c.CrystalRod.class)); + cards.add(new SetCardInfo("Cursed Land", 98, Rarity.UNCOMMON, mage.cards.c.CursedLand.class)); + cards.add(new SetCardInfo("Dancing Scimitar", 243, Rarity.RARE, mage.cards.d.DancingScimitar.class)); + cards.add(new SetCardInfo("Dark Ritual", 99, Rarity.COMMON, mage.cards.d.DarkRitual.class)); + //cards.add(new SetCardInfo("Darkpact", 100, Rarity.RARE, mage.cards.d.Darkpact.class)); + cards.add(new SetCardInfo("Death Ward", 16, Rarity.COMMON, mage.cards.d.DeathWard.class)); + cards.add(new SetCardInfo("Deathgrip", 101, Rarity.UNCOMMON, mage.cards.d.Deathgrip.class)); + cards.add(new SetCardInfo("Deathlace", 102, Rarity.RARE, mage.cards.d.Deathlace.class)); + //cards.add(new SetCardInfo("Demonic Attorney", 103, Rarity.RARE, mage.cards.d.DemonicAttorney.class)); + cards.add(new SetCardInfo("Demonic Hordes", 104, Rarity.RARE, mage.cards.d.DemonicHordes.class)); + cards.add(new SetCardInfo("Demonic Tutor", 105, Rarity.UNCOMMON, mage.cards.d.DemonicTutor.class)); + cards.add(new SetCardInfo("Desert Twister", 192, Rarity.UNCOMMON, mage.cards.d.DesertTwister.class)); + cards.add(new SetCardInfo("Dingus Egg", 244, Rarity.RARE, mage.cards.d.DingusEgg.class)); + cards.add(new SetCardInfo("Disenchant", 17, Rarity.COMMON, mage.cards.d.Disenchant.class)); + cards.add(new SetCardInfo("Disintegrate", 142, Rarity.COMMON, mage.cards.d.Disintegrate.class)); + cards.add(new SetCardInfo("Disrupting Scepter", 245, Rarity.RARE, mage.cards.d.DisruptingScepter.class)); + cards.add(new SetCardInfo("Dragon Engine", 246, Rarity.RARE, mage.cards.d.DragonEngine.class)); + cards.add(new SetCardInfo("Dragon Whelp", 143, Rarity.UNCOMMON, mage.cards.d.DragonWhelp.class)); + cards.add(new SetCardInfo("Drain Life", 106, Rarity.COMMON, mage.cards.d.DrainLife.class)); + cards.add(new SetCardInfo("Drain Power", 56, Rarity.RARE, mage.cards.d.DrainPower.class)); + cards.add(new SetCardInfo("Drudge Skeletons", 107, Rarity.COMMON, mage.cards.d.DrudgeSkeletons.class)); + cards.add(new SetCardInfo("Dwarven Warriors", 144, Rarity.COMMON, mage.cards.d.DwarvenWarriors.class)); + cards.add(new SetCardInfo("Dwarven Weaponsmith", 145, Rarity.UNCOMMON, mage.cards.d.DwarvenWeaponsmith.class)); + cards.add(new SetCardInfo("Earth Elemental", 146, Rarity.UNCOMMON, mage.cards.e.EarthElemental.class)); + cards.add(new SetCardInfo("Earthbind", 147, Rarity.COMMON, mage.cards.e.Earthbind.class)); + cards.add(new SetCardInfo("Earthquake", 148, Rarity.RARE, mage.cards.e.Earthquake.class)); + cards.add(new SetCardInfo("Ebony Horse", 247, Rarity.RARE, mage.cards.e.EbonyHorse.class)); + cards.add(new SetCardInfo("El-Hajjâj", 108, Rarity.RARE, mage.cards.e.ElHajjaj.class)); + cards.add(new SetCardInfo("Elvish Archers", 193, Rarity.RARE, mage.cards.e.ElvishArchers.class)); + cards.add(new SetCardInfo("Energy Flux", 57, Rarity.UNCOMMON, mage.cards.e.EnergyFlux.class)); + cards.add(new SetCardInfo("Erg Raiders", 109, Rarity.COMMON, mage.cards.e.ErgRaiders.class)); + cards.add(new SetCardInfo("Evil Presence", 110, Rarity.UNCOMMON, mage.cards.e.EvilPresence.class)); + cards.add(new SetCardInfo("Eye for an Eye", 18, Rarity.RARE, mage.cards.e.EyeForAnEye.class)); + cards.add(new SetCardInfo("Farmstead", 19, Rarity.RARE, mage.cards.f.Farmstead.class)); + cards.add(new SetCardInfo("Fastbond", 194, Rarity.RARE, mage.cards.f.Fastbond.class)); + cards.add(new SetCardInfo("Fear", 111, Rarity.COMMON, mage.cards.f.Fear.class)); + cards.add(new SetCardInfo("Feedback", 58, Rarity.UNCOMMON, mage.cards.f.Feedback.class)); + cards.add(new SetCardInfo("Fire Elemental", 149, Rarity.UNCOMMON, mage.cards.f.FireElemental.class)); + cards.add(new SetCardInfo("Fireball", 150, Rarity.COMMON, mage.cards.f.Fireball.class)); + cards.add(new SetCardInfo("Firebreathing", 151, Rarity.COMMON, mage.cards.f.Firebreathing.class)); + cards.add(new SetCardInfo("Flashfires", 152, Rarity.UNCOMMON, mage.cards.f.Flashfires.class)); + cards.add(new SetCardInfo("Flight", 59, Rarity.COMMON, mage.cards.f.Flight.class)); + cards.add(new SetCardInfo("Flying Carpet", 248, Rarity.RARE, mage.cards.f.FlyingCarpet.class)); + cards.add(new SetCardInfo("Fog", 195, Rarity.COMMON, mage.cards.f.Fog.class)); + cards.add(new SetCardInfo("Force of Nature", 196, Rarity.RARE, mage.cards.f.ForceOfNature.class)); + cards.add(new SetCardInfo("Forest", 306, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", 305, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", 304, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Fork", 153, Rarity.RARE, mage.cards.f.Fork.class)); + cards.add(new SetCardInfo("Frozen Shade", 112, Rarity.COMMON, mage.cards.f.FrozenShade.class)); + cards.add(new SetCardInfo("Fungusaur", 197, Rarity.RARE, mage.cards.f.Fungusaur.class)); + cards.add(new SetCardInfo("Gaea's Liege", 198, Rarity.RARE, mage.cards.g.GaeasLiege.class)); + cards.add(new SetCardInfo("Giant Growth", 199, Rarity.COMMON, mage.cards.g.GiantGrowth.class)); + cards.add(new SetCardInfo("Giant Spider", 200, Rarity.COMMON, mage.cards.g.GiantSpider.class)); + cards.add(new SetCardInfo("Glasses of Urza", 249, Rarity.UNCOMMON, mage.cards.g.GlassesOfUrza.class)); + cards.add(new SetCardInfo("Gloom", 113, Rarity.UNCOMMON, mage.cards.g.Gloom.class)); + cards.add(new SetCardInfo("Goblin Balloon Brigade", 154, Rarity.UNCOMMON, mage.cards.g.GoblinBalloonBrigade.class)); + cards.add(new SetCardInfo("Goblin King", 155, Rarity.RARE, mage.cards.g.GoblinKing.class)); + cards.add(new SetCardInfo("Granite Gargoyle", 156, Rarity.RARE, mage.cards.g.GraniteGargoyle.class)); + cards.add(new SetCardInfo("Gray Ogre", 157, Rarity.COMMON, mage.cards.g.GrayOgre.class)); + cards.add(new SetCardInfo("Green Ward", 20, Rarity.UNCOMMON, mage.cards.g.GreenWard.class)); + cards.add(new SetCardInfo("Grizzly Bears", 201, Rarity.COMMON, mage.cards.g.GrizzlyBears.class)); + cards.add(new SetCardInfo("Guardian Angel", 21, Rarity.COMMON, mage.cards.g.GuardianAngel.class)); + cards.add(new SetCardInfo("Healing Salve", 22, Rarity.COMMON, mage.cards.h.HealingSalve.class)); + cards.add(new SetCardInfo("Helm of Chatzuk", 250, Rarity.RARE, mage.cards.h.HelmOfChatzuk.class)); + cards.add(new SetCardInfo("Hill Giant", 158, Rarity.COMMON, mage.cards.h.HillGiant.class)); + cards.add(new SetCardInfo("Holy Armor", 23, Rarity.COMMON, mage.cards.h.HolyArmor.class)); + cards.add(new SetCardInfo("Holy Strength", 24, Rarity.COMMON, mage.cards.h.HolyStrength.class)); + cards.add(new SetCardInfo("Howl from Beyond", 114, Rarity.COMMON, mage.cards.h.HowlFromBeyond.class)); + cards.add(new SetCardInfo("Howling Mine", 251, Rarity.RARE, mage.cards.h.HowlingMine.class)); + cards.add(new SetCardInfo("Hurkyl's Recall", 60, Rarity.RARE, mage.cards.h.HurkylsRecall.class)); + cards.add(new SetCardInfo("Hurloon Minotaur", 159, Rarity.COMMON, mage.cards.h.HurloonMinotaur.class)); + cards.add(new SetCardInfo("Hurricane", 202, Rarity.UNCOMMON, mage.cards.h.Hurricane.class)); + cards.add(new SetCardInfo("Hypnotic Specter", 115, Rarity.UNCOMMON, mage.cards.h.HypnoticSpecter.class)); + cards.add(new SetCardInfo("Instill Energy", 203, Rarity.UNCOMMON, mage.cards.i.InstillEnergy.class)); + cards.add(new SetCardInfo("Iron Star", 252, Rarity.UNCOMMON, mage.cards.i.IronStar.class)); + cards.add(new SetCardInfo("Ironroot Treefolk", 204, Rarity.COMMON, mage.cards.i.IronrootTreefolk.class)); + cards.add(new SetCardInfo("Island", 297, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", 296, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", 295, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island Fish Jasconius", 61, Rarity.RARE, mage.cards.i.IslandFishJasconius.class)); + cards.add(new SetCardInfo("Island Sanctuary", 25, Rarity.RARE, mage.cards.i.IslandSanctuary.class)); + cards.add(new SetCardInfo("Ivory Cup", 253, Rarity.UNCOMMON, mage.cards.i.IvoryCup.class)); + cards.add(new SetCardInfo("Ivory Tower", 254, Rarity.RARE, mage.cards.i.IvoryTower.class)); + cards.add(new SetCardInfo("Jade Monolith", 255, Rarity.RARE, mage.cards.j.JadeMonolith.class)); + cards.add(new SetCardInfo("Jandor's Ring", 256, Rarity.RARE, mage.cards.j.JandorsRing.class)); + cards.add(new SetCardInfo("Jandor's Saddlebags", 257, Rarity.RARE, mage.cards.j.JandorsSaddlebags.class)); + cards.add(new SetCardInfo("Jayemdae Tome", 258, Rarity.RARE, mage.cards.j.JayemdaeTome.class)); + cards.add(new SetCardInfo("Juggernaut", 259, Rarity.UNCOMMON, mage.cards.j.Juggernaut.class)); + cards.add(new SetCardInfo("Jump", 62, Rarity.COMMON, mage.cards.j.Jump.class)); + cards.add(new SetCardInfo("Karma", 26, Rarity.UNCOMMON, mage.cards.k.Karma.class)); + cards.add(new SetCardInfo("Keldon Warlord", 160, Rarity.UNCOMMON, mage.cards.k.KeldonWarlord.class)); + cards.add(new SetCardInfo("Kird Ape", 161, Rarity.COMMON, mage.cards.k.KirdApe.class)); + cards.add(new SetCardInfo("Kormus Bell", 260, Rarity.RARE, mage.cards.k.KormusBell.class)); + cards.add(new SetCardInfo("Kudzu", 205, Rarity.RARE, mage.cards.k.Kudzu.class)); + cards.add(new SetCardInfo("Lance", 27, Rarity.UNCOMMON, mage.cards.l.Lance.class)); + cards.add(new SetCardInfo("Ley Druid", 206, Rarity.UNCOMMON, mage.cards.l.LeyDruid.class)); + cards.add(new SetCardInfo("Library of Leng", 261, Rarity.UNCOMMON, mage.cards.l.LibraryOfLeng.class)); + cards.add(new SetCardInfo("Lifeforce", 207, Rarity.UNCOMMON, mage.cards.l.Lifeforce.class)); + cards.add(new SetCardInfo("Lifelace", 208, Rarity.RARE, mage.cards.l.Lifelace.class)); + cards.add(new SetCardInfo("Lifetap", 63, Rarity.UNCOMMON, mage.cards.l.Lifetap.class)); + cards.add(new SetCardInfo("Lightning Bolt", 162, Rarity.COMMON, mage.cards.l.LightningBolt.class)); + cards.add(new SetCardInfo("Living Artifact", 209, Rarity.RARE, mage.cards.l.LivingArtifact.class)); + cards.add(new SetCardInfo("Living Lands", 210, Rarity.RARE, mage.cards.l.LivingLands.class)); + cards.add(new SetCardInfo("Living Wall", 262, Rarity.UNCOMMON, mage.cards.l.LivingWall.class)); + cards.add(new SetCardInfo("Llanowar Elves", 211, Rarity.COMMON, mage.cards.l.LlanowarElves.class)); + cards.add(new SetCardInfo("Lord of Atlantis", 64, Rarity.RARE, mage.cards.l.LordOfAtlantis.class)); + cards.add(new SetCardInfo("Lord of the Pit", 116, Rarity.RARE, mage.cards.l.LordOfThePit.class)); + cards.add(new SetCardInfo("Lure", 212, Rarity.UNCOMMON, mage.cards.l.Lure.class)); + //cards.add(new SetCardInfo("Magical Hack", 65, Rarity.RARE, mage.cards.m.MagicalHack.class)); + cards.add(new SetCardInfo("Magnetic Mountain", 163, Rarity.RARE, mage.cards.m.MagneticMountain.class)); + cards.add(new SetCardInfo("Mahamoti Djinn", 66, Rarity.RARE, mage.cards.m.MahamotiDjinn.class)); + cards.add(new SetCardInfo("Mana Flare", 164, Rarity.RARE, mage.cards.m.ManaFlare.class)); + cards.add(new SetCardInfo("Mana Short", 67, Rarity.RARE, mage.cards.m.ManaShort.class)); + cards.add(new SetCardInfo("Mana Vault", 263, Rarity.RARE, mage.cards.m.ManaVault.class)); + cards.add(new SetCardInfo("Manabarbs", 165, Rarity.RARE, mage.cards.m.Manabarbs.class)); + cards.add(new SetCardInfo("Meekstone", 264, Rarity.RARE, mage.cards.m.Meekstone.class)); + cards.add(new SetCardInfo("Merfolk of the Pearl Trident", 68, Rarity.COMMON, mage.cards.m.MerfolkOfThePearlTrident.class)); + cards.add(new SetCardInfo("Mesa Pegasus", 28, Rarity.COMMON, mage.cards.m.MesaPegasus.class)); + cards.add(new SetCardInfo("Mijae Djinn", 166, Rarity.RARE, mage.cards.m.MijaeDjinn.class)); + cards.add(new SetCardInfo("Millstone", 265, Rarity.RARE, mage.cards.m.Millstone.class)); + cards.add(new SetCardInfo("Mind Twist", 117, Rarity.RARE, mage.cards.m.MindTwist.class)); + cards.add(new SetCardInfo("Mishra's War Machine", 266, Rarity.RARE, mage.cards.m.MishrasWarMachine.class)); + cards.add(new SetCardInfo("Mons's Goblin Raiders", 167, Rarity.COMMON, mage.cards.m.MonssGoblinRaiders.class)); + cards.add(new SetCardInfo("Mountain", 303, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", 302, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", 301, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Nether Shadow", 118, Rarity.RARE, mage.cards.n.NetherShadow.class)); + cards.add(new SetCardInfo("Nettling Imp", 119, Rarity.UNCOMMON, mage.cards.n.NettlingImp.class)); + cards.add(new SetCardInfo("Nevinyrral's Disk", 267, Rarity.RARE, mage.cards.n.NevinyrralsDisk.class)); + cards.add(new SetCardInfo("Nightmare", 120, Rarity.RARE, mage.cards.n.Nightmare.class)); + cards.add(new SetCardInfo("Northern Paladin", 29, Rarity.RARE, mage.cards.n.NorthernPaladin.class)); + cards.add(new SetCardInfo("Obsianus Golem", 268, Rarity.UNCOMMON, mage.cards.o.ObsianusGolem.class)); + cards.add(new SetCardInfo("Onulet", 269, Rarity.RARE, mage.cards.o.Onulet.class)); + cards.add(new SetCardInfo("Orcish Artillery", 168, Rarity.UNCOMMON, mage.cards.o.OrcishArtillery.class)); + cards.add(new SetCardInfo("Orcish Oriflamme", 169, Rarity.UNCOMMON, mage.cards.o.OrcishOriflamme.class)); + cards.add(new SetCardInfo("Ornithopter", 270, Rarity.UNCOMMON, mage.cards.o.Ornithopter.class)); + cards.add(new SetCardInfo("Paralyze", 121, Rarity.COMMON, mage.cards.p.Paralyze.class)); + cards.add(new SetCardInfo("Pearled Unicorn", 30, Rarity.COMMON, mage.cards.p.PearledUnicorn.class)); + cards.add(new SetCardInfo("Personal Incarnation", 31, Rarity.RARE, mage.cards.p.PersonalIncarnation.class)); + cards.add(new SetCardInfo("Pestilence", 122, Rarity.COMMON, mage.cards.p.Pestilence.class)); + cards.add(new SetCardInfo("Phantasmal Forces", 69, Rarity.UNCOMMON, mage.cards.p.PhantasmalForces.class)); + cards.add(new SetCardInfo("Phantasmal Terrain", 70, Rarity.COMMON, mage.cards.p.PhantasmalTerrain.class)); + cards.add(new SetCardInfo("Phantom Monster", 71, Rarity.UNCOMMON, mage.cards.p.PhantomMonster.class)); + cards.add(new SetCardInfo("Pirate Ship", 72, Rarity.RARE, mage.cards.p.PirateShip.class)); + cards.add(new SetCardInfo("Plague Rats", 123, Rarity.COMMON, mage.cards.p.PlagueRats.class)); + cards.add(new SetCardInfo("Plains", 294, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", 293, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", 292, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plateau", 284, Rarity.RARE, mage.cards.p.Plateau.class)); + cards.add(new SetCardInfo("Power Leak", 73, Rarity.COMMON, mage.cards.p.PowerLeak.class)); + cards.add(new SetCardInfo("Power Sink", 74, Rarity.COMMON, mage.cards.p.PowerSink.class)); + cards.add(new SetCardInfo("Power Surge", 170, Rarity.RARE, mage.cards.p.PowerSurge.class)); + cards.add(new SetCardInfo("Primal Clay", 271, Rarity.RARE, mage.cards.p.PrimalClay.class)); + cards.add(new SetCardInfo("Prodigal Sorcerer", 75, Rarity.COMMON, mage.cards.p.ProdigalSorcerer.class)); + cards.add(new SetCardInfo("Psychic Venom", 76, Rarity.COMMON, mage.cards.p.PsychicVenom.class)); + cards.add(new SetCardInfo("Purelace", 32, Rarity.RARE, mage.cards.p.Purelace.class)); + cards.add(new SetCardInfo("Raise Dead", 124, Rarity.COMMON, mage.cards.r.RaiseDead.class)); + cards.add(new SetCardInfo("Reconstruction", 77, Rarity.COMMON, mage.cards.r.Reconstruction.class)); + cards.add(new SetCardInfo("Red Elemental Blast", 171, Rarity.COMMON, mage.cards.r.RedElementalBlast.class)); + cards.add(new SetCardInfo("Red Ward", 33, Rarity.UNCOMMON, mage.cards.r.RedWard.class)); + cards.add(new SetCardInfo("Regeneration", 213, Rarity.COMMON, mage.cards.r.Regeneration.class)); + cards.add(new SetCardInfo("Regrowth", 214, Rarity.UNCOMMON, mage.cards.r.Regrowth.class)); + cards.add(new SetCardInfo("Resurrection", 34, Rarity.UNCOMMON, mage.cards.r.Resurrection.class)); + cards.add(new SetCardInfo("Reverse Damage", 35, Rarity.RARE, mage.cards.r.ReverseDamage.class)); + cards.add(new SetCardInfo("Reverse Polarity", 36, Rarity.UNCOMMON, mage.cards.r.ReversePolarity.class)); + cards.add(new SetCardInfo("Righteousness", 37, Rarity.RARE, mage.cards.r.Righteousness.class)); + cards.add(new SetCardInfo("Roc of Kher Ridges", 172, Rarity.RARE, mage.cards.r.RocOfKherRidges.class)); + cards.add(new SetCardInfo("Rock Hydra", 173, Rarity.RARE, mage.cards.r.RockHydra.class)); + cards.add(new SetCardInfo("Rocket Launcher", 272, Rarity.RARE, mage.cards.r.RocketLauncher.class)); + cards.add(new SetCardInfo("Rod of Ruin", 273, Rarity.UNCOMMON, mage.cards.r.RodOfRuin.class)); + cards.add(new SetCardInfo("Royal Assassin", 125, Rarity.RARE, mage.cards.r.RoyalAssassin.class)); + cards.add(new SetCardInfo("Sacrifice", 126, Rarity.UNCOMMON, mage.cards.s.Sacrifice.class)); + cards.add(new SetCardInfo("Samite Healer", 38, Rarity.COMMON, mage.cards.s.SamiteHealer.class)); + cards.add(new SetCardInfo("Savannah", 285, Rarity.RARE, mage.cards.s.Savannah.class)); + cards.add(new SetCardInfo("Savannah Lions", 39, Rarity.RARE, mage.cards.s.SavannahLions.class)); + cards.add(new SetCardInfo("Scathe Zombies", 127, Rarity.COMMON, mage.cards.s.ScatheZombies.class)); + cards.add(new SetCardInfo("Scavenging Ghoul", 128, Rarity.UNCOMMON, mage.cards.s.ScavengingGhoul.class)); + cards.add(new SetCardInfo("Scrubland", 286, Rarity.RARE, mage.cards.s.Scrubland.class)); + cards.add(new SetCardInfo("Scryb Sprites", 215, Rarity.COMMON, mage.cards.s.ScrybSprites.class)); + cards.add(new SetCardInfo("Sea Serpent", 78, Rarity.COMMON, mage.cards.s.SeaSerpent.class)); + cards.add(new SetCardInfo("Sedge Troll", 174, Rarity.RARE, mage.cards.s.SedgeTroll.class)); + cards.add(new SetCardInfo("Sengir Vampire", 129, Rarity.UNCOMMON, mage.cards.s.SengirVampire.class)); + cards.add(new SetCardInfo("Serendib Efreet", 79, Rarity.RARE, mage.cards.s.SerendibEfreet.class)); + cards.add(new SetCardInfo("Serra Angel", 40, Rarity.UNCOMMON, mage.cards.s.SerraAngel.class)); + cards.add(new SetCardInfo("Shanodin Dryads", 216, Rarity.COMMON, mage.cards.s.ShanodinDryads.class)); + cards.add(new SetCardInfo("Shatter", 175, Rarity.COMMON, mage.cards.s.Shatter.class)); + cards.add(new SetCardInfo("Shatterstorm", 176, Rarity.UNCOMMON, mage.cards.s.Shatterstorm.class)); + cards.add(new SetCardInfo("Shivan Dragon", 177, Rarity.RARE, mage.cards.s.ShivanDragon.class)); + cards.add(new SetCardInfo("Simulacrum", 130, Rarity.UNCOMMON, mage.cards.s.Simulacrum.class)); + cards.add(new SetCardInfo("Siren's Call", 80, Rarity.UNCOMMON, mage.cards.s.SirensCall.class)); + //cards.add(new SetCardInfo("Sleight of Mind", 81, Rarity.RARE, mage.cards.s.SleightOfMind.class)); + cards.add(new SetCardInfo("Smoke", 178, Rarity.RARE, mage.cards.s.Smoke.class)); + cards.add(new SetCardInfo("Sol Ring", 274, Rarity.UNCOMMON, mage.cards.s.SolRing.class)); + cards.add(new SetCardInfo("Sorceress Queen", 131, Rarity.RARE, mage.cards.s.SorceressQueen.class)); + cards.add(new SetCardInfo("Soul Net", 275, Rarity.UNCOMMON, mage.cards.s.SoulNet.class)); + cards.add(new SetCardInfo("Spell Blast", 82, Rarity.COMMON, mage.cards.s.SpellBlast.class)); + cards.add(new SetCardInfo("Stasis", 83, Rarity.RARE, mage.cards.s.Stasis.class)); + cards.add(new SetCardInfo("Steal Artifact", 84, Rarity.UNCOMMON, mage.cards.s.StealArtifact.class)); + cards.add(new SetCardInfo("Stone Giant", 179, Rarity.UNCOMMON, mage.cards.s.StoneGiant.class)); + cards.add(new SetCardInfo("Stone Rain", 180, Rarity.COMMON, mage.cards.s.StoneRain.class)); + cards.add(new SetCardInfo("Stream of Life", 217, Rarity.COMMON, mage.cards.s.StreamOfLife.class)); + cards.add(new SetCardInfo("Sunglasses of Urza", 276, Rarity.RARE, mage.cards.s.SunglassesOfUrza.class)); + cards.add(new SetCardInfo("Swamp", 300, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", 299, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", 298, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swords to Plowshares", 41, Rarity.UNCOMMON, mage.cards.s.SwordsToPlowshares.class)); + cards.add(new SetCardInfo("Taiga", 287, Rarity.RARE, mage.cards.t.Taiga.class)); + cards.add(new SetCardInfo("Terror", 132, Rarity.COMMON, mage.cards.t.Terror.class)); + cards.add(new SetCardInfo("The Hive", 277, Rarity.RARE, mage.cards.t.TheHive.class)); + cards.add(new SetCardInfo("The Rack", 278, Rarity.UNCOMMON, mage.cards.t.TheRack.class)); + cards.add(new SetCardInfo("Thicket Basilisk", 218, Rarity.UNCOMMON, mage.cards.t.ThicketBasilisk.class)); + cards.add(new SetCardInfo("Thoughtlace", 85, Rarity.RARE, mage.cards.t.Thoughtlace.class)); + cards.add(new SetCardInfo("Throne of Bone", 279, Rarity.UNCOMMON, mage.cards.t.ThroneOfBone.class)); + cards.add(new SetCardInfo("Timber Wolves", 219, Rarity.RARE, mage.cards.t.TimberWolves.class)); + cards.add(new SetCardInfo("Titania's Song", 220, Rarity.RARE, mage.cards.t.TitaniasSong.class)); + cards.add(new SetCardInfo("Tranquility", 221, Rarity.COMMON, mage.cards.t.Tranquility.class)); + cards.add(new SetCardInfo("Tropical Island", 288, Rarity.RARE, mage.cards.t.TropicalIsland.class)); + cards.add(new SetCardInfo("Tsunami", 222, Rarity.UNCOMMON, mage.cards.t.Tsunami.class)); + cards.add(new SetCardInfo("Tundra", 289, Rarity.RARE, mage.cards.t.Tundra.class)); + cards.add(new SetCardInfo("Tunnel", 181, Rarity.UNCOMMON, mage.cards.t.Tunnel.class)); + cards.add(new SetCardInfo("Underground Sea", 290, Rarity.RARE, mage.cards.u.UndergroundSea.class)); + cards.add(new SetCardInfo("Unholy Strength", 133, Rarity.COMMON, mage.cards.u.UnholyStrength.class)); + cards.add(new SetCardInfo("Unstable Mutation", 86, Rarity.COMMON, mage.cards.u.UnstableMutation.class)); + cards.add(new SetCardInfo("Unsummon", 87, Rarity.COMMON, mage.cards.u.Unsummon.class)); + cards.add(new SetCardInfo("Uthden Troll", 182, Rarity.UNCOMMON, mage.cards.u.UthdenTroll.class)); + cards.add(new SetCardInfo("Verduran Enchantress", 223, Rarity.RARE, mage.cards.v.VerduranEnchantress.class)); + cards.add(new SetCardInfo("Vesuvan Doppelganger", 88, Rarity.RARE, mage.cards.v.VesuvanDoppelganger.class)); + cards.add(new SetCardInfo("Veteran Bodyguard", 42, Rarity.RARE, mage.cards.v.VeteranBodyguard.class)); + cards.add(new SetCardInfo("Volcanic Eruption", 89, Rarity.RARE, mage.cards.v.VolcanicEruption.class)); + cards.add(new SetCardInfo("Volcanic Island", 291, Rarity.RARE, mage.cards.v.VolcanicIsland.class)); + cards.add(new SetCardInfo("Wall of Air", 90, Rarity.UNCOMMON, mage.cards.w.WallOfAir.class)); + cards.add(new SetCardInfo("Wall of Bone", 134, Rarity.UNCOMMON, mage.cards.w.WallOfBone.class)); + cards.add(new SetCardInfo("Wall of Brambles", 224, Rarity.UNCOMMON, mage.cards.w.WallOfBrambles.class)); + cards.add(new SetCardInfo("Wall of Fire", 183, Rarity.UNCOMMON, mage.cards.w.WallOfFire.class)); + cards.add(new SetCardInfo("Wall of Ice", 225, Rarity.UNCOMMON, mage.cards.w.WallOfIce.class)); + cards.add(new SetCardInfo("Wall of Stone", 184, Rarity.UNCOMMON, mage.cards.w.WallOfStone.class)); + cards.add(new SetCardInfo("Wall of Swords", 43, Rarity.UNCOMMON, mage.cards.w.WallOfSwords.class)); + cards.add(new SetCardInfo("Wall of Water", 91, Rarity.UNCOMMON, mage.cards.w.WallOfWater.class)); + cards.add(new SetCardInfo("Wall of Wood", 226, Rarity.COMMON, mage.cards.w.WallOfWood.class)); + cards.add(new SetCardInfo("Wanderlust", 227, Rarity.UNCOMMON, mage.cards.w.Wanderlust.class)); + cards.add(new SetCardInfo("War Mammoth", 228, Rarity.COMMON, mage.cards.w.WarMammoth.class)); + cards.add(new SetCardInfo("Warp Artifact", 135, Rarity.RARE, mage.cards.w.WarpArtifact.class)); + cards.add(new SetCardInfo("Water Elemental", 92, Rarity.UNCOMMON, mage.cards.w.WaterElemental.class)); + cards.add(new SetCardInfo("Weakness", 136, Rarity.COMMON, mage.cards.w.Weakness.class)); + cards.add(new SetCardInfo("Web", 229, Rarity.RARE, mage.cards.w.Web.class)); + cards.add(new SetCardInfo("Wheel of Fortune", 185, Rarity.RARE, mage.cards.w.WheelOfFortune.class)); + cards.add(new SetCardInfo("White Knight", 44, Rarity.UNCOMMON, mage.cards.w.WhiteKnight.class)); + cards.add(new SetCardInfo("White Ward", 45, Rarity.UNCOMMON, mage.cards.w.WhiteWard.class)); + cards.add(new SetCardInfo("Wild Growth", 230, Rarity.COMMON, mage.cards.w.WildGrowth.class)); + cards.add(new SetCardInfo("Will-o'-the-Wisp", 137, Rarity.RARE, mage.cards.w.WillOTheWisp.class)); + cards.add(new SetCardInfo("Winter Orb", 280, Rarity.RARE, mage.cards.w.WinterOrb.class)); + cards.add(new SetCardInfo("Wooden Sphere", 281, Rarity.UNCOMMON, mage.cards.w.WoodenSphere.class)); + cards.add(new SetCardInfo("Wrath of God", 46, Rarity.RARE, mage.cards.w.WrathOfGod.class)); + cards.add(new SetCardInfo("Zombie Master", 138, Rarity.RARE, mage.cards.z.ZombieMaster.class)); + } +} From d82265149236558beb15592a89699e73b657eb9a Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Thu, 16 Jan 2020 17:51:58 +0100 Subject: [PATCH 011/182] Add the Multiverse Gift Box (MGB) set. --- .../src/mage/sets/MultiverseGiftBox.java | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/MultiverseGiftBox.java diff --git a/Mage.Sets/src/mage/sets/MultiverseGiftBox.java b/Mage.Sets/src/mage/sets/MultiverseGiftBox.java new file mode 100644 index 00000000000..ce8b9956400 --- /dev/null +++ b/Mage.Sets/src/mage/sets/MultiverseGiftBox.java @@ -0,0 +1,34 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/mgb + */ +public class MultiverseGiftBox extends ExpansionSet { + + private static final MultiverseGiftBox instance = new MultiverseGiftBox(); + + public static MultiverseGiftBox getInstance() { + return instance; + } + + private MultiverseGiftBox() { + super("Multiverse Gift Box", "MGB", ExpansionSet.buildDate(1996, 11, 1), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Bull Elephant", 9, Rarity.RARE, mage.cards.b.BullElephant.class)); + cards.add(new SetCardInfo("Dark Privilege", 3, Rarity.RARE, mage.cards.d.DarkPrivilege.class)); + cards.add(new SetCardInfo("King Cheetah", 10, Rarity.RARE, mage.cards.k.KingCheetah.class)); + cards.add(new SetCardInfo("Necrosavant", 4, Rarity.RARE, mage.cards.n.Necrosavant.class)); + cards.add(new SetCardInfo("Ovinomancer", 2, Rarity.RARE, mage.cards.o.Ovinomancer.class)); + cards.add(new SetCardInfo("Peace Talks", 1, Rarity.RARE, mage.cards.p.PeaceTalks.class)); + cards.add(new SetCardInfo("Urborg Mindsucker", 5, Rarity.RARE, mage.cards.u.UrborgMindsucker.class)); + cards.add(new SetCardInfo("Vampirism", 6, Rarity.RARE, mage.cards.v.Vampirism.class)); + cards.add(new SetCardInfo("Viashino Sandstalker", 8, Rarity.RARE, mage.cards.v.ViashinoSandstalker.class)); + cards.add(new SetCardInfo("Wicked Reward", 7, Rarity.RARE, mage.cards.w.WickedReward.class)); + } +} From cd9b75c0d9811383745bff78485efbf552b6b6cd Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Thu, 16 Jan 2020 18:27:03 +0100 Subject: [PATCH 012/182] Add the Portal Demo Game (PPOD) set. --- .../dl/sources/ScryfallImageSupportCards.java | 1 + Mage.Sets/src/mage/sets/PortalDemoGame.java | 30 +++++++++++++++++++ 2 files changed, 31 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/PortalDemoGame.java diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java index 5f88be6b28c..f49dce89f11 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java @@ -48,6 +48,7 @@ public class ScryfallImageSupportCards { add("VIS"); add("5ED"); add("POR"); + add("PPOD"); add("WTH"); add("TMP"); add("STH"); diff --git a/Mage.Sets/src/mage/sets/PortalDemoGame.java b/Mage.Sets/src/mage/sets/PortalDemoGame.java new file mode 100644 index 00000000000..82709973dea --- /dev/null +++ b/Mage.Sets/src/mage/sets/PortalDemoGame.java @@ -0,0 +1,30 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/ppod + */ +public class PortalDemoGame extends ExpansionSet { + + private static final PortalDemoGame instance = new PortalDemoGame(); + + public static PortalDemoGame getInstance() { + return instance; + } + + private PortalDemoGame() { + super("Portal Demo Game", "PPOD", ExpansionSet.buildDate(1997, 5, 1), SetType.SUPPLEMENTAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Armored Pegasus", 1, Rarity.COMMON, mage.cards.a.ArmoredPegasus.class)); + cards.add(new SetCardInfo("Bull Hippo", 2, Rarity.UNCOMMON, mage.cards.b.BullHippo.class)); + cards.add(new SetCardInfo("Cloud Pirates", 3, Rarity.COMMON, mage.cards.c.CloudPirates.class)); + cards.add(new SetCardInfo("Feral Shadow", 4, Rarity.COMMON, mage.cards.f.FeralShadow.class)); + cards.add(new SetCardInfo("Snapping Drake", 5, Rarity.COMMON, mage.cards.s.SnappingDrake.class)); + cards.add(new SetCardInfo("Storm Crow", 6, Rarity.COMMON, mage.cards.s.StormCrow.class)); + } +} From ee7e1651a8ce907a20c0966dd2d0d44e007619a0 Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Thu, 16 Jan 2020 18:42:09 +0100 Subject: [PATCH 013/182] Add the Judge Gift Cards 1998 (JGP) set. --- .../src/mage/sets/JudgeGiftCards1998.java | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/JudgeGiftCards1998.java diff --git a/Mage.Sets/src/mage/sets/JudgeGiftCards1998.java b/Mage.Sets/src/mage/sets/JudgeGiftCards1998.java new file mode 100644 index 00000000000..ed3a4886eae --- /dev/null +++ b/Mage.Sets/src/mage/sets/JudgeGiftCards1998.java @@ -0,0 +1,27 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/jgp + */ +public class JudgeGiftCards1998 extends ExpansionSet { + + private static final JudgeGiftCards1998 instance = new JudgeGiftCards1998(); + + public static JudgeGiftCards1998 getInstance() { + return instance; + } + + private JudgeGiftCards1998() { + super("Judge Gift Cards 1998", "JGP", ExpansionSet.buildDate(1998, 1, 1), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Gaea's Cradle", 3, Rarity.RARE, mage.cards.g.GaeasCradle.class)); + cards.add(new SetCardInfo("Lightning Bolt", 1, Rarity.RARE, mage.cards.l.LightningBolt.class)); + cards.add(new SetCardInfo("Stroke of Genius", 2, Rarity.RARE, mage.cards.s.StrokeOfGenius.class)); + } +} From 4d3e41fa358c78103c47df465aba94d903f81cce Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Thu, 16 Jan 2020 18:44:50 +0100 Subject: [PATCH 014/182] Adjust Asia Pacific Land Program set abbreviation to match Scryfall. --- Mage.Client/src/main/java/mage/client/cards/DragCardGrid.java | 2 +- .../java/org/mage/plugins/card/dl/sources/GathererSets.java | 2 +- .../plugins/card/dl/sources/ScryfallImageSupportCards.java | 3 ++- Mage.Sets/src/mage/sets/AsiaPacificLandProgram.java | 4 +++- Mage.Verify/src/main/java/mage/verify/MtgJson.java | 2 +- 5 files changed, 8 insertions(+), 5 deletions(-) diff --git a/Mage.Client/src/main/java/mage/client/cards/DragCardGrid.java b/Mage.Client/src/main/java/mage/client/cards/DragCardGrid.java index 9a7e144f47c..d999dcd2dd5 100644 --- a/Mage.Client/src/main/java/mage/client/cards/DragCardGrid.java +++ b/Mage.Client/src/main/java/mage/client/cards/DragCardGrid.java @@ -1508,7 +1508,7 @@ public class DragCardGrid extends JPanel implements DragCardSource, DragCardTarg pimpedSets.put("ARENA", 1); pimpedSets.put("UGIN", 1); pimpedSets.put("WMCQ", 1); - pimpedSets.put("APAC", 1); + pimpedSets.put("PALP", 1); pimpedSets.put("EURO", 1); pimpedSets.put("FNMP", 1); pimpedSets.put("MGDC", 1); diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/GathererSets.java b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/GathererSets.java index acd17bb3ffd..ff90485a40f 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/GathererSets.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/GathererSets.java @@ -61,7 +61,7 @@ public class GathererSets implements Iterable { "POR", "P02", "PTK", "ARC", "DD3EVG", "W16", "W17", - // "APAC" -- gatherer do not have that set, scryfall has PALP + // "PALP" -- Gatherer does not have the set Asia Pacific Land Program // "ARENA" -- is't many set with different codes, not one // "ATH" -- has cards from many sets, symbol does not exist on gatherer // "CLASH", "CP", "DPA", "EURO", "FNMP", "GPX", "GRC", "GUR", "H17", "JR", "MBP", "MGDC", "MLP", "MPRP", "PTC", "SUS", "SWS", "WMCQ", // need to fix diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java index f49dce89f11..1ab5ef1f003 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java @@ -258,7 +258,8 @@ public class ScryfallImageSupportCards { add("ELD"); add("THB"); // - add("EURO"); + add("PALP"); + add("PELP"); add("GPX"); add("ATH"); add("GRC"); diff --git a/Mage.Sets/src/mage/sets/AsiaPacificLandProgram.java b/Mage.Sets/src/mage/sets/AsiaPacificLandProgram.java index c14cd2c22f0..261edd70b4f 100644 --- a/Mage.Sets/src/mage/sets/AsiaPacificLandProgram.java +++ b/Mage.Sets/src/mage/sets/AsiaPacificLandProgram.java @@ -18,8 +18,10 @@ public final class AsiaPacificLandProgram extends ExpansionSet { } private AsiaPacificLandProgram() { - super("Asia Pacific Land Program", "APAC", ExpansionSet.buildDate(1997, 10, 13), SetType.PROMOTIONAL); + super("Asia Pacific Land Program", "PALP", ExpansionSet.buildDate(1997, 10, 13), SetType.PROMOTIONAL); this.hasBoosters = false; + this.hasBasicLands = true; + cards.add(new SetCardInfo("Forest", 1, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Forest", 6, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Forest", 11, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); diff --git a/Mage.Verify/src/main/java/mage/verify/MtgJson.java b/Mage.Verify/src/main/java/mage/verify/MtgJson.java index af284491bc0..771b4ef0ad3 100644 --- a/Mage.Verify/src/main/java/mage/verify/MtgJson.java +++ b/Mage.Verify/src/main/java/mage/verify/MtgJson.java @@ -38,7 +38,7 @@ public final class MtgJson { mtgJsonToXMageCodes.put("pFNM", "FNMP"); mtgJsonToXMageCodes.put("pELP", "EURO"); mtgJsonToXMageCodes.put("pARL", "ARENA"); - mtgJsonToXMageCodes.put("pALP", "APAC"); + mtgJsonToXMageCodes.put("pALP", "PALP"); mtgJsonToXMageCodes.put("PO2", "P02"); mtgJsonToXMageCodes.put("DD3_JVC", "DD3JVC"); mtgJsonToXMageCodes.put("DD3_GVL", "DDD"); From 2458c6479a19960a41962a4aced6661f4159176a Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Thu, 16 Jan 2020 18:46:22 +0100 Subject: [PATCH 015/182] Add the Judge Gift Cards 1999 (G99) set. --- .../src/mage/sets/JudgeGiftCards1999.java | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/JudgeGiftCards1999.java diff --git a/Mage.Sets/src/mage/sets/JudgeGiftCards1999.java b/Mage.Sets/src/mage/sets/JudgeGiftCards1999.java new file mode 100644 index 00000000000..0f416bdaa04 --- /dev/null +++ b/Mage.Sets/src/mage/sets/JudgeGiftCards1999.java @@ -0,0 +1,25 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/g99 + */ +public class JudgeGiftCards1999 extends ExpansionSet { + + private static final JudgeGiftCards1999 instance = new JudgeGiftCards1999(); + + public static JudgeGiftCards1999 getInstance() { + return instance; + } + + private JudgeGiftCards1999() { + super("Judge Gift Cards 1999", "G99", ExpansionSet.buildDate(1999, 1, 1), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Memory Lapse", 1, Rarity.RARE, mage.cards.m.MemoryLapse.class)); + } +} From ed53f2f8ed782ed4bc9e6ff3a971799db32e3ddb Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Thu, 16 Jan 2020 18:48:00 +0100 Subject: [PATCH 016/182] Add the Worlds (PWOR) set. --- .../dl/sources/ScryfallImageSupportCards.java | 2 +- Mage.Sets/src/mage/sets/Worlds.java | 25 +++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 Mage.Sets/src/mage/sets/Worlds.java diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java index 1ab5ef1f003..a2ec8b536c8 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java @@ -73,7 +73,7 @@ public class ScryfallImageSupportCards { add("PDRC"); add("PHPR"); add("PLGM"); - + add("MGB"); add("ULG"); add("6ED"); diff --git a/Mage.Sets/src/mage/sets/Worlds.java b/Mage.Sets/src/mage/sets/Worlds.java new file mode 100644 index 00000000000..677eeaf2325 --- /dev/null +++ b/Mage.Sets/src/mage/sets/Worlds.java @@ -0,0 +1,25 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/pwor + */ +public class Worlds extends ExpansionSet { + + private static final Worlds instance = new Worlds(); + + public static Worlds getInstance() { + return instance; + } + + private Worlds() { + super("Worlds", "PWOR", ExpansionSet.buildDate(1999, 8, 4), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Balduvian Horde", 1, Rarity.RARE, mage.cards.b.BalduvianHorde.class)); + } +} From 48f94979de6c7fcf44b0f8e44b04fd0309b59a62 Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Thu, 16 Jan 2020 18:49:04 +0100 Subject: [PATCH 017/182] Add the Wizards of the Coast Online Store (PWOS) set. --- .../sets/WizardsOfTheCoastOnlineStore.java | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/WizardsOfTheCoastOnlineStore.java diff --git a/Mage.Sets/src/mage/sets/WizardsOfTheCoastOnlineStore.java b/Mage.Sets/src/mage/sets/WizardsOfTheCoastOnlineStore.java new file mode 100644 index 00000000000..c117c01d714 --- /dev/null +++ b/Mage.Sets/src/mage/sets/WizardsOfTheCoastOnlineStore.java @@ -0,0 +1,25 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/pwos + */ +public class WizardsOfTheCoastOnlineStore extends ExpansionSet { + + private static final WizardsOfTheCoastOnlineStore instance = new WizardsOfTheCoastOnlineStore(); + + public static WizardsOfTheCoastOnlineStore getInstance() { + return instance; + } + + private WizardsOfTheCoastOnlineStore() { + super("Wizards of the Coast Online Store", "PWOS", ExpansionSet.buildDate(1999, 9, 4), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Serra Angel", 1, Rarity.RARE, mage.cards.s.SerraAngel.class)); + } +} From 95fc6c8ef2ec78e89ca72e61730a2ef5579fcf27 Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Thu, 16 Jan 2020 18:54:11 +0100 Subject: [PATCH 018/182] Add the Battle Royale Box Set (BRB) set. --- .../dl/sources/ScryfallImageSupportCards.java | 2 +- .../src/mage/sets/BattleRoyaleBoxSet.java | 160 ++++++++++++++++++ 2 files changed, 161 insertions(+), 1 deletion(-) create mode 100644 Mage.Sets/src/mage/sets/BattleRoyaleBoxSet.java diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java index a2ec8b536c8..c443a9f6a83 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java @@ -81,7 +81,7 @@ public class ScryfallImageSupportCards { add("PTK"); add("S99"); add("MMQ"); - // add("BRB");Battle Royale Box Set + add("BRB"); add("NEM"); add("S00"); add("PCY"); diff --git a/Mage.Sets/src/mage/sets/BattleRoyaleBoxSet.java b/Mage.Sets/src/mage/sets/BattleRoyaleBoxSet.java new file mode 100644 index 00000000000..1d65894d761 --- /dev/null +++ b/Mage.Sets/src/mage/sets/BattleRoyaleBoxSet.java @@ -0,0 +1,160 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/brb + */ +public class BattleRoyaleBoxSet extends ExpansionSet { + + private static final BattleRoyaleBoxSet instance = new BattleRoyaleBoxSet(); + + public static BattleRoyaleBoxSet getInstance() { + return instance; + } + + private BattleRoyaleBoxSet() { + super("Battle Royale Box Set", "BRB", ExpansionSet.buildDate(1999, 11, 12), SetType.SUPPLEMENTAL); + this.hasBoosters = false; + this.hasBasicLands = true; + + cards.add(new SetCardInfo("Abyssal Specter", 1, Rarity.UNCOMMON, mage.cards.a.AbyssalSpecter.class)); + cards.add(new SetCardInfo("Advance Scout", 2, Rarity.COMMON, mage.cards.a.AdvanceScout.class)); + cards.add(new SetCardInfo("Air Elemental", 3, Rarity.UNCOMMON, mage.cards.a.AirElemental.class)); + cards.add(new SetCardInfo("Angelic Page", 4, Rarity.COMMON, mage.cards.a.AngelicPage.class)); + cards.add(new SetCardInfo("Arc Lightning", 5, Rarity.COMMON, mage.cards.a.ArcLightning.class)); + cards.add(new SetCardInfo("Argothian Elder", 6, Rarity.UNCOMMON, mage.cards.a.ArgothianElder.class)); + cards.add(new SetCardInfo("Armored Pegasus", 7, Rarity.COMMON, mage.cards.a.ArmoredPegasus.class)); + cards.add(new SetCardInfo("Azure Drake", 8, Rarity.UNCOMMON, mage.cards.a.AzureDrake.class)); + cards.add(new SetCardInfo("Blinking Spirit", 9, Rarity.RARE, mage.cards.b.BlinkingSpirit.class)); + cards.add(new SetCardInfo("Broken Fall", 10, Rarity.COMMON, mage.cards.b.BrokenFall.class)); + cards.add(new SetCardInfo("Cackling Fiend", 11, Rarity.COMMON, mage.cards.c.CacklingFiend.class)); + cards.add(new SetCardInfo("Catastrophe", 12, Rarity.RARE, mage.cards.c.Catastrophe.class)); + cards.add(new SetCardInfo("Cinder Marsh", 13, Rarity.UNCOMMON, mage.cards.c.CinderMarsh.class)); + cards.add(new SetCardInfo("Control Magic", 14, Rarity.UNCOMMON, mage.cards.c.ControlMagic.class)); + cards.add(new SetCardInfo("Counterspell", 15, Rarity.COMMON, mage.cards.c.Counterspell.class)); + cards.add(new SetCardInfo("Crazed Skirge", 16, Rarity.UNCOMMON, mage.cards.c.CrazedSkirge.class)); + cards.add(new SetCardInfo("Curfew", 17, Rarity.COMMON, mage.cards.c.Curfew.class)); + cards.add(new SetCardInfo("Dark Ritual", 18, Rarity.COMMON, mage.cards.d.DarkRitual.class)); + cards.add(new SetCardInfo("Dirtcowl Wurm", 19, Rarity.RARE, mage.cards.d.DirtcowlWurm.class)); + cards.add(new SetCardInfo("Disenchant", 20, Rarity.COMMON, mage.cards.d.Disenchant.class)); + cards.add(new SetCardInfo("Disruptive Student", 21, Rarity.COMMON, mage.cards.d.DisruptiveStudent.class)); + cards.add(new SetCardInfo("Drifting Meadow", 22, Rarity.COMMON, mage.cards.d.DriftingMeadow.class)); + cards.add(new SetCardInfo("Elvish Lyrist", 23, Rarity.UNCOMMON, mage.cards.e.ElvishLyrist.class)); + cards.add(new SetCardInfo("Exhume", 24, Rarity.COMMON, mage.cards.e.Exhume.class)); + cards.add(new SetCardInfo("Fecundity", 25, Rarity.UNCOMMON, mage.cards.f.Fecundity.class)); + cards.add(new SetCardInfo("Fertile Ground", 26, Rarity.COMMON, mage.cards.f.FertileGround.class)); + cards.add(new SetCardInfo("Fire Ants", 27, Rarity.UNCOMMON, mage.cards.f.FireAnts.class)); + cards.add(new SetCardInfo("Flood", 28, Rarity.COMMON, mage.cards.f.Flood.class)); + cards.add(new SetCardInfo("Forest", 109, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", 108, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", 107, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", 106, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", 105, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", 104, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", 103, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", 102, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", 101, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Giant Growth", 29, Rarity.COMMON, mage.cards.g.GiantGrowth.class)); + cards.add(new SetCardInfo("Gorilla Warrior", 30, Rarity.COMMON, mage.cards.g.GorillaWarrior.class)); + cards.add(new SetCardInfo("Healing Salve", 31, Rarity.COMMON, mage.cards.h.HealingSalve.class)); + cards.add(new SetCardInfo("Heat Ray", 32, Rarity.COMMON, mage.cards.h.HeatRay.class)); + cards.add(new SetCardInfo("Hurricane", 33, Rarity.UNCOMMON, mage.cards.h.Hurricane.class)); + cards.add(new SetCardInfo("Infantry Veteran", 34, Rarity.COMMON, mage.cards.i.InfantryVeteran.class)); + cards.add(new SetCardInfo("Island", 114, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", 113, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", 112, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", 111, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", 110, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Land Tax", 35, Rarity.UNCOMMON, mage.cards.l.LandTax.class)); + cards.add(new SetCardInfo("Lhurgoyf", 36, Rarity.RARE, mage.cards.l.Lhurgoyf.class)); + cards.add(new SetCardInfo("Lightning Elemental", 37, Rarity.COMMON, mage.cards.l.LightningElemental.class)); + cards.add(new SetCardInfo("Living Death", 38, Rarity.RARE, mage.cards.l.LivingDeath.class)); + cards.add(new SetCardInfo("Llanowar Elves", 39, Rarity.COMMON, mage.cards.l.LlanowarElves.class)); + cards.add(new SetCardInfo("Man-o'-War", 40, Rarity.COMMON, mage.cards.m.ManOWar.class)); + cards.add(new SetCardInfo("Mana Leak", 41, Rarity.COMMON, mage.cards.m.ManaLeak.class)); + cards.add(new SetCardInfo("Maniacal Rage", 42, Rarity.COMMON, mage.cards.m.ManiacalRage.class)); + cards.add(new SetCardInfo("Manta Riders", 43, Rarity.COMMON, mage.cards.m.MantaRiders.class)); + cards.add(new SetCardInfo("Master Decoy", 44, Rarity.COMMON, mage.cards.m.MasterDecoy.class)); + cards.add(new SetCardInfo("Mogg Hollows", 45, Rarity.UNCOMMON, mage.cards.m.MoggHollows.class)); + cards.add(new SetCardInfo("Mountain", 123, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", 122, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", 121, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", 120, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", 119, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", 118, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", 117, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", 116, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", 115, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Nekrataal", 46, Rarity.UNCOMMON, mage.cards.n.Nekrataal.class)); + cards.add(new SetCardInfo("Opportunity", 47, Rarity.UNCOMMON, mage.cards.o.Opportunity.class)); + cards.add(new SetCardInfo("Pacifism", 48, Rarity.COMMON, mage.cards.p.Pacifism.class)); + cards.add(new SetCardInfo("Pestilence", 49, Rarity.UNCOMMON, mage.cards.p.Pestilence.class)); + cards.add(new SetCardInfo("Phyrexian Ghoul", 50, Rarity.COMMON, mage.cards.p.PhyrexianGhoul.class)); + cards.add(new SetCardInfo("Pincher Beetles", 51, Rarity.COMMON, mage.cards.p.PincherBeetles.class)); + cards.add(new SetCardInfo("Plains", 132, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", 131, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", 130, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", 129, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", 128, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", 127, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", 126, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", 125, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", 124, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plated Rootwalla", 52, Rarity.COMMON, mage.cards.p.PlatedRootwalla.class)); + cards.add(new SetCardInfo("Polluted Mire", 53, Rarity.COMMON, mage.cards.p.PollutedMire.class)); + cards.add(new SetCardInfo("Prodigal Sorcerer", 54, Rarity.COMMON, mage.cards.p.ProdigalSorcerer.class)); + cards.add(new SetCardInfo("Raging Goblin", 55, Rarity.COMMON, mage.cards.r.RagingGoblin.class)); + cards.add(new SetCardInfo("Ray of Command", 56, Rarity.COMMON, mage.cards.r.RayOfCommand.class)); + cards.add(new SetCardInfo("Reanimate", 57, Rarity.UNCOMMON, mage.cards.r.Reanimate.class)); + cards.add(new SetCardInfo("Remote Isle", 58, Rarity.COMMON, mage.cards.r.RemoteIsle.class)); + cards.add(new SetCardInfo("River Boa", 59, Rarity.UNCOMMON, mage.cards.r.RiverBoa.class)); + cards.add(new SetCardInfo("Rolling Thunder", 60, Rarity.COMMON, mage.cards.r.RollingThunder.class)); + cards.add(new SetCardInfo("Sadistic Glee", 61, Rarity.COMMON, mage.cards.s.SadisticGlee.class)); + cards.add(new SetCardInfo("Sanctum Custodian", 62, Rarity.COMMON, mage.cards.s.SanctumCustodian.class)); + cards.add(new SetCardInfo("Sanctum Guardian", 63, Rarity.UNCOMMON, mage.cards.s.SanctumGuardian.class)); + cards.add(new SetCardInfo("Sandstorm", 64, Rarity.COMMON, mage.cards.s.Sandstorm.class)); + cards.add(new SetCardInfo("Scaled Wurm", 65, Rarity.COMMON, mage.cards.s.ScaledWurm.class)); + cards.add(new SetCardInfo("Scryb Sprites", 66, Rarity.COMMON, mage.cards.s.ScrybSprites.class)); + cards.add(new SetCardInfo("Seasoned Marshal", 67, Rarity.UNCOMMON, mage.cards.s.SeasonedMarshal.class)); + cards.add(new SetCardInfo("Seeker of Skybreak", 68, Rarity.COMMON, mage.cards.s.SeekerOfSkybreak.class)); + cards.add(new SetCardInfo("Sengir Vampire", 69, Rarity.UNCOMMON, mage.cards.s.SengirVampire.class)); + cards.add(new SetCardInfo("Sewer Rats", 70, Rarity.COMMON, mage.cards.s.SewerRats.class)); + cards.add(new SetCardInfo("Shower of Sparks", 71, Rarity.COMMON, mage.cards.s.ShowerOfSparks.class)); + cards.add(new SetCardInfo("Skyshroud Elite", 72, Rarity.UNCOMMON, mage.cards.s.SkyshroudElite.class)); + cards.add(new SetCardInfo("Slippery Karst", 73, Rarity.COMMON, mage.cards.s.SlipperyKarst.class)); + cards.add(new SetCardInfo("Soltari Foot Soldier", 74, Rarity.COMMON, mage.cards.s.SoltariFootSoldier.class)); + cards.add(new SetCardInfo("Songstitcher", 75, Rarity.UNCOMMON, mage.cards.s.Songstitcher.class)); + cards.add(new SetCardInfo("Soul Warden", 76, Rarity.COMMON, mage.cards.s.SoulWarden.class)); + cards.add(new SetCardInfo("Spike Colony", 77, Rarity.COMMON, mage.cards.s.SpikeColony.class)); + cards.add(new SetCardInfo("Spike Feeder", 78, Rarity.UNCOMMON, mage.cards.s.SpikeFeeder.class)); + cards.add(new SetCardInfo("Spike Weaver", 79, Rarity.RARE, mage.cards.s.SpikeWeaver.class)); + cards.add(new SetCardInfo("Spike Worker", 80, Rarity.COMMON, mage.cards.s.SpikeWorker.class)); + cards.add(new SetCardInfo("Steam Blast", 81, Rarity.UNCOMMON, mage.cards.s.SteamBlast.class)); + cards.add(new SetCardInfo("Subversion", 82, Rarity.RARE, mage.cards.s.Subversion.class)); + cards.add(new SetCardInfo("Sun Clasp", 83, Rarity.COMMON, mage.cards.s.SunClasp.class)); + cards.add(new SetCardInfo("Swamp", 136, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", 135, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", 134, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", 133, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swords to Plowshares", 84, Rarity.UNCOMMON, mage.cards.s.SwordsToPlowshares.class)); + cards.add(new SetCardInfo("Symbiosis", 85, Rarity.COMMON, mage.cards.s.Symbiosis.class)); + cards.add(new SetCardInfo("Syphon Soul", 86, Rarity.COMMON, mage.cards.s.SyphonSoul.class)); + cards.add(new SetCardInfo("Terror", 87, Rarity.COMMON, mage.cards.t.Terror.class)); + cards.add(new SetCardInfo("Thalakos Lowlands", 88, Rarity.UNCOMMON, mage.cards.t.ThalakosLowlands.class)); + cards.add(new SetCardInfo("Tranquility", 89, Rarity.COMMON, mage.cards.t.Tranquility.class)); + cards.add(new SetCardInfo("Trumpeting Armodon", 90, Rarity.UNCOMMON, mage.cards.t.TrumpetingArmodon.class)); + cards.add(new SetCardInfo("Unnerve", 91, Rarity.COMMON, mage.cards.u.Unnerve.class)); + cards.add(new SetCardInfo("Uthden Troll", 92, Rarity.UNCOMMON, mage.cards.u.UthdenTroll.class)); + cards.add(new SetCardInfo("Vec Townships", 93, Rarity.UNCOMMON, mage.cards.v.VecTownships.class)); + cards.add(new SetCardInfo("Village Elder", 94, Rarity.COMMON, mage.cards.v.VillageElder.class)); + cards.add(new SetCardInfo("Wall of Heat", 95, Rarity.COMMON, mage.cards.w.WallOfHeat.class)); + cards.add(new SetCardInfo("Weakness", 96, Rarity.COMMON, mage.cards.w.Weakness.class)); + cards.add(new SetCardInfo("Wildfire Emissary", 97, Rarity.UNCOMMON, mage.cards.w.WildfireEmissary.class)); + cards.add(new SetCardInfo("Wind Drake", 98, Rarity.COMMON, mage.cards.w.WindDrake.class)); + cards.add(new SetCardInfo("Windfall", 99, Rarity.UNCOMMON, mage.cards.w.Windfall.class)); + cards.add(new SetCardInfo("Wrath of God", 100, Rarity.RARE, mage.cards.w.WrathOfGod.class)); + } +} From 5a21c7fadd822b025400e351a884d7e2f059a734 Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Thu, 16 Jan 2020 19:15:25 +0100 Subject: [PATCH 019/182] Add the Junior Super Series (PSUS) set. --- .../src/mage/sets/JuniorSuperSeries.java | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/JuniorSuperSeries.java diff --git a/Mage.Sets/src/mage/sets/JuniorSuperSeries.java b/Mage.Sets/src/mage/sets/JuniorSuperSeries.java new file mode 100644 index 00000000000..74b4437da8d --- /dev/null +++ b/Mage.Sets/src/mage/sets/JuniorSuperSeries.java @@ -0,0 +1,42 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/psus + */ +public class JuniorSuperSeries extends ExpansionSet { + + private static final JuniorSuperSeries instance = new JuniorSuperSeries(); + + public static JuniorSuperSeries getInstance() { + return instance; + } + + private JuniorSuperSeries() { + super("Junior Super Series", "PSUS", ExpansionSet.buildDate(2008, 1, 1), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("City of Brass", 6, Rarity.RARE, mage.cards.c.CityOfBrass.class)); + cards.add(new SetCardInfo("Crusade", 4, Rarity.RARE, mage.cards.c.Crusade.class)); + cards.add(new SetCardInfo("Elvish Champion", 17, Rarity.RARE, mage.cards.e.ElvishChampion.class)); + cards.add(new SetCardInfo("Elvish Lyrist", 5, Rarity.RARE, mage.cards.e.ElvishLyrist.class)); + cards.add(new SetCardInfo("Giant Growth", 8, Rarity.RARE, mage.cards.g.GiantGrowth.class)); + cards.add(new SetCardInfo("Glorious Anthem", 16, Rarity.RARE, mage.cards.g.GloriousAnthem.class)); + cards.add(new SetCardInfo("Lord of Atlantis", 3, Rarity.RARE, mage.cards.l.LordOfAtlantis.class)); + cards.add(new SetCardInfo("Mad Auntie", 18, Rarity.RARE, mage.cards.m.MadAuntie.class)); + cards.add(new SetCardInfo("Royal Assassin", 11, Rarity.RARE, mage.cards.r.RoyalAssassin.class)); + cards.add(new SetCardInfo("Sakura-Tribe Elder", 12, Rarity.RARE, mage.cards.s.SakuraTribeElder.class)); + cards.add(new SetCardInfo("Serra Avatar", 2, Rarity.RARE, mage.cards.s.SerraAvatar.class)); + cards.add(new SetCardInfo("Shard Phoenix", 13, Rarity.RARE, mage.cards.s.ShardPhoenix.class)); + cards.add(new SetCardInfo("Slith Firewalker", 10, Rarity.RARE, mage.cards.s.SlithFirewalker.class)); + cards.add(new SetCardInfo("Soltari Priest", 14, Rarity.RARE, mage.cards.s.SoltariPriest.class)); + cards.add(new SetCardInfo("Thran Quarry", 1, Rarity.RARE, mage.cards.t.ThranQuarry.class)); + cards.add(new SetCardInfo("Two-Headed Dragon", 9, Rarity.RARE, mage.cards.t.TwoHeadedDragon.class)); + cards.add(new SetCardInfo("Volcanic Hammer", 7, Rarity.RARE, mage.cards.v.VolcanicHammer.class)); + cards.add(new SetCardInfo("Whirling Dervish", 15, Rarity.RARE, mage.cards.w.WhirlingDervish.class)); + } +} From b56882091e7ff967d4f31e02034f4a084ffdd145 Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Thu, 16 Jan 2020 19:28:15 +0100 Subject: [PATCH 020/182] Adjust European Land Program set abbreviation to match Scryfall. --- Mage.Client/src/main/java/mage/client/cards/DragCardGrid.java | 2 +- .../java/org/mage/plugins/card/dl/sources/GathererSets.java | 2 +- .../plugins/card/dl/sources/ScryfallImageSupportCards.java | 1 - Mage.Sets/src/mage/sets/EuropeanLandProgram.java | 4 +++- Mage.Verify/src/main/java/mage/verify/MtgJson.java | 2 +- 5 files changed, 6 insertions(+), 5 deletions(-) diff --git a/Mage.Client/src/main/java/mage/client/cards/DragCardGrid.java b/Mage.Client/src/main/java/mage/client/cards/DragCardGrid.java index d999dcd2dd5..c383ae123e2 100644 --- a/Mage.Client/src/main/java/mage/client/cards/DragCardGrid.java +++ b/Mage.Client/src/main/java/mage/client/cards/DragCardGrid.java @@ -1509,7 +1509,7 @@ public class DragCardGrid extends JPanel implements DragCardSource, DragCardTarg pimpedSets.put("UGIN", 1); pimpedSets.put("WMCQ", 1); pimpedSets.put("PALP", 1); - pimpedSets.put("EURO", 1); + pimpedSets.put("PELP", 1); pimpedSets.put("FNMP", 1); pimpedSets.put("MGDC", 1); pimpedSets.put("MPRP", 1); diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/GathererSets.java b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/GathererSets.java index ff90485a40f..ba94c153130 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/GathererSets.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/GathererSets.java @@ -64,7 +64,7 @@ public class GathererSets implements Iterable { // "PALP" -- Gatherer does not have the set Asia Pacific Land Program // "ARENA" -- is't many set with different codes, not one // "ATH" -- has cards from many sets, symbol does not exist on gatherer - // "CLASH", "CP", "DPA", "EURO", "FNMP", "GPX", "GRC", "GUR", "H17", "JR", "MBP", "MGDC", "MLP", "MPRP", "PTC", "SUS", "SWS", "WMCQ", // need to fix + // "CLASH", "CP", "DPA", "PELP", "FNMP", "GPX", "GRC", "GUR", "H17", "JR", "MBP", "MGDC", "MLP", "MPRP", "PTC", "SUS", "SWS", "WMCQ", // need to fix "H09", "PD2", "PD3", "UNH", "CM1", "V11", "A25", "UST", "IMA", "DD2", "EVG", "DDC", "DDE", "DDD", "8EB", "9EB", "CHR", "G18", "DD3GVL", "S00", "S99", "UGL" // ok // current testing }; diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java index c443a9f6a83..b559cb7c1e1 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java @@ -20,7 +20,6 @@ public class ScryfallImageSupportCards { put("MPS-AKH", "mp2"). put("MBP", "pmei"). put("WMCQ", "pwcq"). - put("EURO", "pelp"). put("GPX", "pgpx"). put("MED", "me1"). put("MEDM", "med"). diff --git a/Mage.Sets/src/mage/sets/EuropeanLandProgram.java b/Mage.Sets/src/mage/sets/EuropeanLandProgram.java index 709d783b8ec..96cfd9b431d 100644 --- a/Mage.Sets/src/mage/sets/EuropeanLandProgram.java +++ b/Mage.Sets/src/mage/sets/EuropeanLandProgram.java @@ -18,8 +18,10 @@ public final class EuropeanLandProgram extends ExpansionSet { } private EuropeanLandProgram() { - super("European Land Program", "EURO", ExpansionSet.buildDate(2000, 2, 14), SetType.PROMOTIONAL); + super("European Land Program", "PELP", ExpansionSet.buildDate(2000, 2, 14), SetType.PROMOTIONAL); this.hasBoosters = false; + this.hasBasicLands = true; + cards.add(new SetCardInfo("Forest", 1, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Forest", 6, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Forest", 11, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); diff --git a/Mage.Verify/src/main/java/mage/verify/MtgJson.java b/Mage.Verify/src/main/java/mage/verify/MtgJson.java index 771b4ef0ad3..28498f180cb 100644 --- a/Mage.Verify/src/main/java/mage/verify/MtgJson.java +++ b/Mage.Verify/src/main/java/mage/verify/MtgJson.java @@ -36,7 +36,7 @@ public final class MtgJson { mtgJsonToXMageCodes.put("pGRU", "GUR"); mtgJsonToXMageCodes.put("pGPX", "GPX"); mtgJsonToXMageCodes.put("pFNM", "FNMP"); - mtgJsonToXMageCodes.put("pELP", "EURO"); + mtgJsonToXMageCodes.put("pELP", "PELP"); mtgJsonToXMageCodes.put("pARL", "ARENA"); mtgJsonToXMageCodes.put("pALP", "PALP"); mtgJsonToXMageCodes.put("PO2", "P02"); From 2a1c98e58ce75881cb46b47cbda90c00f8e4e056 Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Thu, 16 Jan 2020 19:35:52 +0100 Subject: [PATCH 021/182] Add the Judge Gift Cards 2000 (G00) set. --- .../dl/sources/ScryfallImageSupportCards.java | 2 +- .../src/mage/sets/JudgeGiftCards2000.java | 26 +++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 Mage.Sets/src/mage/sets/JudgeGiftCards2000.java diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java index b559cb7c1e1..7cafc42c454 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java @@ -65,7 +65,7 @@ public class ScryfallImageSupportCards { add("G99"); add("G00"); add("G01"); - + // Other promo sets add("PWOR"); add("PWOS"); diff --git a/Mage.Sets/src/mage/sets/JudgeGiftCards2000.java b/Mage.Sets/src/mage/sets/JudgeGiftCards2000.java new file mode 100644 index 00000000000..1ec179c30e6 --- /dev/null +++ b/Mage.Sets/src/mage/sets/JudgeGiftCards2000.java @@ -0,0 +1,26 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/g00 + */ +public class JudgeGiftCards2000 extends ExpansionSet { + + private static final JudgeGiftCards2000 instance = new JudgeGiftCards2000(); + + public static JudgeGiftCards2000 getInstance() { + return instance; + } + + private JudgeGiftCards2000() { + super("Judge Gift Cards 2000", "G00", ExpansionSet.buildDate(2000, 1, 1), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Counterspell", 1, Rarity.RARE, mage.cards.c.Counterspell.class)); + cards.add(new SetCardInfo("Vampiric Tutor", 2, Rarity.RARE, mage.cards.v.VampiricTutor.class)); + } +} From c43877e38230507f92f60b319885d919f61cb680 Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Thu, 16 Jan 2020 19:39:00 +0100 Subject: [PATCH 022/182] Add the Beatdown Box Set (BTD) set. --- .../dl/sources/ScryfallImageSupportCards.java | 2 +- Mage.Sets/src/mage/sets/BeatdownBoxSet.java | 114 ++++++++++++++++++ 2 files changed, 115 insertions(+), 1 deletion(-) create mode 100644 Mage.Sets/src/mage/sets/BeatdownBoxSet.java diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java index 7cafc42c454..cb3c5ef6cf4 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java @@ -85,7 +85,7 @@ public class ScryfallImageSupportCards { add("S00"); add("PCY"); add("INV"); - // add("BTD"); // Beatdown Boxset + add("BTD"); add("PLS"); add("7ED"); add("APC"); diff --git a/Mage.Sets/src/mage/sets/BeatdownBoxSet.java b/Mage.Sets/src/mage/sets/BeatdownBoxSet.java new file mode 100644 index 00000000000..350085264a7 --- /dev/null +++ b/Mage.Sets/src/mage/sets/BeatdownBoxSet.java @@ -0,0 +1,114 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/btd + */ +public class BeatdownBoxSet extends ExpansionSet { + + private static final BeatdownBoxSet instance = new BeatdownBoxSet(); + + public static BeatdownBoxSet getInstance() { + return instance; + } + + private BeatdownBoxSet() { + super("Beatdown Box Set", "BTD", ExpansionSet.buildDate(2000, 10, 1), SetType.SUPPLEMENTAL); + this.hasBoosters = false; + this.hasBasicLands = true; + + cards.add(new SetCardInfo("Air Elemental", 1, Rarity.UNCOMMON, mage.cards.a.AirElemental.class)); + cards.add(new SetCardInfo("Balduvian Horde", 34, Rarity.RARE, mage.cards.b.BalduvianHorde.class)); + cards.add(new SetCardInfo("Ball Lightning", 35, Rarity.RARE, mage.cards.b.BallLightning.class)); + cards.add(new SetCardInfo("Blizzard Elemental", 2, Rarity.RARE, mage.cards.b.BlizzardElemental.class)); + cards.add(new SetCardInfo("Bloodrock Cyclops", 36, Rarity.COMMON, mage.cards.b.BloodrockCyclops.class)); + cards.add(new SetCardInfo("Bone Harvest", 19, Rarity.COMMON, mage.cards.b.BoneHarvest.class)); + cards.add(new SetCardInfo("Brainstorm", 3, Rarity.COMMON, mage.cards.b.Brainstorm.class)); + cards.add(new SetCardInfo("Clockwork Avian", 69, Rarity.RARE, mage.cards.c.ClockworkAvian.class)); + cards.add(new SetCardInfo("Clockwork Beast", 70, Rarity.RARE, mage.cards.c.ClockworkBeast.class)); + cards.add(new SetCardInfo("Cloud Djinn", 4, Rarity.UNCOMMON, mage.cards.c.CloudDjinn.class)); + cards.add(new SetCardInfo("Cloud Elemental", 5, Rarity.COMMON, mage.cards.c.CloudElemental.class)); + cards.add(new SetCardInfo("Coercion", 20, Rarity.COMMON, mage.cards.c.Coercion.class)); + cards.add(new SetCardInfo("Counterspell", 6, Rarity.COMMON, mage.cards.c.Counterspell.class)); + cards.add(new SetCardInfo("Crash of Rhinos", 51, Rarity.COMMON, mage.cards.c.CrashOfRhinos.class)); + cards.add(new SetCardInfo("Crashing Boars", 52, Rarity.UNCOMMON, mage.cards.c.CrashingBoars.class)); + cards.add(new SetCardInfo("Dark Ritual", 21, Rarity.COMMON, mage.cards.d.DarkRitual.class)); + cards.add(new SetCardInfo("Deadly Insect", 53, Rarity.COMMON, mage.cards.d.DeadlyInsect.class)); + cards.add(new SetCardInfo("Death Stroke", 22, Rarity.COMMON, mage.cards.d.DeathStroke.class)); + cards.add(new SetCardInfo("Diabolic Edict", 23, Rarity.COMMON, mage.cards.d.DiabolicEdict.class)); + cards.add(new SetCardInfo("Diabolic Vision", 67, Rarity.UNCOMMON, mage.cards.d.DiabolicVision.class)); + cards.add(new SetCardInfo("Drain Life", 24, Rarity.COMMON, mage.cards.d.DrainLife.class)); + cards.add(new SetCardInfo("Dwarven Ruins", 71, Rarity.UNCOMMON, mage.cards.d.DwarvenRuins.class)); + cards.add(new SetCardInfo("Ebon Stronghold", 72, Rarity.UNCOMMON, mage.cards.e.EbonStronghold.class)); + cards.add(new SetCardInfo("Erhnam Djinn", 54, Rarity.UNCOMMON, mage.cards.e.ErhnamDjinn.class)); + cards.add(new SetCardInfo("Fallen Angel", 25, Rarity.RARE, mage.cards.f.FallenAngel.class)); + cards.add(new SetCardInfo("Feral Shadow", 26, Rarity.COMMON, mage.cards.f.FeralShadow.class)); + cards.add(new SetCardInfo("Fireball", 37, Rarity.COMMON, mage.cards.f.Fireball.class)); + cards.add(new SetCardInfo("Fog", 55, Rarity.COMMON, mage.cards.f.Fog.class)); + cards.add(new SetCardInfo("Fog Elemental", 7, Rarity.COMMON, mage.cards.f.FogElemental.class)); + cards.add(new SetCardInfo("Force of Nature", 56, Rarity.RARE, mage.cards.f.ForceOfNature.class)); + cards.add(new SetCardInfo("Forest", 90, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", 89, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", 88, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Gaseous Form", 8, Rarity.COMMON, mage.cards.g.GaseousForm.class)); + cards.add(new SetCardInfo("Giant Crab", 9, Rarity.COMMON, mage.cards.g.GiantCrab.class)); + cards.add(new SetCardInfo("Giant Growth", 57, Rarity.COMMON, mage.cards.g.GiantGrowth.class)); + cards.add(new SetCardInfo("Gravedigger", 27, Rarity.COMMON, mage.cards.g.Gravedigger.class)); + cards.add(new SetCardInfo("Havenwood Battleground", 73, Rarity.UNCOMMON, mage.cards.h.HavenwoodBattleground.class)); + cards.add(new SetCardInfo("Hollow Dogs", 28, Rarity.COMMON, mage.cards.h.HollowDogs.class)); + cards.add(new SetCardInfo("Hulking Cyclops", 38, Rarity.UNCOMMON, mage.cards.h.HulkingCyclops.class)); + cards.add(new SetCardInfo("Impulse", 10, Rarity.COMMON, mage.cards.i.Impulse.class)); + cards.add(new SetCardInfo("Island", 81, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", 80, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", 79, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Killer Whale", 11, Rarity.UNCOMMON, mage.cards.k.KillerWhale.class)); + cards.add(new SetCardInfo("Kird Ape", 39, Rarity.COMMON, mage.cards.k.KirdApe.class)); + cards.add(new SetCardInfo("Lava Axe", 40, Rarity.COMMON, mage.cards.l.LavaAxe.class)); + cards.add(new SetCardInfo("Leviathan", 12, Rarity.RARE, mage.cards.l.Leviathan.class)); + cards.add(new SetCardInfo("Lightning Bolt", 41, Rarity.COMMON, mage.cards.l.LightningBolt.class)); + cards.add(new SetCardInfo("Llanowar Elves", 58, Rarity.COMMON, mage.cards.l.LlanowarElves.class)); + cards.add(new SetCardInfo("Lowland Giant", 42, Rarity.COMMON, mage.cards.l.LowlandGiant.class)); + cards.add(new SetCardInfo("Mahamoti Djinn", 13, Rarity.RARE, mage.cards.m.MahamotiDjinn.class)); + cards.add(new SetCardInfo("Mountain", 87, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", 86, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", 85, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plated Spider", 59, Rarity.COMMON, mage.cards.p.PlatedSpider.class)); + cards.add(new SetCardInfo("Polluted Mire", 74, Rarity.COMMON, mage.cards.p.PollutedMire.class)); + cards.add(new SetCardInfo("Power Sink", 14, Rarity.COMMON, mage.cards.p.PowerSink.class)); + cards.add(new SetCardInfo("Quirion Elves", 60, Rarity.COMMON, mage.cards.q.QuirionElves.class)); + cards.add(new SetCardInfo("Raging Goblin", 43, Rarity.COMMON, mage.cards.r.RagingGoblin.class)); + cards.add(new SetCardInfo("Rampant Growth", 61, Rarity.COMMON, mage.cards.r.RampantGrowth.class)); + cards.add(new SetCardInfo("Remote Isle", 75, Rarity.COMMON, mage.cards.r.RemoteIsle.class)); + cards.add(new SetCardInfo("Scaled Wurm", 62, Rarity.COMMON, mage.cards.s.ScaledWurm.class)); + cards.add(new SetCardInfo("Segmented Wurm", 68, Rarity.UNCOMMON, mage.cards.s.SegmentedWurm.class)); + cards.add(new SetCardInfo("Sengir Vampire", 29, Rarity.UNCOMMON, mage.cards.s.SengirVampire.class)); + cards.add(new SetCardInfo("Shambling Strider", 63, Rarity.COMMON, mage.cards.s.ShamblingStrider.class)); + cards.add(new SetCardInfo("Shivan Dragon", 44, Rarity.RARE, mage.cards.s.ShivanDragon.class)); + cards.add(new SetCardInfo("Shock", 45, Rarity.COMMON, mage.cards.s.Shock.class)); + cards.add(new SetCardInfo("Skittering Horror", 30, Rarity.COMMON, mage.cards.s.SkitteringHorror.class)); + cards.add(new SetCardInfo("Skittering Skirge", 31, Rarity.COMMON, mage.cards.s.SkitteringSkirge.class)); + cards.add(new SetCardInfo("Slippery Karst", 76, Rarity.COMMON, mage.cards.s.SlipperyKarst.class)); + cards.add(new SetCardInfo("Smoldering Crater", 77, Rarity.COMMON, mage.cards.s.SmolderingCrater.class)); + cards.add(new SetCardInfo("Snapping Drake", 15, Rarity.COMMON, mage.cards.s.SnappingDrake.class)); + cards.add(new SetCardInfo("Sonic Burst", 46, Rarity.COMMON, mage.cards.s.SonicBurst.class)); + cards.add(new SetCardInfo("Svyelunite Temple", 78, Rarity.UNCOMMON, mage.cards.s.SvyeluniteTemple.class)); + cards.add(new SetCardInfo("Swamp", 84, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", 83, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", 82, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Talruum Minotaur", 47, Rarity.COMMON, mage.cards.t.TalruumMinotaur.class)); + cards.add(new SetCardInfo("Tar Pit Warrior", 32, Rarity.COMMON, mage.cards.t.TarPitWarrior.class)); + cards.add(new SetCardInfo("Terror", 33, Rarity.COMMON, mage.cards.t.Terror.class)); + cards.add(new SetCardInfo("Thunderbolt", 48, Rarity.COMMON, mage.cards.t.Thunderbolt.class)); + cards.add(new SetCardInfo("Thundering Giant", 49, Rarity.UNCOMMON, mage.cards.t.ThunderingGiant.class)); + cards.add(new SetCardInfo("Tolarian Winds", 16, Rarity.COMMON, mage.cards.t.TolarianWinds.class)); + cards.add(new SetCardInfo("Viashino Warrior", 50, Rarity.COMMON, mage.cards.v.ViashinoWarrior.class)); + cards.add(new SetCardInfo("Vigilant Drake", 17, Rarity.COMMON, mage.cards.v.VigilantDrake.class)); + cards.add(new SetCardInfo("Wayward Soul", 18, Rarity.COMMON, mage.cards.w.WaywardSoul.class)); + cards.add(new SetCardInfo("Wild Growth", 64, Rarity.COMMON, mage.cards.w.WildGrowth.class)); + cards.add(new SetCardInfo("Woolly Spider", 65, Rarity.COMMON, mage.cards.w.WoollySpider.class)); + cards.add(new SetCardInfo("Yavimaya Wurm", 66, Rarity.COMMON, mage.cards.y.YavimayaWurm.class)); + } +} From f696ffb9481845565655d5f0d8ca8d5d0d8cf8b4 Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Thu, 16 Jan 2020 19:44:56 +0100 Subject: [PATCH 023/182] Add the Judge Gift Cards 2001 (G01) set. --- .../src/mage/sets/JudgeGiftCards2001.java | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/JudgeGiftCards2001.java diff --git a/Mage.Sets/src/mage/sets/JudgeGiftCards2001.java b/Mage.Sets/src/mage/sets/JudgeGiftCards2001.java new file mode 100644 index 00000000000..66cbf1c4cf4 --- /dev/null +++ b/Mage.Sets/src/mage/sets/JudgeGiftCards2001.java @@ -0,0 +1,26 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/g01 + */ +public class JudgeGiftCards2001 extends ExpansionSet { + + private static final JudgeGiftCards2001 instance = new JudgeGiftCards2001(); + + public static JudgeGiftCards2001 getInstance() { + return instance; + } + + private JudgeGiftCards2001() { + super("Judge Gift Cards 2001", "G01", ExpansionSet.buildDate(2001, 1, 1), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Ball Lightning", 1, Rarity.RARE, mage.cards.b.BallLightning.class)); + cards.add(new SetCardInfo("Oath of Druids", 2, Rarity.RARE, mage.cards.o.OathOfDruids.class)); + } +} From 1a67d9f91d0424a2ab792380aa97e7ff6b60cc4b Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Thu, 16 Jan 2020 23:23:07 +0100 Subject: [PATCH 024/182] Add all gold-bordered World Championship Decks sets (WC97-WC04). This includes the sets from 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004. --- .../mage/sets/WorldChampionshipDecks1997.java | 145 +++++++++++++++ .../mage/sets/WorldChampionshipDecks1998.java | 131 ++++++++++++++ .../mage/sets/WorldChampionshipDecks1999.java | 124 +++++++++++++ .../mage/sets/WorldChampionshipDecks2000.java | 131 ++++++++++++++ .../mage/sets/WorldChampionshipDecks2001.java | 152 ++++++++++++++++ .../mage/sets/WorldChampionshipDecks2002.java | 167 ++++++++++++++++++ .../mage/sets/WorldChampionshipDecks2003.java | 156 ++++++++++++++++ .../mage/sets/WorldChampionshipDecks2004.java | 117 ++++++++++++ 8 files changed, 1123 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/WorldChampionshipDecks1997.java create mode 100644 Mage.Sets/src/mage/sets/WorldChampionshipDecks1998.java create mode 100644 Mage.Sets/src/mage/sets/WorldChampionshipDecks1999.java create mode 100644 Mage.Sets/src/mage/sets/WorldChampionshipDecks2000.java create mode 100644 Mage.Sets/src/mage/sets/WorldChampionshipDecks2001.java create mode 100644 Mage.Sets/src/mage/sets/WorldChampionshipDecks2002.java create mode 100644 Mage.Sets/src/mage/sets/WorldChampionshipDecks2003.java create mode 100644 Mage.Sets/src/mage/sets/WorldChampionshipDecks2004.java diff --git a/Mage.Sets/src/mage/sets/WorldChampionshipDecks1997.java b/Mage.Sets/src/mage/sets/WorldChampionshipDecks1997.java new file mode 100644 index 00000000000..1a83c8799cd --- /dev/null +++ b/Mage.Sets/src/mage/sets/WorldChampionshipDecks1997.java @@ -0,0 +1,145 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/wc97 + */ +public class WorldChampionshipDecks1997 extends ExpansionSet { + + private static final WorldChampionshipDecks1997 instance = new WorldChampionshipDecks1997(); + + public static WorldChampionshipDecks1997 getInstance() { + return instance; + } + + private WorldChampionshipDecks1997() { + super("World Championship Decks 1997", "WC97", ExpansionSet.buildDate(1997, 8, 13), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = true; + + cards.add(new SetCardInfo("Abduction", "pm30", Rarity.UNCOMMON, mage.cards.a.Abduction.class)); + cards.add(new SetCardInfo("Abeyance", "jk1", Rarity.RARE, mage.cards.a.Abeyance.class)); + cards.add(new SetCardInfo("Black Knight", "js143", Rarity.UNCOMMON, mage.cards.b.BlackKnight.class)); + cards.add(new SetCardInfo("Bounty of the Hunt", "sg85sb", Rarity.UNCOMMON, mage.cards.b.BountyOfTheHunt.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Bounty of the Hunt", "sg85", Rarity.UNCOMMON, mage.cards.b.BountyOfTheHunt.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Choking Sands", "js113", Rarity.COMMON, mage.cards.c.ChokingSands.class)); + cards.add(new SetCardInfo("Circle of Protection: Black", "jk17sb", Rarity.COMMON, mage.cards.c.CircleOfProtectionBlack.class)); + cards.add(new SetCardInfo("Circle of Protection: Red", "jk20sb", Rarity.COMMON, mage.cards.c.CircleOfProtectionRed.class)); + cards.add(new SetCardInfo("City of Brass", "pm413", Rarity.RARE, mage.cards.c.CityOfBrass.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("City of Brass", "js413", Rarity.RARE, mage.cards.c.CityOfBrass.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("City of Brass", "jk413", Rarity.RARE, mage.cards.c.CityOfBrass.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("City of Solitude", "sg102sb", Rarity.RARE, mage.cards.c.CityOfSolitude.class)); + cards.add(new SetCardInfo("Cloud Elemental", "pm29", Rarity.COMMON, mage.cards.c.CloudElemental.class)); + cards.add(new SetCardInfo("Contagion", "js45", Rarity.UNCOMMON, mage.cards.c.Contagion.class)); + cards.add(new SetCardInfo("Counterspell", "pm77", Rarity.COMMON, mage.cards.c.Counterspell.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Counterspell", "jk77", Rarity.COMMON, mage.cards.c.Counterspell.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Crumble", "sg287sb", Rarity.UNCOMMON, mage.cards.c.Crumble.class)); + cards.add(new SetCardInfo("Disenchant", "js26sb", Rarity.COMMON, mage.cards.d.Disenchant.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Disenchant", "jk26sb", Rarity.COMMON, mage.cards.d.Disenchant.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Disenchant", "jk26", Rarity.COMMON, mage.cards.d.Disenchant.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Disintegrate", "pm219", Rarity.COMMON, mage.cards.d.Disintegrate.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Disintegrate", "jk219", Rarity.COMMON, mage.cards.d.Disintegrate.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Disrupt", "pm37a", Rarity.COMMON, mage.cards.d.Disrupt.class)); + cards.add(new SetCardInfo("Dissipate", "pm61sb", Rarity.UNCOMMON, mage.cards.d.Dissipate.class)); + cards.add(new SetCardInfo("Dystopia", "js47sb", Rarity.RARE, mage.cards.d.Dystopia.class)); + cards.add(new SetCardInfo("Earthquake", "js223", Rarity.RARE, mage.cards.e.Earthquake.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Earthquake", "jk223sb", Rarity.RARE, mage.cards.e.Earthquake.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Ebony Charm", "js120sb", Rarity.COMMON, mage.cards.e.EbonyCharm.class)); + cards.add(new SetCardInfo("Emerald Charm", "sg106sb", Rarity.COMMON, mage.cards.e.EmeraldCharm.class)); + cards.add(new SetCardInfo("Exile", "js3sb", Rarity.RARE, mage.cards.e.Exile.class)); + cards.add(new SetCardInfo("Fallen Askari", "js59", Rarity.COMMON, mage.cards.f.FallenAskari.class)); + cards.add(new SetCardInfo("Force of Will", "pm28", Rarity.UNCOMMON, mage.cards.f.ForceOfWill.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Force of Will", "jk28", Rarity.UNCOMMON, mage.cards.f.ForceOfWill.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", "sg449", Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", "sg448", Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", "sg447", Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", "sg446", Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forsaken Wastes", "js125sb", Rarity.RARE, mage.cards.f.ForsakenWastes.class)); + cards.add(new SetCardInfo("Frenetic Efreet", "pm264", Rarity.RARE, mage.cards.f.FreneticEfreet.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Frenetic Efreet", "jk264", Rarity.RARE, mage.cards.f.FreneticEfreet.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Fyndhorn Elves", "sg244", Rarity.COMMON, mage.cards.f.FyndhornElves.class)); + cards.add(new SetCardInfo("Gemstone Mine", "js164", Rarity.UNCOMMON, mage.cards.g.GemstoneMine.class)); + cards.add(new SetCardInfo("Ghazbán Ogre", "sg298", Rarity.COMMON, mage.cards.g.GhazbanOgre.class)); + cards.add(new SetCardInfo("Giant Growth", "sg299", Rarity.COMMON, mage.cards.g.GiantGrowth.class)); + cards.add(new SetCardInfo("Hammer of Bogardan", "jk181", Rarity.RARE, mage.cards.h.HammerOfBogardan.class)); + cards.add(new SetCardInfo("Harvest Wurm", "sg130", Rarity.COMMON, mage.cards.h.HarvestWurm.class)); + cards.add(new SetCardInfo("Heart of Yavimaya", "sg138", Rarity.RARE, mage.cards.h.HeartOfYavimaya.class)); + cards.add(new SetCardInfo("Honorable Passage", "js7sb", Rarity.UNCOMMON, mage.cards.h.HonorablePassage.class)); + cards.add(new SetCardInfo("Hydroblast", "pm94sb", Rarity.UNCOMMON, mage.cards.h.Hydroblast.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Hydroblast", "js94sb", Rarity.UNCOMMON, mage.cards.h.Hydroblast.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Impulse", "jk34", Rarity.COMMON, mage.cards.i.Impulse.class)); + cards.add(new SetCardInfo("Incinerate", "pm242", Rarity.COMMON, mage.cards.i.Incinerate.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Incinerate", "js242", Rarity.COMMON, mage.cards.i.Incinerate.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Incinerate", "jk242", Rarity.COMMON, mage.cards.i.Incinerate.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", "pm437", Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", "jk437", Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", "pm436", Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", "jk436", Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", "pm435", Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", "jk435", Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", "pm434", Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", "jk434", Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Jolrael's Centaur", "sg222", Rarity.COMMON, mage.cards.j.JolraelsCentaur.class)); + cards.add(new SetCardInfo("Kjeldoran Outpost", "jk139sb", Rarity.RARE, mage.cards.k.KjeldoranOutpost.class)); + cards.add(new SetCardInfo("Knight of Stromgald", "js171", Rarity.UNCOMMON, mage.cards.k.KnightOfStromgald.class)); + cards.add(new SetCardInfo("Knight of the Mists", "pm36sb", Rarity.COMMON, mage.cards.k.KnightOfTheMists.class)); + cards.add(new SetCardInfo("Lhurgoyf", "sg309", Rarity.RARE, mage.cards.l.Lhurgoyf.class)); + cards.add(new SetCardInfo("Man-o'-War", "pm37b", Rarity.COMMON, mage.cards.m.ManOWar.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Man-o'-War", "js37", Rarity.COMMON, mage.cards.m.ManOWar.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mind Stone", "pm153", Rarity.COMMON, mage.cards.m.MindStone.class)); + cards.add(new SetCardInfo("Mountain", "pm445", Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", "jk445", Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", "pm444", Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", "jk444", Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", "pm443", Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", "jk443", Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", "pm442", Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", "jk442", Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Necratog", "js76", Rarity.UNCOMMON, mage.cards.n.Necratog.class)); + cards.add(new SetCardInfo("Nekrataal", "js66", Rarity.UNCOMMON, mage.cards.n.Nekrataal.class)); + cards.add(new SetCardInfo("Nevinyrral's Disk", "pm391sb", Rarity.RARE, mage.cards.n.NevinyrralsDisk.class)); + cards.add(new SetCardInfo("Ophidian", "pm45", Rarity.COMMON, mage.cards.o.Ophidian.class)); + cards.add(new SetCardInfo("Phyrexian Furnace", "pm155sb", Rarity.UNCOMMON, mage.cards.p.PhyrexianFurnace.class)); + cards.add(new SetCardInfo("Pillage", "pm76sb", Rarity.UNCOMMON, mage.cards.p.Pillage.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Pillage", "jk76", Rarity.UNCOMMON, mage.cards.p.Pillage.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", "jk433", Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", "jk432", Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", "jk431", Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", "jk430", Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Political Trickery", "jk81sb", Rarity.RARE, mage.cards.p.PoliticalTrickery.class)); + cards.add(new SetCardInfo("Pyroblast", "pm262sb", Rarity.UNCOMMON, mage.cards.p.Pyroblast.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Pyroblast", "js262sb", Rarity.UNCOMMON, mage.cards.p.Pyroblast.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Pyroblast", "jk262sb", Rarity.UNCOMMON, mage.cards.p.Pyroblast.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Pyrokinesis", "pm78sb", Rarity.UNCOMMON, mage.cards.p.Pyrokinesis.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Pyrokinesis", "pm78", Rarity.UNCOMMON, mage.cards.p.Pyrokinesis.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Quirion Ranger", "sg117", Rarity.COMMON, mage.cards.q.QuirionRanger.class)); + cards.add(new SetCardInfo("River Boa", "sg118sb", Rarity.COMMON, mage.cards.r.RiverBoa.class)); + cards.add(new SetCardInfo("Rogue Elephant", "sg139", Rarity.COMMON, mage.cards.r.RogueElephant.class)); + cards.add(new SetCardInfo("Serrated Arrows", "pm110sb", Rarity.COMMON, mage.cards.s.SerratedArrows.class)); + cards.add(new SetCardInfo("Shadow Guildmage", "js140", Rarity.COMMON, mage.cards.s.ShadowGuildmage.class)); + cards.add(new SetCardInfo("Spectral Bears", "sg98", Rarity.UNCOMMON, mage.cards.s.SpectralBears.class)); + cards.add(new SetCardInfo("Sulfurous Springs", "js424", Rarity.RARE, mage.cards.s.SulfurousSprings.class)); + cards.add(new SetCardInfo("Suq'Ata Lancer", "pm96", Rarity.COMMON, mage.cards.s.SuqAtaLancer.class)); + cards.add(new SetCardInfo("Swamp", "js441", Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", "js440", Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", "js439", Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", "js438", Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swords to Plowshares", "jk54", Rarity.UNCOMMON, mage.cards.s.SwordsToPlowshares.class)); + cards.add(new SetCardInfo("Thawing Glaciers", "jk144", Rarity.RARE, mage.cards.t.ThawingGlaciers.class)); + cards.add(new SetCardInfo("Uktabi Orangutan", "sg123sb", Rarity.UNCOMMON, mage.cards.u.UktabiOrangutan.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Uktabi Orangutan", "sg123", Rarity.UNCOMMON, mage.cards.u.UktabiOrangutan.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Uktabi Orangutan", "js123", Rarity.UNCOMMON, mage.cards.u.UktabiOrangutan.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Underground River", "js426", Rarity.RARE, mage.cards.u.UndergroundRiver.class)); + cards.add(new SetCardInfo("Undiscovered Paradise", "pm167", Rarity.RARE, mage.cards.u.UndiscoveredParadise.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Undiscovered Paradise", "js167", Rarity.RARE, mage.cards.u.UndiscoveredParadise.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Undiscovered Paradise", "jk167", Rarity.RARE, mage.cards.u.UndiscoveredParadise.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Whirling Dervish", "sg341sb", Rarity.UNCOMMON, mage.cards.w.WhirlingDervish.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Whirling Dervish", "sg341", Rarity.UNCOMMON, mage.cards.w.WhirlingDervish.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Wildfire Emissary", "pm203", Rarity.UNCOMMON, mage.cards.w.WildfireEmissary.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Wildfire Emissary", "jk203", Rarity.UNCOMMON, mage.cards.w.WildfireEmissary.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Winter Orb", "sg408", Rarity.RARE, mage.cards.w.WinterOrb.class)); + } +} diff --git a/Mage.Sets/src/mage/sets/WorldChampionshipDecks1998.java b/Mage.Sets/src/mage/sets/WorldChampionshipDecks1998.java new file mode 100644 index 00000000000..071fd53926a --- /dev/null +++ b/Mage.Sets/src/mage/sets/WorldChampionshipDecks1998.java @@ -0,0 +1,131 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/wc98 + */ +public class WorldChampionshipDecks1998 extends ExpansionSet { + + private static final WorldChampionshipDecks1998 instance = new WorldChampionshipDecks1998(); + + public static WorldChampionshipDecks1998 getInstance() { + return instance; + } + + private WorldChampionshipDecks1998() { + super("World Championship Decks 1998", "WC98", ExpansionSet.buildDate(1998, 8, 12), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = true; + + cards.add(new SetCardInfo("Abeyance", "bh1sb", Rarity.RARE, mage.cards.a.Abeyance.class)); + cards.add(new SetCardInfo("Armageddon", "bh7sba", Rarity.RARE, mage.cards.a.Armageddon.class)); + cards.add(new SetCardInfo("Aura of Silence", "bh7sbb", Rarity.UNCOMMON, mage.cards.a.AuraOfSilence.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Aura of Silence", "bh7b", Rarity.UNCOMMON, mage.cards.a.AuraOfSilence.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Ball Lightning", "br210", Rarity.RARE, mage.cards.b.BallLightning.class)); + cards.add(new SetCardInfo("Birds of Paradise", "bs280", Rarity.RARE, mage.cards.b.BirdsOfParadise.class)); + cards.add(new SetCardInfo("Boil", "bs165sb", Rarity.UNCOMMON, mage.cards.b.Boil.class)); + cards.add(new SetCardInfo("Bottle Gnomes", "br278sb", Rarity.UNCOMMON, mage.cards.b.BottleGnomes.class)); + cards.add(new SetCardInfo("Capsize", "rb55sb", Rarity.COMMON, mage.cards.c.Capsize.class)); + cards.add(new SetCardInfo("Cataclysm", "bh3", Rarity.RARE, mage.cards.c.Cataclysm.class)); + cards.add(new SetCardInfo("City of Brass", "bs112a", Rarity.RARE, mage.cards.c.CityOfBrass.class)); + cards.add(new SetCardInfo("Cloudchaser Eagle", "bs15", Rarity.COMMON, mage.cards.c.CloudchaserEagle.class)); + cards.add(new SetCardInfo("Counterspell", "rb57", Rarity.COMMON, mage.cards.c.Counterspell.class)); + cards.add(new SetCardInfo("Cursed Scroll", "br281", Rarity.RARE, mage.cards.c.CursedScroll.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Cursed Scroll", "bh281sb", Rarity.RARE, mage.cards.c.CursedScroll.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Disenchant", "bh16sb", Rarity.COMMON, mage.cards.d.Disenchant.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Disenchant", "bh16", Rarity.COMMON, mage.cards.d.Disenchant.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Dismiss", "rb58a", Rarity.UNCOMMON, mage.cards.d.Dismiss.class)); + cards.add(new SetCardInfo("Dissipate", "rb61", Rarity.UNCOMMON, mage.cards.d.Dissipate.class)); + cards.add(new SetCardInfo("Dread of Night", "bs130sb", Rarity.UNCOMMON, mage.cards.d.DreadOfNight.class)); + cards.add(new SetCardInfo("Dwarven Miner", "br169sb", Rarity.UNCOMMON, mage.cards.d.DwarvenMiner.class)); + cards.add(new SetCardInfo("Dwarven Thaumaturgist", "br98sba", Rarity.RARE, mage.cards.d.DwarvenThaumaturgist.class)); + cards.add(new SetCardInfo("Emerald Charm", "bs106sb", Rarity.COMMON, mage.cards.e.EmeraldCharm.class)); + cards.add(new SetCardInfo("Empyrial Armor", "bh13", Rarity.COMMON, mage.cards.e.EmpyrialArmor.class)); + cards.add(new SetCardInfo("Final Fortune", "br174sb", Rarity.RARE, mage.cards.f.FinalFortune.class)); + cards.add(new SetCardInfo("Fireblast", "br79", Rarity.COMMON, mage.cards.f.Fireblast.class)); + cards.add(new SetCardInfo("Firestorm", "bs101", Rarity.RARE, mage.cards.f.Firestorm.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Firestorm", "br101sb", Rarity.RARE, mage.cards.f.Firestorm.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forbid", "rb35", Rarity.UNCOMMON, mage.cards.f.Forbid.class)); + cards.add(new SetCardInfo("Force Spike", "rb58b", Rarity.COMMON, mage.cards.f.ForceSpike.class)); + cards.add(new SetCardInfo("Forest", "bs350", Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", "bs349", Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", "bs348", Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", "bs347", Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Gemstone Mine", "bs164", Rarity.UNCOMMON, mage.cards.g.GemstoneMine.class)); + cards.add(new SetCardInfo("Goblin Vandal", "br105", Rarity.COMMON, mage.cards.g.GoblinVandal.class)); + cards.add(new SetCardInfo("Grindstone", "rb290sb", Rarity.RARE, mage.cards.g.Grindstone.class)); + cards.add(new SetCardInfo("Hall of Gemstone", "bs221sb", Rarity.RARE, mage.cards.h.HallOfGemstone.class)); + cards.add(new SetCardInfo("Hammer of Bogardan", "br181", Rarity.RARE, mage.cards.h.HammerOfBogardan.class)); + cards.add(new SetCardInfo("Hydroblast", "rb72sb", Rarity.COMMON, mage.cards.h.Hydroblast.class)); + cards.add(new SetCardInfo("Impulse", "rb34", Rarity.COMMON, mage.cards.i.Impulse.class)); + cards.add(new SetCardInfo("Incinerate", "br184", Rarity.COMMON, mage.cards.i.Incinerate.class)); + cards.add(new SetCardInfo("Ironclaw Orcs", "br245", Rarity.COMMON, mage.cards.i.IronclawOrcs.class)); + cards.add(new SetCardInfo("Island", "rb338", Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", "rb337", Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", "rb336", Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", "rb335", Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Jackal Pup", "br183", Rarity.UNCOMMON, mage.cards.j.JackalPup.class)); + cards.add(new SetCardInfo("Karplusan Forest", "bs356sb", Rarity.RARE, mage.cards.k.KarplusanForest.class)); + cards.add(new SetCardInfo("Lobotomy", "bs267", Rarity.UNCOMMON, mage.cards.l.Lobotomy.class)); + cards.add(new SetCardInfo("Man-o'-War", "bs37", Rarity.COMMON, mage.cards.m.ManOWar.class)); + cards.add(new SetCardInfo("Mana Leak", "rb36", Rarity.COMMON, mage.cards.m.ManaLeak.class)); + cards.add(new SetCardInfo("Memory Lapse", "rb32", Rarity.COMMON, mage.cards.m.MemoryLapse.class)); + cards.add(new SetCardInfo("Mogg Fanatic", "br190", Rarity.COMMON, mage.cards.m.MoggFanatic.class)); + cards.add(new SetCardInfo("Mogg Flunkies", "br92", Rarity.COMMON, mage.cards.m.MoggFlunkies.class)); + cards.add(new SetCardInfo("Mountain", "br346", Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", "br345", Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", "br344", Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", "br343", Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Nekrataal", "bs66", Rarity.UNCOMMON, mage.cards.n.Nekrataal.class)); + cards.add(new SetCardInfo("Nevinyrral's Disk", "rb391", Rarity.RARE, mage.cards.n.NevinyrralsDisk.class)); + cards.add(new SetCardInfo("Nomads en-Kor", "bh9", Rarity.COMMON, mage.cards.n.NomadsEnKor.class)); + cards.add(new SetCardInfo("Orcish Settlers", "bs112b", Rarity.UNCOMMON, mage.cards.o.OrcishSettlers.class)); + cards.add(new SetCardInfo("Paladin en-Vec", "bh12", Rarity.RARE, mage.cards.p.PaladinEnVec.class)); + cards.add(new SetCardInfo("Phyrexian Furnace", "bs155sb", Rarity.UNCOMMON, mage.cards.p.PhyrexianFurnace.class)); + cards.add(new SetCardInfo("Plains", "bh334", Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", "bh333", Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", "bh332", Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", "bh331", Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Pyroblast", "bs213sb", Rarity.COMMON, mage.cards.p.Pyroblast.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Pyroblast", "br213sb", Rarity.COMMON, mage.cards.p.Pyroblast.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Quicksand", "rb166", Rarity.UNCOMMON, mage.cards.q.Quicksand.class)); + cards.add(new SetCardInfo("Rainbow Efreet", "rb41", Rarity.RARE, mage.cards.r.RainbowEfreet.class)); + cards.add(new SetCardInfo("Recurring Nightmare", "bs72", Rarity.RARE, mage.cards.r.RecurringNightmare.class)); + cards.add(new SetCardInfo("Reflecting Pool", "bs322", Rarity.RARE, mage.cards.r.ReflectingPool.class)); + cards.add(new SetCardInfo("Scroll Rack", "bs308", Rarity.RARE, mage.cards.s.ScrollRack.class)); + cards.add(new SetCardInfo("Sea Sprite", "rb38sb", Rarity.UNCOMMON, mage.cards.s.SeaSprite.class)); + cards.add(new SetCardInfo("Shattering Pulse", "br102sb", Rarity.COMMON, mage.cards.s.ShatteringPulse.class)); + cards.add(new SetCardInfo("Shock", "br98b", Rarity.COMMON, mage.cards.s.Shock.class)); + cards.add(new SetCardInfo("Soltari Monk", "bh45", Rarity.UNCOMMON, mage.cards.s.SoltariMonk.class)); + cards.add(new SetCardInfo("Soltari Priest", "bh46", Rarity.UNCOMMON, mage.cards.s.SoltariPriest.class)); + cards.add(new SetCardInfo("Soltari Visionary", "bh20", Rarity.COMMON, mage.cards.s.SoltariVisionary.class)); + cards.add(new SetCardInfo("Soul Warden", "bh21", Rarity.COMMON, mage.cards.s.SoulWarden.class)); + cards.add(new SetCardInfo("Spike Feeder", "bs118", Rarity.UNCOMMON, mage.cards.s.SpikeFeeder.class)); + cards.add(new SetCardInfo("Spike Weaver", "bs128", Rarity.RARE, mage.cards.s.SpikeWeaver.class)); + cards.add(new SetCardInfo("Spirit Link", "bh64sb", Rarity.UNCOMMON, mage.cards.s.SpiritLink.class)); + cards.add(new SetCardInfo("Spirit of the Night", "bs146", Rarity.RARE, mage.cards.s.SpiritOfTheNight.class)); + cards.add(new SetCardInfo("Stalking Stones", "rb327", Rarity.UNCOMMON, mage.cards.s.StalkingStones.class)); + cards.add(new SetCardInfo("Staunch Defenders", "bs49sb", Rarity.UNCOMMON, mage.cards.s.StaunchDefenders.class)); + cards.add(new SetCardInfo("Survival of the Fittest", "bs129", Rarity.RARE, mage.cards.s.SurvivalOfTheFittest.class)); + cards.add(new SetCardInfo("Swamp", "bs340", Rarity.LAND, mage.cards.basiclands.Swamp.class)); + cards.add(new SetCardInfo("Thrull Surgeon", "bs76", Rarity.COMMON, mage.cards.t.ThrullSurgeon.class)); + cards.add(new SetCardInfo("Tithe", "bh23a", Rarity.RARE, mage.cards.t.Tithe.class)); + cards.add(new SetCardInfo("Tradewind Rider", "bs98", Rarity.RARE, mage.cards.t.TradewindRider.class)); + cards.add(new SetCardInfo("Uktabi Orangutan", "bs123", Rarity.UNCOMMON, mage.cards.u.UktabiOrangutan.class)); + cards.add(new SetCardInfo("Underground River", "bs362", Rarity.RARE, mage.cards.u.UndergroundRiver.class)); + cards.add(new SetCardInfo("Undiscovered Paradise", "bs167", Rarity.RARE, mage.cards.u.UndiscoveredParadise.class)); + cards.add(new SetCardInfo("Verdant Force", "bs263", Rarity.RARE, mage.cards.v.VerdantForce.class)); + cards.add(new SetCardInfo("Viashino Sandstalker", "br100", Rarity.UNCOMMON, mage.cards.v.ViashinoSandstalker.class)); + cards.add(new SetCardInfo("Volrath's Stronghold", "bs143", Rarity.RARE, mage.cards.v.VolrathsStronghold.class)); + cards.add(new SetCardInfo("Wall of Blossoms", "bs125", Rarity.UNCOMMON, mage.cards.w.WallOfBlossoms.class)); + cards.add(new SetCardInfo("Wall of Roots", "bs253", Rarity.COMMON, mage.cards.w.WallOfRoots.class)); + cards.add(new SetCardInfo("Warrior en-Kor", "bh23b", Rarity.UNCOMMON, mage.cards.w.WarriorEnKor.class)); + cards.add(new SetCardInfo("Wasteland", "rb330sb", Rarity.UNCOMMON, mage.cards.w.Wasteland.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Wasteland", "br330", Rarity.UNCOMMON, mage.cards.w.Wasteland.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Whispers of the Muse", "rb103", Rarity.UNCOMMON, mage.cards.w.WhispersOfTheMuse.class)); + cards.add(new SetCardInfo("White Knight", "bh68", Rarity.UNCOMMON, mage.cards.w.WhiteKnight.class)); + } +} diff --git a/Mage.Sets/src/mage/sets/WorldChampionshipDecks1999.java b/Mage.Sets/src/mage/sets/WorldChampionshipDecks1999.java new file mode 100644 index 00000000000..6dcc0221d2e --- /dev/null +++ b/Mage.Sets/src/mage/sets/WorldChampionshipDecks1999.java @@ -0,0 +1,124 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/wc99 + */ +public class WorldChampionshipDecks1999 extends ExpansionSet { + + private static final WorldChampionshipDecks1999 instance = new WorldChampionshipDecks1999(); + + public static WorldChampionshipDecks1999 getInstance() { + return instance; + } + + private WorldChampionshipDecks1999() { + super("World Championship Decks 1999", "WC99", ExpansionSet.buildDate(1999, 8, 4), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = true; + + cards.add(new SetCardInfo("Albino Troll", "ml231", Rarity.UNCOMMON, mage.cards.a.AlbinoTroll.class)); + cards.add(new SetCardInfo("Ancient Tomb", "mlp315", Rarity.UNCOMMON, mage.cards.a.AncientTomb.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Ancient Tomb", "kb315", Rarity.UNCOMMON, mage.cards.a.AncientTomb.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Arc Lightning", "mlp174sb", Rarity.COMMON, mage.cards.a.ArcLightning.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Arc Lightning", "mlp174", Rarity.COMMON, mage.cards.a.ArcLightning.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Avalanche Riders", "mlp74", Rarity.UNCOMMON, mage.cards.a.AvalancheRiders.class)); + cards.add(new SetCardInfo("Boil", "kb165sb", Rarity.UNCOMMON, mage.cards.b.Boil.class)); + cards.add(new SetCardInfo("Bottle Gnomes", "js278sb", Rarity.UNCOMMON, mage.cards.b.BottleGnomes.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Bottle Gnomes", "js278", Rarity.UNCOMMON, mage.cards.b.BottleGnomes.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Carrion Beetles", "js122sb", Rarity.COMMON, mage.cards.c.CarrionBeetles.class)); + cards.add(new SetCardInfo("Choke", "ml219sb", Rarity.UNCOMMON, mage.cards.c.Choke.class)); + cards.add(new SetCardInfo("City of Traitors", "kb143a", Rarity.RARE, mage.cards.c.CityOfTraitors.class)); + cards.add(new SetCardInfo("Constant Mists", "ml104sb", Rarity.UNCOMMON, mage.cards.c.ConstantMists.class)); + cards.add(new SetCardInfo("Corpse Dance", "js116", Rarity.RARE, mage.cards.c.CorpseDance.class)); + cards.add(new SetCardInfo("Covetous Dragon", "kb80", Rarity.RARE, mage.cards.c.CovetousDragon.class)); + cards.add(new SetCardInfo("Cursed Scroll", "mlp281", Rarity.RARE, mage.cards.c.CursedScroll.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Cursed Scroll", "ml281", Rarity.RARE, mage.cards.c.CursedScroll.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Cursed Scroll", "kb281", Rarity.RARE, mage.cards.c.CursedScroll.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Cursed Scroll", "js281", Rarity.RARE, mage.cards.c.CursedScroll.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Dark Ritual", "js127", Rarity.COMMON, mage.cards.d.DarkRitual.class)); + cards.add(new SetCardInfo("Diabolic Edict", "js128", Rarity.COMMON, mage.cards.d.DiabolicEdict.class)); + cards.add(new SetCardInfo("Duress", "js132", Rarity.COMMON, mage.cards.d.Duress.class)); + cards.add(new SetCardInfo("Earthquake", "kb173sb", Rarity.RARE, mage.cards.e.Earthquake.class)); + cards.add(new SetCardInfo("Elvish Lyrist", "ml248", Rarity.COMMON, mage.cards.e.ElvishLyrist.class)); + cards.add(new SetCardInfo("Evincar's Justice", "js134sb", Rarity.COMMON, mage.cards.e.EvincarsJustice.class)); + cards.add(new SetCardInfo("Fire Diamond", "kb284", Rarity.UNCOMMON, mage.cards.f.FireDiamond.class)); + cards.add(new SetCardInfo("Fireslinger", "mlp173sb", Rarity.COMMON, mage.cards.f.Fireslinger.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Fireslinger", "mlp173", Rarity.COMMON, mage.cards.f.Fireslinger.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Flowstone Flood", "mlp83sb", Rarity.UNCOMMON, mage.cards.f.FlowstoneFlood.class)); + cards.add(new SetCardInfo("Forest", "ml349", Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", "ml347b", Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", "ml347a", Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Gaea's Cradle", "ml321", Rarity.RARE, mage.cards.g.GaeasCradle.class)); + cards.add(new SetCardInfo("Ghitu Encampment", "mlp141", Rarity.UNCOMMON, mage.cards.g.GhituEncampment.class)); + cards.add(new SetCardInfo("Giant Growth", "ml233", Rarity.COMMON, mage.cards.g.GiantGrowth.class)); + cards.add(new SetCardInfo("Grim Monolith", "kb126", Rarity.RARE, mage.cards.g.GrimMonolith.class)); + cards.add(new SetCardInfo("Hammer of Bogardan", "mlp188", Rarity.RARE, mage.cards.h.HammerOfBogardan.class)); + cards.add(new SetCardInfo("Hatred", "js64sb", Rarity.RARE, mage.cards.h.Hatred.class)); + cards.add(new SetCardInfo("Hurricane", "ml237sb", Rarity.RARE, mage.cards.h.Hurricane.class)); + cards.add(new SetCardInfo("Jackal Pup", "mlp183", Rarity.UNCOMMON, mage.cards.j.JackalPup.class)); + cards.add(new SetCardInfo("Karn, Silver Golem", "kb298", Rarity.RARE, mage.cards.k.KarnSilverGolem.class)); + cards.add(new SetCardInfo("Llanowar Elves", "ml239", Rarity.COMMON, mage.cards.l.LlanowarElves.class)); + cards.add(new SetCardInfo("Masticore", "kb143b", Rarity.RARE, mage.cards.m.Masticore.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Masticore", "mlp134sb", Rarity.RARE, mage.cards.m.Masticore.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mishra's Helix", "kb302sb", Rarity.RARE, mage.cards.m.MishrasHelix.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mishra's Helix", "kb302", Rarity.RARE, mage.cards.m.MishrasHelix.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mogg Fanatic", "mlp190", Rarity.COMMON, mage.cards.m.MoggFanatic.class)); + cards.add(new SetCardInfo("Mountain", "mlp346b", Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", "mlp346a", Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", "kb346", Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", "mlp344", Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", "kb344", Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", "kb343", Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Overrun", "ml243sb", Rarity.UNCOMMON, mage.cards.o.Overrun.class)); + cards.add(new SetCardInfo("Perish", "js147sb", Rarity.UNCOMMON, mage.cards.p.Perish.class)); + cards.add(new SetCardInfo("Persecute", "js146sb", Rarity.RARE, mage.cards.p.Persecute.class)); + cards.add(new SetCardInfo("Phyrexian Negator", "js65sb", Rarity.RARE, mage.cards.p.PhyrexianNegator.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Phyrexian Negator", "js65", Rarity.RARE, mage.cards.p.PhyrexianNegator.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Phyrexian Plaguelord", "js62", Rarity.RARE, mage.cards.p.PhyrexianPlaguelord.class)); + cards.add(new SetCardInfo("Phyrexian Processor", "kb306sb", Rarity.RARE, mage.cards.p.PhyrexianProcessor.class)); + cards.add(new SetCardInfo("Pillage", "mlp198", Rarity.UNCOMMON, mage.cards.p.Pillage.class)); + cards.add(new SetCardInfo("Pouncing Jaguar", "ml269", Rarity.COMMON, mage.cards.p.PouncingJaguar.class)); + cards.add(new SetCardInfo("Powder Keg", "js136a", Rarity.RARE, mage.cards.p.PowderKeg.class)); + cards.add(new SetCardInfo("Rack and Ruin", "kb89sb", Rarity.UNCOMMON, mage.cards.r.RackAndRuin.class)); + cards.add(new SetCardInfo("Rancor", "ml110", Rarity.COMMON, mage.cards.r.Rancor.class)); + cards.add(new SetCardInfo("Rapid Decay", "js67sb", Rarity.RARE, mage.cards.r.RapidDecay.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Rapid Decay", "js67", Rarity.RARE, mage.cards.r.RapidDecay.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Ravenous Rats", "js68", Rarity.COMMON, mage.cards.r.RavenousRats.class)); + cards.add(new SetCardInfo("River Boa", "ml249", Rarity.UNCOMMON, mage.cards.r.RiverBoa.class)); + cards.add(new SetCardInfo("Scald", "mlp211sb", Rarity.UNCOMMON, mage.cards.s.Scald.class)); + cards.add(new SetCardInfo("Shattering Pulse", "mlp102sb", Rarity.COMMON, mage.cards.s.ShatteringPulse.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Shattering Pulse", "kb102sb", Rarity.COMMON, mage.cards.s.ShatteringPulse.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Shock", "mlp98", Rarity.COMMON, mage.cards.s.Shock.class)); + cards.add(new SetCardInfo("Spawning Pool", "js142", Rarity.UNCOMMON, mage.cards.s.SpawningPool.class)); + cards.add(new SetCardInfo("Spellshock", "kb104sb", Rarity.UNCOMMON, mage.cards.s.Spellshock.class)); + cards.add(new SetCardInfo("Sphere of Resistance", "js139sb", Rarity.RARE, mage.cards.s.SphereOfResistance.class)); + cards.add(new SetCardInfo("Stone Rain", "mlp209", Rarity.COMMON, mage.cards.s.StoneRain.class)); + cards.add(new SetCardInfo("Stromgald Cabal", "js157sb", Rarity.RARE, mage.cards.s.StromgaldCabal.class)); + cards.add(new SetCardInfo("Stupor", "js158", Rarity.UNCOMMON, mage.cards.s.Stupor.class)); + cards.add(new SetCardInfo("Swamp", "js340b", Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", "js340a", Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", "js339", Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Temporal Aperture", "kb310", Rarity.RARE, mage.cards.t.TemporalAperture.class)); + cards.add(new SetCardInfo("Thran Dynamo", "kb139", Rarity.UNCOMMON, mage.cards.t.ThranDynamo.class)); + cards.add(new SetCardInfo("Thran Foundry", "mlp140sb", Rarity.UNCOMMON, mage.cards.t.ThranFoundry.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Thran Foundry", "ml140sb", Rarity.UNCOMMON, mage.cards.t.ThranFoundry.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Ticking Gnomes", "js136b", Rarity.UNCOMMON, mage.cards.t.TickingGnomes.class)); + cards.add(new SetCardInfo("Treetop Village", "ml143", Rarity.UNCOMMON, mage.cards.t.TreetopVillage.class)); + cards.add(new SetCardInfo("Uktabi Orangutan", "ml260sb", Rarity.UNCOMMON, mage.cards.u.UktabiOrangutan.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Uktabi Orangutan", "ml260", Rarity.UNCOMMON, mage.cards.u.UktabiOrangutan.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Vampiric Tutor", "js161", Rarity.RARE, mage.cards.v.VampiricTutor.class)); + cards.add(new SetCardInfo("Volrath's Stronghold", "js143", Rarity.RARE, mage.cards.v.VolrathsStronghold.class)); + cards.add(new SetCardInfo("Voltaic Key", "kb314", Rarity.UNCOMMON, mage.cards.v.VoltaicKey.class)); + cards.add(new SetCardInfo("Wasteland", "mlp330", Rarity.UNCOMMON, mage.cards.w.Wasteland.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Wasteland", "js330", Rarity.UNCOMMON, mage.cards.w.Wasteland.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Weatherseed Treefolk", "ml116sb", Rarity.RARE, mage.cards.w.WeatherseedTreefolk.class)); + cards.add(new SetCardInfo("Wild Dogs", "ml284", Rarity.COMMON, mage.cards.w.WildDogs.class)); + cards.add(new SetCardInfo("Wildfire", "kb228", Rarity.RARE, mage.cards.w.Wildfire.class)); + cards.add(new SetCardInfo("Worn Powerstone", "kb318", Rarity.UNCOMMON, mage.cards.w.WornPowerstone.class)); + cards.add(new SetCardInfo("Yawgmoth's Will", "js171", Rarity.RARE, mage.cards.y.YawgmothsWill.class)); + } +} diff --git a/Mage.Sets/src/mage/sets/WorldChampionshipDecks2000.java b/Mage.Sets/src/mage/sets/WorldChampionshipDecks2000.java new file mode 100644 index 00000000000..03f9859ff17 --- /dev/null +++ b/Mage.Sets/src/mage/sets/WorldChampionshipDecks2000.java @@ -0,0 +1,131 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/wc00 + */ +public class WorldChampionshipDecks2000 extends ExpansionSet { + + private static final WorldChampionshipDecks2000 instance = new WorldChampionshipDecks2000(); + + public static WorldChampionshipDecks2000 getInstance() { + return instance; + } + + private WorldChampionshipDecks2000() { + super("World Championship Decks 2000", "WC00", ExpansionSet.buildDate(2000, 8, 2), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = true; + + cards.add(new SetCardInfo("Absolute Law", "nl2sba", Rarity.UNCOMMON, mage.cards.a.AbsoluteLaw.class)); + cards.add(new SetCardInfo("Academy Rector", "nl1", Rarity.RARE, mage.cards.a.AcademyRector.class)); + cards.add(new SetCardInfo("Adarkar Wastes", "tvdl319", Rarity.RARE, mage.cards.a.AdarkarWastes.class)); + cards.add(new SetCardInfo("Annul", "jf59sb", Rarity.COMMON, mage.cards.a.Annul.class)); + cards.add(new SetCardInfo("Arc Lightning", "jk174", Rarity.COMMON, mage.cards.a.ArcLightning.class)); + cards.add(new SetCardInfo("Armageddon", "nl4sb", Rarity.RARE, mage.cards.a.Armageddon.class)); + cards.add(new SetCardInfo("Ashnod's Altar", "nl274", Rarity.UNCOMMON, mage.cards.a.AshnodsAltar.class)); + cards.add(new SetCardInfo("Attunement", "tvdl61", Rarity.RARE, mage.cards.a.Attunement.class)); + cards.add(new SetCardInfo("Aura Fracture", "nl2sbb", Rarity.COMMON, mage.cards.a.AuraFracture.class)); + cards.add(new SetCardInfo("Avalanche Riders", "jk74", Rarity.UNCOMMON, mage.cards.a.AvalancheRiders.class)); + cards.add(new SetCardInfo("Birds of Paradise", "nl217", Rarity.RARE, mage.cards.b.BirdsOfParadise.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Birds of Paradise", "jk217", Rarity.RARE, mage.cards.b.BirdsOfParadise.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Blastoderm", "jk102", Rarity.COMMON, mage.cards.b.Blastoderm.class)); + cards.add(new SetCardInfo("Blaze", "nl168sb", Rarity.UNCOMMON, mage.cards.b.Blaze.class)); + cards.add(new SetCardInfo("Boil", "jk169sb", Rarity.UNCOMMON, mage.cards.b.Boil.class)); + cards.add(new SetCardInfo("Brainstorm", "jf61", Rarity.COMMON, mage.cards.b.Brainstorm.class)); + cards.add(new SetCardInfo("Brushland", "nl320", Rarity.RARE, mage.cards.b.Brushland.class)); + cards.add(new SetCardInfo("Chill", "tvdl60sb", Rarity.UNCOMMON, mage.cards.c.Chill.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Chill", "jf60sb", Rarity.UNCOMMON, mage.cards.c.Chill.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Circle of Protection: Black", "tvdl8sb", Rarity.COMMON, mage.cards.c.CircleOfProtectionBlack.class)); + cards.add(new SetCardInfo("City of Brass", "nl321", Rarity.RARE, mage.cards.c.CityOfBrass.class)); + cards.add(new SetCardInfo("Confiscate", "nl66", Rarity.UNCOMMON, mage.cards.c.Confiscate.class)); + cards.add(new SetCardInfo("Counterspell", "tvdl61b", Rarity.COMMON, mage.cards.c.Counterspell.class)); + cards.add(new SetCardInfo("Creeping Mold", "jk220sb", Rarity.UNCOMMON, mage.cards.c.CreepingMold.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Creeping Mold", "jk220", Rarity.UNCOMMON, mage.cards.c.CreepingMold.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Crumbling Sanctuary", "jf292", Rarity.RARE, mage.cards.c.CrumblingSanctuary.class)); + cards.add(new SetCardInfo("Crystal Vein", "jf322", Rarity.UNCOMMON, mage.cards.c.CrystalVein.class)); + cards.add(new SetCardInfo("Cursed Totem", "tvdl278sb", Rarity.RARE, mage.cards.c.CursedTotem.class)); + cards.add(new SetCardInfo("Daze", "tvdl30sb", Rarity.COMMON, mage.cards.d.Daze.class)); + cards.add(new SetCardInfo("Defense Grid", "nl125sb", Rarity.RARE, mage.cards.d.DefenseGrid.class)); + cards.add(new SetCardInfo("Dust Bowl", "jk316", Rarity.RARE, mage.cards.d.DustBowl.class)); + cards.add(new SetCardInfo("Energy Field", "tvdl73", Rarity.RARE, mage.cards.e.EnergyField.class)); + cards.add(new SetCardInfo("Energy Flux", "nl78sb", Rarity.UNCOMMON, mage.cards.e.EnergyFlux.class)); + cards.add(new SetCardInfo("Enlightened Tutor", "tvdl19", Rarity.UNCOMMON, mage.cards.e.EnlightenedTutor.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Enlightened Tutor", "nl19", Rarity.UNCOMMON, mage.cards.e.EnlightenedTutor.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Erase", "tvdl7sb", Rarity.COMMON, mage.cards.e.Erase.class)); + cards.add(new SetCardInfo("Fecundity", "nl251", Rarity.UNCOMMON, mage.cards.f.Fecundity.class)); + cards.add(new SetCardInfo("Flameshot", "jk90sb", Rarity.UNCOMMON, mage.cards.f.Flameshot.class)); + cards.add(new SetCardInfo("Forest", "nl347", Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", "jk347", Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Frantic Search", "tvdl32", Rarity.COMMON, mage.cards.f.FranticSearch.class)); + cards.add(new SetCardInfo("Grim Monolith", "jf126", Rarity.RARE, mage.cards.g.GrimMonolith.class)); + cards.add(new SetCardInfo("Heart of Ramos", "nl296sb", Rarity.RARE, mage.cards.h.HeartOfRamos.class)); + cards.add(new SetCardInfo("High Market", "nl320b", Rarity.RARE, mage.cards.h.HighMarket.class)); + cards.add(new SetCardInfo("Island", "tvdl335", Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", "jf335", Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Karplusan Forest", "jk326", Rarity.RARE, mage.cards.k.KarplusanForest.class)); + cards.add(new SetCardInfo("Light of Day", "nl29sb", Rarity.UNCOMMON, mage.cards.l.LightOfDay.class)); + cards.add(new SetCardInfo("Lilting Refrain", "tvdl83sb", Rarity.UNCOMMON, mage.cards.l.LiltingRefrain.class)); + cards.add(new SetCardInfo("Llanowar Elves", "nl239", Rarity.COMMON, mage.cards.l.LlanowarElves.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Llanowar Elves", "jk239", Rarity.COMMON, mage.cards.l.LlanowarElves.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Masticore", "jk134sb", Rarity.RARE, mage.cards.m.Masticore.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Masticore", "jk134", Rarity.RARE, mage.cards.m.Masticore.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Masticore", "jf134", Rarity.RARE, mage.cards.m.Masticore.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Meekstone", "nl299sb", Rarity.RARE, mage.cards.m.Meekstone.class)); + cards.add(new SetCardInfo("Metalworker", "jf135", Rarity.RARE, mage.cards.m.Metalworker.class)); + cards.add(new SetCardInfo("Miscalculation", "jf36sb", Rarity.COMMON, mage.cards.m.Miscalculation.class)); + cards.add(new SetCardInfo("Mishra's Helix", "jf302sb", Rarity.RARE, mage.cards.m.MishrasHelix.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mishra's Helix", "jf302", Rarity.RARE, mage.cards.m.MishrasHelix.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", "jk343", Rarity.LAND, mage.cards.basiclands.Mountain.class)); + cards.add(new SetCardInfo("Mystical Tutor", "tvdl83", Rarity.UNCOMMON, mage.cards.m.MysticalTutor.class)); + cards.add(new SetCardInfo("Opalescence", "tvdl13", Rarity.RARE, mage.cards.o.Opalescence.class)); + cards.add(new SetCardInfo("Parallax Tide", "tvdl37", Rarity.RARE, mage.cards.p.ParallaxTide.class)); + cards.add(new SetCardInfo("Parallax Wave", "tvdl17", Rarity.RARE, mage.cards.p.ParallaxWave.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Parallax Wave", "nl17sb", Rarity.RARE, mage.cards.p.ParallaxWave.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Pattern of Rebirth", "nl115", Rarity.RARE, mage.cards.p.PatternOfRebirth.class)); + cards.add(new SetCardInfo("Phyrexian Colossus", "jf305", Rarity.RARE, mage.cards.p.PhyrexianColossus.class)); + cards.add(new SetCardInfo("Phyrexian Processor", "nl306sb", Rarity.RARE, mage.cards.p.PhyrexianProcessor.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Phyrexian Processor", "jk306sb", Rarity.RARE, mage.cards.p.PhyrexianProcessor.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Phyrexian Processor", "jk306", Rarity.RARE, mage.cards.p.PhyrexianProcessor.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Phyrexian Processor", "jf306b", Rarity.RARE, mage.cards.p.PhyrexianProcessor.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Phyrexian Tower", "nl322", Rarity.RARE, mage.cards.p.PhyrexianTower.class)); + cards.add(new SetCardInfo("Plains", "tvdl331", Rarity.LAND, mage.cards.basiclands.Plains.class)); + cards.add(new SetCardInfo("Plow Under", "jk117", Rarity.RARE, mage.cards.p.PlowUnder.class)); + cards.add(new SetCardInfo("Priest of Titania", "nl270", Rarity.COMMON, mage.cards.p.PriestOfTitania.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Priest of Titania", "jk270", Rarity.COMMON, mage.cards.p.PriestOfTitania.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Rack and Ruin", "jk89sb", Rarity.UNCOMMON, mage.cards.r.RackAndRuin.class)); + cards.add(new SetCardInfo("Replenish", "tvdl15", Rarity.RARE, mage.cards.r.Replenish.class)); + cards.add(new SetCardInfo("Rishadan Port", "tvdl324", Rarity.RARE, mage.cards.r.RishadanPort.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Rishadan Port", "jk324", Rarity.RARE, mage.cards.r.RishadanPort.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Rishadan Port", "jf324", Rarity.RARE, mage.cards.r.RishadanPort.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Rising Waters", "jf38sb", Rarity.RARE, mage.cards.r.RisingWaters.class)); + cards.add(new SetCardInfo("Saprazzan Skerry", "jf328", Rarity.COMMON, mage.cards.s.SaprazzanSkerry.class)); + cards.add(new SetCardInfo("Saproling Burst", "jk113", Rarity.RARE, mage.cards.s.SaprolingBurst.class)); + cards.add(new SetCardInfo("Saproling Cluster", "nl114", Rarity.RARE, mage.cards.s.SaprolingCluster.class)); + cards.add(new SetCardInfo("Seal of Cleansing", "tvdl18sb", Rarity.COMMON, mage.cards.s.SealOfCleansing.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Seal of Cleansing", "tvdl18", Rarity.COMMON, mage.cards.s.SealOfCleansing.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Seal of Cleansing", "nl18sb", Rarity.COMMON, mage.cards.s.SealOfCleansing.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Seal of Removal", "tvdl42", Rarity.COMMON, mage.cards.s.SealOfRemoval.class)); + cards.add(new SetCardInfo("Serra Avatar", "nl45", Rarity.RARE, mage.cards.s.SerraAvatar.class)); + cards.add(new SetCardInfo("Sky Diamond", "tvdl311", Rarity.UNCOMMON, mage.cards.s.SkyDiamond.class)); + cards.add(new SetCardInfo("Snake Basket", "nl312", Rarity.RARE, mage.cards.s.SnakeBasket.class)); + cards.add(new SetCardInfo("Splinter", "jk121sb", Rarity.UNCOMMON, mage.cards.s.Splinter.class)); + cards.add(new SetCardInfo("Stone Rain", "jk209", Rarity.COMMON, mage.cards.s.StoneRain.class)); + cards.add(new SetCardInfo("Submerge", "tvdl48sb", Rarity.UNCOMMON, mage.cards.s.Submerge.class)); + cards.add(new SetCardInfo("Tangle Wire", "jf139a", Rarity.RARE, mage.cards.t.TangleWire.class)); + cards.add(new SetCardInfo("Thran Dynamo", "jf139b", Rarity.UNCOMMON, mage.cards.t.ThranDynamo.class)); + cards.add(new SetCardInfo("Thran Quarry", "nl329", Rarity.RARE, mage.cards.t.ThranQuarry.class)); + cards.add(new SetCardInfo("Tinker", "jf45", Rarity.UNCOMMON, mage.cards.t.Tinker.class)); + cards.add(new SetCardInfo("Uktabi Orangutan", "jk260sb", Rarity.UNCOMMON, mage.cards.u.UktabiOrangutan.class)); + cards.add(new SetCardInfo("Voltaic Key", "jf314", Rarity.UNCOMMON, mage.cards.v.VoltaicKey.class)); + cards.add(new SetCardInfo("Whetstone", "nl316", Rarity.RARE, mage.cards.w.Whetstone.class)); + cards.add(new SetCardInfo("Worship", "nl57sb", Rarity.RARE, mage.cards.w.Worship.class)); + cards.add(new SetCardInfo("Wrath of God", "tvdl54sb", Rarity.RARE, mage.cards.w.WrathOfGod.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Wrath of God", "tvdl54", Rarity.RARE, mage.cards.w.WrathOfGod.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Yawgmoth's Bargain", "nl75", Rarity.RARE, mage.cards.y.YawgmothsBargain.class)); + cards.add(new SetCardInfo("Yawgmoth's Will", "nl171", Rarity.RARE, mage.cards.y.YawgmothsWill.class)); + } +} diff --git a/Mage.Sets/src/mage/sets/WorldChampionshipDecks2001.java b/Mage.Sets/src/mage/sets/WorldChampionshipDecks2001.java new file mode 100644 index 00000000000..622ad7e3817 --- /dev/null +++ b/Mage.Sets/src/mage/sets/WorldChampionshipDecks2001.java @@ -0,0 +1,152 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/wc01 + */ +public class WorldChampionshipDecks2001 extends ExpansionSet { + + private static final WorldChampionshipDecks2001 instance = new WorldChampionshipDecks2001(); + + public static WorldChampionshipDecks2001 getInstance() { + return instance; + } + + private WorldChampionshipDecks2001() { + super("World Championship Decks 2001", "WC01", ExpansionSet.buildDate(2001, 8, 8), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = true; + + cards.add(new SetCardInfo("Accumulated Knowledge", "ar26", Rarity.COMMON, mage.cards.a.AccumulatedKnowledge.class)); + cards.add(new SetCardInfo("Addle", "tvdl91sb", Rarity.UNCOMMON, mage.cards.a.Addle.class)); + cards.add(new SetCardInfo("Birds of Paradise", "jt231", Rarity.RARE, mage.cards.b.BirdsOfParadise.class)); + cards.add(new SetCardInfo("Blastoderm", "jt102", Rarity.COMMON, mage.cards.b.Blastoderm.class)); + cards.add(new SetCardInfo("Blazing Specter", "tvdl236", Rarity.RARE, mage.cards.b.BlazingSpecter.class)); + cards.add(new SetCardInfo("Blood Oath", "jt177sb", Rarity.RARE, mage.cards.b.BloodOath.class)); + cards.add(new SetCardInfo("Boil", "jt177sba", Rarity.COMMON, mage.cards.b.Boil.class)); + cards.add(new SetCardInfo("City of Brass", "jt327", Rarity.RARE, mage.cards.c.CityOfBrass.class)); + cards.add(new SetCardInfo("Counterspell", "ar69", Rarity.COMMON, mage.cards.c.Counterspell.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Counterspell", "ab69", Rarity.COMMON, mage.cards.c.Counterspell.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Counterspell", "ar67", Rarity.COMMON, mage.cards.c.Counterspell.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Counterspell", "ab67", Rarity.COMMON, mage.cards.c.Counterspell.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Crosis's Charm", "ar99", Rarity.COMMON, mage.cards.c.CrosissCharm.class)); + cards.add(new SetCardInfo("Crypt Angel", "tvdl97sb", Rarity.RARE, mage.cards.c.CryptAngel.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Crypt Angel", "tvdl97", Rarity.RARE, mage.cards.c.CryptAngel.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Dark Ritual", "tvdl129", Rarity.COMMON, mage.cards.d.DarkRitual.class)); + cards.add(new SetCardInfo("Darting Merfolk", "ab72", Rarity.COMMON, mage.cards.d.DartingMerfolk.class)); + cards.add(new SetCardInfo("Duress", "tvdl131", Rarity.COMMON, mage.cards.d.Duress.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Duress", "ar131sb", Rarity.COMMON, mage.cards.d.Duress.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Duress", "ar131", Rarity.COMMON, mage.cards.d.Duress.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Engineered Plague", "ar133sb", Rarity.UNCOMMON, mage.cards.e.EngineeredPlague.class)); + cards.add(new SetCardInfo("Fact or Fiction", "ar57", Rarity.UNCOMMON, mage.cards.f.FactOrFiction.class)); + cards.add(new SetCardInfo("Fire // Ice", "jt128", Rarity.UNCOMMON, mage.cards.f.FireIce.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Fire // Ice", "ar128", Rarity.UNCOMMON, mage.cards.f.FireIce.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Fires of Yavimaya", "jt246", Rarity.UNCOMMON, mage.cards.f.FiresOfYavimaya.class)); + cards.add(new SetCardInfo("Flametongue Kavu", "tvdl60sb", Rarity.UNCOMMON, mage.cards.f.FlametongueKavu.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Flametongue Kavu", "tvdl60", Rarity.UNCOMMON, mage.cards.f.FlametongueKavu.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Flametongue Kavu", "jt60", Rarity.UNCOMMON, mage.cards.f.FlametongueKavu.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", "jt349a", Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", "jt349", Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", "jt348a", Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", "jt348", Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", "jt347a", Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", "jt347", Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", "jt329", Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", "jt328", Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Gush", "ab82", Rarity.COMMON, mage.cards.g.Gush.class)); + cards.add(new SetCardInfo("Hibernation", "ab79sb", Rarity.UNCOMMON, mage.cards.h.Hibernation.class)); + cards.add(new SetCardInfo("Island", "ar338", Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", "ab338a", Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", "ab338", Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", "ar337", Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", "ab337a", Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", "ab337", Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", "ar336a", Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", "ar336", Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", "ab336a", Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", "ab336", Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", "ar335b", Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", "ar335a", Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", "ar335", Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", "ab335b", Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", "ab335a", Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", "ab335", Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", "ar334", Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", "ab334", Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", "ab333", Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", "ab332", Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Karplusan Forest", "jt336", Rarity.RARE, mage.cards.k.KarplusanForest.class)); + cards.add(new SetCardInfo("Kavu Chameleon", "jt191sb", Rarity.UNCOMMON, mage.cards.k.KavuChameleon.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Kavu Chameleon", "jt191", Rarity.UNCOMMON, mage.cards.k.KavuChameleon.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Llanowar Elves", "jt253", Rarity.COMMON, mage.cards.l.LlanowarElves.class)); + cards.add(new SetCardInfo("Llanowar Wastes", "jt141", Rarity.RARE, mage.cards.l.LlanowarWastes.class)); + cards.add(new SetCardInfo("Lobotomy", "ar255sb", Rarity.UNCOMMON, mage.cards.l.Lobotomy.class)); + cards.add(new SetCardInfo("Lord of Atlantis", "ab83", Rarity.RARE, mage.cards.l.LordOfAtlantis.class)); + cards.add(new SetCardInfo("Mana Maze", "ab59sb", Rarity.RARE, mage.cards.m.ManaMaze.class)); + cards.add(new SetCardInfo("Meekstone", "ar307sb", Rarity.COMMON, mage.cards.m.Meekstone.class)); + cards.add(new SetCardInfo("Merfolk Looter", "ab89", Rarity.UNCOMMON, mage.cards.m.MerfolkLooter.class)); + cards.add(new SetCardInfo("Merfolk of the Pearl Trident", "ab90", Rarity.COMMON, mage.cards.m.MerfolkOfThePearlTrident.class)); + cards.add(new SetCardInfo("Misdirection", "ab87sb", Rarity.RARE, mage.cards.m.Misdirection.class)); + cards.add(new SetCardInfo("Mountain", "tvdl343b", Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", "tvdl343", Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", "jt343a", Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", "jt343", Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", "tvdl337", Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", "jt337", Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Nether Spirit", "ar149", Rarity.RARE, mage.cards.n.NetherSpirit.class)); + cards.add(new SetCardInfo("Obliterate", "jt156sb", Rarity.RARE, mage.cards.o.Obliterate.class)); + cards.add(new SetCardInfo("Opposition", "ab92", Rarity.RARE, mage.cards.o.Opposition.class)); + cards.add(new SetCardInfo("Opt", "ar64", Rarity.COMMON, mage.cards.o.Opt.class)); + cards.add(new SetCardInfo("Persecute", "tvdl154sb", Rarity.RARE, mage.cards.p.Persecute.class)); + cards.add(new SetCardInfo("Phyrexian Arena", "tvdl47sb", Rarity.RARE, mage.cards.p.PhyrexianArena.class)); + cards.add(new SetCardInfo("Phyrexian Scuta", "tvdl51", Rarity.RARE, mage.cards.p.PhyrexianScuta.class)); + cards.add(new SetCardInfo("Plague Spitter", "tvdl119", Rarity.UNCOMMON, mage.cards.p.PlagueSpitter.class)); + cards.add(new SetCardInfo("Prodigal Sorcerer", "ab94sb", Rarity.COMMON, mage.cards.p.ProdigalSorcerer.class)); + cards.add(new SetCardInfo("Pyroclasm", "tvdl209sb", Rarity.UNCOMMON, mage.cards.p.Pyroclasm.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Pyroclasm", "ar209sb", Rarity.UNCOMMON, mage.cards.p.Pyroclasm.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Rishadan Port", "tvdl324", Rarity.RARE, mage.cards.r.RishadanPort.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Rishadan Port", "jt324", Rarity.RARE, mage.cards.r.RishadanPort.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Rushing River", "ab30sb", Rarity.COMMON, mage.cards.r.RushingRiver.class)); + cards.add(new SetCardInfo("Salt Marsh", "ar326", Rarity.UNCOMMON, mage.cards.s.SaltMarsh.class)); + cards.add(new SetCardInfo("Saproling Burst", "jt113", Rarity.RARE, mage.cards.s.SaprolingBurst.class)); + cards.add(new SetCardInfo("Scoria Cat", "tvdl101sb", Rarity.UNCOMMON, mage.cards.s.ScoriaCat.class)); + cards.add(new SetCardInfo("Shivan Reef", "ar142", Rarity.RARE, mage.cards.s.ShivanReef.class)); + cards.add(new SetCardInfo("Skizzik", "tvdl169", Rarity.RARE, mage.cards.s.Skizzik.class)); + cards.add(new SetCardInfo("Spiritmonger", "jt121", Rarity.RARE, mage.cards.s.Spiritmonger.class)); + cards.add(new SetCardInfo("Spite // Malice", "ar293", Rarity.UNCOMMON, mage.cards.s.SpiteMalice.class)); + cards.add(new SetCardInfo("Static Orb", "ab319", Rarity.RARE, mage.cards.s.StaticOrb.class)); + cards.add(new SetCardInfo("Sulfurous Springs", "tvdl345", Rarity.RARE, mage.cards.s.SulfurousSprings.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Sulfurous Springs", "jt345", Rarity.RARE, mage.cards.s.SulfurousSprings.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Sulfurous Springs", "ar345", Rarity.RARE, mage.cards.s.SulfurousSprings.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", "tvdl348", Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", "tvdl347", Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", "tvdl342", Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", "tvdl341", Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", "tvdl339a", Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", "tvdl339", Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Tangle", "jt213sb", Rarity.UNCOMMON, mage.cards.t.Tangle.class)); + cards.add(new SetCardInfo("Teferi's Response", "ar78sb", Rarity.RARE, mage.cards.t.TeferisResponse.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Teferi's Response", "ab78sb", Rarity.COMMON, mage.cards.t.TeferisResponse.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Terminate", "tvdl128", Rarity.COMMON, mage.cards.t.Terminate.class)); + cards.add(new SetCardInfo("Thornscape Battlemage", "jt94", Rarity.UNCOMMON, mage.cards.t.ThornscapeBattlemage.class)); + cards.add(new SetCardInfo("Thunderscape Battlemage", "jt75sb", Rarity.UNCOMMON, mage.cards.t.ThunderscapeBattlemage.class)); + cards.add(new SetCardInfo("Thwart", "ab108", Rarity.UNCOMMON, mage.cards.t.Thwart.class)); + cards.add(new SetCardInfo("Tsabo's Assassin", "ar128sb", Rarity.RARE, mage.cards.t.TsabosAssassin.class)); + cards.add(new SetCardInfo("Tsabo's Decree", "ar129", Rarity.RARE, mage.cards.t.TsabosDecree.class)); + cards.add(new SetCardInfo("Tsabo's Web", "ar317", Rarity.RARE, mage.cards.t.TsabosWeb.class)); + cards.add(new SetCardInfo("Underground River", "ar350", Rarity.RARE, mage.cards.u.UndergroundRiver.class)); + cards.add(new SetCardInfo("Undermine", "ar282", Rarity.RARE, mage.cards.u.Undermine.class)); + cards.add(new SetCardInfo("Urborg Volcano", "tvdl330", Rarity.COMMON, mage.cards.u.UrborgVolcano.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Urborg Volcano", "ar330", Rarity.UNCOMMON, mage.cards.u.UrborgVolcano.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Urza's Rage", "tvdl178", Rarity.RARE, mage.cards.u.UrzasRage.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Urza's Rage", "jt178", Rarity.RARE, mage.cards.u.UrzasRage.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Urza's Rage", "ar178", Rarity.RARE, mage.cards.u.UrzasRage.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Vendetta", "tvdl170", Rarity.COMMON, mage.cards.v.Vendetta.class)); + cards.add(new SetCardInfo("Vodalian Merchant", "ab85", Rarity.COMMON, mage.cards.v.VodalianMerchant.class)); + cards.add(new SetCardInfo("Wash Out", "ab87bsb", Rarity.UNCOMMON, mage.cards.w.WashOut.class)); + cards.add(new SetCardInfo("Waterfront Bouncer", "ab114", Rarity.COMMON, mage.cards.w.WaterfrontBouncer.class)); + } +} diff --git a/Mage.Sets/src/mage/sets/WorldChampionshipDecks2002.java b/Mage.Sets/src/mage/sets/WorldChampionshipDecks2002.java new file mode 100644 index 00000000000..fad20fe3df5 --- /dev/null +++ b/Mage.Sets/src/mage/sets/WorldChampionshipDecks2002.java @@ -0,0 +1,167 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/wc02 + */ +public class WorldChampionshipDecks2002 extends ExpansionSet { + + private static final WorldChampionshipDecks2002 instance = new WorldChampionshipDecks2002(); + + public static WorldChampionshipDecks2002 getInstance() { + return instance; + } + + private WorldChampionshipDecks2002() { + super("World Championship Decks 2002", "WC02", ExpansionSet.buildDate(2002, 8, 14), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = true; + + cards.add(new SetCardInfo("Anurid Brushhopper", "bk137", Rarity.RARE, mage.cards.a.AnuridBrushhopper.class)); + cards.add(new SetCardInfo("Birds of Paradise", "shh231", Rarity.RARE, mage.cards.b.BirdsOfParadise.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Birds of Paradise", "bk231", Rarity.RARE, mage.cards.b.BirdsOfParadise.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Breakthrough", "rl26", Rarity.UNCOMMON, mage.cards.b.Breakthrough.class)); + cards.add(new SetCardInfo("Brushland", "bk326", Rarity.RARE, mage.cards.b.Brushland.class)); + cards.add(new SetCardInfo("Call of the Herd", "bk231a", Rarity.RARE, mage.cards.c.CallOfTheHerd.class)); + cards.add(new SetCardInfo("Careful Study", "rl70", Rarity.COMMON, mage.cards.c.CarefulStudy.class)); + cards.add(new SetCardInfo("Cephalid Coliseum", "cr317", Rarity.UNCOMMON, mage.cards.c.CephalidColiseum.class)); + cards.add(new SetCardInfo("Chainer's Edict", "cr57", Rarity.UNCOMMON, mage.cards.c.ChainersEdict.class)); + cards.add(new SetCardInfo("Circular Logic", "shh33", Rarity.UNCOMMON, mage.cards.c.CircularLogic.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Circular Logic", "cr33", Rarity.UNCOMMON, mage.cards.c.CircularLogic.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("City of Brass", "bk327sb", Rarity.RARE, mage.cards.c.CityOfBrass.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("City of Brass", "bk327", Rarity.RARE, mage.cards.c.CityOfBrass.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Coffin Purge", "cr124sb", Rarity.COMMON, mage.cards.c.CoffinPurge.class)); + cards.add(new SetCardInfo("Compost", "rl235sb", Rarity.UNCOMMON, mage.cards.c.Compost.class)); + cards.add(new SetCardInfo("Counterspell", "cr67", Rarity.COMMON, mage.cards.c.Counterspell.class)); + cards.add(new SetCardInfo("Cunning Wish", "cr37", Rarity.RARE, mage.cards.c.CunningWish.class)); + cards.add(new SetCardInfo("Darkwater Catacombs", "cr319", Rarity.RARE, mage.cards.d.DarkwaterCatacombs.class)); + cards.add(new SetCardInfo("Deep Analysis", "shh36", Rarity.COMMON, mage.cards.d.DeepAnalysis.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Deep Analysis", "cr36", Rarity.COMMON, mage.cards.d.DeepAnalysis.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Disrupt", "rl51sb", Rarity.UNCOMMON, mage.cards.d.Disrupt.class)); + cards.add(new SetCardInfo("Duress", "cr131sb", Rarity.COMMON, mage.cards.d.Duress.class)); + cards.add(new SetCardInfo("Fact or Fiction", "cr57sb", Rarity.UNCOMMON, mage.cards.f.FactOrFiction.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Fact or Fiction", "cr57a", Rarity.UNCOMMON, mage.cards.f.FactOrFiction.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Fire // Ice", "shh128", Rarity.UNCOMMON, mage.cards.f.FireIce.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Fire // Ice", "bk128", Rarity.UNCOMMON, mage.cards.f.FireIce.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Flametongue Kavu", "shh60sb", Rarity.UNCOMMON, mage.cards.f.FlametongueKavu.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Flametongue Kavu", "shh60", Rarity.UNCOMMON, mage.cards.f.FlametongueKavu.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Flametongue Kavu", "bk60", Rarity.UNCOMMON, mage.cards.f.FlametongueKavu.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", "shh350", Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", "rl350", Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", "shh349", Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", "rl349", Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", "bk349", Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", "shh348", Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", "rl348", Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", "bk348", Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", "shh347", Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", "rl347", Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", "bk347", Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", "shh331", Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", "rl331", Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", "bk331", Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", "shh330", Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", "rl330", Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", "bk330", Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", "shh329", Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", "rl329", Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", "bk329", Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", "shh328", Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", "rl328", Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", "bk328", Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Gainsay", "shh26sb", Rarity.UNCOMMON, mage.cards.g.Gainsay.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Gainsay", "cr26sb", Rarity.UNCOMMON, mage.cards.g.Gainsay.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Genesis", "rl117", Rarity.RARE, mage.cards.g.Genesis.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Genesis", "bk117sb", Rarity.RARE, mage.cards.g.Genesis.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Ghastly Demise", "cr139sb", Rarity.COMMON, mage.cards.g.GhastlyDemise.class)); + cards.add(new SetCardInfo("Global Ruin", "bk18sb", Rarity.RARE, mage.cards.g.GlobalRuin.class)); + cards.add(new SetCardInfo("Glory", "bk11sb", Rarity.RARE, mage.cards.g.Glory.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Glory", "bk11", Rarity.RARE, mage.cards.g.Glory.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Hibernation", "cr79sb", Rarity.UNCOMMON, mage.cards.h.Hibernation.class)); + cards.add(new SetCardInfo("Intrepid Hero", "bk22sb", Rarity.RARE, mage.cards.i.IntrepidHero.class)); + cards.add(new SetCardInfo("Island", "shh338", Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", "rl338", Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", "cr338", Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", "shh337", Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", "rl337a", Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", "rl337", Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", "cr337a", Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", "cr337", Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", "shh336a", Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", "rl336a", Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", "rl336", Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", "cr336", Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", "shh335", Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", "rl335", Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", "cr335b", Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", "cr335a", Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", "cr335", Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", "shh334", Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", "rl334", Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", "cr334", Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", "rl333", Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", "cr333", Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", "rl332", Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", "cr332", Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Karplusan Forest", "shh336", Rarity.RARE, mage.cards.k.KarplusanForest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Karplusan Forest", "bk336", Rarity.RARE, mage.cards.k.KarplusanForest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Living Wish", "bk124", Rarity.RARE, mage.cards.l.LivingWish.class)); + cards.add(new SetCardInfo("Llanowar Elves", "shh253", Rarity.COMMON, mage.cards.l.LlanowarElves.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Llanowar Elves", "bk253", Rarity.COMMON, mage.cards.l.LlanowarElves.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mana Short", "cr86sb", Rarity.RARE, mage.cards.m.ManaShort.class)); + cards.add(new SetCardInfo("Memory Lapse", "cr88", Rarity.COMMON, mage.cards.m.MemoryLapse.class)); + cards.add(new SetCardInfo("Mental Note", "rl46", Rarity.COMMON, mage.cards.m.MentalNote.class)); + cards.add(new SetCardInfo("Merfolk Looter", "shh89", Rarity.UNCOMMON, mage.cards.m.MerfolkLooter.class)); + cards.add(new SetCardInfo("Mountain", "bk346", Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", "bk343", Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Nightscape Familiar", "cr48", Rarity.COMMON, mage.cards.n.NightscapeFamiliar.class)); + cards.add(new SetCardInfo("Nimble Mongoose", "rl258", Rarity.UNCOMMON, mage.cards.n.NimbleMongoose.class)); + cards.add(new SetCardInfo("Opposition", "shh92", Rarity.RARE, mage.cards.o.Opposition.class)); + cards.add(new SetCardInfo("Phantom Centaur", "shh127", Rarity.UNCOMMON, mage.cards.p.PhantomCentaur.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Phantom Centaur", "rl127sb", Rarity.UNCOMMON, mage.cards.p.PhantomCentaur.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Phantom Centaur", "bk127", Rarity.UNCOMMON, mage.cards.p.PhantomCentaur.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Phantom Nishoba", "bk140sb", Rarity.RARE, mage.cards.p.PhantomNishoba.class)); + cards.add(new SetCardInfo("Plains", "bk341", Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", "bk333", Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", "bk331a", Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Psychatog", "cr292", Rarity.UNCOMMON, mage.cards.p.Psychatog.class)); + cards.add(new SetCardInfo("Quiet Speculation", "shh49sb", Rarity.UNCOMMON, mage.cards.q.QuietSpeculation.class)); + cards.add(new SetCardInfo("Ray of Revelation", "shh20sb", Rarity.COMMON, mage.cards.r.RayOfRevelation.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Ray of Revelation", "rl20sb", Rarity.COMMON, mage.cards.r.RayOfRevelation.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Recoil", "cr264sb", Rarity.COMMON, mage.cards.r.Recoil.class)); + cards.add(new SetCardInfo("Reprisal", "bk33sb", Rarity.UNCOMMON, mage.cards.r.Reprisal.class)); + cards.add(new SetCardInfo("Repulse", "rl70sb", Rarity.COMMON, mage.cards.r.Repulse.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Repulse", "cr70", Rarity.COMMON, mage.cards.r.Repulse.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Roar of the Wurm", "shh266sb", Rarity.UNCOMMON, mage.cards.r.RoarOfTheWurm.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Roar of the Wurm", "rl266", Rarity.UNCOMMON, mage.cards.r.RoarOfTheWurm.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Rushing River", "rl30sb", Rarity.COMMON, mage.cards.r.RushingRiver.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Rushing River", "rl30", Rarity.COMMON, mage.cards.r.RushingRiver.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Salt Marsh", "cr326", Rarity.UNCOMMON, mage.cards.s.SaltMarsh.class)); + cards.add(new SetCardInfo("Seton's Scout", "rl138", Rarity.UNCOMMON, mage.cards.s.SetonsScout.class)); + cards.add(new SetCardInfo("Shivan Reef", "shh142", Rarity.RARE, mage.cards.s.ShivanReef.class)); + cards.add(new SetCardInfo("Simoon", "shh272sb", Rarity.UNCOMMON, mage.cards.s.Simoon.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Simoon", "bk272sb", Rarity.UNCOMMON, mage.cards.s.Simoon.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Slay", "cr55sb", Rarity.UNCOMMON, mage.cards.s.Slay.class)); + cards.add(new SetCardInfo("Squirrel Nest", "shh274", Rarity.UNCOMMON, mage.cards.s.SquirrelNest.class)); + cards.add(new SetCardInfo("Swamp", "cr342", Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", "cr341", Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", "cr340", Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Sylvan Safekeeper", "bk133sb", Rarity.RARE, mage.cards.s.SylvanSafekeeper.class)); + cards.add(new SetCardInfo("Teferi's Response", "cr78sb", Rarity.RARE, mage.cards.t.TeferisResponse.class)); + cards.add(new SetCardInfo("Thornscape Battlemage", "bk94sb", Rarity.UNCOMMON, mage.cards.t.ThornscapeBattlemage.class)); + cards.add(new SetCardInfo("Thunderscape Battlemage", "bk75sb", Rarity.UNCOMMON, mage.cards.t.ThunderscapeBattlemage.class)); + cards.add(new SetCardInfo("Underground River", "cr350", Rarity.RARE, mage.cards.u.UndergroundRiver.class)); + cards.add(new SetCardInfo("Upheaval", "cr113", Rarity.RARE, mage.cards.u.Upheaval.class)); + cards.add(new SetCardInfo("Wax // Wane", "bk296", Rarity.UNCOMMON, mage.cards.w.WaxWane.class)); + cards.add(new SetCardInfo("Werebear", "rl282", Rarity.COMMON, mage.cards.w.Werebear.class)); + cards.add(new SetCardInfo("Wild Mongrel", "shh283", Rarity.COMMON, mage.cards.w.WildMongrel.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Wild Mongrel", "rl283", Rarity.COMMON, mage.cards.w.WildMongrel.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Wild Mongrel", "bk283", Rarity.COMMON, mage.cards.w.WildMongrel.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Wonder", "rl54", Rarity.UNCOMMON, mage.cards.w.Wonder.class)); + cards.add(new SetCardInfo("Yavimaya Coast", "shh143", Rarity.RARE, mage.cards.y.YavimayaCoast.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Yavimaya Coast", "rl143", Rarity.RARE, mage.cards.y.YavimayaCoast.class, NON_FULL_USE_VARIOUS)); + } +} diff --git a/Mage.Sets/src/mage/sets/WorldChampionshipDecks2003.java b/Mage.Sets/src/mage/sets/WorldChampionshipDecks2003.java new file mode 100644 index 00000000000..88feb7a3791 --- /dev/null +++ b/Mage.Sets/src/mage/sets/WorldChampionshipDecks2003.java @@ -0,0 +1,156 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/wc03 + */ +public class WorldChampionshipDecks2003 extends ExpansionSet { + + private static final WorldChampionshipDecks2003 instance = new WorldChampionshipDecks2003(); + + public static WorldChampionshipDecks2003 getInstance() { + return instance; + } + + private WorldChampionshipDecks2003() { + super("World Championship Decks 2003", "WC03", ExpansionSet.buildDate(2003, 8, 6), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = true; + + cards.add(new SetCardInfo("Anger", "pk77", Rarity.UNCOMMON, mage.cards.a.Anger.class)); + cards.add(new SetCardInfo("Anurid Brushhopper", "dz137sb", Rarity.RARE, mage.cards.a.AnuridBrushhopper.class)); + cards.add(new SetCardInfo("Aquamoeba", "dh24", Rarity.COMMON, mage.cards.a.Aquamoeba.class)); + cards.add(new SetCardInfo("Arcanis the Omnipotent", "pk66", Rarity.RARE, mage.cards.a.ArcanisTheOmnipotent.class)); + cards.add(new SetCardInfo("Arrogant Wurm", "dh120", Rarity.UNCOMMON, mage.cards.a.ArrogantWurm.class)); + cards.add(new SetCardInfo("Barren Moor", "pk312", Rarity.COMMON, mage.cards.b.BarrenMoor.class)); + cards.add(new SetCardInfo("Basking Rootwalla", "dh121", Rarity.COMMON, mage.cards.b.BaskingRootwalla.class)); + cards.add(new SetCardInfo("Bloodstained Mire", "pk313", Rarity.RARE, mage.cards.b.BloodstainedMire.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Bloodstained Mire", "we313", Rarity.RARE, mage.cards.b.BloodstainedMire.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Buried Alive", "pk118", Rarity.UNCOMMON, mage.cards.b.BuriedAlive.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Buried Alive", "pk118sb", Rarity.UNCOMMON, mage.cards.b.BuriedAlive.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Burning Wish", "pk83", Rarity.RARE, mage.cards.b.BurningWish.class)); + cards.add(new SetCardInfo("Cabal Therapy", "pk62", Rarity.UNCOMMON, mage.cards.c.CabalTherapy.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Cabal Therapy", "pk62sb", Rarity.UNCOMMON, mage.cards.c.CabalTherapy.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Cabal Therapy", "we62sb", Rarity.UNCOMMON, mage.cards.c.CabalTherapy.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Careful Study", "dh70", Rarity.COMMON, mage.cards.c.CarefulStudy.class)); + cards.add(new SetCardInfo("Centaur Garden", "dh316", Rarity.UNCOMMON, mage.cards.c.CentaurGarden.class)); + cards.add(new SetCardInfo("Chainer's Edict", "pk57", Rarity.UNCOMMON, mage.cards.c.ChainersEdict.class)); + cards.add(new SetCardInfo("Circular Logic", "dh33", Rarity.UNCOMMON, mage.cards.c.CircularLogic.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Circular Logic", "dz33", Rarity.UNCOMMON, mage.cards.c.CircularLogic.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Circular Logic", "dz33sb", Rarity.UNCOMMON, mage.cards.c.CircularLogic.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("City of Brass", "dh322", Rarity.RARE, mage.cards.c.CityOfBrass.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("City of Brass", "we322", Rarity.RARE, mage.cards.c.CityOfBrass.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Compulsion", "dz34", Rarity.UNCOMMON, mage.cards.c.Compulsion.class)); + cards.add(new SetCardInfo("Cunning Wish", "dz37", Rarity.RARE, mage.cards.c.CunningWish.class)); + cards.add(new SetCardInfo("Dark Banishing", "we123sb", Rarity.COMMON, mage.cards.d.DarkBanishing.class)); + cards.add(new SetCardInfo("Decompose", "pk128sb", Rarity.UNCOMMON, mage.cards.d.Decompose.class)); + cards.add(new SetCardInfo("Decree of Justice", "dz8", Rarity.RARE, mage.cards.d.DecreeOfJustice.class)); + cards.add(new SetCardInfo("Deep Analysis", "dh36", Rarity.COMMON, mage.cards.d.DeepAnalysis.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Deep Analysis", "dh36sb", Rarity.COMMON, mage.cards.d.DeepAnalysis.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Deep Analysis", "dz36", Rarity.COMMON, mage.cards.d.DeepAnalysis.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Demolish", "pk183sb", Rarity.UNCOMMON, mage.cards.d.Demolish.class)); + cards.add(new SetCardInfo("Doomed Necromancer", "pk140", Rarity.RARE, mage.cards.d.DoomedNecromancer.class)); + cards.add(new SetCardInfo("Elfhame Palace", "dz324", Rarity.UNCOMMON, mage.cards.e.ElfhamePalace.class)); + cards.add(new SetCardInfo("Entomb", "pk132", Rarity.RARE, mage.cards.e.Entomb.class)); + cards.add(new SetCardInfo("Envelop", "dh39sb", Rarity.COMMON, mage.cards.e.Envelop.class)); + cards.add(new SetCardInfo("Exalted Angel", "dz28sb", Rarity.RARE, mage.cards.e.ExaltedAngel.class)); + cards.add(new SetCardInfo("Flaring Pain", "we89sb", Rarity.COMMON, mage.cards.f.FlaringPain.class)); + cards.add(new SetCardInfo("Flooded Strand", "dz316", Rarity.RARE, mage.cards.f.FloodedStrand.class)); + cards.add(new SetCardInfo("Forest", "dh348", Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", "dh349", Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", "dh350", Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", "dz347", Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", "dz348", Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", "dz349", Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Gempalm Incinerator", "we94", Rarity.UNCOMMON, mage.cards.g.GempalmIncinerator.class)); + cards.add(new SetCardInfo("Goblin Grappler", "we100", Rarity.COMMON, mage.cards.g.GoblinGrappler.class)); + cards.add(new SetCardInfo("Goblin Piledriver", "we205", Rarity.RARE, mage.cards.g.GoblinPiledriver.class)); + cards.add(new SetCardInfo("Goblin Sharpshooter", "we207", Rarity.RARE, mage.cards.g.GoblinSharpshooter.class)); + cards.add(new SetCardInfo("Goblin Sledder", "we209", Rarity.COMMON, mage.cards.g.GoblinSledder.class)); + cards.add(new SetCardInfo("Goblin Taskmaster", "we210", Rarity.COMMON, mage.cards.g.GoblinTaskmaster.class)); + cards.add(new SetCardInfo("Goblin Warchief", "we97", Rarity.UNCOMMON, mage.cards.g.GoblinWarchief.class)); + cards.add(new SetCardInfo("Guiltfeeder", "pk68sb", Rarity.RARE, mage.cards.g.Guiltfeeder.class)); + cards.add(new SetCardInfo("Haunting Echoes", "pk142sb", Rarity.RARE, mage.cards.h.HauntingEchoes.class)); + cards.add(new SetCardInfo("Hunting Pack", "dz121sb", Rarity.UNCOMMON, mage.cards.h.HuntingPack.class)); + cards.add(new SetCardInfo("Innocent Blood", "pk145", Rarity.COMMON, mage.cards.i.InnocentBlood.class)); + cards.add(new SetCardInfo("Island", "dh336", Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", "dh337", Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", "dh338", Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", "dz335", Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", "dz336", Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", "dz337", Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Krosan Reclamation", "dh122", Rarity.UNCOMMON, mage.cards.k.KrosanReclamation.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Krosan Reclamation", "dh122sb", Rarity.UNCOMMON, mage.cards.k.KrosanReclamation.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Krosan Reclamation", "dz122sb", Rarity.UNCOMMON, mage.cards.k.KrosanReclamation.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Krosan Verge", "dz141", Rarity.UNCOMMON, mage.cards.k.KrosanVerge.class)); + cards.add(new SetCardInfo("Last Rites", "pk146sb", Rarity.COMMON, mage.cards.l.LastRites.class)); + cards.add(new SetCardInfo("Mana Leak", "dh89sb", Rarity.COMMON, mage.cards.m.ManaLeak.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mana Leak", "dz89", Rarity.COMMON, mage.cards.m.ManaLeak.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mirari", "dz303", Rarity.RARE, mage.cards.m.Mirari.class)); + cards.add(new SetCardInfo("Mirari's Wake", "dz139", Rarity.RARE, mage.cards.m.MirarisWake.class)); + cards.add(new SetCardInfo("Moment's Peace", "dz251", Rarity.COMMON, mage.cards.m.MomentsPeace.class)); + cards.add(new SetCardInfo("Mountain", "pk344", Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", "pk345", Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", "pk346", Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", "we343", Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", "we344", Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", "we346", Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Nantuko Vigilante", "dh132sb", Rarity.COMMON, mage.cards.n.NantukoVigilante.class)); + cards.add(new SetCardInfo("Patriarch's Bidding", "pk161sb", Rarity.RARE, mage.cards.p.PatriarchsBidding.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Patriarch's Bidding", "we161", Rarity.RARE, mage.cards.p.PatriarchsBidding.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Phantom Centaur", "dh127sb", Rarity.UNCOMMON, mage.cards.p.PhantomCentaur.class)); + cards.add(new SetCardInfo("Phantom Nishoba", "pk190", Rarity.RARE, mage.cards.p.PhantomNishoba.class)); + cards.add(new SetCardInfo("Plains", "dz331", Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", "dz332", Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", "dz333", Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Pyroclasm", "pk210sb", Rarity.UNCOMMON, mage.cards.p.Pyroclasm.class)); + cards.add(new SetCardInfo("Quiet Speculation", "dh49", Rarity.UNCOMMON, mage.cards.q.QuietSpeculation.class)); + cards.add(new SetCardInfo("Ray of Distortion", "dz42sb", Rarity.COMMON, mage.cards.r.RayOfDistortion.class)); + cards.add(new SetCardInfo("Ray of Revelation", "dh20", Rarity.COMMON, mage.cards.r.RayOfRevelation.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Ray of Revelation", "dh20sb", Rarity.COMMON, mage.cards.r.RayOfRevelation.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Ray of Revelation", "dz20sb", Rarity.COMMON, mage.cards.r.RayOfRevelation.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Recoup", "pk216", Rarity.UNCOMMON, mage.cards.r.Recoup.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Recoup", "pk216sb", Rarity.UNCOMMON, mage.cards.r.Recoup.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Renewed Faith", "dz50", Rarity.COMMON, mage.cards.r.RenewedFaith.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Renewed Faith", "dz50sb", Rarity.COMMON, mage.cards.r.RenewedFaith.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Roar of the Wurm", "dh266", Rarity.UNCOMMON, mage.cards.r.RoarOfTheWurm.class)); + cards.add(new SetCardInfo("Shadowblood Ridge", "pk326", Rarity.RARE, mage.cards.s.ShadowbloodRidge.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Shadowblood Ridge", "we326", Rarity.RARE, mage.cards.s.ShadowbloodRidge.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Sickening Dreams", "pk83sb", Rarity.UNCOMMON, mage.cards.s.SickeningDreams.class)); + cards.add(new SetCardInfo("Siege-Gang Commander", "we103", Rarity.RARE, mage.cards.s.SiegeGangCommander.class)); + cards.add(new SetCardInfo("Skirk Prospector", "we230", Rarity.COMMON, mage.cards.s.SkirkProspector.class)); + cards.add(new SetCardInfo("Skycloud Expanse", "dz327", Rarity.RARE, mage.cards.s.SkycloudExpanse.class)); + cards.add(new SetCardInfo("Smother", "pk170", Rarity.UNCOMMON, mage.cards.s.Smother.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Smother", "we170", Rarity.UNCOMMON, mage.cards.s.Smother.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Smother", "we170sb", Rarity.UNCOMMON, mage.cards.s.Smother.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Soul Feast", "pk165sb", Rarity.UNCOMMON, mage.cards.s.SoulFeast.class)); + cards.add(new SetCardInfo("Sparksmith", "we235", Rarity.COMMON, mage.cards.s.Sparksmith.class)); + cards.add(new SetCardInfo("Starstorm", "we328sb", Rarity.RARE, mage.cards.s.Starstorm.class)); + cards.add(new SetCardInfo("Stitch Together", "pk72", Rarity.UNCOMMON, mage.cards.s.StitchTogether.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Stitch Together", "pk72sb", Rarity.UNCOMMON, mage.cards.s.StitchTogether.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Stupefying Touch", "dh48sb", Rarity.UNCOMMON, mage.cards.s.StupefyingTouch.class)); + cards.add(new SetCardInfo("Sulfuric Vortex", "we106sb", Rarity.RARE, mage.cards.s.SulfuricVortex.class)); + cards.add(new SetCardInfo("Swamp", "pk339", Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", "pk340", Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", "pk341", Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", "we339", Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", "we340", Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", "we342", Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Symbiotic Wurm", "pk289", Rarity.RARE, mage.cards.s.SymbioticWurm.class)); + cards.add(new SetCardInfo("Undead Gladiator", "pk178", Rarity.RARE, mage.cards.u.UndeadGladiator.class)); + cards.add(new SetCardInfo("Unsummon", "dh112", Rarity.COMMON, mage.cards.u.Unsummon.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Unsummon", "dh112sb", Rarity.COMMON, mage.cards.u.Unsummon.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Vengeful Dreams", "dz21", Rarity.RARE, mage.cards.v.VengefulDreams.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Vengeful Dreams", "dz21sb", Rarity.RARE, mage.cards.v.VengefulDreams.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Visara the Dreadful", "pk179", Rarity.RARE, mage.cards.v.VisaraTheDreadful.class)); + cards.add(new SetCardInfo("Wild Mongrel", "dh283", Rarity.COMMON, mage.cards.w.WildMongrel.class)); + cards.add(new SetCardInfo("Wing Shards", "dz25sb", Rarity.UNCOMMON, mage.cards.w.WingShards.class)); + cards.add(new SetCardInfo("Wonder", "dh54", Rarity.UNCOMMON, mage.cards.w.Wonder.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Wonder", "dh54sb", Rarity.UNCOMMON, mage.cards.w.Wonder.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Wrath of God", "dz58", Rarity.RARE, mage.cards.w.WrathOfGod.class)); + cards.add(new SetCardInfo("Zombify", "pk174", Rarity.UNCOMMON, mage.cards.z.Zombify.class)); + } +} diff --git a/Mage.Sets/src/mage/sets/WorldChampionshipDecks2004.java b/Mage.Sets/src/mage/sets/WorldChampionshipDecks2004.java new file mode 100644 index 00000000000..160c9a8905b --- /dev/null +++ b/Mage.Sets/src/mage/sets/WorldChampionshipDecks2004.java @@ -0,0 +1,117 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/wc04 + */ +public class WorldChampionshipDecks2004 extends ExpansionSet { + + private static final WorldChampionshipDecks2004 instance = new WorldChampionshipDecks2004(); + + public static WorldChampionshipDecks2004 getInstance() { + return instance; + } + + private WorldChampionshipDecks2004() { + super("World Championship Decks 2004", "WC04", ExpansionSet.buildDate(2004, 9, 1), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = true; + + cards.add(new SetCardInfo("Akroma's Vengeance", "gn2", Rarity.RARE, mage.cards.a.AkromasVengeance.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Akroma's Vengeance", "jn2", Rarity.RARE, mage.cards.a.AkromasVengeance.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Ancient Den", "mb278", Rarity.COMMON, mage.cards.a.AncientDen.class)); + cards.add(new SetCardInfo("Annul", "ap29sb", Rarity.COMMON, mage.cards.a.Annul.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Annul", "gn29", Rarity.COMMON, mage.cards.a.Annul.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Arcbound Ravager", "ap100", Rarity.RARE, mage.cards.a.ArcboundRavager.class)); + cards.add(new SetCardInfo("Arcbound Worker", "ap104a", Rarity.COMMON, mage.cards.a.ArcboundWorker.class)); + cards.add(new SetCardInfo("Astral Slide", "jn4", Rarity.UNCOMMON, mage.cards.a.AstralSlide.class)); + cards.add(new SetCardInfo("Blinkmoth Nexus", "ap163", Rarity.RARE, mage.cards.b.BlinkmothNexus.class)); + cards.add(new SetCardInfo("Chrome Mox", "ap152", Rarity.RARE, mage.cards.c.ChromeMox.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Chrome Mox", "mb152", Rarity.RARE, mage.cards.c.ChromeMox.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Circle of Protection: Red", "jn13sb", Rarity.COMMON, mage.cards.c.CircleOfProtectionRed.class)); + cards.add(new SetCardInfo("Cloudpost", "gn280", Rarity.COMMON, mage.cards.c.Cloudpost.class)); + cards.add(new SetCardInfo("Condescend", "gn27", Rarity.COMMON, mage.cards.c.Condescend.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Condescend", "mb27", Rarity.COMMON, mage.cards.c.Condescend.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Cranial Plating", "ap113", Rarity.COMMON, mage.cards.c.CranialPlating.class)); + cards.add(new SetCardInfo("Darksteel Citadel", "mb164", Rarity.COMMON, mage.cards.d.DarksteelCitadel.class)); + cards.add(new SetCardInfo("Decree of Justice", "gn8", Rarity.RARE, mage.cards.d.DecreeOfJustice.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Decree of Justice", "jn8", Rarity.RARE, mage.cards.d.DecreeOfJustice.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Disciple of the Vault", "ap62a", Rarity.COMMON, mage.cards.d.DiscipleOfTheVault.class)); + cards.add(new SetCardInfo("Eternal Dragon", "gn12a", Rarity.RARE, mage.cards.e.EternalDragon.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Eternal Dragon", "jn12", Rarity.RARE, mage.cards.e.EternalDragon.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Eternal Witness", "jn86", Rarity.UNCOMMON, mage.cards.e.EternalWitness.class)); + cards.add(new SetCardInfo("Exalted Angel", "gn28", Rarity.RARE, mage.cards.e.ExaltedAngel.class)); + cards.add(new SetCardInfo("Fabricate", "mb35", Rarity.UNCOMMON, mage.cards.f.Fabricate.class)); + cards.add(new SetCardInfo("Fireball", "mb60", Rarity.UNCOMMON, mage.cards.f.Fireball.class)); + cards.add(new SetCardInfo("Flooded Strand", "gn316", Rarity.RARE, mage.cards.f.FloodedStrand.class)); + cards.add(new SetCardInfo("Forest", "jn347", Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", "jn348", Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", "jn350", Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Frogmite", "ap172", Rarity.COMMON, mage.cards.f.Frogmite.class)); + cards.add(new SetCardInfo("Furnace Dragon", "ap62sbb", Rarity.RARE, mage.cards.f.FurnaceDragon.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Furnace Dragon", "mb62sb", Rarity.RARE, mage.cards.f.FurnaceDragon.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Glimmervoid", "ap281", Rarity.RARE, mage.cards.g.Glimmervoid.class)); + cards.add(new SetCardInfo("Goblin Charbelcher", "mb176", Rarity.RARE, mage.cards.g.GoblinCharbelcher.class)); + cards.add(new SetCardInfo("Great Furnace", "ap282", Rarity.COMMON, mage.cards.g.GreatFurnace.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Great Furnace", "mb282", Rarity.COMMON, mage.cards.g.GreatFurnace.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", "gn335", Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", "gn336", Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", "gn337", Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Krark-Clan Ironworks", "mb134", Rarity.RARE, mage.cards.k.KrarkClanIronworks.class)); + cards.add(new SetCardInfo("Mana Leak", "gn89", Rarity.COMMON, mage.cards.m.ManaLeak.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mana Leak", "mb89sb", Rarity.COMMON, mage.cards.m.ManaLeak.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Myr Incubator", "mb212", Rarity.RARE, mage.cards.m.MyrIncubator.class)); + cards.add(new SetCardInfo("Ornithopter", "ap224", Rarity.UNCOMMON, mage.cards.o.Ornithopter.class)); + cards.add(new SetCardInfo("Oxidize", "jn79sb", Rarity.COMMON, mage.cards.o.Oxidize.class)); + cards.add(new SetCardInfo("Pacifism", "gn33", Rarity.COMMON, mage.cards.p.Pacifism.class)); + cards.add(new SetCardInfo("Pentad Prism", "mb143", Rarity.COMMON, mage.cards.p.PentadPrism.class)); + cards.add(new SetCardInfo("Plains", "gn331", Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", "gn332", Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", "gn333", Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", "jn332", Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", "jn333", Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", "jn334", Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plow Under", "jn272", Rarity.RARE, mage.cards.p.PlowUnder.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plow Under", "jn272sb", Rarity.RARE, mage.cards.p.PlowUnder.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Purge", "gn12sbb", Rarity.UNCOMMON, mage.cards.p.Purge.class)); + cards.add(new SetCardInfo("Pyroclasm", "mb210sb", Rarity.UNCOMMON, mage.cards.p.Pyroclasm.class)); + cards.add(new SetCardInfo("Rampant Growth", "jn274", Rarity.COMMON, mage.cards.r.RampantGrowth.class)); + cards.add(new SetCardInfo("Relic Barrier", "gn147sb", Rarity.UNCOMMON, mage.cards.r.RelicBarrier.class)); + cards.add(new SetCardInfo("Renewed Faith", "jn50", Rarity.COMMON, mage.cards.r.RenewedFaith.class)); + cards.add(new SetCardInfo("Rewind", "gn96", Rarity.UNCOMMON, mage.cards.r.Rewind.class)); + cards.add(new SetCardInfo("Rude Awakening", "jn92", Rarity.RARE, mage.cards.r.RudeAwakening.class)); + cards.add(new SetCardInfo("Scrabbling Claws", "gn237sb", Rarity.UNCOMMON, mage.cards.s.ScrabblingClaws.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Scrabbling Claws", "jn237", Rarity.UNCOMMON, mage.cards.s.ScrabblingClaws.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Seat of the Synod", "ap283", Rarity.COMMON, mage.cards.s.SeatOfTheSynod.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Seat of the Synod", "mb283", Rarity.COMMON, mage.cards.s.SeatOfTheSynod.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Secluded Steppe", "jn324", Rarity.COMMON, mage.cards.s.SecludedSteppe.class)); + cards.add(new SetCardInfo("Seething Song", "ap104sbb", Rarity.COMMON, mage.cards.s.SeethingSong.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Seething Song", "mb104sb", Rarity.COMMON, mage.cards.s.SeethingSong.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Serum Visions", "ap36sb", Rarity.COMMON, mage.cards.s.SerumVisions.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Serum Visions", "mb36", Rarity.COMMON, mage.cards.s.SerumVisions.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Shrapnel Blast", "ap106", Rarity.UNCOMMON, mage.cards.s.ShrapnelBlast.class)); + cards.add(new SetCardInfo("Somber Hoverguard", "ap51", Rarity.COMMON, mage.cards.s.SomberHoverguard.class)); + cards.add(new SetCardInfo("Stifle", "gn52sb", Rarity.RARE, mage.cards.s.Stifle.class)); + cards.add(new SetCardInfo("Talisman of Dominance", "mb253", Rarity.UNCOMMON, mage.cards.t.TalismanOfDominance.class)); + cards.add(new SetCardInfo("Talisman of Progress", "mb256", Rarity.UNCOMMON, mage.cards.t.TalismanOfProgress.class)); + cards.add(new SetCardInfo("Temple of the False God", "gn143", Rarity.UNCOMMON, mage.cards.t.TempleOfTheFalseGod.class)); + cards.add(new SetCardInfo("Thirst for Knowledge", "gn53", Rarity.COMMON, mage.cards.t.ThirstForKnowledge.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Thirst for Knowledge", "mb53", Rarity.UNCOMMON, mage.cards.t.ThirstForKnowledge.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Thoughtcast", "ap54", Rarity.COMMON, mage.cards.t.Thoughtcast.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Thoughtcast", "mb54", Rarity.COMMON, mage.cards.t.Thoughtcast.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Tranquil Thicket", "jn326", Rarity.COMMON, mage.cards.t.TranquilThicket.class)); + cards.add(new SetCardInfo("Tree of Tales", "mb285", Rarity.COMMON, mage.cards.t.TreeOfTales.class)); + cards.add(new SetCardInfo("Vault of Whispers", "ap286", Rarity.COMMON, mage.cards.v.VaultOfWhispers.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Vault of Whispers", "mb286", Rarity.COMMON, mage.cards.v.VaultOfWhispers.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Viridian Shaman", "jn139", Rarity.UNCOMMON, mage.cards.v.ViridianShaman.class)); + cards.add(new SetCardInfo("Wayfarer's Bauble", "gn165", Rarity.COMMON, mage.cards.w.WayfarersBauble.class)); + cards.add(new SetCardInfo("Welding Jar", "ap274", Rarity.COMMON, mage.cards.w.WeldingJar.class)); + cards.add(new SetCardInfo("Windswept Heath", "jn328", Rarity.RARE, mage.cards.w.WindsweptHeath.class)); + cards.add(new SetCardInfo("Wing Shards", "jn25", Rarity.UNCOMMON, mage.cards.w.WingShards.class)); + cards.add(new SetCardInfo("Wrath of God", "gn58", Rarity.RARE, mage.cards.w.WrathOfGod.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Wrath of God", "jn58", Rarity.RARE, mage.cards.w.WrathOfGod.class, NON_FULL_USE_VARIOUS)); + } +} From 2d68c60c31cd65e9707c8b4fa0adc3fca2bbb105 Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Mon, 20 Jan 2020 14:19:43 +0100 Subject: [PATCH 025/182] Add the Pro Tour Collector Set (PTC) set. --- .../dl/sources/ScryfallImageSupportCards.java | 2 +- .../src/mage/sets/ProTourCollectorSet.java | 332 ++++++++++++++++++ 2 files changed, 333 insertions(+), 1 deletion(-) create mode 100644 Mage.Sets/src/mage/sets/ProTourCollectorSet.java diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java index cb3c5ef6cf4..dc006d90de7 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java @@ -28,7 +28,7 @@ public class ScryfallImageSupportCards { private static final Set supportedSets = new ArraySet() { { // xmage set codes - // add("PTC"); // + add("PTC"); add("LEA"); add("LEB"); add("2ED"); diff --git a/Mage.Sets/src/mage/sets/ProTourCollectorSet.java b/Mage.Sets/src/mage/sets/ProTourCollectorSet.java new file mode 100644 index 00000000000..bed5cf1f1ba --- /dev/null +++ b/Mage.Sets/src/mage/sets/ProTourCollectorSet.java @@ -0,0 +1,332 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/ptc + */ +public class ProTourCollectorSet extends ExpansionSet { + + private static final ProTourCollectorSet instance = new ProTourCollectorSet(); + + public static ProTourCollectorSet getInstance() { + return instance; + } + + private ProTourCollectorSet() { + super("Pro Tour Collector Set", "PTC", ExpansionSet.buildDate(1996, 5, 1), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = true; + + + cards.add(new SetCardInfo("Abbey Gargoyles", "bl1sb", Rarity.UNCOMMON, mage.cards.a.AbbeyGargoyles.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Abbey Gargoyles", "shr1sb", Rarity.UNCOMMON, mage.cards.a.AbbeyGargoyles.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Adarkar Wastes", "ml351", Rarity.RARE, mage.cards.a.AdarkarWastes.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Adarkar Wastes", "shr351", Rarity.RARE, mage.cards.a.AdarkarWastes.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Aeolipile", "ml81sb", Rarity.RARE, mage.cards.a.Aeolipile.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Aeolipile", "pp81", Rarity.RARE, mage.cards.a.Aeolipile.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("An-Zerrin Ruins", "et48sb", Rarity.RARE, mage.cards.a.AnZerrinRuins.class)); + cards.add(new SetCardInfo("Anarchy", "mj49sb", Rarity.UNCOMMON, mage.cards.a.Anarchy.class)); + cards.add(new SetCardInfo("Apocalypse Chime", "et101sb", Rarity.RARE, mage.cards.a.ApocalypseChime.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Apocalypse Chime", "ll101sb", Rarity.RARE, mage.cards.a.ApocalypseChime.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Arenson's Aura", "shr3sb", Rarity.COMMON, mage.cards.a.ArensonsAura.class)); + cards.add(new SetCardInfo("Armageddon", "bl5", Rarity.RARE, mage.cards.a.Armageddon.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Armageddon", "pp5", Rarity.RARE, mage.cards.a.Armageddon.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Armageddon", "pp5sb", Rarity.RARE, mage.cards.a.Armageddon.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Ashes to Ashes", "ll33sb", Rarity.UNCOMMON, mage.cards.a.AshesToAshes.class)); + cards.add(new SetCardInfo("Autumn Willow", "bl83", Rarity.RARE, mage.cards.a.AutumnWillow.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Autumn Willow", "et83", Rarity.RARE, mage.cards.a.AutumnWillow.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Autumn Willow", "et83sb", Rarity.RARE, mage.cards.a.AutumnWillow.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Autumn Willow", "pp83", Rarity.RARE, mage.cards.a.AutumnWillow.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Autumn Willow", "pp83sb", Rarity.RARE, mage.cards.a.AutumnWillow.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Balance", "bl6", Rarity.RARE, mage.cards.b.Balance.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Balance", "et6", Rarity.RARE, mage.cards.b.Balance.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Balance", "mj6", Rarity.RARE, mage.cards.b.Balance.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Balance", "ml6", Rarity.RARE, mage.cards.b.Balance.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Balance", "pp6", Rarity.RARE, mage.cards.b.Balance.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Balance", "shr6", Rarity.RARE, mage.cards.b.Balance.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Barbed Sextant", "gb312", Rarity.COMMON, mage.cards.b.BarbedSextant.class)); + cards.add(new SetCardInfo("Birds of Paradise", "et234", Rarity.RARE, mage.cards.b.BirdsOfParadise.class)); + cards.add(new SetCardInfo("Black Vise", "bl299sb", Rarity.UNCOMMON, mage.cards.b.BlackVise.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Black Vise", "mj299", Rarity.UNCOMMON, mage.cards.b.BlackVise.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Blinking Spirit", "et8", Rarity.RARE, mage.cards.b.BlinkingSpirit.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Blinking Spirit", "ml8", Rarity.RARE, mage.cards.b.BlinkingSpirit.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Brushland", "bl352", Rarity.RARE, mage.cards.b.Brushland.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Brushland", "et352", Rarity.RARE, mage.cards.b.Brushland.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Brushland", "pp352", Rarity.RARE, mage.cards.b.Brushland.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Circle of Protection: Black", "shr14sb", Rarity.COMMON, mage.cards.c.CircleOfProtectionBlack.class)); + cards.add(new SetCardInfo("Circle of Protection: Green", "bl14sb", Rarity.COMMON, mage.cards.c.CircleOfProtectionGreen.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Circle of Protection: Green", "bl16sb", Rarity.COMMON, mage.cards.c.CircleOfProtectionGreen.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Circle of Protection: Red", "bl15sb", Rarity.COMMON, mage.cards.c.CircleOfProtectionRed.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Circle of Protection: Red", "bl17sb", Rarity.COMMON, mage.cards.c.CircleOfProtectionRed.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Circle of Protection: Red", "et17sb", Rarity.COMMON, mage.cards.c.CircleOfProtectionRed.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Circle of Protection: Red", "ml15sb", Rarity.COMMON, mage.cards.c.CircleOfProtectionRed.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Circle of Protection: Red", "ml17sb", Rarity.COMMON, mage.cards.c.CircleOfProtectionRed.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Circle of Protection: Red", "shr15sb", Rarity.COMMON, mage.cards.c.CircleOfProtectionRed.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("City of Brass", "et112", Rarity.RARE, mage.cards.c.CityOfBrass.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("City of Brass", "gb112", Rarity.RARE, mage.cards.c.CityOfBrass.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("City of Brass", "ll112sb", Rarity.RARE, mage.cards.c.CityOfBrass.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("City of Brass", "mj112", Rarity.RARE, mage.cards.c.CityOfBrass.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("City of Brass", "shr112", Rarity.RARE, mage.cards.c.CityOfBrass.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Control Magic", "ml64", Rarity.UNCOMMON, mage.cards.c.ControlMagic.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Control Magic", "ml64sb", Rarity.UNCOMMON, mage.cards.c.ControlMagic.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Counterspell", "ml65", Rarity.UNCOMMON, mage.cards.c.Counterspell.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Counterspell", "shr65", Rarity.UNCOMMON, mage.cards.c.Counterspell.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Dance of the Dead", "ll118", Rarity.UNCOMMON, mage.cards.d.DanceOfTheDead.class)); + cards.add(new SetCardInfo("Dark Banishing", "gb119sb", Rarity.COMMON, mage.cards.d.DarkBanishing.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Dark Banishing", "ll119", Rarity.COMMON, mage.cards.d.DarkBanishing.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Dark Ritual", "gb129", Rarity.COMMON, mage.cards.d.DarkRitual.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Dark Ritual", "ll129", Rarity.COMMON, mage.cards.d.DarkRitual.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Deflection", "ml81", Rarity.RARE, mage.cards.d.Deflection.class)); + cards.add(new SetCardInfo("Detonate", "mj184", Rarity.UNCOMMON, mage.cards.d.Detonate.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Detonate", "mj184sb", Rarity.UNCOMMON, mage.cards.d.Detonate.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Disenchant", "bl22", Rarity.COMMON, mage.cards.d.Disenchant.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Disenchant", "et22", Rarity.COMMON, mage.cards.d.Disenchant.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Disenchant", "ml22", Rarity.COMMON, mage.cards.d.Disenchant.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Disenchant", "pp22", Rarity.COMMON, mage.cards.d.Disenchant.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Disenchant", "pp22sb", Rarity.COMMON, mage.cards.d.Disenchant.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Disenchant", "shr22", Rarity.COMMON, mage.cards.d.Disenchant.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Disrupting Scepter", "et316sb", Rarity.RARE, mage.cards.d.DisruptingScepter.class)); + cards.add(new SetCardInfo("Divine Offering", "bl6sb", Rarity.COMMON, mage.cards.d.DivineOffering.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Divine Offering", "et6sb", Rarity.COMMON, mage.cards.d.DivineOffering.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Divine Offering", "ml6sb", Rarity.COMMON, mage.cards.d.DivineOffering.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Divine Offering", "pp6sb", Rarity.COMMON, mage.cards.d.DivineOffering.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Divine Offering", "shr6sb", Rarity.COMMON, mage.cards.d.DivineOffering.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Drain Life", "ll132", Rarity.COMMON, mage.cards.d.DrainLife.class)); + cards.add(new SetCardInfo("Dwarven Catapult", "et51sb", Rarity.UNCOMMON, mage.cards.d.DwarvenCatapult.class)); + cards.add(new SetCardInfo("Dwarven Ruins", "mj94", Rarity.UNCOMMON, mage.cards.d.DwarvenRuins.class)); + cards.add(new SetCardInfo("Earthquake", "et189", Rarity.RARE, mage.cards.e.Earthquake.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Earthquake", "mj189", Rarity.RARE, mage.cards.e.Earthquake.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Ebon Stronghold", "ll95", Rarity.UNCOMMON, mage.cards.e.EbonStronghold.class)); + cards.add(new SetCardInfo("Elkin Bottle", "mj317", Rarity.RARE, mage.cards.e.ElkinBottle.class)); + cards.add(new SetCardInfo("Elvish Archers", "pp243", Rarity.RARE, mage.cards.e.ElvishArchers.class)); + cards.add(new SetCardInfo("Energy Storm", "et24sb", Rarity.RARE, mage.cards.e.EnergyStorm.class)); + cards.add(new SetCardInfo("Erhnam Djinn", "bl64", Rarity.UNCOMMON, mage.cards.e.ErhnamDjinn.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Erhnam Djinn", "et64", Rarity.UNCOMMON, mage.cards.e.ErhnamDjinn.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Erhnam Djinn", "gb64", Rarity.UNCOMMON, mage.cards.e.ErhnamDjinn.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Erhnam Djinn", "pp64", Rarity.UNCOMMON, mage.cards.e.ErhnamDjinn.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Eron the Relentless", "mj73sb", Rarity.UNCOMMON, mage.cards.e.EronTheRelentless.class)); + cards.add(new SetCardInfo("Essence Filter", "pp233sb", Rarity.COMMON, mage.cards.e.EssenceFilter.class)); + cards.add(new SetCardInfo("Feldon's Cane", "ll50sb", Rarity.UNCOMMON, mage.cards.f.FeldonsCane.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Feldon's Cane", "mj50", Rarity.UNCOMMON, mage.cards.f.FeldonsCane.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Feldon's Cane", "ml50", Rarity.UNCOMMON, mage.cards.f.FeldonsCane.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Feldon's Cane", "shr50sb", Rarity.UNCOMMON, mage.cards.f.FeldonsCane.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Fellwar Stone", "bl319", Rarity.UNCOMMON, mage.cards.f.FellwarStone.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Fellwar Stone", "et319", Rarity.UNCOMMON, mage.cards.f.FellwarStone.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Fellwar Stone", "mj319", Rarity.UNCOMMON, mage.cards.f.FellwarStone.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Fellwar Stone", "pp319", Rarity.UNCOMMON, mage.cards.f.FellwarStone.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Fellwar Stone", "pp319sb", Rarity.UNCOMMON, mage.cards.f.FellwarStone.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Fireball", "et192", Rarity.COMMON, mage.cards.f.Fireball.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Fireball", "gb192", Rarity.COMMON, mage.cards.f.Fireball.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Fireball", "mj192", Rarity.COMMON, mage.cards.f.Fireball.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", "bl376", Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", "bl377", Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", "bl378", Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", "pp376", Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", "pp377", Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", "pp378", Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Fountain of Youth", "mj98sb", Rarity.COMMON, mage.cards.f.FountainOfYouth.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Fountain of Youth", "ml98", Rarity.COMMON, mage.cards.f.FountainOfYouth.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Fountain of Youth", "shr98sb", Rarity.COMMON, mage.cards.f.FountainOfYouth.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Fyndhorn Elves", "bl244", Rarity.COMMON, mage.cards.f.FyndhornElves.class)); + cards.add(new SetCardInfo("Hallowed Ground", "ml29", Rarity.UNCOMMON, mage.cards.h.HallowedGround.class)); + cards.add(new SetCardInfo("Havenwood Battleground", "bl96", Rarity.UNCOMMON, mage.cards.h.HavenwoodBattleground.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Havenwood Battleground", "mj96", Rarity.UNCOMMON, mage.cards.h.HavenwoodBattleground.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Havenwood Battleground", "pp96", Rarity.UNCOMMON, mage.cards.h.HavenwoodBattleground.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Howling Mine", "mj325", Rarity.RARE, mage.cards.h.HowlingMine.class)); + cards.add(new SetCardInfo("Hurricane", "pp251", Rarity.UNCOMMON, mage.cards.h.Hurricane.class)); + cards.add(new SetCardInfo("Hydroblast", "ml72sb", Rarity.COMMON, mage.cards.h.Hydroblast.class)); + cards.add(new SetCardInfo("Hymn to Tourach", "gb38a", Rarity.COMMON, mage.cards.h.HymnToTourach.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Hymn to Tourach", "gb38b", Rarity.COMMON, mage.cards.h.HymnToTourach.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Hymn to Tourach", "gb38c", Rarity.COMMON, mage.cards.h.HymnToTourach.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Hymn to Tourach", "gb38d", Rarity.COMMON, mage.cards.h.HymnToTourach.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Hymn to Tourach", "ll38a", Rarity.COMMON, mage.cards.h.HymnToTourach.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Hymn to Tourach", "ll38b", Rarity.COMMON, mage.cards.h.HymnToTourach.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Hymn to Tourach", "ll38c", Rarity.COMMON, mage.cards.h.HymnToTourach.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Hymn to Tourach", "ll38d", Rarity.COMMON, mage.cards.h.HymnToTourach.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Hypnotic Specter", "gb142", Rarity.UNCOMMON, mage.cards.h.HypnoticSpecter.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Hypnotic Specter", "ll142", Rarity.UNCOMMON, mage.cards.h.HypnoticSpecter.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Icatian Town", "et15", Rarity.RARE, mage.cards.i.IcatianTown.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Icatian Town", "et15sb", Rarity.RARE, mage.cards.i.IcatianTown.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Icy Manipulator", "bl322", Rarity.UNCOMMON, mage.cards.i.IcyManipulator.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Icy Manipulator", "et322", Rarity.UNCOMMON, mage.cards.i.IcyManipulator.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Icy Manipulator", "mj322", Rarity.UNCOMMON, mage.cards.i.IcyManipulator.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Icy Manipulator", "ml322", Rarity.UNCOMMON, mage.cards.i.IcyManipulator.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Icy Manipulator", "pp322", Rarity.UNCOMMON, mage.cards.i.IcyManipulator.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Icy Manipulator", "shr322", Rarity.UNCOMMON, mage.cards.i.IcyManipulator.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Ihsan's Shade", "gb53", Rarity.UNCOMMON, mage.cards.i.IhsansShade.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Ihsan's Shade", "gb53sb", Rarity.UNCOMMON, mage.cards.i.IhsansShade.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Incinerate", "et194", Rarity.COMMON, mage.cards.i.Incinerate.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Incinerate", "mj194", Rarity.COMMON, mage.cards.i.Incinerate.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", "ml367", Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", "ml368", Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", "ml369", Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", "shr367", Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", "shr368", Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", "shr369", Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Ivory Tower", "bl328", Rarity.RARE, mage.cards.i.IvoryTower.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Ivory Tower", "ll328", Rarity.RARE, mage.cards.i.IvoryTower.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Ivory Tower", "mj328", Rarity.RARE, mage.cards.i.IvoryTower.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Ivory Tower", "ml328", Rarity.RARE, mage.cards.i.IvoryTower.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Ivory Tower", "pp328sb", Rarity.RARE, mage.cards.i.IvoryTower.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Ivory Tower", "shr328", Rarity.RARE, mage.cards.i.IvoryTower.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Jalum Tome", "ll54", Rarity.UNCOMMON, mage.cards.j.JalumTome.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Jalum Tome", "ll54sb", Rarity.UNCOMMON, mage.cards.j.JalumTome.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Jayemdae Tome", "et331", Rarity.RARE, mage.cards.j.JayemdaeTome.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Jayemdae Tome", "ml331", Rarity.RARE, mage.cards.j.JayemdaeTome.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Jester's Cap", "mj324", Rarity.RARE, mage.cards.j.JestersCap.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Jester's Cap", "ml324sb", Rarity.RARE, mage.cards.j.JestersCap.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Karma", "bl32sb", Rarity.UNCOMMON, mage.cards.k.Karma.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Karma", "pp32sb", Rarity.UNCOMMON, mage.cards.k.Karma.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Karplusan Forest", "et356", Rarity.RARE, mage.cards.k.KarplusanForest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Karplusan Forest", "gb356", Rarity.RARE, mage.cards.k.KarplusanForest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Karplusan Forest", "mj356", Rarity.RARE, mage.cards.k.KarplusanForest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Knight of Stromgald", "gb138", Rarity.UNCOMMON, mage.cards.k.KnightOfStromgald.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Knight of Stromgald", "ll138", Rarity.UNCOMMON, mage.cards.k.KnightOfStromgald.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Land Tax", "bl34", Rarity.RARE, mage.cards.l.LandTax.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Land Tax", "et34", Rarity.RARE, mage.cards.l.LandTax.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Land Tax", "ml34", Rarity.RARE, mage.cards.l.LandTax.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Land Tax", "pp34", Rarity.RARE, mage.cards.l.LandTax.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Land Tax", "pp34sb", Rarity.RARE, mage.cards.l.LandTax.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Land Tax", "shr34", Rarity.RARE, mage.cards.l.LandTax.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Lava Tubes", "gb358", Rarity.RARE, mage.cards.l.LavaTubes.class)); + cards.add(new SetCardInfo("Lightning Bolt", "et208", Rarity.COMMON, mage.cards.l.LightningBolt.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Lightning Bolt", "gb208", Rarity.COMMON, mage.cards.l.LightningBolt.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Lightning Bolt", "mj208", Rarity.COMMON, mage.cards.l.LightningBolt.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Llanowar Elves", "bl261", Rarity.COMMON, mage.cards.l.LlanowarElves.class)); + cards.add(new SetCardInfo("Meekstone", "ll335sb", Rarity.RARE, mage.cards.m.Meekstone.class)); + cards.add(new SetCardInfo("Memory Lapse", "shr32asb", Rarity.COMMON, mage.cards.m.MemoryLapse.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Memory Lapse", "shr32bsb", Rarity.COMMON, mage.cards.m.MemoryLapse.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Millstone", "ml336", Rarity.RARE, mage.cards.m.Millstone.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Millstone", "shr336", Rarity.RARE, mage.cards.m.Millstone.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mishra's Factory", "et361", Rarity.UNCOMMON, mage.cards.m.MishrasFactory.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mishra's Factory", "gb361", Rarity.UNCOMMON, mage.cards.m.MishrasFactory.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mishra's Factory", "mj361", Rarity.UNCOMMON, mage.cards.m.MishrasFactory.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mishra's Factory", "ml361", Rarity.UNCOMMON, mage.cards.m.MishrasFactory.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mishra's Factory", "pp361", Rarity.UNCOMMON, mage.cards.m.MishrasFactory.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mishra's Factory", "shr361", Rarity.UNCOMMON, mage.cards.m.MishrasFactory.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", "et373", Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", "et374", Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", "et375", Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", "mj373", Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", "mj374", Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", "mj375", Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Necropotence", "ll154", Rarity.RARE, mage.cards.n.Necropotence.class)); + cards.add(new SetCardInfo("Nevinyrral's Disk", "et338sb", Rarity.RARE, mage.cards.n.NevinyrralsDisk.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Nevinyrral's Disk", "gb338sb", Rarity.RARE, mage.cards.n.NevinyrralsDisk.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Nevinyrral's Disk", "ll338", Rarity.RARE, mage.cards.n.NevinyrralsDisk.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Nevinyrral's Disk", "ll338sb", Rarity.RARE, mage.cards.n.NevinyrralsDisk.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Nevinyrral's Disk", "pp338", Rarity.RARE, mage.cards.n.NevinyrralsDisk.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Order of Leitbur", "bl16a", Rarity.COMMON, mage.cards.o.OrderOfLeitbur.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Order of Leitbur", "bl16b", Rarity.COMMON, mage.cards.o.OrderOfLeitbur.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Order of Leitbur", "bl16csb", Rarity.COMMON, mage.cards.o.OrderOfLeitbur.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Order of the Ebon Hand", "gb42a", Rarity.COMMON, mage.cards.o.OrderOfTheEbonHand.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Order of the Ebon Hand", "gb42b", Rarity.COMMON, mage.cards.o.OrderOfTheEbonHand.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Order of the Ebon Hand", "gb42c", Rarity.COMMON, mage.cards.o.OrderOfTheEbonHand.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Order of the Ebon Hand", "ll42a", Rarity.COMMON, mage.cards.o.OrderOfTheEbonHand.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Order of the Ebon Hand", "ll42b", Rarity.COMMON, mage.cards.o.OrderOfTheEbonHand.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Order of the Ebon Hand", "ll42c", Rarity.COMMON, mage.cards.o.OrderOfTheEbonHand.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Orgg", "et63", Rarity.RARE, mage.cards.o.Orgg.class)); + cards.add(new SetCardInfo("Plains", "bl364", Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", "bl365", Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", "bl366", Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", "et364", Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", "et365", Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", "et366", Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", "mj364", Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", "mj365", Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", "mj366", Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", "ml364", Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", "ml365", Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", "ml366", Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", "pp364", Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", "pp365", Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", "pp366", Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", "shr364", Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", "shr365", Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", "shr366", Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Power Sink", "shr93", Rarity.COMMON, mage.cards.p.PowerSink.class)); + cards.add(new SetCardInfo("Pyroblast", "mj213sb", Rarity.COMMON, mage.cards.p.Pyroblast.class)); + cards.add(new SetCardInfo("Recall", "ml24", Rarity.UNCOMMON, mage.cards.r.Recall.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Recall", "shr24", Rarity.UNCOMMON, mage.cards.r.Recall.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Red Elemental Blast", "gb218sb", Rarity.COMMON, mage.cards.r.RedElementalBlast.class)); + cards.add(new SetCardInfo("Reverse Damage", "et45sb", Rarity.RARE, mage.cards.r.ReverseDamage.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Reverse Damage", "pp45sb", Rarity.RARE, mage.cards.r.ReverseDamage.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Ring of Renewal", "et89sb", Rarity.RARE, mage.cards.r.RingOfRenewal.class)); + cards.add(new SetCardInfo("Ruins of Trokair", "bl100", Rarity.UNCOMMON, mage.cards.r.RuinsOfTrokair.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Ruins of Trokair", "ml100", Rarity.UNCOMMON, mage.cards.r.RuinsOfTrokair.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Ruins of Trokair", "pp100", Rarity.UNCOMMON, mage.cards.r.RuinsOfTrokair.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Ruins of Trokair", "shr100", Rarity.UNCOMMON, mage.cards.r.RuinsOfTrokair.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Safe Haven", "ll118sb", Rarity.RARE, mage.cards.s.SafeHaven.class)); + cards.add(new SetCardInfo("Sea Sprite", "ml38sb", Rarity.UNCOMMON, mage.cards.s.SeaSprite.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Sea Sprite", "shr38sb", Rarity.UNCOMMON, mage.cards.s.SeaSprite.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Sengir Vampire", "gb160", Rarity.UNCOMMON, mage.cards.s.SengirVampire.class)); + cards.add(new SetCardInfo("Serra Angel", "bl50", Rarity.UNCOMMON, mage.cards.s.SerraAngel.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Serra Angel", "et50", Rarity.UNCOMMON, mage.cards.s.SerraAngel.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Serrated Arrows", "et110sb", Rarity.COMMON, mage.cards.s.SerratedArrows.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Serrated Arrows", "gb110sb", Rarity.COMMON, mage.cards.s.SerratedArrows.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Serrated Arrows", "ll110", Rarity.COMMON, mage.cards.s.SerratedArrows.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Serrated Arrows", "ll110sb", Rarity.COMMON, mage.cards.s.SerratedArrows.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Serrated Arrows", "mj110sb", Rarity.COMMON, mage.cards.s.SerratedArrows.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Serrated Arrows", "ml110sb", Rarity.COMMON, mage.cards.s.SerratedArrows.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Serrated Arrows", "pp110sb", Rarity.COMMON, mage.cards.s.SerratedArrows.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Shatter", "gb219sb", Rarity.COMMON, mage.cards.s.Shatter.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Shatter", "mj219", Rarity.COMMON, mage.cards.s.Shatter.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Shatter", "mj219sb", Rarity.COMMON, mage.cards.s.Shatter.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Soul Burn", "ll161", Rarity.COMMON, mage.cards.s.SoulBurn.class)); + cards.add(new SetCardInfo("Spectral Bears", "bl98", Rarity.UNCOMMON, mage.cards.s.SpectralBears.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Spectral Bears", "pp98", Rarity.UNCOMMON, mage.cards.s.SpectralBears.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Spell Blast", "shr103", Rarity.COMMON, mage.cards.s.SpellBlast.class)); + cards.add(new SetCardInfo("Steal Artifact", "ml105sb", Rarity.UNCOMMON, mage.cards.s.StealArtifact.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Steal Artifact", "shr105sb", Rarity.UNCOMMON, mage.cards.s.StealArtifact.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Stormbind", "et304", Rarity.RARE, mage.cards.s.Stormbind.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Stormbind", "mj304", Rarity.RARE, mage.cards.s.Stormbind.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Strip Mine", "bl363", Rarity.UNCOMMON, mage.cards.s.StripMine.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Strip Mine", "ll363", Rarity.UNCOMMON, mage.cards.s.StripMine.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Strip Mine", "ml363", Rarity.UNCOMMON, mage.cards.s.StripMine.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Strip Mine", "pp363", Rarity.UNCOMMON, mage.cards.s.StripMine.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Stromgald Cabal", "ll166sb", Rarity.RARE, mage.cards.s.StromgaldCabal.class)); + cards.add(new SetCardInfo("Sulfurous Springs", "gb360", Rarity.RARE, mage.cards.s.SulfurousSprings.class)); + cards.add(new SetCardInfo("Svyelunite Temple", "ml102", Rarity.UNCOMMON, mage.cards.s.SvyeluniteTemple.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Svyelunite Temple", "shr102", Rarity.UNCOMMON, mage.cards.s.SvyeluniteTemple.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", "gb370", Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", "gb371", Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", "gb372", Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", "ll370", Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", "ll371", Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", "ll372", Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swords to Plowshares", "bl52", Rarity.UNCOMMON, mage.cards.s.SwordsToPlowshares.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swords to Plowshares", "et52", Rarity.UNCOMMON, mage.cards.s.SwordsToPlowshares.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swords to Plowshares", "et52sb", Rarity.UNCOMMON, mage.cards.s.SwordsToPlowshares.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swords to Plowshares", "mj52", Rarity.UNCOMMON, mage.cards.s.SwordsToPlowshares.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swords to Plowshares", "ml52", Rarity.UNCOMMON, mage.cards.s.SwordsToPlowshares.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swords to Plowshares", "pp52", Rarity.UNCOMMON, mage.cards.s.SwordsToPlowshares.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swords to Plowshares", "shr52", Rarity.UNCOMMON, mage.cards.s.SwordsToPlowshares.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Sylvan Library", "bl273", Rarity.RARE, mage.cards.s.SylvanLibrary.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Sylvan Library", "pp273", Rarity.RARE, mage.cards.s.SylvanLibrary.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("The Rack", "ll352sb", Rarity.UNCOMMON, mage.cards.t.TheRack.class)); + cards.add(new SetCardInfo("Torture", "ll59sb", Rarity.COMMON, mage.cards.t.Torture.class)); + cards.add(new SetCardInfo("Tranquility", "gb277sb", Rarity.COMMON, mage.cards.t.Tranquility.class)); + cards.add(new SetCardInfo("Truce", "shr20sb", Rarity.RARE, mage.cards.t.Truce.class)); + cards.add(new SetCardInfo("Whirling Dervish", "bl288sb", Rarity.UNCOMMON, mage.cards.w.WhirlingDervish.class)); + cards.add(new SetCardInfo("Winter Orb", "mj358", Rarity.RARE, mage.cards.w.WinterOrb.class)); + cards.add(new SetCardInfo("Wizards' School", "ml115", Rarity.UNCOMMON, mage.cards.w.WizardsSchool.class)); + cards.add(new SetCardInfo("Wrath of God", "bl58", Rarity.RARE, mage.cards.w.WrathOfGod.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Wrath of God", "bl58sb", Rarity.RARE, mage.cards.w.WrathOfGod.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Wrath of God", "et58", Rarity.RARE, mage.cards.w.WrathOfGod.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Wrath of God", "ml58", Rarity.RARE, mage.cards.w.WrathOfGod.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Wrath of God", "pp58", Rarity.RARE, mage.cards.w.WrathOfGod.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Wrath of God", "shr58", Rarity.RARE, mage.cards.w.WrathOfGod.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Zur's Weirding", "et110", Rarity.RARE, mage.cards.z.ZursWeirding.class)); + cards.add(new SetCardInfo("Zuran Orb", "bl350", Rarity.UNCOMMON, mage.cards.z.ZuranOrb.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Zuran Orb", "et350", Rarity.UNCOMMON, mage.cards.z.ZuranOrb.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Zuran Orb", "gb350", Rarity.UNCOMMON, mage.cards.z.ZuranOrb.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Zuran Orb", "ll350", Rarity.UNCOMMON, mage.cards.z.ZuranOrb.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Zuran Orb", "mj350", Rarity.UNCOMMON, mage.cards.z.ZuranOrb.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Zuran Orb", "ml350", Rarity.UNCOMMON, mage.cards.z.ZuranOrb.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Zuran Orb", "pp350", Rarity.UNCOMMON, mage.cards.z.ZuranOrb.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Zuran Orb", "shr350", Rarity.UNCOMMON, mage.cards.z.ZuranOrb.class, NON_FULL_USE_VARIOUS)); + } +} From aab0b2e2faf723e0ecda802ef40f0411db17a787 Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Mon, 20 Jan 2020 21:38:54 +0100 Subject: [PATCH 026/182] Split the cummulative Arena League set into the individual sets. - Removed set ARENA - Added sets PARL, PAL99, PAL00, PAL01, PAL02, PAL03, PAL04, PAL05, PAL06 --- .../java/mage/client/cards/DragCardGrid.java | 10 +- .../plugins/card/dl/sources/GathererSets.java | 1 - .../dl/sources/ScryfallImageSupportCards.java | 13 ++- Mage.Sets/src/mage/sets/ArenaLeague.java | 101 ------------------ Mage.Sets/src/mage/sets/ArenaLeague1996.java | 31 ++++++ Mage.Sets/src/mage/sets/ArenaLeague1999.java | 34 ++++++ Mage.Sets/src/mage/sets/ArenaLeague2000.java | 35 ++++++ Mage.Sets/src/mage/sets/ArenaLeague2001.java | 36 +++++++ Mage.Sets/src/mage/sets/ArenaLeague2002.java | 29 +++++ Mage.Sets/src/mage/sets/ArenaLeague2003.java | 32 ++++++ Mage.Sets/src/mage/sets/ArenaLeague2004.java | 41 +++++++ Mage.Sets/src/mage/sets/ArenaLeague2005.java | 32 ++++++ Mage.Sets/src/mage/sets/ArenaLeague2006.java | 33 ++++++ .../src/main/java/mage/verify/MtgJson.java | 2 +- 14 files changed, 325 insertions(+), 105 deletions(-) delete mode 100644 Mage.Sets/src/mage/sets/ArenaLeague.java create mode 100644 Mage.Sets/src/mage/sets/ArenaLeague1996.java create mode 100644 Mage.Sets/src/mage/sets/ArenaLeague1999.java create mode 100644 Mage.Sets/src/mage/sets/ArenaLeague2000.java create mode 100644 Mage.Sets/src/mage/sets/ArenaLeague2001.java create mode 100644 Mage.Sets/src/mage/sets/ArenaLeague2002.java create mode 100644 Mage.Sets/src/mage/sets/ArenaLeague2003.java create mode 100644 Mage.Sets/src/mage/sets/ArenaLeague2004.java create mode 100644 Mage.Sets/src/mage/sets/ArenaLeague2005.java create mode 100644 Mage.Sets/src/mage/sets/ArenaLeague2006.java diff --git a/Mage.Client/src/main/java/mage/client/cards/DragCardGrid.java b/Mage.Client/src/main/java/mage/client/cards/DragCardGrid.java index c383ae123e2..a9bbb968f30 100644 --- a/Mage.Client/src/main/java/mage/client/cards/DragCardGrid.java +++ b/Mage.Client/src/main/java/mage/client/cards/DragCardGrid.java @@ -1505,7 +1505,15 @@ public class DragCardGrid extends JPanel implements DragCardSource, DragCardTarg pimpedSets.put("JR", 1); pimpedSets.put("MPS", 1); pimpedSets.put("CLASH", 1); - pimpedSets.put("ARENA", 1); + pimpedSets.put("PARL", 1); + pimpedSets.put("PAL99", 1); + pimpedSets.put("PAL00", 1); + pimpedSets.put("PAL01", 1); + pimpedSets.put("PAL02", 1); + pimpedSets.put("PAL03", 1); + pimpedSets.put("PAL04", 1); + pimpedSets.put("PAL05", 1); + pimpedSets.put("PAL06", 1); pimpedSets.put("UGIN", 1); pimpedSets.put("WMCQ", 1); pimpedSets.put("PALP", 1); diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/GathererSets.java b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/GathererSets.java index ba94c153130..a71a365f761 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/GathererSets.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/GathererSets.java @@ -62,7 +62,6 @@ public class GathererSets implements Iterable { "ARC", "DD3EVG", "W16", "W17", // "PALP" -- Gatherer does not have the set Asia Pacific Land Program - // "ARENA" -- is't many set with different codes, not one // "ATH" -- has cards from many sets, symbol does not exist on gatherer // "CLASH", "CP", "DPA", "PELP", "FNMP", "GPX", "GRC", "GUR", "H17", "JR", "MBP", "MGDC", "MLP", "MPRP", "PTC", "SUS", "SWS", "WMCQ", // need to fix "H09", "PD2", "PD3", "UNH", "CM1", "V11", "A25", "UST", "IMA", "DD2", "EVG", "DDC", "DDE", "DDD", "8EB", "9EB", "CHR", "G18", "DD3GVL", "S00", "S99", "UGL" // ok diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java index dc006d90de7..64d36ac9792 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java @@ -65,7 +65,18 @@ public class ScryfallImageSupportCards { add("G99"); add("G00"); add("G01"); - + + // Arena League + add("PARL"); + add("PAL99"); + add("PAL00"); + add("PAL01"); + add("PAL02"); + add("PAL03"); + add("PAL04"); + add("PAL05"); + add("PAL06"); + // Other promo sets add("PWOR"); add("PWOS"); diff --git a/Mage.Sets/src/mage/sets/ArenaLeague.java b/Mage.Sets/src/mage/sets/ArenaLeague.java deleted file mode 100644 index 4eefe4b34c9..00000000000 --- a/Mage.Sets/src/mage/sets/ArenaLeague.java +++ /dev/null @@ -1,101 +0,0 @@ - -package mage.sets; - -import mage.cards.ExpansionSet; -import mage.constants.Rarity; -import mage.constants.SetType; - -/** - * - * @author fireshoes - */ -public final class ArenaLeague extends ExpansionSet { - - private static final ArenaLeague instance = new ArenaLeague(); - - public static ArenaLeague getInstance() { - return instance; - } - - private ArenaLeague() { - super("Arena League", "ARENA", ExpansionSet.buildDate(1996, 7, 4), SetType.PROMOTIONAL); - this.hasBoosters = false; - cards.add(new SetCardInfo("Arc Lightning", 42, Rarity.COMMON, mage.cards.a.ArcLightning.class)); - cards.add(new SetCardInfo("Bonesplitter", 52, Rarity.COMMON, mage.cards.b.Bonesplitter.class)); - cards.add(new SetCardInfo("Castigate", 80, Rarity.COMMON, mage.cards.c.Castigate.class)); - cards.add(new SetCardInfo("Chill", 19, Rarity.SPECIAL, mage.cards.c.Chill.class)); - cards.add(new SetCardInfo("Coiling Oracle", 82, Rarity.COMMON, mage.cards.c.CoilingOracle.class)); - cards.add(new SetCardInfo("Creeping Mold", 28, Rarity.SPECIAL, mage.cards.c.CreepingMold.class)); - cards.add(new SetCardInfo("Darksteel Ingot", 58, Rarity.COMMON, mage.cards.d.DarksteelIngot.class)); - cards.add(new SetCardInfo("Dauthi Slayer", 43, Rarity.SPECIAL, mage.cards.d.DauthiSlayer.class)); - cards.add(new SetCardInfo("Diabolic Edict", 37, Rarity.COMMON, mage.cards.d.DiabolicEdict.class)); - cards.add(new SetCardInfo("Disenchant", 6, Rarity.COMMON, mage.cards.d.Disenchant.class)); - cards.add(new SetCardInfo("Dismiss", 29, Rarity.SPECIAL, mage.cards.d.Dismiss.class)); - cards.add(new SetCardInfo("Duress", 17, Rarity.COMMON, mage.cards.d.Duress.class)); - cards.add(new SetCardInfo("Elvish Aberration", 51, Rarity.COMMON, mage.cards.e.ElvishAberration.class)); - cards.add(new SetCardInfo("Empyrial Armor", 31, Rarity.SPECIAL, mage.cards.e.EmpyrialArmor.class)); - cards.add(new SetCardInfo("Enlightened Tutor", 21, Rarity.SPECIAL, mage.cards.e.EnlightenedTutor.class)); - cards.add(new SetCardInfo("Fireball", 7, Rarity.SPECIAL, mage.cards.f.Fireball.class)); - cards.add(new SetCardInfo("Fling", 30, Rarity.COMMON, mage.cards.f.Fling.class)); - cards.add(new SetCardInfo("Forest", 5, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Forest", 12, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Forest", 27, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Forest", 36, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Forest", 40, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Forest", 49, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Forest", 57, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Forest", 71, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Forest", 79, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Gaea's Blessing", 38, Rarity.SPECIAL, mage.cards.g.GaeasBlessing.class)); - cards.add(new SetCardInfo("Genju of the Spires", 72, Rarity.SPECIAL, mage.cards.g.GenjuOfTheSpires.class)); - cards.add(new SetCardInfo("Glacial Ray", 60, Rarity.COMMON, mage.cards.g.GlacialRay.class)); - cards.add(new SetCardInfo("Island", 2, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Island", 9, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Island", 24, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Island", 33, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Island", 39, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Island", 46, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Island", 54, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Island", 68, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Island", 76, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Karn, Silver Golem", 16, Rarity.SPECIAL, mage.cards.k.KarnSilverGolem.class)); - cards.add(new SetCardInfo("Mana Leak", 44, Rarity.COMMON, mage.cards.m.ManaLeak.class)); - cards.add(new SetCardInfo("Man-o'-War", 41, Rarity.COMMON, mage.cards.m.ManOWar.class)); - cards.add(new SetCardInfo("Mountain", 4, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Mountain", 11, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Mountain", 26, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Mountain", 35, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Mountain", 48, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Mountain", 56, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Mountain", 70, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Mountain", 78, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Okina Nightwatch", 73, Rarity.COMMON, mage.cards.o.OkinaNightwatch.class)); - cards.add(new SetCardInfo("Pillage", 20, Rarity.SPECIAL, mage.cards.p.Pillage.class)); - cards.add(new SetCardInfo("Plains", 1, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Plains", 8, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Plains", 23, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Plains", 32, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Plains", 45, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Plains", 53, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Plains", 67, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Plains", 75, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Pouncing Jaguar", 13, Rarity.COMMON, mage.cards.p.PouncingJaguar.class)); - cards.add(new SetCardInfo("Rewind", 15, Rarity.COMMON, mage.cards.r.Rewind.class)); - cards.add(new SetCardInfo("Serum Visions", 59, Rarity.COMMON, mage.cards.s.SerumVisions.class)); - cards.add(new SetCardInfo("Skirk Marauder", 50, Rarity.COMMON, mage.cards.s.SkirkMarauder.class)); - cards.add(new SetCardInfo("Skittering Skirge", 14, Rarity.COMMON, mage.cards.s.SkitteringSkirge.class)); - cards.add(new SetCardInfo("Skyknight Legionnaire", 74, Rarity.COMMON, mage.cards.s.SkyknightLegionnaire.class)); - cards.add(new SetCardInfo("Stupor", 22, Rarity.COMMON, mage.cards.s.Stupor.class)); - cards.add(new SetCardInfo("Surging Flame", 83, Rarity.COMMON, mage.cards.s.SurgingFlame.class)); - cards.add(new SetCardInfo("Swamp", 3, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Swamp", 10, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Swamp", 25, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Swamp", 34, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Swamp", 47, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Swamp", 55, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Swamp", 69, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Swamp", 77, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Uktabi Orangutan", 18, Rarity.SPECIAL, mage.cards.u.UktabiOrangutan.class)); - cards.add(new SetCardInfo("Wee Dragonauts", 81, Rarity.COMMON, mage.cards.w.WeeDragonauts.class)); - } -} diff --git a/Mage.Sets/src/mage/sets/ArenaLeague1996.java b/Mage.Sets/src/mage/sets/ArenaLeague1996.java new file mode 100644 index 00000000000..8a7869dc87a --- /dev/null +++ b/Mage.Sets/src/mage/sets/ArenaLeague1996.java @@ -0,0 +1,31 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/parl + */ +public class ArenaLeague1996 extends ExpansionSet { + + private static final ArenaLeague1996 instance = new ArenaLeague1996(); + + public static ArenaLeague1996 getInstance() { + return instance; + } + + private ArenaLeague1996() { + super("Arena League 1996", "PARL", ExpansionSet.buildDate(1996, 8, 2), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = true; + + cards.add(new SetCardInfo("Disenchant", 6, Rarity.RARE, mage.cards.d.Disenchant.class)); + cards.add(new SetCardInfo("Fireball", 7, Rarity.RARE, mage.cards.f.Fireball.class)); + cards.add(new SetCardInfo("Forest", 5, Rarity.LAND, mage.cards.basiclands.Forest.class)); + cards.add(new SetCardInfo("Island", 2, Rarity.LAND, mage.cards.basiclands.Island.class)); + cards.add(new SetCardInfo("Mountain", 4, Rarity.LAND, mage.cards.basiclands.Mountain.class)); + cards.add(new SetCardInfo("Plains", 1, Rarity.LAND, mage.cards.basiclands.Plains.class)); + cards.add(new SetCardInfo("Swamp", 3, Rarity.LAND, mage.cards.basiclands.Swamp.class)); + } +} diff --git a/Mage.Sets/src/mage/sets/ArenaLeague1999.java b/Mage.Sets/src/mage/sets/ArenaLeague1999.java new file mode 100644 index 00000000000..9e90235cf98 --- /dev/null +++ b/Mage.Sets/src/mage/sets/ArenaLeague1999.java @@ -0,0 +1,34 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/pal99 + */ +public class ArenaLeague1999 extends ExpansionSet { + + private static final ArenaLeague1999 instance = new ArenaLeague1999(); + + public static ArenaLeague1999 getInstance() { + return instance; + } + + private ArenaLeague1999() { + super("Arena League 1999", "PAL99", ExpansionSet.buildDate(1999, 1, 1), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = true; + + cards.add(new SetCardInfo("Forest", 1, Rarity.LAND, mage.cards.basiclands.Forest.class)); + cards.add(new SetCardInfo("Island", 3, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", "3+", Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Karn, Silver Golem", 8, Rarity.RARE, mage.cards.k.KarnSilverGolem.class)); + cards.add(new SetCardInfo("Mountain", 5, Rarity.LAND, mage.cards.basiclands.Mountain.class)); + cards.add(new SetCardInfo("Plains", 7, Rarity.LAND, mage.cards.basiclands.Plains.class)); + cards.add(new SetCardInfo("Pouncing Jaguar", 2, Rarity.RARE, mage.cards.p.PouncingJaguar.class)); + cards.add(new SetCardInfo("Rewind", 6, Rarity.RARE, mage.cards.r.Rewind.class)); + cards.add(new SetCardInfo("Skittering Skirge", 4, Rarity.RARE, mage.cards.s.SkitteringSkirge.class)); + cards.add(new SetCardInfo("Swamp", 9, Rarity.LAND, mage.cards.basiclands.Swamp.class)); + } +} diff --git a/Mage.Sets/src/mage/sets/ArenaLeague2000.java b/Mage.Sets/src/mage/sets/ArenaLeague2000.java new file mode 100644 index 00000000000..66522658416 --- /dev/null +++ b/Mage.Sets/src/mage/sets/ArenaLeague2000.java @@ -0,0 +1,35 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/pal00 + */ +public class ArenaLeague2000 extends ExpansionSet { + + private static final ArenaLeague2000 instance = new ArenaLeague2000(); + + public static ArenaLeague2000 getInstance() { + return instance; + } + + private ArenaLeague2000() { + super("Arena League 2000", "PAL00", ExpansionSet.buildDate(2000, 1, 1), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = true; + + cards.add(new SetCardInfo("Chill", 4, Rarity.RARE, mage.cards.c.Chill.class)); + cards.add(new SetCardInfo("Duress", 2, Rarity.RARE, mage.cards.d.Duress.class)); + cards.add(new SetCardInfo("Enlightened Tutor", 6, Rarity.RARE, mage.cards.e.EnlightenedTutor.class)); + cards.add(new SetCardInfo("Forest", 12, Rarity.LAND, mage.cards.basiclands.Forest.class)); + cards.add(new SetCardInfo("Island", 9, Rarity.LAND, mage.cards.basiclands.Island.class)); + cards.add(new SetCardInfo("Mountain", 11, Rarity.LAND, mage.cards.basiclands.Mountain.class)); + cards.add(new SetCardInfo("Pillage", 5, Rarity.RARE, mage.cards.p.Pillage.class)); + cards.add(new SetCardInfo("Plains", 8, Rarity.LAND, mage.cards.basiclands.Plains.class)); + cards.add(new SetCardInfo("Stupor", 7, Rarity.RARE, mage.cards.s.Stupor.class)); + cards.add(new SetCardInfo("Swamp", 10, Rarity.LAND, mage.cards.basiclands.Swamp.class)); + cards.add(new SetCardInfo("Uktabi Orangutan", 3, Rarity.RARE, mage.cards.u.UktabiOrangutan.class)); + } +} diff --git a/Mage.Sets/src/mage/sets/ArenaLeague2001.java b/Mage.Sets/src/mage/sets/ArenaLeague2001.java new file mode 100644 index 00000000000..9ddcfa7f083 --- /dev/null +++ b/Mage.Sets/src/mage/sets/ArenaLeague2001.java @@ -0,0 +1,36 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/pal01 + */ +public class ArenaLeague2001 extends ExpansionSet { + + private static final ArenaLeague2001 instance = new ArenaLeague2001(); + + public static ArenaLeague2001 getInstance() { + return instance; + } + + private ArenaLeague2001() { + super("Arena League 2001", "PAL01", ExpansionSet.buildDate(2001, 1, 1), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = true; + + cards.add(new SetCardInfo("Creeping Mold", 2, Rarity.RARE, mage.cards.c.CreepingMold.class)); + cards.add(new SetCardInfo("Diabolic Edict", 10, Rarity.RARE, mage.cards.d.DiabolicEdict.class)); + cards.add(new SetCardInfo("Dismiss", 4, Rarity.RARE, mage.cards.d.Dismiss.class)); + cards.add(new SetCardInfo("Empyrial Armor", 8, Rarity.RARE, mage.cards.e.EmpyrialArmor.class)); + cards.add(new SetCardInfo("Fling", 6, Rarity.RARE, mage.cards.f.Fling.class)); + cards.add(new SetCardInfo("Forest", 1, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", 11, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Gaea's Blessing", 12, Rarity.RARE, mage.cards.g.GaeasBlessing.class)); + cards.add(new SetCardInfo("Island", 3, Rarity.LAND, mage.cards.basiclands.Island.class)); + cards.add(new SetCardInfo("Mountain", 5, Rarity.LAND, mage.cards.basiclands.Mountain.class)); + cards.add(new SetCardInfo("Plains", 7, Rarity.LAND, mage.cards.basiclands.Plains.class)); + cards.add(new SetCardInfo("Swamp", 9, Rarity.LAND, mage.cards.basiclands.Swamp.class)); + } +} diff --git a/Mage.Sets/src/mage/sets/ArenaLeague2002.java b/Mage.Sets/src/mage/sets/ArenaLeague2002.java new file mode 100644 index 00000000000..371b130cadb --- /dev/null +++ b/Mage.Sets/src/mage/sets/ArenaLeague2002.java @@ -0,0 +1,29 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/pal02 + */ +public class ArenaLeague2002 extends ExpansionSet { + + private static final ArenaLeague2002 instance = new ArenaLeague2002(); + + public static ArenaLeague2002 getInstance() { + return instance; + } + + private ArenaLeague2002() { + super("Arena League 2002", "PAL02", ExpansionSet.buildDate(2002, 1, 1), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = true; + + cards.add(new SetCardInfo("Arc Lightning", 3, Rarity.RARE, mage.cards.a.ArcLightning.class)); + cards.add(new SetCardInfo("Dauthi Slayer", 4, Rarity.RARE, mage.cards.d.DauthiSlayer.class)); + cards.add(new SetCardInfo("Island", 1, Rarity.LAND, mage.cards.basiclands.Island.class)); + cards.add(new SetCardInfo("Man-o'-War", 2, Rarity.RARE, mage.cards.m.ManOWar.class)); + cards.add(new SetCardInfo("Mana Leak", 5, Rarity.RARE, mage.cards.m.ManaLeak.class)); + } +} diff --git a/Mage.Sets/src/mage/sets/ArenaLeague2003.java b/Mage.Sets/src/mage/sets/ArenaLeague2003.java new file mode 100644 index 00000000000..71639edaf1d --- /dev/null +++ b/Mage.Sets/src/mage/sets/ArenaLeague2003.java @@ -0,0 +1,32 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/pal03 + */ +public class ArenaLeague2003 extends ExpansionSet { + + private static final ArenaLeague2003 instance = new ArenaLeague2003(); + + public static ArenaLeague2003 getInstance() { + return instance; + } + + private ArenaLeague2003() { + super("Arena League 2003", "PAL03", ExpansionSet.buildDate(2003, 1, 1), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = true; + + cards.add(new SetCardInfo("Bonesplitter", 8, Rarity.RARE, mage.cards.b.Bonesplitter.class)); + cards.add(new SetCardInfo("Elvish Aberration", 7, Rarity.RARE, mage.cards.e.ElvishAberration.class)); + cards.add(new SetCardInfo("Forest", 5, Rarity.LAND, mage.cards.basiclands.Forest.class)); + cards.add(new SetCardInfo("Island", 2, Rarity.LAND, mage.cards.basiclands.Island.class)); + cards.add(new SetCardInfo("Mountain", 4, Rarity.LAND, mage.cards.basiclands.Mountain.class)); + cards.add(new SetCardInfo("Plains", 1, Rarity.LAND, mage.cards.basiclands.Plains.class)); + cards.add(new SetCardInfo("Skirk Marauder", 6, Rarity.RARE, mage.cards.s.SkirkMarauder.class)); + cards.add(new SetCardInfo("Swamp", 3, Rarity.LAND, mage.cards.basiclands.Swamp.class)); + } +} diff --git a/Mage.Sets/src/mage/sets/ArenaLeague2004.java b/Mage.Sets/src/mage/sets/ArenaLeague2004.java new file mode 100644 index 00000000000..9c6345f092f --- /dev/null +++ b/Mage.Sets/src/mage/sets/ArenaLeague2004.java @@ -0,0 +1,41 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/pal04 + */ +public class ArenaLeague2004 extends ExpansionSet { + + private static final ArenaLeague2004 instance = new ArenaLeague2004(); + + public static ArenaLeague2004 getInstance() { + return instance; + } + + private ArenaLeague2004() { + super("Arena League 2004", "PAL04", ExpansionSet.buildDate(2004, 1, 1), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = true; + + // Not implemented + //cards.add(new SetCardInfo("Ashnod's Coupon", 14, Rarity.RARE, mage.cards.a.AshnodsCoupon.class)); + cards.add(new SetCardInfo("Booster Tutor", 11, Rarity.RARE, mage.cards.b.BoosterTutor.class)); + // Not implemented + //cards.add(new SetCardInfo("Circle of Protection: Art", 9, Rarity.RARE, mage.cards.c.CircleOfProtectionArt.class)); + cards.add(new SetCardInfo("Darksteel Ingot", 6, Rarity.RARE, mage.cards.d.DarksteelIngot.class)); + cards.add(new SetCardInfo("Forest", 5, Rarity.LAND, mage.cards.basiclands.Forest.class)); + cards.add(new SetCardInfo("Glacial Ray", 8, Rarity.RARE, mage.cards.g.GlacialRay.class)); + // Not implemented + // cards.add(new SetCardInfo("Goblin Mime", 12, Rarity.RARE, mage.cards.g.GoblinMime.class)); + // cards.add(new SetCardInfo("Granny's Payback", 13, Rarity.RARE, mage.cards.g.GrannysPayback.class)); + cards.add(new SetCardInfo("Island", 2, Rarity.LAND, mage.cards.basiclands.Island.class)); + cards.add(new SetCardInfo("Mise", 10, Rarity.RARE, mage.cards.m.Mise.class)); + cards.add(new SetCardInfo("Mountain", 4, Rarity.LAND, mage.cards.basiclands.Mountain.class)); + cards.add(new SetCardInfo("Plains", 1, Rarity.LAND, mage.cards.basiclands.Plains.class)); + cards.add(new SetCardInfo("Serum Visions", 7, Rarity.RARE, mage.cards.s.SerumVisions.class)); + cards.add(new SetCardInfo("Swamp", 3, Rarity.LAND, mage.cards.basiclands.Swamp.class)); + } +} diff --git a/Mage.Sets/src/mage/sets/ArenaLeague2005.java b/Mage.Sets/src/mage/sets/ArenaLeague2005.java new file mode 100644 index 00000000000..dff0c3aea23 --- /dev/null +++ b/Mage.Sets/src/mage/sets/ArenaLeague2005.java @@ -0,0 +1,32 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/pal05 + */ +public class ArenaLeague2005 extends ExpansionSet { + + private static final ArenaLeague2005 instance = new ArenaLeague2005(); + + public static ArenaLeague2005 getInstance() { + return instance; + } + + private ArenaLeague2005() { + super("Arena League 2005", "PAL05", ExpansionSet.buildDate(2005, 1, 1), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = true; + + cards.add(new SetCardInfo("Forest", 5, Rarity.LAND, mage.cards.basiclands.Forest.class)); + cards.add(new SetCardInfo("Genju of the Spires", 6, Rarity.RARE, mage.cards.g.GenjuOfTheSpires.class)); + cards.add(new SetCardInfo("Island", 2, Rarity.LAND, mage.cards.basiclands.Island.class)); + cards.add(new SetCardInfo("Mountain", 4, Rarity.LAND, mage.cards.basiclands.Mountain.class)); + cards.add(new SetCardInfo("Okina Nightwatch", 7, Rarity.RARE, mage.cards.o.OkinaNightwatch.class)); + cards.add(new SetCardInfo("Plains", 1, Rarity.LAND, mage.cards.basiclands.Plains.class)); + cards.add(new SetCardInfo("Skyknight Legionnaire", 8, Rarity.RARE, mage.cards.s.SkyknightLegionnaire.class)); + cards.add(new SetCardInfo("Swamp", 3, Rarity.LAND, mage.cards.basiclands.Swamp.class)); + } +} diff --git a/Mage.Sets/src/mage/sets/ArenaLeague2006.java b/Mage.Sets/src/mage/sets/ArenaLeague2006.java new file mode 100644 index 00000000000..ebfd6feb49c --- /dev/null +++ b/Mage.Sets/src/mage/sets/ArenaLeague2006.java @@ -0,0 +1,33 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/pal06 + */ +public class ArenaLeague2006 extends ExpansionSet { + + private static final ArenaLeague2006 instance = new ArenaLeague2006(); + + public static ArenaLeague2006 getInstance() { + return instance; + } + + private ArenaLeague2006() { + super("Arena League 2006", "PAL06", ExpansionSet.buildDate(2006, 1, 1), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = true; + + cards.add(new SetCardInfo("Castigate", 6, Rarity.RARE, mage.cards.c.Castigate.class)); + cards.add(new SetCardInfo("Coiling Oracle", 8, Rarity.RARE, mage.cards.c.CoilingOracle.class)); + cards.add(new SetCardInfo("Forest", 5, Rarity.LAND, mage.cards.basiclands.Forest.class)); + cards.add(new SetCardInfo("Island", 2, Rarity.LAND, mage.cards.basiclands.Island.class)); + cards.add(new SetCardInfo("Mountain", 4, Rarity.LAND, mage.cards.basiclands.Mountain.class)); + cards.add(new SetCardInfo("Plains", 1, Rarity.LAND, mage.cards.basiclands.Plains.class)); + cards.add(new SetCardInfo("Surging Flame", 9, Rarity.RARE, mage.cards.s.SurgingFlame.class)); + cards.add(new SetCardInfo("Swamp", 3, Rarity.LAND, mage.cards.basiclands.Swamp.class)); + cards.add(new SetCardInfo("Wee Dragonauts", 7, Rarity.RARE, mage.cards.w.WeeDragonauts.class)); + } +} diff --git a/Mage.Verify/src/main/java/mage/verify/MtgJson.java b/Mage.Verify/src/main/java/mage/verify/MtgJson.java index 28498f180cb..0b109857546 100644 --- a/Mage.Verify/src/main/java/mage/verify/MtgJson.java +++ b/Mage.Verify/src/main/java/mage/verify/MtgJson.java @@ -37,7 +37,7 @@ public final class MtgJson { mtgJsonToXMageCodes.put("pGPX", "GPX"); mtgJsonToXMageCodes.put("pFNM", "FNMP"); mtgJsonToXMageCodes.put("pELP", "PELP"); - mtgJsonToXMageCodes.put("pARL", "ARENA"); + mtgJsonToXMageCodes.put("pARL", "PARL"); // TODO: What about the other Arena League sets (1999-2006)? mtgJsonToXMageCodes.put("pALP", "PALP"); mtgJsonToXMageCodes.put("PO2", "P02"); mtgJsonToXMageCodes.put("DD3_JVC", "DD3JVC"); From 12d1bd4bb4721be2c2b211562d68d366c43508d6 Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Mon, 20 Jan 2020 22:31:26 +0100 Subject: [PATCH 027/182] Split the cummulative Friday Night Magic set into the individual sets. - Removed set FNMP - Added sets F00 - F17 (F18 does not contain cards, only tokens) --- .../java/mage/client/cards/DragCardGrid.java | 24 +- .../plugins/card/dl/sources/GathererSets.java | 2 +- .../card/dl/sources/MagidexImageSource.java | 1 - .../dl/sources/WizardCardsImageSource.java | 2 +- Mage.Sets/src/mage/sets/FridayNightMagic.java | 234 ------------------ .../src/mage/sets/FridayNightMagic2000.java | 35 +++ .../src/mage/sets/FridayNightMagic2001.java | 31 +++ .../src/mage/sets/FridayNightMagic2002.java | 36 +++ .../src/mage/sets/FridayNightMagic2003.java | 37 +++ .../src/mage/sets/FridayNightMagic2004.java | 36 +++ .../src/mage/sets/FridayNightMagic2005.java | 36 +++ .../src/mage/sets/FridayNightMagic2006.java | 36 +++ .../src/mage/sets/FridayNightMagic2007.java | 36 +++ .../src/mage/sets/FridayNightMagic2008.java | 36 +++ .../src/mage/sets/FridayNightMagic2009.java | 36 +++ .../src/mage/sets/FridayNightMagic2010.java | 36 +++ .../src/mage/sets/FridayNightMagic2011.java | 36 +++ .../src/mage/sets/FridayNightMagic2012.java | 36 +++ .../src/mage/sets/FridayNightMagic2013.java | 36 +++ .../src/mage/sets/FridayNightMagic2014.java | 36 +++ .../src/mage/sets/FridayNightMagic2015.java | 36 +++ .../src/mage/sets/FridayNightMagic2016.java | 36 +++ .../src/mage/sets/FridayNightMagic2017.java | 33 +++ .../serverside/deck/DeckValidatorTest.java | 2 +- 24 files changed, 666 insertions(+), 239 deletions(-) delete mode 100644 Mage.Sets/src/mage/sets/FridayNightMagic.java create mode 100644 Mage.Sets/src/mage/sets/FridayNightMagic2000.java create mode 100644 Mage.Sets/src/mage/sets/FridayNightMagic2001.java create mode 100644 Mage.Sets/src/mage/sets/FridayNightMagic2002.java create mode 100644 Mage.Sets/src/mage/sets/FridayNightMagic2003.java create mode 100644 Mage.Sets/src/mage/sets/FridayNightMagic2004.java create mode 100644 Mage.Sets/src/mage/sets/FridayNightMagic2005.java create mode 100644 Mage.Sets/src/mage/sets/FridayNightMagic2006.java create mode 100644 Mage.Sets/src/mage/sets/FridayNightMagic2007.java create mode 100644 Mage.Sets/src/mage/sets/FridayNightMagic2008.java create mode 100644 Mage.Sets/src/mage/sets/FridayNightMagic2009.java create mode 100644 Mage.Sets/src/mage/sets/FridayNightMagic2010.java create mode 100644 Mage.Sets/src/mage/sets/FridayNightMagic2011.java create mode 100644 Mage.Sets/src/mage/sets/FridayNightMagic2012.java create mode 100644 Mage.Sets/src/mage/sets/FridayNightMagic2013.java create mode 100644 Mage.Sets/src/mage/sets/FridayNightMagic2014.java create mode 100644 Mage.Sets/src/mage/sets/FridayNightMagic2015.java create mode 100644 Mage.Sets/src/mage/sets/FridayNightMagic2016.java create mode 100644 Mage.Sets/src/mage/sets/FridayNightMagic2017.java diff --git a/Mage.Client/src/main/java/mage/client/cards/DragCardGrid.java b/Mage.Client/src/main/java/mage/client/cards/DragCardGrid.java index a9bbb968f30..c2f6e81b021 100644 --- a/Mage.Client/src/main/java/mage/client/cards/DragCardGrid.java +++ b/Mage.Client/src/main/java/mage/client/cards/DragCardGrid.java @@ -1505,6 +1505,7 @@ public class DragCardGrid extends JPanel implements DragCardSource, DragCardTarg pimpedSets.put("JR", 1); pimpedSets.put("MPS", 1); pimpedSets.put("CLASH", 1); + // Arena League pimpedSets.put("PARL", 1); pimpedSets.put("PAL99", 1); pimpedSets.put("PAL00", 1); @@ -1518,7 +1519,28 @@ public class DragCardGrid extends JPanel implements DragCardSource, DragCardTarg pimpedSets.put("WMCQ", 1); pimpedSets.put("PALP", 1); pimpedSets.put("PELP", 1); - pimpedSets.put("FNMP", 1); + + //Friday Night Magic + pimpedSets.put("FNM", 1); + pimpedSets.put("F01", 1); + pimpedSets.put("F02", 1); + pimpedSets.put("F03", 1); + pimpedSets.put("F04", 1); + pimpedSets.put("F05", 1); + pimpedSets.put("F06", 1); + pimpedSets.put("F07", 1); + pimpedSets.put("F08", 1); + pimpedSets.put("F09", 1); + pimpedSets.put("F10", 1); + pimpedSets.put("F11", 1); + pimpedSets.put("F12", 1); + pimpedSets.put("F13", 1); + pimpedSets.put("F14", 1); + pimpedSets.put("F15", 1); + pimpedSets.put("F16", 1); + pimpedSets.put("F17", 1); + pimpedSets.put("F18", 1); + pimpedSets.put("MGDC", 1); pimpedSets.put("MPRP", 1); pimpedSets.put("EXP", 1); diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/GathererSets.java b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/GathererSets.java index a71a365f761..fb8170e937c 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/GathererSets.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/GathererSets.java @@ -63,7 +63,7 @@ public class GathererSets implements Iterable { "W16", "W17", // "PALP" -- Gatherer does not have the set Asia Pacific Land Program // "ATH" -- has cards from many sets, symbol does not exist on gatherer - // "CLASH", "CP", "DPA", "PELP", "FNMP", "GPX", "GRC", "GUR", "H17", "JR", "MBP", "MGDC", "MLP", "MPRP", "PTC", "SUS", "SWS", "WMCQ", // need to fix + // "CLASH", "CP", "DPA", "PELP", "GPX", "GRC", "GUR", "H17", "JR", "MBP", "MGDC", "MLP", "MPRP", "PTC", "SUS", "SWS", "WMCQ", // need to fix "H09", "PD2", "PD3", "UNH", "CM1", "V11", "A25", "UST", "IMA", "DD2", "EVG", "DDC", "DDE", "DDD", "8EB", "9EB", "CHR", "G18", "DD3GVL", "S00", "S99", "UGL" // ok // current testing }; diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/MagidexImageSource.java b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/MagidexImageSource.java index 03eca017770..d2c1eec6fa9 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/MagidexImageSource.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/MagidexImageSource.java @@ -17,7 +17,6 @@ public enum MagidexImageSource implements CardImageSource { MagidexImageSource() { supportedSets = new LinkedHashSet<>(); // supportedSets.add("PTC"); // Prerelease Events - // supportedSets.add("FNMP"); supportedSets.add("JR"); supportedSets.add("LEA"); supportedSets.add("LEB"); diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/WizardCardsImageSource.java b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/WizardCardsImageSource.java index 8ddd4947371..abe3e4c31d8 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/WizardCardsImageSource.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/WizardCardsImageSource.java @@ -334,7 +334,7 @@ public enum WizardCardsImageSource implements CardImageSource { setsAliases.put("EVG", "Duel Decks: Elves vs. Goblins"); setsAliases.put("EXO", "Exodus"); setsAliases.put("FEM", "Fallen Empires"); -// setsAliases.put("FNMP", "Friday Night Magic"); +// setsAliases.put("FNM", "Friday Night Magic"); setsAliases.put("FRF", "Fate Reforged"); setsAliases.put("FUT", "Future Sight"); setsAliases.put("GPT", "Guildpact"); diff --git a/Mage.Sets/src/mage/sets/FridayNightMagic.java b/Mage.Sets/src/mage/sets/FridayNightMagic.java deleted file mode 100644 index 05b66834813..00000000000 --- a/Mage.Sets/src/mage/sets/FridayNightMagic.java +++ /dev/null @@ -1,234 +0,0 @@ - -package mage.sets; - -import mage.cards.ExpansionSet; -import mage.constants.Rarity; -import mage.constants.SetType; - -/** - * - * @author fireshoes - */ -public final class FridayNightMagic extends ExpansionSet { - - private static final FridayNightMagic instance = new FridayNightMagic(); - - public static FridayNightMagic getInstance() { - return instance; - } - - private FridayNightMagic() { - super("Friday Night Magic", "FNMP", ExpansionSet.buildDate(2011, 6, 17), SetType.PROMOTIONAL); - this.hasBoosters = false; - this.hasBasicLands = false; - cards.add(new SetCardInfo("Abzan Beastmaster", 180, Rarity.UNCOMMON, mage.cards.a.AbzanBeastmaster.class)); - cards.add(new SetCardInfo("Accumulated Knowledge", 51, Rarity.COMMON, mage.cards.a.AccumulatedKnowledge.class)); - cards.add(new SetCardInfo("Acidic Slime", 145, Rarity.UNCOMMON, mage.cards.a.AcidicSlime.class)); - cards.add(new SetCardInfo("Aether Hub", 205, Rarity.SPECIAL, mage.cards.a.AetherHub.class)); - cards.add(new SetCardInfo("Albino Troll", 20, Rarity.UNCOMMON, mage.cards.a.AlbinoTroll.class)); - cards.add(new SetCardInfo("Anathemancer", 122, Rarity.UNCOMMON, mage.cards.a.Anathemancer.class)); - cards.add(new SetCardInfo("Ancient Grudge", 144, Rarity.COMMON, mage.cards.a.AncientGrudge.class)); - cards.add(new SetCardInfo("Ancient Ziggurat", 118, Rarity.UNCOMMON, mage.cards.a.AncientZiggurat.class)); - cards.add(new SetCardInfo("Anticipate", 187, Rarity.COMMON, mage.cards.a.Anticipate.class)); - cards.add(new SetCardInfo("Armadillo Cloak", 69, Rarity.COMMON, mage.cards.a.ArmadilloCloak.class)); - cards.add(new SetCardInfo("Arrogant Wurm", 77, Rarity.UNCOMMON, mage.cards.a.ArrogantWurm.class)); - cards.add(new SetCardInfo("Artisan of Kozilek", 131, Rarity.UNCOMMON, mage.cards.a.ArtisanOfKozilek.class)); - cards.add(new SetCardInfo("Astral Slide", 76, Rarity.UNCOMMON, mage.cards.a.AstralSlide.class)); - cards.add(new SetCardInfo("Aura of Silence", 26, Rarity.UNCOMMON, mage.cards.a.AuraOfSilence.class)); - cards.add(new SetCardInfo("Avacyn's Pilgrim", 147, Rarity.COMMON, mage.cards.a.AvacynsPilgrim.class)); - cards.add(new SetCardInfo("Avalanche Riders", 52, Rarity.UNCOMMON, mage.cards.a.AvalancheRiders.class)); - cards.add(new SetCardInfo("Banisher Priest", 166, Rarity.UNCOMMON, mage.cards.b.BanisherPriest.class)); - cards.add(new SetCardInfo("Banishing Light", 172, Rarity.UNCOMMON, mage.cards.b.BanishingLight.class)); - cards.add(new SetCardInfo("Basking Rootwalla", 83, Rarity.COMMON, mage.cards.b.BaskingRootwalla.class)); - cards.add(new SetCardInfo("Bile Blight", 171, Rarity.UNCOMMON, mage.cards.b.BileBlight.class)); - cards.add(new SetCardInfo("Black Knight", 22, Rarity.UNCOMMON, mage.cards.b.BlackKnight.class)); - cards.add(new SetCardInfo("Blastoderm", 59, Rarity.COMMON, mage.cards.b.Blastoderm.class)); - cards.add(new SetCardInfo("Blighted Fen", 191, Rarity.UNCOMMON, mage.cards.b.BlightedFen.class)); - cards.add(new SetCardInfo("Bloodbraid Elf", 119, Rarity.UNCOMMON, mage.cards.b.BloodbraidElf.class)); - cards.add(new SetCardInfo("Bottle Gnomes", 32, Rarity.UNCOMMON, mage.cards.b.BottleGnomes.class)); - cards.add(new SetCardInfo("Brain Maggot", 174, Rarity.UNCOMMON, mage.cards.b.BrainMaggot.class)); - cards.add(new SetCardInfo("Brainstorm", 55, Rarity.COMMON, mage.cards.b.Brainstorm.class)); - cards.add(new SetCardInfo("Browbeat", 113, Rarity.UNCOMMON, mage.cards.b.Browbeat.class)); - cards.add(new SetCardInfo("Cabal Coffers", 89, Rarity.UNCOMMON, mage.cards.c.CabalCoffers.class)); - cards.add(new SetCardInfo("Cabal Therapy", 60, Rarity.UNCOMMON, mage.cards.c.CabalTherapy.class)); - cards.add(new SetCardInfo("Call of the Conclave", 155, Rarity.UNCOMMON, mage.cards.c.CallOfTheConclave.class)); - cards.add(new SetCardInfo("Call the Bloodline", 199, Rarity.UNCOMMON, mage.cards.c.CallTheBloodline.class)); - cards.add(new SetCardInfo("Capsize", 35, Rarity.COMMON, mage.cards.c.Capsize.class)); - cards.add(new SetCardInfo("Carnophage", 16, Rarity.COMMON, mage.cards.c.Carnophage.class)); - cards.add(new SetCardInfo("Carrion Feeder", 49, Rarity.COMMON, mage.cards.c.CarrionFeeder.class)); - cards.add(new SetCardInfo("Chainer's Edict", 74, Rarity.UNCOMMON, mage.cards.c.ChainersEdict.class)); - cards.add(new SetCardInfo("Circle of Protection: Red", 63, Rarity.COMMON, mage.cards.c.CircleOfProtectionRed.class)); - cards.add(new SetCardInfo("Circular Logic", 75, Rarity.UNCOMMON, mage.cards.c.CircularLogic.class)); - cards.add(new SetCardInfo("Clash of Wills", 189, Rarity.UNCOMMON, mage.cards.c.ClashOfWills.class)); - cards.add(new SetCardInfo("Cloudpost", 120, Rarity.COMMON, mage.cards.c.Cloudpost.class)); - cards.add(new SetCardInfo("Contagion Clasp", 137, Rarity.UNCOMMON, mage.cards.c.ContagionClasp.class)); - cards.add(new SetCardInfo("Counterspell", 66, Rarity.COMMON, mage.cards.c.Counterspell.class)); - cards.add(new SetCardInfo("Crumbling Vestige", 195, Rarity.COMMON, mage.cards.c.CrumblingVestige.class)); - cards.add(new SetCardInfo("Crystalline Sliver", 34, Rarity.UNCOMMON, mage.cards.c.CrystallineSliver.class)); - cards.add(new SetCardInfo("Cultivate", 135, Rarity.COMMON, mage.cards.c.Cultivate.class)); - cards.add(new SetCardInfo("Deep Analysis", 81, Rarity.COMMON, mage.cards.d.DeepAnalysis.class)); - cards.add(new SetCardInfo("Desert", 99, Rarity.UNCOMMON, mage.cards.d.Desert.class)); - cards.add(new SetCardInfo("Despise", 141, Rarity.UNCOMMON, mage.cards.d.Despise.class)); - cards.add(new SetCardInfo("Dimir Charm", 159, Rarity.UNCOMMON, mage.cards.d.DimirCharm.class)); - cards.add(new SetCardInfo("Disdainful Stroke", 177, Rarity.COMMON, mage.cards.d.DisdainfulStroke.class)); - cards.add(new SetCardInfo("Disenchant", 31, Rarity.COMMON, mage.cards.d.Disenchant.class)); - cards.add(new SetCardInfo("Dismember", 143, Rarity.UNCOMMON, mage.cards.d.Dismember.class)); - cards.add(new SetCardInfo("Dissipate", 21, Rarity.UNCOMMON, mage.cards.d.Dissipate.class)); - cards.add(new SetCardInfo("Dissolve", 169, Rarity.UNCOMMON, mage.cards.d.Dissolve.class)); - cards.add(new SetCardInfo("Drain Life", 25, Rarity.COMMON, mage.cards.d.DrainLife.class)); - cards.add(new SetCardInfo("Duress", 65, Rarity.COMMON, mage.cards.d.Duress.class)); - cards.add(new SetCardInfo("Elves of Deep Shadow", 68, Rarity.COMMON, mage.cards.e.ElvesOfDeepShadow.class)); - cards.add(new SetCardInfo("Elvish Mystic", 165, Rarity.COMMON, mage.cards.e.ElvishMystic.class)); - cards.add(new SetCardInfo("Elvish Visionary", 121, Rarity.COMMON, mage.cards.e.ElvishVisionary.class)); - cards.add(new SetCardInfo("Encroaching Wastes", 167, Rarity.UNCOMMON, mage.cards.e.EncroachingWastes.class)); - cards.add(new SetCardInfo("Engineered Plague", 86, Rarity.UNCOMMON, mage.cards.e.EngineeredPlague.class)); - cards.add(new SetCardInfo("Eternal Witness", 94, Rarity.UNCOMMON, mage.cards.e.EternalWitness.class)); - cards.add(new SetCardInfo("Everflowing Chalice", 128, Rarity.UNCOMMON, mage.cards.e.EverflowingChalice.class)); - cards.add(new SetCardInfo("Evolving Wilds", 149, Rarity.COMMON, mage.cards.e.EvolvingWilds.class)); - cards.add(new SetCardInfo("Experiment One", 160, Rarity.UNCOMMON, mage.cards.e.ExperimentOne.class)); - cards.add(new SetCardInfo("Fact or Fiction", 61, Rarity.UNCOMMON, mage.cards.f.FactOrFiction.class)); - cards.add(new SetCardInfo("Fanatic of Xenagos", 173, Rarity.UNCOMMON, mage.cards.f.FanaticOfXenagos.class)); - cards.add(new SetCardInfo("Farseek", 154, Rarity.COMMON, mage.cards.f.Farseek.class)); - cards.add(new SetCardInfo("Fatal Push", 208, Rarity.SPECIAL, mage.cards.f.FatalPush.class)); - cards.add(new SetCardInfo("Fiery Temper", 198, Rarity.UNCOMMON, mage.cards.f.FieryTemper.class)); - cards.add(new SetCardInfo("Fireblast", 18, Rarity.COMMON, mage.cards.f.Fireblast.class)); - cards.add(new SetCardInfo("Firebolt", 80, Rarity.UNCOMMON, mage.cards.f.Firebolt.class)); - cards.add(new SetCardInfo("Fire // Ice", 79, Rarity.UNCOMMON, mage.cards.f.FireIce.class)); - cards.add(new SetCardInfo("Fireslinger", 24, Rarity.COMMON, mage.cards.f.Fireslinger.class)); - cards.add(new SetCardInfo("Flametongue Kavu", 58, Rarity.UNCOMMON, mage.cards.f.FlametongueKavu.class)); - cards.add(new SetCardInfo("Flaying Tendrils", 196, Rarity.UNCOMMON, mage.cards.f.FlayingTendrils.class)); - cards.add(new SetCardInfo("Forbid", 27, Rarity.UNCOMMON, mage.cards.f.Forbid.class)); - cards.add(new SetCardInfo("Forbidden Alchemy", 146, Rarity.COMMON, mage.cards.f.ForbiddenAlchemy.class)); - cards.add(new SetCardInfo("Force Spike", 91, Rarity.COMMON, mage.cards.f.ForceSpike.class)); - cards.add(new SetCardInfo("Fortune's Favor", 201, Rarity.COMMON, mage.cards.f.FortunesFavor.class)); - cards.add(new SetCardInfo("Frenzied Goblin", 176, Rarity.UNCOMMON, mage.cards.f.FrenziedGoblin.class)); - cards.add(new SetCardInfo("Frost Walker", 181, Rarity.UNCOMMON, mage.cards.f.FrostWalker.class)); - cards.add(new SetCardInfo("Gatekeeper of Malakir", 126, Rarity.UNCOMMON, mage.cards.g.GatekeeperOfMalakir.class)); - cards.add(new SetCardInfo("Gerrard's Verdict", 82, Rarity.UNCOMMON, mage.cards.g.GerrardsVerdict.class)); - cards.add(new SetCardInfo("Ghor-Clan Rampager", 161, Rarity.UNCOMMON, mage.cards.g.GhorClanRampager.class)); - cards.add(new SetCardInfo("Ghostly Prison", 117, Rarity.UNCOMMON, mage.cards.g.GhostlyPrison.class)); - cards.add(new SetCardInfo("Giant Growth", 8, Rarity.COMMON, mage.cards.g.GiantGrowth.class)); - cards.add(new SetCardInfo("Gitaxian Probe", 151, Rarity.COMMON, mage.cards.g.GitaxianProbe.class)); - cards.add(new SetCardInfo("Glistener Elf", 140, Rarity.COMMON, mage.cards.g.GlistenerElf.class)); - cards.add(new SetCardInfo("Goblin Bombardment", 37, Rarity.UNCOMMON, mage.cards.g.GoblinBombardment.class)); - cards.add(new SetCardInfo("Goblin Legionnaire", 85, Rarity.COMMON, mage.cards.g.GoblinLegionnaire.class)); - cards.add(new SetCardInfo("Goblin Ringleader", 87, Rarity.UNCOMMON, mage.cards.g.GoblinRingleader.class)); - cards.add(new SetCardInfo("Goblin Warchief", 72, Rarity.UNCOMMON, mage.cards.g.GoblinWarchief.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Goblin Warchief", 192, Rarity.UNCOMMON, mage.cards.g.GoblinWarchief.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Go for the Throat", 138, Rarity.UNCOMMON, mage.cards.g.GoForTheThroat.class)); - cards.add(new SetCardInfo("Grisly Salvage", 162, Rarity.COMMON, mage.cards.g.GrislySalvage.class)); - cards.add(new SetCardInfo("Hordeling Outburst", 178, Rarity.UNCOMMON, mage.cards.h.HordelingOutburst.class)); - cards.add(new SetCardInfo("Icy Manipulator", 67, Rarity.UNCOMMON, mage.cards.i.IcyManipulator.class)); - cards.add(new SetCardInfo("Impulse", 17, Rarity.COMMON, mage.cards.i.Impulse.class)); - cards.add(new SetCardInfo("Incendiary Flow", 202, Rarity.SPECIAL, mage.cards.i.IncendiaryFlow.class)); - cards.add(new SetCardInfo("Isochron Scepter", 102, Rarity.UNCOMMON, mage.cards.i.IsochronScepter.class)); - cards.add(new SetCardInfo("Izzet Charm", 157, Rarity.UNCOMMON, mage.cards.i.IzzetCharm.class)); - cards.add(new SetCardInfo("Jace's Ingenuity", 134, Rarity.UNCOMMON, mage.cards.j.JacesIngenuity.class)); - cards.add(new SetCardInfo("Jackal Pup", 14, Rarity.UNCOMMON, mage.cards.j.JackalPup.class)); - cards.add(new SetCardInfo("Judge's Familiar", 156, Rarity.UNCOMMON, mage.cards.j.JudgesFamiliar.class)); - cards.add(new SetCardInfo("Juggernaut", 62, Rarity.UNCOMMON, mage.cards.j.Juggernaut.class)); - cards.add(new SetCardInfo("Kird Ape", 64, Rarity.COMMON, mage.cards.k.KirdApe.class)); - cards.add(new SetCardInfo("Kitchen Finks", 106, Rarity.UNCOMMON, mage.cards.k.KitchenFinks.class)); - cards.add(new SetCardInfo("Krosan Grip", 123, Rarity.UNCOMMON, mage.cards.k.KrosanGrip.class)); - cards.add(new SetCardInfo("Krosan Tusker", 42, Rarity.COMMON, mage.cards.k.KrosanTusker.class)); - cards.add(new SetCardInfo("Krosan Warchief", 47, Rarity.UNCOMMON, mage.cards.k.KrosanWarchief.class)); - cards.add(new SetCardInfo("Life // Death", 78, Rarity.UNCOMMON, mage.cards.l.LifeDeath.class)); - cards.add(new SetCardInfo("Lightning Greaves", 111, Rarity.UNCOMMON, mage.cards.l.LightningGreaves.class)); - cards.add(new SetCardInfo("Lightning Rift", 48, Rarity.UNCOMMON, mage.cards.l.LightningRift.class)); - cards.add(new SetCardInfo("Lingering Souls", 148, Rarity.UNCOMMON, mage.cards.l.LingeringSouls.class)); - cards.add(new SetCardInfo("Llanowar Elves", 11, Rarity.COMMON, mage.cards.l.LlanowarElves.class)); - cards.add(new SetCardInfo("Lobotomy", 71, Rarity.UNCOMMON, mage.cards.l.Lobotomy.class)); - cards.add(new SetCardInfo("Longbow Archer", 3, Rarity.UNCOMMON, mage.cards.l.LongbowArcher.class)); - cards.add(new SetCardInfo("Magma Jet", 104, Rarity.UNCOMMON, mage.cards.m.MagmaJet.class)); - cards.add(new SetCardInfo("Magma Spray", 170, Rarity.COMMON, mage.cards.m.MagmaSpray.class)); - cards.add(new SetCardInfo("Merrow Reejerey", 107, Rarity.UNCOMMON, mage.cards.m.MerrowReejerey.class)); - cards.add(new SetCardInfo("Mind Warp", 5, Rarity.UNCOMMON, mage.cards.m.MindWarp.class)); - cards.add(new SetCardInfo("Mogg Fanatic", 29, Rarity.UNCOMMON, mage.cards.m.MoggFanatic.class)); - cards.add(new SetCardInfo("Mother of Runes", 54, Rarity.UNCOMMON, mage.cards.m.MotherOfRunes.class)); - cards.add(new SetCardInfo("Mulldrifter", 109, Rarity.COMMON, mage.cards.m.Mulldrifter.class)); - cards.add(new SetCardInfo("Murderous Redcap", 110, Rarity.UNCOMMON, mage.cards.m.MurderousRedcap.class)); - cards.add(new SetCardInfo("Muscle Sliver", 33, Rarity.COMMON, mage.cards.m.MuscleSliver.class)); - cards.add(new SetCardInfo("Myr Enforcer", 105, Rarity.COMMON, mage.cards.m.MyrEnforcer.class)); - cards.add(new SetCardInfo("Nissa's Pilgrimage", 188, Rarity.COMMON, mage.cards.n.NissasPilgrimage.class)); - cards.add(new SetCardInfo("Noose Constrictor", 200, Rarity.SPECIAL, mage.cards.n.NooseConstrictor.class)); - cards.add(new SetCardInfo("Oblivion Ring", 114, Rarity.COMMON, mage.cards.o.OblivionRing.class)); - cards.add(new SetCardInfo("Ophidian", 13, Rarity.UNCOMMON, mage.cards.o.Ophidian.class)); - cards.add(new SetCardInfo("Orator of Ojutai", 184, Rarity.UNCOMMON, mage.cards.o.OratorOfOjutai.class)); - cards.add(new SetCardInfo("Path to Exile", 182, Rarity.UNCOMMON, mage.cards.p.PathToExile.class)); - cards.add(new SetCardInfo("Pendelhaven", 96, Rarity.UNCOMMON, mage.cards.p.Pendelhaven.class)); - cards.add(new SetCardInfo("Pillar of Flame", 150, Rarity.COMMON, mage.cards.p.PillarOfFlame.class)); - cards.add(new SetCardInfo("Priest of Titania", 36, Rarity.COMMON, mage.cards.p.PriestOfTitania.class)); - cards.add(new SetCardInfo("Prodigal Sorcerer", 9, Rarity.COMMON, mage.cards.p.ProdigalSorcerer.class)); - cards.add(new SetCardInfo("Qasali Pridemage", 124, Rarity.COMMON, mage.cards.q.QasaliPridemage.class)); - cards.add(new SetCardInfo("Quirion Ranger", 15, Rarity.COMMON, mage.cards.q.QuirionRanger.class)); - cards.add(new SetCardInfo("Rakdos Cackler", 158, Rarity.UNCOMMON, mage.cards.r.RakdosCackler.class)); - cards.add(new SetCardInfo("Rancor", 56, Rarity.COMMON, mage.cards.r.Rancor.class)); - cards.add(new SetCardInfo("Reanimate", 53, Rarity.UNCOMMON, mage.cards.r.Reanimate.class)); - cards.add(new SetCardInfo("Reliquary Tower", 153, Rarity.UNCOMMON, mage.cards.r.ReliquaryTower.class)); - cards.add(new SetCardInfo("Remand", 92, Rarity.UNCOMMON, mage.cards.r.Remand.class)); - cards.add(new SetCardInfo("Renegade Rallier", 207, Rarity.SPECIAL, mage.cards.r.RenegadeRallier.class)); - cards.add(new SetCardInfo("Resurrection", 97, Rarity.UNCOMMON, mage.cards.r.Resurrection.class)); - cards.add(new SetCardInfo("Reverse Engineer", 206, Rarity.SPECIAL, mage.cards.r.ReverseEngineer.class)); - cards.add(new SetCardInfo("Rhox War Monk", 133, Rarity.UNCOMMON, mage.cards.r.RhoxWarMonk.class)); - cards.add(new SetCardInfo("Rift Bolt", 125, Rarity.COMMON, mage.cards.r.RiftBolt.class)); - cards.add(new SetCardInfo("Rise from the Tides", 197, Rarity.UNCOMMON, mage.cards.r.RiseFromTheTides.class)); - cards.add(new SetCardInfo("River Boa", 1, Rarity.UNCOMMON, mage.cards.r.RiverBoa.class)); - cards.add(new SetCardInfo("Roar of the Wurm", 90, Rarity.UNCOMMON, mage.cards.r.RoarOfTheWurm.class)); - cards.add(new SetCardInfo("Roast", 186, Rarity.UNCOMMON, mage.cards.r.Roast.class)); - cards.add(new SetCardInfo("Sakura-Tribe Elder", 115, Rarity.COMMON, mage.cards.s.SakuraTribeElder.class)); - cards.add(new SetCardInfo("Savage Lands", 139, Rarity.UNCOMMON, mage.cards.s.SavageLands.class)); - cards.add(new SetCardInfo("Scragnoth", 38, Rarity.UNCOMMON, mage.cards.s.Scragnoth.class)); - cards.add(new SetCardInfo("Seal of Cleansing", 57, Rarity.COMMON, mage.cards.s.SealOfCleansing.class)); - cards.add(new SetCardInfo("Searing Spear", 152, Rarity.COMMON, mage.cards.s.SearingSpear.class)); - cards.add(new SetCardInfo("Serrated Arrows", 101, Rarity.UNCOMMON, mage.cards.s.SerratedArrows.class)); - cards.add(new SetCardInfo("Serum Visions", 183, Rarity.COMMON, mage.cards.s.SerumVisions.class)); - cards.add(new SetCardInfo("Servo Exhibition", 203, Rarity.SPECIAL, mage.cards.s.ServoExhibition.class)); - cards.add(new SetCardInfo("Shock", 6, Rarity.COMMON, mage.cards.s.Shock.class)); - cards.add(new SetCardInfo("Shrapnel Blast", 103, Rarity.UNCOMMON, mage.cards.s.ShrapnelBlast.class)); - cards.add(new SetCardInfo("Silver Knight", 46, Rarity.UNCOMMON, mage.cards.s.SilverKnight.class)); - cards.add(new SetCardInfo("Sin Collector", 163, Rarity.UNCOMMON, mage.cards.s.SinCollector.class)); - cards.add(new SetCardInfo("Slice and Dice", 45, Rarity.UNCOMMON, mage.cards.s.SliceAndDice.class)); - cards.add(new SetCardInfo("Smash to Smithereens", 190, Rarity.COMMON, mage.cards.s.SmashToSmithereens.class)); - cards.add(new SetCardInfo("Smother", 39, Rarity.UNCOMMON, mage.cards.s.Smother.class)); - cards.add(new SetCardInfo("Soltari Priest", 19, Rarity.UNCOMMON, mage.cards.s.SoltariPriest.class)); - cards.add(new SetCardInfo("Sparksmith", 41, Rarity.COMMON, mage.cards.s.Sparksmith.class)); - cards.add(new SetCardInfo("Spatial Contortion", 194, Rarity.UNCOMMON, mage.cards.s.SpatialContortion.class)); - cards.add(new SetCardInfo("Spellstutter Sprite", 129, Rarity.COMMON, mage.cards.s.SpellstutterSprite.class)); - cards.add(new SetCardInfo("Spike Feeder", 28, Rarity.UNCOMMON, mage.cards.s.SpikeFeeder.class)); - cards.add(new SetCardInfo("Squadron Hawk", 132, Rarity.COMMON, mage.cards.s.SquadronHawk.class)); - cards.add(new SetCardInfo("Staunch Defenders", 7, Rarity.UNCOMMON, mage.cards.s.StaunchDefenders.class)); - cards.add(new SetCardInfo("Stoke the Flames", 175, Rarity.UNCOMMON, mage.cards.s.StokeTheFlames.class)); - cards.add(new SetCardInfo("Stone Rain", 10, Rarity.COMMON, mage.cards.s.StoneRain.class)); - cards.add(new SetCardInfo("Suspension Field", 179, Rarity.UNCOMMON, mage.cards.s.SuspensionField.class)); - cards.add(new SetCardInfo("Swords to Plowshares", 12, Rarity.UNCOMMON, mage.cards.s.SwordsToPlowshares.class)); - cards.add(new SetCardInfo("Sylvan Scrying", 193, Rarity.UNCOMMON, mage.cards.s.SylvanScrying.class)); - cards.add(new SetCardInfo("Tectonic Edge", 142, Rarity.UNCOMMON, mage.cards.t.TectonicEdge.class)); - cards.add(new SetCardInfo("Teetering Peaks", 136, Rarity.COMMON, mage.cards.t.TeeteringPeaks.class)); - cards.add(new SetCardInfo("Tendrils of Agony", 95, Rarity.UNCOMMON, mage.cards.t.TendrilsOfAgony.class)); - cards.add(new SetCardInfo("Terminate", 70, Rarity.COMMON, mage.cards.t.Terminate.class)); - cards.add(new SetCardInfo("Terror", 2, Rarity.COMMON, mage.cards.t.Terror.class)); - cards.add(new SetCardInfo("Thirst for Knowledge", 100, Rarity.UNCOMMON, mage.cards.t.ThirstForKnowledge.class)); - cards.add(new SetCardInfo("Tidehollow Sculler", 116, Rarity.UNCOMMON, mage.cards.t.TidehollowSculler.class)); - cards.add(new SetCardInfo("Tormented Hero", 168, Rarity.UNCOMMON, mage.cards.t.TormentedHero.class)); - cards.add(new SetCardInfo("Tormod's Crypt", 93, Rarity.UNCOMMON, mage.cards.t.TormodsCrypt.class)); - cards.add(new SetCardInfo("Treetop Village", 50, Rarity.UNCOMMON, mage.cards.t.TreetopVillage.class)); - cards.add(new SetCardInfo("Ultimate Price", 185, Rarity.UNCOMMON, mage.cards.u.UltimatePrice.class)); - cards.add(new SetCardInfo("Unlicensed Disintegration", 204, Rarity.SPECIAL, mage.cards.u.UnlicensedDisintegration.class)); - cards.add(new SetCardInfo("Volcanic Geyser", 4, Rarity.UNCOMMON, mage.cards.v.VolcanicGeyser.class)); - cards.add(new SetCardInfo("Wall of Blossoms", 23, Rarity.UNCOMMON, mage.cards.w.WallOfBlossoms.class)); - cards.add(new SetCardInfo("Wall of Omens", 130, Rarity.UNCOMMON, mage.cards.w.WallOfOmens.class)); - cards.add(new SetCardInfo("Wall of Roots", 98, Rarity.COMMON, mage.cards.w.WallOfRoots.class)); - cards.add(new SetCardInfo("Warleader's Helix", 164, Rarity.UNCOMMON, mage.cards.w.WarleadersHelix.class)); - cards.add(new SetCardInfo("Watchwolf", 112, Rarity.UNCOMMON, mage.cards.w.Watchwolf.class)); - cards.add(new SetCardInfo("Whipcorder", 40, Rarity.UNCOMMON, mage.cards.w.Whipcorder.class)); - cards.add(new SetCardInfo("White Knight", 30, Rarity.UNCOMMON, mage.cards.w.WhiteKnight.class)); - cards.add(new SetCardInfo("Wild Mongrel", 73, Rarity.COMMON, mage.cards.w.WildMongrel.class)); - cards.add(new SetCardInfo("Wild Nacatl", 127, Rarity.COMMON, mage.cards.w.WildNacatl.class)); - cards.add(new SetCardInfo("Willbender", 44, Rarity.UNCOMMON, mage.cards.w.Willbender.class)); - cards.add(new SetCardInfo("Wing Shards", 88, Rarity.UNCOMMON, mage.cards.w.WingShards.class)); - cards.add(new SetCardInfo("Withered Wretch", 43, Rarity.UNCOMMON, mage.cards.w.WitheredWretch.class)); - cards.add(new SetCardInfo("Wonder", 84, Rarity.UNCOMMON, mage.cards.w.Wonder.class)); - cards.add(new SetCardInfo("Wren's Run Vanquisher", 108, Rarity.UNCOMMON, mage.cards.w.WrensRunVanquisher.class)); - } - -} diff --git a/Mage.Sets/src/mage/sets/FridayNightMagic2000.java b/Mage.Sets/src/mage/sets/FridayNightMagic2000.java new file mode 100644 index 00000000000..65b0691d3df --- /dev/null +++ b/Mage.Sets/src/mage/sets/FridayNightMagic2000.java @@ -0,0 +1,35 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/fnm + */ +public class FridayNightMagic2000 extends ExpansionSet { + + private static final FridayNightMagic2000 instance = new FridayNightMagic2000(); + + public static FridayNightMagic2000 getInstance() { + return instance; + } + + private FridayNightMagic2000() { + super("Friday Night Magic 2000", "FNM", ExpansionSet.buildDate(2000, 1, 1), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Giant Growth", 8, Rarity.RARE, mage.cards.g.GiantGrowth.class)); + cards.add(new SetCardInfo("Llanowar Elves", 11, Rarity.RARE, mage.cards.l.LlanowarElves.class)); + cards.add(new SetCardInfo("Longbow Archer", 3, Rarity.RARE, mage.cards.l.LongbowArcher.class)); + cards.add(new SetCardInfo("Mind Warp", 5, Rarity.RARE, mage.cards.m.MindWarp.class)); + cards.add(new SetCardInfo("Prodigal Sorcerer", 9, Rarity.RARE, mage.cards.p.ProdigalSorcerer.class)); + cards.add(new SetCardInfo("River Boa", 1, Rarity.RARE, mage.cards.r.RiverBoa.class)); + cards.add(new SetCardInfo("Shock", 6, Rarity.RARE, mage.cards.s.Shock.class)); + cards.add(new SetCardInfo("Staunch Defenders", 12, Rarity.RARE, mage.cards.s.StaunchDefenders.class)); + cards.add(new SetCardInfo("Stone Rain", 10, Rarity.RARE, mage.cards.s.StoneRain.class)); + cards.add(new SetCardInfo("Terror", 2, Rarity.RARE, mage.cards.t.Terror.class)); + cards.add(new SetCardInfo("Volcanic Geyser", 4, Rarity.RARE, mage.cards.v.VolcanicGeyser.class)); + } +} diff --git a/Mage.Sets/src/mage/sets/FridayNightMagic2001.java b/Mage.Sets/src/mage/sets/FridayNightMagic2001.java new file mode 100644 index 00000000000..3b8c3512d10 --- /dev/null +++ b/Mage.Sets/src/mage/sets/FridayNightMagic2001.java @@ -0,0 +1,31 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/f01 + */ +public class FridayNightMagic2001 extends ExpansionSet { + + private static final FridayNightMagic2001 instance = new FridayNightMagic2001(); + + public static FridayNightMagic2001 getInstance() { + return instance; + } + + private FridayNightMagic2001() { + super("Friday Night Magic 2001", "F01", ExpansionSet.buildDate(2001, 1, 1), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Carnophage", 10, Rarity.RARE, mage.cards.c.Carnophage.class)); + cards.add(new SetCardInfo("Fireblast", 12, Rarity.RARE, mage.cards.f.Fireblast.class)); + cards.add(new SetCardInfo("Impulse", 11, Rarity.RARE, mage.cards.i.Impulse.class)); + cards.add(new SetCardInfo("Jackal Pup", 8, Rarity.RARE, mage.cards.j.JackalPup.class)); + cards.add(new SetCardInfo("Ophidian", 7, Rarity.RARE, mage.cards.o.Ophidian.class)); + cards.add(new SetCardInfo("Quirion Ranger", 9, Rarity.RARE, mage.cards.q.QuirionRanger.class)); + cards.add(new SetCardInfo("Swords to Plowshares", 6, Rarity.RARE, mage.cards.s.SwordsToPlowshares.class)); + } +} diff --git a/Mage.Sets/src/mage/sets/FridayNightMagic2002.java b/Mage.Sets/src/mage/sets/FridayNightMagic2002.java new file mode 100644 index 00000000000..629712e5097 --- /dev/null +++ b/Mage.Sets/src/mage/sets/FridayNightMagic2002.java @@ -0,0 +1,36 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/f02 + */ +public class FridayNightMagic2002 extends ExpansionSet { + + private static final FridayNightMagic2002 instance = new FridayNightMagic2002(); + + public static FridayNightMagic2002 getInstance() { + return instance; + } + + private FridayNightMagic2002() { + super("Friday Night Magic 2002", "F02", ExpansionSet.buildDate(2002, 1, 1), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Albino Troll", 2, Rarity.RARE, mage.cards.a.AlbinoTroll.class)); + cards.add(new SetCardInfo("Aura of Silence", 8, Rarity.RARE, mage.cards.a.AuraOfSilence.class)); + cards.add(new SetCardInfo("Black Knight", 4, Rarity.RARE, mage.cards.b.BlackKnight.class)); + cards.add(new SetCardInfo("Dissipate", 3, Rarity.RARE, mage.cards.d.Dissipate.class)); + cards.add(new SetCardInfo("Drain Life", 7, Rarity.RARE, mage.cards.d.DrainLife.class)); + cards.add(new SetCardInfo("Fireslinger", 6, Rarity.RARE, mage.cards.f.Fireslinger.class)); + cards.add(new SetCardInfo("Forbid", 9, Rarity.RARE, mage.cards.f.Forbid.class)); + cards.add(new SetCardInfo("Mogg Fanatic", 11, Rarity.RARE, mage.cards.m.MoggFanatic.class)); + cards.add(new SetCardInfo("Soltari Priest", 1, Rarity.RARE, mage.cards.s.SoltariPriest.class)); + cards.add(new SetCardInfo("Spike Feeder", 10, Rarity.RARE, mage.cards.s.SpikeFeeder.class)); + cards.add(new SetCardInfo("Wall of Blossoms", 5, Rarity.RARE, mage.cards.w.WallOfBlossoms.class)); + cards.add(new SetCardInfo("White Knight", 12, Rarity.RARE, mage.cards.w.WhiteKnight.class)); + } +} diff --git a/Mage.Sets/src/mage/sets/FridayNightMagic2003.java b/Mage.Sets/src/mage/sets/FridayNightMagic2003.java new file mode 100644 index 00000000000..27804bb87df --- /dev/null +++ b/Mage.Sets/src/mage/sets/FridayNightMagic2003.java @@ -0,0 +1,37 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/f03 + */ +public class FridayNightMagic2003 extends ExpansionSet { + + private static final FridayNightMagic2003 instance = new FridayNightMagic2003(); + + public static FridayNightMagic2003 getInstance() { + return instance; + } + + private FridayNightMagic2003() { + super("Friday Night Magic 2003", "F03", ExpansionSet.buildDate(2003, 1, 1), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Bottle Gnomes", 1, Rarity.RARE, mage.cards.b.BottleGnomes.class)); + cards.add(new SetCardInfo("Capsize", 4, Rarity.RARE, mage.cards.c.Capsize.class)); + cards.add(new SetCardInfo("Crystalline Sliver", 3, Rarity.RARE, mage.cards.c.CrystallineSliver.class)); + cards.add(new SetCardInfo("Disenchant", 13, Rarity.RARE, mage.cards.d.Disenchant.class)); + cards.add(new SetCardInfo("Goblin Bombardment", 6, Rarity.RARE, mage.cards.g.GoblinBombardment.class)); + cards.add(new SetCardInfo("Krosan Tusker", 11, Rarity.RARE, mage.cards.k.KrosanTusker.class)); + cards.add(new SetCardInfo("Muscle Sliver", 2, Rarity.RARE, mage.cards.m.MuscleSliver.class)); + cards.add(new SetCardInfo("Priest of Titania", 5, Rarity.RARE, mage.cards.p.PriestOfTitania.class)); + cards.add(new SetCardInfo("Scragnoth", 7, Rarity.RARE, mage.cards.s.Scragnoth.class)); + cards.add(new SetCardInfo("Smother", 8, Rarity.RARE, mage.cards.s.Smother.class)); + cards.add(new SetCardInfo("Sparksmith", 10, Rarity.RARE, mage.cards.s.Sparksmith.class)); + cards.add(new SetCardInfo("Whipcorder", 9, Rarity.RARE, mage.cards.w.Whipcorder.class)); + cards.add(new SetCardInfo("Withered Wretch", 12, Rarity.RARE, mage.cards.w.WitheredWretch.class)); + } +} diff --git a/Mage.Sets/src/mage/sets/FridayNightMagic2004.java b/Mage.Sets/src/mage/sets/FridayNightMagic2004.java new file mode 100644 index 00000000000..ef4445fec2e --- /dev/null +++ b/Mage.Sets/src/mage/sets/FridayNightMagic2004.java @@ -0,0 +1,36 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/f04 + */ +public class FridayNightMagic2004 extends ExpansionSet { + + private static final FridayNightMagic2004 instance = new FridayNightMagic2004(); + + public static FridayNightMagic2004 getInstance() { + return instance; + } + + private FridayNightMagic2004() { + super("Friday Night Magic 2004", "F04", ExpansionSet.buildDate(2004, 1, 1), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Accumulated Knowledge", 8, Rarity.RARE, mage.cards.a.AccumulatedKnowledge.class)); + cards.add(new SetCardInfo("Avalanche Riders", 9, Rarity.RARE, mage.cards.a.AvalancheRiders.class)); + cards.add(new SetCardInfo("Brainstorm", 12, Rarity.RARE, mage.cards.b.Brainstorm.class)); + cards.add(new SetCardInfo("Carrion Feeder", 6, Rarity.RARE, mage.cards.c.CarrionFeeder.class)); + cards.add(new SetCardInfo("Krosan Warchief", 4, Rarity.RARE, mage.cards.k.KrosanWarchief.class)); + cards.add(new SetCardInfo("Lightning Rift", 5, Rarity.RARE, mage.cards.l.LightningRift.class)); + cards.add(new SetCardInfo("Mother of Runes", 11, Rarity.RARE, mage.cards.m.MotherOfRunes.class)); + cards.add(new SetCardInfo("Reanimate", 10, Rarity.RARE, mage.cards.r.Reanimate.class)); + cards.add(new SetCardInfo("Silver Knight", 3, Rarity.RARE, mage.cards.s.SilverKnight.class)); + cards.add(new SetCardInfo("Slice and Dice", 2, Rarity.RARE, mage.cards.s.SliceAndDice.class)); + cards.add(new SetCardInfo("Treetop Village", 7, Rarity.RARE, mage.cards.t.TreetopVillage.class)); + cards.add(new SetCardInfo("Willbender", 1, Rarity.RARE, mage.cards.w.Willbender.class)); + } +} diff --git a/Mage.Sets/src/mage/sets/FridayNightMagic2005.java b/Mage.Sets/src/mage/sets/FridayNightMagic2005.java new file mode 100644 index 00000000000..3a8077b5413 --- /dev/null +++ b/Mage.Sets/src/mage/sets/FridayNightMagic2005.java @@ -0,0 +1,36 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/f05 + */ +public class FridayNightMagic2005 extends ExpansionSet { + + private static final FridayNightMagic2005 instance = new FridayNightMagic2005(); + + public static FridayNightMagic2005 getInstance() { + return instance; + } + + private FridayNightMagic2005() { + super("Friday Night Magic 2005", "F05", ExpansionSet.buildDate(2005, 1, 1), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Blastoderm", 4, Rarity.RARE, mage.cards.b.Blastoderm.class)); + cards.add(new SetCardInfo("Cabal Therapy", 5, Rarity.RARE, mage.cards.c.CabalTherapy.class)); + cards.add(new SetCardInfo("Circle of Protection: Red", 8, Rarity.RARE, mage.cards.c.CircleOfProtectionRed.class)); + cards.add(new SetCardInfo("Counterspell", 11, Rarity.RARE, mage.cards.c.Counterspell.class)); + cards.add(new SetCardInfo("Duress", 10, Rarity.RARE, mage.cards.d.Duress.class)); + cards.add(new SetCardInfo("Fact or Fiction", 6, Rarity.RARE, mage.cards.f.FactOrFiction.class)); + cards.add(new SetCardInfo("Flametongue Kavu", 3, Rarity.RARE, mage.cards.f.FlametongueKavu.class)); + cards.add(new SetCardInfo("Icy Manipulator", 12, Rarity.RARE, mage.cards.i.IcyManipulator.class)); + cards.add(new SetCardInfo("Juggernaut", 7, Rarity.RARE, mage.cards.j.Juggernaut.class)); + cards.add(new SetCardInfo("Kird Ape", 9, Rarity.RARE, mage.cards.k.KirdApe.class)); + cards.add(new SetCardInfo("Rancor", 1, Rarity.RARE, mage.cards.r.Rancor.class)); + cards.add(new SetCardInfo("Seal of Cleansing", 2, Rarity.RARE, mage.cards.s.SealOfCleansing.class)); + } +} diff --git a/Mage.Sets/src/mage/sets/FridayNightMagic2006.java b/Mage.Sets/src/mage/sets/FridayNightMagic2006.java new file mode 100644 index 00000000000..f2ddb443e2d --- /dev/null +++ b/Mage.Sets/src/mage/sets/FridayNightMagic2006.java @@ -0,0 +1,36 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/f06 + */ +public class FridayNightMagic2006 extends ExpansionSet { + + private static final FridayNightMagic2006 instance = new FridayNightMagic2006(); + + public static FridayNightMagic2006 getInstance() { + return instance; + } + + private FridayNightMagic2006() { + super("Friday Night Magic 2006", "F06", ExpansionSet.buildDate(2006, 1, 1), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Armadillo Cloak", 2, Rarity.RARE, mage.cards.a.ArmadilloCloak.class)); + cards.add(new SetCardInfo("Arrogant Wurm", 10, Rarity.RARE, mage.cards.a.ArrogantWurm.class)); + cards.add(new SetCardInfo("Astral Slide", 9, Rarity.RARE, mage.cards.a.AstralSlide.class)); + cards.add(new SetCardInfo("Chainer's Edict", 7, Rarity.RARE, mage.cards.c.ChainersEdict.class)); + cards.add(new SetCardInfo("Circular Logic", 8, Rarity.RARE, mage.cards.c.CircularLogic.class)); + cards.add(new SetCardInfo("Elves of Deep Shadow", 1, Rarity.RARE, mage.cards.e.ElvesOfDeepShadow.class)); + cards.add(new SetCardInfo("Fire // Ice", "12a", Rarity.RARE, mage.cards.f.FireIce.class)); + cards.add(new SetCardInfo("Goblin Warchief", 5, Rarity.RARE, mage.cards.g.GoblinWarchief.class)); + cards.add(new SetCardInfo("Life // Death", "11a", Rarity.RARE, mage.cards.l.LifeDeath.class)); + cards.add(new SetCardInfo("Lobotomy", 4, Rarity.RARE, mage.cards.l.Lobotomy.class)); + cards.add(new SetCardInfo("Terminate", 3, Rarity.RARE, mage.cards.t.Terminate.class)); + cards.add(new SetCardInfo("Wild Mongrel", 6, Rarity.RARE, mage.cards.w.WildMongrel.class)); + } +} diff --git a/Mage.Sets/src/mage/sets/FridayNightMagic2007.java b/Mage.Sets/src/mage/sets/FridayNightMagic2007.java new file mode 100644 index 00000000000..363c7b133aa --- /dev/null +++ b/Mage.Sets/src/mage/sets/FridayNightMagic2007.java @@ -0,0 +1,36 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/f07 + */ +public class FridayNightMagic2007 extends ExpansionSet { + + private static final FridayNightMagic2007 instance = new FridayNightMagic2007(); + + public static FridayNightMagic2007 getInstance() { + return instance; + } + + private FridayNightMagic2007() { + super("Friday Night Magic 2007", "F07", ExpansionSet.buildDate(2007, 1, 1), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Basking Rootwalla", 4, Rarity.RARE, mage.cards.b.BaskingRootwalla.class)); + cards.add(new SetCardInfo("Cabal Coffers", 10, Rarity.RARE, mage.cards.c.CabalCoffers.class)); + cards.add(new SetCardInfo("Deep Analysis", 2, Rarity.RARE, mage.cards.d.DeepAnalysis.class)); + cards.add(new SetCardInfo("Engineered Plague", 7, Rarity.RARE, mage.cards.e.EngineeredPlague.class)); + cards.add(new SetCardInfo("Firebolt", 1, Rarity.RARE, mage.cards.f.Firebolt.class)); + cards.add(new SetCardInfo("Force Spike", 12, Rarity.RARE, mage.cards.f.ForceSpike.class)); + cards.add(new SetCardInfo("Gerrard's Verdict", 3, Rarity.RARE, mage.cards.g.GerrardsVerdict.class)); + cards.add(new SetCardInfo("Goblin Legionnaire", 6, Rarity.RARE, mage.cards.g.GoblinLegionnaire.class)); + cards.add(new SetCardInfo("Goblin Ringleader", 8, Rarity.RARE, mage.cards.g.GoblinRingleader.class)); + cards.add(new SetCardInfo("Roar of the Wurm", 11, Rarity.RARE, mage.cards.r.RoarOfTheWurm.class)); + cards.add(new SetCardInfo("Wing Shards", 9, Rarity.RARE, mage.cards.w.WingShards.class)); + cards.add(new SetCardInfo("Wonder", 5, Rarity.RARE, mage.cards.w.Wonder.class)); + } +} diff --git a/Mage.Sets/src/mage/sets/FridayNightMagic2008.java b/Mage.Sets/src/mage/sets/FridayNightMagic2008.java new file mode 100644 index 00000000000..55b64cfc815 --- /dev/null +++ b/Mage.Sets/src/mage/sets/FridayNightMagic2008.java @@ -0,0 +1,36 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/f08 + */ +public class FridayNightMagic2008 extends ExpansionSet { + + private static final FridayNightMagic2008 instance = new FridayNightMagic2008(); + + public static FridayNightMagic2008 getInstance() { + return instance; + } + + private FridayNightMagic2008() { + super("Friday Night Magic 2008", "F08", ExpansionSet.buildDate(2008, 1, 1), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Desert", 8, Rarity.RARE, mage.cards.d.Desert.class)); + cards.add(new SetCardInfo("Eternal Witness", 3, Rarity.RARE, mage.cards.e.EternalWitness.class)); + cards.add(new SetCardInfo("Isochron Scepter", 11, Rarity.RARE, mage.cards.i.IsochronScepter.class)); + cards.add(new SetCardInfo("Pendelhaven", 5, Rarity.RARE, mage.cards.p.Pendelhaven.class)); + cards.add(new SetCardInfo("Remand", 1, Rarity.RARE, mage.cards.r.Remand.class)); + cards.add(new SetCardInfo("Resurrection", 6, Rarity.RARE, mage.cards.r.Resurrection.class)); + cards.add(new SetCardInfo("Serrated Arrows", 10, Rarity.RARE, mage.cards.s.SerratedArrows.class)); + cards.add(new SetCardInfo("Shrapnel Blast", 12, Rarity.RARE, mage.cards.s.ShrapnelBlast.class)); + cards.add(new SetCardInfo("Tendrils of Agony", 4, Rarity.RARE, mage.cards.t.TendrilsOfAgony.class)); + cards.add(new SetCardInfo("Thirst for Knowledge", 9, Rarity.RARE, mage.cards.t.ThirstForKnowledge.class)); + cards.add(new SetCardInfo("Tormod's Crypt", 2, Rarity.RARE, mage.cards.t.TormodsCrypt.class)); + cards.add(new SetCardInfo("Wall of Roots", 7, Rarity.RARE, mage.cards.w.WallOfRoots.class)); + } +} diff --git a/Mage.Sets/src/mage/sets/FridayNightMagic2009.java b/Mage.Sets/src/mage/sets/FridayNightMagic2009.java new file mode 100644 index 00000000000..292113a0f44 --- /dev/null +++ b/Mage.Sets/src/mage/sets/FridayNightMagic2009.java @@ -0,0 +1,36 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/f09 + */ +public class FridayNightMagic2009 extends ExpansionSet { + + private static final FridayNightMagic2009 instance = new FridayNightMagic2009(); + + public static FridayNightMagic2009 getInstance() { + return instance; + } + + private FridayNightMagic2009() { + super("Friday Night Magic 2009", "F09", ExpansionSet.buildDate(2009, 1, 1), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Browbeat", 10, Rarity.RARE, mage.cards.b.Browbeat.class)); + cards.add(new SetCardInfo("Kitchen Finks", 3, Rarity.RARE, mage.cards.k.KitchenFinks.class)); + cards.add(new SetCardInfo("Lightning Greaves", 8, Rarity.RARE, mage.cards.l.LightningGreaves.class)); + cards.add(new SetCardInfo("Magma Jet", 1, Rarity.RARE, mage.cards.m.MagmaJet.class)); + cards.add(new SetCardInfo("Merrow Reejerey", 4, Rarity.RARE, mage.cards.m.MerrowReejerey.class)); + cards.add(new SetCardInfo("Mulldrifter", 6, Rarity.RARE, mage.cards.m.Mulldrifter.class)); + cards.add(new SetCardInfo("Murderous Redcap", 7, Rarity.RARE, mage.cards.m.MurderousRedcap.class)); + cards.add(new SetCardInfo("Myr Enforcer", 2, Rarity.RARE, mage.cards.m.MyrEnforcer.class)); + cards.add(new SetCardInfo("Oblivion Ring", 11, Rarity.RARE, mage.cards.o.OblivionRing.class)); + cards.add(new SetCardInfo("Sakura-Tribe Elder", 12, Rarity.RARE, mage.cards.s.SakuraTribeElder.class)); + cards.add(new SetCardInfo("Watchwolf", 9, Rarity.RARE, mage.cards.w.Watchwolf.class)); + cards.add(new SetCardInfo("Wren's Run Vanquisher", 5, Rarity.RARE, mage.cards.w.WrensRunVanquisher.class)); + } +} diff --git a/Mage.Sets/src/mage/sets/FridayNightMagic2010.java b/Mage.Sets/src/mage/sets/FridayNightMagic2010.java new file mode 100644 index 00000000000..d7c9cf9fd88 --- /dev/null +++ b/Mage.Sets/src/mage/sets/FridayNightMagic2010.java @@ -0,0 +1,36 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/f10 + */ +public class FridayNightMagic2010 extends ExpansionSet { + + private static final FridayNightMagic2010 instance = new FridayNightMagic2010(); + + public static FridayNightMagic2010 getInstance() { + return instance; + } + + private FridayNightMagic2010() { + super("Friday Night Magic 2010", "F10", ExpansionSet.buildDate(2010, 1, 1), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Anathemancer", 7, Rarity.RARE, mage.cards.a.Anathemancer.class)); + cards.add(new SetCardInfo("Ancient Ziggurat", 3, Rarity.RARE, mage.cards.a.AncientZiggurat.class)); + cards.add(new SetCardInfo("Bloodbraid Elf", 4, Rarity.RARE, mage.cards.b.BloodbraidElf.class)); + cards.add(new SetCardInfo("Cloudpost", 5, Rarity.RARE, mage.cards.c.Cloudpost.class)); + cards.add(new SetCardInfo("Elvish Visionary", 6, Rarity.RARE, mage.cards.e.ElvishVisionary.class)); + cards.add(new SetCardInfo("Gatekeeper of Malakir", 11, Rarity.RARE, mage.cards.g.GatekeeperOfMalakir.class)); + cards.add(new SetCardInfo("Ghostly Prison", 2, Rarity.RARE, mage.cards.g.GhostlyPrison.class)); + cards.add(new SetCardInfo("Krosan Grip", 8, Rarity.RARE, mage.cards.k.KrosanGrip.class)); + cards.add(new SetCardInfo("Qasali Pridemage", 9, Rarity.RARE, mage.cards.q.QasaliPridemage.class)); + cards.add(new SetCardInfo("Rift Bolt", 10, Rarity.RARE, mage.cards.r.RiftBolt.class)); + cards.add(new SetCardInfo("Tidehollow Sculler", 1, Rarity.RARE, mage.cards.t.TidehollowSculler.class)); + cards.add(new SetCardInfo("Wild Nacatl", 12, Rarity.RARE, mage.cards.w.WildNacatl.class)); + } +} diff --git a/Mage.Sets/src/mage/sets/FridayNightMagic2011.java b/Mage.Sets/src/mage/sets/FridayNightMagic2011.java new file mode 100644 index 00000000000..7aa843f3e20 --- /dev/null +++ b/Mage.Sets/src/mage/sets/FridayNightMagic2011.java @@ -0,0 +1,36 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/f11 + */ +public class FridayNightMagic2011 extends ExpansionSet { + + private static final FridayNightMagic2011 instance = new FridayNightMagic2011(); + + public static FridayNightMagic2011 getInstance() { + return instance; + } + + private FridayNightMagic2011() { + super("Friday Night Magic 2011", "F11", ExpansionSet.buildDate(2011, 1, 1), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Artisan of Kozilek", 4, Rarity.RARE, mage.cards.a.ArtisanOfKozilek.class)); + cards.add(new SetCardInfo("Contagion Clasp", 10, Rarity.RARE, mage.cards.c.ContagionClasp.class)); + cards.add(new SetCardInfo("Cultivate", 8, Rarity.RARE, mage.cards.c.Cultivate.class)); + cards.add(new SetCardInfo("Everflowing Chalice", 1, Rarity.RARE, mage.cards.e.EverflowingChalice.class)); + cards.add(new SetCardInfo("Go for the Throat", 11, Rarity.RARE, mage.cards.g.GoForTheThroat.class)); + cards.add(new SetCardInfo("Jace's Ingenuity", 7, Rarity.RARE, mage.cards.j.JacesIngenuity.class)); + cards.add(new SetCardInfo("Rhox War Monk", 6, Rarity.RARE, mage.cards.r.RhoxWarMonk.class)); + cards.add(new SetCardInfo("Savage Lands", 12, Rarity.RARE, mage.cards.s.SavageLands.class)); + cards.add(new SetCardInfo("Spellstutter Sprite", 2, Rarity.RARE, mage.cards.s.SpellstutterSprite.class)); + cards.add(new SetCardInfo("Squadron Hawk", 5, Rarity.RARE, mage.cards.s.SquadronHawk.class)); + cards.add(new SetCardInfo("Teetering Peaks", 9, Rarity.RARE, mage.cards.t.TeeteringPeaks.class)); + cards.add(new SetCardInfo("Wall of Omens", 3, Rarity.RARE, mage.cards.w.WallOfOmens.class)); + } +} diff --git a/Mage.Sets/src/mage/sets/FridayNightMagic2012.java b/Mage.Sets/src/mage/sets/FridayNightMagic2012.java new file mode 100644 index 00000000000..05e608171e5 --- /dev/null +++ b/Mage.Sets/src/mage/sets/FridayNightMagic2012.java @@ -0,0 +1,36 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/f12 + */ +public class FridayNightMagic2012 extends ExpansionSet { + + private static final FridayNightMagic2012 instance = new FridayNightMagic2012(); + + public static FridayNightMagic2012 getInstance() { + return instance; + } + + private FridayNightMagic2012() { + super("Friday Night Magic 2012", "F12", ExpansionSet.buildDate(2012, 1, 1), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Acidic Slime", 6, Rarity.RARE, mage.cards.a.AcidicSlime.class)); + cards.add(new SetCardInfo("Ancient Grudge", 5, Rarity.RARE, mage.cards.a.AncientGrudge.class)); + cards.add(new SetCardInfo("Avacyn's Pilgrim", 8, Rarity.RARE, mage.cards.a.AvacynsPilgrim.class)); + cards.add(new SetCardInfo("Despise", 2, Rarity.RARE, mage.cards.d.Despise.class)); + cards.add(new SetCardInfo("Dismember", 4, Rarity.RARE, mage.cards.d.Dismember.class)); + cards.add(new SetCardInfo("Evolving Wilds", 10, Rarity.RARE, mage.cards.e.EvolvingWilds.class)); + cards.add(new SetCardInfo("Forbidden Alchemy", 7, Rarity.RARE, mage.cards.f.ForbiddenAlchemy.class)); + cards.add(new SetCardInfo("Gitaxian Probe", 12, Rarity.RARE, mage.cards.g.GitaxianProbe.class)); + cards.add(new SetCardInfo("Glistener Elf", 1, Rarity.RARE, mage.cards.g.GlistenerElf.class)); + cards.add(new SetCardInfo("Lingering Souls", 9, Rarity.RARE, mage.cards.l.LingeringSouls.class)); + cards.add(new SetCardInfo("Pillar of Flame", 11, Rarity.RARE, mage.cards.p.PillarOfFlame.class)); + cards.add(new SetCardInfo("Tectonic Edge", 3, Rarity.RARE, mage.cards.t.TectonicEdge.class)); + } +} diff --git a/Mage.Sets/src/mage/sets/FridayNightMagic2013.java b/Mage.Sets/src/mage/sets/FridayNightMagic2013.java new file mode 100644 index 00000000000..3f0d2a5ff2b --- /dev/null +++ b/Mage.Sets/src/mage/sets/FridayNightMagic2013.java @@ -0,0 +1,36 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/f13 + */ +public class FridayNightMagic2013 extends ExpansionSet { + + private static final FridayNightMagic2013 instance = new FridayNightMagic2013(); + + public static FridayNightMagic2013 getInstance() { + return instance; + } + + private FridayNightMagic2013() { + super("Friday Night Magic 2013", "F13", ExpansionSet.buildDate(2013, 1, 1), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Call of the Conclave", 4, Rarity.RARE, mage.cards.c.CallOfTheConclave.class)); + cards.add(new SetCardInfo("Dimir Charm", 8, Rarity.RARE, mage.cards.d.DimirCharm.class)); + cards.add(new SetCardInfo("Experiment One", 9, Rarity.RARE, mage.cards.e.ExperimentOne.class)); + cards.add(new SetCardInfo("Farseek", 3, Rarity.RARE, mage.cards.f.Farseek.class)); + cards.add(new SetCardInfo("Ghor-Clan Rampager", 10, Rarity.RARE, mage.cards.g.GhorClanRampager.class)); + cards.add(new SetCardInfo("Grisly Salvage", 11, Rarity.RARE, mage.cards.g.GrislySalvage.class)); + cards.add(new SetCardInfo("Izzet Charm", 6, Rarity.RARE, mage.cards.i.IzzetCharm.class)); + cards.add(new SetCardInfo("Judge's Familiar", 5, Rarity.RARE, mage.cards.j.JudgesFamiliar.class)); + cards.add(new SetCardInfo("Rakdos Cackler", 7, Rarity.RARE, mage.cards.r.RakdosCackler.class)); + cards.add(new SetCardInfo("Reliquary Tower", 2, Rarity.RARE, mage.cards.r.ReliquaryTower.class)); + cards.add(new SetCardInfo("Searing Spear", 1, Rarity.RARE, mage.cards.s.SearingSpear.class)); + cards.add(new SetCardInfo("Sin Collector", 12, Rarity.RARE, mage.cards.s.SinCollector.class)); + } +} diff --git a/Mage.Sets/src/mage/sets/FridayNightMagic2014.java b/Mage.Sets/src/mage/sets/FridayNightMagic2014.java new file mode 100644 index 00000000000..076ed676ee1 --- /dev/null +++ b/Mage.Sets/src/mage/sets/FridayNightMagic2014.java @@ -0,0 +1,36 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/f14 + */ +public class FridayNightMagic2014 extends ExpansionSet { + + private static final FridayNightMagic2014 instance = new FridayNightMagic2014(); + + public static FridayNightMagic2014 getInstance() { + return instance; + } + + private FridayNightMagic2014() { + super("Friday Night Magic 2014", "F14", ExpansionSet.buildDate(2014, 1, 1), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Banisher Priest", 3, Rarity.RARE, mage.cards.b.BanisherPriest.class)); + cards.add(new SetCardInfo("Banishing Light", 9, Rarity.RARE, mage.cards.b.BanishingLight.class)); + cards.add(new SetCardInfo("Bile Blight", 8, Rarity.RARE, mage.cards.b.BileBlight.class)); + cards.add(new SetCardInfo("Brain Maggot", 11, Rarity.RARE, mage.cards.b.BrainMaggot.class)); + cards.add(new SetCardInfo("Dissolve", 6, Rarity.RARE, mage.cards.d.Dissolve.class)); + cards.add(new SetCardInfo("Elvish Mystic", 2, Rarity.RARE, mage.cards.e.ElvishMystic.class)); + cards.add(new SetCardInfo("Encroaching Wastes", 4, Rarity.RARE, mage.cards.e.EncroachingWastes.class)); + cards.add(new SetCardInfo("Fanatic of Xenagos", 10, Rarity.RARE, mage.cards.f.FanaticOfXenagos.class)); + cards.add(new SetCardInfo("Magma Spray", 7, Rarity.RARE, mage.cards.m.MagmaSpray.class)); + cards.add(new SetCardInfo("Stoke the Flames", 12, Rarity.RARE, mage.cards.s.StokeTheFlames.class)); + cards.add(new SetCardInfo("Tormented Hero", 5, Rarity.RARE, mage.cards.t.TormentedHero.class)); + cards.add(new SetCardInfo("Warleader's Helix", 1, Rarity.RARE, mage.cards.w.WarleadersHelix.class)); + } +} diff --git a/Mage.Sets/src/mage/sets/FridayNightMagic2015.java b/Mage.Sets/src/mage/sets/FridayNightMagic2015.java new file mode 100644 index 00000000000..ed3386f6da5 --- /dev/null +++ b/Mage.Sets/src/mage/sets/FridayNightMagic2015.java @@ -0,0 +1,36 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/f15 + */ +public class FridayNightMagic2015 extends ExpansionSet { + + private static final FridayNightMagic2015 instance = new FridayNightMagic2015(); + + public static FridayNightMagic2015 getInstance() { + return instance; + } + + private FridayNightMagic2015() { + super("Friday Night Magic 2015", "F15", ExpansionSet.buildDate(2015, 1, 1), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Abzan Beastmaster", 5, Rarity.RARE, mage.cards.a.AbzanBeastmaster.class)); + cards.add(new SetCardInfo("Anticipate", 12, Rarity.RARE, mage.cards.a.Anticipate.class)); + cards.add(new SetCardInfo("Disdainful Stroke", 2, Rarity.RARE, mage.cards.d.DisdainfulStroke.class)); + cards.add(new SetCardInfo("Frenzied Goblin", 1, Rarity.RARE, mage.cards.f.FrenziedGoblin.class)); + cards.add(new SetCardInfo("Frost Walker", 6, Rarity.RARE, mage.cards.f.FrostWalker.class)); + cards.add(new SetCardInfo("Hordeling Outburst", 3, Rarity.RARE, mage.cards.h.HordelingOutburst.class)); + cards.add(new SetCardInfo("Orator of Ojutai", 9, Rarity.RARE, mage.cards.o.OratorOfOjutai.class)); + cards.add(new SetCardInfo("Path to Exile", 7, Rarity.RARE, mage.cards.p.PathToExile.class)); + cards.add(new SetCardInfo("Roast", 11, Rarity.RARE, mage.cards.r.Roast.class)); + cards.add(new SetCardInfo("Serum Visions", 8, Rarity.RARE, mage.cards.s.SerumVisions.class)); + cards.add(new SetCardInfo("Suspension Field", 4, Rarity.RARE, mage.cards.s.SuspensionField.class)); + cards.add(new SetCardInfo("Ultimate Price", 10, Rarity.RARE, mage.cards.u.UltimatePrice.class)); + } +} diff --git a/Mage.Sets/src/mage/sets/FridayNightMagic2016.java b/Mage.Sets/src/mage/sets/FridayNightMagic2016.java new file mode 100644 index 00000000000..a9b13382b35 --- /dev/null +++ b/Mage.Sets/src/mage/sets/FridayNightMagic2016.java @@ -0,0 +1,36 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/f16 + */ +public class FridayNightMagic2016 extends ExpansionSet { + + private static final FridayNightMagic2016 instance = new FridayNightMagic2016(); + + public static FridayNightMagic2016 getInstance() { + return instance; + } + + private FridayNightMagic2016() { + super("Friday Night Magic 2016", "F16", ExpansionSet.buildDate(2016, 1, 1), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Blighted Fen", 4, Rarity.RARE, mage.cards.b.BlightedFen.class)); + cards.add(new SetCardInfo("Call the Bloodline", 12, Rarity.RARE, mage.cards.c.CallTheBloodline.class)); + cards.add(new SetCardInfo("Clash of Wills", 2, Rarity.RARE, mage.cards.c.ClashOfWills.class)); + cards.add(new SetCardInfo("Crumbling Vestige", 8, Rarity.RARE, mage.cards.c.CrumblingVestige.class)); + cards.add(new SetCardInfo("Fiery Temper", 11, Rarity.RARE, mage.cards.f.FieryTemper.class)); + cards.add(new SetCardInfo("Flaying Tendrils", 9, Rarity.RARE, mage.cards.f.FlayingTendrils.class)); + cards.add(new SetCardInfo("Goblin Warchief", 5, Rarity.RARE, mage.cards.g.GoblinWarchief.class)); + cards.add(new SetCardInfo("Nissa's Pilgrimage", 1, Rarity.RARE, mage.cards.n.NissasPilgrimage.class)); + cards.add(new SetCardInfo("Rise from the Tides", 10, Rarity.RARE, mage.cards.r.RiseFromTheTides.class)); + cards.add(new SetCardInfo("Smash to Smithereens", 3, Rarity.RARE, mage.cards.s.SmashToSmithereens.class)); + cards.add(new SetCardInfo("Spatial Contortion", 7, Rarity.RARE, mage.cards.s.SpatialContortion.class)); + cards.add(new SetCardInfo("Sylvan Scrying", 6, Rarity.RARE, mage.cards.s.SylvanScrying.class)); + } +} diff --git a/Mage.Sets/src/mage/sets/FridayNightMagic2017.java b/Mage.Sets/src/mage/sets/FridayNightMagic2017.java new file mode 100644 index 00000000000..6429073dfa5 --- /dev/null +++ b/Mage.Sets/src/mage/sets/FridayNightMagic2017.java @@ -0,0 +1,33 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/f17 + */ +public class FridayNightMagic2017 extends ExpansionSet { + + private static final FridayNightMagic2017 instance = new FridayNightMagic2017(); + + public static FridayNightMagic2017 getInstance() { + return instance; + } + + private FridayNightMagic2017() { + super("Friday Night Magic 2017", "F17", ExpansionSet.buildDate(2017, 1, 1), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Aether Hub", 6, Rarity.RARE, mage.cards.a.AetherHub.class)); + cards.add(new SetCardInfo("Fatal Push", 8, Rarity.RARE, mage.cards.f.FatalPush.class)); + cards.add(new SetCardInfo("Fortune's Favor", 2, Rarity.RARE, mage.cards.f.FortunesFavor.class)); + cards.add(new SetCardInfo("Incendiary Flow", 3, Rarity.RARE, mage.cards.i.IncendiaryFlow.class)); + cards.add(new SetCardInfo("Noose Constrictor", 1, Rarity.RARE, mage.cards.n.NooseConstrictor.class)); + cards.add(new SetCardInfo("Renegade Rallier", 9, Rarity.RARE, mage.cards.r.RenegadeRallier.class)); + cards.add(new SetCardInfo("Reverse Engineer", 7, Rarity.RARE, mage.cards.r.ReverseEngineer.class)); + cards.add(new SetCardInfo("Servo Exhibition", 4, Rarity.RARE, mage.cards.s.ServoExhibition.class)); + cards.add(new SetCardInfo("Unlicensed Disintegration", 5, Rarity.RARE, mage.cards.u.UnlicensedDisintegration.class)); + } +} diff --git a/Mage.Tests/src/test/java/org/mage/test/serverside/deck/DeckValidatorTest.java b/Mage.Tests/src/test/java/org/mage/test/serverside/deck/DeckValidatorTest.java index abbbb3e1562..d5fb13d47ab 100644 --- a/Mage.Tests/src/test/java/org/mage/test/serverside/deck/DeckValidatorTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/serverside/deck/DeckValidatorTest.java @@ -150,7 +150,7 @@ public class DeckValidatorTest extends MageTestBase { Assert.assertFalse("Counterspell not allowed in modern", testDeckValid(new Modern(), deckList)); deckList.clear(); - deckList.add(new CardNameAmount("FNMP", 66, 4)); + deckList.add(new CardNameAmount("F05", 11, 4)); deckList.add(new CardNameAmount("Mountain", 56)); Assert.assertFalse("Counterspell not allowed in modern", testDeckValid(new Modern(), deckList)); From bced163e1eb93e76aee678485f25df6e72c34d1e Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Mon, 20 Jan 2020 22:32:14 +0100 Subject: [PATCH 028/182] Fixed Friday Night Magic cards used in sample decks. --- .../Decks to Beat/Abzan Midrange TDtB ST Dec 2014.mwDeck.dck | 4 ++-- .../Decks to Beat/Abzan Midrange TDtB ST Nov 2014.mwDeck.dck | 2 +- .../Decks to Beat/Bant Pod TDtB ST Oct 2011.mwDeck.dck | 2 +- .../Goblins Deck Wins TDtB ST Apr 2011.mwDeck.dck | 2 +- ...) 58 World Championship 2004 (San Francisco) ST 9-5-04.dck | 2 +- ...de 1 World Championship 2004 (San Francisco) ST 9-5-04.dck | 2 +- ...e 58 World Championship 2004 (San Francisco) ST 9-5-04.dck | 4 ++-- .../Dark Exalted 34 PT Kyoto ST 3-1-09.dck | 2 +- .../Faeries 58 PT Hollywood ST 5-25-08.dck | 2 +- .../Naya 34 World Championship 2009 (Rome) ST 11-19-09.dck | 2 +- .../Snow Mana Ramp 58 PT Hollywood ST 5-25-08.dck | 2 +- 11 files changed, 13 insertions(+), 13 deletions(-) diff --git a/Mage.Client/release/sample-decks/Decks to Beat/Abzan Midrange TDtB ST Dec 2014.mwDeck.dck b/Mage.Client/release/sample-decks/Decks to Beat/Abzan Midrange TDtB ST Dec 2014.mwDeck.dck index 0115fc7ca68..6cbba4ffd98 100644 --- a/Mage.Client/release/sample-decks/Decks to Beat/Abzan Midrange TDtB ST Dec 2014.mwDeck.dck +++ b/Mage.Client/release/sample-decks/Decks to Beat/Abzan Midrange TDtB ST Dec 2014.mwDeck.dck @@ -6,7 +6,7 @@ 4 [KTK:200] Siege Rhino 2 [M15:34] Soul of Theros 2 [C14:191] Elvish Mystic -1 [FNMP:172] Banishing Light +1 [F14:9] Banishing Light 1 [M11:233] Plains 1 [LRW:299] Forest 4 [KTK:241] Sandsteppe Citadel @@ -26,7 +26,7 @@ 2 [THS:180] Sylvan Caryatid 1 [MBP:77] Sylvan Caryatid 2 [THS:110] Whip of Erebos -1 [FNMP:165] Elvish Mystic +1 [F14:2] Elvish Mystic 3 [KTK:81] Murderous Cut 2 [CMD:159] Hornet Queen 2 [M15:244] Llanowar Wastes diff --git a/Mage.Client/release/sample-decks/Decks to Beat/Abzan Midrange TDtB ST Nov 2014.mwDeck.dck b/Mage.Client/release/sample-decks/Decks to Beat/Abzan Midrange TDtB ST Nov 2014.mwDeck.dck index d21efee1f93..e27566c7b94 100644 --- a/Mage.Client/release/sample-decks/Decks to Beat/Abzan Midrange TDtB ST Nov 2014.mwDeck.dck +++ b/Mage.Client/release/sample-decks/Decks to Beat/Abzan Midrange TDtB ST Nov 2014.mwDeck.dck @@ -29,7 +29,7 @@ 1 [ARC:150] Forest SB: 1 [MBP:101] Liliana Vess SB: 2 [M15:169] Back to Nature -SB: 1 [FNMP:171] Bile Blight +SB: 1 [F14:8] Bile Blight SB: 2 [BNG:61] Bile Blight SB: 1 [C14:158] Read the Bones SB: 1 [M15:187] Nissa, Worldwaker diff --git a/Mage.Client/release/sample-decks/Decks to Beat/Bant Pod TDtB ST Oct 2011.mwDeck.dck b/Mage.Client/release/sample-decks/Decks to Beat/Bant Pod TDtB ST Oct 2011.mwDeck.dck index e0f57b47650..0b057ef67af 100644 --- a/Mage.Client/release/sample-decks/Decks to Beat/Bant Pod TDtB ST Oct 2011.mwDeck.dck +++ b/Mage.Client/release/sample-decks/Decks to Beat/Bant Pod TDtB ST Oct 2011.mwDeck.dck @@ -16,7 +16,7 @@ 1 [NPH:9] Elesh Norn, Grand Cenobite 4 [ISD:241] Hinterland Harbor 1 [ISD:207] Tree of Redemption -1 [FNMP:147] Avacyn's Pilgrim +1 [F12:8] Avacyn's Pilgrim 1 [ISD:193] Mayor of Avabruck 1 [NPH:4] Blade Splicer 1 [C14:283] Wurmcoil Engine diff --git a/Mage.Client/release/sample-decks/Decks to Beat/Goblins Deck Wins TDtB ST Apr 2011.mwDeck.dck b/Mage.Client/release/sample-decks/Decks to Beat/Goblins Deck Wins TDtB ST Apr 2011.mwDeck.dck index 0d338274f16..b69354f85ad 100644 --- a/Mage.Client/release/sample-decks/Decks to Beat/Goblins Deck Wins TDtB ST Apr 2011.mwDeck.dck +++ b/Mage.Client/release/sample-decks/Decks to Beat/Goblins Deck Wins TDtB ST Apr 2011.mwDeck.dck @@ -31,7 +31,7 @@ 2 [GRC:48] Staggershock 1 [ZEN:119] Burst Lightning 1 [DD3B:60] Mountain -3 [FNMP:136] Teetering Peaks +3 [F11:9] Teetering Peaks 2 [SOM:104] Spikeshot Elder 1 [HOP:163] Mountain 1 [LEB:163] Lightning Bolt diff --git a/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Affinity(1) 58 World Championship 2004 (San Francisco) ST 9-5-04.dck b/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Affinity(1) 58 World Championship 2004 (San Francisco) ST 9-5-04.dck index ea56b923cd0..1c66dfd5051 100644 --- a/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Affinity(1) 58 World Championship 2004 (San Francisco) ST 9-5-04.dck +++ b/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Affinity(1) 58 World Championship 2004 (San Francisco) ST 9-5-04.dck @@ -5,7 +5,7 @@ 4 [MRD:62] Disciple of the Vault 4 [DST:91] Aether Vial 2 [MRD:286] Vault of Whispers -1 [FNMP:105] Myr Enforcer +1 [F09:2] Myr Enforcer 1 [DDF:40] Arcbound Worker 3 [HOP:110] Cranial Plating 2 [MRD:86] Atog diff --git a/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Astral Slide 1 World Championship 2004 (San Francisco) ST 9-5-04.dck b/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Astral Slide 1 World Championship 2004 (San Francisco) ST 9-5-04.dck index 96997d1ec60..8be991166b4 100644 --- a/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Astral Slide 1 World Championship 2004 (San Francisco) ST 9-5-04.dck +++ b/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Astral Slide 1 World Championship 2004 (San Francisco) ST 9-5-04.dck @@ -4,7 +4,7 @@ 4 [CMD:152] Eternal Witness 7 [UNH:140] Forest 2 [CMD:3] Akroma's Vengeance -1 [FNMP:76] Astral Slide +1 [F06:9] Astral Slide 4 [KTK:248] Windswept Heath 4 [C14:316] Tranquil Thicket 4 [C13:27] Wrath of God diff --git a/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Astral Slide 58 World Championship 2004 (San Francisco) ST 9-5-04.dck b/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Astral Slide 58 World Championship 2004 (San Francisco) ST 9-5-04.dck index 31dc11bd2c3..37f1b0ec52e 100644 --- a/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Astral Slide 58 World Championship 2004 (San Francisco) ST 9-5-04.dck +++ b/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Astral Slide 58 World Championship 2004 (San Francisco) ST 9-5-04.dck @@ -3,7 +3,7 @@ 4 [CMD:152] Eternal Witness 1 [ONS:4] Astral Slide 5 [UNH:140] Forest -2 [FNMP:76] Astral Slide +2 [F06:9] Astral Slide 1 [KTK:249] Wooded Foothills 2 [C13:119] Slice and Dice 4 [C14:316] Tranquil Thicket @@ -28,4 +28,4 @@ SB: 2 [5DN:147] Relic Barrier SB: 2 [SCG:23] Silver Knight SB: 2 [DST:146] Sundering Titan SB: 2 [8ED:272] Plow Under -SB: 1 [FNMP:46] Silver Knight +SB: 1 [F04:3] Silver Knight diff --git a/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Dark Exalted 34 PT Kyoto ST 3-1-09.dck b/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Dark Exalted 34 PT Kyoto ST 3-1-09.dck index ade6c6d193f..8c4d6861409 100644 --- a/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Dark Exalted 34 PT Kyoto ST 3-1-09.dck +++ b/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Dark Exalted 34 PT Kyoto ST 3-1-09.dck @@ -23,7 +23,7 @@ 4 [M12:165] Birds of Paradise 1 [M15:241] Caves of Koilos 2 [CON:87] Noble Hierarch -2 [FNMP:118] Ancient Ziggurat +2 [F10:3] Ancient Ziggurat SB: 2 [10E:182] Terror SB: 2 [CMD:25] Path to Exile SB: 2 [ALA:218] Relic of Progenitus diff --git a/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Faeries 58 PT Hollywood ST 5-25-08.dck b/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Faeries 58 PT Hollywood ST 5-25-08.dck index 150ce6b0183..4e8f1a25d79 100644 --- a/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Faeries 58 PT Hollywood ST 5-25-08.dck +++ b/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Faeries 58 PT Hollywood ST 5-25-08.dck @@ -3,7 +3,7 @@ 4 [LRW:89] Spellstutter Sprite 4 [LRW:56] Cryptic Command 3 [FUT:179] River of Tears -1 [FNMP:96] Pendelhaven +1 [F08:5] Pendelhaven 1 [TSB:120] Pendelhaven 4 [10E:362] Underground River 2 [SHM:280] Sunken Ruins diff --git a/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Naya 34 World Championship 2009 (Rome) ST 11-19-09.dck b/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Naya 34 World Championship 2009 (Rome) ST 11-19-09.dck index 97d8461373d..0e71665365d 100644 --- a/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Naya 34 World Championship 2009 (Rome) ST 11-19-09.dck +++ b/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Naya 34 World Championship 2009 (Rome) ST 11-19-09.dck @@ -10,7 +10,7 @@ 2 [UNH:139] Mountain 4 [ARB:50] Bloodbraid Elf 2 [MM2:151] Noble Hierarch -2 [FNMP:118] Ancient Ziggurat +2 [F10:3] Ancient Ziggurat 4 [ZEN:168] Lotus Cobra 1 [ALA:154] Ajani Vengeant 4 [ZEN:126] Goblin Guide diff --git a/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Snow Mana Ramp 58 PT Hollywood ST 5-25-08.dck b/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Snow Mana Ramp 58 PT Hollywood ST 5-25-08.dck index 075f8f6ada0..0c28c89a22b 100644 --- a/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Snow Mana Ramp 58 PT Hollywood ST 5-25-08.dck +++ b/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Snow Mana Ramp 58 PT Hollywood ST 5-25-08.dck @@ -5,7 +5,7 @@ 5 [ME2:245] Snow-Covered Forest 2 [FUT:144] Edge of Autumn 4 [SHM:229] Kitchen Finks -2 [FNMP:98] Wall of Roots +2 [F08:7] Wall of Roots 1 [MIR:151] Wall of Roots 3 [CSP:148] Mouth of Ronom 2 [CSP:147] Highland Weald From d628303f3a066015460225f808ca0f9d840054d4 Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Mon, 3 Feb 2020 12:08:33 +0100 Subject: [PATCH 029/182] Fix set code clash with the old PrereleaseEvents set and the new Pro Tour Collector set (PTC). Set the PrereleaseEvents code to PPRE, as listed on Scryfall. --- ...Abzan Midrange TDtB ST Dec 2014.mwDeck.dck | 2 +- .../Saint WW TDtB ST Jan 2012.mwDeck.dck | 2 +- .../java/mage/client/cards/DragCardGrid.java | 2 +- .../sources/CopyPasteImageSourceDialog.java | 2 +- .../plugins/card/dl/sources/GathererSets.java | 2 +- .../card/dl/sources/GrabbagImageSource.java | 20 +++++++++---------- .../card/dl/sources/MagidexImageSource.java | 2 +- .../dl/sources/ScryfallImageSupportCards.java | 2 +- .../dl/sources/WizardCardsImageSource.java | 4 ++-- .../src/main/resources/card-pictures-tok.txt | 20 +++++++++---------- Mage.Sets/src/mage/sets/PrereleaseEvents.java | 2 +- .../src/main/java/mage/verify/MtgJson.java | 4 +++- Utils/mtg-sets-data.txt | 2 +- 13 files changed, 34 insertions(+), 32 deletions(-) diff --git a/Mage.Client/release/sample-decks/Decks to Beat/Abzan Midrange TDtB ST Dec 2014.mwDeck.dck b/Mage.Client/release/sample-decks/Decks to Beat/Abzan Midrange TDtB ST Dec 2014.mwDeck.dck index 6cbba4ffd98..d0f096cf246 100644 --- a/Mage.Client/release/sample-decks/Decks to Beat/Abzan Midrange TDtB ST Dec 2014.mwDeck.dck +++ b/Mage.Client/release/sample-decks/Decks to Beat/Abzan Midrange TDtB ST Dec 2014.mwDeck.dck @@ -31,7 +31,7 @@ 2 [CMD:159] Hornet Queen 2 [M15:244] Llanowar Wastes SB: 1 [M15:194] Reclamation Sage -SB: 1 [PTC:80] Doomwake Giant +SB: 1 [PPRE:80] Doomwake Giant SB: 2 [LRW:145] Thoughtseize SB: 1 [KTK:174] Duneblast SB: 1 [M15:187] Nissa, Worldwaker diff --git a/Mage.Client/release/sample-decks/Decks to Beat/Saint WW TDtB ST Jan 2012.mwDeck.dck b/Mage.Client/release/sample-decks/Decks to Beat/Saint WW TDtB ST Jan 2012.mwDeck.dck index 81d1b5e28ee..362faa98cb0 100644 --- a/Mage.Client/release/sample-decks/Decks to Beat/Saint WW TDtB ST Jan 2012.mwDeck.dck +++ b/Mage.Client/release/sample-decks/Decks to Beat/Saint WW TDtB ST Jan 2012.mwDeck.dck @@ -8,7 +8,7 @@ 1 [POR:216] Plains 1 [M10:233] Plains 1 [M13:225] Glacial Fortress -4 [PTC:47] Hero of Bladehold +4 [PPRE:47] Hero of Bladehold 3 [ISD:11] Doomed Traveler 1 [DDK:2] Doomed Traveler 1 [DDN:81] Plains diff --git a/Mage.Client/src/main/java/mage/client/cards/DragCardGrid.java b/Mage.Client/src/main/java/mage/client/cards/DragCardGrid.java index c2f6e81b021..6f3954fb721 100644 --- a/Mage.Client/src/main/java/mage/client/cards/DragCardGrid.java +++ b/Mage.Client/src/main/java/mage/client/cards/DragCardGrid.java @@ -1549,7 +1549,7 @@ public class DragCardGrid extends JPanel implements DragCardSource, DragCardTarg pimpedSets.put("MBP", 1); pimpedSets.put("MLP", 1); pimpedSets.put("PLS", 1); - pimpedSets.put("PTC", 1); + pimpedSets.put("PPRE", 1); pimpedSets.put("SUS", 1); String[] sets = pimpedSets.keySet().toArray(new String[pimpedSets.keySet().size()]); diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/CopyPasteImageSourceDialog.java b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/CopyPasteImageSourceDialog.java index b64d7cc8105..91db9311eb2 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/CopyPasteImageSourceDialog.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/CopyPasteImageSourceDialog.java @@ -145,7 +145,7 @@ public class CopyPasteImageSourceDialog extends JDialog { txtDeckList.setMinimumSize(new Dimension(250, 400)); txtDeckList.setPreferredSize(new Dimension(550, 400)); - txtDeckList.setText("// Example follows. \nNB: **DELETE ALL TEXT AND GO SELECT THIS SOURCE AGAIN TO SEE THE NAMES CARDS YOU'RE MISSING IMAGES FOR!!!***\n\"SWS/Might of the Wild\", \"http://i.imgur.com/eNXOdxp.jpg\"\n\"PTC/Wolf of Devil's Breach\", \"https://img.scryfall.com/cards/large/en/psoi/192s.jpg\"\n\nExpected columns: Name of Card (Set Trigraph\\Name), URL of image\n\n\n"); + txtDeckList.setText("// Example follows. \nNB: **DELETE ALL TEXT AND GO SELECT THIS SOURCE AGAIN TO SEE THE NAMES CARDS YOU'RE MISSING IMAGES FOR!!!***\n\"SWS/Might of the Wild\", \"http://i.imgur.com/eNXOdxp.jpg\"\n\"PPRE/Wolf of Devil's Breach\", \"https://img.scryfall.com/cards/large/en/psoi/192s.jpg\"\n\nExpected columns: Name of Card (Set Trigraph\\Name), URL of image\n\n\n"); JScrollPane txtScrollableDeckList = new JScrollPane(txtDeckList); panel3.add(txtScrollableDeckList, new GridBagConstraints(0, 0, 1, 1, 1.0, 0.0, diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/GathererSets.java b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/GathererSets.java index fb8170e937c..f8d71bf6156 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/GathererSets.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/GathererSets.java @@ -63,7 +63,7 @@ public class GathererSets implements Iterable { "W16", "W17", // "PALP" -- Gatherer does not have the set Asia Pacific Land Program // "ATH" -- has cards from many sets, symbol does not exist on gatherer - // "CLASH", "CP", "DPA", "PELP", "GPX", "GRC", "GUR", "H17", "JR", "MBP", "MGDC", "MLP", "MPRP", "PTC", "SUS", "SWS", "WMCQ", // need to fix + // "CLASH", "CP", "DPA", "PELP", "GPX", "GRC", "GUR", "H17", "JR", "MBP", "MGDC", "MLP", "MPRP", "PPRE", "SUS", "SWS", "WMCQ", // need to fix "H09", "PD2", "PD3", "UNH", "CM1", "V11", "A25", "UST", "IMA", "DD2", "EVG", "DDC", "DDE", "DDD", "8EB", "9EB", "CHR", "G18", "DD3GVL", "S00", "S99", "UGL" // ok // current testing }; diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/GrabbagImageSource.java b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/GrabbagImageSource.java index 7cd59d0a215..7fb30821af8 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/GrabbagImageSource.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/GrabbagImageSource.java @@ -18,7 +18,7 @@ public enum GrabbagImageSource implements CardImageSource { private static final Set supportedSets = new LinkedHashSet() { { - add("PTC"); + add("PPRE"); add("SWS"); } }; @@ -76,15 +76,15 @@ public enum GrabbagImageSource implements CardImageSource { return; } singleLinks = new HashMap<>(); - singleLinks.put("PTC/Arbiter of the Ideal", "MTG/BNG/en/promo/ArbiterOfTheIdeal.jpg"); - singleLinks.put("PTC/Courser of Kruphix", "MTG/BNG/en/promo/CourserOfKruphix.jpg"); - singleLinks.put("PTC/Eater of Hope", "MTG/BNG/en/promo/EaterOfHope.jpg"); - singleLinks.put("PTC/Fated Return", "MTG/BNG/en/promo/FatedReturn.jpg"); - singleLinks.put("PTC/Forgestoker Dragon", "MTG/BNG/en/promo/ForgestokerDragon.jpg"); - singleLinks.put("PTC/Nessian Wilds Ravager", "MTG/BNG/en/promo/NessianWildsRavager.jpg"); - singleLinks.put("PTC/Pain Seer", "MTG/BNG/en/promo/PainSeer.jpg"); - singleLinks.put("PTC/Silent Sentinel", "MTG/BNG/en/promo/SilentSentinel.jpg"); - singleLinks.put("PTC/Tromokratis", "MTG/BNG/en/promo/Tromokratis.jpg"); + singleLinks.put("PPRE/Arbiter of the Ideal", "MTG/BNG/en/promo/ArbiterOfTheIdeal.jpg"); + singleLinks.put("PPRE/Courser of Kruphix", "MTG/BNG/en/promo/CourserOfKruphix.jpg"); + singleLinks.put("PPRE/Eater of Hope", "MTG/BNG/en/promo/EaterOfHope.jpg"); + singleLinks.put("PPRE/Fated Return", "MTG/BNG/en/promo/FatedReturn.jpg"); + singleLinks.put("PPRE/Forgestoker Dragon", "MTG/BNG/en/promo/ForgestokerDragon.jpg"); + singleLinks.put("PPRE/Nessian Wilds Ravager", "MTG/BNG/en/promo/NessianWildsRavager.jpg"); + singleLinks.put("PPRE/Pain Seer", "MTG/BNG/en/promo/PainSeer.jpg"); + singleLinks.put("PPRE/Silent Sentinel", "MTG/BNG/en/promo/SilentSentinel.jpg"); + singleLinks.put("PPRE/Tromokratis", "MTG/BNG/en/promo/Tromokratis.jpg"); singleLinks.put("SWS/AAT-1", "CqmDY8V.jpg"); singleLinks.put("SWS/Acklay of the Arena", "ESVRm6F.jpg"); diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/MagidexImageSource.java b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/MagidexImageSource.java index d2c1eec6fa9..c4d80a4f753 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/MagidexImageSource.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/MagidexImageSource.java @@ -16,7 +16,7 @@ public enum MagidexImageSource implements CardImageSource { MagidexImageSource() { supportedSets = new LinkedHashSet<>(); - // supportedSets.add("PTC"); // Prerelease Events + // supportedSets.add("PPRE"); // Prerelease Events supportedSets.add("JR"); supportedSets.add("LEA"); supportedSets.add("LEB"); diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java index 64d36ac9792..a684a645a1a 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java @@ -28,7 +28,7 @@ public class ScryfallImageSupportCards { private static final Set supportedSets = new ArraySet() { { // xmage set codes - add("PTC"); + add("PPRE"); add("LEA"); add("LEB"); add("2ED"); diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/WizardCardsImageSource.java b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/WizardCardsImageSource.java index abe3e4c31d8..56a94ab3072 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/WizardCardsImageSource.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/WizardCardsImageSource.java @@ -55,7 +55,7 @@ public enum WizardCardsImageSource implements CardImageSource { languageAliases.put(CardLanguage.CHINES_TRADITION, "Chinese Traditional "); supportedSets = new LinkedHashSet<>(); - // supportedSets.add("PTC"); // Prerelease Events + // supportedSets.add("PPRE"); // Prerelease Events supportedSets.add("LEA"); supportedSets.add("LEB"); supportedSets.add("2ED"); @@ -395,7 +395,7 @@ public enum WizardCardsImageSource implements CardImageSource { setsAliases.put("PLS", "Planeshift"); setsAliases.put("PO2", "Portal Second Age"); setsAliases.put("POR", "Portal"); - setsAliases.put("PTC", "Prerelease Events"); + setsAliases.put("PPRE", "Prerelease Events"); setsAliases.put("PTK", "Portal Three Kingdoms"); setsAliases.put("RAV", "Ravnica: City of Guilds"); setsAliases.put("ROE", "Rise of the Eldrazi"); diff --git a/Mage.Client/src/main/resources/card-pictures-tok.txt b/Mage.Client/src/main/resources/card-pictures-tok.txt index 3cf4c971788..c56043696f9 100644 --- a/Mage.Client/src/main/resources/card-pictures-tok.txt +++ b/Mage.Client/src/main/resources/card-pictures-tok.txt @@ -34,16 +34,16 @@ #|Generate|TOK:MGDC|Rhino|| #|Generate|TOK:MGDC|Sliver|| #|Generate|TOK:MLP|Thopter|| -#|Generate|TOK:PTC|Angel|| -#|Generate|TOK:PTC|Avatar|| -#|Generate|TOK:PTC|Beast|| -#|Generate|TOK:PTC|Dragon|| -#|Generate|TOK:PTC|Elemental|| -#|Generate|TOK:PTC|Harpy|| -#|Generate|TOK:PTC|Hippo|| -#|Generate|TOK:PTC|Soldier|| -#|Generate|TOK:PTC|Wolf|| -#|Generate|TOK:PTC|Wurm|| +#|Generate|TOK:PPRE|Angel|| +#|Generate|TOK:PPRE|Avatar|| +#|Generate|TOK:PPRE|Beast|| +#|Generate|TOK:PPRE|Dragon|| +#|Generate|TOK:PPRE|Elemental|| +#|Generate|TOK:PPRE|Harpy|| +#|Generate|TOK:PPRE|Hippo|| +#|Generate|TOK:PPRE|Soldier|| +#|Generate|TOK:PPRE|Wolf|| +#|Generate|TOK:PPRE|Wurm|| #|Generate|TOK:WMCQ|Angel|| |Generate|EMBLEM!:BFZ|Emblem Gideon|||GideonAllyOfZendikarEmblem| |Generate|EMBLEM!:BFZ|Emblem Kiora|||KioraMasterOfTheDepthsEmblem| diff --git a/Mage.Sets/src/mage/sets/PrereleaseEvents.java b/Mage.Sets/src/mage/sets/PrereleaseEvents.java index 7cd1605e9a8..9478b870752 100644 --- a/Mage.Sets/src/mage/sets/PrereleaseEvents.java +++ b/Mage.Sets/src/mage/sets/PrereleaseEvents.java @@ -13,7 +13,7 @@ public final class PrereleaseEvents extends ExpansionSet { } private PrereleaseEvents() { - super("Prerelease Events", "PTC", ExpansionSet.buildDate(1990, 1, 1), SetType.PROMOTIONAL); + super("Prerelease Events", "PPRE", ExpansionSet.buildDate(1990, 1, 1), SetType.PROMOTIONAL); this.hasBoosters = false; this.hasBasicLands = true; diff --git a/Mage.Verify/src/main/java/mage/verify/MtgJson.java b/Mage.Verify/src/main/java/mage/verify/MtgJson.java index 0b109857546..2d186590b40 100644 --- a/Mage.Verify/src/main/java/mage/verify/MtgJson.java +++ b/Mage.Verify/src/main/java/mage/verify/MtgJson.java @@ -25,10 +25,12 @@ public final class MtgJson { public static final boolean MTGJSON_IGNORE_NEW_PROPERTIES = true; // set it to false for full mtgjson checks and research (new fields finds or mtgjson updates) + // TODO: MtgJson now seems to use upper case set codes only. + // Review the ones beginning with a lower case "p" and remove the redundant entries. static { mtgJsonToXMageCodes.put("pWCQ", "WMCQ"); mtgJsonToXMageCodes.put("pSUS", "SUS"); - mtgJsonToXMageCodes.put("pPRE", "PTC"); + mtgJsonToXMageCodes.put("pPRE", "PPRE"); mtgJsonToXMageCodes.put("pMPR", "MPRP"); mtgJsonToXMageCodes.put("pMEI", "MBP"); mtgJsonToXMageCodes.put("pGTW", "GRC"); // pGTW - Gateway = GRC (WPN + Gateway in one inner set) diff --git a/Utils/mtg-sets-data.txt b/Utils/mtg-sets-data.txt index da2361c833a..902970036bf 100644 --- a/Utils/mtg-sets-data.txt +++ b/Utils/mtg-sets-data.txt @@ -168,7 +168,7 @@ Premium Deck Series: Graveborn|PD3| Planar Chaos|PLC| Planeshift|PLS| Portal|POR| -Prerelease Events|PTC| +Prerelease Events|PPRE| Portal Three Kingdoms|PTK| Ravnica Allegiance|RNA| Ravnica: City of Guilds|RAV| From 6297650c3b5e14bdd8aca2075b168a5c4968c002 Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Mon, 3 Feb 2020 13:14:18 +0100 Subject: [PATCH 030/182] Split the Judge Gift Cards set (JP) into the individual sets as listed on Scryfall. - Removed the JP set. - Added G02-G11, J12-J20 - Fixed all usages in the test code - Updated the sample decks that used these cards. The deck lists now contain the updated references. - Added all Judge Gift sets to the "bling" sets list --- ...Abzan Midrange TDtB ST Nov 2014.mwDeck.dck | 2 +- ...lins Deck Wins TDtB ST Apr 2011.mwDeck.dck | 2 +- .../Mardu Control TDtB ST Dec 2014.mwDeck.dck | 2 +- .../BGW Angels 58 PT San Diego ST 2-21-10.dck | 2 +- .../Boss Naya 34 PT San Diego ST 2-21-10.dck | 2 +- .../Dark Exalted 34 PT Kyoto ST 3-1-09.dck | 2 +- ...hampionship 2005 (Yokohama) ST 12-4-05.dck | 2 +- ...d Championship 2009 (Rome) ST 11-19-09.dck | 2 +- ...Championship 2000 (Brussels) ST 8-6-00.dck | 2 +- .../java/mage/client/cards/DragCardGrid.java | 28 +++- .../card/dl/sources/MagidexImageSource.java | 5 +- .../dl/sources/WizardCardsImageSource.java | 2 +- .../src/mage/sets/JudgeGiftCards2002.java | 26 ++++ .../src/mage/sets/JudgeGiftCards2003.java | 27 ++++ .../src/mage/sets/JudgeGiftCards2004.java | 30 ++++ .../src/mage/sets/JudgeGiftCards2005.java | 28 ++++ .../src/mage/sets/JudgeGiftCards2006.java | 28 ++++ .../src/mage/sets/JudgeGiftCards2007.java | 29 ++++ .../src/mage/sets/JudgeGiftCards2008.java | 29 ++++ .../src/mage/sets/JudgeGiftCards2009.java | 34 +++++ .../src/mage/sets/JudgeGiftCards2010.java | 32 +++++ .../src/mage/sets/JudgeGiftCards2011.java | 32 +++++ .../src/mage/sets/JudgeGiftCards2012.java | 32 +++++ .../src/mage/sets/JudgeGiftCards2013.java | 32 +++++ .../src/mage/sets/JudgeGiftCards2014.java | 39 +++++ .../src/mage/sets/JudgeGiftCards2015.java | 32 +++++ .../src/mage/sets/JudgeGiftCards2016.java | 31 ++++ .../src/mage/sets/JudgeGiftCards2017.java | 34 +++++ .../src/mage/sets/JudgeGiftCards2018.java | 32 +++++ .../src/mage/sets/JudgeGiftCards2019.java | 32 +++++ .../src/mage/sets/JudgeGiftCards2020.java | 30 ++++ Mage.Sets/src/mage/sets/JudgePromo.java | 136 ------------------ .../serverside/deck/DeckValidatorTest.java | 2 +- 33 files changed, 630 insertions(+), 150 deletions(-) create mode 100644 Mage.Sets/src/mage/sets/JudgeGiftCards2002.java create mode 100644 Mage.Sets/src/mage/sets/JudgeGiftCards2003.java create mode 100644 Mage.Sets/src/mage/sets/JudgeGiftCards2004.java create mode 100644 Mage.Sets/src/mage/sets/JudgeGiftCards2005.java create mode 100644 Mage.Sets/src/mage/sets/JudgeGiftCards2006.java create mode 100644 Mage.Sets/src/mage/sets/JudgeGiftCards2007.java create mode 100644 Mage.Sets/src/mage/sets/JudgeGiftCards2008.java create mode 100644 Mage.Sets/src/mage/sets/JudgeGiftCards2009.java create mode 100644 Mage.Sets/src/mage/sets/JudgeGiftCards2010.java create mode 100644 Mage.Sets/src/mage/sets/JudgeGiftCards2011.java create mode 100644 Mage.Sets/src/mage/sets/JudgeGiftCards2012.java create mode 100644 Mage.Sets/src/mage/sets/JudgeGiftCards2013.java create mode 100644 Mage.Sets/src/mage/sets/JudgeGiftCards2014.java create mode 100644 Mage.Sets/src/mage/sets/JudgeGiftCards2015.java create mode 100644 Mage.Sets/src/mage/sets/JudgeGiftCards2016.java create mode 100644 Mage.Sets/src/mage/sets/JudgeGiftCards2017.java create mode 100644 Mage.Sets/src/mage/sets/JudgeGiftCards2018.java create mode 100644 Mage.Sets/src/mage/sets/JudgeGiftCards2019.java create mode 100644 Mage.Sets/src/mage/sets/JudgeGiftCards2020.java delete mode 100644 Mage.Sets/src/mage/sets/JudgePromo.java diff --git a/Mage.Client/release/sample-decks/Decks to Beat/Abzan Midrange TDtB ST Nov 2014.mwDeck.dck b/Mage.Client/release/sample-decks/Decks to Beat/Abzan Midrange TDtB ST Nov 2014.mwDeck.dck index e27566c7b94..552b2020dbe 100644 --- a/Mage.Client/release/sample-decks/Decks to Beat/Abzan Midrange TDtB ST Nov 2014.mwDeck.dck +++ b/Mage.Client/release/sample-decks/Decks to Beat/Abzan Midrange TDtB ST Nov 2014.mwDeck.dck @@ -19,7 +19,7 @@ 3 [THS:227] Temple of Silence 1 [APC:141] Llanowar Wastes 2 [KTK:31] Wingmate Roc -1 [JR:46] Windswept Heath +1 [G09:9] Windswept Heath 1 [JOU:163] Mana Confluence 1 [BNG:165] Temple of Plenty 2 [LRW:145] Thoughtseize diff --git a/Mage.Client/release/sample-decks/Decks to Beat/Goblins Deck Wins TDtB ST Apr 2011.mwDeck.dck b/Mage.Client/release/sample-decks/Decks to Beat/Goblins Deck Wins TDtB ST Apr 2011.mwDeck.dck index b69354f85ad..42f03567142 100644 --- a/Mage.Client/release/sample-decks/Decks to Beat/Goblins Deck Wins TDtB ST Apr 2011.mwDeck.dck +++ b/Mage.Client/release/sample-decks/Decks to Beat/Goblins Deck Wins TDtB ST Apr 2011.mwDeck.dck @@ -20,7 +20,7 @@ 1 [RAV:300] Mountain 2 [GPX:6] Goblin Guide 4 [M11:135] Ember Hauler -2 [JR:1] Lightning Bolt +2 [JGP:1] Lightning Bolt 1 [M10:146] Lightning Bolt 1 [M10:243] Mountain 1 [M12:242] Mountain diff --git a/Mage.Client/release/sample-decks/Decks to Beat/Mardu Control TDtB ST Dec 2014.mwDeck.dck b/Mage.Client/release/sample-decks/Decks to Beat/Mardu Control TDtB ST Dec 2014.mwDeck.dck index 77253da0835..9e2509af1e5 100644 --- a/Mage.Client/release/sample-decks/Decks to Beat/Mardu Control TDtB ST Dec 2014.mwDeck.dck +++ b/Mage.Client/release/sample-decks/Decks to Beat/Mardu Control TDtB ST Dec 2014.mwDeck.dck @@ -18,7 +18,7 @@ 1 [PO2:157] Mountain 1 [SOM:238] Swamp 1 [DDO:1] Elspeth, Sun's Champion -1 [JR:43] Bloodstained Mire +1 [G09:6] Bloodstained Mire 2 [MBP:98] Goblin Rabblemaster 1 [KTK:31] Wingmate Roc 2 [KTK:97] Arc Lightning diff --git a/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/BGW Angels 58 PT San Diego ST 2-21-10.dck b/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/BGW Angels 58 PT San Diego ST 2-21-10.dck index 6ffd8e665a5..5ea6c44efea 100644 --- a/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/BGW Angels 58 PT San Diego ST 2-21-10.dck +++ b/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/BGW Angels 58 PT San Diego ST 2-21-10.dck @@ -15,7 +15,7 @@ 2 [ALA:9] Elspeth, Knight-Errant 2 [UNH:138] Swamp 1 [CON:113] Knight of the Reliquary -1 [JR:66] Noble Hierarch +1 [J12:3] Noble Hierarch 1 [CON:95] Thornling 1 [C14:313] Tectonic Edge 4 [ARB:92] Maelstrom Pulse diff --git a/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Boss Naya 34 PT San Diego ST 2-21-10.dck b/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Boss Naya 34 PT San Diego ST 2-21-10.dck index 6005b7cf266..a925e4035e0 100644 --- a/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Boss Naya 34 PT San Diego ST 2-21-10.dck +++ b/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Boss Naya 34 PT San Diego ST 2-21-10.dck @@ -19,7 +19,7 @@ 4 [ALA:152] Wild Nacatl 2 [ALA:154] Ajani Vengeant 3 [CON:113] Knight of the Reliquary -2 [JR:66] Noble Hierarch +2 [J12:3] Noble Hierarch 4 [ZEN:211] Arid Mesa 2 [M12:165] Birds of Paradise 2 [C14:315] Terramorphic Expanse diff --git a/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Dark Exalted 34 PT Kyoto ST 3-1-09.dck b/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Dark Exalted 34 PT Kyoto ST 3-1-09.dck index 8c4d6861409..6f605976c3c 100644 --- a/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Dark Exalted 34 PT Kyoto ST 3-1-09.dck +++ b/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Dark Exalted 34 PT Kyoto ST 3-1-09.dck @@ -19,7 +19,7 @@ 1 [UNH:138] Swamp 4 [MOR:147] Murmuring Bosk 4 [SHM:245] Wilt-Leaf Liege -1 [JR:66] Noble Hierarch +1 [J12:3] Noble Hierarch 4 [M12:165] Birds of Paradise 1 [M15:241] Caves of Koilos 2 [CON:87] Noble Hierarch diff --git a/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Greater Gift 2 World Championship 2005 (Yokohama) ST 12-4-05.dck b/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Greater Gift 2 World Championship 2005 (Yokohama) ST 12-4-05.dck index 76629698819..e12be5b6080 100644 --- a/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Greater Gift 2 World Championship 2005 (Yokohama) ST 12-4-05.dck +++ b/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Greater Gift 2 World Championship 2005 (Yokohama) ST 12-4-05.dck @@ -18,7 +18,7 @@ 3 [UNH:136] Plains 1 [UNH:137] Island 3 [UNH:138] Swamp -1 [JR:81] Greater Good +1 [J14:2] Greater Good 4 [CMD:163] Kodama's Reach 1 [GTC:249] Watery Grave 4 [C13:27] Wrath of God diff --git a/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Naya 34 World Championship 2009 (Rome) ST 11-19-09.dck b/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Naya 34 World Championship 2009 (Rome) ST 11-19-09.dck index 0e71665365d..0bc7606aba3 100644 --- a/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Naya 34 World Championship 2009 (Rome) ST 11-19-09.dck +++ b/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Naya 34 World Championship 2009 (Rome) ST 11-19-09.dck @@ -17,7 +17,7 @@ 2 [M13:228] Rootbound Crag 4 [CMD:25] Path to Exile 4 [UNH:140] Forest -2 [JR:66] Noble Hierarch +2 [J12:3] Noble Hierarch 4 [C13:299] Jungle Shrine SB: 2 [M13:22] Oblivion Ring SB: 1 [ALA:154] Ajani Vengeant diff --git a/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Trinity 34 World Championship 2000 (Brussels) ST 8-6-00.dck b/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Trinity 34 World Championship 2000 (Brussels) ST 8-6-00.dck index 82458d9d4d6..2dee183825a 100644 --- a/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Trinity 34 World Championship 2000 (Brussels) ST 8-6-00.dck +++ b/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Trinity 34 World Championship 2000 (Brussels) ST 8-6-00.dck @@ -6,7 +6,7 @@ 2 [UDS:117] Plow Under 4 [NMS:139] Tangle Wire 1 [UDS:134] Masticore -2 [JR:18] Deranged Hermit +2 [G04:5] Deranged Hermit 4 [C14:210] Priest of Titania 1 [USG:306] Phyrexian Processor 4 [C14:204] Llanowar Elves diff --git a/Mage.Client/src/main/java/mage/client/cards/DragCardGrid.java b/Mage.Client/src/main/java/mage/client/cards/DragCardGrid.java index 6f3954fb721..def5233a4f4 100644 --- a/Mage.Client/src/main/java/mage/client/cards/DragCardGrid.java +++ b/Mage.Client/src/main/java/mage/client/cards/DragCardGrid.java @@ -1502,9 +1502,34 @@ public class DragCardGrid extends JPanel implements DragCardSource, DragCardTarg Map pimpedSets = new HashMap<>(); Map pimpedCards = new HashMap<>(); pimpedSets.put("CP", 1); - pimpedSets.put("JR", 1); pimpedSets.put("MPS", 1); pimpedSets.put("CLASH", 1); + + // Judge Reward Gifts + pimpedSets.put("JGP", 1); + pimpedSets.put("G99", 1); + pimpedSets.put("G00", 1); + pimpedSets.put("G01", 1); + pimpedSets.put("G02", 1); + pimpedSets.put("G03", 1); + pimpedSets.put("G04", 1); + pimpedSets.put("G05", 1); + pimpedSets.put("G06", 1); + pimpedSets.put("G07", 1); + pimpedSets.put("G08", 1); + pimpedSets.put("G09", 1); + pimpedSets.put("G10", 1); + pimpedSets.put("G11", 1); + pimpedSets.put("J12", 1); + pimpedSets.put("J13", 1); + pimpedSets.put("J14", 1); + pimpedSets.put("J15", 1); + pimpedSets.put("J16", 1); + pimpedSets.put("J17", 1); + pimpedSets.put("J18", 1); + pimpedSets.put("J19", 1); + pimpedSets.put("J20", 1); + // Arena League pimpedSets.put("PARL", 1); pimpedSets.put("PAL99", 1); @@ -1515,6 +1540,7 @@ public class DragCardGrid extends JPanel implements DragCardSource, DragCardTarg pimpedSets.put("PAL04", 1); pimpedSets.put("PAL05", 1); pimpedSets.put("PAL06", 1); + pimpedSets.put("UGIN", 1); pimpedSets.put("WMCQ", 1); pimpedSets.put("PALP", 1); diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/MagidexImageSource.java b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/MagidexImageSource.java index c4d80a4f753..375194f18ae 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/MagidexImageSource.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/MagidexImageSource.java @@ -17,7 +17,7 @@ public enum MagidexImageSource implements CardImageSource { MagidexImageSource() { supportedSets = new LinkedHashSet<>(); // supportedSets.add("PPRE"); // Prerelease Events - supportedSets.add("JR"); + // supportedSets.add("JR"); // TODO: Set was split into the individual sets as listed on Scryfall supportedSets.add("LEA"); supportedSets.add("LEB"); supportedSets.add("2ED"); @@ -257,9 +257,10 @@ public enum MagidexImageSource implements CardImageSource { return setName; } + private static final Map setNameReplacement = new HashMap() { { - put("JR", "pJGP"); + // put("JR", "pJGP"); // TODO: Set was split into the individual sets as listed on Scryfall } }; diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/WizardCardsImageSource.java b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/WizardCardsImageSource.java index 56a94ab3072..51586e8ca8b 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/WizardCardsImageSource.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/WizardCardsImageSource.java @@ -350,7 +350,7 @@ public enum WizardCardsImageSource implements CardImageSource { setsAliases.put("INV", "Invasion"); setsAliases.put("ISD", "Innistrad"); setsAliases.put("JOU", "Journey into Nyx"); - setsAliases.put("JR", "Judge Promo"); + // setsAliases.put("JR", "Judge Promo"); // TODO: Set was split into the individual sets as listed on Scryfall setsAliases.put("JUD", "Judgment"); setsAliases.put("KLD", "Kaladesh"); setsAliases.put("KTK", "Khans of Tarkir"); diff --git a/Mage.Sets/src/mage/sets/JudgeGiftCards2002.java b/Mage.Sets/src/mage/sets/JudgeGiftCards2002.java new file mode 100644 index 00000000000..7cf3512622b --- /dev/null +++ b/Mage.Sets/src/mage/sets/JudgeGiftCards2002.java @@ -0,0 +1,26 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/g02 + */ +public class JudgeGiftCards2002 extends ExpansionSet { + + private static final JudgeGiftCards2002 instance = new JudgeGiftCards2002(); + + public static JudgeGiftCards2002 getInstance() { + return instance; + } + + private JudgeGiftCards2002() { + super("Judge Gift Cards 2002", "G02", ExpansionSet.buildDate(2002, 1, 1), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Hammer of Bogardan", 1, Rarity.RARE, mage.cards.h.HammerOfBogardan.class)); + cards.add(new SetCardInfo("Tradewind Rider", 2, Rarity.RARE, mage.cards.t.TradewindRider.class)); + } +} diff --git a/Mage.Sets/src/mage/sets/JudgeGiftCards2003.java b/Mage.Sets/src/mage/sets/JudgeGiftCards2003.java new file mode 100644 index 00000000000..8f5cb239a87 --- /dev/null +++ b/Mage.Sets/src/mage/sets/JudgeGiftCards2003.java @@ -0,0 +1,27 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/g03 + */ +public class JudgeGiftCards2003 extends ExpansionSet { + + private static final JudgeGiftCards2003 instance = new JudgeGiftCards2003(); + + public static JudgeGiftCards2003 getInstance() { + return instance; + } + + private JudgeGiftCards2003() { + super("Judge Gift Cards 2003", "G03", ExpansionSet.buildDate(2003, 1, 1), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Argothian Enchantress", 2, Rarity.RARE, mage.cards.a.ArgothianEnchantress.class)); + cards.add(new SetCardInfo("Intuition", 1, Rarity.RARE, mage.cards.i.Intuition.class)); + cards.add(new SetCardInfo("Living Death", 3, Rarity.RARE, mage.cards.l.LivingDeath.class)); + } +} diff --git a/Mage.Sets/src/mage/sets/JudgeGiftCards2004.java b/Mage.Sets/src/mage/sets/JudgeGiftCards2004.java new file mode 100644 index 00000000000..5884984cbfe --- /dev/null +++ b/Mage.Sets/src/mage/sets/JudgeGiftCards2004.java @@ -0,0 +1,30 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/g04 + */ +public class JudgeGiftCards2004 extends ExpansionSet { + + private static final JudgeGiftCards2004 instance = new JudgeGiftCards2004(); + + public static JudgeGiftCards2004 getInstance() { + return instance; + } + + private JudgeGiftCards2004() { + super("Judge Gift Cards 2004", "G04", ExpansionSet.buildDate(2004, 1, 1), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Armageddon", 1, Rarity.RARE, mage.cards.a.Armageddon.class)); + cards.add(new SetCardInfo("Balance", 2, Rarity.RARE, mage.cards.b.Balance.class)); + cards.add(new SetCardInfo("Deranged Hermit", 5, Rarity.RARE, mage.cards.d.DerangedHermit.class)); + cards.add(new SetCardInfo("Hermit Druid", 6, Rarity.RARE, mage.cards.h.HermitDruid.class)); + cards.add(new SetCardInfo("Phyrexian Negator", 4, Rarity.RARE, mage.cards.p.PhyrexianNegator.class)); + cards.add(new SetCardInfo("Time Warp", 3, Rarity.RARE, mage.cards.t.TimeWarp.class)); + } +} diff --git a/Mage.Sets/src/mage/sets/JudgeGiftCards2005.java b/Mage.Sets/src/mage/sets/JudgeGiftCards2005.java new file mode 100644 index 00000000000..f3e64c25987 --- /dev/null +++ b/Mage.Sets/src/mage/sets/JudgeGiftCards2005.java @@ -0,0 +1,28 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/g05 + */ +public class JudgeGiftCards2005 extends ExpansionSet { + + private static final JudgeGiftCards2005 instance = new JudgeGiftCards2005(); + + public static JudgeGiftCards2005 getInstance() { + return instance; + } + + private JudgeGiftCards2005() { + super("Judge Gift Cards 2005", "G05", ExpansionSet.buildDate(2005, 1, 1), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Gemstone Mine", 1, Rarity.RARE, mage.cards.g.GemstoneMine.class)); + cards.add(new SetCardInfo("Mishra's Factory", 4, Rarity.RARE, mage.cards.m.MishrasFactory.class)); + cards.add(new SetCardInfo("Regrowth", 2, Rarity.RARE, mage.cards.r.Regrowth.class)); + cards.add(new SetCardInfo("Sol Ring", 3, Rarity.RARE, mage.cards.s.SolRing.class)); + } +} diff --git a/Mage.Sets/src/mage/sets/JudgeGiftCards2006.java b/Mage.Sets/src/mage/sets/JudgeGiftCards2006.java new file mode 100644 index 00000000000..b02372f4d44 --- /dev/null +++ b/Mage.Sets/src/mage/sets/JudgeGiftCards2006.java @@ -0,0 +1,28 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/g06 + */ +public class JudgeGiftCards2006 extends ExpansionSet { + + private static final JudgeGiftCards2006 instance = new JudgeGiftCards2006(); + + public static JudgeGiftCards2006 getInstance() { + return instance; + } + + private JudgeGiftCards2006() { + super("Judge Gift Cards 2006", "G06", ExpansionSet.buildDate(2006, 1, 1), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Exalted Angel", 1, Rarity.RARE, mage.cards.e.ExaltedAngel.class)); + cards.add(new SetCardInfo("Grim Lavamancer", 2, Rarity.RARE, mage.cards.g.GrimLavamancer.class)); + cards.add(new SetCardInfo("Meddling Mage", 3, Rarity.RARE, mage.cards.m.MeddlingMage.class)); + cards.add(new SetCardInfo("Pernicious Deed", 4, Rarity.RARE, mage.cards.p.PerniciousDeed.class)); + } +} diff --git a/Mage.Sets/src/mage/sets/JudgeGiftCards2007.java b/Mage.Sets/src/mage/sets/JudgeGiftCards2007.java new file mode 100644 index 00000000000..c5fcfcb4810 --- /dev/null +++ b/Mage.Sets/src/mage/sets/JudgeGiftCards2007.java @@ -0,0 +1,29 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/g07 + */ +public class JudgeGiftCards2007 extends ExpansionSet { + + private static final JudgeGiftCards2007 instance = new JudgeGiftCards2007(); + + public static JudgeGiftCards2007 getInstance() { + return instance; + } + + private JudgeGiftCards2007() { + super("Judge Gift Cards 2007", "G07", ExpansionSet.buildDate(2007, 1, 1), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Cunning Wish", 2, Rarity.RARE, mage.cards.c.CunningWish.class)); + cards.add(new SetCardInfo("Decree of Justice", 5, Rarity.RARE, mage.cards.d.DecreeOfJustice.class)); + cards.add(new SetCardInfo("Ravenous Baloth", 1, Rarity.RARE, mage.cards.r.RavenousBaloth.class)); + cards.add(new SetCardInfo("Vindicate", 4, Rarity.RARE, mage.cards.v.Vindicate.class)); + cards.add(new SetCardInfo("Yawgmoth's Will", 3, Rarity.RARE, mage.cards.y.YawgmothsWill.class)); + } +} diff --git a/Mage.Sets/src/mage/sets/JudgeGiftCards2008.java b/Mage.Sets/src/mage/sets/JudgeGiftCards2008.java new file mode 100644 index 00000000000..b38ec15053d --- /dev/null +++ b/Mage.Sets/src/mage/sets/JudgeGiftCards2008.java @@ -0,0 +1,29 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/g08 + */ +public class JudgeGiftCards2008 extends ExpansionSet { + + private static final JudgeGiftCards2008 instance = new JudgeGiftCards2008(); + + public static JudgeGiftCards2008 getInstance() { + return instance; + } + + private JudgeGiftCards2008() { + super("Judge Gift Cards 2008", "G08", ExpansionSet.buildDate(2008, 1, 1), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Demonic Tutor", 3, Rarity.RARE, mage.cards.d.DemonicTutor.class)); + cards.add(new SetCardInfo("Goblin Piledriver", 4, Rarity.RARE, mage.cards.g.GoblinPiledriver.class)); + cards.add(new SetCardInfo("Living Wish", 5, Rarity.RARE, mage.cards.l.LivingWish.class)); + cards.add(new SetCardInfo("Mind's Desire", 2, Rarity.RARE, mage.cards.m.MindsDesire.class)); + cards.add(new SetCardInfo("Orim's Chant", 1, Rarity.RARE, mage.cards.o.OrimsChant.class)); + } +} diff --git a/Mage.Sets/src/mage/sets/JudgeGiftCards2009.java b/Mage.Sets/src/mage/sets/JudgeGiftCards2009.java new file mode 100644 index 00000000000..d9bd1a25a02 --- /dev/null +++ b/Mage.Sets/src/mage/sets/JudgeGiftCards2009.java @@ -0,0 +1,34 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/g09 + */ +public class JudgeGiftCards2009 extends ExpansionSet { + + private static final JudgeGiftCards2009 instance = new JudgeGiftCards2009(); + + public static JudgeGiftCards2009 getInstance() { + return instance; + } + + private JudgeGiftCards2009() { + super("Judge Gift Cards 2009", "G09", ExpansionSet.buildDate(2009, 1, 1), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Bloodstained Mire", 6, Rarity.RARE, mage.cards.b.BloodstainedMire.class)); + cards.add(new SetCardInfo("Burning Wish", 5, Rarity.RARE, mage.cards.b.BurningWish.class)); + cards.add(new SetCardInfo("Dark Ritual", 1, Rarity.RARE, mage.cards.d.DarkRitual.class)); + cards.add(new SetCardInfo("Flooded Strand", 7, Rarity.RARE, mage.cards.f.FloodedStrand.class)); + cards.add(new SetCardInfo("Maze of Ith", 2, Rarity.RARE, mage.cards.m.MazeOfIth.class)); + cards.add(new SetCardInfo("Polluted Delta", 8, Rarity.RARE, mage.cards.p.PollutedDelta.class)); + cards.add(new SetCardInfo("Stifle", 3, Rarity.RARE, mage.cards.s.Stifle.class)); + cards.add(new SetCardInfo("Survival of the Fittest", 4, Rarity.RARE, mage.cards.s.SurvivalOfTheFittest.class)); + cards.add(new SetCardInfo("Windswept Heath", 9, Rarity.RARE, mage.cards.w.WindsweptHeath.class)); + cards.add(new SetCardInfo("Wooded Foothills", 10, Rarity.RARE, mage.cards.w.WoodedFoothills.class)); + } +} diff --git a/Mage.Sets/src/mage/sets/JudgeGiftCards2010.java b/Mage.Sets/src/mage/sets/JudgeGiftCards2010.java new file mode 100644 index 00000000000..cc4a430be96 --- /dev/null +++ b/Mage.Sets/src/mage/sets/JudgeGiftCards2010.java @@ -0,0 +1,32 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/g10 + */ +public class JudgeGiftCards2010 extends ExpansionSet { + + private static final JudgeGiftCards2010 instance = new JudgeGiftCards2010(); + + public static JudgeGiftCards2010 getInstance() { + return instance; + } + + private JudgeGiftCards2010() { + super("Judge Gift Cards 2010", "G10", ExpansionSet.buildDate(2010, 1, 1), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Land Tax", 5, Rarity.RARE, mage.cards.l.LandTax.class)); + cards.add(new SetCardInfo("Morphling", 6, Rarity.RARE, mage.cards.m.Morphling.class)); + cards.add(new SetCardInfo("Natural Order", 2, Rarity.RARE, mage.cards.n.NaturalOrder.class)); + cards.add(new SetCardInfo("Phyrexian Dreadnought", 3, Rarity.RARE, mage.cards.p.PhyrexianDreadnought.class)); + cards.add(new SetCardInfo("Sinkhole", 1, Rarity.RARE, mage.cards.s.Sinkhole.class)); + cards.add(new SetCardInfo("Thawing Glaciers", 4, Rarity.RARE, mage.cards.t.ThawingGlaciers.class)); + cards.add(new SetCardInfo("Wasteland", 8, Rarity.RARE, mage.cards.w.Wasteland.class)); + cards.add(new SetCardInfo("Wheel of Fortune", 7, Rarity.RARE, mage.cards.w.WheelOfFortune.class)); + } +} diff --git a/Mage.Sets/src/mage/sets/JudgeGiftCards2011.java b/Mage.Sets/src/mage/sets/JudgeGiftCards2011.java new file mode 100644 index 00000000000..e20390875ae --- /dev/null +++ b/Mage.Sets/src/mage/sets/JudgeGiftCards2011.java @@ -0,0 +1,32 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/g11 + */ +public class JudgeGiftCards2011 extends ExpansionSet { + + private static final JudgeGiftCards2011 instance = new JudgeGiftCards2011(); + + public static JudgeGiftCards2011 getInstance() { + return instance; + } + + private JudgeGiftCards2011() { + super("Judge Gift Cards 2011", "G11", ExpansionSet.buildDate(2011, 1, 1), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Bitterblossom", 1, Rarity.RARE, mage.cards.b.Bitterblossom.class)); + cards.add(new SetCardInfo("Dark Confidant", 6, Rarity.RARE, mage.cards.d.DarkConfidant.class)); + cards.add(new SetCardInfo("Doubling Season", 7, Rarity.RARE, mage.cards.d.DoublingSeason.class)); + cards.add(new SetCardInfo("Entomb", 4, Rarity.RARE, mage.cards.e.Entomb.class)); + cards.add(new SetCardInfo("Goblin Welder", 8, Rarity.RARE, mage.cards.g.GoblinWelder.class)); + cards.add(new SetCardInfo("Mana Crypt", 5, Rarity.RARE, mage.cards.m.ManaCrypt.class)); + cards.add(new SetCardInfo("Sword of Fire and Ice", 2, Rarity.RARE, mage.cards.s.SwordOfFireAndIce.class)); + cards.add(new SetCardInfo("Vendilion Clique", 3, Rarity.RARE, mage.cards.v.VendilionClique.class)); + } +} diff --git a/Mage.Sets/src/mage/sets/JudgeGiftCards2012.java b/Mage.Sets/src/mage/sets/JudgeGiftCards2012.java new file mode 100644 index 00000000000..fa3cf3cc007 --- /dev/null +++ b/Mage.Sets/src/mage/sets/JudgeGiftCards2012.java @@ -0,0 +1,32 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/j12 + */ +public class JudgeGiftCards2012 extends ExpansionSet { + + private static final JudgeGiftCards2012 instance = new JudgeGiftCards2012(); + + public static JudgeGiftCards2012 getInstance() { + return instance; + } + + private JudgeGiftCards2012() { + super("Judge Gift Cards 2012", "J12", ExpansionSet.buildDate(2012, 1, 1), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Command Tower", 8, Rarity.RARE, mage.cards.c.CommandTower.class)); + cards.add(new SetCardInfo("Flusterstorm", 2, Rarity.RARE, mage.cards.f.Flusterstorm.class)); + cards.add(new SetCardInfo("Karakas", 6, Rarity.RARE, mage.cards.k.Karakas.class)); + cards.add(new SetCardInfo("Karmic Guide", 4, Rarity.RARE, mage.cards.k.KarmicGuide.class)); + cards.add(new SetCardInfo("Noble Hierarch", 3, Rarity.RARE, mage.cards.n.NobleHierarch.class)); + cards.add(new SetCardInfo("Sneak Attack", 5, Rarity.RARE, mage.cards.s.SneakAttack.class)); + cards.add(new SetCardInfo("Sword of Light and Shadow", 7, Rarity.RARE, mage.cards.s.SwordOfLightAndShadow.class)); + cards.add(new SetCardInfo("Xiahou Dun, the One-Eyed", 1, Rarity.RARE, mage.cards.x.XiahouDunTheOneEyed.class)); + } +} diff --git a/Mage.Sets/src/mage/sets/JudgeGiftCards2013.java b/Mage.Sets/src/mage/sets/JudgeGiftCards2013.java new file mode 100644 index 00000000000..59257aa8f93 --- /dev/null +++ b/Mage.Sets/src/mage/sets/JudgeGiftCards2013.java @@ -0,0 +1,32 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/j13 + */ +public class JudgeGiftCards2013 extends ExpansionSet { + + private static final JudgeGiftCards2013 instance = new JudgeGiftCards2013(); + + public static JudgeGiftCards2013 getInstance() { + return instance; + } + + private JudgeGiftCards2013() { + super("Judge Gift Cards 2013", "J13", ExpansionSet.buildDate(2013, 1, 1), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Bribery", 2, Rarity.RARE, mage.cards.b.Bribery.class)); + cards.add(new SetCardInfo("Crucible of Worlds", 4, Rarity.RARE, mage.cards.c.CrucibleOfWorlds.class)); + cards.add(new SetCardInfo("Genesis", 5, Rarity.RARE, mage.cards.g.Genesis.class)); + cards.add(new SetCardInfo("Imperial Recruiter", 3, Rarity.RARE, mage.cards.i.ImperialRecruiter.class)); + cards.add(new SetCardInfo("Overwhelming Forces", 6, Rarity.RARE, mage.cards.o.OverwhelmingForces.class)); + cards.add(new SetCardInfo("Show and Tell", 8, Rarity.RARE, mage.cards.s.ShowAndTell.class)); + cards.add(new SetCardInfo("Swords to Plowshares", 1, Rarity.RARE, mage.cards.s.SwordsToPlowshares.class)); + cards.add(new SetCardInfo("Vindicate", 7, Rarity.RARE, mage.cards.v.Vindicate.class)); + } +} diff --git a/Mage.Sets/src/mage/sets/JudgeGiftCards2014.java b/Mage.Sets/src/mage/sets/JudgeGiftCards2014.java new file mode 100644 index 00000000000..9650ba4db32 --- /dev/null +++ b/Mage.Sets/src/mage/sets/JudgeGiftCards2014.java @@ -0,0 +1,39 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/j14 + */ +public class JudgeGiftCards2014 extends ExpansionSet { + + private static final JudgeGiftCards2014 instance = new JudgeGiftCards2014(); + + public static JudgeGiftCards2014 getInstance() { + return instance; + } + + private JudgeGiftCards2014() { + super("Judge Gift Cards 2014", "J14", ExpansionSet.buildDate(2014, 1, 1), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = true; + + // Phyrexian-only printing. Non-English, so not adding it https://github.com/magefree/mage/pull/6190#issuecomment-582354790 + //cards.add(new SetCardInfo("Elesh Norn, Grand Cenobite", 8, Rarity.RARE, mage.cards.e.EleshNornGrandCenobite.class)); + cards.add(new SetCardInfo("Force of Will", 4, Rarity.RARE, mage.cards.f.ForceOfWill.class)); + cards.add(new SetCardInfo("Forest", "5*", Rarity.LAND, mage.cards.basiclands.Forest.class, FULL_ART_ZEN_VARIOUS)); + cards.add(new SetCardInfo("Greater Good", 2, Rarity.RARE, mage.cards.g.GreaterGood.class)); + cards.add(new SetCardInfo("Hanna, Ship's Navigator", 5, Rarity.RARE, mage.cards.h.HannaShipsNavigator.class)); + cards.add(new SetCardInfo("Island", "2*", Rarity.LAND, mage.cards.basiclands.Island.class, FULL_ART_ZEN_VARIOUS)); + cards.add(new SetCardInfo("Karador, Ghost Chieftain", 1, Rarity.RARE, mage.cards.k.KaradorGhostChieftain.class)); + cards.add(new SetCardInfo("Mountain", "4*", Rarity.LAND, mage.cards.basiclands.Mountain.class, FULL_ART_ZEN_VARIOUS)); + cards.add(new SetCardInfo("Nekusar, the Mindrazer", 7, Rarity.RARE, mage.cards.n.NekusarTheMindrazer.class)); + cards.add(new SetCardInfo("Oloro, Ageless Ascetic", 9, Rarity.RARE, mage.cards.o.OloroAgelessAscetic.class)); + cards.add(new SetCardInfo("Plains", "1*", Rarity.LAND, mage.cards.basiclands.Plains.class, FULL_ART_ZEN_VARIOUS)); + cards.add(new SetCardInfo("Riku of Two Reflections", 3, Rarity.MYTHIC, mage.cards.r.RikuOfTwoReflections.class)); + cards.add(new SetCardInfo("Swamp", "3*", Rarity.LAND, mage.cards.basiclands.Swamp.class, FULL_ART_ZEN_VARIOUS)); + cards.add(new SetCardInfo("Sword of Feast and Famine", 6, Rarity.RARE, mage.cards.s.SwordOfFeastAndFamine.class)); + } +} diff --git a/Mage.Sets/src/mage/sets/JudgeGiftCards2015.java b/Mage.Sets/src/mage/sets/JudgeGiftCards2015.java new file mode 100644 index 00000000000..a3047a03019 --- /dev/null +++ b/Mage.Sets/src/mage/sets/JudgeGiftCards2015.java @@ -0,0 +1,32 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/j15 + */ +public class JudgeGiftCards2015 extends ExpansionSet { + + private static final JudgeGiftCards2015 instance = new JudgeGiftCards2015(); + + public static JudgeGiftCards2015 getInstance() { + return instance; + } + + private JudgeGiftCards2015() { + super("Judge Gift Cards 2015", "J15", ExpansionSet.buildDate(2015, 1, 1), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Damnation", 5, Rarity.RARE, mage.cards.d.Damnation.class)); + cards.add(new SetCardInfo("Dualcaster Mage", 6, Rarity.RARE, mage.cards.d.DualcasterMage.class)); + cards.add(new SetCardInfo("Feldon of the Third Path", 7, Rarity.MYTHIC, mage.cards.f.FeldonOfTheThirdPath.class)); + cards.add(new SetCardInfo("Ravages of War", 4, Rarity.RARE, mage.cards.r.RavagesOfWar.class)); + cards.add(new SetCardInfo("Rishadan Port", 3, Rarity.RARE, mage.cards.r.RishadanPort.class)); + cards.add(new SetCardInfo("Shardless Agent", 2, Rarity.RARE, mage.cards.s.ShardlessAgent.class)); + cards.add(new SetCardInfo("Temporal Manipulation", 1, Rarity.RARE, mage.cards.t.TemporalManipulation.class)); + cards.add(new SetCardInfo("Wasteland", 8, Rarity.RARE, mage.cards.w.Wasteland.class)); + } +} diff --git a/Mage.Sets/src/mage/sets/JudgeGiftCards2016.java b/Mage.Sets/src/mage/sets/JudgeGiftCards2016.java new file mode 100644 index 00000000000..24e0ae45190 --- /dev/null +++ b/Mage.Sets/src/mage/sets/JudgeGiftCards2016.java @@ -0,0 +1,31 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/j16 + */ +public class JudgeGiftCards2016 extends ExpansionSet { + + private static final JudgeGiftCards2016 instance = new JudgeGiftCards2016(); + + public static JudgeGiftCards2016 getInstance() { + return instance; + } + + private JudgeGiftCards2016() { + super("Judge Gift Cards 2016", "J16", ExpansionSet.buildDate(2016, 1, 1), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Azusa, Lost but Seeking", 3, Rarity.RARE, mage.cards.a.AzusaLostButSeeking.class)); + cards.add(new SetCardInfo("Command Beacon", 4, Rarity.RARE, mage.cards.c.CommandBeacon.class)); + cards.add(new SetCardInfo("Defense of the Heart", 7, Rarity.RARE, mage.cards.d.DefenseOfTheHeart.class)); + cards.add(new SetCardInfo("Imperial Seal", 6, Rarity.RARE, mage.cards.i.ImperialSeal.class)); + cards.add(new SetCardInfo("Mana Drain", 2, Rarity.RARE, mage.cards.m.ManaDrain.class)); + cards.add(new SetCardInfo("Mystic Confluence", 5, Rarity.RARE, mage.cards.m.MysticConfluence.class)); + cards.add(new SetCardInfo("Zur the Enchanter", 8, Rarity.RARE, mage.cards.z.ZurTheEnchanter.class)); + } +} diff --git a/Mage.Sets/src/mage/sets/JudgeGiftCards2017.java b/Mage.Sets/src/mage/sets/JudgeGiftCards2017.java new file mode 100644 index 00000000000..95aeb250cb6 --- /dev/null +++ b/Mage.Sets/src/mage/sets/JudgeGiftCards2017.java @@ -0,0 +1,34 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/j17 + */ +public class JudgeGiftCards2017 extends ExpansionSet { + + private static final JudgeGiftCards2017 instance = new JudgeGiftCards2017(); + + public static JudgeGiftCards2017 getInstance() { + return instance; + } + + private JudgeGiftCards2017() { + super("Judge Gift Cards 2017", "J17", ExpansionSet.buildDate(2017, 1, 1), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Avacyn, Angel of Hope", 1, Rarity.MYTHIC, mage.cards.a.AvacynAngelOfHope.class)); + cards.add(new SetCardInfo("Capture of Jingzhou", 2, Rarity.RARE, mage.cards.c.CaptureOfJingzhou.class)); + cards.add(new SetCardInfo("Doran, the Siege Tower", 5, Rarity.MYTHIC, mage.cards.d.DoranTheSiegeTower.class)); + cards.add(new SetCardInfo("Gaddock Teeg", 3, Rarity.RARE, mage.cards.g.GaddockTeeg.class)); + cards.add(new SetCardInfo("Homeward Path", 4, Rarity.RARE, mage.cards.h.HomewardPath.class)); + cards.add(new SetCardInfo("Pendelhaven", 8, Rarity.RARE, mage.cards.p.Pendelhaven.class)); + cards.add(new SetCardInfo("Prismatic Geoscope", 6, Rarity.RARE, mage.cards.p.PrismaticGeoscope.class)); + // Card not implemented + // cards.add(new SetCardInfo("Rules Lawyer", 9, Rarity.RARE, mage.cards.r.RulesLawyer.class)); + cards.add(new SetCardInfo("Spellskite", 7, Rarity.RARE, mage.cards.s.Spellskite.class)); + } +} diff --git a/Mage.Sets/src/mage/sets/JudgeGiftCards2018.java b/Mage.Sets/src/mage/sets/JudgeGiftCards2018.java new file mode 100644 index 00000000000..364b11b5571 --- /dev/null +++ b/Mage.Sets/src/mage/sets/JudgeGiftCards2018.java @@ -0,0 +1,32 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/j18 + */ +public class JudgeGiftCards2018 extends ExpansionSet { + + private static final JudgeGiftCards2018 instance = new JudgeGiftCards2018(); + + public static JudgeGiftCards2018 getInstance() { + return instance; + } + + private JudgeGiftCards2018() { + super("Judge Gift Cards 2018", "J18", ExpansionSet.buildDate(2018, 1, 1), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Commander's Sphere", 4, Rarity.RARE, mage.cards.c.CommandersSphere.class)); + cards.add(new SetCardInfo("Food Chain", 8, Rarity.RARE, mage.cards.f.FoodChain.class)); + cards.add(new SetCardInfo("Lord of Atlantis", 6, Rarity.RARE, mage.cards.l.LordOfAtlantis.class)); + cards.add(new SetCardInfo("Merchant Scroll", 1, Rarity.RARE, mage.cards.m.MerchantScroll.class)); + cards.add(new SetCardInfo("Nin, the Pain Artist", 3, Rarity.RARE, mage.cards.n.NinThePainArtist.class)); + cards.add(new SetCardInfo("Rhystic Study", 7, Rarity.RARE, mage.cards.r.RhysticStudy.class)); + cards.add(new SetCardInfo("Teferi's Protection", 5, Rarity.RARE, mage.cards.t.TeferisProtection.class)); + cards.add(new SetCardInfo("Vampiric Tutor", 2, Rarity.RARE, mage.cards.v.VampiricTutor.class)); + } +} diff --git a/Mage.Sets/src/mage/sets/JudgeGiftCards2019.java b/Mage.Sets/src/mage/sets/JudgeGiftCards2019.java new file mode 100644 index 00000000000..2ae96bb0e50 --- /dev/null +++ b/Mage.Sets/src/mage/sets/JudgeGiftCards2019.java @@ -0,0 +1,32 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/j19 + */ +public class JudgeGiftCards2019 extends ExpansionSet { + + private static final JudgeGiftCards2019 instance = new JudgeGiftCards2019(); + + public static JudgeGiftCards2019 getInstance() { + return instance; + } + + private JudgeGiftCards2019() { + super("Judge Gift Cards 2019", "J19", ExpansionSet.buildDate(2019, 4, 10), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Chalice of the Void", 7, Rarity.RARE, mage.cards.c.ChaliceOfTheVoid.class)); + cards.add(new SetCardInfo("Isolated Watchtower", 4, Rarity.MYTHIC, mage.cards.i.IsolatedWatchtower.class)); + cards.add(new SetCardInfo("Mirri's Guile", 1, Rarity.MYTHIC, mage.cards.m.MirrisGuile.class)); + cards.add(new SetCardInfo("Monastery Mentor", 5, Rarity.MYTHIC, mage.cards.m.MonasteryMentor.class)); + cards.add(new SetCardInfo("Mox Opal", 3, Rarity.MYTHIC, mage.cards.m.MoxOpal.class)); + cards.add(new SetCardInfo("Reflecting Pool", 8, Rarity.RARE, mage.cards.r.ReflectingPool.class)); + cards.add(new SetCardInfo("Sliver Legion", 2, Rarity.MYTHIC, mage.cards.s.SliverLegion.class)); + cards.add(new SetCardInfo("Yuriko, the Tiger's Shadow", 6, Rarity.RARE, mage.cards.y.YurikoTheTigersShadow.class)); + } +} diff --git a/Mage.Sets/src/mage/sets/JudgeGiftCards2020.java b/Mage.Sets/src/mage/sets/JudgeGiftCards2020.java new file mode 100644 index 00000000000..d409a1c4709 --- /dev/null +++ b/Mage.Sets/src/mage/sets/JudgeGiftCards2020.java @@ -0,0 +1,30 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/j20 + */ +public class JudgeGiftCards2020 extends ExpansionSet { + + private static final JudgeGiftCards2020 instance = new JudgeGiftCards2020(); + + public static JudgeGiftCards2020 getInstance() { + return instance; + } + + private JudgeGiftCards2020() { + super("Judge Gift Cards 2020", "J20", ExpansionSet.buildDate(2020, 1, 1), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Arena Rector", 1, Rarity.RARE, mage.cards.a.ArenaRector.class)); + cards.add(new SetCardInfo("Demonic Tutor", 4, Rarity.RARE, mage.cards.d.DemonicTutor.class)); + cards.add(new SetCardInfo("Enlightened Tutor", 2, Rarity.RARE, mage.cards.e.EnlightenedTutor.class)); + cards.add(new SetCardInfo("Gamble", 6, Rarity.RARE, mage.cards.g.Gamble.class)); + cards.add(new SetCardInfo("Spellseeker", 3, Rarity.RARE, mage.cards.s.Spellseeker.class)); + cards.add(new SetCardInfo("Sylvan Tutor", 8, Rarity.RARE, mage.cards.s.SylvanTutor.class)); + } +} diff --git a/Mage.Sets/src/mage/sets/JudgePromo.java b/Mage.Sets/src/mage/sets/JudgePromo.java deleted file mode 100644 index 5efbac3d004..00000000000 --- a/Mage.Sets/src/mage/sets/JudgePromo.java +++ /dev/null @@ -1,136 +0,0 @@ - -package mage.sets; - -import mage.cards.ExpansionSet; -import mage.constants.Rarity; -import mage.constants.SetType; - -/** - * - * @author fireshoes - */ -public final class JudgePromo extends ExpansionSet { - - private static final JudgePromo instance = new JudgePromo(); - - public static JudgePromo getInstance() { - return instance; - } - - private JudgePromo() { - super("Judge Promo", "JR", ExpansionSet.buildDate(2011, 6, 17), SetType.PROMOTIONAL); - this.hasBoosters = false; - cards.add(new SetCardInfo("Argothian Enchantress", 12, Rarity.RARE, mage.cards.a.ArgothianEnchantress.class)); - cards.add(new SetCardInfo("Armageddon", 14, Rarity.RARE, mage.cards.a.Armageddon.class)); - cards.add(new SetCardInfo("Avacyn, Angel of Hope", 110, Rarity.SPECIAL, mage.cards.a.AvacynAngelOfHope.class)); - cards.add(new SetCardInfo("Azusa, Lost but Seeking", 102, Rarity.RARE, mage.cards.a.AzusaLostButSeeking.class));// 2016 003/008 - cards.add(new SetCardInfo("Balance", 15, Rarity.RARE, mage.cards.b.Balance.class)); - cards.add(new SetCardInfo("Ball Lightning", 7, Rarity.RARE, mage.cards.b.BallLightning.class)); - cards.add(new SetCardInfo("Bitterblossom", 59, Rarity.RARE, mage.cards.b.Bitterblossom.class)); - cards.add(new SetCardInfo("Bloodstained Mire", 43, Rarity.RARE, mage.cards.b.BloodstainedMire.class)); - cards.add(new SetCardInfo("Bribery", 73, Rarity.RARE, mage.cards.b.Bribery.class)); - cards.add(new SetCardInfo("Burning Wish", 42, Rarity.RARE, mage.cards.b.BurningWish.class)); - cards.add(new SetCardInfo("Command Beacon", 105, Rarity.RARE, mage.cards.c.CommandBeacon.class));// 2016 004/008 - cards.add(new SetCardInfo("Command Tower", 71, Rarity.COMMON, mage.cards.c.CommandTower.class)); - cards.add(new SetCardInfo("Counterspell", 5, Rarity.COMMON, mage.cards.c.Counterspell.class)); - cards.add(new SetCardInfo("Crucible of Worlds", 75, Rarity.RARE, mage.cards.c.CrucibleOfWorlds.class)); - cards.add(new SetCardInfo("Cunning Wish", 29, Rarity.RARE, mage.cards.c.CunningWish.class)); - cards.add(new SetCardInfo("Damnation", 98, Rarity.RARE, mage.cards.d.Damnation.class)); - cards.add(new SetCardInfo("Dark Confidant", 61, Rarity.RARE, mage.cards.d.DarkConfidant.class)); - cards.add(new SetCardInfo("Dark Ritual", 38, Rarity.COMMON, mage.cards.d.DarkRitual.class)); - cards.add(new SetCardInfo("Decree of Justice", 32, Rarity.RARE, mage.cards.d.DecreeOfJustice.class)); - cards.add(new SetCardInfo("Defense of the Heart", 106, Rarity.RARE, mage.cards.d.DefenseOfTheHeart.class)); // 2016 007/008 - cards.add(new SetCardInfo("Demonic Tutor", 35, Rarity.UNCOMMON, mage.cards.d.DemonicTutor.class)); - cards.add(new SetCardInfo("Deranged Hermit", 18, Rarity.RARE, mage.cards.d.DerangedHermit.class)); - cards.add(new SetCardInfo("Doubling Season", 62, Rarity.RARE, mage.cards.d.DoublingSeason.class)); - cards.add(new SetCardInfo("Dualcaster Mage", 99, Rarity.RARE, mage.cards.d.DualcasterMage.class)); - cards.add(new SetCardInfo("Elesh Norn, Grand Cenobite", 87, Rarity.MYTHIC, mage.cards.e.EleshNornGrandCenobite.class)); - cards.add(new SetCardInfo("Entomb", 56, Rarity.RARE, mage.cards.e.Entomb.class)); - cards.add(new SetCardInfo("Exalted Angel", 24, Rarity.RARE, mage.cards.e.ExaltedAngel.class)); - cards.add(new SetCardInfo("Feldon of the Third Path", 100, Rarity.MYTHIC, mage.cards.f.FeldonOfTheThirdPath.class)); - cards.add(new SetCardInfo("Flooded Strand", 44, Rarity.RARE, mage.cards.f.FloodedStrand.class)); - cards.add(new SetCardInfo("Flusterstorm", 65, Rarity.RARE, mage.cards.f.Flusterstorm.class)); - cards.add(new SetCardInfo("Force of Will", 83, Rarity.UNCOMMON, mage.cards.f.ForceOfWill.class)); - cards.add(new SetCardInfo("Forest", 93, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Gaddock Teeg", 112, Rarity.SPECIAL, mage.cards.g.GaddockTeeg.class)); - cards.add(new SetCardInfo("Gaea's Cradle", 3, Rarity.RARE, mage.cards.g.GaeasCradle.class)); - cards.add(new SetCardInfo("Gemstone Mine", 20, Rarity.UNCOMMON, mage.cards.g.GemstoneMine.class)); - cards.add(new SetCardInfo("Genesis", 79, Rarity.RARE, mage.cards.g.Genesis.class)); - cards.add(new SetCardInfo("Goblin Piledriver", 36, Rarity.RARE, mage.cards.g.GoblinPiledriver.class)); - cards.add(new SetCardInfo("Goblin Welder", 63, Rarity.RARE, mage.cards.g.GoblinWelder.class)); - cards.add(new SetCardInfo("Greater Good", 81, Rarity.RARE, mage.cards.g.GreaterGood.class)); - cards.add(new SetCardInfo("Grim Lavamancer", 25, Rarity.RARE, mage.cards.g.GrimLavamancer.class)); - cards.add(new SetCardInfo("Grindstone", 104, Rarity.RARE, mage.cards.g.Grindstone.class)); - cards.add(new SetCardInfo("Hammer of Bogardan", 9, Rarity.RARE, mage.cards.h.HammerOfBogardan.class)); - cards.add(new SetCardInfo("Hanna, Ship's Navigator", 84, Rarity.RARE, mage.cards.h.HannaShipsNavigator.class)); - cards.add(new SetCardInfo("Hermit Druid", 19, Rarity.RARE, mage.cards.h.HermitDruid.class)); - cards.add(new SetCardInfo("Homeward Path", 113, Rarity.SPECIAL, mage.cards.h.HomewardPath.class)); - cards.add(new SetCardInfo("Imperial Recruiter", 74, Rarity.UNCOMMON, mage.cards.i.ImperialRecruiter.class)); - cards.add(new SetCardInfo("Imperial Seal", 109, Rarity.SPECIAL, mage.cards.i.ImperialSeal.class));// 2016 006/008 - cards.add(new SetCardInfo("Intuition", 11, Rarity.RARE, mage.cards.i.Intuition.class)); - cards.add(new SetCardInfo("Island", 90, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Karador, Ghost Chieftain", 80, Rarity.MYTHIC, mage.cards.k.KaradorGhostChieftain.class)); - cards.add(new SetCardInfo("Karakas", 69, Rarity.UNCOMMON, mage.cards.k.Karakas.class)); - cards.add(new SetCardInfo("Karmic Guide", 67, Rarity.RARE, mage.cards.k.KarmicGuide.class)); - cards.add(new SetCardInfo("Land Tax", 52, Rarity.RARE, mage.cards.l.LandTax.class)); - cards.add(new SetCardInfo("Lightning Bolt", 1, Rarity.COMMON, mage.cards.l.LightningBolt.class)); - cards.add(new SetCardInfo("Living Death", 13, Rarity.RARE, mage.cards.l.LivingDeath.class)); - cards.add(new SetCardInfo("Living Wish", 37, Rarity.RARE, mage.cards.l.LivingWish.class)); - cards.add(new SetCardInfo("Mana Crypt", 60, Rarity.RARE, mage.cards.m.ManaCrypt.class)); - cards.add(new SetCardInfo("Mana Drain", 103, Rarity.UNCOMMON, mage.cards.m.ManaDrain.class));// 2016 002/008 - cards.add(new SetCardInfo("Maze of Ith", 39, Rarity.UNCOMMON, mage.cards.m.MazeOfIth.class)); - cards.add(new SetCardInfo("Meddling Mage", 26, Rarity.RARE, mage.cards.m.MeddlingMage.class)); - cards.add(new SetCardInfo("Memory Lapse", 4, Rarity.COMMON, mage.cards.m.MemoryLapse.class)); - cards.add(new SetCardInfo("Mind's Desire", 34, Rarity.RARE, mage.cards.m.MindsDesire.class)); - cards.add(new SetCardInfo("Mishra's Factory", 23, Rarity.UNCOMMON, mage.cards.m.MishrasFactory.class)); - cards.add(new SetCardInfo("Morphling", 53, Rarity.RARE, mage.cards.m.Morphling.class)); - cards.add(new SetCardInfo("Mountain", 92, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Mystic Confluence", 108, Rarity.SPECIAL, mage.cards.m.MysticConfluence.class, NON_FULL_USE_VARIOUS)); // 2016 005/008 - cards.add(new SetCardInfo("Natural Order", 49, Rarity.RARE, mage.cards.n.NaturalOrder.class)); - cards.add(new SetCardInfo("Nekusar, the Mindrazer", 86, Rarity.MYTHIC, mage.cards.n.NekusarTheMindrazer.class)); - cards.add(new SetCardInfo("Noble Hierarch", 66, Rarity.RARE, mage.cards.n.NobleHierarch.class)); - cards.add(new SetCardInfo("Oath of Druids", 8, Rarity.RARE, mage.cards.o.OathOfDruids.class)); - cards.add(new SetCardInfo("Oloro, Ageless Ascetic", 88, Rarity.MYTHIC, mage.cards.o.OloroAgelessAscetic.class)); - cards.add(new SetCardInfo("Orim's Chant", 33, Rarity.RARE, mage.cards.o.OrimsChant.class)); - cards.add(new SetCardInfo("Overwhelming Forces", 76, Rarity.RARE, mage.cards.o.OverwhelmingForces.class)); - cards.add(new SetCardInfo("Pernicious Deed", 27, Rarity.RARE, mage.cards.p.PerniciousDeed.class)); - cards.add(new SetCardInfo("Phyrexian Dreadnought", 50, Rarity.RARE, mage.cards.p.PhyrexianDreadnought.class)); - cards.add(new SetCardInfo("Phyrexian Negator", 17, Rarity.RARE, mage.cards.p.PhyrexianNegator.class)); - cards.add(new SetCardInfo("Plains", 89, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Polluted Delta", 45, Rarity.RARE, mage.cards.p.PollutedDelta.class)); - cards.add(new SetCardInfo("Ravages of War", 97, Rarity.RARE, mage.cards.r.RavagesOfWar.class)); - cards.add(new SetCardInfo("Ravenous Baloth", 28, Rarity.RARE, mage.cards.r.RavenousBaloth.class)); - cards.add(new SetCardInfo("Regrowth", 21, Rarity.UNCOMMON, mage.cards.r.Regrowth.class)); - cards.add(new SetCardInfo("Riku of Two Reflections", 82, Rarity.MYTHIC, mage.cards.r.RikuOfTwoReflections.class)); - cards.add(new SetCardInfo("Rishadan Port", 96, Rarity.RARE, mage.cards.r.RishadanPort.class)); - cards.add(new SetCardInfo("Shardless Agent", 95, Rarity.UNCOMMON, mage.cards.s.ShardlessAgent.class)); - cards.add(new SetCardInfo("Show and Tell", 77, Rarity.RARE, mage.cards.s.ShowAndTell.class)); - cards.add(new SetCardInfo("Sinkhole", 48, Rarity.COMMON, mage.cards.s.Sinkhole.class)); - cards.add(new SetCardInfo("Sneak Attack", 68, Rarity.RARE, mage.cards.s.SneakAttack.class)); - cards.add(new SetCardInfo("Sol Ring", 22, Rarity.UNCOMMON, mage.cards.s.SolRing.class)); - cards.add(new SetCardInfo("Stifle", 40, Rarity.RARE, mage.cards.s.Stifle.class)); - cards.add(new SetCardInfo("Stroke of Genius", 2, Rarity.RARE, mage.cards.s.StrokeOfGenius.class)); - cards.add(new SetCardInfo("Survival of the Fittest", 41, Rarity.RARE, mage.cards.s.SurvivalOfTheFittest.class)); - cards.add(new SetCardInfo("Swamp", 91, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Sword of Feast and Famine", 85, Rarity.MYTHIC, mage.cards.s.SwordOfFeastAndFamine.class)); - cards.add(new SetCardInfo("Sword of Fire and Ice", 57, Rarity.RARE, mage.cards.s.SwordOfFireAndIce.class)); - cards.add(new SetCardInfo("Sword of Light and Shadow", 70, Rarity.RARE, mage.cards.s.SwordOfLightAndShadow.class)); - cards.add(new SetCardInfo("Swords to Plowshares", 72, Rarity.UNCOMMON, mage.cards.s.SwordsToPlowshares.class)); - cards.add(new SetCardInfo("Thawing Glaciers", 51, Rarity.RARE, mage.cards.t.ThawingGlaciers.class)); - cards.add(new SetCardInfo("Time Warp", 16, Rarity.MYTHIC, mage.cards.t.TimeWarp.class)); - cards.add(new SetCardInfo("Tradewind Rider", 10, Rarity.RARE, mage.cards.t.TradewindRider.class)); - cards.add(new SetCardInfo("Vampiric Tutor", 6, Rarity.RARE, mage.cards.v.VampiricTutor.class)); - cards.add(new SetCardInfo("Vendilion Clique", 58, Rarity.RARE, mage.cards.v.VendilionClique.class)); - cards.add(new SetCardInfo("Vindicate", 31, Rarity.RARE, mage.cards.v.Vindicate.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Vindicate", 78, Rarity.RARE, mage.cards.v.Vindicate.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Wasteland", 55, Rarity.UNCOMMON, mage.cards.w.Wasteland.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Wasteland", 101, Rarity.RARE, mage.cards.w.Wasteland.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Wheel of Fortune", 54, Rarity.RARE, mage.cards.w.WheelOfFortune.class)); - cards.add(new SetCardInfo("Windswept Heath", 46, Rarity.RARE, mage.cards.w.WindsweptHeath.class)); - cards.add(new SetCardInfo("Wooded Foothills", 47, Rarity.RARE, mage.cards.w.WoodedFoothills.class)); - cards.add(new SetCardInfo("Xiahou Dun, the One-Eyed", 64, Rarity.RARE, mage.cards.x.XiahouDunTheOneEyed.class)); - cards.add(new SetCardInfo("Yawgmoth's Will", 30, Rarity.RARE, mage.cards.y.YawgmothsWill.class)); - cards.add(new SetCardInfo("Zur the Enchanter", 107, Rarity.RARE, mage.cards.z.ZurTheEnchanter.class)); // 2016 008/008 - } - -} diff --git a/Mage.Tests/src/test/java/org/mage/test/serverside/deck/DeckValidatorTest.java b/Mage.Tests/src/test/java/org/mage/test/serverside/deck/DeckValidatorTest.java index d5fb13d47ab..1628d329dc6 100644 --- a/Mage.Tests/src/test/java/org/mage/test/serverside/deck/DeckValidatorTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/serverside/deck/DeckValidatorTest.java @@ -135,7 +135,7 @@ public class DeckValidatorTest extends MageTestBase { Assert.assertFalse("Counterspell not allowed in modern", testDeckValid(new Modern(), deckList)); deckList.clear(); - deckList.add(new CardNameAmount("JR", 5, 4)); + deckList.add(new CardNameAmount("G00", 1, 4)); deckList.add(new CardNameAmount("Mountain", 56)); Assert.assertFalse("Counterspell not allowed in modern", testDeckValid(new Modern(), deckList)); From e76b8d1a19d05f6949dd4f29f8b53ab15d87d30d Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Mon, 3 Feb 2020 13:49:50 +0100 Subject: [PATCH 031/182] Skip failing card cost verification during tests. Affected: "Erase", "Shrine Keeper". This allows all tests to pass. --- Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java b/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java index 9c0eeb7de19..a7c4e0026ac 100644 --- a/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java +++ b/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java @@ -102,9 +102,11 @@ public class VerifyCardDataTest { skipListAddName(SKIP_LIST_COST, "KTK", "Erase"); skipListAddName(SKIP_LIST_COST, "M13", "Erase"); skipListAddName(SKIP_LIST_COST, "ULG", "Erase"); + skipListAddName(SKIP_LIST_COST, "WC00", "Erase"); skipListAddName(SKIP_LIST_COST, "H17", "Grimlock, Dinobot Leader"); skipListAddName(SKIP_LIST_COST, "UST", "Everythingamajig"); skipListAddName(SKIP_LIST_COST, "THB", "Anax, Hardened in the Forge"); // until it's been corrected in MTGJSON + skipListAddName(SKIP_LIST_COST, "ANA", "Shrine Keeper"); // until it's been corrected in MTGJSON // supertype skipListCreate(SKIP_LIST_SUPERTYPE); From 048f80a9db5a4c28cc98f8bd7f83da85bf593057 Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Mon, 3 Feb 2020 19:16:57 +0100 Subject: [PATCH 032/182] Added the Deckmasters (DKM) Box set. --- .../dl/sources/ScryfallImageSupportCards.java | 2 +- Mage.Sets/src/mage/sets/Deckmasters.java | 83 +++++++++++++++++++ 2 files changed, 84 insertions(+), 1 deletion(-) create mode 100644 Mage.Sets/src/mage/sets/Deckmasters.java diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java index a684a645a1a..ab25e731ce6 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java @@ -101,7 +101,7 @@ public class ScryfallImageSupportCards { add("7ED"); add("APC"); add("ODY"); - // add("DKM"); // Deckmasters 2001 + add("DKM"); add("TOR"); add("JUD"); add("ONS"); diff --git a/Mage.Sets/src/mage/sets/Deckmasters.java b/Mage.Sets/src/mage/sets/Deckmasters.java new file mode 100644 index 00000000000..de39a48faa1 --- /dev/null +++ b/Mage.Sets/src/mage/sets/Deckmasters.java @@ -0,0 +1,83 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/dkm + */ +public class Deckmasters extends ExpansionSet { + + private static final Deckmasters instance = new Deckmasters(); + + public static Deckmasters getInstance() { + return instance; + } + + private Deckmasters() { + super("Deckmasters", "DKM", ExpansionSet.buildDate(2001, 12, 1), SetType.SUPPLEMENTAL); + this.hasBoosters = false; + this.hasBasicLands = true; + + cards.add(new SetCardInfo("Abyssal Specter", 1, Rarity.UNCOMMON, mage.cards.a.AbyssalSpecter.class)); + cards.add(new SetCardInfo("Balduvian Bears", 22, Rarity.COMMON, mage.cards.b.BalduvianBears.class)); + cards.add(new SetCardInfo("Balduvian Horde", 10, Rarity.RARE, mage.cards.b.BalduvianHorde.class)); + cards.add(new SetCardInfo("Barbed Sextant", 34, Rarity.COMMON, mage.cards.b.BarbedSextant.class)); + cards.add(new SetCardInfo("Bounty of the Hunt", 23, Rarity.UNCOMMON, mage.cards.b.BountyOfTheHunt.class)); + cards.add(new SetCardInfo("Contagion", 2, Rarity.UNCOMMON, mage.cards.c.Contagion.class)); + cards.add(new SetCardInfo("Dark Banishing", 3, Rarity.COMMON, mage.cards.d.DarkBanishing.class)); + cards.add(new SetCardInfo("Dark Ritual", 4, Rarity.COMMON, mage.cards.d.DarkRitual.class)); + cards.add(new SetCardInfo("Death Spark", 11, Rarity.UNCOMMON, mage.cards.d.DeathSpark.class)); + cards.add(new SetCardInfo("Elkin Bottle", 35, Rarity.RARE, mage.cards.e.ElkinBottle.class)); + cards.add(new SetCardInfo("Elvish Bard", 24, Rarity.UNCOMMON, mage.cards.e.ElvishBard.class)); + cards.add(new SetCardInfo("Folk of the Pines", 25, Rarity.COMMON, mage.cards.f.FolkOfThePines.class)); + cards.add(new SetCardInfo("Forest", 48, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", 49, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", 50, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Foul Familiar", 5, Rarity.COMMON, mage.cards.f.FoulFamiliar.class)); + cards.add(new SetCardInfo("Fyndhorn Elves", 26, Rarity.COMMON, mage.cards.f.FyndhornElves.class)); + cards.add(new SetCardInfo("Giant Growth", 27, Rarity.COMMON, mage.cards.g.GiantGrowth.class)); + cards.add(new SetCardInfo("Giant Trap Door Spider", 33, Rarity.RARE, mage.cards.g.GiantTrapDoorSpider.class)); + cards.add(new SetCardInfo("Goblin Mutant", 12, Rarity.UNCOMMON, mage.cards.g.GoblinMutant.class)); + cards.add(new SetCardInfo("Guerrilla Tactics", "13a", Rarity.COMMON, mage.cards.g.GuerrillaTactics.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Guerrilla Tactics", "13b", Rarity.COMMON, mage.cards.g.GuerrillaTactics.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Hurricane", 28, Rarity.UNCOMMON, mage.cards.h.Hurricane.class)); + cards.add(new SetCardInfo("Icy Manipulator", 36, Rarity.UNCOMMON, mage.cards.i.IcyManipulator.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Icy Manipulator", "36s", Rarity.UNCOMMON, mage.cards.i.IcyManipulator.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Incinerate", 14, Rarity.COMMON, mage.cards.i.Incinerate.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Incinerate", "14s", Rarity.COMMON, mage.cards.i.Incinerate.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Jokulhaups", 15, Rarity.RARE, mage.cards.j.Jokulhaups.class)); + cards.add(new SetCardInfo("Karplusan Forest", 39, Rarity.RARE, mage.cards.k.KarplusanForest.class)); + // Card not implemented + // cards.add(new SetCardInfo("Lava Burst", 16, Rarity.COMMON, mage.cards.l.LavaBurst.class)); + cards.add(new SetCardInfo("Lhurgoyf", 29, Rarity.RARE, mage.cards.l.Lhurgoyf.class)); + cards.add(new SetCardInfo("Lim-Dûl's High Guard", "6a", Rarity.COMMON, mage.cards.l.LimDulsHighGuard.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Lim-Dûl's High Guard", "6b", Rarity.COMMON, mage.cards.l.LimDulsHighGuard.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", 45, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", 46, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", 47, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Necropotence", 7, Rarity.RARE, mage.cards.n.Necropotence.class)); + cards.add(new SetCardInfo("Orcish Cannoneers", 17, Rarity.UNCOMMON, mage.cards.o.OrcishCannoneers.class)); + cards.add(new SetCardInfo("Phantasmal Fiend", "8a", Rarity.COMMON, mage.cards.p.PhantasmalFiend.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Phantasmal Fiend", "8b", Rarity.COMMON, mage.cards.p.PhantasmalFiend.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Phyrexian War Beast", "37a", Rarity.COMMON, mage.cards.p.PhyrexianWarBeast.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Phyrexian War Beast", "37b", Rarity.COMMON, mage.cards.p.PhyrexianWarBeast.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Pillage", 18, Rarity.UNCOMMON, mage.cards.p.Pillage.class)); + cards.add(new SetCardInfo("Pyroclasm", 19, Rarity.UNCOMMON, mage.cards.p.Pyroclasm.class)); + cards.add(new SetCardInfo("Shatter", 20, Rarity.COMMON, mage.cards.s.Shatter.class)); + cards.add(new SetCardInfo("Soul Burn", 9, Rarity.COMMON, mage.cards.s.SoulBurn.class)); + cards.add(new SetCardInfo("Storm Shaman", "21a", Rarity.COMMON, mage.cards.s.StormShaman.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Storm Shaman", "21b", Rarity.COMMON, mage.cards.s.StormShaman.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Sulfurous Springs", 40, Rarity.RARE, mage.cards.s.SulfurousSprings.class)); + cards.add(new SetCardInfo("Swamp", 42, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", 43, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", 44, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Underground River", 41, Rarity.RARE, mage.cards.u.UndergroundRiver.class)); + cards.add(new SetCardInfo("Walking Wall", 38, Rarity.UNCOMMON, mage.cards.w.WalkingWall.class)); + cards.add(new SetCardInfo("Woolly Spider", 30, Rarity.COMMON, mage.cards.w.WoollySpider.class)); + cards.add(new SetCardInfo("Yavimaya Ancients", "31a", Rarity.COMMON, mage.cards.y.YavimayaAncients.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Yavimaya Ancients", "31b", Rarity.COMMON, mage.cards.y.YavimayaAncients.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Yavimaya Ants", 32, Rarity.UNCOMMON, mage.cards.y.YavimayaAnts.class)); + } +} From 8675c3eb115dbb603a32fac1bb4a39576b441159 Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Mon, 3 Feb 2020 20:46:32 +0100 Subject: [PATCH 033/182] Added the Magic Online Promos (PRM) promotional set. --- .../dl/sources/ScryfallImageSupportCards.java | 20 + .../src/mage/sets/MagicOnlinePromos.java | 1276 +++++++++++++++++ 2 files changed, 1296 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/MagicOnlinePromos.java diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java index ab25e731ce6..66139e93c23 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java @@ -65,6 +65,25 @@ public class ScryfallImageSupportCards { add("G99"); add("G00"); add("G01"); + add("G02"); + add("G03"); + add("G04"); + add("G05"); + add("G06"); + add("G07"); + add("G08"); + add("G09"); + add("G10"); + add("G11"); + add("J12"); + add("J13"); + add("J14"); + add("J15"); + add("J16"); + add("J17"); + add("J18"); + add("J19"); + add("J20"); // Arena League add("PARL"); @@ -104,6 +123,7 @@ public class ScryfallImageSupportCards { add("DKM"); add("TOR"); add("JUD"); + add("PRM"); add("ONS"); add("LGN"); add("SCG"); diff --git a/Mage.Sets/src/mage/sets/MagicOnlinePromos.java b/Mage.Sets/src/mage/sets/MagicOnlinePromos.java new file mode 100644 index 00000000000..db7e93e7574 --- /dev/null +++ b/Mage.Sets/src/mage/sets/MagicOnlinePromos.java @@ -0,0 +1,1276 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.cards.CardGraphicInfo; +import mage.cards.FrameStyle; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/prm + */ +public class MagicOnlinePromos extends ExpansionSet { + + private static final MagicOnlinePromos instance = new MagicOnlinePromos(); + + public static MagicOnlinePromos getInstance() { + return instance; + } + + private MagicOnlinePromos() { + super("Magic Online Promos", "PRM", ExpansionSet.buildDate(2002, 6, 24), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = true; + + final CardGraphicInfo MPR_FULL_ART = new CardGraphicInfo(FrameStyle.MPRP_FULL_ART_BASIC, true); + + cards.add(new SetCardInfo("Abbot of Keral Keep", 62501, Rarity.RARE, mage.cards.a.AbbotOfKeralKeep.class)); + cards.add(new SetCardInfo("Abhorrent Overlord", 50126, Rarity.RARE, mage.cards.a.AbhorrentOverlord.class)); + cards.add(new SetCardInfo("Abrade", 65001, Rarity.UNCOMMON, mage.cards.a.Abrade.class)); + cards.add(new SetCardInfo("Abrupt Decay", 59681, Rarity.RARE, mage.cards.a.AbruptDecay.class)); + cards.add(new SetCardInfo("Abu Ja'far", 62479, Rarity.UNCOMMON, mage.cards.a.AbuJafar.class)); + cards.add(new SetCardInfo("Abzan Beastmaster", 55888, Rarity.UNCOMMON, mage.cards.a.AbzanBeastmaster.class)); + cards.add(new SetCardInfo("Accumulated Knowledge", 36182, Rarity.COMMON, mage.cards.a.AccumulatedKnowledge.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Accumulated Knowledge", 59641, Rarity.COMMON, mage.cards.a.AccumulatedKnowledge.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Acidic Slime", 45199, Rarity.UNCOMMON, mage.cards.a.AcidicSlime.class)); + cards.add(new SetCardInfo("Adorned Pouncer", 64993, Rarity.RARE, mage.cards.a.AdornedPouncer.class)); + cards.add(new SetCardInfo("Aether Hub", 64432, Rarity.UNCOMMON, mage.cards.a.AetherHub.class)); + cards.add(new SetCardInfo("Aether Storm", 62453, Rarity.UNCOMMON, mage.cards.a.AetherStorm.class)); + cards.add(new SetCardInfo("Ainok Tracker", 55779, Rarity.COMMON, mage.cards.a.AinokTracker.class)); + cards.add(new SetCardInfo("Aisling Leprechaun", 35050, Rarity.COMMON, mage.cards.a.AislingLeprechaun.class)); + cards.add(new SetCardInfo("Ajani Goldmane", 37847, Rarity.MYTHIC, mage.cards.a.AjaniGoldmane.class)); + cards.add(new SetCardInfo("Ajani Vengeant", 31969, Rarity.MYTHIC, mage.cards.a.AjaniVengeant.class)); + cards.add(new SetCardInfo("Albino Troll", 36122, Rarity.UNCOMMON, mage.cards.a.AlbinoTroll.class)); + cards.add(new SetCardInfo("Alhammarret, High Arbiter", 57588, Rarity.RARE, mage.cards.a.AlhammarretHighArbiter.class)); + cards.add(new SetCardInfo("Allosaurus Rider", 32033, Rarity.RARE, mage.cards.a.AllosaurusRider.class)); + cards.add(new SetCardInfo("Altar of the Brood", 55787, Rarity.RARE, mage.cards.a.AltarOfTheBrood.class)); + cards.add(new SetCardInfo("Ambition's Cost", 62523, Rarity.UNCOMMON, mage.cards.a.AmbitionsCost.class)); + cards.add(new SetCardInfo("Anathemancer", 37606, Rarity.UNCOMMON, mage.cards.a.Anathemancer.class)); + cards.add(new SetCardInfo("Ancestral Recall", 46954, Rarity.RARE, mage.cards.a.AncestralRecall.class)); + cards.add(new SetCardInfo("Ancient Grudge", 43590, Rarity.COMMON, mage.cards.a.AncientGrudge.class)); + cards.add(new SetCardInfo("Ancient Hellkite", 37594, Rarity.RARE, mage.cards.a.AncientHellkite.class)); + cards.add(new SetCardInfo("Ancient Stirrings", 70944, Rarity.MYTHIC, mage.cards.a.AncientStirrings.class)); + cards.add(new SetCardInfo("Ancient Ziggurat", 43562, Rarity.UNCOMMON, mage.cards.a.AncientZiggurat.class)); + cards.add(new SetCardInfo("Angel of Deliverance", 60474, Rarity.RARE, mage.cards.a.AngelOfDeliverance.class)); + cards.add(new SetCardInfo("Anguished Unmaking", 60462, Rarity.RARE, mage.cards.a.AnguishedUnmaking.class)); + cards.add(new SetCardInfo("Ankle Shanker", 54512, Rarity.RARE, mage.cards.a.AnkleShanker.class)); + cards.add(new SetCardInfo("Ant Queen", 33103, Rarity.RARE, mage.cards.a.AntQueen.class)); + cards.add(new SetCardInfo("Anthousa, Setessan Hero", 50124, Rarity.RARE, mage.cards.a.AnthousaSetessanHero.class)); + cards.add(new SetCardInfo("Anticipate", 58267, Rarity.COMMON, mage.cards.a.Anticipate.class)); + cards.add(new SetCardInfo("Arashin Sovereign", 56996, Rarity.RARE, mage.cards.a.ArashinSovereign.class)); + cards.add(new SetCardInfo("Arashin War Beast", 55741, Rarity.UNCOMMON, mage.cards.a.ArashinWarBeast.class)); + cards.add(new SetCardInfo("Arbiter of the Ideal", 51912, Rarity.RARE, mage.cards.a.ArbiterOfTheIdeal.class)); + cards.add(new SetCardInfo("Arc Lightning", 36116, Rarity.COMMON, mage.cards.a.ArcLightning.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Arc Lightning", 55791, Rarity.RARE, mage.cards.a.ArcLightning.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Arcanis the Omnipotent", 54547, Rarity.MYTHIC, mage.cards.a.ArcanisTheOmnipotent.class)); + cards.add(new SetCardInfo("Archdemon of Greed", 43503, Rarity.RARE, mage.cards.a.ArchdemonOfGreed.class)); + cards.add(new SetCardInfo("Archfiend of Depravity", 55711, Rarity.RARE, mage.cards.a.ArchfiendOfDepravity.class)); + cards.add(new SetCardInfo("Archfiend of Ifnir", 64422, Rarity.RARE, mage.cards.a.ArchfiendOfIfnir.class)); + cards.add(new SetCardInfo("Archon of the Triumvirate", 46877, Rarity.RARE, mage.cards.a.ArchonOfTheTriumvirate.class)); + cards.add(new SetCardInfo("Arena", 35958, Rarity.RARE, mage.cards.a.Arena.class)); + cards.add(new SetCardInfo("Argivian Archaeologist", 219, Rarity.RARE, mage.cards.a.ArgivianArchaeologist.class)); + cards.add(new SetCardInfo("Argothian Enchantress", 36104, Rarity.RARE, mage.cards.a.ArgothianEnchantress.class)); + cards.add(new SetCardInfo("Armadillo Cloak", 31455, Rarity.COMMON, mage.cards.a.ArmadilloCloak.class)); + cards.add(new SetCardInfo("Armageddon", 31413, Rarity.RARE, mage.cards.a.Armageddon.class)); + cards.add(new SetCardInfo("Arrogant Wurm", 36246, Rarity.UNCOMMON, mage.cards.a.ArrogantWurm.class)); + cards.add(new SetCardInfo("Artisan of Kozilek", 39673, Rarity.UNCOMMON, mage.cards.a.ArtisanOfKozilek.class)); + cards.add(new SetCardInfo("Ash Barrens", 69983, Rarity.COMMON, mage.cards.a.AshBarrens.class)); + cards.add(new SetCardInfo("Assembled Alphas", 61551, Rarity.RARE, mage.cards.a.AssembledAlphas.class)); + cards.add(new SetCardInfo("Astral Slide", 32567, Rarity.UNCOMMON, mage.cards.a.AstralSlide.class)); + cards.add(new SetCardInfo("Aura of Silence", 36030, Rarity.UNCOMMON, mage.cards.a.AuraOfSilence.class)); + cards.add(new SetCardInfo("Auramancer", 41644, Rarity.COMMON, mage.cards.a.Auramancer.class)); + cards.add(new SetCardInfo("Avacyn's Pilgrim", 45209, Rarity.COMMON, mage.cards.a.AvacynsPilgrim.class)); + cards.add(new SetCardInfo("Avacyn, Angel of Hope", 64436, Rarity.RARE, mage.cards.a.AvacynAngelOfHope.class)); + cards.add(new SetCardInfo("Avalanche Riders", 36134, Rarity.UNCOMMON, mage.cards.a.AvalancheRiders.class)); + cards.add(new SetCardInfo("Avalanche Tusker", 54514, Rarity.RARE, mage.cards.a.AvalancheTusker.class)); + cards.add(new SetCardInfo("Avatar of Discord", 32031, Rarity.RARE, mage.cards.a.AvatarOfDiscord.class)); + cards.add(new SetCardInfo("Avatar of Hope", 32206, Rarity.RARE, mage.cards.a.AvatarOfHope.class)); + cards.add(new SetCardInfo("Avatar of Woe", 36208, Rarity.RARE, mage.cards.a.AvatarOfWoe.class)); + cards.add(new SetCardInfo("Avenger of Zendikar", 58895, Rarity.MYTHIC, mage.cards.a.AvengerOfZendikar.class)); + cards.add(new SetCardInfo("Azorius Guildmage", 32585, Rarity.UNCOMMON, mage.cards.a.AzoriusGuildmage.class)); + cards.add(new SetCardInfo("Azorius Signet", 46906, Rarity.UNCOMMON, mage.cards.a.AzoriusSignet.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Azorius Signet", 62395, Rarity.COMMON, mage.cards.a.AzoriusSignet.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Azusa, Lost but Seeking", 62505, Rarity.RARE, mage.cards.a.AzusaLostButSeeking.class)); + cards.add(new SetCardInfo("Badlands", 43600, Rarity.RARE, mage.cards.b.Badlands.class)); + cards.add(new SetCardInfo("Balance", 36278, Rarity.RARE, mage.cards.b.Balance.class)); + cards.add(new SetCardInfo("Balduvian Horde", 35992, Rarity.RARE, mage.cards.b.BalduvianHorde.class)); + cards.add(new SetCardInfo("Ball Lightning", 35972, Rarity.RARE, mage.cards.b.BallLightning.class)); + cards.add(new SetCardInfo("Banisher Priest", 51908, Rarity.UNCOMMON, mage.cards.b.BanisherPriest.class)); + cards.add(new SetCardInfo("Banishing Light", 53840, Rarity.UNCOMMON, mage.cards.b.BanishingLight.class)); + cards.add(new SetCardInfo("Baron Sengir", 227, Rarity.RARE, mage.cards.b.BaronSengir.class)); + cards.add(new SetCardInfo("Barrage Tyrant", 58249, Rarity.RARE, mage.cards.b.BarrageTyrant.class)); + cards.add(new SetCardInfo("Basalt Monolith", 43602, Rarity.UNCOMMON, mage.cards.b.BasaltMonolith.class)); + cards.add(new SetCardInfo("Basking Rootwalla", 35152, Rarity.COMMON, mage.cards.b.BaskingRootwalla.class)); + cards.add(new SetCardInfo("Batterskull", 51930, Rarity.MYTHIC, mage.cards.b.Batterskull.class)); + cards.add(new SetCardInfo("Bayou", 43604, Rarity.RARE, mage.cards.b.Bayou.class)); + cards.add(new SetCardInfo("Beacon of Unrest", 62519, Rarity.RARE, mage.cards.b.BeaconOfUnrest.class)); + cards.add(new SetCardInfo("Beast of Burden", 32198, Rarity.RARE, mage.cards.b.BeastOfBurden.class)); + cards.add(new SetCardInfo("Bident of Thassa", 50114, Rarity.RARE, mage.cards.b.BidentOfThassa.class)); + cards.add(new SetCardInfo("Bile Blight", 53838, Rarity.UNCOMMON, mage.cards.b.BileBlight.class)); + cards.add(new SetCardInfo("Birds of Paradise", 37598, Rarity.RARE, mage.cards.b.BirdsOfParadise.class)); + cards.add(new SetCardInfo("Bishop of Rebirth", 65662, Rarity.RARE, mage.cards.b.BishopOfRebirth.class)); + cards.add(new SetCardInfo("Bitterblossom", 39626, Rarity.RARE, mage.cards.b.Bitterblossom.class)); + cards.add(new SetCardInfo("Bituminous Blast", 36857, Rarity.UNCOMMON, mage.cards.b.BituminousBlast.class, MPR_FULL_ART)); + cards.add(new SetCardInfo("Black Knight", 35922, Rarity.UNCOMMON, mage.cards.b.BlackKnight.class)); + cards.add(new SetCardInfo("Black Lotus", 46932, Rarity.RARE, mage.cards.b.BlackLotus.class)); + cards.add(new SetCardInfo("Black Sun's Zenith", 39634, Rarity.RARE, mage.cards.b.BlackSunsZenith.class)); + cards.add(new SetCardInfo("Blasting Station", 62473, Rarity.UNCOMMON, mage.cards.b.BlastingStation.class)); + cards.add(new SetCardInfo("Blastoderm", 35134, Rarity.COMMON, mage.cards.b.Blastoderm.class)); + cards.add(new SetCardInfo("Blight Herder", 58265, Rarity.RARE, mage.cards.b.BlightHerder.class)); + cards.add(new SetCardInfo("Blighted Fen", 60464, Rarity.RARE, mage.cards.b.BlightedFen.class)); + cards.add(new SetCardInfo("Blightning", 35124, Rarity.COMMON, mage.cards.b.Blightning.class, MPR_FULL_ART)); + cards.add(new SetCardInfo("Blood Crypt", 72301, Rarity.RARE, mage.cards.b.BloodCrypt.class)); + cards.add(new SetCardInfo("Blood Knight", 35984, Rarity.UNCOMMON, mage.cards.b.BloodKnight.class)); + cards.add(new SetCardInfo("Bloodbraid Elf", 36867, Rarity.UNCOMMON, mage.cards.b.BloodbraidElf.class)); + cards.add(new SetCardInfo("Bloodcrazed Neonate", 42862, Rarity.COMMON, mage.cards.b.BloodcrazedNeonate.class)); + cards.add(new SetCardInfo("Bloodlord of Vaasgoth", 41638, Rarity.MYTHIC, mage.cards.b.BloodlordOfVaasgoth.class)); + cards.add(new SetCardInfo("Bloodstained Mire", 36254, Rarity.RARE, mage.cards.b.BloodstainedMire.class)); + cards.add(new SetCardInfo("Blue Elemental Blast", 35924, Rarity.UNCOMMON, mage.cards.b.BlueElementalBlast.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Blue Elemental Blast", 43606, Rarity.UNCOMMON, mage.cards.b.BlueElementalBlast.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Blue Elemental Blast", 70922, Rarity.MYTHIC, mage.cards.b.BlueElementalBlast.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Boggart Ram-Gang", 31439, Rarity.UNCOMMON, mage.cards.b.BoggartRamGang.class)); + cards.add(new SetCardInfo("Bolas's Citadel", 72317, Rarity.RARE, mage.cards.b.BolassCitadel.class)); + cards.add(new SetCardInfo("Boltwing Marauder", 56998, Rarity.RARE, mage.cards.b.BoltwingMarauder.class)); + cards.add(new SetCardInfo("Bonesplitter", 36272, Rarity.COMMON, mage.cards.b.Bonesplitter.class)); + cards.add(new SetCardInfo("Boneyard Wurm", 42860, Rarity.UNCOMMON, mage.cards.b.BoneyardWurm.class)); + cards.add(new SetCardInfo("Boomerang", 36228, Rarity.COMMON, mage.cards.b.Boomerang.class)); + cards.add(new SetCardInfo("Boros Challenger", 69953, Rarity.UNCOMMON, mage.cards.b.BorosChallenger.class)); + cards.add(new SetCardInfo("Boros Signet", 46904, Rarity.UNCOMMON, mage.cards.b.BorosSignet.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Boros Signet", 62393, Rarity.COMMON, mage.cards.b.BorosSignet.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Bottle Gnomes", 36050, Rarity.UNCOMMON, mage.cards.b.BottleGnomes.class)); + cards.add(new SetCardInfo("Brain Maggot", 54551, Rarity.UNCOMMON, mage.cards.b.BrainMaggot.class)); + cards.add(new SetCardInfo("Braingeyser", 205, Rarity.RARE, mage.cards.b.Braingeyser.class)); + cards.add(new SetCardInfo("Brainstorm", 31453, Rarity.COMMON, mage.cards.b.Brainstorm.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Brainstorm", 70920, Rarity.MYTHIC, mage.cards.b.Brainstorm.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Bramblewood Paragon", 31423, Rarity.UNCOMMON, mage.cards.b.BramblewoodParagon.class)); + cards.add(new SetCardInfo("Brass's Bounty", 66886, Rarity.RARE, mage.cards.b.BrasssBounty.class)); + cards.add(new SetCardInfo("Brave the Elements", 37857, Rarity.UNCOMMON, mage.cards.b.BraveTheElements.class, MPR_FULL_ART)); + cards.add(new SetCardInfo("Breaking // Entering", 48586, Rarity.RARE, mage.cards.b.BreakingEntering.class)); + cards.add(new SetCardInfo("Breeding Pool", 72311, Rarity.RARE, mage.cards.b.BreedingPool.class)); + cards.add(new SetCardInfo("Briber's Purse", 55781, Rarity.UNCOMMON, mage.cards.b.BribersPurse.class)); + cards.add(new SetCardInfo("Bribery", 46928, Rarity.RARE, mage.cards.b.Bribery.class)); + cards.add(new SetCardInfo("Brion Stoutarm", 36096, Rarity.RARE, mage.cards.b.BrionStoutarm.class)); + cards.add(new SetCardInfo("Broodmate Dragon", 36148, Rarity.RARE, mage.cards.b.BroodmateDragon.class)); + cards.add(new SetCardInfo("Browbeat", 36198, Rarity.UNCOMMON, mage.cards.b.Browbeat.class)); + cards.add(new SetCardInfo("Budoka Pupil", 36288, Rarity.UNCOMMON, mage.cards.b.BudokaPupil.class)); + cards.add(new SetCardInfo("Burgeoning", 62507, Rarity.RARE, mage.cards.b.Burgeoning.class)); + cards.add(new SetCardInfo("Burning Sun's Avatar", 65664, Rarity.RARE, mage.cards.b.BurningSunsAvatar.class)); + cards.add(new SetCardInfo("Burning Wish", 43542, Rarity.RARE, mage.cards.b.BurningWish.class)); + cards.add(new SetCardInfo("Burst Lightning", 37610, Rarity.COMMON, mage.cards.b.BurstLightning.class, MPR_FULL_ART)); + cards.add(new SetCardInfo("Cabal Coffers", 31471, Rarity.UNCOMMON, mage.cards.c.CabalCoffers.class)); + cards.add(new SetCardInfo("Cabal Therapy", 31473, Rarity.UNCOMMON, mage.cards.c.CabalTherapy.class)); + cards.add(new SetCardInfo("Calciderm", 35988, Rarity.UNCOMMON, mage.cards.c.Calciderm.class)); + cards.add(new SetCardInfo("Call of the Conclave", 48190, Rarity.UNCOMMON, mage.cards.c.CallOfTheConclave.class)); + cards.add(new SetCardInfo("Call of the Herd", 36108, Rarity.RARE, mage.cards.c.CallOfTheHerd.class)); + cards.add(new SetCardInfo("Call the Bloodline", 62213, Rarity.UNCOMMON, mage.cards.c.CallTheBloodline.class)); + cards.add(new SetCardInfo("Cancel", 36222, Rarity.COMMON, mage.cards.c.Cancel.class, MPR_FULL_ART)); + cards.add(new SetCardInfo("Candelabra of Tawnos", 62531, Rarity.RARE, mage.cards.c.CandelabraOfTawnos.class)); + cards.add(new SetCardInfo("Capsize", 36040, Rarity.COMMON, mage.cards.c.Capsize.class)); + cards.add(new SetCardInfo("Captain's Hook", 66884, Rarity.RARE, mage.cards.c.CaptainsHook.class)); + cards.add(new SetCardInfo("Capture of Jingzhou", 64420, Rarity.RARE, mage.cards.c.CaptureOfJingzhou.class)); + cards.add(new SetCardInfo("Carnival Hellsteed", 46885, Rarity.RARE, mage.cards.c.CarnivalHellsteed.class)); + cards.add(new SetCardInfo("Carnophage", 36100, Rarity.COMMON, mage.cards.c.Carnophage.class)); + cards.add(new SetCardInfo("Carrion Feeder", 36264, Rarity.COMMON, mage.cards.c.CarrionFeeder.class)); + cards.add(new SetCardInfo("Cast Down", 68049, Rarity.UNCOMMON, mage.cards.c.CastDown.class)); + cards.add(new SetCardInfo("Castigate", 35176, Rarity.COMMON, mage.cards.c.Castigate.class)); + cards.add(new SetCardInfo("Cathedral of War", 45215, Rarity.RARE, mage.cards.c.CathedralOfWar.class)); + cards.add(new SetCardInfo("Celestial Archon", 50128, Rarity.RARE, mage.cards.c.CelestialArchon.class)); + cards.add(new SetCardInfo("Celestial Colonnade", 43572, Rarity.RARE, mage.cards.c.CelestialColonnade.class)); + cards.add(new SetCardInfo("Celestial Purge", 36859, Rarity.UNCOMMON, mage.cards.c.CelestialPurge.class, MPR_FULL_ART)); + // Planechase Plane. Card not implemented. + // cards.add(new SetCardInfo("Celestine Reef", 44348, Rarity.RARE, mage.cards.c.CelestineReef.class)); + cards.add(new SetCardInfo("Cenn's Tactician", 32541, Rarity.UNCOMMON, mage.cards.c.CennsTactician.class)); + cards.add(new SetCardInfo("Chain of Vapor", 62513, Rarity.UNCOMMON, mage.cards.c.ChainOfVapor.class)); + cards.add(new SetCardInfo("Chainer's Edict", 36242, Rarity.UNCOMMON, mage.cards.c.ChainersEdict.class)); + cards.add(new SetCardInfo("Chains of Mephistopheles", 65646, Rarity.RARE, mage.cards.c.ChainsOfMephistopheles.class)); + cards.add(new SetCardInfo("Chalice of the Void", 69993, Rarity.RARE, mage.cards.c.ChaliceOfTheVoid.class)); + cards.add(new SetCardInfo("Chandra's Phoenix", 41646, Rarity.RARE, mage.cards.c.ChandrasPhoenix.class)); + cards.add(new SetCardInfo("Chandra, Pyromaster", 65007, Rarity.MYTHIC, mage.cards.c.ChandraPyromaster.class)); + cards.add(new SetCardInfo("Chandra, Torch of Defiance", 70934, Rarity.MYTHIC, mage.cards.c.ChandraTorchOfDefiance.class)); + cards.add(new SetCardInfo("Char", 36142, Rarity.RARE, mage.cards.c.Char.class)); + cards.add(new SetCardInfo("Chief Engineer", 53824, Rarity.RARE, mage.cards.c.ChiefEngineer.class)); + cards.add(new SetCardInfo("Chill", 36062, Rarity.UNCOMMON, mage.cards.c.Chill.class)); + cards.add(new SetCardInfo("Chittering Rats", 62445, Rarity.COMMON, mage.cards.c.ChitteringRats.class)); + cards.add(new SetCardInfo("Chrome Mox", 36160, Rarity.RARE, mage.cards.c.ChromeMox.class)); + cards.add(new SetCardInfo("Circle of Flame", 41648, Rarity.COMMON, mage.cards.c.CircleOfFlame.class)); + cards.add(new SetCardInfo("Circle of Protection: Red", 31375, Rarity.COMMON, mage.cards.c.CircleOfProtectionRed.class)); + cards.add(new SetCardInfo("Circular Logic", 36244, Rarity.UNCOMMON, mage.cards.c.CircularLogic.class)); + cards.add(new SetCardInfo("City of Brass", 35952, Rarity.RARE, mage.cards.c.CityOfBrass.class)); + cards.add(new SetCardInfo("Clash of Wills", 59671, Rarity.UNCOMMON, mage.cards.c.ClashOfWills.class)); + cards.add(new SetCardInfo("Cloudpost", 36869, Rarity.COMMON, mage.cards.c.Cloudpost.class)); + cards.add(new SetCardInfo("Coiling Oracle", 32587, Rarity.COMMON, mage.cards.c.CoilingOracle.class)); + cards.add(new SetCardInfo("Colossal Whale", 49834, Rarity.RARE, mage.cards.c.ColossalWhale.class)); + cards.add(new SetCardInfo("Comet Storm", 35822, Rarity.MYTHIC, mage.cards.c.CometStorm.class)); + cards.add(new SetCardInfo("Command Tower", 47979, Rarity.COMMON, mage.cards.c.CommandTower.class)); + cards.add(new SetCardInfo("Conclave Naturalists", 57596, Rarity.UNCOMMON, mage.cards.c.ConclaveNaturalists.class)); + cards.add(new SetCardInfo("Condemn", 31385, Rarity.UNCOMMON, mage.cards.c.Condemn.class, MPR_FULL_ART)); + cards.add(new SetCardInfo("Consume the Meek", 62491, Rarity.RARE, mage.cards.c.ConsumeTheMeek.class)); + cards.add(new SetCardInfo("Consuming Aberration", 47997, Rarity.RARE, mage.cards.c.ConsumingAberration.class)); + cards.add(new SetCardInfo("Contagion", 62485, Rarity.RARE, mage.cards.c.Contagion.class)); + cards.add(new SetCardInfo("Contagion Clasp", 42258, Rarity.UNCOMMON, mage.cards.c.ContagionClasp.class)); + cards.add(new SetCardInfo("Control Magic", 43594, Rarity.RARE, mage.cards.c.ControlMagic.class)); + cards.add(new SetCardInfo("Copy Artifact", 65650, Rarity.RARE, mage.cards.c.CopyArtifact.class)); + cards.add(new SetCardInfo("Corpsejack Menace", 46887, Rarity.RARE, mage.cards.c.CorpsejackMenace.class)); + cards.add(new SetCardInfo("Corrupt", 35120, Rarity.UNCOMMON, mage.cards.c.Corrupt.class, MPR_FULL_ART)); + cards.add(new SetCardInfo("Counterspell", 31377, Rarity.UNCOMMON, mage.cards.c.Counterspell.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Counterspell", 36323, Rarity.COMMON, mage.cards.c.Counterspell.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Courser of Kruphix", 55735, Rarity.RARE, mage.cards.c.CourserOfKruphix.class)); + cards.add(new SetCardInfo("Creeping Mold", 32525, Rarity.UNCOMMON, mage.cards.c.CreepingMold.class)); + cards.add(new SetCardInfo("Crop Rotation", 62521, Rarity.COMMON, mage.cards.c.CropRotation.class)); + cards.add(new SetCardInfo("Crucible of Worlds", 49846, Rarity.RARE, mage.cards.c.CrucibleOfWorlds.class)); + cards.add(new SetCardInfo("Cruel Edict", 35062, Rarity.RARE, mage.cards.c.CruelEdict.class, MPR_FULL_ART)); + cards.add(new SetCardInfo("Crumbling Vestige", 61565, Rarity.COMMON, mage.cards.c.CrumblingVestige.class)); + cards.add(new SetCardInfo("Crusade", 35926, Rarity.RARE, mage.cards.c.Crusade.class)); + cards.add(new SetCardInfo("Cryptborn Horror", 46883, Rarity.RARE, mage.cards.c.CryptbornHorror.class)); + cards.add(new SetCardInfo("Cryptic Command", 31447, Rarity.RARE, mage.cards.c.CrypticCommand.class, MPR_FULL_ART)); + cards.add(new SetCardInfo("Crystalline Sliver", 36070, Rarity.UNCOMMON, mage.cards.c.CrystallineSliver.class)); + cards.add(new SetCardInfo("Cultivate", 41640, Rarity.COMMON, mage.cards.c.Cultivate.class)); + cards.add(new SetCardInfo("Cultivator of Blades", 62219, Rarity.RARE, mage.cards.c.CultivatorOfBlades.class)); + cards.add(new SetCardInfo("Cunning Wish", 31393, Rarity.RARE, mage.cards.c.CunningWish.class)); + cards.add(new SetCardInfo("Cuombajj Witches", 65652, Rarity.COMMON, mage.cards.c.CuombajjWitches.class)); + cards.add(new SetCardInfo("Curse of Thirst", 43499, Rarity.UNCOMMON, mage.cards.c.CurseOfThirst.class)); + cards.add(new SetCardInfo("Curse of Wizardry", 36863, Rarity.UNCOMMON, mage.cards.c.CurseOfWizardry.class)); + cards.add(new SetCardInfo("Curse of the Bloody Tome", 42870, Rarity.COMMON, mage.cards.c.CurseOfTheBloodyTome.class)); + cards.add(new SetCardInfo("Damnation", 31417, Rarity.RARE, mage.cards.d.Damnation.class, MPR_FULL_ART)); + cards.add(new SetCardInfo("Damnation", 55862, Rarity.RARE, mage.cards.d.Damnation.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Dark Ritual", 36168, Rarity.COMMON, mage.cards.d.DarkRitual.class)); + cards.add(new SetCardInfo("Darksteel Ingot", 36276, Rarity.COMMON, mage.cards.d.DarksteelIngot.class)); + cards.add(new SetCardInfo("Darksteel Relic", 41108, Rarity.UNCOMMON, mage.cards.d.DarksteelRelic.class)); + cards.add(new SetCardInfo("Dauntless Dourbark", 36098, Rarity.RARE, mage.cards.d.DauntlessDourbark.class)); + cards.add(new SetCardInfo("Dauthi Slayer", 36032, Rarity.COMMON, mage.cards.d.DauthiSlayer.class)); + cards.add(new SetCardInfo("Dawnbringer Charioteers", 52332, Rarity.RARE, mage.cards.d.DawnbringerCharioteers.class)); + cards.add(new SetCardInfo("Day of Judgment", 36220, Rarity.RARE, mage.cards.d.DayOfJudgment.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Day of Judgment", 37873, Rarity.RARE, mage.cards.d.DayOfJudgment.class, MPR_FULL_ART)); + cards.add(new SetCardInfo("Deadbridge Goliath", 46875, Rarity.RARE, mage.cards.d.DeadbridgeGoliath.class)); + cards.add(new SetCardInfo("Death Baron", 69254, Rarity.RARE, mage.cards.d.DeathBaron.class)); + cards.add(new SetCardInfo("Deathbringer Regent", 55894, Rarity.RARE, mage.cards.d.DeathbringerRegent.class)); + cards.add(new SetCardInfo("Deathless Angel", 36853, Rarity.RARE, mage.cards.d.DeathlessAngel.class)); + cards.add(new SetCardInfo("Debilitating Injury", 55765, Rarity.COMMON, mage.cards.d.DebilitatingInjury.class)); + cards.add(new SetCardInfo("Decimate", 62459, Rarity.RARE, mage.cards.d.Decimate.class)); + cards.add(new SetCardInfo("Decree of Justice", 31399, Rarity.RARE, mage.cards.d.DecreeOfJustice.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Decree of Justice", 59645, Rarity.RARE, mage.cards.d.DecreeOfJustice.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Decree of Pain", 47985, Rarity.RARE, mage.cards.d.DecreeOfPain.class)); + cards.add(new SetCardInfo("Deep Analysis", 35150, Rarity.COMMON, mage.cards.d.DeepAnalysis.class)); + cards.add(new SetCardInfo("Deepfathom Skulker", 59663, Rarity.RARE, mage.cards.d.DeepfathomSkulker.class)); + cards.add(new SetCardInfo("Defiant Bloodlord", 58247, Rarity.RARE, mage.cards.d.DefiantBloodlord.class)); + cards.add(new SetCardInfo("Demigod of Revenge", 31437, Rarity.RARE, mage.cards.d.DemigodOfRevenge.class)); + cards.add(new SetCardInfo("Demon of Catastrophes", 69246, Rarity.RARE, mage.cards.d.DemonOfCatastrophes.class)); + cards.add(new SetCardInfo("Demonic Tutor", 35074, Rarity.UNCOMMON, mage.cards.d.DemonicTutor.class)); + cards.add(new SetCardInfo("Deranged Hermit", 36132, Rarity.RARE, mage.cards.d.DerangedHermit.class)); + cards.add(new SetCardInfo("Desecrated Tomb", 69244, Rarity.RARE, mage.cards.d.DesecratedTomb.class)); + cards.add(new SetCardInfo("Desert", 35148, Rarity.RARE, mage.cards.d.Desert.class)); + cards.add(new SetCardInfo("Desertion", 47967, Rarity.RARE, mage.cards.d.Desertion.class)); + cards.add(new SetCardInfo("Despise", 43065, Rarity.UNCOMMON, mage.cards.d.Despise.class)); + cards.add(new SetCardInfo("Devil's Play", 42868, Rarity.RARE, mage.cards.d.DevilsPlay.class)); + cards.add(new SetCardInfo("Diabolic Edict", 32527, Rarity.COMMON, mage.cards.d.DiabolicEdict.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Diabolic Edict", 62413, Rarity.COMMON, mage.cards.d.DiabolicEdict.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Diaochan, Artful Beauty", 47971, Rarity.RARE, mage.cards.d.DiaochanArtfulBeauty.class)); + cards.add(new SetCardInfo("Dictate of Kruphix", 52326, Rarity.RARE, mage.cards.d.DictateOfKruphix.class)); + cards.add(new SetCardInfo("Dictate of the Twin Gods", 52334, Rarity.RARE, mage.cards.d.DictateOfTheTwinGods.class)); + cards.add(new SetCardInfo("Dimir Charm", 49840, Rarity.UNCOMMON, mage.cards.d.DimirCharm.class)); + cards.add(new SetCardInfo("Dimir Guildmage", 32579, Rarity.UNCOMMON, mage.cards.d.DimirGuildmage.class)); + cards.add(new SetCardInfo("Dimir Signet", 46924, Rarity.UNCOMMON, mage.cards.d.DimirSignet.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Dimir Signet", 62435, Rarity.COMMON, mage.cards.d.DimirSignet.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Diregraf Ghoul", 42882, Rarity.UNCOMMON, mage.cards.d.DiregrafGhoul.class)); + cards.add(new SetCardInfo("Dirtcowl Wurm", 32190, Rarity.RARE, mage.cards.d.DirtcowlWurm.class)); + cards.add(new SetCardInfo("Disdainful Stroke", 55785, Rarity.COMMON, mage.cards.d.DisdainfulStroke.class)); + cards.add(new SetCardInfo("Disenchant", 31397, Rarity.COMMON, mage.cards.d.Disenchant.class, MPR_FULL_ART)); + cards.add(new SetCardInfo("Disenchant", 36184, Rarity.COMMON, mage.cards.d.Disenchant.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Disintegrate", 62429, Rarity.UNCOMMON, mage.cards.d.Disintegrate.class)); + cards.add(new SetCardInfo("Dismember", 43588, Rarity.UNCOMMON, mage.cards.d.Dismember.class)); + cards.add(new SetCardInfo("Dismiss", 36060, Rarity.UNCOMMON, mage.cards.d.Dismiss.class)); + cards.add(new SetCardInfo("Dissipate", 35996, Rarity.UNCOMMON, mage.cards.d.Dissipate.class)); + cards.add(new SetCardInfo("Dissolve", 52336, Rarity.UNCOMMON, mage.cards.d.Dissolve.class)); + cards.add(new SetCardInfo("Djinn Illuminatus", 32029, Rarity.RARE, mage.cards.d.DjinnIlluminatus.class)); + cards.add(new SetCardInfo("Doom Blade", 37855, Rarity.COMMON, mage.cards.d.DoomBlade.class, MPR_FULL_ART)); + cards.add(new SetCardInfo("Doom Blade", 62525, Rarity.UNCOMMON, mage.cards.d.DoomBlade.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Doomsday", 61058, Rarity.RARE, mage.cards.d.Doomsday.class)); + cards.add(new SetCardInfo("Doomwake Giant", 52322, Rarity.RARE, mage.cards.d.DoomwakeGiant.class)); + cards.add(new SetCardInfo("Door of Destinies", 31963, Rarity.RARE, mage.cards.d.DoorOfDestinies.class)); + cards.add(new SetCardInfo("Doran, the Siege Tower", 31411, Rarity.RARE, mage.cards.d.DoranTheSiegeTower.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Doran, the Siege Tower", 65658, Rarity.MYTHIC, mage.cards.d.DoranTheSiegeTower.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Dragon Broodmother", 32553, Rarity.MYTHIC, mage.cards.d.DragonBroodmother.class)); + cards.add(new SetCardInfo("Dragon Fodder", 55898, Rarity.COMMON, mage.cards.d.DragonFodder.class)); + cards.add(new SetCardInfo("Dragon Throne of Tarkir", 54565, Rarity.RARE, mage.cards.d.DragonThroneOfTarkir.class)); + cards.add(new SetCardInfo("Dragonlord's Servant", 55884, Rarity.UNCOMMON, mage.cards.d.DragonlordsServant.class)); + cards.add(new SetCardInfo("Dragonscale Boon", 55793, Rarity.COMMON, mage.cards.d.DragonscaleBoon.class)); + cards.add(new SetCardInfo("Dragonscale General", 55707, Rarity.RARE, mage.cards.d.DragonscaleGeneral.class)); + cards.add(new SetCardInfo("Drain Life", 35928, Rarity.COMMON, mage.cards.d.DrainLife.class)); + cards.add(new SetCardInfo("Dread Defiler", 59665, Rarity.RARE, mage.cards.d.DreadDefiler.class)); + cards.add(new SetCardInfo("Dread Return", 60482, Rarity.UNCOMMON, mage.cards.d.DreadReturn.class)); + cards.add(new SetCardInfo("Drogskol Cavalry", 60466, Rarity.RARE, mage.cards.d.DrogskolCavalry.class)); + cards.add(new SetCardInfo("Dromoka, the Eternal", 57604, Rarity.RARE, mage.cards.d.DromokaTheEternal.class)); + cards.add(new SetCardInfo("Drowner of Hope", 58245, Rarity.RARE, mage.cards.d.DrownerOfHope.class)); + cards.add(new SetCardInfo("Dryad Militant", 46267, Rarity.UNCOMMON, mage.cards.d.DryadMilitant.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Dryad Militant", 46873, Rarity.UNCOMMON, mage.cards.d.DryadMilitant.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Dualcaster Mage", 55868, Rarity.RARE, mage.cards.d.DualcasterMage.class)); + cards.add(new SetCardInfo("Duergar Hedge-Mage", 32547, Rarity.UNCOMMON, mage.cards.d.DuergarHedgeMage.class)); + cards.add(new SetCardInfo("Dungrove Elder", 41650, Rarity.RARE, mage.cards.d.DungroveElder.class)); + cards.add(new SetCardInfo("Duplicant", 47983, Rarity.RARE, mage.cards.d.Duplicant.class)); + cards.add(new SetCardInfo("Duress", 35078, Rarity.COMMON, mage.cards.d.Duress.class)); + cards.add(new SetCardInfo("Dwynen, Gilt-Leaf Daen", 57600, Rarity.RARE, mage.cards.d.DwynenGiltLeafDaen.class)); + cards.add(new SetCardInfo("Earwig Squad", 32539, Rarity.RARE, mage.cards.e.EarwigSquad.class)); + cards.add(new SetCardInfo("Eater of Hope", 51918, Rarity.RARE, mage.cards.e.EaterOfHope.class)); + cards.add(new SetCardInfo("Eidolon of Blossoms", 52318, Rarity.RARE, mage.cards.e.EidolonOfBlossoms.class)); + cards.add(new SetCardInfo("Electrolyze", 32581, Rarity.UNCOMMON, mage.cards.e.Electrolyze.class)); + cards.add(new SetCardInfo("Elesh Norn, Grand Cenobite", 52306, Rarity.MYTHIC, mage.cards.e.EleshNornGrandCenobite.class)); + cards.add(new SetCardInfo("Elite Inquisitor", 42880, Rarity.RARE, mage.cards.e.EliteInquisitor.class)); + cards.add(new SetCardInfo("Elspeth, Sun's Champion", 59647, Rarity.MYTHIC, mage.cards.e.ElspethSunsChampion.class)); + cards.add(new SetCardInfo("Elusive Tormentor", 60472, Rarity.RARE, mage.cards.e.ElusiveTormentor.class)); + cards.add(new SetCardInfo("Elves of Deep Shadow", 35974, Rarity.UNCOMMON, mage.cards.e.ElvesOfDeepShadow.class)); + cards.add(new SetCardInfo("Elvish Aberration", 36266, Rarity.UNCOMMON, mage.cards.e.ElvishAberration.class)); + cards.add(new SetCardInfo("Elvish Champion", 31435, Rarity.RARE, mage.cards.e.ElvishChampion.class)); + cards.add(new SetCardInfo("Elvish Lyrist", 36118, Rarity.COMMON, mage.cards.e.ElvishLyrist.class)); + cards.add(new SetCardInfo("Elvish Mystic", 51538, Rarity.COMMON, mage.cards.e.ElvishMystic.class)); + cards.add(new SetCardInfo("Elvish Pioneer", 62481, Rarity.COMMON, mage.cards.e.ElvishPioneer.class)); + cards.add(new SetCardInfo("Elvish Rejuvenator", 69258, Rarity.COMMON, mage.cards.e.ElvishRejuvenator.class)); + cards.add(new SetCardInfo("Elvish Spirit Guide", 65654, Rarity.UNCOMMON, mage.cards.e.ElvishSpiritGuide.class)); + cards.add(new SetCardInfo("Elvish Visionary", 36865, Rarity.COMMON, mage.cards.e.ElvishVisionary.class)); + cards.add(new SetCardInfo("Ember Swallower", 50130, Rarity.RARE, mage.cards.e.EmberSwallower.class)); + cards.add(new SetCardInfo("Emeria Angel", 36218, Rarity.RARE, mage.cards.e.EmeriaAngel.class)); + cards.add(new SetCardInfo("Emmara, Soul of the Accord", 69951, Rarity.RARE, mage.cards.e.EmmaraSoulOfTheAccord.class)); + cards.add(new SetCardInfo("Empyrial Armor", 36024, Rarity.COMMON, mage.cards.e.EmpyrialArmor.class)); + cards.add(new SetCardInfo("Emrakul, the Aeons Torn", 36873, Rarity.MYTHIC, mage.cards.e.EmrakulTheAeonsTorn.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Emrakul, the Aeons Torn", 63001, Rarity.MYTHIC, mage.cards.e.EmrakulTheAeonsTorn.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Encroaching Wastes", 51932, Rarity.UNCOMMON, mage.cards.e.EncroachingWastes.class)); + cards.add(new SetCardInfo("Endbringer", 59667, Rarity.RARE, mage.cards.e.Endbringer.class)); + cards.add(new SetCardInfo("Engineered Plague", 32543, Rarity.UNCOMMON, mage.cards.e.EngineeredPlague.class)); + cards.add(new SetCardInfo("Enlightened Tutor", 35998, Rarity.UNCOMMON, mage.cards.e.EnlightenedTutor.class)); + cards.add(new SetCardInfo("Entomb", 51532, Rarity.RARE, mage.cards.e.Entomb.class)); + cards.add(new SetCardInfo("Epic Struggle", 62447, Rarity.RARE, mage.cards.e.EpicStruggle.class)); + cards.add(new SetCardInfo("Erratic Portal", 62421, Rarity.RARE, mage.cards.e.ErraticPortal.class)); + cards.add(new SetCardInfo("Essence Extraction", 62211, Rarity.UNCOMMON, mage.cards.e.EssenceExtraction.class)); + cards.add(new SetCardInfo("Eternal Dragon", 31387, Rarity.RARE, mage.cards.e.EternalDragon.class)); + cards.add(new SetCardInfo("Eternal Witness", 31431, Rarity.UNCOMMON, mage.cards.e.EternalWitness.class)); + cards.add(new SetCardInfo("Eureka", 46946, Rarity.RARE, mage.cards.e.Eureka.class)); + cards.add(new SetCardInfo("Everflowing Chalice", 39620, Rarity.UNCOMMON, mage.cards.e.EverflowingChalice.class)); + cards.add(new SetCardInfo("Evolving Wilds", 46265, Rarity.COMMON, mage.cards.e.EvolvingWilds.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Evolving Wilds", 55880, Rarity.COMMON, mage.cards.e.EvolvingWilds.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Exalted Angel", 31491, Rarity.RARE, mage.cards.e.ExaltedAngel.class)); + cards.add(new SetCardInfo("Exclude", 62477, Rarity.COMMON, mage.cards.e.Exclude.class)); + cards.add(new SetCardInfo("Experiment One", 49838, Rarity.UNCOMMON, mage.cards.e.ExperimentOne.class)); + cards.add(new SetCardInfo("Exploration", 62463, Rarity.RARE, mage.cards.e.Exploration.class)); + cards.add(new SetCardInfo("Explore", 59643, Rarity.COMMON, mage.cards.e.Explore.class)); + cards.add(new SetCardInfo("Exquisite Firecraft", 62503, Rarity.RARE, mage.cards.e.ExquisiteFirecraft.class)); + cards.add(new SetCardInfo("Fact or Fiction", 31457, Rarity.UNCOMMON, mage.cards.f.FactOrFiction.class)); + cards.add(new SetCardInfo("Faerie Conclave", 36090, Rarity.UNCOMMON, mage.cards.f.FaerieConclave.class)); + cards.add(new SetCardInfo("False Prophet", 32200, Rarity.RARE, mage.cards.f.FalseProphet.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("False Prophet", 62469, Rarity.RARE, mage.cards.f.FalseProphet.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Fanatic of Xenagos", 54559, Rarity.UNCOMMON, mage.cards.f.FanaticOfXenagos.class)); + cards.add(new SetCardInfo("Farseek", 48005, Rarity.COMMON, mage.cards.f.Farseek.class)); + cards.add(new SetCardInfo("Fatal Push", 64997, Rarity.UNCOMMON, mage.cards.f.FatalPush.class)); + cards.add(new SetCardInfo("Fated Conflagration", 51922, Rarity.RARE, mage.cards.f.FatedConflagration.class)); + cards.add(new SetCardInfo("Fated Intervention", 53818, Rarity.RARE, mage.cards.f.FatedIntervention.class)); + cards.add(new SetCardInfo("Fathom Mage", 48001, Rarity.RARE, mage.cards.f.FathomMage.class)); + cards.add(new SetCardInfo("Feldon of the Third Path", 55872, Rarity.MYTHIC, mage.cards.f.FeldonOfTheThirdPath.class)); + cards.add(new SetCardInfo("Feral Throwback", 36256, Rarity.RARE, mage.cards.f.FeralThrowback.class)); + cards.add(new SetCardInfo("Fierce Invocation", 55743, Rarity.COMMON, mage.cards.f.FierceInvocation.class)); + cards.add(new SetCardInfo("Fiery Temper", 35978, Rarity.COMMON, mage.cards.f.FieryTemper.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Fiery Temper", 62217, Rarity.RARE, mage.cards.f.FieryTemper.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Figure of Destiny", 32545, Rarity.RARE, mage.cards.f.FigureOfDestiny.class)); + cards.add(new SetCardInfo("Fire // Ice", 31497, Rarity.UNCOMMON, mage.cards.f.FireIce.class)); + cards.add(new SetCardInfo("Fire-Lit Thicket", 62457, Rarity.RARE, mage.cards.f.FireLitThicket.class)); + cards.add(new SetCardInfo("Fireball", 31485, Rarity.UNCOMMON, mage.cards.f.Fireball.class, MPR_FULL_ART)); + cards.add(new SetCardInfo("Fireball", 36321, Rarity.UNCOMMON, mage.cards.f.Fireball.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Fireblast", 31401, Rarity.COMMON, mage.cards.f.Fireblast.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Fireblast", 43598, Rarity.COMMON, mage.cards.f.Fireblast.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Firebolt", 31469, Rarity.COMMON, mage.cards.f.Firebolt.class)); + cards.add(new SetCardInfo("Firemane Avenger", 47991, Rarity.RARE, mage.cards.f.FiremaneAvenger.class)); + cards.add(new SetCardInfo("Firemind's Research", 69949, Rarity.RARE, mage.cards.f.FiremindsResearch.class)); + cards.add(new SetCardInfo("Fireslinger", 36038, Rarity.COMMON, mage.cards.f.Fireslinger.class)); + cards.add(new SetCardInfo("Flame Javelin", 35122, Rarity.UNCOMMON, mage.cards.f.FlameJavelin.class, MPR_FULL_ART)); + cards.add(new SetCardInfo("Flameblade Angel", 60454, Rarity.RARE, mage.cards.f.FlamebladeAngel.class)); + cards.add(new SetCardInfo("Flamerush Rider", 55713, Rarity.RARE, mage.cards.f.FlamerushRider.class)); + cards.add(new SetCardInfo("Flametongue Kavu", 31459, Rarity.UNCOMMON, mage.cards.f.FlametongueKavu.class)); + cards.add(new SetCardInfo("Flaying Tendrils", 61561, Rarity.UNCOMMON, mage.cards.f.FlayingTendrils.class)); + cards.add(new SetCardInfo("Fling", 36074, Rarity.COMMON, mage.cards.f.Fling.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Fling", 36076, Rarity.COMMON, mage.cards.f.Fling.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Fling", 37590, Rarity.COMMON, mage.cards.f.Fling.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Flooded Strand", 43580, Rarity.RARE, mage.cards.f.FloodedStrand.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Flooded Strand", 69252, Rarity.RARE, mage.cards.f.FloodedStrand.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Flusterstorm", 69985, Rarity.RARE, mage.cards.f.Flusterstorm.class)); + cards.add(new SetCardInfo("Foe-Razer Regent", 55890, Rarity.RARE, mage.cards.f.FoeRazerRegent.class)); + cards.add(new SetCardInfo("Font of Fertility", 53848, Rarity.COMMON, mage.cards.f.FontOfFertility.class)); + cards.add(new SetCardInfo("Food Chain", 69947, Rarity.RARE, mage.cards.f.FoodChain.class)); + cards.add(new SetCardInfo("Forbid", 36078, Rarity.UNCOMMON, mage.cards.f.Forbid.class)); + cards.add(new SetCardInfo("Forbidden Alchemy", 45203, Rarity.COMMON, mage.cards.f.ForbiddenAlchemy.class)); + cards.add(new SetCardInfo("Forbidden Orchard", 62409, Rarity.RARE, mage.cards.f.ForbiddenOrchard.class)); + cards.add(new SetCardInfo("Force Spike", 31395, Rarity.UNCOMMON, mage.cards.f.ForceSpike.class)); + cards.add(new SetCardInfo("Force of Nature", 36294, Rarity.RARE, mage.cards.f.ForceOfNature.class)); + cards.add(new SetCardInfo("Force of Will", 43578, Rarity.RARE, mage.cards.f.ForceOfWill.class)); + cards.add(new SetCardInfo("Forest", 237, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", 251, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", 259, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", 269, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", 279, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", 293, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", 297, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", 31983, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", 31991, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", 32005, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", 32027, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", 40040, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", 40050, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", 40060, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", 40094, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", 53875, Rarity.LAND, mage.cards.basiclands.Forest.class, FULL_ART_ZEN_VARIOUS)); + cards.add(new SetCardInfo("Forest", 58261, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forgestoker Dragon", 51920, Rarity.RARE, mage.cards.f.ForgestokerDragon.class)); + cards.add(new SetCardInfo("Fork", 207, Rarity.RARE, mage.cards.f.Fork.class)); + cards.add(new SetCardInfo("Forked Lightning", 33440, Rarity.UNCOMMON, mage.cards.f.ForkedLightning.class)); + cards.add(new SetCardInfo("Formless Nurturing", 55747, Rarity.COMMON, mage.cards.f.FormlessNurturing.class)); + cards.add(new SetCardInfo("Fortune's Favor", 62987, Rarity.UNCOMMON, mage.cards.f.FortunesFavor.class)); + cards.add(new SetCardInfo("Foundry Champion", 47993, Rarity.RARE, mage.cards.f.FoundryChampion.class)); + cards.add(new SetCardInfo("Frenzied Goblin", 55703, Rarity.UNCOMMON, mage.cards.f.FrenziedGoblin.class)); + cards.add(new SetCardInfo("Frost Walker", 55886, Rarity.UNCOMMON, mage.cards.f.FrostWalker.class)); + cards.add(new SetCardInfo("Fungal Shambler", 36236, Rarity.RARE, mage.cards.f.FungalShambler.class)); + cards.add(new SetCardInfo("Future Sight", 43596, Rarity.RARE, mage.cards.f.FutureSight.class)); + cards.add(new SetCardInfo("Fyndhorn Elves", 43632, Rarity.COMMON, mage.cards.f.FyndhornElves.class)); + cards.add(new SetCardInfo("Gaddock Teeg", 64418, Rarity.RARE, mage.cards.g.GaddockTeeg.class)); + cards.add(new SetCardInfo("Gaea's Blessing", 36026, Rarity.UNCOMMON, mage.cards.g.GaeasBlessing.class)); + cards.add(new SetCardInfo("Gaea's Cradle", 36112, Rarity.RARE, mage.cards.g.GaeasCradle.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Gaea's Cradle", 59655, Rarity.MYTHIC, mage.cards.g.GaeasCradle.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Garruk Wildspeaker", 36178, Rarity.MYTHIC, mage.cards.g.GarrukWildspeaker.class)); + cards.add(new SetCardInfo("Garruk's Horde", 41636, Rarity.RARE, mage.cards.g.GarruksHorde.class)); + cards.add(new SetCardInfo("Gate Colossus", 71592, Rarity.UNCOMMON, mage.cards.g.GateColossus.class)); + cards.add(new SetCardInfo("Gatekeeper of Malakir", 37853, Rarity.UNCOMMON, mage.cards.g.GatekeeperOfMalakir.class)); + cards.add(new SetCardInfo("Gather the Townsfolk", 43511, Rarity.COMMON, mage.cards.g.GatherTheTownsfolk.class)); + cards.add(new SetCardInfo("Gauntlet of Might", 65656, Rarity.RARE, mage.cards.g.GauntletOfMight.class)); + cards.add(new SetCardInfo("Geist of Saint Traft", 51928, Rarity.MYTHIC, mage.cards.g.GeistOfSaintTraft.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Geist of Saint Traft", 60484, Rarity.MYTHIC, mage.cards.g.GeistOfSaintTraft.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Gemstone Mine", 36028, Rarity.UNCOMMON, mage.cards.g.GemstoneMine.class)); + cards.add(new SetCardInfo("Genesis Hydra", 55870, Rarity.RARE, mage.cards.g.GenesisHydra.class)); + cards.add(new SetCardInfo("Genju of the Spires", 36284, Rarity.UNCOMMON, mage.cards.g.GenjuOfTheSpires.class)); + cards.add(new SetCardInfo("Gerrard's Verdict", 31461, Rarity.UNCOMMON, mage.cards.g.GerrardsVerdict.class)); + cards.add(new SetCardInfo("Ghalta, Primal Hunger", 66896, Rarity.RARE, mage.cards.g.GhaltaPrimalHunger.class)); + cards.add(new SetCardInfo("Ghor-Clan Rampager", 50110, Rarity.UNCOMMON, mage.cards.g.GhorClanRampager.class)); + cards.add(new SetCardInfo("Ghost-Lit Raider", 36292, Rarity.UNCOMMON, mage.cards.g.GhostLitRaider.class)); + cards.add(new SetCardInfo("Ghostfire Blade", 55777, Rarity.RARE, mage.cards.g.GhostfireBlade.class)); + cards.add(new SetCardInfo("Ghostly Prison", 43538, Rarity.UNCOMMON, mage.cards.g.GhostlyPrison.class)); + cards.add(new SetCardInfo("Giant Badger", 35960, Rarity.RARE, mage.cards.g.GiantBadger.class)); + cards.add(new SetCardInfo("Giant Growth", 32557, Rarity.COMMON, mage.cards.g.GiantGrowth.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Giant Growth", 35824, Rarity.COMMON, mage.cards.g.GiantGrowth.class, MPR_FULL_ART)); + cards.add(new SetCardInfo("Giant Growth", 35930, Rarity.COMMON, mage.cards.g.GiantGrowth.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Gideon Jura", 65003, Rarity.MYTHIC, mage.cards.g.GideonJura.class)); + cards.add(new SetCardInfo("Gideon of the Trials", 70940, Rarity.MYTHIC, mage.cards.g.GideonOfTheTrials.class)); + cards.add(new SetCardInfo("Gifts Ungiven", 70924, Rarity.MYTHIC, mage.cards.g.GiftsUngiven.class)); + cards.add(new SetCardInfo("Gitaxian Probe", 46869, Rarity.COMMON, mage.cards.g.GitaxianProbe.class)); + cards.add(new SetCardInfo("Glacial Ray", 36286, Rarity.COMMON, mage.cards.g.GlacialRay.class)); + cards.add(new SetCardInfo("Gladehart Cavalry", 59661, Rarity.RARE, mage.cards.g.GladehartCavalry.class)); + cards.add(new SetCardInfo("Gleancrawler", 32017, Rarity.RARE, mage.cards.g.Gleancrawler.class)); + // Set-exclusive, not legal card. Not implemented. See https://scryfall.com/card/prm/26584/gleemox + // cards.add(new SetCardInfo("Gleemox", 26584, Rarity.RARE, mage.cards.g.Gleemox.class)); + cards.add(new SetCardInfo("Glissa, the Traitor", 39618, Rarity.MYTHIC, mage.cards.g.GlissaTheTraitor.class)); + cards.add(new SetCardInfo("Glistener Elf", 43067, Rarity.COMMON, mage.cards.g.GlistenerElf.class)); + cards.add(new SetCardInfo("Glorious Anthem", 35110, Rarity.RARE, mage.cards.g.GloriousAnthem.class)); + cards.add(new SetCardInfo("Glory", 36248, Rarity.RARE, mage.cards.g.Glory.class)); + cards.add(new SetCardInfo("Glorybringer", 64426, Rarity.RARE, mage.cards.g.Glorybringer.class)); + cards.add(new SetCardInfo("Go for the Throat", 42878, Rarity.UNCOMMON, mage.cards.g.GoForTheThroat.class)); + cards.add(new SetCardInfo("Goblin Bombardment", 36058, Rarity.UNCOMMON, mage.cards.g.GoblinBombardment.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Goblin Bombardment", 54545, Rarity.UNCOMMON, mage.cards.g.GoblinBombardment.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Goblin Dark-Dwellers", 59673, Rarity.RARE, mage.cards.g.GoblinDarkDwellers.class)); + cards.add(new SetCardInfo("Goblin Diplomats", 49832, Rarity.RARE, mage.cards.g.GoblinDiplomats.class)); + cards.add(new SetCardInfo("Goblin Guide", 44309, Rarity.RARE, mage.cards.g.GoblinGuide.class)); + cards.add(new SetCardInfo("Goblin Legionnaire", 35146, Rarity.COMMON, mage.cards.g.GoblinLegionnaire.class)); + cards.add(new SetCardInfo("Goblin Piledriver", 31415, Rarity.RARE, mage.cards.g.GoblinPiledriver.class)); + cards.add(new SetCardInfo("Goblin Rabblemaster", 53832, Rarity.RARE, mage.cards.g.GoblinRabblemaster.class)); + cards.add(new SetCardInfo("Goblin Ringleader", 35144, Rarity.UNCOMMON, mage.cards.g.GoblinRingleader.class)); + cards.add(new SetCardInfo("Goblin Vandal", 46916, Rarity.COMMON, mage.cards.g.GoblinVandal.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Goblin Vandal", 62383, Rarity.COMMON, mage.cards.g.GoblinVandal.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Goblin Warchief", 31477, Rarity.UNCOMMON, mage.cards.g.GoblinWarchief.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Goblin Warchief", 60452, Rarity.RARE, mage.cards.g.GoblinWarchief.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Godless Shrine", 72305, Rarity.RARE, mage.cards.g.GodlessShrine.class)); + cards.add(new SetCardInfo("Golem's Heart", 37869, Rarity.UNCOMMON, mage.cards.g.GolemsHeart.class)); + cards.add(new SetCardInfo("Golgari Signet", 62397, Rarity.UNCOMMON, mage.cards.g.GolgariSignet.class)); + cards.add(new SetCardInfo("Gorilla Shaman", 61060, Rarity.COMMON, mage.cards.g.GorillaShaman.class)); + cards.add(new SetCardInfo("Grafdigger's Cage", 69989, Rarity.RARE, mage.cards.g.GrafdiggersCage.class)); + cards.add(new SetCardInfo("Grave Titan", 62403, Rarity.MYTHIC, mage.cards.g.GraveTitan.class)); + cards.add(new SetCardInfo("Gravecrawler", 43517, Rarity.RARE, mage.cards.g.Gravecrawler.class)); + cards.add(new SetCardInfo("Greater Good", 51542, Rarity.RARE, mage.cards.g.GreaterGood.class)); + cards.add(new SetCardInfo("Grim Haruspex", 55789, Rarity.RARE, mage.cards.g.GrimHaruspex.class)); + cards.add(new SetCardInfo("Grim Lavamancer", 31489, Rarity.RARE, mage.cards.g.GrimLavamancer.class)); + cards.add(new SetCardInfo("Grim Monolith", 61567, Rarity.RARE, mage.cards.g.GrimMonolith.class)); + cards.add(new SetCardInfo("Grindstone", 62423, Rarity.RARE, mage.cards.g.Grindstone.class)); + cards.add(new SetCardInfo("Griselbrand", 55727, Rarity.MYTHIC, mage.cards.g.Griselbrand.class)); + cards.add(new SetCardInfo("Grisly Salvage", 50108, Rarity.COMMON, mage.cards.g.GrislySalvage.class)); + cards.add(new SetCardInfo("Groundbreaker", 36072, Rarity.RARE, mage.cards.g.Groundbreaker.class)); + cards.add(new SetCardInfo("Grove of the Guardian", 46889, Rarity.RARE, mage.cards.g.GroveOfTheGuardian.class)); + cards.add(new SetCardInfo("Gruul Guildmage", 36302, Rarity.UNCOMMON, mage.cards.g.GruulGuildmage.class)); + cards.add(new SetCardInfo("Gruul Signet", 46914, Rarity.UNCOMMON, mage.cards.g.GruulSignet.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Gruul Signet", 62401, Rarity.COMMON, mage.cards.g.GruulSignet.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Gush", 61056, Rarity.UNCOMMON, mage.cards.g.Gush.class)); + cards.add(new SetCardInfo("Guttersnipe", 69248, Rarity.UNCOMMON, mage.cards.g.Guttersnipe.class)); + cards.add(new SetCardInfo("Guul Draz Assassin", 36875, Rarity.RARE, mage.cards.g.GuulDrazAssassin.class)); + cards.add(new SetCardInfo("Hada Freeblade", 43558, Rarity.COMMON, mage.cards.h.HadaFreeblade.class)); + cards.add(new SetCardInfo("Hall of Triumph", 52340, Rarity.RARE, mage.cards.h.HallOfTriumph.class)); + cards.add(new SetCardInfo("Hallowed Fountain", 72297, Rarity.RARE, mage.cards.h.HallowedFountain.class)); + cards.add(new SetCardInfo("Hammer of Bogardan", 36000, Rarity.RARE, mage.cards.h.HammerOfBogardan.class)); + cards.add(new SetCardInfo("Hand of Justice", 223, Rarity.RARE, mage.cards.h.HandOfJustice.class)); + cards.add(new SetCardInfo("Hanna, Ship's Navigator", 52308, Rarity.RARE, mage.cards.h.HannaShipsNavigator.class)); + cards.add(new SetCardInfo("Harbinger of the Hunt", 57004, Rarity.RARE, mage.cards.h.HarbingerOfTheHunt.class)); + cards.add(new SetCardInfo("Harmonize", 35106, Rarity.UNCOMMON, mage.cards.h.Harmonize.class, MPR_FULL_ART)); + cards.add(new SetCardInfo("Harrow", 37612, Rarity.COMMON, mage.cards.h.Harrow.class, MPR_FULL_ART)); + cards.add(new SetCardInfo("Hazezon Tamar", 23956, Rarity.RARE, mage.cards.h.HazezonTamar.class)); + cards.add(new SetCardInfo("Headless Horseman", 35052, Rarity.COMMON, mage.cards.h.HeadlessHorseman.class)); + cards.add(new SetCardInfo("Hedge Troll", 35968, Rarity.UNCOMMON, mage.cards.h.HedgeTroll.class)); + cards.add(new SetCardInfo("Heir of the Wilds", 54555, Rarity.UNCOMMON, mage.cards.h.HeirOfTheWilds.class)); + cards.add(new SetCardInfo("Hellspark Elemental", 36172, Rarity.UNCOMMON, mage.cards.h.HellsparkElemental.class)); + cards.add(new SetCardInfo("Helm of Kaldra", 31989, Rarity.RARE, mage.cards.h.HelmOfKaldra.class)); + cards.add(new SetCardInfo("Helm of Obedience", 65642, Rarity.RARE, mage.cards.h.HelmOfObedience.class)); + cards.add(new SetCardInfo("Hermit Druid", 36080, Rarity.RARE, mage.cards.h.HermitDruid.class)); + cards.add(new SetCardInfo("Hero of Bladehold", 39646, Rarity.MYTHIC, mage.cards.h.HeroOfBladehold.class)); + cards.add(new SetCardInfo("Hero of Goma Fada", 58243, Rarity.RARE, mage.cards.h.HeroOfGomaFada.class)); + cards.add(new SetCardInfo("Hero's Downfall", 55731, Rarity.RARE, mage.cards.h.HerosDownfall.class)); + cards.add(new SetCardInfo("Heroes' Bane", 52328, Rarity.RARE, mage.cards.h.HeroesBane.class)); + cards.add(new SetCardInfo("Heron's Grace Champion", 61563, Rarity.RARE, mage.cards.h.HeronsGraceChampion.class)); + cards.add(new SetCardInfo("Hewed Stone Retainers", 55745, Rarity.UNCOMMON, mage.cards.h.HewedStoneRetainers.class)); + cards.add(new SetCardInfo("Hinder", 35172, Rarity.UNCOMMON, mage.cards.h.Hinder.class, MPR_FULL_ART)); + cards.add(new SetCardInfo("Hive Stirrings", 49828, Rarity.COMMON, mage.cards.h.HiveStirrings.class)); + cards.add(new SetCardInfo("Hixus, Prison Warden", 57584, Rarity.RARE, mage.cards.h.HixusPrisonWarden.class)); + cards.add(new SetCardInfo("Honor of the Pure", 43554, Rarity.RARE, mage.cards.h.HonorOfThePure.class)); + cards.add(new SetCardInfo("Honored Hierarch", 57598, Rarity.RARE, mage.cards.h.HonoredHierarch.class)); + cards.add(new SetCardInfo("Hoodwink", 62449, Rarity.COMMON, mage.cards.h.Hoodwink.class)); + cards.add(new SetCardInfo("Hordeling Outburst", 55783, Rarity.UNCOMMON, mage.cards.h.HordelingOutburst.class)); + // Planechase Plane. Card not implemented. + // cards.add(new SetCardInfo("Horizon Boughs", 44346, Rarity.RARE, mage.cards.h.HorizonBoughs.class)); + cards.add(new SetCardInfo("Hostage Taker", 69987, Rarity.RARE, mage.cards.h.HostageTaker.class)); + cards.add(new SetCardInfo("Howlpack Alpha", 42866, Rarity.RARE, mage.cards.h.HowlpackAlpha.class)); + cards.add(new SetCardInfo("Hydra Broodmaster", 53850, Rarity.RARE, mage.cards.h.HydraBroodmaster.class)); + cards.add(new SetCardInfo("Hydroblast", 69979, Rarity.COMMON, mage.cards.h.Hydroblast.class)); + cards.add(new SetCardInfo("Hymn to Tourach", 43634, Rarity.UNCOMMON, mage.cards.h.HymnToTourach.class)); + cards.add(new SetCardInfo("Hypersonic Dragon", 46881, Rarity.RARE, mage.cards.h.HypersonicDragon.class)); + cards.add(new SetCardInfo("Hypnotic Specter", 35040, Rarity.RARE, mage.cards.h.HypnoticSpecter.class)); + cards.add(new SetCardInfo("Icatian Javelineers", 35980, Rarity.COMMON, mage.cards.i.IcatianJavelineers.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Icatian Javelineers", 59639, Rarity.COMMON, mage.cards.i.IcatianJavelineers.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Icy Manipulator", 35042, Rarity.UNCOMMON, mage.cards.i.IcyManipulator.class)); + cards.add(new SetCardInfo("Identity Thief", 61559, Rarity.RARE, mage.cards.i.IdentityThief.class)); + cards.add(new SetCardInfo("Ifh-Bíff Efreet", 213, Rarity.RARE, mage.cards.i.IfhBiffEfreet.class)); + cards.add(new SetCardInfo("Immolating Glare", 59669, Rarity.UNCOMMON, mage.cards.i.ImmolatingGlare.class)); + cards.add(new SetCardInfo("Imperious Perfect", 31409, Rarity.UNCOMMON, mage.cards.i.ImperiousPerfect.class)); + cards.add(new SetCardInfo("Impulse", 36006, Rarity.COMMON, mage.cards.i.Impulse.class)); + cards.add(new SetCardInfo("In Garruk's Wake", 53828, Rarity.RARE, mage.cards.i.InGarruksWake.class)); + cards.add(new SetCardInfo("Incendiary Flow", 62991, Rarity.UNCOMMON, mage.cards.i.IncendiaryFlow.class)); + cards.add(new SetCardInfo("Incinerate", 31419, Rarity.COMMON, mage.cards.i.Incinerate.class, MPR_FULL_ART)); + cards.add(new SetCardInfo("Incorrigible Youths", 60470, Rarity.UNCOMMON, mage.cards.i.IncorrigibleYouths.class)); + cards.add(new SetCardInfo("Indulgent Tormentor", 53822, Rarity.RARE, mage.cards.i.IndulgentTormentor.class)); + cards.add(new SetCardInfo("Inferno", 62439, Rarity.RARE, mage.cards.i.Inferno.class)); + cards.add(new SetCardInfo("Inferno Titan", 62405, Rarity.MYTHIC, mage.cards.i.InfernoTitan.class)); + cards.add(new SetCardInfo("Infest", 43568, Rarity.UNCOMMON, mage.cards.i.Infest.class, MPR_FULL_ART)); + cards.add(new SetCardInfo("Ink-Eyes, Servant of Oni", 32013, Rarity.RARE, mage.cards.i.InkEyesServantOfOni.class)); + cards.add(new SetCardInfo("Inkmoth Nexus", 62999, Rarity.RARE, mage.cards.i.InkmothNexus.class)); + cards.add(new SetCardInfo("Insidious Mist", 60472, Rarity.RARE, mage.cards.i.InsidiousMist.class)); + cards.add(new SetCardInfo("Intuition", 36046, Rarity.RARE, mage.cards.i.Intuition.class)); + cards.add(new SetCardInfo("Island", 239, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", 247, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", 249, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", 273, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", 283, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", 285, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", 31979, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", 31993, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", 32009, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", 32023, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", 40042, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", 40052, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", 40062, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", 40100, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", 53881, Rarity.LAND, mage.cards.basiclands.Island.class, FULL_ART_ZEN_VARIOUS)); + cards.add(new SetCardInfo("Island", 58255, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Isochron Scepter", 35064, Rarity.UNCOMMON, mage.cards.i.IsochronScepter.class)); + cards.add(new SetCardInfo("Ivorytusk Fortress", 54510, Rarity.RARE, mage.cards.i.IvorytuskFortress.class)); + cards.add(new SetCardInfo("Izzet Charm", 48192, Rarity.UNCOMMON, mage.cards.i.IzzetCharm.class)); + cards.add(new SetCardInfo("Izzet Signet", 62387, Rarity.UNCOMMON, mage.cards.i.IzzetSignet.class)); + cards.add(new SetCardInfo("Jace Beleren", 36176, Rarity.MYTHIC, mage.cards.j.JaceBeleren.class)); + cards.add(new SetCardInfo("Jace's Ingenuity", 41642, Rarity.UNCOMMON, mage.cards.j.JacesIngenuity.class)); + cards.add(new SetCardInfo("Jace, Cunning Castaway", 70932, Rarity.MYTHIC, mage.cards.j.JaceCunningCastaway.class)); + cards.add(new SetCardInfo("Jackal Pup", 36056, Rarity.UNCOMMON, mage.cards.j.JackalPup.class)); + cards.add(new SetCardInfo("Jaya Ballard, Task Mage", 36312, Rarity.RARE, mage.cards.j.JayaBallardTaskMage.class)); + cards.add(new SetCardInfo("Jeering Instigator", 55771, Rarity.RARE, mage.cards.j.JeeringInstigator.class)); + cards.add(new SetCardInfo("Jeskai Infiltrator", 55757, Rarity.RARE, mage.cards.j.JeskaiInfiltrator.class)); + cards.add(new SetCardInfo("Jokulhaups", 70942, Rarity.MYTHIC, mage.cards.j.Jokulhaups.class)); + cards.add(new SetCardInfo("Joraga Warcaller", 35820, Rarity.RARE, mage.cards.j.JoragaWarcaller.class)); + cards.add(new SetCardInfo("Jori En, Ruin Diver", 59679, Rarity.RARE, mage.cards.j.JoriEnRuinDiver.class)); + cards.add(new SetCardInfo("Judge's Familiar", 48194, Rarity.UNCOMMON, mage.cards.j.JudgesFamiliar.class)); + cards.add(new SetCardInfo("Juggernaut", 35044, Rarity.UNCOMMON, mage.cards.j.Juggernaut.class)); + cards.add(new SetCardInfo("Kalastria Highborn", 43552, Rarity.RARE, mage.cards.k.KalastriaHighborn.class)); + cards.add(new SetCardInfo("Kamahl, Pit Fighter", 36088, Rarity.RARE, mage.cards.k.KamahlPitFighter.class)); + cards.add(new SetCardInfo("Karador, Ghost Chieftain", 51534, Rarity.MYTHIC, mage.cards.k.KaradorGhostChieftain.class)); + cards.add(new SetCardInfo("Karakas", 43592, Rarity.UNCOMMON, mage.cards.k.Karakas.class)); + cards.add(new SetCardInfo("Karametra's Acolyte", 50118, Rarity.UNCOMMON, mage.cards.k.KarametrasAcolyte.class)); + cards.add(new SetCardInfo("Karn, Silver Golem", 36106, Rarity.RARE, mage.cards.k.KarnSilverGolem.class)); + cards.add(new SetCardInfo("Khabál Ghoul", 215, Rarity.UNCOMMON, mage.cards.k.KhabalGhoul.class)); + cards.add(new SetCardInfo("Killing Wave", 44319, Rarity.RARE, mage.cards.k.KillingWave.class)); + cards.add(new SetCardInfo("Kiora's Follower", 51926, Rarity.UNCOMMON, mage.cards.k.KiorasFollower.class)); + cards.add(new SetCardInfo("Kiora, the Crashing Wave", 59651, Rarity.MYTHIC, mage.cards.k.KioraTheCrashingWave.class)); + cards.add(new SetCardInfo("Kird Ape", 31383, Rarity.UNCOMMON, mage.cards.k.KirdApe.class)); + cards.add(new SetCardInfo("Kitchen Finks", 36166, Rarity.UNCOMMON, mage.cards.k.KitchenFinks.class)); + cards.add(new SetCardInfo("Kiyomaro, First to Stand", 32015, Rarity.RARE, mage.cards.k.KiyomaroFirstToStand.class)); + cards.add(new SetCardInfo("Kjeldoran Outpost", 23952, Rarity.RARE, mage.cards.k.KjeldoranOutpost.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Kjeldoran Outpost", 43628, Rarity.RARE, mage.cards.k.KjeldoranOutpost.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Knight of New Alara", 32555, Rarity.RARE, mage.cards.k.KnightOfNewAlara.class)); + cards.add(new SetCardInfo("Kongming, \"Sleeping Dragon\"", 33442, Rarity.RARE, mage.cards.k.KongmingSleepingDragon.class)); + cards.add(new SetCardInfo("Kor Duelist", 36212, Rarity.UNCOMMON, mage.cards.k.KorDuelist.class)); + cards.add(new SetCardInfo("Kor Firewalker", 43574, Rarity.UNCOMMON, mage.cards.k.KorFirewalker.class)); + cards.add(new SetCardInfo("Kor Skyfisher", 43548, Rarity.COMMON, mage.cards.k.KorSkyfisher.class)); + cards.add(new SetCardInfo("Korlash, Heir to Blackblade", 31961, Rarity.RARE, mage.cards.k.KorlashHeirToBlackblade.class)); + cards.add(new SetCardInfo("Kothophed, Soul Hoarder", 57590, Rarity.RARE, mage.cards.k.KothophedSoulHoarder.class)); + cards.add(new SetCardInfo("Kozilek, the Great Distortion", 62493, Rarity.MYTHIC, mage.cards.k.KozilekTheGreatDistortion.class)); + cards.add(new SetCardInfo("Krosan Grip", 37604, Rarity.UNCOMMON, mage.cards.k.KrosanGrip.class)); + cards.add(new SetCardInfo("Krosan Tusker", 32575, Rarity.COMMON, mage.cards.k.KrosanTusker.class)); + cards.add(new SetCardInfo("Krosan Warchief", 32577, Rarity.UNCOMMON, mage.cards.k.KrosanWarchief.class)); + cards.add(new SetCardInfo("Lake of the Dead", 23954, Rarity.RARE, mage.cards.l.LakeOfTheDead.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Lake of the Dead", 43630, Rarity.RARE, mage.cards.l.LakeOfTheDead.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Land Tax", 36855, Rarity.RARE, mage.cards.l.LandTax.class)); + cards.add(new SetCardInfo("Languish", 57592, Rarity.RARE, mage.cards.l.Languish.class)); + cards.add(new SetCardInfo("Laquatus's Champion", 37875, Rarity.RARE, mage.cards.l.LaquatussChampion.class)); + cards.add(new SetCardInfo("Latch Seeker", 44315, Rarity.UNCOMMON, mage.cards.l.LatchSeeker.class)); + cards.add(new SetCardInfo("Lava Axe", 32559, Rarity.COMMON, mage.cards.l.LavaAxe.class)); + cards.add(new SetCardInfo("Lavinia, Azorius Renegade", 71588, Rarity.RARE, mage.cards.l.LaviniaAzoriusRenegade.class)); + cards.add(new SetCardInfo("Leatherback Baloth", 43576, Rarity.UNCOMMON, mage.cards.l.LeatherbackBaloth.class)); + cards.add(new SetCardInfo("Library of Alexandria", 46940, Rarity.RARE, mage.cards.l.LibraryOfAlexandria.class)); + cards.add(new SetCardInfo("Life // Death", 32591, Rarity.UNCOMMON, mage.cards.l.LifeDeath.class)); + cards.add(new SetCardInfo("Lightning Bolt", 35932, Rarity.COMMON, mage.cards.l.LightningBolt.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Lightning Bolt", 36224, Rarity.COMMON, mage.cards.l.LightningBolt.class, MPR_FULL_ART)); + cards.add(new SetCardInfo("Lightning Dragon", 32196, Rarity.RARE, mage.cards.l.LightningDragon.class)); + cards.add(new SetCardInfo("Lightning Greaves", 36194, Rarity.UNCOMMON, mage.cards.l.LightningGreaves.class)); + cards.add(new SetCardInfo("Lightning Helix", 31487, Rarity.UNCOMMON, mage.cards.l.LightningHelix.class, MPR_FULL_ART)); + cards.add(new SetCardInfo("Lightning Hounds", 36154, Rarity.COMMON, mage.cards.l.LightningHounds.class)); + cards.add(new SetCardInfo("Lightning Rift", 32571, Rarity.UNCOMMON, mage.cards.l.LightningRift.class)); + cards.add(new SetCardInfo("Liliana of the Veil", 55866, Rarity.MYTHIC, mage.cards.l.LilianaOfTheVeil.class)); + cards.add(new SetCardInfo("Liliana's Specter", 37602, Rarity.COMMON, mage.cards.l.LilianasSpecter.class)); + cards.add(new SetCardInfo("Liliana, Untouched by Death", 70938, Rarity.MYTHIC, mage.cards.l.LilianaUntouchedByDeath.class)); + cards.add(new SetCardInfo("Lingering Souls", 45201, Rarity.UNCOMMON, mage.cards.l.LingeringSouls.class)); + cards.add(new SetCardInfo("Lion's Eye Diamond", 51936, Rarity.RARE, mage.cards.l.LionsEyeDiamond.class)); + cards.add(new SetCardInfo("Living Death", 36042, Rarity.RARE, mage.cards.l.LivingDeath.class)); + cards.add(new SetCardInfo("Living Wish", 35068, Rarity.RARE, mage.cards.l.LivingWish.class)); + cards.add(new SetCardInfo("Llanowar Elves", 31379, Rarity.COMMON, mage.cards.l.LlanowarElves.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Llanowar Elves", 35934, Rarity.COMMON, mage.cards.l.LlanowarElves.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Llanowar Elves", 68039, Rarity.COMMON, mage.cards.l.LlanowarElves.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Lobotomy", 32529, Rarity.UNCOMMON, mage.cards.l.Lobotomy.class)); + cards.add(new SetCardInfo("Longbow Archer", 36008, Rarity.UNCOMMON, mage.cards.l.LongbowArcher.class)); + cards.add(new SetCardInfo("Lord of Atlantis", 35936, Rarity.RARE, mage.cards.l.LordOfAtlantis.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Lord of Atlantis", 69945, Rarity.RARE, mage.cards.l.LordOfAtlantis.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Lord of Shatterskull Pass", 36871, Rarity.RARE, mage.cards.l.LordOfShatterskullPass.class)); + cards.add(new SetCardInfo("Lotus Bloom", 31495, Rarity.RARE, mage.cards.l.LotusBloom.class)); + cards.add(new SetCardInfo("Lotus Cobra", 44321, Rarity.MYTHIC, mage.cards.l.LotusCobra.class)); + cards.add(new SetCardInfo("Lowland Oaf", 62415, Rarity.COMMON, mage.cards.l.LowlandOaf.class)); + cards.add(new SetCardInfo("Loyal Retainers", 47973, Rarity.UNCOMMON, mage.cards.l.LoyalRetainers.class)); + cards.add(new SetCardInfo("Lu Bu, Master-at-Arms", 36130, Rarity.RARE, mage.cards.l.LuBuMasterAtArms.class)); + cards.add(new SetCardInfo("Ludevic's Abomination", 42874, Rarity.RARE, mage.cards.l.LudevicsAbomination.class)); + cards.add(new SetCardInfo("Ludevic's Test Subject", 42874, Rarity.RARE, mage.cards.l.LudevicsTestSubject.class)); + cards.add(new SetCardInfo("Mad Auntie", 35066, Rarity.RARE, mage.cards.m.MadAuntie.class)); + cards.add(new SetCardInfo("Maelstrom Pulse", 37845, Rarity.RARE, mage.cards.m.MaelstromPulse.class)); + cards.add(new SetCardInfo("Magister of Worth", 52593, Rarity.RARE, mage.cards.m.MagisterOfWorth.class)); + cards.add(new SetCardInfo("Magma Jet", 36162, Rarity.UNCOMMON, mage.cards.m.MagmaJet.class)); + cards.add(new SetCardInfo("Magma Spray", 52338, Rarity.RARE, mage.cards.m.MagmaSpray.class)); + cards.add(new SetCardInfo("Magmaquake", 45207, Rarity.RARE, mage.cards.m.Magmaquake.class)); + cards.add(new SetCardInfo("Malfegor", 31971, Rarity.MYTHIC, mage.cards.m.Malfegor.class)); + cards.add(new SetCardInfo("Man-o'-War", 36010, Rarity.COMMON, mage.cards.m.ManOWar.class)); + cards.add(new SetCardInfo("Mana Crypt", 35962, Rarity.RARE, mage.cards.m.ManaCrypt.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mana Crypt", 46908, Rarity.RARE, mage.cards.m.ManaCrypt.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mana Drain", 46934, Rarity.RARE, mage.cards.m.ManaDrain.class)); + cards.add(new SetCardInfo("Mana Flare", 58241, Rarity.RARE, mage.cards.m.ManaFlare.class)); + cards.add(new SetCardInfo("Mana Leak", 31481, Rarity.COMMON, mage.cards.m.ManaLeak.class, MPR_FULL_ART)); + cards.add(new SetCardInfo("Mana Tithe", 35108, Rarity.COMMON, mage.cards.m.ManaTithe.class, MPR_FULL_ART)); + cards.add(new SetCardInfo("Mana Vault", 46942, Rarity.RARE, mage.cards.m.ManaVault.class)); + cards.add(new SetCardInfo("Mardu Shadowspear", 55717, Rarity.UNCOMMON, mage.cards.m.MarduShadowspear.class)); + cards.add(new SetCardInfo("Marisi's Twinclaws", 36186, Rarity.UNCOMMON, mage.cards.m.MarisisTwinclaws.class)); + cards.add(new SetCardInfo("Markov Dreadknight", 60456, Rarity.RARE, mage.cards.m.MarkovDreadknight.class)); + cards.add(new SetCardInfo("Master's Call", 39644, Rarity.COMMON, mage.cards.m.MastersCall.class)); + cards.add(new SetCardInfo("Mastery of the Unseen", 55705, Rarity.RARE, mage.cards.m.MasteryOfTheUnseen.class)); + cards.add(new SetCardInfo("Maul Splicer", 40084, Rarity.COMMON, mage.cards.m.MaulSplicer.class)); + cards.add(new SetCardInfo("Mayor of Avabruck", 42866, Rarity.RARE, mage.cards.m.MayorOfAvabruck.class)); + cards.add(new SetCardInfo("Maze of Ith", 36170, Rarity.RARE, mage.cards.m.MazeOfIth.class)); + cards.add(new SetCardInfo("Maze's End", 48572, Rarity.MYTHIC, mage.cards.m.MazesEnd.class)); + cards.add(new SetCardInfo("Meddling Mage", 36304, Rarity.RARE, mage.cards.m.MeddlingMage.class)); + cards.add(new SetCardInfo("Megantic Sliver", 49830, Rarity.RARE, mage.cards.m.MeganticSliver.class)); + cards.add(new SetCardInfo("Melek, Izzet Paragon", 48578, Rarity.RARE, mage.cards.m.MelekIzzetParagon.class)); + cards.add(new SetCardInfo("Memnite", 37871, Rarity.UNCOMMON, mage.cards.m.Memnite.class)); + cards.add(new SetCardInfo("Memoricide", 37863, Rarity.RARE, mage.cards.m.Memoricide.class)); + cards.add(new SetCardInfo("Memory Lapse", 35986, Rarity.COMMON, mage.cards.m.MemoryLapse.class)); + cards.add(new SetCardInfo("Merchant Scroll", 68055, Rarity.RARE, mage.cards.m.MerchantScroll.class)); + cards.add(new SetCardInfo("Mercurial Pretender", 53826, Rarity.RARE, mage.cards.m.MercurialPretender.class)); + cards.add(new SetCardInfo("Merrow Reejerey", 36164, Rarity.UNCOMMON, mage.cards.m.MerrowReejerey.class)); + cards.add(new SetCardInfo("Metalworker", 46950, Rarity.RARE, mage.cards.m.Metalworker.class)); + cards.add(new SetCardInfo("Militia Bugler", 69260, Rarity.UNCOMMON, mage.cards.m.MilitiaBugler.class)); + cards.add(new SetCardInfo("Mind Control", 36298, Rarity.UNCOMMON, mage.cards.m.MindControl.class)); + cards.add(new SetCardInfo("Mind Stone", 31405, Rarity.UNCOMMON, mage.cards.m.MindStone.class)); + cards.add(new SetCardInfo("Mind Twist", 46920, Rarity.RARE, mage.cards.m.MindTwist.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mind Twist", 62427, Rarity.RARE, mage.cards.m.MindTwist.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mind Warp", 35982, Rarity.UNCOMMON, mage.cards.m.MindWarp.class)); + cards.add(new SetCardInfo("Mind's Desire", 35070, Rarity.RARE, mage.cards.m.MindsDesire.class)); + cards.add(new SetCardInfo("Mind's Eye", 47981, Rarity.RARE, mage.cards.m.MindsEye.class)); + cards.add(new SetCardInfo("Mindwrack Demon", 60480, Rarity.MYTHIC, mage.cards.m.MindwrackDemon.class)); + cards.add(new SetCardInfo("Mirari's Wake", 31421, Rarity.RARE, mage.cards.m.MirarisWake.class)); + cards.add(new SetCardInfo("Mirran Crusader", 39636, Rarity.RARE, mage.cards.m.MirranCrusader.class)); + // Planechase Plane. Card not implemented. + // cards.add(new SetCardInfo("Mirrored Depths", 44344, Rarity.RARE, mage.cards.m.MirroredDepths.class)); + cards.add(new SetCardInfo("Misdirection", 62461, Rarity.RARE, mage.cards.m.Misdirection.class)); + cards.add(new SetCardInfo("Mishra's Factory", 221, Rarity.UNCOMMON, mage.cards.m.MishrasFactory.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mishra's Factory", 35954, Rarity.UNCOMMON, mage.cards.m.MishrasFactory.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mishra's Workshop", 46944, Rarity.RARE, mage.cards.m.MishrasWorkshop.class)); + cards.add(new SetCardInfo("Mitotic Slime", 37600, Rarity.RARE, mage.cards.m.MitoticSlime.class)); + cards.add(new SetCardInfo("Mizzium Meddler", 57608, Rarity.RARE, mage.cards.m.MizziumMeddler.class)); + cards.add(new SetCardInfo("Moat", 46948, Rarity.RARE, mage.cards.m.Moat.class)); + cards.add(new SetCardInfo("Mogg Fanatic", 31407, Rarity.UNCOMMON, mage.cards.m.MoggFanatic.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mogg Fanatic", 36036, Rarity.COMMON, mage.cards.m.MoggFanatic.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Momentary Blink", 60478, Rarity.COMMON, mage.cards.m.MomentaryBlink.class)); + cards.add(new SetCardInfo("Mondronen Shaman", 43507, Rarity.RARE, mage.cards.m.MondronenShaman.class)); + cards.add(new SetCardInfo("Monstrous Hound", 32194, Rarity.RARE, mage.cards.m.MonstrousHound.class)); + cards.add(new SetCardInfo("Moonsilver Spear", 44311, Rarity.RARE, mage.cards.m.MoonsilverSpear.class)); + cards.add(new SetCardInfo("Morphling", 26982, Rarity.RARE, mage.cards.m.Morphling.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Morphling", 36847, Rarity.RARE, mage.cards.m.Morphling.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mortify", 35046, Rarity.UNCOMMON, mage.cards.m.Mortify.class, MPR_FULL_ART)); + cards.add(new SetCardInfo("Mother of Runes", 36140, Rarity.UNCOMMON, mage.cards.m.MotherOfRunes.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mother of Runes", 59649, Rarity.UNCOMMON, mage.cards.m.MotherOfRunes.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", 241, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", 243, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", 245, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", 267, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", 277, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", 289, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", 291, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", 31981, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", 31995, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", 32003, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", 32025, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", 40044, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", 40054, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", 40064, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", 40096, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", 53877, Rarity.LAND, mage.cards.basiclands.Mountain.class, FULL_ART_ZEN_VARIOUS)); + cards.add(new SetCardInfo("Mountain", 58259, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mox Emerald", 46896, Rarity.RARE, mage.cards.m.MoxEmerald.class)); + cards.add(new SetCardInfo("Mox Jet", 46894, Rarity.RARE, mage.cards.m.MoxJet.class)); + cards.add(new SetCardInfo("Mox Pearl", 46892, Rarity.RARE, mage.cards.m.MoxPearl.class)); + cards.add(new SetCardInfo("Mox Ruby", 46952, Rarity.RARE, mage.cards.m.MoxRuby.class)); + cards.add(new SetCardInfo("Mox Sapphire", 46902, Rarity.RARE, mage.cards.m.MoxSapphire.class)); + cards.add(new SetCardInfo("Mulldrifter", 36190, Rarity.COMMON, mage.cards.m.Mulldrifter.class)); + cards.add(new SetCardInfo("Munda's Vanguard", 59659, Rarity.RARE, mage.cards.m.MundasVanguard.class)); + cards.add(new SetCardInfo("Murder", 69256, Rarity.UNCOMMON, mage.cards.m.Murder.class)); + cards.add(new SetCardInfo("Murderous Redcap", 36192, Rarity.UNCOMMON, mage.cards.m.MurderousRedcap.class)); + cards.add(new SetCardInfo("Muscle Sliver", 36034, Rarity.COMMON, mage.cards.m.MuscleSliver.class)); + cards.add(new SetCardInfo("Mutavault", 31425, Rarity.RARE, mage.cards.m.Mutavault.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mutavault", 66888, Rarity.RARE, mage.cards.m.Mutavault.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mwonvuli Beast Tracker", 45211, Rarity.UNCOMMON, mage.cards.m.MwonvuliBeastTracker.class)); + cards.add(new SetCardInfo("Mycoid Shepherd", 43556, Rarity.RARE, mage.cards.m.MycoidShepherd.class)); + cards.add(new SetCardInfo("Myr Enforcer", 36274, Rarity.COMMON, mage.cards.m.MyrEnforcer.class)); + cards.add(new SetCardInfo("Myr Superion", 40078, Rarity.RARE, mage.cards.m.MyrSuperion.class)); + cards.add(new SetCardInfo("Mystic of the Hidden Way", 55775, Rarity.COMMON, mage.cards.m.MysticOfTheHiddenWay.class)); + cards.add(new SetCardInfo("Mystical Tutor", 70926, Rarity.MYTHIC, mage.cards.m.MysticalTutor.class)); + cards.add(new SetCardInfo("Nalathni Dragon", 35956, Rarity.RARE, mage.cards.n.NalathniDragon.class)); + cards.add(new SetCardInfo("Nameless Inversion", 35126, Rarity.COMMON, mage.cards.n.NamelessInversion.class, MPR_FULL_ART)); + cards.add(new SetCardInfo("Natural Order", 43536, Rarity.RARE, mage.cards.n.NaturalOrder.class)); + cards.add(new SetCardInfo("Naya Sojourners", 36188, Rarity.COMMON, mage.cards.n.NayaSojourners.class)); + cards.add(new SetCardInfo("Nearheath Stalker", 43509, Rarity.COMMON, mage.cards.n.NearheathStalker.class)); + cards.add(new SetCardInfo("Necromaster Dragon", 57000, Rarity.RARE, mage.cards.n.NecromasterDragon.class)); + cards.add(new SetCardInfo("Necropolis Fiend", 55729, Rarity.RARE, mage.cards.n.NecropolisFiend.class)); + cards.add(new SetCardInfo("Negate", 35138, Rarity.COMMON, mage.cards.n.Negate.class, MPR_FULL_ART)); + cards.add(new SetCardInfo("Negate", 70930, Rarity.MYTHIC, mage.cards.n.Negate.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Nekusar, the Mindrazer", 52314, Rarity.MYTHIC, mage.cards.n.NekusarTheMindrazer.class)); + cards.add(new SetCardInfo("Nephalia Moondrakes", 60458, Rarity.RARE, mage.cards.n.NephaliaMoondrakes.class)); + cards.add(new SetCardInfo("Nessian Wilds Ravager", 51924, Rarity.RARE, mage.cards.n.NessianWildsRavager.class)); + cards.add(new SetCardInfo("Nether Void", 46936, Rarity.RARE, mage.cards.n.NetherVoid.class)); + cards.add(new SetCardInfo("Niblis of Frost", 61547, Rarity.RARE, mage.cards.n.NiblisOfFrost.class)); + cards.add(new SetCardInfo("Nicol Bolas, Planeswalker", 65009, Rarity.MYTHIC, mage.cards.n.NicolBolasPlaneswalker.class)); + cards.add(new SetCardInfo("Nighthowler", 50122, Rarity.RARE, mage.cards.n.Nighthowler.class)); + cards.add(new SetCardInfo("Nightveil Specter", 47995, Rarity.RARE, mage.cards.n.NightveilSpecter.class)); + cards.add(new SetCardInfo("Nissa's Chosen", 36216, Rarity.COMMON, mage.cards.n.NissasChosen.class)); + cards.add(new SetCardInfo("Nissa's Pilgrimage", 59677, Rarity.COMMON, mage.cards.n.NissasPilgrimage.class)); + cards.add(new SetCardInfo("Nissa, Vital Force", 70936, Rarity.MYTHIC, mage.cards.n.NissaVitalForce.class)); + cards.add(new SetCardInfo("Nissa, Voice of Zendikar", 62511, Rarity.MYTHIC, mage.cards.n.NissaVoiceOfZendikar.class)); + cards.add(new SetCardInfo("Nissa, Worldwaker", 65005, Rarity.MYTHIC, mage.cards.n.NissaWorldwaker.class)); + cards.add(new SetCardInfo("Niv-Mizzet, the Firemind", 32583, Rarity.RARE, mage.cards.n.NivMizzetTheFiremind.class)); + cards.add(new SetCardInfo("Noble Hierarch", 58239, Rarity.RARE, mage.cards.n.NobleHierarch.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Noble Hierarch", 66894, Rarity.RARE, mage.cards.n.NobleHierarch.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Noose Constrictor", 62995, Rarity.UNCOMMON, mage.cards.n.NooseConstrictor.class)); + cards.add(new SetCardInfo("Noosegraf Mob", 61549, Rarity.RARE, mage.cards.n.NoosegrafMob.class)); + cards.add(new SetCardInfo("Oath of Druids", 36092, Rarity.RARE, mage.cards.o.OathOfDruids.class)); + cards.add(new SetCardInfo("Ob Nixilis Reignited", 62509, Rarity.MYTHIC, mage.cards.o.ObNixilisReignited.class)); + cards.add(new SetCardInfo("Obelisk of Alara", 31973, Rarity.RARE, mage.cards.o.ObeliskOfAlara.class)); + cards.add(new SetCardInfo("Oblivion Ring", 36202, Rarity.COMMON, mage.cards.o.OblivionRing.class)); + cards.add(new SetCardInfo("Oblivion Sower", 58893, Rarity.MYTHIC, mage.cards.o.OblivionSower.class)); + cards.add(new SetCardInfo("Ojutai's Command", 55878, Rarity.RARE, mage.cards.o.OjutaisCommand.class)); + cards.add(new SetCardInfo("Okina Nightwatch", 36290, Rarity.COMMON, mage.cards.o.OkinaNightwatch.class)); + cards.add(new SetCardInfo("Old Man of the Sea", 43644, Rarity.RARE, mage.cards.o.OldManOfTheSea.class)); + cards.add(new SetCardInfo("Oloro, Ageless Ascetic", 52316, Rarity.MYTHIC, mage.cards.o.OloroAgelessAscetic.class)); + cards.add(new SetCardInfo("Oona's Blackguard", 32535, Rarity.UNCOMMON, mage.cards.o.OonasBlackguard.class)); + cards.add(new SetCardInfo("Ophidian", 36022, Rarity.COMMON, mage.cards.o.Ophidian.class)); + cards.add(new SetCardInfo("Opt", 68047, Rarity.COMMON, mage.cards.o.Opt.class)); + cards.add(new SetCardInfo("Oracle's Vault", 64434, Rarity.RARE, mage.cards.o.OraclesVault.class)); + cards.add(new SetCardInfo("Oran-Rief Hydra", 58251, Rarity.RARE, mage.cards.o.OranRiefHydra.class)); + cards.add(new SetCardInfo("Orator of Ojutai", 57578, Rarity.UNCOMMON, mage.cards.o.OratorOfOjutai.class)); + cards.add(new SetCardInfo("Orcish Lumberjack", 43638, Rarity.COMMON, mage.cards.o.OrcishLumberjack.class)); + cards.add(new SetCardInfo("Orim's Chant", 35072, Rarity.RARE, mage.cards.o.OrimsChant.class)); + cards.add(new SetCardInfo("Oros, the Avenger", 31959, Rarity.RARE, mage.cards.o.OrosTheAvenger.class)); + cards.add(new SetCardInfo("Orzhov Signet", 46910, Rarity.UNCOMMON, mage.cards.o.OrzhovSignet.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Orzhov Signet", 62399, Rarity.COMMON, mage.cards.o.OrzhovSignet.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Overbeing of Myth", 31967, Rarity.RARE, mage.cards.o.OverbeingOfMyth.class)); + cards.add(new SetCardInfo("Overgrown Tomb", 72315, Rarity.RARE, mage.cards.o.OvergrownTomb.class)); + cards.add(new SetCardInfo("Overtaker", 32202, Rarity.RARE, mage.cards.o.Overtaker.class)); + cards.add(new SetCardInfo("Oxidize", 35162, Rarity.UNCOMMON, mage.cards.o.Oxidize.class, MPR_FULL_ART)); + cards.add(new SetCardInfo("Pain Seer", 51916, Rarity.RARE, mage.cards.p.PainSeer.class)); + cards.add(new SetCardInfo("Path to Exile", 36174, Rarity.UNCOMMON, mage.cards.p.PathToExile.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Path to Exile", 57580, Rarity.UNCOMMON, mage.cards.p.PathToExile.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Pathrazer of Ulamog", 36861, Rarity.UNCOMMON, mage.cards.p.PathrazerOfUlamog.class)); + cards.add(new SetCardInfo("Peace Strider", 39019, Rarity.UNCOMMON, mage.cards.p.PeaceStrider.class)); + cards.add(new SetCardInfo("Pendelhaven", 35104, Rarity.UNCOMMON, mage.cards.p.Pendelhaven.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Pendelhaven", 65660, Rarity.UNCOMMON, mage.cards.p.Pendelhaven.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Pernicious Deed", 36306, Rarity.RARE, mage.cards.p.PerniciousDeed.class)); + cards.add(new SetCardInfo("Phalanx Leader", 50116, Rarity.UNCOMMON, mage.cards.p.PhalanxLeader.class)); + cards.add(new SetCardInfo("Phyrexian Dreadnought", 43534, Rarity.RARE, mage.cards.p.PhyrexianDreadnought.class)); + cards.add(new SetCardInfo("Phyrexian Metamorph", 40082, Rarity.RARE, mage.cards.p.PhyrexianMetamorph.class)); + cards.add(new SetCardInfo("Phyrexian Negator", 36144, Rarity.RARE, mage.cards.p.PhyrexianNegator.class)); + cards.add(new SetCardInfo("Phytotitan", 53830, Rarity.RARE, mage.cards.p.Phytotitan.class)); + cards.add(new SetCardInfo("Pia and Kiran Nalaar", 57594, Rarity.RARE, mage.cards.p.PiaAndKiranNalaar.class)); + cards.add(new SetCardInfo("Pierce Strider", 39017, Rarity.UNCOMMON, mage.cards.p.PierceStrider.class)); + cards.add(new SetCardInfo("Pillage", 35994, Rarity.UNCOMMON, mage.cards.p.Pillage.class)); + cards.add(new SetCardInfo("Pillar of Flame", 46871, Rarity.COMMON, mage.cards.p.PillarOfFlame.class)); + cards.add(new SetCardInfo("Plague Myr", 39640, Rarity.UNCOMMON, mage.cards.p.PlagueMyr.class)); + cards.add(new SetCardInfo("Plague Stinger", 37867, Rarity.COMMON, mage.cards.p.PlagueStinger.class)); + cards.add(new SetCardInfo("Plains", 231, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", 233, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", 255, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", 261, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", 271, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", 281, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", 295, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", 31975, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", 31997, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", 32011, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", 32019, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", 40046, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", 40056, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", 40066, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", 40098, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", 48582, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", 53879, Rarity.LAND, mage.cards.basiclands.Plains.class, FULL_ART_ZEN_VARIOUS)); + cards.add(new SetCardInfo("Plains", 58253, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plateau", 43608, Rarity.RARE, mage.cards.p.Plateau.class)); + cards.add(new SetCardInfo("Polluted Delta", 43582, Rarity.RARE, mage.cards.p.PollutedDelta.class)); + cards.add(new SetCardInfo("Ponder", 35118, Rarity.COMMON, mage.cards.p.Ponder.class, MPR_FULL_ART)); + cards.add(new SetCardInfo("Pouncing Jaguar", 36110, Rarity.COMMON, mage.cards.p.PouncingJaguar.class)); + cards.add(new SetCardInfo("Powder Keg", 36146, Rarity.RARE, mage.cards.p.PowderKeg.class)); + cards.add(new SetCardInfo("Preacher", 23950, Rarity.RARE, mage.cards.p.Preacher.class)); + cards.add(new SetCardInfo("Priest of Titania", 36120, Rarity.COMMON, mage.cards.p.PriestOfTitania.class)); + cards.add(new SetCardInfo("Priest of Urabrask", 40080, Rarity.UNCOMMON, mage.cards.p.PriestOfUrabrask.class)); + cards.add(new SetCardInfo("Primal Command", 62489, Rarity.RARE, mage.cards.p.PrimalCommand.class)); + cards.add(new SetCardInfo("Pristine Skywise", 57002, Rarity.RARE, mage.cards.p.PristineSkywise.class)); + cards.add(new SetCardInfo("Pristine Talisman", 40074, Rarity.COMMON, mage.cards.p.PristineTalisman.class)); + cards.add(new SetCardInfo("Prodigal Sorcerer", 35938, Rarity.COMMON, mage.cards.p.ProdigalSorcerer.class)); + cards.add(new SetCardInfo("Prognostic Sphinx", 53842, Rarity.RARE, mage.cards.p.PrognosticSphinx.class)); + cards.add(new SetCardInfo("Prophet of Kruphix", 53844, Rarity.RARE, mage.cards.p.ProphetOfKruphix.class)); + cards.add(new SetCardInfo("Psionic Blast", 35058, Rarity.RARE, mage.cards.p.PsionicBlast.class, MPR_FULL_ART)); + cards.add(new SetCardInfo("Psychatog", 31467, Rarity.UNCOMMON, mage.cards.p.Psychatog.class)); + cards.add(new SetCardInfo("Putrefy", 35166, Rarity.UNCOMMON, mage.cards.p.Putrefy.class, MPR_FULL_ART)); + cards.add(new SetCardInfo("Pyroblast", 69981, Rarity.COMMON, mage.cards.p.Pyroblast.class)); + cards.add(new SetCardInfo("Pyroclasm", 35168, Rarity.UNCOMMON, mage.cards.p.Pyroclasm.class, MPR_FULL_ART)); + cards.add(new SetCardInfo("Pyrokinesis", 43640, Rarity.RARE, mage.cards.p.Pyrokinesis.class)); + cards.add(new SetCardInfo("Qasali Pridemage", 37608, Rarity.COMMON, mage.cards.q.QasaliPridemage.class)); + cards.add(new SetCardInfo("Questing Phelddagrif", 36234, Rarity.RARE, mage.cards.q.QuestingPhelddagrif.class)); + cards.add(new SetCardInfo("Quicksmith Rebel", 62993, Rarity.RARE, mage.cards.q.QuicksmithRebel.class)); + cards.add(new SetCardInfo("Quirion Ranger", 36012, Rarity.COMMON, mage.cards.q.QuirionRanger.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Quirion Ranger", 62443, Rarity.COMMON, mage.cards.q.QuirionRanger.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Radiant Flames", 58277, Rarity.RARE, mage.cards.r.RadiantFlames.class)); + cards.add(new SetCardInfo("Raging Kavu", 36206, Rarity.RARE, mage.cards.r.RagingKavu.class)); + cards.add(new SetCardInfo("Rakdos Cackler", 49842, Rarity.UNCOMMON, mage.cards.r.RakdosCackler.class)); + cards.add(new SetCardInfo("Rakdos Firewheeler", 71590, Rarity.UNCOMMON, mage.cards.r.RakdosFirewheeler.class)); + cards.add(new SetCardInfo("Rakdos Guildmage", 32589, Rarity.UNCOMMON, mage.cards.r.RakdosGuildmage.class)); + cards.add(new SetCardInfo("Rakdos Signet", 46898, Rarity.UNCOMMON, mage.cards.r.RakdosSignet.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Rakdos Signet", 62389, Rarity.COMMON, mage.cards.r.RakdosSignet.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Rakshasa Vizier", 54516, Rarity.RARE, mage.cards.r.RakshasaVizier.class)); + cards.add(new SetCardInfo("Rampaging Baloths", 35140, Rarity.MYTHIC, mage.cards.r.RampagingBaloths.class)); + cards.add(new SetCardInfo("Rampant Growth", 35128, Rarity.COMMON, mage.cards.r.RampantGrowth.class, MPR_FULL_ART)); + cards.add(new SetCardInfo("Ramunap Excavator", 64991, Rarity.RARE, mage.cards.r.RamunapExcavator.class)); + cards.add(new SetCardInfo("Rancor", 35112, Rarity.COMMON, mage.cards.r.Rancor.class)); + cards.add(new SetCardInfo("Ratchet Bomb", 49836, Rarity.RARE, mage.cards.r.RatchetBomb.class)); + cards.add(new SetCardInfo("Rathi Assassin", 32204, Rarity.RARE, mage.cards.r.RathiAssassin.class)); + cards.add(new SetCardInfo("Rattleclaw Mystic", 54557, Rarity.RARE, mage.cards.r.RattleclawMystic.class)); + cards.add(new SetCardInfo("Ravages of War", 55864, Rarity.RARE, mage.cards.r.RavagesOfWar.class)); + cards.add(new SetCardInfo("Ravenous Baloth", 31389, Rarity.RARE, mage.cards.r.RavenousBaloth.class)); + cards.add(new SetCardInfo("Ravenous Bloodseeker", 60486, Rarity.UNCOMMON, mage.cards.r.RavenousBloodseeker.class)); + cards.add(new SetCardInfo("Ravenous Demon", 43503, Rarity.RARE, mage.cards.r.RavenousDemon.class)); + cards.add(new SetCardInfo("Razorfin Hunter", 62407, Rarity.COMMON, mage.cards.r.RazorfinHunter.class)); + cards.add(new SetCardInfo("Reality Shift", 55759, Rarity.UNCOMMON, mage.cards.r.RealityShift.class)); + cards.add(new SetCardInfo("Reanimate", 36052, Rarity.UNCOMMON, mage.cards.r.Reanimate.class)); + cards.add(new SetCardInfo("Reaper of the Wilds", 55737, Rarity.RARE, mage.cards.r.ReaperOfTheWilds.class)); + cards.add(new SetCardInfo("Reciprocate", 35164, Rarity.UNCOMMON, mage.cards.r.Reciprocate.class, MPR_FULL_ART)); + cards.add(new SetCardInfo("Reckless Wurm", 35990, Rarity.UNCOMMON, mage.cards.r.RecklessWurm.class)); + cards.add(new SetCardInfo("Reclamation Sage", 53836, Rarity.UNCOMMON, mage.cards.r.ReclamationSage.class)); + cards.add(new SetCardInfo("Recollect", 35060, Rarity.UNCOMMON, mage.cards.r.Recollect.class, MPR_FULL_ART)); + cards.add(new SetCardInfo("Red Elemental Blast", 43610, Rarity.UNCOMMON, mage.cards.r.RedElementalBlast.class)); + cards.add(new SetCardInfo("Reflecting Pool", 62487, Rarity.RARE, mage.cards.r.ReflectingPool.class)); + cards.add(new SetCardInfo("Regrowth", 35940, Rarity.UNCOMMON, mage.cards.r.Regrowth.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Regrowth", 43612, Rarity.RARE, mage.cards.r.Regrowth.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Reins of Power", 62517, Rarity.RARE, mage.cards.r.ReinsOfPower.class)); + cards.add(new SetCardInfo("Relic Seeker", 57574, Rarity.RARE, mage.cards.r.RelicSeeker.class)); + cards.add(new SetCardInfo("Reliquary Tower", 48007, Rarity.UNCOMMON, mage.cards.r.ReliquaryTower.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Reliquary Tower", 69250, Rarity.UNCOMMON, mage.cards.r.ReliquaryTower.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Remand", 31429, Rarity.UNCOMMON, mage.cards.r.Remand.class)); + cards.add(new SetCardInfo("Remove Soul", 35130, Rarity.COMMON, mage.cards.r.RemoveSoul.class, MPR_FULL_ART)); + cards.add(new SetCardInfo("Render Silent", 48576, Rarity.RARE, mage.cards.r.RenderSilent.class)); + cards.add(new SetCardInfo("Renegade Rallier", 64999, Rarity.UNCOMMON, mage.cards.r.RenegadeRallier.class)); + cards.add(new SetCardInfo("Repeal", 54543, Rarity.COMMON, mage.cards.r.Repeal.class)); + cards.add(new SetCardInfo("Resolute Archangel", 53820, Rarity.RARE, mage.cards.r.ResoluteArchangel.class)); + cards.add(new SetCardInfo("Restoration Angel", 44317, Rarity.RARE, mage.cards.r.RestorationAngel.class)); + cards.add(new SetCardInfo("Resurrection", 36136, Rarity.UNCOMMON, mage.cards.r.Resurrection.class)); + cards.add(new SetCardInfo("Retaliator Griffin", 43546, Rarity.RARE, mage.cards.r.RetaliatorGriffin.class)); + cards.add(new SetCardInfo("Revenant", 32192, Rarity.RARE, mage.cards.r.Revenant.class)); + cards.add(new SetCardInfo("Reverse Engineer", 64995, Rarity.UNCOMMON, mage.cards.r.ReverseEngineer.class)); + cards.add(new SetCardInfo("Rewind", 36124, Rarity.COMMON, mage.cards.r.Rewind.class)); + cards.add(new SetCardInfo("Reya Dawnbringer", 36086, Rarity.RARE, mage.cards.r.ReyaDawnbringer.class)); + cards.add(new SetCardInfo("Rhox", 36204, Rarity.RARE, mage.cards.r.Rhox.class)); + cards.add(new SetCardInfo("Rhox War Monk", 40088, Rarity.UNCOMMON, mage.cards.r.RhoxWarMonk.class)); + cards.add(new SetCardInfo("Rhystic Study", 47975, Rarity.COMMON, mage.cards.r.RhysticStudy.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Rhystic Study", 69943, Rarity.RARE, mage.cards.r.RhysticStudy.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Rift Bolt", 37849, Rarity.COMMON, mage.cards.r.RiftBolt.class)); + cards.add(new SetCardInfo("Riku of Two Reflections", 51536, Rarity.MYTHIC, mage.cards.r.RikuOfTwoReflections.class)); + cards.add(new SetCardInfo("Rise from the Grave", 36300, Rarity.UNCOMMON, mage.cards.r.RiseFromTheGrave.class)); + cards.add(new SetCardInfo("Rise from the Tides", 62209, Rarity.RARE, mage.cards.r.RiseFromTheTides.class)); + cards.add(new SetCardInfo("Rishadan Port", 55739, Rarity.RARE, mage.cards.r.RishadanPort.class)); + cards.add(new SetCardInfo("River Boa", 36014, Rarity.UNCOMMON, mage.cards.r.RiverBoa.class)); + cards.add(new SetCardInfo("Roar of the Wurm", 32565, Rarity.UNCOMMON, mage.cards.r.RoarOfTheWurm.class)); + cards.add(new SetCardInfo("Roast", 58263, Rarity.UNCOMMON, mage.cards.r.Roast.class)); + cards.add(new SetCardInfo("Rout", 62465, Rarity.RARE, mage.cards.r.Rout.class)); + cards.add(new SetCardInfo("Royal Assassin", 35160, Rarity.RARE, mage.cards.r.RoyalAssassin.class)); + cards.add(new SetCardInfo("Rubblehulk", 47977, Rarity.RARE, mage.cards.r.Rubblehulk.class)); + cards.add(new SetCardInfo("Ruinous Path", 58273, Rarity.RARE, mage.cards.r.RuinousPath.class)); + cards.add(new SetCardInfo("Rukh Egg", 36270, Rarity.RARE, mage.cards.r.RukhEgg.class)); + cards.add(new SetCardInfo("Rupture", 62417, Rarity.RARE, mage.cards.r.Rupture.class)); + cards.add(new SetCardInfo("Ruthless Ripper", 55767, Rarity.UNCOMMON, mage.cards.r.RuthlessRipper.class)); + cards.add(new SetCardInfo("Ryusei, the Falling Star", 32001, Rarity.RARE, mage.cards.r.RyuseiTheFallingStar.class)); + cards.add(new SetCardInfo("Sacred Foundry", 72309, Rarity.RARE, mage.cards.s.SacredFoundry.class)); + cards.add(new SetCardInfo("Sage of the Inward Eye", 54518, Rarity.RARE, mage.cards.s.SageOfTheInwardEye.class)); + cards.add(new SetCardInfo("Sage-Eye Avengers", 55709, Rarity.RARE, mage.cards.s.SageEyeAvengers.class)); + cards.add(new SetCardInfo("Saheeli's Artistry", 62207, Rarity.RARE, mage.cards.s.SaheelisArtistry.class)); + cards.add(new SetCardInfo("Sakura-Tribe Elder", 36200, Rarity.COMMON, mage.cards.s.SakuraTribeElder.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Sakura-Tribe Elder", 36282, Rarity.COMMON, mage.cards.s.SakuraTribeElder.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Sanctifier of Souls", 61543, Rarity.RARE, mage.cards.s.SanctifierOfSouls.class)); + cards.add(new SetCardInfo("Sandsteppe Citadel", 57606, Rarity.RARE, mage.cards.s.SandsteppeCitadel.class)); + cards.add(new SetCardInfo("Sandsteppe Mastodon", 55721, Rarity.RARE, mage.cards.s.SandsteppeMastodon.class)); + cards.add(new SetCardInfo("Savage Lands", 42876, Rarity.UNCOMMON, mage.cards.s.SavageLands.class)); + cards.add(new SetCardInfo("Savannah", 43614, Rarity.RARE, mage.cards.s.Savannah.class)); + cards.add(new SetCardInfo("Scaleguard Sentinels", 55882, Rarity.UNCOMMON, mage.cards.s.ScaleguardSentinels.class)); + cards.add(new SetCardInfo("Scapeshift", 66898, Rarity.MYTHIC, mage.cards.s.Scapeshift.class)); + cards.add(new SetCardInfo("Scavenging Ooze", 62451, Rarity.RARE, mage.cards.s.ScavengingOoze.class)); + cards.add(new SetCardInfo("Scent of Cinder", 36150, Rarity.COMMON, mage.cards.s.ScentOfCinder.class)); + cards.add(new SetCardInfo("Scourge of Fleets", 52324, Rarity.RARE, mage.cards.s.ScourgeOfFleets.class)); + cards.add(new SetCardInfo("Scragnoth", 36054, Rarity.UNCOMMON, mage.cards.s.Scragnoth.class)); + cards.add(new SetCardInfo("Scrap Trawler", 62997, Rarity.RARE, mage.cards.s.ScrapTrawler.class)); + cards.add(new SetCardInfo("Scroll Rack", 47969, Rarity.RARE, mage.cards.s.ScrollRack.class)); + cards.add(new SetCardInfo("Scrubland", 43616, Rarity.RARE, mage.cards.s.Scrubland.class)); + cards.add(new SetCardInfo("Scryb Sprites", 62431, Rarity.COMMON, mage.cards.s.ScrybSprites.class)); + cards.add(new SetCardInfo("Scythe Leopard", 58271, Rarity.UNCOMMON, mage.cards.s.ScytheLeopard.class)); + cards.add(new SetCardInfo("Seal of Cleansing", 35132, Rarity.COMMON, mage.cards.s.SealOfCleansing.class)); + cards.add(new SetCardInfo("Searing Blaze", 39630, Rarity.COMMON, mage.cards.s.SearingBlaze.class, MPR_FULL_ART)); + cards.add(new SetCardInfo("Searing Spear", 48003, Rarity.COMMON, mage.cards.s.SearingSpear.class)); + cards.add(new SetCardInfo("Sedge Troll", 209, Rarity.RARE, mage.cards.s.SedgeTroll.class)); + cards.add(new SetCardInfo("Seeker of the Way", 57576, Rarity.UNCOMMON, mage.cards.s.SeekerOfTheWay.class)); + cards.add(new SetCardInfo("Selesnya Signet", 46926, Rarity.UNCOMMON, mage.cards.s.SelesnyaSignet.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Selesnya Signet", 62437, Rarity.COMMON, mage.cards.s.SelesnyaSignet.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Selkie Hedge-Mage", 32549, Rarity.UNCOMMON, mage.cards.s.SelkieHedgeMage.class)); + cards.add(new SetCardInfo("Serendib Efreet", 217, Rarity.RARE, mage.cards.s.SerendibEfreet.class)); + cards.add(new SetCardInfo("Serra Angel", 35942, Rarity.UNCOMMON, mage.cards.s.SerraAngel.class)); + cards.add(new SetCardInfo("Serra Avatar", 26984, Rarity.RARE, mage.cards.s.SerraAvatar.class)); + cards.add(new SetCardInfo("Serra Avenger", 36314, Rarity.RARE, mage.cards.s.SerraAvenger.class)); + cards.add(new SetCardInfo("Serrated Arrows", 35116, Rarity.UNCOMMON, mage.cards.s.SerratedArrows.class)); + cards.add(new SetCardInfo("Serum Visions", 36280, Rarity.COMMON, mage.cards.s.SerumVisions.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Serum Visions", 57586, Rarity.COMMON, mage.cards.s.SerumVisions.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Servo Exhibition", 64428, Rarity.UNCOMMON, mage.cards.s.ServoExhibition.class)); + // Card not implemented + // cards.add(new SetCardInfo("Sewers of Estark", 35964, Rarity.RARE, mage.cards.s.SewersOfEstark.class)); + cards.add(new SetCardInfo("Shadowmage Infiltrator", 55314, Rarity.RARE, mage.cards.s.ShadowmageInfiltrator.class)); + cards.add(new SetCardInfo("Shamanic Revelation", 55719, Rarity.RARE, mage.cards.s.ShamanicRevelation.class)); + cards.add(new SetCardInfo("Shanna, Sisay's Legacy", 68051, Rarity.UNCOMMON, mage.cards.s.ShannaSisaysLegacy.class)); + cards.add(new SetCardInfo("Shard Phoenix", 36308, Rarity.RARE, mage.cards.s.ShardPhoenix.class)); + cards.add(new SetCardInfo("Shardless Agent", 55697, Rarity.UNCOMMON, mage.cards.s.ShardlessAgent.class)); + cards.add(new SetCardInfo("Sheoldred, Whispering One", 40086, Rarity.MYTHIC, mage.cards.s.SheoldredWhisperingOne.class)); + cards.add(new SetCardInfo("Shepherd of the Lost", 43550, Rarity.UNCOMMON, mage.cards.s.ShepherdOfTheLost.class)); + cards.add(new SetCardInfo("Shield of Kaldra", 31985, Rarity.RARE, mage.cards.s.ShieldOfKaldra.class)); + cards.add(new SetCardInfo("Shipbreaker Kraken", 50106, Rarity.RARE, mage.cards.s.ShipbreakerKraken.class)); + cards.add(new SetCardInfo("Shivan Dragon", 36232, Rarity.RARE, mage.cards.s.ShivanDragon.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Shivan Dragon", 62535, Rarity.RARE, mage.cards.s.ShivanDragon.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Shock", 32531, Rarity.COMMON, mage.cards.s.Shock.class)); + cards.add(new SetCardInfo("Show and Tell", 46930, Rarity.RARE, mage.cards.s.ShowAndTell.class)); + cards.add(new SetCardInfo("Shrapnel Blast", 31443, Rarity.UNCOMMON, mage.cards.s.ShrapnelBlast.class)); + cards.add(new SetCardInfo("Shriekmaw", 32537, Rarity.UNCOMMON, mage.cards.s.Shriekmaw.class)); + cards.add(new SetCardInfo("Shrine of Burning Rage", 40090, Rarity.UNCOMMON, mage.cards.s.ShrineOfBurningRage.class)); + cards.add(new SetCardInfo("Siege Dragon", 53834, Rarity.RARE, mage.cards.s.SiegeDragon.class)); + cards.add(new SetCardInfo("Siege Rhino", 57602, Rarity.RARE, mage.cards.s.SiegeRhino.class)); + cards.add(new SetCardInfo("Sign in Blood", 36226, Rarity.COMMON, mage.cards.s.SignInBlood.class)); + cards.add(new SetCardInfo("Signal Pest", 39648, Rarity.UNCOMMON, mage.cards.s.SignalPest.class)); + cards.add(new SetCardInfo("Silent Sentinel", 51910, Rarity.RARE, mage.cards.s.SilentSentinel.class)); + cards.add(new SetCardInfo("Silent Specter", 36252, Rarity.RARE, mage.cards.s.SilentSpecter.class)); + cards.add(new SetCardInfo("Silkwrap", 62497, Rarity.UNCOMMON, mage.cards.s.Silkwrap.class)); + cards.add(new SetCardInfo("Silver Knight", 31479, Rarity.UNCOMMON, mage.cards.s.SilverKnight.class)); + cards.add(new SetCardInfo("Silverblade Paladin", 44313, Rarity.RARE, mage.cards.s.SilverbladePaladin.class)); + cards.add(new SetCardInfo("Silvergill Adept", 66892, Rarity.UNCOMMON, mage.cards.s.SilvergillAdept.class)); + cards.add(new SetCardInfo("Simic Ascendancy", 71586, Rarity.RARE, mage.cards.s.SimicAscendancy.class)); + cards.add(new SetCardInfo("Simic Signet", 46900, Rarity.UNCOMMON, mage.cards.s.SimicSignet.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Simic Signet", 62391, Rarity.COMMON, mage.cards.s.SimicSignet.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Sin Collector", 50112, Rarity.UNCOMMON, mage.cards.s.SinCollector.class)); + cards.add(new SetCardInfo("Sinkhole", 43566, Rarity.RARE, mage.cards.s.Sinkhole.class)); + cards.add(new SetCardInfo("Skarrg Goliath", 47989, Rarity.RARE, mage.cards.s.SkarrgGoliath.class)); + cards.add(new SetCardInfo("Skirk Marauder", 36260, Rarity.COMMON, mage.cards.s.SkirkMarauder.class)); + cards.add(new SetCardInfo("Skittering Skirge", 36126, Rarity.COMMON, mage.cards.s.SkitteringSkirge.class)); + cards.add(new SetCardInfo("Skyknight Legionnaire", 36296, Rarity.COMMON, mage.cards.s.SkyknightLegionnaire.class)); + cards.add(new SetCardInfo("Skyship Stalker", 62215, Rarity.RARE, mage.cards.s.SkyshipStalker.class)); + cards.add(new SetCardInfo("Skyship Weatherlight", 62381, Rarity.RARE, mage.cards.s.SkyshipWeatherlight.class)); + cards.add(new SetCardInfo("Slave of Bolas", 36180, Rarity.UNCOMMON, mage.cards.s.SlaveOfBolas.class)); + cards.add(new SetCardInfo("Slice and Dice", 32573, Rarity.UNCOMMON, mage.cards.s.SliceAndDice.class)); + cards.add(new SetCardInfo("Slith Firewalker", 35158, Rarity.UNCOMMON, mage.cards.s.SlithFirewalker.class)); + cards.add(new SetCardInfo("Sliver Queen", 26980, Rarity.RARE, mage.cards.s.SliverQueen.class)); + cards.add(new SetCardInfo("Smash to Smithereens", 59675, Rarity.COMMON, mage.cards.s.SmashToSmithereens.class)); + cards.add(new SetCardInfo("Smite the Monstrous", 55769, Rarity.COMMON, mage.cards.s.SmiteTheMonstrous.class)); + cards.add(new SetCardInfo("Smother", 31475, Rarity.UNCOMMON, mage.cards.s.Smother.class)); + cards.add(new SetCardInfo("Snap", 62441, Rarity.COMMON, mage.cards.s.Snap.class)); + cards.add(new SetCardInfo("Snapcaster Mage", 59685, Rarity.MYTHIC, mage.cards.s.SnapcasterMage.class)); + cards.add(new SetCardInfo("Sol Ring", 35944, Rarity.UNCOMMON, mage.cards.s.SolRing.class)); + cards.add(new SetCardInfo("Soltari Priest", 35054, Rarity.UNCOMMON, mage.cards.s.SoltariPriest.class)); + cards.add(new SetCardInfo("Sorrow's Path", 36889, Rarity.RARE, mage.cards.s.SorrowsPath.class)); + cards.add(new SetCardInfo("Soul Collector", 36268, Rarity.RARE, mage.cards.s.SoulCollector.class)); + cards.add(new SetCardInfo("Soul Summons", 55751, Rarity.COMMON, mage.cards.s.SoulSummons.class)); + cards.add(new SetCardInfo("Soul Swallower", 60460, Rarity.RARE, mage.cards.s.SoulSwallower.class)); + cards.add(new SetCardInfo("Soul of Theros", 62471, Rarity.MYTHIC, mage.cards.s.SoulOfTheros.class)); + cards.add(new SetCardInfo("Sparksmith", 32569, Rarity.COMMON, mage.cards.s.Sparksmith.class)); + cards.add(new SetCardInfo("Spatial Contortion", 61555, Rarity.COMMON, mage.cards.s.SpatialContortion.class)); + cards.add(new SetCardInfo("Spawn of Thraxes", 52320, Rarity.RARE, mage.cards.s.SpawnOfThraxes.class)); + cards.add(new SetCardInfo("Spellskite", 62533, Rarity.RARE, mage.cards.s.Spellskite.class)); + cards.add(new SetCardInfo("Spellstutter Sprite", 39622, Rarity.COMMON, mage.cards.s.SpellstutterSprite.class)); + cards.add(new SetCardInfo("Spike Feeder", 36082, Rarity.UNCOMMON, mage.cards.s.SpikeFeeder.class)); + cards.add(new SetCardInfo("Spiritmonger", 35976, Rarity.RARE, mage.cards.s.Spiritmonger.class)); + cards.add(new SetCardInfo("Sprouting Thrinax", 31451, Rarity.UNCOMMON, mage.cards.s.SproutingThrinax.class)); + cards.add(new SetCardInfo("Squadron Hawk", 39675, Rarity.COMMON, mage.cards.s.SquadronHawk.class)); + cards.add(new SetCardInfo("Squelching Leeches", 52330, Rarity.UNCOMMON, mage.cards.s.SquelchingLeeches.class)); + cards.add(new SetCardInfo("Staff of Nin", 45213, Rarity.RARE, mage.cards.s.StaffOfNin.class)); + cards.add(new SetCardInfo("Staggershock", 36851, Rarity.COMMON, mage.cards.s.Staggershock.class)); + // Planechase Plane. Card not implemented. + // cards.add(new SetCardInfo("Stairs to Infinity", 44350, Rarity.RARE, mage.cards.s.StairsToInfinity.class)); + cards.add(new SetCardInfo("Stasis", 65648, Rarity.RARE, mage.cards.s.Stasis.class)); + cards.add(new SetCardInfo("Stasis Snare", 58275, Rarity.UNCOMMON, mage.cards.s.StasisSnare.class)); + cards.add(new SetCardInfo("Staunch Defenders", 36064, Rarity.UNCOMMON, mage.cards.s.StaunchDefenders.class)); + cards.add(new SetCardInfo("Stealer of Secrets", 52310, Rarity.COMMON, mage.cards.s.StealerOfSecrets.class)); + cards.add(new SetCardInfo("Steam Vents", 72307, Rarity.RARE, mage.cards.s.SteamVents.class)); + cards.add(new SetCardInfo("Steel Hellkite", 37859, Rarity.RARE, mage.cards.s.SteelHellkite.class)); + cards.add(new SetCardInfo("Steel Leaf Champion", 68045, Rarity.RARE, mage.cards.s.SteelLeafChampion.class)); + cards.add(new SetCardInfo("Sterling Grove", 62467, Rarity.UNCOMMON, mage.cards.s.SterlingGrove.class)); + cards.add(new SetCardInfo("Stifle", 43540, Rarity.RARE, mage.cards.s.Stifle.class)); + cards.add(new SetCardInfo("Stoke the Flames", 54553, Rarity.RARE, mage.cards.s.StokeTheFlames.class)); + cards.add(new SetCardInfo("Stomping Ground", 72313, Rarity.RARE, mage.cards.s.StompingGround.class)); + cards.add(new SetCardInfo("Stone Haven Outfitter", 62495, Rarity.RARE, mage.cards.s.StoneHavenOutfitter.class)); + cards.add(new SetCardInfo("Stone Rain", 35946, Rarity.COMMON, mage.cards.s.StoneRain.class)); + cards.add(new SetCardInfo("Stone-Tongue Basilisk", 36238, Rarity.RARE, mage.cards.s.StoneTongueBasilisk.class)); + cards.add(new SetCardInfo("Stoneforge Mystic", 62499, Rarity.RARE, mage.cards.s.StoneforgeMystic.class)); + cards.add(new SetCardInfo("Storm Entity", 36020, Rarity.UNCOMMON, mage.cards.s.StormEntity.class)); + cards.add(new SetCardInfo("Strangleroot Geist", 43513, Rarity.UNCOMMON, mage.cards.s.StranglerootGeist.class)); + cards.add(new SetCardInfo("Stroke of Genius", 36114, Rarity.RARE, mage.cards.s.StrokeOfGenius.class)); + cards.add(new SetCardInfo("Stunted Growth", 43642, Rarity.RARE, mage.cards.s.StuntedGrowth.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Stunted Growth", 62425, Rarity.RARE, mage.cards.s.StuntedGrowth.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Stupor", 36002, Rarity.UNCOMMON, mage.cards.s.Stupor.class)); + cards.add(new SetCardInfo("Sudden Shock", 36316, Rarity.UNCOMMON, mage.cards.s.SuddenShock.class)); + cards.add(new SetCardInfo("Sultai Ascendancy", 55701, Rarity.RARE, mage.cards.s.SultaiAscendancy.class)); + cards.add(new SetCardInfo("Sultai Charm", 54561, Rarity.UNCOMMON, mage.cards.s.SultaiCharm.class)); + cards.add(new SetCardInfo("Sultai Emissary", 55753, Rarity.COMMON, mage.cards.s.SultaiEmissary.class)); + cards.add(new SetCardInfo("Sun Titan", 37596, Rarity.MYTHIC, mage.cards.s.SunTitan.class)); + cards.add(new SetCardInfo("Sunscorch Regent", 55896, Rarity.RARE, mage.cards.s.SunscorchRegent.class)); + cards.add(new SetCardInfo("Supplant Form", 55723, Rarity.RARE, mage.cards.s.SupplantForm.class)); + cards.add(new SetCardInfo("Supreme Verdict", 46879, Rarity.RARE, mage.cards.s.SupremeVerdict.class)); + cards.add(new SetCardInfo("Surgical Extraction", 40072, Rarity.RARE, mage.cards.s.SurgicalExtraction.class)); + cards.add(new SetCardInfo("Surging Flame", 35178, Rarity.COMMON, mage.cards.s.SurgingFlame.class)); + cards.add(new SetCardInfo("Survival of the Fittest", 43544, Rarity.RARE, mage.cards.s.SurvivalOfTheFittest.class)); + cards.add(new SetCardInfo("Suspension Field", 55876, Rarity.UNCOMMON, mage.cards.s.SuspensionField.class)); + cards.add(new SetCardInfo("Suture Priest", 40070, Rarity.COMMON, mage.cards.s.SuturePriest.class)); + cards.add(new SetCardInfo("Swamp", 235, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", 253, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", 257, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", 265, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", 275, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", 287, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", 299, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", 31977, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", 31999, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", 32007, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", 32021, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", 40048, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", 40058, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", 40068, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", 40092, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", 53883, Rarity.LAND, mage.cards.basiclands.Swamp.class, FULL_ART_ZEN_VARIOUS)); + cards.add(new SetCardInfo("Swamp", 58257, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Sword of Feast and Famine", 52304, Rarity.MYTHIC, mage.cards.s.SwordOfFeastAndFamine.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Sword of Feast and Famine", 59683, Rarity.MYTHIC, mage.cards.s.SwordOfFeastAndFamine.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Sword of Fire and Ice", 39650, Rarity.RARE, mage.cards.s.SwordOfFireAndIce.class)); + cards.add(new SetCardInfo("Sword of Kaldra", 31987, Rarity.RARE, mage.cards.s.SwordOfKaldra.class)); + cards.add(new SetCardInfo("Swords to Plowshares", 31381, Rarity.UNCOMMON, mage.cards.s.SwordsToPlowshares.class)); + cards.add(new SetCardInfo("Sylvan Caryatid", 50120, Rarity.RARE, mage.cards.s.SylvanCaryatid.class)); + cards.add(new SetCardInfo("Sylvan Library", 23948, Rarity.UNCOMMON, mage.cards.s.SylvanLibrary.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Sylvan Library", 43636, Rarity.RARE, mage.cards.s.SylvanLibrary.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Sylvan Ranger", 37592, Rarity.COMMON, mage.cards.s.SylvanRanger.class)); + cards.add(new SetCardInfo("Sylvan Scrying", 60476, Rarity.RARE, mage.cards.s.SylvanScrying.class)); + cards.add(new SetCardInfo("Taiga", 43618, Rarity.RARE, mage.cards.t.Taiga.class)); + cards.add(new SetCardInfo("Tawnos's Coffin", 23946, Rarity.RARE, mage.cards.t.TawnossCoffin.class)); + // Planechase Plane. Card not implemented. + // cards.add(new SetCardInfo("Tazeem", 44340, Rarity.RARE, mage.cards.t.Tazeem.class)); + cards.add(new SetCardInfo("Tectonic Edge", 43069, Rarity.UNCOMMON, mage.cards.t.TectonicEdge.class)); + cards.add(new SetCardInfo("Teetering Peaks", 41654, Rarity.COMMON, mage.cards.t.TeeteringPeaks.class)); + // Planechase Plane. Card not implemented. + // cards.add(new SetCardInfo("Tember City", 44342, Rarity.RARE, mage.cards.t.TemberCity.class)); + cards.add(new SetCardInfo("Tempered Steel", 37865, Rarity.RARE, mage.cards.t.TemperedSteel.class)); + cards.add(new SetCardInfo("Temple Garden", 72303, Rarity.RARE, mage.cards.t.TempleGarden.class)); + cards.add(new SetCardInfo("Temple of Mystery", 53846, Rarity.RARE, mage.cards.t.TempleOfMystery.class)); + cards.add(new SetCardInfo("Temple of the False God", 59653, Rarity.UNCOMMON, mage.cards.t.TempleOfTheFalseGod.class)); + cards.add(new SetCardInfo("Temporal Manipulation", 55725, Rarity.RARE, mage.cards.t.TemporalManipulation.class)); + cards.add(new SetCardInfo("Temur War Shaman", 55715, Rarity.RARE, mage.cards.t.TemurWarShaman.class)); + cards.add(new SetCardInfo("Tendrils of Agony", 31433, Rarity.UNCOMMON, mage.cards.t.TendrilsOfAgony.class)); + cards.add(new SetCardInfo("Terminate", 35136, Rarity.COMMON, mage.cards.t.Terminate.class, MPR_FULL_ART)); + cards.add(new SetCardInfo("Terminate", 36230, Rarity.COMMON, mage.cards.t.Terminate.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Terra Stomper", 36849, Rarity.RARE, mage.cards.t.TerraStomper.class)); + cards.add(new SetCardInfo("Terror", 31483, Rarity.COMMON, mage.cards.t.Terror.class, MPR_FULL_ART)); + cards.add(new SetCardInfo("Terror", 35948, Rarity.COMMON, mage.cards.t.Terror.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Thalia, Guardian of Thraben", 55699, Rarity.RARE, mage.cards.t.ThaliaGuardianOfThraben.class)); + cards.add(new SetCardInfo("Thalia, Heretic Cathar", 61545, Rarity.RARE, mage.cards.t.ThaliaHereticCathar.class)); + cards.add(new SetCardInfo("Thawing Glaciers", 43564, Rarity.RARE, mage.cards.t.ThawingGlaciers.class)); + cards.add(new SetCardInfo("The Abyss", 46938, Rarity.RARE, mage.cards.t.TheAbyss.class)); + cards.add(new SetCardInfo("The Rack", 62385, Rarity.UNCOMMON, mage.cards.t.TheRack.class)); + cards.add(new SetCardInfo("The Tabernacle at Pendrell Vale", 60450, Rarity.RARE, mage.cards.t.TheTabernacleAtPendrellVale.class)); + cards.add(new SetCardInfo("Thirst for Knowledge", 31445, Rarity.UNCOMMON, mage.cards.t.ThirstForKnowledge.class)); + cards.add(new SetCardInfo("Thopter Assembly", 39638, Rarity.RARE, mage.cards.t.ThopterAssembly.class)); + cards.add(new SetCardInfo("Thran Golem", 62433, Rarity.UNCOMMON, mage.cards.t.ThranGolem.class)); + cards.add(new SetCardInfo("Thran Quarry", 36128, Rarity.RARE, mage.cards.t.ThranQuarry.class)); + cards.add(new SetCardInfo("Threads of Disloyalty", 70928, Rarity.MYTHIC, mage.cards.t.ThreadsOfDisloyalty.class)); + cards.add(new SetCardInfo("Thunder Spirit", 229, Rarity.RARE, mage.cards.t.ThunderSpirit.class)); + cards.add(new SetCardInfo("Thunderbreak Regent", 55892, Rarity.RARE, mage.cards.t.ThunderbreakRegent.class)); + cards.add(new SetCardInfo("Tidehollow Sculler", 43560, Rarity.UNCOMMON, mage.cards.t.TidehollowSculler.class)); + cards.add(new SetCardInfo("Tidings", 35076, Rarity.UNCOMMON, mage.cards.t.Tidings.class, MPR_FULL_ART)); + cards.add(new SetCardInfo("Time Spiral", 62221, Rarity.RARE, mage.cards.t.TimeSpiral.class)); + cards.add(new SetCardInfo("Time Walk", 46912, Rarity.RARE, mage.cards.t.TimeWalk.class)); + cards.add(new SetCardInfo("Time Warp", 36044, Rarity.RARE, mage.cards.t.TimeWarp.class)); + cards.add(new SetCardInfo("Timetwister", 46918, Rarity.RARE, mage.cards.t.Timetwister.class)); + cards.add(new SetCardInfo("Tinder Wall", 62483, Rarity.COMMON, mage.cards.t.TinderWall.class)); + cards.add(new SetCardInfo("Tormented Hero", 51934, Rarity.UNCOMMON, mage.cards.t.TormentedHero.class)); + cards.add(new SetCardInfo("Tormented Soul", 41652, Rarity.COMMON, mage.cards.t.TormentedSoul.class)); + cards.add(new SetCardInfo("Tormod's Crypt", 31427, Rarity.UNCOMMON, mage.cards.t.TormodsCrypt.class)); + cards.add(new SetCardInfo("Tovolar's Magehunter", 43507, Rarity.RARE, mage.cards.t.TovolarsMagehunter.class)); + cards.add(new SetCardInfo("Tradewind Rider", 36048, Rarity.RARE, mage.cards.t.TradewindRider.class)); + cards.add(new SetCardInfo("Transmute Artifact", 65644, Rarity.RARE, mage.cards.t.TransmuteArtifact.class)); + cards.add(new SetCardInfo("Traxos, Scourge of Kroog", 69242, Rarity.RARE, mage.cards.t.TraxosScourgeOfKroog.class)); + cards.add(new SetCardInfo("Treasure Hunt", 39632, Rarity.COMMON, mage.cards.t.TreasureHunt.class, MPR_FULL_ART)); + cards.add(new SetCardInfo("Treasure Mage", 39642, Rarity.UNCOMMON, mage.cards.t.TreasureMage.class)); + cards.add(new SetCardInfo("Treasury Thrull", 47999, Rarity.RARE, mage.cards.t.TreasuryThrull.class)); + cards.add(new SetCardInfo("Treetop Village", 31403, Rarity.UNCOMMON, mage.cards.t.TreetopVillage.class)); + cards.add(new SetCardInfo("Treva, the Renewer", 36158, Rarity.RARE, mage.cards.t.TrevaTheRenewer.class)); + cards.add(new SetCardInfo("Triumph of Ferocity", 62475, Rarity.UNCOMMON, mage.cards.t.TriumphOfFerocity.class)); + cards.add(new SetCardInfo("Tromokratis", 51914, Rarity.RARE, mage.cards.t.Tromokratis.class)); + cards.add(new SetCardInfo("Trophy Mage", 63003, Rarity.UNCOMMON, mage.cards.t.TrophyMage.class)); + cards.add(new SetCardInfo("Tropical Island", 43620, Rarity.RARE, mage.cards.t.TropicalIsland.class)); + cards.add(new SetCardInfo("Trostani's Summoner", 48574, Rarity.UNCOMMON, mage.cards.t.TrostanisSummoner.class)); + cards.add(new SetCardInfo("True-Name Nemesis", 69268, Rarity.RARE, mage.cards.t.TrueNameNemesis.class)); + cards.add(new SetCardInfo("Trueheart Duelist", 64424, Rarity.UNCOMMON, mage.cards.t.TrueheartDuelist.class)); + cards.add(new SetCardInfo("Tundra", 43622, Rarity.RARE, mage.cards.t.Tundra.class)); + cards.add(new SetCardInfo("Twilight Mire", 62455, Rarity.RARE, mage.cards.t.TwilightMire.class)); + cards.add(new SetCardInfo("Two-Headed Dragon", 36156, Rarity.RARE, mage.cards.t.TwoHeadedDragon.class)); + cards.add(new SetCardInfo("Two-Headed Giant of Foriys", 211, Rarity.RARE, mage.cards.t.TwoHeadedGiantOfForiys.class)); + cards.add(new SetCardInfo("Tyrant of Valakut", 59657, Rarity.RARE, mage.cards.t.TyrantOfValakut.class)); + cards.add(new SetCardInfo("Ugin's Construct", 55761, Rarity.UNCOMMON, mage.cards.u.UginsConstruct.class)); + cards.add(new SetCardInfo("Ugin, the Spirit Dragon", 55763, Rarity.MYTHIC, mage.cards.u.UginTheSpiritDragon.class)); + cards.add(new SetCardInfo("Uktabi Orangutan", 36016, Rarity.UNCOMMON, mage.cards.u.UktabiOrangutan.class)); + cards.add(new SetCardInfo("Ultimate Price", 58269, Rarity.UNCOMMON, mage.cards.u.UltimatePrice.class)); + cards.add(new SetCardInfo("Ulvenwald Observer", 61553, Rarity.RARE, mage.cards.u.UlvenwaldObserver.class)); + cards.add(new SetCardInfo("Umezawa's Jitte", 36210, Rarity.RARE, mage.cards.u.UmezawasJitte.class)); + cards.add(new SetCardInfo("Underground Sea", 43624, Rarity.RARE, mage.cards.u.UndergroundSea.class)); + cards.add(new SetCardInfo("Underworld Dreams", 35970, Rarity.RARE, mage.cards.u.UnderworldDreams.class)); + cards.add(new SetCardInfo("Undiscovered Paradise", 61062, Rarity.RARE, mage.cards.u.UndiscoveredParadise.class)); + cards.add(new SetCardInfo("Unlicensed Disintegration", 64430, Rarity.UNCOMMON, mage.cards.u.UnlicensedDisintegration.class)); + cards.add(new SetCardInfo("Unmake", 32551, Rarity.COMMON, mage.cards.u.Unmake.class, MPR_FULL_ART)); + cards.add(new SetCardInfo("Unsubstantiate", 61557, Rarity.RARE, mage.cards.u.Unsubstantiate.class)); + cards.add(new SetCardInfo("Urza's Factory", 31493, Rarity.UNCOMMON, mage.cards.u.UrzasFactory.class)); + cards.add(new SetCardInfo("Urza's Mine", 69262, Rarity.COMMON, mage.cards.u.UrzasMine.class)); + cards.add(new SetCardInfo("Urza's Power Plant", 69264, Rarity.COMMON, mage.cards.u.UrzasPowerPlant.class)); + cards.add(new SetCardInfo("Urza's Tower", 69266, Rarity.COMMON, mage.cards.u.UrzasTower.class)); + cards.add(new SetCardInfo("Utter End", 54563, Rarity.RARE, mage.cards.u.UtterEnd.class)); + cards.add(new SetCardInfo("Valakut, the Molten Pinnacle", 35142, Rarity.RARE, mage.cards.v.ValakutTheMoltenPinnacle.class)); + cards.add(new SetCardInfo("Valorous Stance", 57582, Rarity.UNCOMMON, mage.cards.v.ValorousStance.class)); + cards.add(new SetCardInfo("Vampire Nighthawk", 36214, Rarity.UNCOMMON, mage.cards.v.VampireNighthawk.class)); + cards.add(new SetCardInfo("Vampire Nocturnus", 33105, Rarity.MYTHIC, mage.cards.v.VampireNocturnus.class)); + cards.add(new SetCardInfo("Vampiric Tutor", 36018, Rarity.RARE, mage.cards.v.VampiricTutor.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Vampiric Tutor", 68053, Rarity.RARE, mage.cards.v.VampiricTutor.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Vault Skirge", 40076, Rarity.COMMON, mage.cards.v.VaultSkirge.class)); + cards.add(new SetCardInfo("Vendilion Clique", 39628, Rarity.RARE, mage.cards.v.VendilionClique.class)); + cards.add(new SetCardInfo("Vengevine", 49844, Rarity.MYTHIC, mage.cards.v.Vengevine.class)); + cards.add(new SetCardInfo("Vexing Shusher", 32533, Rarity.RARE, mage.cards.v.VexingShusher.class)); + cards.add(new SetCardInfo("Vindicate", 31391, Rarity.RARE, mage.cards.v.Vindicate.class)); + cards.add(new SetCardInfo("Voidmage Prodigy", 43646, Rarity.RARE, mage.cards.v.VoidmageProdigy.class)); + cards.add(new SetCardInfo("Voidslime", 36310, Rarity.RARE, mage.cards.v.Voidslime.class)); + cards.add(new SetCardInfo("Volcanic Fallout", 43570, Rarity.UNCOMMON, mage.cards.v.VolcanicFallout.class, MPR_FULL_ART)); + cards.add(new SetCardInfo("Volcanic Geyser", 36004, Rarity.UNCOMMON, mage.cards.v.VolcanicGeyser.class)); + cards.add(new SetCardInfo("Volcanic Hammer", 36102, Rarity.COMMON, mage.cards.v.VolcanicHammer.class)); + cards.add(new SetCardInfo("Volcanic Island", 43626, Rarity.RARE, mage.cards.v.VolcanicIsland.class)); + cards.add(new SetCardInfo("Walk the Plank", 65666, Rarity.UNCOMMON, mage.cards.w.WalkThePlank.class)); + cards.add(new SetCardInfo("Walking Ballista", 69991, Rarity.RARE, mage.cards.w.WalkingBallista.class)); + cards.add(new SetCardInfo("Wall of Blossoms", 36084, Rarity.UNCOMMON, mage.cards.w.WallOfBlossoms.class)); + cards.add(new SetCardInfo("Wall of Omens", 39624, Rarity.UNCOMMON, mage.cards.w.WallOfOmens.class)); + cards.add(new SetCardInfo("Wall of Roots", 35114, Rarity.COMMON, mage.cards.w.WallOfRoots.class)); + cards.add(new SetCardInfo("Warleader's Helix", 51540, Rarity.UNCOMMON, mage.cards.w.WarleadersHelix.class)); + cards.add(new SetCardInfo("Warmonger", 36152, Rarity.UNCOMMON, mage.cards.w.Warmonger.class)); + cards.add(new SetCardInfo("Wasteland", 36877, Rarity.UNCOMMON, mage.cards.w.Wasteland.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Wasteland", 55874, Rarity.UNCOMMON, mage.cards.w.Wasteland.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Watcher of the Roost", 55773, Rarity.UNCOMMON, mage.cards.w.WatcherOfTheRoost.class)); + cards.add(new SetCardInfo("Watchwolf", 36196, Rarity.UNCOMMON, mage.cards.w.Watchwolf.class)); + cards.add(new SetCardInfo("Watery Grave", 72299, Rarity.RARE, mage.cards.w.WateryGrave.class)); + cards.add(new SetCardInfo("Wave of Reckoning", 62515, Rarity.RARE, mage.cards.w.WaveOfReckoning.class)); + cards.add(new SetCardInfo("Wee Dragonauts", 35174, Rarity.COMMON, mage.cards.w.WeeDragonauts.class)); + cards.add(new SetCardInfo("Wheel and Deal", 62411, Rarity.RARE, mage.cards.w.WheelAndDeal.class)); + cards.add(new SetCardInfo("Wheel of Fortune", 36879, Rarity.RARE, mage.cards.w.WheelOfFortune.class)); + cards.add(new SetCardInfo("Whip of Erebos", 55733, Rarity.RARE, mage.cards.w.WhipOfErebos.class)); + cards.add(new SetCardInfo("Whipcorder", 36250, Rarity.UNCOMMON, mage.cards.w.Whipcorder.class)); + cards.add(new SetCardInfo("Whirling Dervish", 35056, Rarity.UNCOMMON, mage.cards.w.WhirlingDervish.class)); + cards.add(new SetCardInfo("White Knight", 35950, Rarity.UNCOMMON, mage.cards.w.WhiteKnight.class)); + cards.add(new SetCardInfo("Wild Mongrel", 36240, Rarity.COMMON, mage.cards.w.WildMongrel.class)); + cards.add(new SetCardInfo("Wild Nacatl", 37851, Rarity.COMMON, mage.cards.w.WildNacatl.class)); + cards.add(new SetCardInfo("Wild Pair", 62419, Rarity.RARE, mage.cards.w.WildPair.class)); + cards.add(new SetCardInfo("Wildcall", 55749, Rarity.RARE, mage.cards.w.Wildcall.class)); + cards.add(new SetCardInfo("Wildfire Eternal", 64989, Rarity.RARE, mage.cards.w.WildfireEternal.class)); + cards.add(new SetCardInfo("Willbender", 36258, Rarity.UNCOMMON, mage.cards.w.Willbender.class)); + cards.add(new SetCardInfo("Wilt-Leaf Cavaliers", 31441, Rarity.UNCOMMON, mage.cards.w.WiltLeafCavaliers.class)); + cards.add(new SetCardInfo("Windfall", 62529, Rarity.UNCOMMON, mage.cards.w.Windfall.class)); + cards.add(new SetCardInfo("Windseeker Centaur", 35966, Rarity.RARE, mage.cards.w.WindseekerCentaur.class)); + cards.add(new SetCardInfo("Windswept Heath", 43586, Rarity.RARE, mage.cards.w.WindsweptHeath.class)); + cards.add(new SetCardInfo("Wing Shards", 35156, Rarity.UNCOMMON, mage.cards.w.WingShards.class)); + cards.add(new SetCardInfo("Winter Orb", 46922, Rarity.RARE, mage.cards.w.WinterOrb.class)); + cards.add(new SetCardInfo("Withered Wretch", 36262, Rarity.UNCOMMON, mage.cards.w.WitheredWretch.class)); + cards.add(new SetCardInfo("Wonder", 35154, Rarity.UNCOMMON, mage.cards.w.Wonder.class)); + cards.add(new SetCardInfo("Wood Elves", 36094, Rarity.COMMON, mage.cards.w.WoodElves.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Wood Elves", 62527, Rarity.COMMON, mage.cards.w.WoodElves.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Wooded Foothills", 43584, Rarity.RARE, mage.cards.w.WoodedFoothills.class)); + cards.add(new SetCardInfo("Woolly Thoctar", 31449, Rarity.UNCOMMON, mage.cards.w.WoollyThoctar.class)); + cards.add(new SetCardInfo("Wrath of God", 35048, Rarity.RARE, mage.cards.w.WrathOfGod.class, MPR_FULL_ART)); + cards.add(new SetCardInfo("Wren's Run Packmaster", 31965, Rarity.RARE, mage.cards.w.WrensRunPackmaster.class)); + cards.add(new SetCardInfo("Wren's Run Vanquisher", 36138, Rarity.UNCOMMON, mage.cards.w.WrensRunVanquisher.class)); + cards.add(new SetCardInfo("Write into Being", 55755, Rarity.COMMON, mage.cards.w.WriteIntoBeing.class)); + cards.add(new SetCardInfo("Wurmcoil Engine", 37861, Rarity.MYTHIC, mage.cards.w.WurmcoilEngine.class)); + cards.add(new SetCardInfo("Xathrid Gorgon", 45205, Rarity.RARE, mage.cards.x.XathridGorgon.class)); + cards.add(new SetCardInfo("Xathrid Necromancer", 52312, Rarity.RARE, mage.cards.x.XathridNecromancer.class)); + cards.add(new SetCardInfo("Yahenni's Expertise", 62989, Rarity.RARE, mage.cards.y.YahennisExpertise.class)); + cards.add(new SetCardInfo("Yawgmoth's Will", 35080, Rarity.RARE, mage.cards.y.YawgmothsWill.class)); + cards.add(new SetCardInfo("Yixlid Jailer", 36068, Rarity.UNCOMMON, mage.cards.y.YixlidJailer.class)); + cards.add(new SetCardInfo("Zahid, Djinn of the Lamp", 68041, Rarity.RARE, mage.cards.z.ZahidDjinnOfTheLamp.class)); + cards.add(new SetCardInfo("Zameck Guildmage", 47987, Rarity.UNCOMMON, mage.cards.z.ZameckGuildmage.class)); + cards.add(new SetCardInfo("Zhalfirin Void", 68043, Rarity.UNCOMMON, mage.cards.z.ZhalfirinVoid.class)); + cards.add(new SetCardInfo("Zodiac Dog", 35102, Rarity.COMMON, mage.cards.z.ZodiacDog.class)); + cards.add(new SetCardInfo("Zodiac Goat", 35098, Rarity.COMMON, mage.cards.z.ZodiacGoat.class)); + cards.add(new SetCardInfo("Zodiac Horse", 35090, Rarity.UNCOMMON, mage.cards.z.ZodiacHorse.class)); + cards.add(new SetCardInfo("Zodiac Monkey", 35084, Rarity.COMMON, mage.cards.z.ZodiacMonkey.class)); + cards.add(new SetCardInfo("Zodiac Ox", 35092, Rarity.UNCOMMON, mage.cards.z.ZodiacOx.class)); + cards.add(new SetCardInfo("Zodiac Pig", 35100, Rarity.UNCOMMON, mage.cards.z.ZodiacPig.class)); + cards.add(new SetCardInfo("Zodiac Rabbit", 35086, Rarity.COMMON, mage.cards.z.ZodiacRabbit.class)); + cards.add(new SetCardInfo("Zodiac Rat", 35094, Rarity.COMMON, mage.cards.z.ZodiacRat.class)); + cards.add(new SetCardInfo("Zodiac Rooster", 35082, Rarity.COMMON, mage.cards.z.ZodiacRooster.class)); + cards.add(new SetCardInfo("Zodiac Snake", 35096, Rarity.COMMON, mage.cards.z.ZodiacSnake.class)); + cards.add(new SetCardInfo("Zodiac Tiger", 35088, Rarity.UNCOMMON, mage.cards.z.ZodiacTiger.class)); + cards.add(new SetCardInfo("Zoetic Cavern", 36066, Rarity.UNCOMMON, mage.cards.z.ZoeticCavern.class)); + cards.add(new SetCardInfo("Zombie Apocalypse", 43515, Rarity.RARE, mage.cards.z.ZombieApocalypse.class)); + cards.add(new SetCardInfo("Zombify", 35170, Rarity.UNCOMMON, mage.cards.z.Zombify.class, MPR_FULL_ART)); + cards.add(new SetCardInfo("Zuran Orb", 225, Rarity.UNCOMMON, mage.cards.z.ZuranOrb.class)); + cards.add(new SetCardInfo("Zurgo Helmsmasher", 54549, Rarity.MYTHIC, mage.cards.z.ZurgoHelmsmasher.class)); + } +} From 443bc95a63821b2c5373885c3b2bd3558f2bd105 Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Tue, 4 Feb 2020 13:02:13 +0100 Subject: [PATCH 034/182] Split the Magic Player Rewards (MPRP) promotional set into the individual sets. - Removed Magic Player Rewards (MPRP) - Added MPR sets 2001 (MPR), 2003-2011 (P03 - P11) --- ...lins Deck Wins TDtB ST Apr 2011.mwDeck.dck | 2 +- ...ionship 2004 (San Francisco) ST 9-5-04.dck | 2 +- ...ionship 2004 (San Francisco) ST 9-5-04.dck | 2 +- .../java/mage/client/cards/DragCardGrid.java | 15 +++- .../org/mage/card/arcane/ManaSymbols.java | 13 +++- .../plugins/card/dl/sources/GathererSets.java | 2 +- .../dl/sources/WizardCardsImageSource.java | 2 +- .../src/mage/sets/MagicPlayerRewards.java | 77 ------------------- .../src/mage/sets/MagicPlayerRewards2001.java | 25 ++++++ .../src/mage/sets/MagicPlayerRewards2003.java | 25 ++++++ .../src/mage/sets/MagicPlayerRewards2004.java | 25 ++++++ .../src/mage/sets/MagicPlayerRewards2005.java | 34 ++++++++ .../src/mage/sets/MagicPlayerRewards2006.java | 35 +++++++++ .../src/mage/sets/MagicPlayerRewards2007.java | 35 +++++++++ .../src/mage/sets/MagicPlayerRewards2008.java | 35 +++++++++ .../src/mage/sets/MagicPlayerRewards2009.java | 37 +++++++++ .../src/mage/sets/MagicPlayerRewards2010.java | 37 +++++++++ .../src/mage/sets/MagicPlayerRewards2011.java | 33 ++++++++ .../src/main/java/mage/verify/MtgJson.java | 2 +- 19 files changed, 352 insertions(+), 86 deletions(-) delete mode 100644 Mage.Sets/src/mage/sets/MagicPlayerRewards.java create mode 100644 Mage.Sets/src/mage/sets/MagicPlayerRewards2001.java create mode 100644 Mage.Sets/src/mage/sets/MagicPlayerRewards2003.java create mode 100644 Mage.Sets/src/mage/sets/MagicPlayerRewards2004.java create mode 100644 Mage.Sets/src/mage/sets/MagicPlayerRewards2005.java create mode 100644 Mage.Sets/src/mage/sets/MagicPlayerRewards2006.java create mode 100644 Mage.Sets/src/mage/sets/MagicPlayerRewards2007.java create mode 100644 Mage.Sets/src/mage/sets/MagicPlayerRewards2008.java create mode 100644 Mage.Sets/src/mage/sets/MagicPlayerRewards2009.java create mode 100644 Mage.Sets/src/mage/sets/MagicPlayerRewards2010.java create mode 100644 Mage.Sets/src/mage/sets/MagicPlayerRewards2011.java diff --git a/Mage.Client/release/sample-decks/Decks to Beat/Goblins Deck Wins TDtB ST Apr 2011.mwDeck.dck b/Mage.Client/release/sample-decks/Decks to Beat/Goblins Deck Wins TDtB ST Apr 2011.mwDeck.dck index 42f03567142..a3db2606fde 100644 --- a/Mage.Client/release/sample-decks/Decks to Beat/Goblins Deck Wins TDtB ST Apr 2011.mwDeck.dck +++ b/Mage.Client/release/sample-decks/Decks to Beat/Goblins Deck Wins TDtB ST Apr 2011.mwDeck.dck @@ -10,7 +10,7 @@ 4 [ZEN:125] Goblin Bushwhacker 1 [DDE:69] Mountain 2 [ZEN:126] Goblin Guide -3 [MPRP:47] Burst Lightning +3 [P10:8] Burst Lightning 1 [ZEN:226] Teetering Peaks 1 [SOM:81] Arc Trail 1 [S00:102] Mountain diff --git a/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Astral Slide 1 World Championship 2004 (San Francisco) ST 9-5-04.dck b/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Astral Slide 1 World Championship 2004 (San Francisco) ST 9-5-04.dck index 8be991166b4..93ed4bf38c7 100644 --- a/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Astral Slide 1 World Championship 2004 (San Francisco) ST 9-5-04.dck +++ b/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Astral Slide 1 World Championship 2004 (San Francisco) ST 9-5-04.dck @@ -19,7 +19,7 @@ SB: 2 [DST:79] Oxidize SB: 1 [5DN:92] Rude Awakening SB: 2 [UDS:117] Plow Under -SB: 2 [MPRP:7] Oxidize +SB: 2 [P05:4] Oxidize SB: 2 [5ED:296] Circle of Protection: Red SB: 1 [MMA:160] Rude Awakening SB: 1 [9ED:11] Circle of Protection: Red diff --git a/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Astral Slide 58 World Championship 2004 (San Francisco) ST 9-5-04.dck b/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Astral Slide 58 World Championship 2004 (San Francisco) ST 9-5-04.dck index 37f1b0ec52e..365480e9428 100644 --- a/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Astral Slide 58 World Championship 2004 (San Francisco) ST 9-5-04.dck +++ b/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Astral Slide 58 World Championship 2004 (San Francisco) ST 9-5-04.dck @@ -22,7 +22,7 @@ 8 [UNH:136] Plains SB: 1 [DST:79] Oxidize SB: 2 [UDS:117] Plow Under -SB: 2 [MPRP:7] Oxidize +SB: 2 [P05:4] Oxidize SB: 1 [LEG:237] Relic Barrier SB: 2 [5DN:147] Relic Barrier SB: 2 [SCG:23] Silver Knight diff --git a/Mage.Client/src/main/java/mage/client/cards/DragCardGrid.java b/Mage.Client/src/main/java/mage/client/cards/DragCardGrid.java index def5233a4f4..f40709917c9 100644 --- a/Mage.Client/src/main/java/mage/client/cards/DragCardGrid.java +++ b/Mage.Client/src/main/java/mage/client/cards/DragCardGrid.java @@ -1498,7 +1498,7 @@ public class DragCardGrid extends JPanel implements DragCardSource, DragCardTarg JOptionPane.YES_NO_OPTION) == JOptionPane.NO_OPTION) { return; } - + // TODO: Why are these a HashMap? It can be a HashSet instead, as the value is never used in the code. Map pimpedSets = new HashMap<>(); Map pimpedCards = new HashMap<>(); pimpedSets.put("CP", 1); @@ -1567,8 +1567,19 @@ public class DragCardGrid extends JPanel implements DragCardSource, DragCardTarg pimpedSets.put("F17", 1); pimpedSets.put("F18", 1); + // Magic Player Rewards 2001-2011, except for 2002 (P02), which only contains tokens + pimpedSets.put("MPR", 1); + pimpedSets.put("P03", 1); + pimpedSets.put("P04", 1); + pimpedSets.put("P05", 1); + pimpedSets.put("P06", 1); + pimpedSets.put("P07", 1); + pimpedSets.put("P08", 1); + pimpedSets.put("P09", 1); + pimpedSets.put("P10", 1); + pimpedSets.put("P11", 1); + pimpedSets.put("MGDC", 1); - pimpedSets.put("MPRP", 1); pimpedSets.put("EXP", 1); pimpedSets.put("GPX", 1); pimpedSets.put("GRC", 1); diff --git a/Mage.Client/src/main/java/org/mage/card/arcane/ManaSymbols.java b/Mage.Client/src/main/java/org/mage/card/arcane/ManaSymbols.java index 1c60131a569..09abb216b54 100644 --- a/Mage.Client/src/main/java/org/mage/card/arcane/ManaSymbols.java +++ b/Mage.Client/src/main/java/org/mage/card/arcane/ManaSymbols.java @@ -66,7 +66,18 @@ public final class ManaSymbols { onlyMythics.add("EXP"); onlyMythics.add("MPS"); - withoutSymbols.add("MPRP"); + // Magic Player Reward sets + withoutSymbols.add("MPR"); + withoutSymbols.add("P03"); + withoutSymbols.add("P04"); + withoutSymbols.add("P05"); + withoutSymbols.add("P06"); + withoutSymbols.add("P07"); + withoutSymbols.add("P08"); + withoutSymbols.add("P09"); + withoutSymbols.add("P10"); + withoutSymbols.add("P11"); + } private static final Map setImagesExist = new HashMap<>(); diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/GathererSets.java b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/GathererSets.java index f8d71bf6156..93686c142e1 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/GathererSets.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/GathererSets.java @@ -63,7 +63,7 @@ public class GathererSets implements Iterable { "W16", "W17", // "PALP" -- Gatherer does not have the set Asia Pacific Land Program // "ATH" -- has cards from many sets, symbol does not exist on gatherer - // "CLASH", "CP", "DPA", "PELP", "GPX", "GRC", "GUR", "H17", "JR", "MBP", "MGDC", "MLP", "MPRP", "PPRE", "SUS", "SWS", "WMCQ", // need to fix + // "CLASH", "CP", "DPA", "PELP", "GPX", "GRC", "GUR", "H17", "JR", "MBP", "MGDC", "MLP", "PPRE", "SUS", "SWS", "WMCQ", // need to fix "H09", "PD2", "PD3", "UNH", "CM1", "V11", "A25", "UST", "IMA", "DD2", "EVG", "DDC", "DDE", "DDD", "8EB", "9EB", "CHR", "G18", "DD3GVL", "S00", "S99", "UGL" // ok // current testing }; diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/WizardCardsImageSource.java b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/WizardCardsImageSource.java index 51586e8ca8b..b34fc273308 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/WizardCardsImageSource.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/WizardCardsImageSource.java @@ -379,7 +379,7 @@ public enum WizardCardsImageSource implements CardImageSource { setsAliases.put("MM3", "Modern Masters 2017"); setsAliases.put("MMQ", "Mercadian Masques"); setsAliases.put("MOR", "Morningtide"); - setsAliases.put("MPRP", "Magic Player Rewards"); + // setsAliases.put("MPRP", "Magic Player Rewards"); setsAliases.put("MPS", "Masterpiece Series"); setsAliases.put("MRD", "Mirrodin"); setsAliases.put("NEM", "Nemesis"); diff --git a/Mage.Sets/src/mage/sets/MagicPlayerRewards.java b/Mage.Sets/src/mage/sets/MagicPlayerRewards.java deleted file mode 100644 index 09f320471f2..00000000000 --- a/Mage.Sets/src/mage/sets/MagicPlayerRewards.java +++ /dev/null @@ -1,77 +0,0 @@ - -package mage.sets; - -import mage.cards.CardGraphicInfo; -import mage.cards.ExpansionSet; -import mage.cards.FrameStyle; -import mage.constants.Rarity; -import mage.constants.SetType; - -public final class MagicPlayerRewards extends ExpansionSet { - - private static final MagicPlayerRewards instance = new MagicPlayerRewards(); - - public static MagicPlayerRewards getInstance() { - return instance; - } - - private MagicPlayerRewards() { - super("Magic Player Rewards", "MPRP", ExpansionSet.buildDate(1990, 1, 1), SetType.PROMOTIONAL); - this.hasBoosters = false; - this.hasBasicLands = false; - CardGraphicInfo graphicInfo = new CardGraphicInfo(FrameStyle.MPRP_FULL_ART_BASIC, false); - cards.add(new SetCardInfo("Bituminous Blast", 46, Rarity.SPECIAL, mage.cards.b.BituminousBlast.class, graphicInfo)); - cards.add(new SetCardInfo("Blightning", 36, Rarity.SPECIAL, mage.cards.b.Blightning.class, graphicInfo)); - cards.add(new SetCardInfo("Brave the Elements", 50, Rarity.SPECIAL, mage.cards.b.BraveTheElements.class, graphicInfo)); - cards.add(new SetCardInfo("Burst Lightning", 47, Rarity.SPECIAL, mage.cards.b.BurstLightning.class, graphicInfo)); - cards.add(new SetCardInfo("Cancel", 41, Rarity.SPECIAL, mage.cards.c.Cancel.class, graphicInfo)); - cards.add(new SetCardInfo("Celestial Purge", 45, Rarity.SPECIAL, mage.cards.c.CelestialPurge.class, graphicInfo)); - cards.add(new SetCardInfo("Condemn", 18, Rarity.SPECIAL, mage.cards.c.Condemn.class, graphicInfo)); - cards.add(new SetCardInfo("Corrupt", 30, Rarity.SPECIAL, mage.cards.c.Corrupt.class, graphicInfo)); - cards.add(new SetCardInfo("Cruel Edict", 21, Rarity.SPECIAL, mage.cards.c.CruelEdict.class, graphicInfo)); - cards.add(new SetCardInfo("Cryptic Command", 31, Rarity.SPECIAL, mage.cards.c.CrypticCommand.class, graphicInfo)); - cards.add(new SetCardInfo("Damnation", 24, Rarity.SPECIAL, mage.cards.d.Damnation.class, graphicInfo)); - cards.add(new SetCardInfo("Day of Judgment", 49, Rarity.SPECIAL, mage.cards.d.DayOfJudgment.class, graphicInfo)); - cards.add(new SetCardInfo("Disenchant", 22, Rarity.SPECIAL, mage.cards.d.Disenchant.class, graphicInfo)); - cards.add(new SetCardInfo("Doom Blade", 51, Rarity.SPECIAL, mage.cards.d.DoomBlade.class, graphicInfo)); - cards.add(new SetCardInfo("Fireball", 6, Rarity.SPECIAL, mage.cards.f.Fireball.class, graphicInfo)); - cards.add(new SetCardInfo("Flame Javelin", 32, Rarity.SPECIAL, mage.cards.f.FlameJavelin.class, graphicInfo)); - cards.add(new SetCardInfo("Giant Growth", 13, Rarity.SPECIAL, mage.cards.g.GiantGrowth.class, graphicInfo)); - cards.add(new SetCardInfo("Harmonize", 28, Rarity.SPECIAL, mage.cards.h.Harmonize.class, graphicInfo)); - cards.add(new SetCardInfo("Harrow", 48, Rarity.SPECIAL, mage.cards.h.Harrow.class, graphicInfo)); - cards.add(new SetCardInfo("Hinder", 11, Rarity.SPECIAL, mage.cards.h.Hinder.class, graphicInfo)); - cards.add(new SetCardInfo("Hypnotic Specter", 10, Rarity.SPECIAL, mage.cards.h.HypnoticSpecter.class)); - cards.add(new SetCardInfo("Incinerate", 26, Rarity.SPECIAL, mage.cards.i.Incinerate.class, graphicInfo)); - cards.add(new SetCardInfo("Infest", 43, Rarity.SPECIAL, mage.cards.i.Infest.class, graphicInfo)); - cards.add(new SetCardInfo("Lightning Bolt", 40, Rarity.SPECIAL, mage.cards.l.LightningBolt.class, graphicInfo)); - cards.add(new SetCardInfo("Lightning Helix", 16, Rarity.SPECIAL, mage.cards.l.LightningHelix.class, graphicInfo)); - cards.add(new SetCardInfo("Mana Leak", 8, Rarity.SPECIAL, mage.cards.m.ManaLeak.class, graphicInfo)); - cards.add(new SetCardInfo("Mana Tithe", 27, Rarity.SPECIAL, mage.cards.m.ManaTithe.class, graphicInfo)); - cards.add(new SetCardInfo("Mortify", 19, Rarity.SPECIAL, mage.cards.m.Mortify.class, graphicInfo)); - cards.add(new SetCardInfo("Nameless Inversion", 34, Rarity.SPECIAL, mage.cards.n.NamelessInversion.class, graphicInfo)); - cards.add(new SetCardInfo("Negate", 38, Rarity.SPECIAL, mage.cards.n.Negate.class, graphicInfo)); - cards.add(new SetCardInfo("Oxidize", 7, Rarity.SPECIAL, mage.cards.o.Oxidize.class, graphicInfo)); - cards.add(new SetCardInfo("Ponder", 29, Rarity.SPECIAL, mage.cards.p.Ponder.class, graphicInfo)); - cards.add(new SetCardInfo("Powder Keg", 3, Rarity.SPECIAL, mage.cards.p.PowderKeg.class)); - cards.add(new SetCardInfo("Psionic Blast", 20, Rarity.SPECIAL, mage.cards.p.PsionicBlast.class, graphicInfo)); - cards.add(new SetCardInfo("Psychatog", 4, Rarity.SPECIAL, mage.cards.p.Psychatog.class)); - cards.add(new SetCardInfo("Putrefy", 14, Rarity.SPECIAL, mage.cards.p.Putrefy.class, graphicInfo)); - cards.add(new SetCardInfo("Pyroclasm", 12, Rarity.SPECIAL, mage.cards.p.Pyroclasm.class, graphicInfo)); - cards.add(new SetCardInfo("Rampant Growth", 37, Rarity.SPECIAL, mage.cards.r.RampantGrowth.class, graphicInfo)); - cards.add(new SetCardInfo("Reciprocate", 9, Rarity.SPECIAL, mage.cards.r.Reciprocate.class, graphicInfo)); - cards.add(new SetCardInfo("Recollect", 23, Rarity.SPECIAL, mage.cards.r.Recollect.class, graphicInfo)); - cards.add(new SetCardInfo("Remove Soul", 35, Rarity.SPECIAL, mage.cards.r.RemoveSoul.class, graphicInfo)); - cards.add(new SetCardInfo("Searing Blaze", 53, Rarity.SPECIAL, mage.cards.s.SearingBlaze.class, graphicInfo)); - cards.add(new SetCardInfo("Sign in Blood", 42, Rarity.SPECIAL, mage.cards.s.SignInBlood.class, graphicInfo)); - cards.add(new SetCardInfo("Terminate", 39, Rarity.SPECIAL, mage.cards.t.Terminate.class, graphicInfo)); - cards.add(new SetCardInfo("Terror", 5, Rarity.SPECIAL, mage.cards.t.Terror.class, graphicInfo)); - cards.add(new SetCardInfo("Tidings", 25, Rarity.SPECIAL, mage.cards.t.Tidings.class, graphicInfo)); - cards.add(new SetCardInfo("Treasure Hunt", 52, Rarity.SPECIAL, mage.cards.t.TreasureHunt.class, graphicInfo)); - cards.add(new SetCardInfo("Unmake", 33, Rarity.SPECIAL, mage.cards.u.Unmake.class, graphicInfo)); - cards.add(new SetCardInfo("Voidmage Prodigy", 2, Rarity.SPECIAL, mage.cards.v.VoidmageProdigy.class)); - cards.add(new SetCardInfo("Volcanic Fallout", 44, Rarity.SPECIAL, mage.cards.v.VolcanicFallout.class, graphicInfo)); - cards.add(new SetCardInfo("Wasteland", 1, Rarity.SPECIAL, mage.cards.w.Wasteland.class, graphicInfo)); - cards.add(new SetCardInfo("Wrath of God", 17, Rarity.SPECIAL, mage.cards.w.WrathOfGod.class, graphicInfo)); - cards.add(new SetCardInfo("Zombify", 15, Rarity.SPECIAL, mage.cards.z.Zombify.class, graphicInfo)); - } -} diff --git a/Mage.Sets/src/mage/sets/MagicPlayerRewards2001.java b/Mage.Sets/src/mage/sets/MagicPlayerRewards2001.java new file mode 100644 index 00000000000..07cdc3bc229 --- /dev/null +++ b/Mage.Sets/src/mage/sets/MagicPlayerRewards2001.java @@ -0,0 +1,25 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/mpr + */ +public class MagicPlayerRewards2001 extends ExpansionSet { + + private static final MagicPlayerRewards2001 instance = new MagicPlayerRewards2001(); + + public static MagicPlayerRewards2001 getInstance() { + return instance; + } + + private MagicPlayerRewards2001() { + super("Magic Player Rewards 2001", "MPR", ExpansionSet.buildDate(2001, 1, 1), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Wasteland", 1, Rarity.RARE, mage.cards.w.Wasteland.class)); + } +} diff --git a/Mage.Sets/src/mage/sets/MagicPlayerRewards2003.java b/Mage.Sets/src/mage/sets/MagicPlayerRewards2003.java new file mode 100644 index 00000000000..7afe968ef65 --- /dev/null +++ b/Mage.Sets/src/mage/sets/MagicPlayerRewards2003.java @@ -0,0 +1,25 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/p03 + */ +public class MagicPlayerRewards2003 extends ExpansionSet { + + private static final MagicPlayerRewards2003 instance = new MagicPlayerRewards2003(); + + public static MagicPlayerRewards2003 getInstance() { + return instance; + } + + private MagicPlayerRewards2003() { + super("Magic Player Rewards 2003", "P03", ExpansionSet.buildDate(2003, 1, 1), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Voidmage Prodigy", 1, Rarity.RARE, mage.cards.v.VoidmageProdigy.class)); + } +} diff --git a/Mage.Sets/src/mage/sets/MagicPlayerRewards2004.java b/Mage.Sets/src/mage/sets/MagicPlayerRewards2004.java new file mode 100644 index 00000000000..d2ba1d0381a --- /dev/null +++ b/Mage.Sets/src/mage/sets/MagicPlayerRewards2004.java @@ -0,0 +1,25 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/p04 + */ +public class MagicPlayerRewards2004 extends ExpansionSet { + + private static final MagicPlayerRewards2004 instance = new MagicPlayerRewards2004(); + + public static MagicPlayerRewards2004 getInstance() { + return instance; + } + + private MagicPlayerRewards2004() { + super("Magic Player Rewards 2004", "P04", ExpansionSet.buildDate(2004, 1, 1), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Powder Keg", 1, Rarity.RARE, mage.cards.p.PowderKeg.class)); + } +} diff --git a/Mage.Sets/src/mage/sets/MagicPlayerRewards2005.java b/Mage.Sets/src/mage/sets/MagicPlayerRewards2005.java new file mode 100644 index 00000000000..688cac308d1 --- /dev/null +++ b/Mage.Sets/src/mage/sets/MagicPlayerRewards2005.java @@ -0,0 +1,34 @@ +package mage.sets; + +import mage.cards.CardGraphicInfo; +import mage.cards.ExpansionSet; +import mage.cards.FrameStyle; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/p05 + */ +public class MagicPlayerRewards2005 extends ExpansionSet { + + private static final MagicPlayerRewards2005 instance = new MagicPlayerRewards2005(); + + public static MagicPlayerRewards2005 getInstance() { + return instance; + } + + private MagicPlayerRewards2005() { + super("Magic Player Rewards 2005", "P05", ExpansionSet.buildDate(2005, 1, 1), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + final CardGraphicInfo MPR_FULL_ART = new CardGraphicInfo(FrameStyle.MPRP_FULL_ART_BASIC, false); + + cards.add(new SetCardInfo("Fireball", 3, Rarity.RARE, mage.cards.f.Fireball.class, MPR_FULL_ART)); + cards.add(new SetCardInfo("Mana Leak", 5, Rarity.RARE, mage.cards.m.ManaLeak.class, MPR_FULL_ART)); + cards.add(new SetCardInfo("Oxidize", 4, Rarity.RARE, mage.cards.o.Oxidize.class, MPR_FULL_ART)); + cards.add(new SetCardInfo("Psychatog", 1, Rarity.RARE, mage.cards.p.Psychatog.class)); + cards.add(new SetCardInfo("Reciprocate", 6, Rarity.RARE, mage.cards.r.Reciprocate.class, MPR_FULL_ART)); + cards.add(new SetCardInfo("Terror", 2, Rarity.RARE, mage.cards.t.Terror.class, MPR_FULL_ART)); + } +} diff --git a/Mage.Sets/src/mage/sets/MagicPlayerRewards2006.java b/Mage.Sets/src/mage/sets/MagicPlayerRewards2006.java new file mode 100644 index 00000000000..cca81f3824c --- /dev/null +++ b/Mage.Sets/src/mage/sets/MagicPlayerRewards2006.java @@ -0,0 +1,35 @@ +package mage.sets; + +import mage.cards.CardGraphicInfo; +import mage.cards.ExpansionSet; +import mage.cards.FrameStyle; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/p06 + */ +public class MagicPlayerRewards2006 extends ExpansionSet { + + private static final MagicPlayerRewards2006 instance = new MagicPlayerRewards2006(); + + public static MagicPlayerRewards2006 getInstance() { + return instance; + } + + private MagicPlayerRewards2006() { + super("Magic Player Rewards 2006", "P06", ExpansionSet.buildDate(2006, 1, 1), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + final CardGraphicInfo MPR_FULL_ART = new CardGraphicInfo(FrameStyle.MPRP_FULL_ART_BASIC, false); + + cards.add(new SetCardInfo("Giant Growth", 4, Rarity.RARE, mage.cards.g.GiantGrowth.class, MPR_FULL_ART)); + cards.add(new SetCardInfo("Hinder", 2, Rarity.RARE, mage.cards.h.Hinder.class, MPR_FULL_ART)); + cards.add(new SetCardInfo("Hypnotic Specter", 1, Rarity.RARE, mage.cards.h.HypnoticSpecter.class)); + cards.add(new SetCardInfo("Lightning Helix", 7, Rarity.RARE, mage.cards.l.LightningHelix.class, MPR_FULL_ART)); + cards.add(new SetCardInfo("Putrefy", 5, Rarity.RARE, mage.cards.p.Putrefy.class, MPR_FULL_ART)); + cards.add(new SetCardInfo("Pyroclasm", 3, Rarity.RARE, mage.cards.p.Pyroclasm.class, MPR_FULL_ART)); + cards.add(new SetCardInfo("Zombify", 6, Rarity.RARE, mage.cards.z.Zombify.class, MPR_FULL_ART)); + } +} diff --git a/Mage.Sets/src/mage/sets/MagicPlayerRewards2007.java b/Mage.Sets/src/mage/sets/MagicPlayerRewards2007.java new file mode 100644 index 00000000000..5b5f0a933e5 --- /dev/null +++ b/Mage.Sets/src/mage/sets/MagicPlayerRewards2007.java @@ -0,0 +1,35 @@ +package mage.sets; + +import mage.cards.CardGraphicInfo; +import mage.cards.ExpansionSet; +import mage.cards.FrameStyle; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/p07 + */ +public class MagicPlayerRewards2007 extends ExpansionSet { + + private static final MagicPlayerRewards2007 instance = new MagicPlayerRewards2007(); + + public static MagicPlayerRewards2007 getInstance() { + return instance; + } + + private MagicPlayerRewards2007() { + super("Magic Player Rewards 2007", "P07", ExpansionSet.buildDate(2007, 1, 1), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + final CardGraphicInfo MPR_FULL_ART = new CardGraphicInfo(FrameStyle.MPRP_FULL_ART_BASIC, false); + + cards.add(new SetCardInfo("Condemn", 2, Rarity.RARE, mage.cards.c.Condemn.class, MPR_FULL_ART)); + cards.add(new SetCardInfo("Cruel Edict", 5, Rarity.RARE, mage.cards.c.CruelEdict.class, MPR_FULL_ART)); + cards.add(new SetCardInfo("Disenchant", 6, Rarity.RARE, mage.cards.d.Disenchant.class, MPR_FULL_ART)); + cards.add(new SetCardInfo("Mortify", 3, Rarity.RARE, mage.cards.m.Mortify.class, MPR_FULL_ART)); + cards.add(new SetCardInfo("Psionic Blast", 4, Rarity.RARE, mage.cards.p.PsionicBlast.class, MPR_FULL_ART)); + cards.add(new SetCardInfo("Recollect", 7, Rarity.RARE, mage.cards.r.Recollect.class, MPR_FULL_ART)); + cards.add(new SetCardInfo("Wrath of God", 1, Rarity.RARE, mage.cards.w.WrathOfGod.class, MPR_FULL_ART)); + } +} diff --git a/Mage.Sets/src/mage/sets/MagicPlayerRewards2008.java b/Mage.Sets/src/mage/sets/MagicPlayerRewards2008.java new file mode 100644 index 00000000000..716ec7b3ac2 --- /dev/null +++ b/Mage.Sets/src/mage/sets/MagicPlayerRewards2008.java @@ -0,0 +1,35 @@ +package mage.sets; + +import mage.cards.CardGraphicInfo; +import mage.cards.ExpansionSet; +import mage.cards.FrameStyle; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/p08 + */ +public class MagicPlayerRewards2008 extends ExpansionSet { + + private static final MagicPlayerRewards2008 instance = new MagicPlayerRewards2008(); + + public static MagicPlayerRewards2008 getInstance() { + return instance; + } + + private MagicPlayerRewards2008() { + super("Magic Player Rewards 2008", "P08", ExpansionSet.buildDate(2008, 1, 1), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + final CardGraphicInfo MPR_FULL_ART = new CardGraphicInfo(FrameStyle.MPRP_FULL_ART_BASIC, false); + + cards.add(new SetCardInfo("Corrupt", 7, Rarity.RARE, mage.cards.c.Corrupt.class)); + cards.add(new SetCardInfo("Damnation", 1, Rarity.RARE, mage.cards.d.Damnation.class)); + cards.add(new SetCardInfo("Harmonize", 5, Rarity.RARE, mage.cards.h.Harmonize.class)); + cards.add(new SetCardInfo("Incinerate", 3, Rarity.RARE, mage.cards.i.Incinerate.class)); + cards.add(new SetCardInfo("Mana Tithe", 4, Rarity.RARE, mage.cards.m.ManaTithe.class)); + cards.add(new SetCardInfo("Ponder", 6, Rarity.RARE, mage.cards.p.Ponder.class)); + cards.add(new SetCardInfo("Tidings", 2, Rarity.RARE, mage.cards.t.Tidings.class)); + } +} diff --git a/Mage.Sets/src/mage/sets/MagicPlayerRewards2009.java b/Mage.Sets/src/mage/sets/MagicPlayerRewards2009.java new file mode 100644 index 00000000000..c699fd4aced --- /dev/null +++ b/Mage.Sets/src/mage/sets/MagicPlayerRewards2009.java @@ -0,0 +1,37 @@ +package mage.sets; + +import mage.cards.CardGraphicInfo; +import mage.cards.ExpansionSet; +import mage.cards.FrameStyle; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/p09 + */ +public class MagicPlayerRewards2009 extends ExpansionSet { + + private static final MagicPlayerRewards2009 instance = new MagicPlayerRewards2009(); + + public static MagicPlayerRewards2009 getInstance() { + return instance; + } + + private MagicPlayerRewards2009() { + super("Magic Player Rewards 2009", "P09", ExpansionSet.buildDate(2009, 1, 1), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + final CardGraphicInfo MPR_FULL_ART = new CardGraphicInfo(FrameStyle.MPRP_FULL_ART_BASIC, false); + + cards.add(new SetCardInfo("Blightning", 6, Rarity.RARE, mage.cards.b.Blightning.class, MPR_FULL_ART)); + cards.add(new SetCardInfo("Cryptic Command", 1, Rarity.RARE, mage.cards.c.CrypticCommand.class, MPR_FULL_ART)); + cards.add(new SetCardInfo("Flame Javelin", 2, Rarity.RARE, mage.cards.f.FlameJavelin.class, MPR_FULL_ART)); + cards.add(new SetCardInfo("Nameless Inversion", 4, Rarity.RARE, mage.cards.n.NamelessInversion.class, MPR_FULL_ART)); + cards.add(new SetCardInfo("Negate", 8, Rarity.RARE, mage.cards.n.Negate.class, MPR_FULL_ART)); + cards.add(new SetCardInfo("Rampant Growth", 7, Rarity.RARE, mage.cards.r.RampantGrowth.class, MPR_FULL_ART)); + cards.add(new SetCardInfo("Remove Soul", 5, Rarity.RARE, mage.cards.r.RemoveSoul.class, MPR_FULL_ART)); + cards.add(new SetCardInfo("Terminate", 9, Rarity.RARE, mage.cards.t.Terminate.class, MPR_FULL_ART)); + cards.add(new SetCardInfo("Unmake", 3, Rarity.RARE, mage.cards.u.Unmake.class, MPR_FULL_ART)); + } +} diff --git a/Mage.Sets/src/mage/sets/MagicPlayerRewards2010.java b/Mage.Sets/src/mage/sets/MagicPlayerRewards2010.java new file mode 100644 index 00000000000..921b5787fb1 --- /dev/null +++ b/Mage.Sets/src/mage/sets/MagicPlayerRewards2010.java @@ -0,0 +1,37 @@ +package mage.sets; + +import mage.cards.CardGraphicInfo; +import mage.cards.ExpansionSet; +import mage.cards.FrameStyle; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/p10 + */ +public class MagicPlayerRewards2010 extends ExpansionSet { + + private static final MagicPlayerRewards2010 instance = new MagicPlayerRewards2010(); + + public static MagicPlayerRewards2010 getInstance() { + return instance; + } + + private MagicPlayerRewards2010() { + super("Magic Player Rewards 2010", "P10", ExpansionSet.buildDate(2010, 1, 1), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + final CardGraphicInfo MPR_FULL_ART = new CardGraphicInfo(FrameStyle.MPRP_FULL_ART_BASIC, false); + + cards.add(new SetCardInfo("Bituminous Blast", 7, Rarity.RARE, mage.cards.b.BituminousBlast.class, MPR_FULL_ART)); + cards.add(new SetCardInfo("Burst Lightning", 8, Rarity.RARE, mage.cards.b.BurstLightning.class, MPR_FULL_ART)); + cards.add(new SetCardInfo("Cancel", 2, Rarity.RARE, mage.cards.c.Cancel.class, MPR_FULL_ART)); + cards.add(new SetCardInfo("Celestial Purge", 6, Rarity.RARE, mage.cards.c.CelestialPurge.class, MPR_FULL_ART)); + cards.add(new SetCardInfo("Harrow", 9, Rarity.RARE, mage.cards.h.Harrow.class, MPR_FULL_ART)); + cards.add(new SetCardInfo("Infest", 4, Rarity.RARE, mage.cards.i.Infest.class, MPR_FULL_ART)); + cards.add(new SetCardInfo("Lightning Bolt", 1, Rarity.RARE, mage.cards.l.LightningBolt.class, MPR_FULL_ART)); + cards.add(new SetCardInfo("Sign in Blood", 3, Rarity.RARE, mage.cards.s.SignInBlood.class, MPR_FULL_ART)); + cards.add(new SetCardInfo("Volcanic Fallout", 5, Rarity.RARE, mage.cards.v.VolcanicFallout.class, MPR_FULL_ART)); + } +} diff --git a/Mage.Sets/src/mage/sets/MagicPlayerRewards2011.java b/Mage.Sets/src/mage/sets/MagicPlayerRewards2011.java new file mode 100644 index 00000000000..24e83675470 --- /dev/null +++ b/Mage.Sets/src/mage/sets/MagicPlayerRewards2011.java @@ -0,0 +1,33 @@ +package mage.sets; + +import mage.cards.CardGraphicInfo; +import mage.cards.ExpansionSet; +import mage.cards.FrameStyle; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/p11 + */ +public class MagicPlayerRewards2011 extends ExpansionSet { + + private static final MagicPlayerRewards2011 instance = new MagicPlayerRewards2011(); + + public static MagicPlayerRewards2011 getInstance() { + return instance; + } + + private MagicPlayerRewards2011() { + super("Magic Player Rewards 2011", "P11", ExpansionSet.buildDate(2011, 1, 1), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + final CardGraphicInfo MPR_FULL_ART = new CardGraphicInfo(FrameStyle.MPRP_FULL_ART_BASIC, false); + + cards.add(new SetCardInfo("Brave the Elements", 2, Rarity.RARE, mage.cards.b.BraveTheElements.class, MPR_FULL_ART)); + cards.add(new SetCardInfo("Day of Judgment", 1, Rarity.RARE, mage.cards.d.DayOfJudgment.class, MPR_FULL_ART)); + cards.add(new SetCardInfo("Doom Blade", 3, Rarity.RARE, mage.cards.d.DoomBlade.class, MPR_FULL_ART)); + cards.add(new SetCardInfo("Searing Blaze", 5, Rarity.RARE, mage.cards.s.SearingBlaze.class, MPR_FULL_ART)); + cards.add(new SetCardInfo("Treasure Hunt", 4, Rarity.RARE, mage.cards.t.TreasureHunt.class, MPR_FULL_ART)); + } +} diff --git a/Mage.Verify/src/main/java/mage/verify/MtgJson.java b/Mage.Verify/src/main/java/mage/verify/MtgJson.java index 2d186590b40..05af9030a55 100644 --- a/Mage.Verify/src/main/java/mage/verify/MtgJson.java +++ b/Mage.Verify/src/main/java/mage/verify/MtgJson.java @@ -31,7 +31,7 @@ public final class MtgJson { mtgJsonToXMageCodes.put("pWCQ", "WMCQ"); mtgJsonToXMageCodes.put("pSUS", "SUS"); mtgJsonToXMageCodes.put("pPRE", "PPRE"); - mtgJsonToXMageCodes.put("pMPR", "MPRP"); + // mtgJsonToXMageCodes.put("pMPR", "MPRP"); // TODO: The set was split into the individual sets mtgJsonToXMageCodes.put("pMEI", "MBP"); mtgJsonToXMageCodes.put("pGTW", "GRC"); // pGTW - Gateway = GRC (WPN + Gateway in one inner set) mtgJsonToXMageCodes.put("pWPN", "GRC"); // pWPN - Wizards Play Network = GRC (WPN + Gateway in one inner set) From ba0d66c18bb912e0cc95ea579268ad59898295a1 Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Tue, 4 Feb 2020 13:41:21 +0100 Subject: [PATCH 035/182] Add the Vintage Championship (OVNT) promotional set. --- .../java/mage/client/cards/DragCardGrid.java | 1 + .../dl/sources/ScryfallImageSupportCards.java | 1 + .../src/mage/sets/VintageChampionship.java | 46 +++++++++++++++++++ 3 files changed, 48 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/VintageChampionship.java diff --git a/Mage.Client/src/main/java/mage/client/cards/DragCardGrid.java b/Mage.Client/src/main/java/mage/client/cards/DragCardGrid.java index f40709917c9..33f6dc67218 100644 --- a/Mage.Client/src/main/java/mage/client/cards/DragCardGrid.java +++ b/Mage.Client/src/main/java/mage/client/cards/DragCardGrid.java @@ -1579,6 +1579,7 @@ public class DragCardGrid extends JPanel implements DragCardSource, DragCardTarg pimpedSets.put("P10", 1); pimpedSets.put("P11", 1); + pimpedSets.put("OVNT", 1); // Vintage Championship pimpedSets.put("MGDC", 1); pimpedSets.put("EXP", 1); pimpedSets.put("GPX", 1); diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java index 66139e93c23..599315262f1 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java @@ -102,6 +102,7 @@ public class ScryfallImageSupportCards { add("PDRC"); add("PHPR"); add("PLGM"); + add("OVNT"); // Vintage Championship add("MGB"); add("ULG"); diff --git a/Mage.Sets/src/mage/sets/VintageChampionship.java b/Mage.Sets/src/mage/sets/VintageChampionship.java new file mode 100644 index 00000000000..bc54680a6b8 --- /dev/null +++ b/Mage.Sets/src/mage/sets/VintageChampionship.java @@ -0,0 +1,46 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/ovnt + */ +public class VintageChampionship extends ExpansionSet { + + private static final VintageChampionship instance = new VintageChampionship(); + + public static VintageChampionship getInstance() { + return instance; + } + + private VintageChampionship() { + super("Vintage Championship", "OVNT", ExpansionSet.buildDate(2019, 11, 3), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Ancestral Recall", 2005, Rarity.RARE, mage.cards.a.AncestralRecall.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Ancestral Recall", 2013, Rarity.RARE, mage.cards.a.AncestralRecall.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Ancestral Recall", 2018, Rarity.MYTHIC, mage.cards.a.AncestralRecall.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Black Lotus", 2003, Rarity.RARE, mage.cards.b.BlackLotus.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Black Lotus", "2017NA", Rarity.MYTHIC, mage.cards.b.BlackLotus.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mox Emerald", 2009, Rarity.RARE, mage.cards.m.MoxEmerald.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mox Emerald", 2015, Rarity.MYTHIC, mage.cards.m.MoxEmerald.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mox Jet", 2007, Rarity.RARE, mage.cards.m.MoxJet.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mox Jet", "2016EU", Rarity.MYTHIC, mage.cards.m.MoxJet.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mox Jet", "2019NA", Rarity.MYTHIC, mage.cards.m.MoxJet.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mox Pearl", 2006, Rarity.RARE, mage.cards.m.MoxPearl.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mox Pearl", 2014, Rarity.MYTHIC, mage.cards.m.MoxPearl.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mox Ruby", 2008, Rarity.RARE, mage.cards.m.MoxRuby.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mox Ruby", "2017EU", Rarity.MYTHIC, mage.cards.m.MoxRuby.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mox Sapphire", 2010, Rarity.RARE, mage.cards.m.MoxSapphire.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mox Sapphire", "2016NA", Rarity.MYTHIC, mage.cards.m.MoxSapphire.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mox Sapphire", "2019A", Rarity.MYTHIC, mage.cards.m.MoxSapphire.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Time Walk", 2011, Rarity.RARE, mage.cards.t.TimeWalk.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Time Walk", "2018NA", Rarity.MYTHIC, mage.cards.t.TimeWalk.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Timetwister", 2004, Rarity.RARE, mage.cards.t.Timetwister.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Timetwister", 2012, Rarity.RARE, mage.cards.t.Timetwister.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Timetwister", "2018A", Rarity.MYTHIC, mage.cards.t.Timetwister.class, NON_FULL_USE_VARIOUS)); + } +} From f374d74dc2fd3aa873e9c4b8fb86f0f90e0900ef Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Tue, 4 Feb 2020 13:45:06 +0100 Subject: [PATCH 036/182] Add the Release Events (PREL) promotional set. --- .../java/mage/client/cards/DragCardGrid.java | 1 + .../dl/sources/ScryfallImageSupportCards.java | 1 + Mage.Sets/src/mage/sets/ReleaseEvents.java | 39 +++++++++++++++++++ 3 files changed, 41 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/ReleaseEvents.java diff --git a/Mage.Client/src/main/java/mage/client/cards/DragCardGrid.java b/Mage.Client/src/main/java/mage/client/cards/DragCardGrid.java index 33f6dc67218..0f34960c966 100644 --- a/Mage.Client/src/main/java/mage/client/cards/DragCardGrid.java +++ b/Mage.Client/src/main/java/mage/client/cards/DragCardGrid.java @@ -1580,6 +1580,7 @@ public class DragCardGrid extends JPanel implements DragCardSource, DragCardTarg pimpedSets.put("P11", 1); pimpedSets.put("OVNT", 1); // Vintage Championship + pimpedSets.put("PREL", 1); // Release Events pimpedSets.put("MGDC", 1); pimpedSets.put("EXP", 1); pimpedSets.put("GPX", 1); diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java index 599315262f1..24d900ab01d 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java @@ -103,6 +103,7 @@ public class ScryfallImageSupportCards { add("PHPR"); add("PLGM"); add("OVNT"); // Vintage Championship + add("PREL"); // Release Events add("MGB"); add("ULG"); diff --git a/Mage.Sets/src/mage/sets/ReleaseEvents.java b/Mage.Sets/src/mage/sets/ReleaseEvents.java new file mode 100644 index 00000000000..7d9afc40b0f --- /dev/null +++ b/Mage.Sets/src/mage/sets/ReleaseEvents.java @@ -0,0 +1,39 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/prel + */ +public class ReleaseEvents extends ExpansionSet { + + private static final ReleaseEvents instance = new ReleaseEvents(); + + public static ReleaseEvents getInstance() { + return instance; + } + + private ReleaseEvents() { + super("Release Events", "PREL", ExpansionSet.buildDate(2007, 10, 12), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + // Silver-bordered card not implemented + // cards.add(new SetCardInfo("Ass Whuppin'", 2, Rarity.RARE, mage.cards.a.AssWhuppin.class)); + cards.add(new SetCardInfo("Azorius Guildmage", 9, Rarity.RARE, mage.cards.a.AzoriusGuildmage.class)); + cards.add(new SetCardInfo("Budoka Pupil", "3a", Rarity.UNCOMMON, mage.cards.b.BudokaPupil.class)); + cards.add(new SetCardInfo("Dimir Guildmage", 7, Rarity.RARE, mage.cards.d.DimirGuildmage.class)); + cards.add(new SetCardInfo("Force of Nature", 5, Rarity.RARE, mage.cards.f.ForceOfNature.class)); + cards.add(new SetCardInfo("Ghost-Lit Raider", 4, Rarity.RARE, mage.cards.g.GhostLitRaider.class)); + cards.add(new SetCardInfo("Gruul Guildmage", 8, Rarity.RARE, mage.cards.g.GruulGuildmage.class)); + cards.add(new SetCardInfo("Hedge Troll", 11, Rarity.RARE, mage.cards.h.HedgeTroll.class)); + cards.add(new SetCardInfo("Rukh Egg", 1, Rarity.RARE, mage.cards.r.RukhEgg.class)); + // Russian-only printing + //cards.add(new SetCardInfo("Shivan Dragon", 6, Rarity.RARE, mage.cards.s.ShivanDragon.class)); + cards.add(new SetCardInfo("Shriekmaw", 13, Rarity.RARE, mage.cards.s.Shriekmaw.class)); + cards.add(new SetCardInfo("Storm Entity", 12, Rarity.RARE, mage.cards.s.StormEntity.class)); + cards.add(new SetCardInfo("Sudden Shock", 10, Rarity.RARE, mage.cards.s.SuddenShock.class)); + } +} From db74a91b3c2423d9875d6375020e48281ddcf94a Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Tue, 4 Feb 2020 13:55:49 +0100 Subject: [PATCH 037/182] Added the Junior Series Europe (PJSE) promotional set. --- .../java/mage/client/cards/DragCardGrid.java | 2 ++ .../dl/sources/ScryfallImageSupportCards.java | 1 + .../src/mage/sets/JuniorSeriesEurope.java | 32 +++++++++++++++++++ 3 files changed, 35 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/JuniorSeriesEurope.java diff --git a/Mage.Client/src/main/java/mage/client/cards/DragCardGrid.java b/Mage.Client/src/main/java/mage/client/cards/DragCardGrid.java index 0f34960c966..38e77a34e0e 100644 --- a/Mage.Client/src/main/java/mage/client/cards/DragCardGrid.java +++ b/Mage.Client/src/main/java/mage/client/cards/DragCardGrid.java @@ -1581,6 +1581,8 @@ public class DragCardGrid extends JPanel implements DragCardSource, DragCardTarg pimpedSets.put("OVNT", 1); // Vintage Championship pimpedSets.put("PREL", 1); // Release Events + pimpedSets.put("PJSE", 1); // Junior Series Europe + pimpedSets.put("MGDC", 1); pimpedSets.put("EXP", 1); pimpedSets.put("GPX", 1); diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java index 24d900ab01d..32b810e3141 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java @@ -104,6 +104,7 @@ public class ScryfallImageSupportCards { add("PLGM"); add("OVNT"); // Vintage Championship add("PREL"); // Release Events + add("PJSE"); // Junior Series Europe add("MGB"); add("ULG"); diff --git a/Mage.Sets/src/mage/sets/JuniorSeriesEurope.java b/Mage.Sets/src/mage/sets/JuniorSeriesEurope.java new file mode 100644 index 00000000000..4782590d6e7 --- /dev/null +++ b/Mage.Sets/src/mage/sets/JuniorSeriesEurope.java @@ -0,0 +1,32 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/pjse + */ +public class JuniorSeriesEurope extends ExpansionSet { + + private static final JuniorSeriesEurope instance = new JuniorSeriesEurope(); + + public static JuniorSeriesEurope getInstance() { + return instance; + } + + private JuniorSeriesEurope() { + super("Junior Series Europe", "PJSE", ExpansionSet.buildDate(2008, 1, 1), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Elvish Champion", "2E08", Rarity.RARE, mage.cards.e.ElvishChampion.class)); + cards.add(new SetCardInfo("Glorious Anthem", "1E08", Rarity.RARE, mage.cards.g.GloriousAnthem.class)); + cards.add(new SetCardInfo("Royal Assassin", "2E05", Rarity.RARE, mage.cards.r.RoyalAssassin.class)); + cards.add(new SetCardInfo("Sakura-Tribe Elder", "1E06", Rarity.RARE, mage.cards.s.SakuraTribeElder.class)); + cards.add(new SetCardInfo("Shard Phoenix", "2E06", Rarity.RARE, mage.cards.s.ShardPhoenix.class)); + cards.add(new SetCardInfo("Slith Firewalker", "1E05", Rarity.RARE, mage.cards.s.SlithFirewalker.class)); + cards.add(new SetCardInfo("Soltari Priest", "1E07", Rarity.RARE, mage.cards.s.SoltariPriest.class)); + cards.add(new SetCardInfo("Whirling Dervish", "2E07", Rarity.RARE, mage.cards.w.WhirlingDervish.class)); + } +} From be87c306c4058e967bf6ad37feb73f2a42f5f9f8 Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Tue, 4 Feb 2020 14:01:16 +0100 Subject: [PATCH 038/182] Added the Two-Headed Giant Tournament (P2HG) promotional set. --- .../java/mage/client/cards/DragCardGrid.java | 7 +++--- .../dl/sources/ScryfallImageSupportCards.java | 1 + .../mage/sets/TwoHeadedGiantTournament.java | 25 +++++++++++++++++++ 3 files changed, 30 insertions(+), 3 deletions(-) create mode 100644 Mage.Sets/src/mage/sets/TwoHeadedGiantTournament.java diff --git a/Mage.Client/src/main/java/mage/client/cards/DragCardGrid.java b/Mage.Client/src/main/java/mage/client/cards/DragCardGrid.java index 38e77a34e0e..8494fe79db8 100644 --- a/Mage.Client/src/main/java/mage/client/cards/DragCardGrid.java +++ b/Mage.Client/src/main/java/mage/client/cards/DragCardGrid.java @@ -1579,9 +1579,10 @@ public class DragCardGrid extends JPanel implements DragCardSource, DragCardTarg pimpedSets.put("P10", 1); pimpedSets.put("P11", 1); - pimpedSets.put("OVNT", 1); // Vintage Championship - pimpedSets.put("PREL", 1); // Release Events - pimpedSets.put("PJSE", 1); // Junior Series Europe + pimpedSets.put("OVNT", 1); // Vintage Championship + pimpedSets.put("PREL", 1); // Release Events + pimpedSets.put("PJSE", 1); // Junior Series Europe + pimpedSets.put("P2HG", 1); // Two-Headed Giant Tournament pimpedSets.put("MGDC", 1); pimpedSets.put("EXP", 1); diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java index 32b810e3141..0bb90eee809 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java @@ -105,6 +105,7 @@ public class ScryfallImageSupportCards { add("OVNT"); // Vintage Championship add("PREL"); // Release Events add("PJSE"); // Junior Series Europe + add("P2HG"); // Two-Headed Giant Tournament add("MGB"); add("ULG"); diff --git a/Mage.Sets/src/mage/sets/TwoHeadedGiantTournament.java b/Mage.Sets/src/mage/sets/TwoHeadedGiantTournament.java new file mode 100644 index 00000000000..4a37f2bda0d --- /dev/null +++ b/Mage.Sets/src/mage/sets/TwoHeadedGiantTournament.java @@ -0,0 +1,25 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/p2hg + */ +public class TwoHeadedGiantTournament extends ExpansionSet { + + private static final TwoHeadedGiantTournament instance = new TwoHeadedGiantTournament(); + + public static TwoHeadedGiantTournament getInstance() { + return instance; + } + + private TwoHeadedGiantTournament() { + super("Two-Headed Giant Tournament", "P2HG", ExpansionSet.buildDate(2005, 12, 9), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Underworld Dreams", 1, Rarity.RARE, mage.cards.u.UnderworldDreams.class)); + } +} From 7fa1e9023d93185a850066f9ff3dda01c140a3c1 Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Tue, 4 Feb 2020 14:04:24 +0100 Subject: [PATCH 039/182] Added the Gateway 2006 (PGTW) promotional set. --- .../java/mage/client/cards/DragCardGrid.java | 1 + .../dl/sources/ScryfallImageSupportCards.java | 1 + Mage.Sets/src/mage/sets/Gateway2006.java | 27 +++++++++++++++++++ 3 files changed, 29 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/Gateway2006.java diff --git a/Mage.Client/src/main/java/mage/client/cards/DragCardGrid.java b/Mage.Client/src/main/java/mage/client/cards/DragCardGrid.java index 8494fe79db8..7499464f118 100644 --- a/Mage.Client/src/main/java/mage/client/cards/DragCardGrid.java +++ b/Mage.Client/src/main/java/mage/client/cards/DragCardGrid.java @@ -1583,6 +1583,7 @@ public class DragCardGrid extends JPanel implements DragCardSource, DragCardTarg pimpedSets.put("PREL", 1); // Release Events pimpedSets.put("PJSE", 1); // Junior Series Europe pimpedSets.put("P2HG", 1); // Two-Headed Giant Tournament + pimpedSets.put("PGTW", 1); // Gateway 2006 pimpedSets.put("MGDC", 1); pimpedSets.put("EXP", 1); diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java index 0bb90eee809..8629fb9656a 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java @@ -106,6 +106,7 @@ public class ScryfallImageSupportCards { add("PREL"); // Release Events add("PJSE"); // Junior Series Europe add("P2HG"); // Two-Headed Giant Tournament + add("PGTW"); // Gateway 2006 add("MGB"); add("ULG"); diff --git a/Mage.Sets/src/mage/sets/Gateway2006.java b/Mage.Sets/src/mage/sets/Gateway2006.java new file mode 100644 index 00000000000..e21c8b79821 --- /dev/null +++ b/Mage.Sets/src/mage/sets/Gateway2006.java @@ -0,0 +1,27 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/pgtw + */ +public class Gateway2006 extends ExpansionSet { + + private static final Gateway2006 instance = new Gateway2006(); + + public static Gateway2006 getInstance() { + return instance; + } + + private Gateway2006() { + super("Gateway 2006", "PGTW", ExpansionSet.buildDate(2006, 1, 1), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Fiery Temper", 3, Rarity.RARE, mage.cards.f.FieryTemper.class)); + cards.add(new SetCardInfo("Icatian Javelineers", 2, Rarity.RARE, mage.cards.i.IcatianJavelineers.class)); + cards.add(new SetCardInfo("Wood Elves", 1, Rarity.RARE, mage.cards.w.WoodElves.class)); + } +} From c74f42be81d2c92a1514c76a78d01944c15b7ac8 Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Tue, 4 Feb 2020 14:09:21 +0100 Subject: [PATCH 040/182] Added the Junior APAC Series (PJAS) promotional set. --- .../java/mage/client/cards/DragCardGrid.java | 1 + .../dl/sources/ScryfallImageSupportCards.java | 4 ++- Mage.Sets/src/mage/sets/JuniorAPACSeries.java | 30 +++++++++++++++++++ 3 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 Mage.Sets/src/mage/sets/JuniorAPACSeries.java diff --git a/Mage.Client/src/main/java/mage/client/cards/DragCardGrid.java b/Mage.Client/src/main/java/mage/client/cards/DragCardGrid.java index 7499464f118..7d9798b0f15 100644 --- a/Mage.Client/src/main/java/mage/client/cards/DragCardGrid.java +++ b/Mage.Client/src/main/java/mage/client/cards/DragCardGrid.java @@ -1584,6 +1584,7 @@ public class DragCardGrid extends JPanel implements DragCardSource, DragCardTarg pimpedSets.put("PJSE", 1); // Junior Series Europe pimpedSets.put("P2HG", 1); // Two-Headed Giant Tournament pimpedSets.put("PGTW", 1); // Gateway 2006 + pimpedSets.put("PJAS", 1); // Junior APAC Series pimpedSets.put("MGDC", 1); pimpedSets.put("EXP", 1); diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java index 8629fb9656a..05d7a69f4b7 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java @@ -107,7 +107,9 @@ public class ScryfallImageSupportCards { add("PJSE"); // Junior Series Europe add("P2HG"); // Two-Headed Giant Tournament add("PGTW"); // Gateway 2006 - + add("PJAS"); // Junior APAC Series + + add("MGB"); add("ULG"); add("6ED"); diff --git a/Mage.Sets/src/mage/sets/JuniorAPACSeries.java b/Mage.Sets/src/mage/sets/JuniorAPACSeries.java new file mode 100644 index 00000000000..67b09259d9f --- /dev/null +++ b/Mage.Sets/src/mage/sets/JuniorAPACSeries.java @@ -0,0 +1,30 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/pjas + */ +public class JuniorAPACSeries extends ExpansionSet { + + private static final JuniorAPACSeries instance = new JuniorAPACSeries(); + + public static JuniorAPACSeries getInstance() { + return instance; + } + + private JuniorAPACSeries() { + super("Junior APAC Series", "PJAS", ExpansionSet.buildDate(2008, 1, 1), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Elvish Champion", "2U08", Rarity.RARE, mage.cards.e.ElvishChampion.class)); + cards.add(new SetCardInfo("Glorious Anthem", "1U08", Rarity.RARE, mage.cards.g.GloriousAnthem.class)); + cards.add(new SetCardInfo("Sakura-Tribe Elder", "1U06", Rarity.RARE, mage.cards.s.SakuraTribeElder.class)); + cards.add(new SetCardInfo("Shard Phoenix", "2U06", Rarity.RARE, mage.cards.s.ShardPhoenix.class)); + cards.add(new SetCardInfo("Soltari Priest", "1U07", Rarity.RARE, mage.cards.s.SoltariPriest.class)); + cards.add(new SetCardInfo("Whirling Dervish", "2U07", Rarity.RARE, mage.cards.w.WhirlingDervish.class)); + } +} From e0fb40abdfeb557c0ad1f6f0d4c0d0fdf5ffb9b0 Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Tue, 4 Feb 2020 20:58:12 +0100 Subject: [PATCH 041/182] Added the Hachette UK (PHUK) preconstructed deck set. --- .../dl/sources/ScryfallImageSupportCards.java | 1 + Mage.Sets/src/mage/sets/HachetteUK.java | 86 +++++++++++++++++++ 2 files changed, 87 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/HachetteUK.java diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java index 05d7a69f4b7..2e350bd87be 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java @@ -144,6 +144,7 @@ public class ScryfallImageSupportCards { add("SOK"); add("9ED"); add("RAV"); + add("PHUK"); add("GPT"); add("DIS"); add("CSP"); diff --git a/Mage.Sets/src/mage/sets/HachetteUK.java b/Mage.Sets/src/mage/sets/HachetteUK.java new file mode 100644 index 00000000000..d5ec98b5b7f --- /dev/null +++ b/Mage.Sets/src/mage/sets/HachetteUK.java @@ -0,0 +1,86 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/phuk + */ +public class HachetteUK extends ExpansionSet { + + private static final HachetteUK instance = new HachetteUK(); + + public static HachetteUK getInstance() { + return instance; + } + + private HachetteUK() { + super("Hachette UK", "PHUK", ExpansionSet.buildDate(2006, 1, 1), SetType.SUPPLEMENTAL); + this.hasBoosters = false; + this.hasBasicLands = true; + + cards.add(new SetCardInfo("Betrayal of Flesh", 52, Rarity.UNCOMMON, mage.cards.b.BetrayalOfFlesh.class)); + // Card not implemented + // cards.add(new SetCardInfo("Carrion Rats", 40, Rarity.COMMON, mage.cards.c.CarrionRats.class, NON_FULL_USE_VARIOUS)); + // cards.add(new SetCardInfo("Carrion Rats", 41, Rarity.COMMON, mage.cards.c.CarrionRats.class, NON_FULL_USE_VARIOUS)); + // cards.add(new SetCardInfo("Carrion Rats", 53, Rarity.COMMON, mage.cards.c.CarrionRats.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Chittering Rats", 5, Rarity.COMMON, mage.cards.c.ChitteringRats.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Chittering Rats", 19, Rarity.COMMON, mage.cards.c.ChitteringRats.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Chittering Rats", 54, Rarity.COMMON, mage.cards.c.ChitteringRats.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Crippling Fatigue", 6, Rarity.COMMON, mage.cards.c.CripplingFatigue.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Crippling Fatigue", 30, Rarity.COMMON, mage.cards.c.CripplingFatigue.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Crypt Rats", 28, Rarity.UNCOMMON, mage.cards.c.CryptRats.class)); + cards.add(new SetCardInfo("Diabolic Tutor", 51, Rarity.UNCOMMON, mage.cards.d.DiabolicTutor.class)); + cards.add(new SetCardInfo("Dirge of Dread", 18, Rarity.COMMON, mage.cards.d.DirgeOfDread.class)); + cards.add(new SetCardInfo("Dirty Wererat", 7, Rarity.COMMON, mage.cards.d.DirtyWererat.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Dirty Wererat", 31, Rarity.COMMON, mage.cards.d.DirtyWererat.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Gravestorm", 37, Rarity.RARE, mage.cards.g.Gravestorm.class)); + cards.add(new SetCardInfo("Infernal Contract", 13, Rarity.RARE, mage.cards.i.InfernalContract.class)); + cards.add(new SetCardInfo("Larceny", 49, Rarity.RARE, mage.cards.l.Larceny.class)); + cards.add(new SetCardInfo("Marrow-Gnawer", 1, Rarity.RARE, mage.cards.m.MarrowGnawer.class)); + cards.add(new SetCardInfo("Nezumi Bone-Reader", 50, Rarity.UNCOMMON, mage.cards.n.NezumiBoneReader.class)); + cards.add(new SetCardInfo("Nezumi Cutthroat", 17, Rarity.COMMON, mage.cards.n.NezumiCutthroat.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Nezumi Cutthroat", 29, Rarity.COMMON, mage.cards.n.NezumiCutthroat.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Nezumi Graverobber", 38, Rarity.UNCOMMON, mage.cards.n.NezumiGraverobber.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Nezumi Graverobber", 39, Rarity.UNCOMMON, mage.cards.n.NezumiGraverobber.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Nocturnal Raid", 3, Rarity.UNCOMMON, mage.cards.n.NocturnalRaid.class)); + cards.add(new SetCardInfo("Patron of the Nezumi", 25, Rarity.RARE, mage.cards.p.PatronOfTheNezumi.class)); + cards.add(new SetCardInfo("Rats' Feast", 44, Rarity.COMMON, mage.cards.r.RatsFeast.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Rats' Feast", 55, Rarity.COMMON, mage.cards.r.RatsFeast.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Sever Soul", 15, Rarity.UNCOMMON, mage.cards.s.SeverSoul.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Sever Soul", 16, Rarity.UNCOMMON, mage.cards.s.SeverSoul.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Skullsnatcher", 4, Rarity.COMMON, mage.cards.s.Skullsnatcher.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Skullsnatcher", 42, Rarity.COMMON, mage.cards.s.Skullsnatcher.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Skullsnatcher", 43, Rarity.COMMON, mage.cards.s.Skullsnatcher.class, NON_FULL_USE_VARIOUS)); + // Card not implemented + // cards.add(new SetCardInfo("Suppress", 26, Rarity.UNCOMMON, mage.cards.s.Suppress.class)); + cards.add(new SetCardInfo("Swamp", 8, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", 9, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", 10, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", 11, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", 12, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", 20, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", 21, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", 22, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", 23, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", 24, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", 32, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", 33, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", 34, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", 35, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", 36, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", 45, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", 46, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", 47, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", 48, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", 56, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", 57, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", 58, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", 59, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", 60, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swarm of Rats", 2, Rarity.UNCOMMON, mage.cards.s.SwarmOfRats.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swarm of Rats", 14, Rarity.UNCOMMON, mage.cards.s.SwarmOfRats.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swarm of Rats", 27, Rarity.UNCOMMON, mage.cards.s.SwarmOfRats.class, NON_FULL_USE_VARIOUS)); + } +} From 9cfa97bf2cef39022775a0698f74632ee4811461 Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Mon, 9 Mar 2020 11:28:15 +0100 Subject: [PATCH 042/182] Added the Coldsnap Theme Decks (CST) preconstructed deck set. --- .../src/mage/sets/ColdsnapThemeDecks.java | 86 +++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/ColdsnapThemeDecks.java diff --git a/Mage.Sets/src/mage/sets/ColdsnapThemeDecks.java b/Mage.Sets/src/mage/sets/ColdsnapThemeDecks.java new file mode 100644 index 00000000000..d9676c78d57 --- /dev/null +++ b/Mage.Sets/src/mage/sets/ColdsnapThemeDecks.java @@ -0,0 +1,86 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/cst + */ +public class ColdsnapThemeDecks extends ExpansionSet { + + private static final ColdsnapThemeDecks instance = new ColdsnapThemeDecks(); + + public static ColdsnapThemeDecks getInstance() { + return instance; + } + + private ColdsnapThemeDecks() { + super("Coldsnap Theme Decks", "CST", ExpansionSet.buildDate(2006, 7, 21), SetType.SUPPLEMENTAL); + this.hasBoosters = false; + this.hasBasicLands = true; + + //cards.add(new SetCardInfo("Arcum's Weathervane", 310, Rarity.UNCOMMON, mage.cards.a.ArcumsWeathervane.class)); + cards.add(new SetCardInfo("Ashen Ghoul", 114, Rarity.UNCOMMON, mage.cards.a.AshenGhoul.class)); + cards.add(new SetCardInfo("Aurochs", 225, Rarity.COMMON, mage.cards.a.Aurochs.class)); + cards.add(new SetCardInfo("Balduvian Dead", 43, Rarity.UNCOMMON, mage.cards.b.BalduvianDead.class)); + cards.add(new SetCardInfo("Barbed Sextant", 312, Rarity.COMMON, mage.cards.b.BarbedSextant.class)); + cards.add(new SetCardInfo("Binding Grasp", 60, Rarity.UNCOMMON, mage.cards.b.BindingGrasp.class)); + cards.add(new SetCardInfo("Bounty of the Hunt", 85, Rarity.UNCOMMON, mage.cards.b.BountyOfTheHunt.class)); + cards.add(new SetCardInfo("Brainstorm", 61, Rarity.COMMON, mage.cards.b.Brainstorm.class)); + cards.add(new SetCardInfo("Browse", 25, Rarity.UNCOMMON, mage.cards.b.Browse.class)); + cards.add(new SetCardInfo("Casting of Bones", "44b", Rarity.COMMON, mage.cards.c.CastingOfBones.class)); + cards.add(new SetCardInfo("Dark Banishing", 119, Rarity.COMMON, mage.cards.d.DarkBanishing.class)); + cards.add(new SetCardInfo("Dark Ritual", 120, Rarity.COMMON, mage.cards.d.DarkRitual.class)); + cards.add(new SetCardInfo("Deadly Insect", "86a", Rarity.COMMON, mage.cards.d.DeadlyInsect.class)); + cards.add(new SetCardInfo("Death Spark", 70, Rarity.UNCOMMON, mage.cards.d.DeathSpark.class)); + cards.add(new SetCardInfo("Disenchant", 20, Rarity.COMMON, mage.cards.d.Disenchant.class)); + cards.add(new SetCardInfo("Drift of the Dead", 123, Rarity.UNCOMMON, mage.cards.d.DriftOfTheDead.class)); + cards.add(new SetCardInfo("Essence Flare", 69, Rarity.COMMON, mage.cards.e.EssenceFlare.class)); + cards.add(new SetCardInfo("Forest", 381, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", 382, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", 383, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Gangrenous Zombies", 127, Rarity.COMMON, mage.cards.g.GangrenousZombies.class)); + cards.add(new SetCardInfo("Giant Trap Door Spider", 293, Rarity.UNCOMMON, mage.cards.g.GiantTrapDoorSpider.class)); + cards.add(new SetCardInfo("Gorilla Shaman", "72a", Rarity.COMMON, mage.cards.g.GorillaShaman.class)); + cards.add(new SetCardInfo("Iceberg", 73, Rarity.UNCOMMON, mage.cards.i.Iceberg.class)); + cards.add(new SetCardInfo("Incinerate", 194, Rarity.COMMON, mage.cards.i.Incinerate.class)); + cards.add(new SetCardInfo("Insidious Bookworms", "51a", Rarity.COMMON, mage.cards.i.InsidiousBookworms.class)); + cards.add(new SetCardInfo("Island", 372, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", 373, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", 374, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Kjeldoran Dead", 137, Rarity.COMMON, mage.cards.k.KjeldoranDead.class)); + //cards.add(new SetCardInfo("Kjeldoran Elite Guard", 34, Rarity.UNCOMMON, mage.cards.k.KjeldoranEliteGuard.class)); + cards.add(new SetCardInfo("Kjeldoran Home Guard", 8, Rarity.UNCOMMON, mage.cards.k.KjeldoranHomeGuard.class)); + cards.add(new SetCardInfo("Kjeldoran Pride", "9b", Rarity.COMMON, mage.cards.k.KjeldoranPride.class)); + cards.add(new SetCardInfo("Lat-Nam's Legacy", "30b", Rarity.COMMON, mage.cards.l.LatNamsLegacy.class)); + cards.add(new SetCardInfo("Legions of Lim-Dûl", 142, Rarity.COMMON, mage.cards.l.LegionsOfLimDul.class)); + cards.add(new SetCardInfo("Mistfolk", 84, Rarity.COMMON, mage.cards.m.Mistfolk.class)); + cards.add(new SetCardInfo("Mountain", 378, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", 379, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", 380, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Orcish Healer", 208, Rarity.UNCOMMON, mage.cards.o.OrcishHealer.class)); + cards.add(new SetCardInfo("Orcish Lumberjack", 210, Rarity.COMMON, mage.cards.o.OrcishLumberjack.class)); + cards.add(new SetCardInfo("Phantasmal Fiend", "57a", Rarity.COMMON, mage.cards.p.PhantasmalFiend.class)); + cards.add(new SetCardInfo("Plains", 369, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", 370, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", 371, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Portent", 90, Rarity.COMMON, mage.cards.p.Portent.class)); + cards.add(new SetCardInfo("Reinforcements", "12b", Rarity.COMMON, mage.cards.r.Reinforcements.class)); + //ards.add(new SetCardInfo("Scars of the Veteran", 16, Rarity.UNCOMMON, mage.cards.s.ScarsOfTheVeteran.class)); + cards.add(new SetCardInfo("Skull Catapult", 336, Rarity.UNCOMMON, mage.cards.s.SkullCatapult.class)); + cards.add(new SetCardInfo("Snow Devil", 100, Rarity.COMMON, mage.cards.s.SnowDevil.class)); + cards.add(new SetCardInfo("Soul Burn", 161, Rarity.COMMON, mage.cards.s.SoulBurn.class)); + cards.add(new SetCardInfo("Storm Elemental", 37, Rarity.UNCOMMON, mage.cards.s.StormElemental.class)); + cards.add(new SetCardInfo("Swamp", 375, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", 376, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", 377, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swords to Plowshares", 54, Rarity.UNCOMMON, mage.cards.s.SwordsToPlowshares.class)); + cards.add(new SetCardInfo("Tinder Wall", 270, Rarity.COMMON, mage.cards.t.TinderWall.class)); + cards.add(new SetCardInfo("Viscerid Drone", 42, Rarity.UNCOMMON, mage.cards.v.VisceridDrone.class)); + cards.add(new SetCardInfo("Whalebone Glider", 349, Rarity.UNCOMMON, mage.cards.w.WhaleboneGlider.class)); + cards.add(new SetCardInfo("Wings of Aesthir", 305, Rarity.UNCOMMON, mage.cards.w.WingsOfAesthir.class)); + cards.add(new SetCardInfo("Woolly Mammoths", 278, Rarity.COMMON, mage.cards.w.WoollyMammoths.class)); + cards.add(new SetCardInfo("Zuran Spellcaster", 112, Rarity.COMMON, mage.cards.z.ZuranSpellcaster.class)); + } +} From efaeadd8a42e32d8837076943cab6d10adfc60d9 Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Mon, 9 Mar 2020 11:31:00 +0100 Subject: [PATCH 043/182] Added the Champs and States (PCMP) promotional set. It contains reward cards given to tournament players. --- Mage.Sets/src/mage/sets/ChampsAndStates.java | 37 ++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/ChampsAndStates.java diff --git a/Mage.Sets/src/mage/sets/ChampsAndStates.java b/Mage.Sets/src/mage/sets/ChampsAndStates.java new file mode 100644 index 00000000000..d44d520fc8b --- /dev/null +++ b/Mage.Sets/src/mage/sets/ChampsAndStates.java @@ -0,0 +1,37 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/pcmp + * https://mtg.gamepedia.com/Magic_Champs_and_States + */ +public class ChampsAndStates extends ExpansionSet { + + private static final ChampsAndStates instance = new ChampsAndStates(); + + public static ChampsAndStates getInstance() { + return instance; + } + + private ChampsAndStates() { + super("Champs and States", "PCMP", ExpansionSet.buildDate(2008, 3, 29), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Blood Knight", 7, Rarity.RARE, mage.cards.b.BloodKnight.class)); + cards.add(new SetCardInfo("Bramblewood Paragon", 11, Rarity.RARE, mage.cards.b.BramblewoodParagon.class)); + cards.add(new SetCardInfo("Doran, the Siege Tower", 10, Rarity.RARE, mage.cards.d.DoranTheSiegeTower.class)); + cards.add(new SetCardInfo("Electrolyze", 1, Rarity.RARE, mage.cards.e.Electrolyze.class)); + cards.add(new SetCardInfo("Groundbreaker", 8, Rarity.RARE, mage.cards.g.Groundbreaker.class)); + cards.add(new SetCardInfo("Imperious Perfect", 9, Rarity.RARE, mage.cards.i.ImperiousPerfect.class)); + cards.add(new SetCardInfo("Mutavault", 12, Rarity.RARE, mage.cards.m.Mutavault.class)); + cards.add(new SetCardInfo("Niv-Mizzet, the Firemind", 2, Rarity.RARE, mage.cards.n.NivMizzetTheFiremind.class)); + cards.add(new SetCardInfo("Rakdos Guildmage", 3, Rarity.RARE, mage.cards.r.RakdosGuildmage.class)); + cards.add(new SetCardInfo("Serra Avenger", 6, Rarity.RARE, mage.cards.s.SerraAvenger.class)); + cards.add(new SetCardInfo("Urza's Factory", 5, Rarity.RARE, mage.cards.u.UrzasFactory.class)); + cards.add(new SetCardInfo("Voidslime", 4, Rarity.RARE, mage.cards.v.Voidslime.class)); + } +} From 614f71f0b25bc7ada46c45a0e3061b7eb8980143 Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Mon, 9 Mar 2020 11:39:44 +0100 Subject: [PATCH 044/182] Added the Gateway 2007 (PG07) promotional set. --- Mage.Sets/src/mage/sets/Gateway2007.java | 33 ++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/Gateway2007.java diff --git a/Mage.Sets/src/mage/sets/Gateway2007.java b/Mage.Sets/src/mage/sets/Gateway2007.java new file mode 100644 index 00000000000..8b5863db688 --- /dev/null +++ b/Mage.Sets/src/mage/sets/Gateway2007.java @@ -0,0 +1,33 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/pg07 + */ +public class Gateway2007 extends ExpansionSet { + + private static final Gateway2007 instance = new Gateway2007(); + + public static Gateway2007 getInstance() { + return instance; + } + + private Gateway2007() { + super("Gateway 2007", "PG07", ExpansionSet.buildDate(2007, 1, 1), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Boomerang", 4, Rarity.RARE, mage.cards.b.Boomerang.class)); + cards.add(new SetCardInfo("Calciderm", 5, Rarity.RARE, mage.cards.c.Calciderm.class)); + cards.add(new SetCardInfo("Dauntless Dourbark", 12, Rarity.RARE, mage.cards.d.DauntlessDourbark.class)); + cards.add(new SetCardInfo("Llanowar Elves", 9, Rarity.RARE, mage.cards.l.LlanowarElves.class)); + cards.add(new SetCardInfo("Mind Stone", 11, Rarity.RARE, mage.cards.m.MindStone.class)); + cards.add(new SetCardInfo("Mogg Fanatic", 10, Rarity.RARE, mage.cards.m.MoggFanatic.class)); + cards.add(new SetCardInfo("Reckless Wurm", 6, Rarity.RARE, mage.cards.r.RecklessWurm.class)); + cards.add(new SetCardInfo("Yixlid Jailer", 7, Rarity.RARE, mage.cards.y.YixlidJailer.class)); + cards.add(new SetCardInfo("Zoetic Cavern", 8, Rarity.RARE, mage.cards.z.ZoeticCavern.class)); + } +} From 0770a2922ed7e863aadb4b2ebca1f4111bff70b2 Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Mon, 9 Mar 2020 11:46:37 +0100 Subject: [PATCH 045/182] Added the Resale Promos (PRES) promotional set. --- Mage.Sets/src/mage/sets/ResalePromos.java | 53 +++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/ResalePromos.java diff --git a/Mage.Sets/src/mage/sets/ResalePromos.java b/Mage.Sets/src/mage/sets/ResalePromos.java new file mode 100644 index 00000000000..35ce780add0 --- /dev/null +++ b/Mage.Sets/src/mage/sets/ResalePromos.java @@ -0,0 +1,53 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/pres + * Stance on non-english cards: + * https://github.com/magefree/mage/pull/6190#issuecomment-582353697 + * https://github.com/magefree/mage/pull/6190#issuecomment-582354790 + */ +public class ResalePromos extends ExpansionSet { + + private static final ResalePromos instance = new ResalePromos(); + + public static ResalePromos getInstance() { + return instance; + } + + private ResalePromos() { + super("Resale Promos", "PRES", ExpansionSet.buildDate(2019, 7, 1), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Angel of Glory's Rise", "A9", Rarity.RARE, mage.cards.a.AngelOfGlorysRise.class)); + cards.add(new SetCardInfo("Angelic Skirmisher", "A11", Rarity.RARE, mage.cards.a.AngelicSkirmisher.class)); + cards.add(new SetCardInfo("Atarka, World Render", 149, Rarity.RARE, mage.cards.a.AtarkaWorldRender.class)); + cards.add(new SetCardInfo("Beast Whisperer", "123*", Rarity.RARE, mage.cards.b.BeastWhisperer.class)); + cards.add(new SetCardInfo("Brion Stoutarm", "A2", Rarity.RARE, mage.cards.b.BrionStoutarm.class)); + cards.add(new SetCardInfo("Bristling Hydra", 147, Rarity.RARE, mage.cards.b.BristlingHydra.class)); + cards.add(new SetCardInfo("Broodmate Dragon", "A3", Rarity.RARE, mage.cards.b.BroodmateDragon.class)); + cards.add(new SetCardInfo("Curator of Mysteries", "49*", Rarity.RARE, mage.cards.c.CuratorOfMysteries.class)); + cards.add(new SetCardInfo("Etali, Primal Storm", "100*", Rarity.RARE, mage.cards.e.EtaliPrimalStorm.class)); + cards.add(new SetCardInfo("Felidar Sovereign", 26, Rarity.RARE, mage.cards.f.FelidarSovereign.class)); + cards.add(new SetCardInfo("Genesis Hydra", 176, Rarity.RARE, mage.cards.g.GenesisHydra.class)); + // Japanese-only printing + //cards.add(new SetCardInfo("Goblin Chieftain", "141*", Rarity.RARE, mage.cards.g.GoblinChieftain.class)); + cards.add(new SetCardInfo("Hamletback Goliath", "A10", Rarity.RARE, mage.cards.h.HamletbackGoliath.class)); + cards.add(new SetCardInfo("Jaya Ballard, Task Mage", "A1", Rarity.RARE, mage.cards.j.JayaBallardTaskMage.class)); + cards.add(new SetCardInfo("Knight Exemplar", "A7", Rarity.RARE, mage.cards.k.KnightExemplar.class)); + cards.add(new SetCardInfo("Lathliss, Dragon Queen", "149*", Rarity.RARE, mage.cards.l.LathlissDragonQueen.class)); + // Japanese-only printings + //cards.add(new SetCardInfo("Loam Lion", "13*", Rarity.UNCOMMON, mage.cards.l.LoamLion.class)); + //cards.add(new SetCardInfo("Oran-Rief, the Vastwood", "221*", Rarity.RARE, mage.cards.o.OranRiefTheVastwood.class)); + cards.add(new SetCardInfo("Outland Colossus", 193, Rarity.RARE, mage.cards.o.OutlandColossus.class)); + cards.add(new SetCardInfo("Retaliator Griffin", "A4", Rarity.RARE, mage.cards.r.RetaliatorGriffin.class)); + cards.add(new SetCardInfo("Sunblast Angel", "A8", Rarity.RARE, mage.cards.s.SunblastAngel.class)); + cards.add(new SetCardInfo("Terastodon", "A6", Rarity.RARE, mage.cards.t.Terastodon.class)); + cards.add(new SetCardInfo("Thalia's Lancers", 47, Rarity.RARE, mage.cards.t.ThaliasLancers.class)); + cards.add(new SetCardInfo("Xathrid Necromancer", "A12", Rarity.RARE, mage.cards.x.XathridNecromancer.class)); + } +} From 89cf4fe16b29af73fdb7d3a69f37afb166bbc9f4 Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Mon, 9 Mar 2020 11:49:19 +0100 Subject: [PATCH 046/182] Removed Booster settings from Starter2000 set class, which has no boosters. --- Mage.Sets/src/mage/sets/Starter2000.java | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/Mage.Sets/src/mage/sets/Starter2000.java b/Mage.Sets/src/mage/sets/Starter2000.java index ef18ba34486..f4956946dc1 100644 --- a/Mage.Sets/src/mage/sets/Starter2000.java +++ b/Mage.Sets/src/mage/sets/Starter2000.java @@ -22,11 +22,7 @@ public final class Starter2000 extends ExpansionSet { this.blockName = "Beginner"; this.hasBasicLands = true; this.hasBoosters = false; - this.numBoosterLands = 1; - this.numBoosterCommon = 10; - this.numBoosterUncommon = 3; - this.numBoosterRare = 1; - this.ratioBoosterMythic = 0; + cards.add(new SetCardInfo("Angelic Blessing", 1, Rarity.COMMON, mage.cards.a.AngelicBlessing.class)); cards.add(new SetCardInfo("Armored Pegasus", 2, Rarity.COMMON, mage.cards.a.ArmoredPegasus.class)); cards.add(new SetCardInfo("Bog Imp", 22, Rarity.COMMON, mage.cards.b.BogImp.class)); From abadabe3249110c4657c71a687aaee42b7212ae5 Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Mon, 9 Mar 2020 12:00:02 +0100 Subject: [PATCH 047/182] Added new cards to the Pro Tour Promos (PPRO) promotional set. --- Mage.Sets/src/mage/sets/ProTourPromos.java | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/Mage.Sets/src/mage/sets/ProTourPromos.java b/Mage.Sets/src/mage/sets/ProTourPromos.java index 9c38aea0ab5..5ecb5a09fbc 100644 --- a/Mage.Sets/src/mage/sets/ProTourPromos.java +++ b/Mage.Sets/src/mage/sets/ProTourPromos.java @@ -6,7 +6,8 @@ import mage.constants.Rarity; import mage.constants.SetType; /** - * + * https://scryfall.com/sets/ppro + * https://mtg.gamepedia.com/Promotional_cards#Pro_tour_cards * @author JayDi85 */ public final class ProTourPromos extends ExpansionSet { @@ -21,16 +22,27 @@ public final class ProTourPromos extends ExpansionSet { super("Pro Tour Promos", "PPRO", ExpansionSet.buildDate(2007, 2, 9), SetType.PROMOTIONAL); this.hasBoosters = false; this.hasBasicLands = false; - // https://mtg.gamepedia.com/Promotional_cards#Pro_tour_cards + /* Commented cards are Japanese-only printings. + * Stance on non-english cards: + * https://github.com/magefree/mage/pull/6190#issuecomment-582353697 + * https://github.com/magefree/mage/pull/6190#issuecomment-582354790 + */ + cards.add(new SetCardInfo("Aether Vial", "2020-3", Rarity.RARE, mage.cards.a.AetherVial.class)); cards.add(new SetCardInfo("Ajani Goldmane", 2011, Rarity.MYTHIC, mage.cards.a.AjaniGoldmane.class)); + cards.add(new SetCardInfo("Arcbound Ravager", 2019, Rarity.RARE, mage.cards.a.ArcboundRavager.class)); cards.add(new SetCardInfo("Avatar of Woe", 2010, Rarity.RARE, mage.cards.a.AvatarOfWoe.class)); + cards.add(new SetCardInfo("Cryptic Command", "2020-1", Rarity.RARE, mage.cards.c.CrypticCommand.class)); cards.add(new SetCardInfo("Emrakul, the Aeons Torn", 2017, Rarity.MYTHIC, mage.cards.e.EmrakulTheAeonsTorn.class)); cards.add(new SetCardInfo("Eternal Dragon", 2007, Rarity.RARE, mage.cards.e.EternalDragon.class)); + //cards.add(new SetCardInfo("Experimental Frenzy", "2019-2", Rarity.RARE, mage.cards.e.ExperimentalFrenzy.class)); cards.add(new SetCardInfo("Liliana of the Veil", 2015, Rarity.MYTHIC, mage.cards.l.LilianaOfTheVeil.class)); cards.add(new SetCardInfo("Mirari's Wake", 2008, Rarity.RARE, mage.cards.m.MirarisWake.class)); cards.add(new SetCardInfo("Noble Hierarch", 2018, Rarity.RARE, mage.cards.n.NobleHierarch.class)); + //cards.add(new SetCardInfo("Pteramander", "2019-1", Rarity.UNCOMMON, mage.cards.p.Pteramander.class)); cards.add(new SetCardInfo("Snapcaster Mage", 2016, Rarity.MYTHIC, mage.cards.s.SnapcasterMage.class)); + cards.add(new SetCardInfo("Surgical Extraction", "2020-2", Rarity.RARE, mage.cards.s.SurgicalExtraction.class)); cards.add(new SetCardInfo("Treva, the Renewer", 2009, Rarity.RARE, mage.cards.t.TrevaTheRenewer.class)); + //cards.add(new SetCardInfo("Vraska, Golgari Queen", "2019-3", Rarity.MYTHIC, mage.cards.v.VraskaGolgariQueen.class)); } } From 71bdc431dbe398284a77da45f152e248a390178f Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Mon, 9 Mar 2020 12:25:42 +0100 Subject: [PATCH 048/182] Aligned Grand Prix Promos set code with Scryfall. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit (GPX → PGPX) --- .../Goblins Deck Wins TDtB ST Apr 2011.mwDeck.dck | 2 +- ...) 58 World Championship 2004 (San Francisco) ST 9-5-04.dck | 2 +- Mage.Client/src/main/java/mage/client/cards/DragCardGrid.java | 2 +- .../java/org/mage/plugins/card/dl/sources/GathererSets.java | 2 +- .../plugins/card/dl/sources/ScryfallImageSupportCards.java | 3 +-- .../mage/plugins/card/dl/sources/WizardCardsImageSource.java | 2 +- Mage.Client/src/main/resources/card-pictures-tok.txt | 4 ++-- Mage.Sets/src/mage/sets/GrandPrixPromos.java | 2 +- Mage.Verify/src/main/java/mage/verify/MtgJson.java | 1 - Utils/mtg-sets-data.txt | 2 +- 10 files changed, 10 insertions(+), 12 deletions(-) diff --git a/Mage.Client/release/sample-decks/Decks to Beat/Goblins Deck Wins TDtB ST Apr 2011.mwDeck.dck b/Mage.Client/release/sample-decks/Decks to Beat/Goblins Deck Wins TDtB ST Apr 2011.mwDeck.dck index a3db2606fde..729cfcb3cb4 100644 --- a/Mage.Client/release/sample-decks/Decks to Beat/Goblins Deck Wins TDtB ST Apr 2011.mwDeck.dck +++ b/Mage.Client/release/sample-decks/Decks to Beat/Goblins Deck Wins TDtB ST Apr 2011.mwDeck.dck @@ -18,7 +18,7 @@ 1 [LEA:283] Mountain 1 [MMQ:345] Mountain 1 [RAV:300] Mountain -2 [GPX:6] Goblin Guide +2 [PGPX:6] Goblin Guide 4 [M11:135] Ember Hauler 2 [JGP:1] Lightning Bolt 1 [M10:146] Lightning Bolt diff --git a/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Affinity(2) 58 World Championship 2004 (San Francisco) ST 9-5-04.dck b/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Affinity(2) 58 World Championship 2004 (San Francisco) ST 9-5-04.dck index 431d4219fa2..b30601649dc 100644 --- a/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Affinity(2) 58 World Championship 2004 (San Francisco) ST 9-5-04.dck +++ b/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Affinity(2) 58 World Championship 2004 (San Francisco) ST 9-5-04.dck @@ -12,7 +12,7 @@ 2 [7ED:327] City of Brass 1 [MRD:172] Frogmite 2 [INV:299] Chromatic Sphere -2 [GPX:3] Chrome Mox +2 [PGPX:3] Chrome Mox 1 [MRD:151] Chromatic Sphere 1 [MRD:152] Chrome Mox 1 [5DN:113] Cranial Plating diff --git a/Mage.Client/src/main/java/mage/client/cards/DragCardGrid.java b/Mage.Client/src/main/java/mage/client/cards/DragCardGrid.java index 7d9798b0f15..27e901d2ce1 100644 --- a/Mage.Client/src/main/java/mage/client/cards/DragCardGrid.java +++ b/Mage.Client/src/main/java/mage/client/cards/DragCardGrid.java @@ -1588,7 +1588,7 @@ public class DragCardGrid extends JPanel implements DragCardSource, DragCardTarg pimpedSets.put("MGDC", 1); pimpedSets.put("EXP", 1); - pimpedSets.put("GPX", 1); + pimpedSets.put("PGPX", 1); pimpedSets.put("GRC", 1); pimpedSets.put("MBP", 1); pimpedSets.put("MLP", 1); diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/GathererSets.java b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/GathererSets.java index 93686c142e1..26887719432 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/GathererSets.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/GathererSets.java @@ -63,7 +63,7 @@ public class GathererSets implements Iterable { "W16", "W17", // "PALP" -- Gatherer does not have the set Asia Pacific Land Program // "ATH" -- has cards from many sets, symbol does not exist on gatherer - // "CLASH", "CP", "DPA", "PELP", "GPX", "GRC", "GUR", "H17", "JR", "MBP", "MGDC", "MLP", "PPRE", "SUS", "SWS", "WMCQ", // need to fix + // "CLASH", "CP", "DPA", "PELP", "PGPX", "GRC", "GUR", "H17", "JR", "MBP", "MGDC", "MLP", "PPRE", "SUS", "SWS", "WMCQ", // need to fix "H09", "PD2", "PD3", "UNH", "CM1", "V11", "A25", "UST", "IMA", "DD2", "EVG", "DDC", "DDE", "DDD", "8EB", "9EB", "CHR", "G18", "DD3GVL", "S00", "S99", "UGL" // ok // current testing }; diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java index 2e350bd87be..44832225b99 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java @@ -20,7 +20,6 @@ public class ScryfallImageSupportCards { put("MPS-AKH", "mp2"). put("MBP", "pmei"). put("WMCQ", "pwcq"). - put("GPX", "pgpx"). put("MED", "me1"). put("MEDM", "med"). build(); @@ -298,7 +297,7 @@ public class ScryfallImageSupportCards { // add("PALP"); add("PELP"); - add("GPX"); + add("PGPX"); add("ATH"); add("GRC"); add("ANA"); diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/WizardCardsImageSource.java b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/WizardCardsImageSource.java index b34fc273308..dd1b9055b75 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/WizardCardsImageSource.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/WizardCardsImageSource.java @@ -338,7 +338,7 @@ public enum WizardCardsImageSource implements CardImageSource { setsAliases.put("FRF", "Fate Reforged"); setsAliases.put("FUT", "Future Sight"); setsAliases.put("GPT", "Guildpact"); - setsAliases.put("GPX", "Grand Prix"); + setsAliases.put("PGPX", "Grand Prix"); setsAliases.put("GRC", "WPN Gateway"); setsAliases.put("GTC", "Gatecrash"); setsAliases.put("H09", "Premium Deck Series: Slivers"); diff --git a/Mage.Client/src/main/resources/card-pictures-tok.txt b/Mage.Client/src/main/resources/card-pictures-tok.txt index c56043696f9..1ef4df299c7 100644 --- a/Mage.Client/src/main/resources/card-pictures-tok.txt +++ b/Mage.Client/src/main/resources/card-pictures-tok.txt @@ -12,8 +12,8 @@ #|Generate|TOK:CHK|Dragon Spirit|| #|Generate|TOK:FNMP|Centaur|| #|Generate|TOK:FNMP|Wurm|| -#|Generate|TOK:GPX|Elephant|| -#|Generate|TOK:GPX|Germ|| +#|Generate|TOK:PGPX|Elephant|| +#|Generate|TOK:PGPX|Germ|| #|Generate|TOK:GRC|Bird|| #|Generate|TOK:GRC|Golem|| #|Generate|TOK:GRC|Human|| diff --git a/Mage.Sets/src/mage/sets/GrandPrixPromos.java b/Mage.Sets/src/mage/sets/GrandPrixPromos.java index b3362b716fa..5bd3865dd58 100644 --- a/Mage.Sets/src/mage/sets/GrandPrixPromos.java +++ b/Mage.Sets/src/mage/sets/GrandPrixPromos.java @@ -17,7 +17,7 @@ public final class GrandPrixPromos extends ExpansionSet { } private GrandPrixPromos() { - super("Grand Prix Promos", "GPX", ExpansionSet.buildDate(2011, 6, 17), SetType.PROMOTIONAL); + super("Grand Prix Promos", "PGPX", ExpansionSet.buildDate(2011, 6, 17), SetType.PROMOTIONAL); this.hasBoosters = false; this.hasBasicLands = true; diff --git a/Mage.Verify/src/main/java/mage/verify/MtgJson.java b/Mage.Verify/src/main/java/mage/verify/MtgJson.java index 05af9030a55..dd12823d154 100644 --- a/Mage.Verify/src/main/java/mage/verify/MtgJson.java +++ b/Mage.Verify/src/main/java/mage/verify/MtgJson.java @@ -36,7 +36,6 @@ public final class MtgJson { mtgJsonToXMageCodes.put("pGTW", "GRC"); // pGTW - Gateway = GRC (WPN + Gateway in one inner set) mtgJsonToXMageCodes.put("pWPN", "GRC"); // pWPN - Wizards Play Network = GRC (WPN + Gateway in one inner set) mtgJsonToXMageCodes.put("pGRU", "GUR"); - mtgJsonToXMageCodes.put("pGPX", "GPX"); mtgJsonToXMageCodes.put("pFNM", "FNMP"); mtgJsonToXMageCodes.put("pELP", "PELP"); mtgJsonToXMageCodes.put("pARL", "PARL"); // TODO: What about the other Arena League sets (1999-2006)? diff --git a/Utils/mtg-sets-data.txt b/Utils/mtg-sets-data.txt index 902970036bf..dcf78d3f08f 100644 --- a/Utils/mtg-sets-data.txt +++ b/Utils/mtg-sets-data.txt @@ -98,7 +98,7 @@ Future Sight|FUT| Global Series: Jiang Yanggu & Mu Yanling|GS1| Guildpact|GPT| Guilds of Ravnica|GRN| -Grand Prix|GPX| +Grand Prix|PGPX| WPN Gateway|GRC| Gatecrash|GTC| Guru|GUR| From 763a9367207a5fca856071585e5f8279327c0465 Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Mon, 9 Mar 2020 12:31:52 +0100 Subject: [PATCH 049/182] Added the Tenth Edition Promos (P10E) set. --- .../src/mage/sets/TenthEditionPromos.java | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/TenthEditionPromos.java diff --git a/Mage.Sets/src/mage/sets/TenthEditionPromos.java b/Mage.Sets/src/mage/sets/TenthEditionPromos.java new file mode 100644 index 00000000000..665c4df14af --- /dev/null +++ b/Mage.Sets/src/mage/sets/TenthEditionPromos.java @@ -0,0 +1,25 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/p10e + */ +public class TenthEditionPromos extends ExpansionSet { + + private static final TenthEditionPromos instance = new TenthEditionPromos(); + + public static TenthEditionPromos getInstance() { + return instance; + } + + private TenthEditionPromos() { + super("Tenth Edition Promos", "P10E", ExpansionSet.buildDate(2007, 7, 13), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Reya Dawnbringer", 35, Rarity.RARE, mage.cards.r.ReyaDawnbringer.class)); + } +} From e9f81d4c4c8e4f7e096d85417de5fd5c0d2a1a56 Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Mon, 9 Mar 2020 12:34:29 +0100 Subject: [PATCH 050/182] Added the Summer of Magic (PSUM) promotional set. --- Mage.Sets/src/mage/sets/SummerOfMagic.java | 27 ++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/SummerOfMagic.java diff --git a/Mage.Sets/src/mage/sets/SummerOfMagic.java b/Mage.Sets/src/mage/sets/SummerOfMagic.java new file mode 100644 index 00000000000..54320f5e435 --- /dev/null +++ b/Mage.Sets/src/mage/sets/SummerOfMagic.java @@ -0,0 +1,27 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/psum + * This is not the "Summer Magic" Revised printing. + */ +public class SummerOfMagic extends ExpansionSet { + + private static final SummerOfMagic instance = new SummerOfMagic(); + + public static SummerOfMagic getInstance() { + return instance; + } + + private SummerOfMagic() { + super("Summer of Magic", "PSUM", ExpansionSet.buildDate(2007, 7, 21), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Faerie Conclave", 1, Rarity.RARE, mage.cards.f.FaerieConclave.class)); + cards.add(new SetCardInfo("Treetop Village", 2, Rarity.RARE, mage.cards.t.TreetopVillage.class)); + } +} From 3066e1d84948a5baf956f24450bc1e45ad3e7cd6 Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Mon, 9 Mar 2020 12:43:45 +0100 Subject: [PATCH 051/182] Added the Launch Parties (PLPA) promotional set. --- Mage.Sets/src/mage/sets/LaunchParties.java | 30 ++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/LaunchParties.java diff --git a/Mage.Sets/src/mage/sets/LaunchParties.java b/Mage.Sets/src/mage/sets/LaunchParties.java new file mode 100644 index 00000000000..8beb167b1d3 --- /dev/null +++ b/Mage.Sets/src/mage/sets/LaunchParties.java @@ -0,0 +1,30 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/plpa + */ +public class LaunchParties extends ExpansionSet { + + private static final LaunchParties instance = new LaunchParties(); + + public static LaunchParties getInstance() { + return instance; + } + + private LaunchParties() { + super("Launch Parties", "PLPA", ExpansionSet.buildDate(2014, 6, 6), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Earwig Squad", 1, Rarity.RARE, mage.cards.e.EarwigSquad.class)); + cards.add(new SetCardInfo("Figure of Destiny", 3, Rarity.RARE, mage.cards.f.FigureOfDestiny.class)); + cards.add(new SetCardInfo("Knight of New Alara", 6, Rarity.RARE, mage.cards.k.KnightOfNewAlara.class)); + cards.add(new SetCardInfo("Magister of Worth", 7, Rarity.RARE, mage.cards.m.MagisterOfWorth.class)); + cards.add(new SetCardInfo("Obelisk of Alara", 5, Rarity.RARE, mage.cards.o.ObeliskOfAlara.class)); + cards.add(new SetCardInfo("Vexing Shusher", 2, Rarity.RARE, mage.cards.v.VexingShusher.class)); + } +} From 7f5eb137fc7081f3e46623bc4ded2cc8950aa62a Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Sun, 15 Mar 2020 17:20:23 +0100 Subject: [PATCH 052/182] Added the 15th Anniversary Cards (P15A) promotional set. --- .../mage/sets/FifteenthAnniversaryCards.java | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/FifteenthAnniversaryCards.java diff --git a/Mage.Sets/src/mage/sets/FifteenthAnniversaryCards.java b/Mage.Sets/src/mage/sets/FifteenthAnniversaryCards.java new file mode 100644 index 00000000000..b09c0dee99d --- /dev/null +++ b/Mage.Sets/src/mage/sets/FifteenthAnniversaryCards.java @@ -0,0 +1,26 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/p15a + */ +public class FifteenthAnniversaryCards extends ExpansionSet { + + private static final FifteenthAnniversaryCards instance = new FifteenthAnniversaryCards(); + + public static FifteenthAnniversaryCards getInstance() { + return instance; + } + + private FifteenthAnniversaryCards() { + super("Fifteenth Anniversary Cards", "P15A", ExpansionSet.buildDate(2008, 4, 1), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Char", 1, Rarity.RARE, mage.cards.c.Char.class)); + cards.add(new SetCardInfo("Kamahl, Pit Fighter", 2, Rarity.RARE, mage.cards.k.KamahlPitFighter.class)); + } +} From e0017752b6594abba2031bd70e66977e80aec10e Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Sun, 15 Mar 2020 17:22:14 +0100 Subject: [PATCH 053/182] Added the Wizards Play Network 2008 (PWPN) promotional set. --- .../src/mage/sets/WizardsPlayNetwork2008.java | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/WizardsPlayNetwork2008.java diff --git a/Mage.Sets/src/mage/sets/WizardsPlayNetwork2008.java b/Mage.Sets/src/mage/sets/WizardsPlayNetwork2008.java new file mode 100644 index 00000000000..f192ec8322e --- /dev/null +++ b/Mage.Sets/src/mage/sets/WizardsPlayNetwork2008.java @@ -0,0 +1,26 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/pwpn + */ +public class WizardsPlayNetwork2008 extends ExpansionSet { + + private static final WizardsPlayNetwork2008 instance = new WizardsPlayNetwork2008(); + + public static WizardsPlayNetwork2008 getInstance() { + return instance; + } + + private WizardsPlayNetwork2008() { + super("Wizards Play Network 2008", "PWPN", ExpansionSet.buildDate(2008, 10, 1), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Sprouting Thrinax", 21, Rarity.RARE, mage.cards.s.SproutingThrinax.class)); + cards.add(new SetCardInfo("Woolly Thoctar", 22, Rarity.RARE, mage.cards.w.WoollyThoctar.class)); + } +} From e47afa36e530a7b71bd09bef2aee116d5fcd7996 Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Sun, 15 Mar 2020 17:28:06 +0100 Subject: [PATCH 054/182] Added the URL/Convention Promos (PURL) promotional set. --- .../src/mage/sets/URLConventionPromos.java | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/URLConventionPromos.java diff --git a/Mage.Sets/src/mage/sets/URLConventionPromos.java b/Mage.Sets/src/mage/sets/URLConventionPromos.java new file mode 100644 index 00000000000..8f10cb5898c --- /dev/null +++ b/Mage.Sets/src/mage/sets/URLConventionPromos.java @@ -0,0 +1,35 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/purl + */ +public class URLConventionPromos extends ExpansionSet { + + private static final URLConventionPromos instance = new URLConventionPromos(); + + public static URLConventionPromos getInstance() { + return instance; + } + + private URLConventionPromos() { + super("URL/Convention Promos", "PURL", ExpansionSet.buildDate(2015, 1, 23), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Aeronaut Tinkerer", 8, Rarity.COMMON, mage.cards.a.AeronautTinkerer.class)); + cards.add(new SetCardInfo("Bloodthrone Vampire", 3, Rarity.RARE, mage.cards.b.BloodthroneVampire.class)); + cards.add(new SetCardInfo("Chandra's Fury", 5, Rarity.RARE, mage.cards.c.ChandrasFury.class)); + cards.add(new SetCardInfo("Kor Skyfisher", 2, Rarity.RARE, mage.cards.k.KorSkyfisher.class)); + cards.add(new SetCardInfo("Merfolk Mesmerist", 4, Rarity.RARE, mage.cards.m.MerfolkMesmerist.class)); + // Italian-only printing + //cards.add(new SetCardInfo("Relentless Rats", 9, Rarity.RARE, mage.cards.r.RelentlessRats.class)); + // Japanese-only printing + //cards.add(new SetCardInfo("Shepherd of the Lost", "34*", Rarity.UNCOMMON, mage.cards.s.ShepherdOfTheLost.class)); + cards.add(new SetCardInfo("Stealer of Secrets", 7, Rarity.RARE, mage.cards.s.StealerOfSecrets.class)); + cards.add(new SetCardInfo("Steward of Valeron", 1, Rarity.RARE, mage.cards.s.StewardOfValeron.class)); + } +} From ddf3904c13235f49e29a3c848837463134865735 Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Sun, 15 Mar 2020 17:31:17 +0100 Subject: [PATCH 055/182] Added the Wizards Play Network 2009 (PWP09) and 2010 (PWP10) promotional sets. --- .../src/mage/sets/WizardsPlayNetwork2009.java | 32 +++++++++++++++++ .../src/mage/sets/WizardsPlayNetwork2010.java | 34 +++++++++++++++++++ 2 files changed, 66 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/WizardsPlayNetwork2009.java create mode 100644 Mage.Sets/src/mage/sets/WizardsPlayNetwork2010.java diff --git a/Mage.Sets/src/mage/sets/WizardsPlayNetwork2009.java b/Mage.Sets/src/mage/sets/WizardsPlayNetwork2009.java new file mode 100644 index 00000000000..52ca5d02dd0 --- /dev/null +++ b/Mage.Sets/src/mage/sets/WizardsPlayNetwork2009.java @@ -0,0 +1,32 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/pwp09 + */ +public class WizardsPlayNetwork2009 extends ExpansionSet { + + private static final WizardsPlayNetwork2009 instance = new WizardsPlayNetwork2009(); + + public static WizardsPlayNetwork2009 getInstance() { + return instance; + } + + private WizardsPlayNetwork2009() { + super("Wizards Play Network 2009", "PWP09", ExpansionSet.buildDate(2009, 1, 1), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Hellspark Elemental", 25, Rarity.RARE, mage.cards.h.HellsparkElemental.class)); + cards.add(new SetCardInfo("Kor Duelist", 32, Rarity.RARE, mage.cards.k.KorDuelist.class)); + cards.add(new SetCardInfo("Marisi's Twinclaws", 26, Rarity.RARE, mage.cards.m.MarisisTwinclaws.class)); + cards.add(new SetCardInfo("Mind Control", 30, Rarity.RARE, mage.cards.m.MindControl.class)); + cards.add(new SetCardInfo("Path to Exile", 24, Rarity.RARE, mage.cards.p.PathToExile.class)); + cards.add(new SetCardInfo("Rise from the Grave", 31, Rarity.RARE, mage.cards.r.RiseFromTheGrave.class)); + cards.add(new SetCardInfo("Slave of Bolas", 27, Rarity.RARE, mage.cards.s.SlaveOfBolas.class)); + cards.add(new SetCardInfo("Vampire Nighthawk", 33, Rarity.RARE, mage.cards.v.VampireNighthawk.class)); + } +} diff --git a/Mage.Sets/src/mage/sets/WizardsPlayNetwork2010.java b/Mage.Sets/src/mage/sets/WizardsPlayNetwork2010.java new file mode 100644 index 00000000000..e76290fd14c --- /dev/null +++ b/Mage.Sets/src/mage/sets/WizardsPlayNetwork2010.java @@ -0,0 +1,34 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/pwp10 + */ +public class WizardsPlayNetwork2010 extends ExpansionSet { + + private static final WizardsPlayNetwork2010 instance = new WizardsPlayNetwork2010(); + + public static WizardsPlayNetwork2010 getInstance() { + return instance; + } + + private WizardsPlayNetwork2010() { + super("Wizards Play Network 2010", "PWP10", ExpansionSet.buildDate(2010, 1, 1), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Curse of Wizardry", 47, Rarity.RARE, mage.cards.c.CurseOfWizardry.class)); + cards.add(new SetCardInfo("Fling", 50, Rarity.RARE, mage.cards.f.Fling.class)); + cards.add(new SetCardInfo("Golem's Heart", 60, Rarity.RARE, mage.cards.g.GolemsHeart.class)); + cards.add(new SetCardInfo("Kor Firewalker", 36, Rarity.RARE, mage.cards.k.KorFirewalker.class)); + cards.add(new SetCardInfo("Leatherback Baloth", 37, Rarity.RARE, mage.cards.l.LeatherbackBaloth.class)); + cards.add(new SetCardInfo("Pathrazer of Ulamog", 46, Rarity.RARE, mage.cards.p.PathrazerOfUlamog.class)); + cards.add(new SetCardInfo("Plague Stinger", 59, Rarity.RARE, mage.cards.p.PlagueStinger.class)); + cards.add(new SetCardInfo("Skinrender", 63, Rarity.RARE, mage.cards.s.Skinrender.class)); + cards.add(new SetCardInfo("Sylvan Ranger", 51, Rarity.RARE, mage.cards.s.SylvanRanger.class)); + cards.add(new SetCardInfo("Syphon Mind", 40, Rarity.RARE, mage.cards.s.SyphonMind.class)); + } +} From e497ea51b18afd69be092989203fc580db7e74b4 Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Sun, 15 Mar 2020 17:34:19 +0100 Subject: [PATCH 056/182] Added the Worldwake Promos (PWWK) promotional set. --- Mage.Sets/src/mage/sets/WorldwakePromos.java | 31 ++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/WorldwakePromos.java diff --git a/Mage.Sets/src/mage/sets/WorldwakePromos.java b/Mage.Sets/src/mage/sets/WorldwakePromos.java new file mode 100644 index 00000000000..fb6fceeb3e7 --- /dev/null +++ b/Mage.Sets/src/mage/sets/WorldwakePromos.java @@ -0,0 +1,31 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/pwwk + */ +public class WorldwakePromos extends ExpansionSet { + + private static final WorldwakePromos instance = new WorldwakePromos(); + + public static WorldwakePromos getInstance() { + return instance; + } + + private WorldwakePromos() { + super("Worldwake Promos", "PWWK", ExpansionSet.buildDate(2010, 7, 30), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Celestial Colonnade", 133, Rarity.RARE, mage.cards.c.CelestialColonnade.class)); + cards.add(new SetCardInfo("Comet Storm", 76, Rarity.MYTHIC, mage.cards.c.CometStorm.class)); + cards.add(new SetCardInfo("Hada Freeblade", 38, Rarity.RARE, mage.cards.h.HadaFreeblade.class)); + cards.add(new SetCardInfo("Joraga Warcaller", 106, Rarity.RARE, mage.cards.j.JoragaWarcaller.class)); + cards.add(new SetCardInfo("Kalastria Highborn", 39, Rarity.RARE, mage.cards.k.KalastriaHighborn.class)); + // Japanese-only printing + //cards.add(new SetCardInfo("Ruthless Cullblade", "65*", Rarity.COMMON, mage.cards.r.RuthlessCullblade.class)); + } +} From dfc9e00a99c153cc1ab82ad41405e9024a34bcf0 Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Sun, 15 Mar 2020 17:36:27 +0100 Subject: [PATCH 057/182] Added the Rise of the Eldrazi Promos (PROE) promotional set. --- .../src/mage/sets/RiseOfTheEldraziPromos.java | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/RiseOfTheEldraziPromos.java diff --git a/Mage.Sets/src/mage/sets/RiseOfTheEldraziPromos.java b/Mage.Sets/src/mage/sets/RiseOfTheEldraziPromos.java new file mode 100644 index 00000000000..ef0f3a7adc8 --- /dev/null +++ b/Mage.Sets/src/mage/sets/RiseOfTheEldraziPromos.java @@ -0,0 +1,31 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/proe + */ +public class RiseOfTheEldraziPromos extends ExpansionSet { + + private static final RiseOfTheEldraziPromos instance = new RiseOfTheEldraziPromos(); + + public static RiseOfTheEldraziPromos getInstance() { + return instance; + } + + private RiseOfTheEldraziPromos() { + super("Rise of the Eldrazi Promos", "PROE", ExpansionSet.buildDate(2010, 7, 30), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Deathless Angel", 49, Rarity.RARE, mage.cards.d.DeathlessAngel.class)); + cards.add(new SetCardInfo("Emrakul, the Aeons Torn", 4, Rarity.RARE, mage.cards.e.EmrakulTheAeonsTorn.class)); + cards.add(new SetCardInfo("Guul Draz Assassin", 112, Rarity.RARE, mage.cards.g.GuulDrazAssassin.class)); + cards.add(new SetCardInfo("Lord of Shatterskull Pass", 156, Rarity.RARE, mage.cards.l.LordOfShatterskullPass.class)); + // Japanese-only printing + //cards.add(new SetCardInfo("Pestilence Demon", 124, Rarity.RARE, mage.cards.p.PestilenceDemon.class)); + cards.add(new SetCardInfo("Staggershock", 48, Rarity.RARE, mage.cards.s.Staggershock.class)); + } +} From 10616eedd82aa914c205d51c3a95147752ebc5dd Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Sun, 15 Mar 2020 17:42:49 +0100 Subject: [PATCH 058/182] Added the Zendikar Promos (PZEN) promotional set. --- Mage.Sets/src/mage/sets/ZendikarPromos.java | 29 +++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/ZendikarPromos.java diff --git a/Mage.Sets/src/mage/sets/ZendikarPromos.java b/Mage.Sets/src/mage/sets/ZendikarPromos.java new file mode 100644 index 00000000000..08887fa91de --- /dev/null +++ b/Mage.Sets/src/mage/sets/ZendikarPromos.java @@ -0,0 +1,29 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/pzen + */ +public class ZendikarPromos extends ExpansionSet { + + private static final ZendikarPromos instance = new ZendikarPromos(); + + public static ZendikarPromos getInstance() { + return instance; + } + + private ZendikarPromos() { + super("Zendikar Promos", "PZEN", ExpansionSet.buildDate(2009, 10, 2), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Day of Judgment", "*9", Rarity.RARE, mage.cards.d.DayOfJudgment.class)); + cards.add(new SetCardInfo("Emeria Angel", 35, Rarity.RARE, mage.cards.e.EmeriaAngel.class)); + cards.add(new SetCardInfo("Nissa's Chosen", 34, Rarity.RARE, mage.cards.n.NissasChosen.class)); + cards.add(new SetCardInfo("Rampaging Baloths", "*178", Rarity.MYTHIC, mage.cards.r.RampagingBaloths.class)); + cards.add(new SetCardInfo("Valakut, the Molten Pinnacle", "*228", Rarity.RARE, mage.cards.v.ValakutTheMoltenPinnacle.class)); + } +} From 3d3c298ad518e54717e86484da531a0f78ce9e77 Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Sun, 15 Mar 2020 17:44:53 +0100 Subject: [PATCH 059/182] Added the Core set M10-M15 promo sets: - Magic 2010 Promos (PM10) - Magic 2011 Promos (PM11) - Magic 2012 Promos (PM12) - Magic 2013 Promos (PM13) - Magic 2014 Promos (PM14) - Magic 2015 Promos (PM15) --- Mage.Sets/src/mage/sets/Magic2010Promos.java | 29 ++++++++++++++++ Mage.Sets/src/mage/sets/Magic2011Promos.java | 29 ++++++++++++++++ Mage.Sets/src/mage/sets/Magic2012Promos.java | 29 ++++++++++++++++ Mage.Sets/src/mage/sets/Magic2013Promos.java | 29 ++++++++++++++++ Mage.Sets/src/mage/sets/Magic2014Promos.java | 29 ++++++++++++++++ Mage.Sets/src/mage/sets/Magic2015Promos.java | 35 ++++++++++++++++++++ 6 files changed, 180 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/Magic2010Promos.java create mode 100644 Mage.Sets/src/mage/sets/Magic2011Promos.java create mode 100644 Mage.Sets/src/mage/sets/Magic2012Promos.java create mode 100644 Mage.Sets/src/mage/sets/Magic2013Promos.java create mode 100644 Mage.Sets/src/mage/sets/Magic2014Promos.java create mode 100644 Mage.Sets/src/mage/sets/Magic2015Promos.java diff --git a/Mage.Sets/src/mage/sets/Magic2010Promos.java b/Mage.Sets/src/mage/sets/Magic2010Promos.java new file mode 100644 index 00000000000..01ed55925fe --- /dev/null +++ b/Mage.Sets/src/mage/sets/Magic2010Promos.java @@ -0,0 +1,29 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/pm10 + */ +public class Magic2010Promos extends ExpansionSet { + + private static final Magic2010Promos instance = new Magic2010Promos(); + + public static Magic2010Promos getInstance() { + return instance; + } + + private Magic2010Promos() { + super("Magic 2010 Promos", "PM10", ExpansionSet.buildDate(2009, 7, 16), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Ant Queen", 166, Rarity.RARE, mage.cards.a.AntQueen.class)); + cards.add(new SetCardInfo("Honor of the Pure", "*16", Rarity.RARE, mage.cards.h.HonorOfThePure.class)); + cards.add(new SetCardInfo("Mycoid Shepherd", 28, Rarity.RARE, mage.cards.m.MycoidShepherd.class)); + cards.add(new SetCardInfo("Naya Sojourners", 29, Rarity.RARE, mage.cards.n.NayaSojourners.class)); + cards.add(new SetCardInfo("Vampire Nocturnus", 118, Rarity.MYTHIC, mage.cards.v.VampireNocturnus.class)); + } +} diff --git a/Mage.Sets/src/mage/sets/Magic2011Promos.java b/Mage.Sets/src/mage/sets/Magic2011Promos.java new file mode 100644 index 00000000000..cfae343f64f --- /dev/null +++ b/Mage.Sets/src/mage/sets/Magic2011Promos.java @@ -0,0 +1,29 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/pm11 + */ +public class Magic2011Promos extends ExpansionSet { + + private static final Magic2011Promos instance = new Magic2011Promos(); + + public static Magic2011Promos getInstance() { + return instance; + } + + private Magic2011Promos() { + super("Magic 2011 Promos", "PM11", ExpansionSet.buildDate(2010, 7, 15), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Ancient Hellkite", 122, Rarity.RARE, mage.cards.a.AncientHellkite.class)); + cards.add(new SetCardInfo("Birds of Paradise", "*165", Rarity.RARE, mage.cards.b.BirdsOfParadise.class)); + cards.add(new SetCardInfo("Liliana's Specter", 104, Rarity.COMMON, mage.cards.l.LilianasSpecter.class)); + cards.add(new SetCardInfo("Mitotic Slime", 53, Rarity.RARE, mage.cards.m.MitoticSlime.class)); + cards.add(new SetCardInfo("Sun Titan", 35, Rarity.MYTHIC, mage.cards.s.SunTitan.class)); + } +} diff --git a/Mage.Sets/src/mage/sets/Magic2012Promos.java b/Mage.Sets/src/mage/sets/Magic2012Promos.java new file mode 100644 index 00000000000..524bb93c141 --- /dev/null +++ b/Mage.Sets/src/mage/sets/Magic2012Promos.java @@ -0,0 +1,29 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/pm12 + */ +public class Magic2012Promos extends ExpansionSet { + + private static final Magic2012Promos instance = new Magic2012Promos(); + + public static Magic2012Promos getInstance() { + return instance; + } + + private Magic2012Promos() { + super("Magic 2012 Promos", "PM12", ExpansionSet.buildDate(2011, 7, 14), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Bloodlord of Vaasgoth", 82, Rarity.MYTHIC, mage.cards.b.BloodlordOfVaasgoth.class)); + cards.add(new SetCardInfo("Chandra's Phoenix", "*126", Rarity.RARE, mage.cards.c.ChandrasPhoenix.class)); + cards.add(new SetCardInfo("Dungrove Elder", 171, Rarity.RARE, mage.cards.d.DungroveElder.class)); + cards.add(new SetCardInfo("Garruk's Horde", 176, Rarity.RARE, mage.cards.g.GarruksHorde.class)); + cards.add(new SetCardInfo("Stormblood Berserker", 156, Rarity.UNCOMMON, mage.cards.s.StormbloodBerserker.class)); + } +} diff --git a/Mage.Sets/src/mage/sets/Magic2013Promos.java b/Mage.Sets/src/mage/sets/Magic2013Promos.java new file mode 100644 index 00000000000..3ae4d0973f6 --- /dev/null +++ b/Mage.Sets/src/mage/sets/Magic2013Promos.java @@ -0,0 +1,29 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/pm13 + */ +public class Magic2013Promos extends ExpansionSet { + + private static final Magic2013Promos instance = new Magic2013Promos(); + + public static Magic2013Promos getInstance() { + return instance; + } + + private Magic2013Promos() { + super("Magic 2013 Promos", "PM13", ExpansionSet.buildDate(2012, 7, 12), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Cathedral of War", "*221", Rarity.RARE, mage.cards.c.CathedralOfWar.class)); + cards.add(new SetCardInfo("Magmaquake", 140, Rarity.RARE, mage.cards.m.Magmaquake.class)); + cards.add(new SetCardInfo("Mwonvuli Beast Tracker", 177, Rarity.UNCOMMON, mage.cards.m.MwonvuliBeastTracker.class)); + cards.add(new SetCardInfo("Staff of Nin", 217, Rarity.RARE, mage.cards.s.StaffOfNin.class)); + cards.add(new SetCardInfo("Xathrid Gorgon", 118, Rarity.RARE, mage.cards.x.XathridGorgon.class)); + } +} diff --git a/Mage.Sets/src/mage/sets/Magic2014Promos.java b/Mage.Sets/src/mage/sets/Magic2014Promos.java new file mode 100644 index 00000000000..25619f0626f --- /dev/null +++ b/Mage.Sets/src/mage/sets/Magic2014Promos.java @@ -0,0 +1,29 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/pm14 + */ +public class Magic2014Promos extends ExpansionSet { + + private static final Magic2014Promos instance = new Magic2014Promos(); + + public static Magic2014Promos getInstance() { + return instance; + } + + private Magic2014Promos() { + super("Magic 2014 Promos", "PM14", ExpansionSet.buildDate(2013, 7, 18), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Colossal Whale", 48, Rarity.RARE, mage.cards.c.ColossalWhale.class)); + cards.add(new SetCardInfo("Goblin Diplomats", 141, Rarity.RARE, mage.cards.g.GoblinDiplomats.class)); + cards.add(new SetCardInfo("Hive Stirrings", 21, Rarity.COMMON, mage.cards.h.HiveStirrings.class)); + cards.add(new SetCardInfo("Megantic Sliver", 185, Rarity.RARE, mage.cards.m.MeganticSliver.class)); + cards.add(new SetCardInfo("Ratchet Bomb", 215, Rarity.RARE, mage.cards.r.RatchetBomb.class)); + } +} diff --git a/Mage.Sets/src/mage/sets/Magic2015Promos.java b/Mage.Sets/src/mage/sets/Magic2015Promos.java new file mode 100644 index 00000000000..0f275288d88 --- /dev/null +++ b/Mage.Sets/src/mage/sets/Magic2015Promos.java @@ -0,0 +1,35 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/pm15 + */ +public class Magic2015Promos extends ExpansionSet { + + private static final Magic2015Promos instance = new Magic2015Promos(); + + public static Magic2015Promos getInstance() { + return instance; + } + + private Magic2015Promos() { + super("Magic 2015 Promos", "PM15", ExpansionSet.buildDate(2014, 7, 17), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Chief Engineer", 47, Rarity.RARE, mage.cards.c.ChiefEngineer.class)); + cards.add(new SetCardInfo("Goblin Rabblemaster", 145, Rarity.RARE, mage.cards.g.GoblinRabblemaster.class)); + cards.add(new SetCardInfo("In Garruk's Wake", 100, Rarity.RARE, mage.cards.i.InGarruksWake.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("In Garruk's Wake", "100p", Rarity.RARE, mage.cards.i.InGarruksWake.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Indulgent Tormentor", 101, Rarity.RARE, mage.cards.i.IndulgentTormentor.class)); + cards.add(new SetCardInfo("Mercurial Pretender", 68, Rarity.RARE, mage.cards.m.MercurialPretender.class)); + cards.add(new SetCardInfo("Phytotitan", 191, Rarity.RARE, mage.cards.p.Phytotitan.class)); + cards.add(new SetCardInfo("Reclamation Sage", 194, Rarity.UNCOMMON, mage.cards.r.ReclamationSage.class)); + cards.add(new SetCardInfo("Resolute Archangel", 28, Rarity.RARE, mage.cards.r.ResoluteArchangel.class)); + cards.add(new SetCardInfo("Siege Dragon", 162, Rarity.RARE, mage.cards.s.SiegeDragon.class)); + cards.add(new SetCardInfo("Soul of New Phyrexia", "231p", Rarity.MYTHIC, mage.cards.s.SoulOfNewPhyrexia.class)); + } +} From 2d082925e1460b0f55c45b5b39a861faa2a5ea8f Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Sun, 15 Mar 2020 17:55:45 +0100 Subject: [PATCH 060/182] Added the Scars of Mirrodin Promos (PSOM) promotional set. --- .../src/mage/sets/ScarsOfMirrodinPromos.java | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/ScarsOfMirrodinPromos.java diff --git a/Mage.Sets/src/mage/sets/ScarsOfMirrodinPromos.java b/Mage.Sets/src/mage/sets/ScarsOfMirrodinPromos.java new file mode 100644 index 00000000000..a2b62b85a60 --- /dev/null +++ b/Mage.Sets/src/mage/sets/ScarsOfMirrodinPromos.java @@ -0,0 +1,29 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/psom + */ +public class ScarsOfMirrodinPromos extends ExpansionSet { + + private static final ScarsOfMirrodinPromos instance = new ScarsOfMirrodinPromos(); + + public static ScarsOfMirrodinPromos getInstance() { + return instance; + } + + private ScarsOfMirrodinPromos() { + super("Scars of Mirrodin Promos", "PSOM", ExpansionSet.buildDate(2010, 9, 30), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Memnite", 174, Rarity.UNCOMMON, mage.cards.m.Memnite.class)); + cards.add(new SetCardInfo("Memoricide", "*69", Rarity.RARE, mage.cards.m.Memoricide.class)); + cards.add(new SetCardInfo("Steel Hellkite", 205, Rarity.RARE, mage.cards.s.SteelHellkite.class)); + cards.add(new SetCardInfo("Tempered Steel", 24, Rarity.RARE, mage.cards.t.TemperedSteel.class)); + cards.add(new SetCardInfo("Wurmcoil Engine", 223, Rarity.MYTHIC, mage.cards.w.WurmcoilEngine.class)); + } +} From 418952dcbc692282e4cdd7ee76c17c2132dbb187 Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Sun, 15 Mar 2020 17:58:59 +0100 Subject: [PATCH 061/182] Added the Magic Online Theme Decks (TD0) set. --- .../src/mage/sets/MagicOnlineThemeDecks.java | 222 ++++++++++++++++++ 1 file changed, 222 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/MagicOnlineThemeDecks.java diff --git a/Mage.Sets/src/mage/sets/MagicOnlineThemeDecks.java b/Mage.Sets/src/mage/sets/MagicOnlineThemeDecks.java new file mode 100644 index 00000000000..82a03fbe53d --- /dev/null +++ b/Mage.Sets/src/mage/sets/MagicOnlineThemeDecks.java @@ -0,0 +1,222 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/td0 + */ +public class MagicOnlineThemeDecks extends ExpansionSet { + + private static final MagicOnlineThemeDecks instance = new MagicOnlineThemeDecks(); + + public static MagicOnlineThemeDecks getInstance() { + return instance; + } + + private MagicOnlineThemeDecks() { + super("Magic Online Theme Decks", "TD0", ExpansionSet.buildDate(2010, 11, 8), SetType.MAGIC_ONLINE); + this.hasBoosters = false; + this.hasBasicLands = true; + + cards.add(new SetCardInfo("Abyssal Gatekeeper", "A34", Rarity.COMMON, mage.cards.a.AbyssalGatekeeper.class)); + cards.add(new SetCardInfo("Aether Vial", "B27", Rarity.UNCOMMON, mage.cards.a.AetherVial.class)); + cards.add(new SetCardInfo("All Hallow's Eve", "A35", Rarity.RARE, mage.cards.a.AllHallowsEve.class)); + cards.add(new SetCardInfo("Anarchist", "A52", Rarity.COMMON, mage.cards.a.Anarchist.class)); + cards.add(new SetCardInfo("Ancient Grudge", "A53", Rarity.COMMON, mage.cards.a.AncientGrudge.class)); + cards.add(new SetCardInfo("Anger", "A54", Rarity.UNCOMMON, mage.cards.a.Anger.class)); + cards.add(new SetCardInfo("Animate Dead", "A36", Rarity.UNCOMMON, mage.cards.a.AnimateDead.class)); + cards.add(new SetCardInfo("Armadillo Cloak", "A94", Rarity.UNCOMMON, mage.cards.a.ArmadilloCloak.class)); + cards.add(new SetCardInfo("Ashes to Ashes", "A37", Rarity.UNCOMMON, mage.cards.a.AshesToAshes.class)); + cards.add(new SetCardInfo("Aura of Silence", "B1", Rarity.UNCOMMON, mage.cards.a.AuraOfSilence.class)); + cards.add(new SetCardInfo("Auramancer", "A1", Rarity.COMMON, mage.cards.a.Auramancer.class)); + cards.add(new SetCardInfo("Avatar of Woe", "A38", Rarity.RARE, mage.cards.a.AvatarOfWoe.class)); + cards.add(new SetCardInfo("Azorius Chancery", "A121", Rarity.UNCOMMON, mage.cards.a.AzoriusChancery.class)); + cards.add(new SetCardInfo("Azorius Guildmage", "A95", Rarity.UNCOMMON, mage.cards.a.AzoriusGuildmage.class)); + cards.add(new SetCardInfo("Azorius Signet", "A111", Rarity.COMMON, mage.cards.a.AzoriusSignet.class)); + cards.add(new SetCardInfo("Bant Panorama", "A122", Rarity.COMMON, mage.cards.b.BantPanorama.class)); + cards.add(new SetCardInfo("Barren Moor", "A123", Rarity.COMMON, mage.cards.b.BarrenMoor.class)); + cards.add(new SetCardInfo("Benevolent Bodyguard", "B2", Rarity.COMMON, mage.cards.b.BenevolentBodyguard.class)); + cards.add(new SetCardInfo("Bonesplitter", "B28", Rarity.COMMON, mage.cards.b.Bonesplitter.class)); + cards.add(new SetCardInfo("Borderland Ranger", "A62", Rarity.COMMON, mage.cards.b.BorderlandRanger.class)); + cards.add(new SetCardInfo("Brawn", "A63", Rarity.UNCOMMON, mage.cards.b.Brawn.class)); + cards.add(new SetCardInfo("Buried Alive", "A39", Rarity.UNCOMMON, mage.cards.b.BuriedAlive.class)); + cards.add(new SetCardInfo("Capsize", "A18", Rarity.COMMON, mage.cards.c.Capsize.class)); + cards.add(new SetCardInfo("Carrion Feeder", "A40", Rarity.COMMON, mage.cards.c.CarrionFeeder.class)); + cards.add(new SetCardInfo("Cauldron Dance", "A96", Rarity.UNCOMMON, mage.cards.c.CauldronDance.class)); + cards.add(new SetCardInfo("Chain Lightning", "A55", Rarity.COMMON, mage.cards.c.ChainLightning.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Chain Lightning", "B14", Rarity.COMMON, mage.cards.c.ChainLightning.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Chartooth Cougar", "A56", Rarity.COMMON, mage.cards.c.ChartoothCougar.class)); + cards.add(new SetCardInfo("Civic Wayfinder", "A64", Rarity.COMMON, mage.cards.c.CivicWayfinder.class)); + cards.add(new SetCardInfo("Coastal Tower", "A124", Rarity.UNCOMMON, mage.cards.c.CoastalTower.class)); + cards.add(new SetCardInfo("Coiling Oracle", "A97", Rarity.UNCOMMON, mage.cards.c.CoilingOracle.class)); + cards.add(new SetCardInfo("Compulsive Research", "A19", Rarity.COMMON, mage.cards.c.CompulsiveResearch.class)); + cards.add(new SetCardInfo("Concordant Crossroads", "A65", Rarity.UNCOMMON, mage.cards.c.ConcordantCrossroads.class)); + cards.add(new SetCardInfo("Condemn", "A2", Rarity.UNCOMMON, mage.cards.c.Condemn.class)); + cards.add(new SetCardInfo("Confiscate", "A20", Rarity.UNCOMMON, mage.cards.c.Confiscate.class)); + cards.add(new SetCardInfo("Constant Mists", "A66", Rarity.UNCOMMON, mage.cards.c.ConstantMists.class)); + cards.add(new SetCardInfo("Copy Enchantment", "A21", Rarity.RARE, mage.cards.c.CopyEnchantment.class)); + cards.add(new SetCardInfo("Court Hussar", "A22", Rarity.UNCOMMON, mage.cards.c.CourtHussar.class)); + cards.add(new SetCardInfo("Darigaaz's Caldera", "A125", Rarity.UNCOMMON, mage.cards.d.DarigaazsCaldera.class)); + cards.add(new SetCardInfo("Decree of Justice", "A3", Rarity.RARE, mage.cards.d.DecreeOfJustice.class)); + cards.add(new SetCardInfo("Dismantling Blow", "A4", Rarity.COMMON, mage.cards.d.DismantlingBlow.class)); + cards.add(new SetCardInfo("Dread Return", "A41", Rarity.UNCOMMON, mage.cards.d.DreadReturn.class)); + cards.add(new SetCardInfo("Edge of Autumn", "A67", Rarity.COMMON, mage.cards.e.EdgeOfAutumn.class)); + cards.add(new SetCardInfo("Elfhame Palace", "A126", Rarity.UNCOMMON, mage.cards.e.ElfhamePalace.class)); + cards.add(new SetCardInfo("Elven Cache", "A68", Rarity.COMMON, mage.cards.e.ElvenCache.class)); + cards.add(new SetCardInfo("Elvish Visionary", "A69", Rarity.COMMON, mage.cards.e.ElvishVisionary.class)); + cards.add(new SetCardInfo("Empyrial Armor", "A5", Rarity.UNCOMMON, mage.cards.e.EmpyrialArmor.class)); + cards.add(new SetCardInfo("Enlightened Tutor", "A6", Rarity.RARE, mage.cards.e.EnlightenedTutor.class)); + cards.add(new SetCardInfo("Eternal Witness", "A70", Rarity.UNCOMMON, mage.cards.e.EternalWitness.class)); + cards.add(new SetCardInfo("Ethersworn Canonist", "B3", Rarity.RARE, mage.cards.e.EtherswornCanonist.class)); + cards.add(new SetCardInfo("Explosive Vegetation", "A71", Rarity.UNCOMMON, mage.cards.e.ExplosiveVegetation.class)); + cards.add(new SetCardInfo("Fact or Fiction", "A23", Rarity.UNCOMMON, mage.cards.f.FactOrFiction.class)); + cards.add(new SetCardInfo("Faith's Fetters", "A7", Rarity.UNCOMMON, mage.cards.f.FaithsFetters.class)); + cards.add(new SetCardInfo("Fertile Ground", "A72", Rarity.COMMON, mage.cards.f.FertileGround.class)); + cards.add(new SetCardInfo("Fireblast", "B15", Rarity.COMMON, mage.cards.f.Fireblast.class)); + cards.add(new SetCardInfo("Fires of Yavimaya", "A98", Rarity.UNCOMMON, mage.cards.f.FiresOfYavimaya.class)); + cards.add(new SetCardInfo("Flagstones of Trokair", "B31", Rarity.RARE, mage.cards.f.FlagstonesOfTrokair.class)); + cards.add(new SetCardInfo("Flames of the Blood Hand", "B16", Rarity.UNCOMMON, mage.cards.f.FlamesOfTheBloodHand.class)); + cards.add(new SetCardInfo("Flametongue Kavu", "A57", Rarity.UNCOMMON, mage.cards.f.FlametongueKavu.class)); + cards.add(new SetCardInfo("Flickerwisp", "B4", Rarity.UNCOMMON, mage.cards.f.Flickerwisp.class)); + cards.add(new SetCardInfo("Forest", "A154", Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", "A155", Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", "A156", Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forgotten Cave", "A127", Rarity.COMMON, mage.cards.f.ForgottenCave.class)); + cards.add(new SetCardInfo("Genesis", "A73", Rarity.RARE, mage.cards.g.Genesis.class)); + cards.add(new SetCardInfo("Ghost Quarter", "A128", Rarity.UNCOMMON, mage.cards.g.GhostQuarter.class)); + cards.add(new SetCardInfo("Ghostly Prison", "A8", Rarity.UNCOMMON, mage.cards.g.GhostlyPrison.class)); + cards.add(new SetCardInfo("Goblin Guide", "B17", Rarity.RARE, mage.cards.g.GoblinGuide.class)); + cards.add(new SetCardInfo("Golgari Grave-Troll", "A74", Rarity.RARE, mage.cards.g.GolgariGraveTroll.class)); + cards.add(new SetCardInfo("Golgari Rot Farm", "A129", Rarity.COMMON, mage.cards.g.GolgariRotFarm.class)); + cards.add(new SetCardInfo("Golgari Signet", "A112", Rarity.COMMON, mage.cards.g.GolgariSignet.class)); + cards.add(new SetCardInfo("Golgari Thug", "A42", Rarity.UNCOMMON, mage.cards.g.GolgariThug.class)); + cards.add(new SetCardInfo("Grim Harvest", "A43", Rarity.COMMON, mage.cards.g.GrimHarvest.class)); + cards.add(new SetCardInfo("Gruul Signet", "A113", Rarity.COMMON, mage.cards.g.GruulSignet.class)); + cards.add(new SetCardInfo("Gruul Turf", "A130", Rarity.COMMON, mage.cards.g.GruulTurf.class)); + cards.add(new SetCardInfo("Harmonize", "A75", Rarity.UNCOMMON, mage.cards.h.Harmonize.class)); + cards.add(new SetCardInfo("Hellspark Elemental", "B18", Rarity.UNCOMMON, mage.cards.h.HellsparkElemental.class)); + cards.add(new SetCardInfo("Hinder", "A24", Rarity.UNCOMMON, mage.cards.h.Hinder.class)); + cards.add(new SetCardInfo("Hissing Iguanar", "A58", Rarity.COMMON, mage.cards.h.HissingIguanar.class)); + // Card not implemented + //cards.add(new SetCardInfo("Illusionary Mask", "A114", Rarity.RARE, mage.cards.i.IllusionaryMask.class)); + cards.add(new SetCardInfo("Island", "A145", Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", "A146", Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", "A147", Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Jund Panorama", "A131", Rarity.COMMON, mage.cards.j.JundPanorama.class)); + cards.add(new SetCardInfo("Jungle Barrier", "A99", Rarity.UNCOMMON, mage.cards.j.JungleBarrier.class)); + cards.add(new SetCardInfo("Jungle Lion", "A76", Rarity.COMMON, mage.cards.j.JungleLion.class)); + cards.add(new SetCardInfo("Jötun Grunt", "B5", Rarity.UNCOMMON, mage.cards.j.JotunGrunt.class)); + cards.add(new SetCardInfo("Kami of Ancient Law", "A9", Rarity.COMMON, mage.cards.k.KamiOfAncientLaw.class)); + cards.add(new SetCardInfo("Karakas", "B32", Rarity.RARE, mage.cards.k.Karakas.class)); + cards.add(new SetCardInfo("Keldon Marauders", "B19", Rarity.COMMON, mage.cards.k.KeldonMarauders.class)); + cards.add(new SetCardInfo("Keldon Vandals", "A59", Rarity.COMMON, mage.cards.k.KeldonVandals.class)); + cards.add(new SetCardInfo("Kodama's Reach", "A77", Rarity.COMMON, mage.cards.k.KodamasReach.class)); + cards.add(new SetCardInfo("Kor Firewalker", "B6", Rarity.UNCOMMON, mage.cards.k.KorFirewalker.class)); + cards.add(new SetCardInfo("Krosan Tusker", "A78", Rarity.COMMON, mage.cards.k.KrosanTusker.class)); + cards.add(new SetCardInfo("Lava Spike", "B20", Rarity.COMMON, mage.cards.l.LavaSpike.class)); + cards.add(new SetCardInfo("Life from the Loam", "A79", Rarity.RARE, mage.cards.l.LifeFromTheLoam.class)); + cards.add(new SetCardInfo("Lightning Bolt", "A60", Rarity.COMMON, mage.cards.l.LightningBolt.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Lightning Bolt", "B21", Rarity.COMMON, mage.cards.l.LightningBolt.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Lightning Greaves", "A115", Rarity.UNCOMMON, mage.cards.l.LightningGreaves.class)); + cards.add(new SetCardInfo("Looter il-Kor", "A25", Rarity.COMMON, mage.cards.l.LooterIlKor.class)); + cards.add(new SetCardInfo("Magma Jet", "B22", Rarity.UNCOMMON, mage.cards.m.MagmaJet.class)); + cards.add(new SetCardInfo("Man-o'-War", "A26", Rarity.COMMON, mage.cards.m.ManOWar.class)); + cards.add(new SetCardInfo("Mangara of Corondor", "B7", Rarity.RARE, mage.cards.m.MangaraOfCorondor.class)); + cards.add(new SetCardInfo("Massacre", "A44", Rarity.UNCOMMON, mage.cards.m.Massacre.class)); + cards.add(new SetCardInfo("Merfolk Looter", "A27", Rarity.COMMON, mage.cards.m.MerfolkLooter.class)); + cards.add(new SetCardInfo("Mirari's Wake", "A100", Rarity.RARE, mage.cards.m.MirarisWake.class)); + cards.add(new SetCardInfo("Miren, the Moaning Well", "A132", Rarity.RARE, mage.cards.m.MirenTheMoaningWell.class)); + cards.add(new SetCardInfo("Mishra's Factory", "B33", Rarity.UNCOMMON, mage.cards.m.MishrasFactory.class)); + cards.add(new SetCardInfo("Mistmeadow Witch", "A101", Rarity.UNCOMMON, mage.cards.m.MistmeadowWitch.class)); + cards.add(new SetCardInfo("Moment's Peace", "A80", Rarity.COMMON, mage.cards.m.MomentsPeace.class)); + cards.add(new SetCardInfo("Momentary Blink", "A10", Rarity.COMMON, mage.cards.m.MomentaryBlink.class)); + cards.add(new SetCardInfo("Mountain", "A151", Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", "A152", Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", "A153", Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", "B38", Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", "B39", Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", "B40", Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", "B41", Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mulldrifter", "A28", Rarity.COMMON, mage.cards.m.Mulldrifter.class)); + cards.add(new SetCardInfo("Nezumi Graverobber", "A45", Rarity.UNCOMMON, mage.cards.n.NezumiGraverobber.class)); + cards.add(new SetCardInfo("Noble Templar", "A11", Rarity.COMMON, mage.cards.n.NobleTemplar.class)); + cards.add(new SetCardInfo("Oblivion Ring", "A12", Rarity.COMMON, mage.cards.o.OblivionRing.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Oblivion Ring", "B8", Rarity.COMMON, mage.cards.o.OblivionRing.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Overwhelming Intellect", "A29", Rarity.UNCOMMON, mage.cards.o.OverwhelmingIntellect.class)); + cards.add(new SetCardInfo("Penumbra Bobcat", "A81", Rarity.COMMON, mage.cards.p.PenumbraBobcat.class)); + cards.add(new SetCardInfo("Phantom Centaur", "A82", Rarity.UNCOMMON, mage.cards.p.PhantomCentaur.class)); + cards.add(new SetCardInfo("Phyrexian Arena", "A46", Rarity.RARE, mage.cards.p.PhyrexianArena.class)); + cards.add(new SetCardInfo("Plains", "A142", Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", "A143", Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", "A144", Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", "B34", Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", "B35", Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", "B36", Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", "B37", Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Price of Progress", "B23", Rarity.UNCOMMON, mage.cards.p.PriceOfProgress.class)); + cards.add(new SetCardInfo("Prison Term", "A13", Rarity.UNCOMMON, mage.cards.p.PrisonTerm.class)); + cards.add(new SetCardInfo("Putrefy", "A102", Rarity.UNCOMMON, mage.cards.p.Putrefy.class)); + cards.add(new SetCardInfo("Pyroblast", "B24", Rarity.COMMON, mage.cards.p.Pyroblast.class)); + cards.add(new SetCardInfo("Pyrostatic Pillar", "B25", Rarity.UNCOMMON, mage.cards.p.PyrostaticPillar.class)); + cards.add(new SetCardInfo("Questing Phelddagrif", "A103", Rarity.RARE, mage.cards.q.QuestingPhelddagrif.class)); + cards.add(new SetCardInfo("Rakdos Carnarium", "A133", Rarity.COMMON, mage.cards.r.RakdosCarnarium.class)); + cards.add(new SetCardInfo("Rakdos Signet", "A116", Rarity.COMMON, mage.cards.r.RakdosSignet.class)); + cards.add(new SetCardInfo("Rampant Growth", "A83", Rarity.COMMON, mage.cards.r.RampantGrowth.class)); + cards.add(new SetCardInfo("Raven Familiar", "A30", Rarity.UNCOMMON, mage.cards.r.RavenFamiliar.class)); + cards.add(new SetCardInfo("Reaping the Graves", "A47", Rarity.COMMON, mage.cards.r.ReapingTheGraves.class)); + cards.add(new SetCardInfo("Recollect", "A84", Rarity.UNCOMMON, mage.cards.r.Recollect.class)); + cards.add(new SetCardInfo("Relic of Progenitus", "A117", Rarity.UNCOMMON, mage.cards.r.RelicOfProgenitus.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Relic of Progenitus", "B29", Rarity.UNCOMMON, mage.cards.r.RelicOfProgenitus.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Resounding Thunder", "A61", Rarity.COMMON, mage.cards.r.ResoundingThunder.class)); + cards.add(new SetCardInfo("Resurrection", "A14", Rarity.UNCOMMON, mage.cards.r.Resurrection.class)); + cards.add(new SetCardInfo("Rhystic Study", "A31", Rarity.COMMON, mage.cards.r.RhysticStudy.class)); + cards.add(new SetCardInfo("Rift Bolt", "B26", Rarity.COMMON, mage.cards.r.RiftBolt.class)); + cards.add(new SetCardInfo("Rootbreaker Wurm", "A85", Rarity.COMMON, mage.cards.r.RootbreakerWurm.class)); + cards.add(new SetCardInfo("Rubinia Soulsinger", "A104", Rarity.RARE, mage.cards.r.RubiniaSoulsinger.class)); + cards.add(new SetCardInfo("Rupture Spire", "A134", Rarity.COMMON, mage.cards.r.RuptureSpire.class)); + cards.add(new SetCardInfo("Sakura-Tribe Elder", "A86", Rarity.COMMON, mage.cards.s.SakuraTribeElder.class)); + cards.add(new SetCardInfo("Savage Lands", "A135", Rarity.UNCOMMON, mage.cards.s.SavageLands.class)); + cards.add(new SetCardInfo("Seal of Cleansing", "A15", Rarity.COMMON, mage.cards.s.SealOfCleansing.class)); + cards.add(new SetCardInfo("Seaside Citadel", "A136", Rarity.UNCOMMON, mage.cards.s.SeasideCitadel.class)); + cards.add(new SetCardInfo("Selesnya Sanctuary", "A137", Rarity.UNCOMMON, mage.cards.s.SelesnyaSanctuary.class)); + cards.add(new SetCardInfo("Selesnya Signet", "A118", Rarity.COMMON, mage.cards.s.SelesnyaSignet.class)); + cards.add(new SetCardInfo("Serra Avenger", "B9", Rarity.RARE, mage.cards.s.SerraAvenger.class)); + cards.add(new SetCardInfo("Shambling Shell", "A105", Rarity.COMMON, mage.cards.s.ShamblingShell.class)); + cards.add(new SetCardInfo("Shoreline Ranger", "A32", Rarity.COMMON, mage.cards.s.ShorelineRanger.class)); + cards.add(new SetCardInfo("Shriekmaw", "A48", Rarity.UNCOMMON, mage.cards.s.Shriekmaw.class)); + cards.add(new SetCardInfo("Silence", "B10", Rarity.RARE, mage.cards.s.Silence.class)); + cards.add(new SetCardInfo("Simic Growth Chamber", "A138", Rarity.UNCOMMON, mage.cards.s.SimicGrowthChamber.class)); + cards.add(new SetCardInfo("Simic Signet", "A119", Rarity.COMMON, mage.cards.s.SimicSignet.class)); + cards.add(new SetCardInfo("Skullclamp", "A120", Rarity.UNCOMMON, mage.cards.s.Skullclamp.class)); + cards.add(new SetCardInfo("Sterling Grove", "A106", Rarity.UNCOMMON, mage.cards.s.SterlingGrove.class)); + cards.add(new SetCardInfo("Stinkweed Imp", "A49", Rarity.UNCOMMON, mage.cards.s.StinkweedImp.class)); + cards.add(new SetCardInfo("Stonecloaker", "A16", Rarity.UNCOMMON, mage.cards.s.Stonecloaker.class)); + cards.add(new SetCardInfo("Stoneforge Mystic", "B11", Rarity.RARE, mage.cards.s.StoneforgeMystic.class)); + cards.add(new SetCardInfo("Swamp", "A148", Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", "A149", Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", "A150", Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swords to Plowshares", "A17", Rarity.UNCOMMON, mage.cards.s.SwordsToPlowshares.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swords to Plowshares", "B12", Rarity.UNCOMMON, mage.cards.s.SwordsToPlowshares.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Temporal Spring", "A107", Rarity.COMMON, mage.cards.t.TemporalSpring.class)); + cards.add(new SetCardInfo("Terminate", "A108", Rarity.COMMON, mage.cards.t.Terminate.class)); + cards.add(new SetCardInfo("Terramorphic Expanse", "A139", Rarity.COMMON, mage.cards.t.TerramorphicExpanse.class)); + cards.add(new SetCardInfo("Terror", "A50", Rarity.COMMON, mage.cards.t.Terror.class)); + cards.add(new SetCardInfo("Tranquil Thicket", "A140", Rarity.COMMON, mage.cards.t.TranquilThicket.class)); + cards.add(new SetCardInfo("Treva's Ruins", "A141", Rarity.UNCOMMON, mage.cards.t.TrevasRuins.class)); + cards.add(new SetCardInfo("Twisted Abomination", "A51", Rarity.COMMON, mage.cards.t.TwistedAbomination.class)); + cards.add(new SetCardInfo("Umezawa's Jitte", "B30", Rarity.RARE, mage.cards.u.UmezawasJitte.class)); + cards.add(new SetCardInfo("Vampiric Dragon", "A109", Rarity.RARE, mage.cards.v.VampiricDragon.class)); + cards.add(new SetCardInfo("Weathered Wayfarer", "B13", Rarity.RARE, mage.cards.w.WeatheredWayfarer.class)); + cards.add(new SetCardInfo("Werebear", "A87", Rarity.COMMON, mage.cards.w.Werebear.class)); + cards.add(new SetCardInfo("Wickerbough Elder", "A88", Rarity.COMMON, mage.cards.w.WickerboughElder.class)); + cards.add(new SetCardInfo("Wild Mongrel", "A89", Rarity.COMMON, mage.cards.w.WildMongrel.class)); + cards.add(new SetCardInfo("Willbender", "A33", Rarity.UNCOMMON, mage.cards.w.Willbender.class)); + cards.add(new SetCardInfo("Wirewood Guardian", "A90", Rarity.COMMON, mage.cards.w.WirewoodGuardian.class)); + cards.add(new SetCardInfo("Wood Elves", "A91", Rarity.UNCOMMON, mage.cards.w.WoodElves.class)); + cards.add(new SetCardInfo("Xira Arien", "A110", Rarity.RARE, mage.cards.x.XiraArien.class)); + cards.add(new SetCardInfo("Yavimaya Elder", "A92", Rarity.COMMON, mage.cards.y.YavimayaElder.class)); + cards.add(new SetCardInfo("Yavimaya Enchantress", "A93", Rarity.UNCOMMON, mage.cards.y.YavimayaEnchantress.class)); + } +} From 27f2dd6725c2e3f287edaee343b7f912abc77724 Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Sun, 15 Mar 2020 18:01:40 +0100 Subject: [PATCH 062/182] Added the Legacy Championship (OLGC) set. --- .../src/mage/sets/LegacyChampionship.java | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/LegacyChampionship.java diff --git a/Mage.Sets/src/mage/sets/LegacyChampionship.java b/Mage.Sets/src/mage/sets/LegacyChampionship.java new file mode 100644 index 00000000000..0cbd5bb6bac --- /dev/null +++ b/Mage.Sets/src/mage/sets/LegacyChampionship.java @@ -0,0 +1,38 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/olgc + */ +public class LegacyChampionship extends ExpansionSet { + + private static final LegacyChampionship instance = new LegacyChampionship(); + + public static LegacyChampionship getInstance() { + return instance; + } + + private LegacyChampionship() { + super("Legacy Championship", "OLGC", ExpansionSet.buildDate(2019, 11, 3), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Badlands", "2016NA", Rarity.MYTHIC, mage.cards.b.Badlands.class)); + cards.add(new SetCardInfo("Bayou", "2019A", Rarity.MYTHIC, mage.cards.b.Bayou.class)); + cards.add(new SetCardInfo("Brainstorm", 2012, Rarity.RARE, mage.cards.b.Brainstorm.class)); + cards.add(new SetCardInfo("City of Traitors", "2019NA", Rarity.MYTHIC, mage.cards.c.CityOfTraitors.class)); + cards.add(new SetCardInfo("Force of Will", 2011, Rarity.RARE, mage.cards.f.ForceOfWill.class)); + cards.add(new SetCardInfo("Gaea's Cradle", 2014, Rarity.MYTHIC, mage.cards.g.GaeasCradle.class)); + cards.add(new SetCardInfo("Plateau", "2018A", Rarity.MYTHIC, mage.cards.p.Plateau.class)); + cards.add(new SetCardInfo("Savannah", "2017NA", Rarity.MYTHIC, mage.cards.s.Savannah.class)); + cards.add(new SetCardInfo("Scrubland", 2018, Rarity.MYTHIC, mage.cards.s.Scrubland.class)); + cards.add(new SetCardInfo("Taiga", "2017EU", Rarity.MYTHIC, mage.cards.t.Taiga.class)); + cards.add(new SetCardInfo("Tundra", 2015, Rarity.MYTHIC, mage.cards.t.Tundra.class)); + cards.add(new SetCardInfo("Underground Sea", "2016EU", Rarity.MYTHIC, mage.cards.u.UndergroundSea.class)); + cards.add(new SetCardInfo("Volcanic Island", "2018NA", Rarity.MYTHIC, mage.cards.v.VolcanicIsland.class)); + cards.add(new SetCardInfo("Wasteland", 2013, Rarity.UNCOMMON, mage.cards.w.Wasteland.class)); + } +} From 8d10ba37cf77186b5bcc9b175c7c66b5bfcc2b1a Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Sun, 15 Mar 2020 18:28:43 +0100 Subject: [PATCH 063/182] Added the Mirrodin Besieged Promos (PMBS) set. --- .../src/mage/sets/MirrodinBesiegedPromos.java | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/MirrodinBesiegedPromos.java diff --git a/Mage.Sets/src/mage/sets/MirrodinBesiegedPromos.java b/Mage.Sets/src/mage/sets/MirrodinBesiegedPromos.java new file mode 100644 index 00000000000..1ed8c3a1abd --- /dev/null +++ b/Mage.Sets/src/mage/sets/MirrodinBesiegedPromos.java @@ -0,0 +1,30 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/pmbs + */ +public class MirrodinBesiegedPromos extends ExpansionSet { + + private static final MirrodinBesiegedPromos instance = new MirrodinBesiegedPromos(); + + public static MirrodinBesiegedPromos getInstance() { + return instance; + } + + private MirrodinBesiegedPromos() { + super("Mirrodin Besieged Promos", "PMBS", ExpansionSet.buildDate(2011, 2, 3), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Black Sun's Zenith", 39, Rarity.RARE, mage.cards.b.BlackSunsZenith.class)); + cards.add(new SetCardInfo("Glissa, the Traitor", 96, Rarity.MYTHIC, mage.cards.g.GlissaTheTraitor.class)); + cards.add(new SetCardInfo("Hero of Bladehold", 8, Rarity.MYTHIC, mage.cards.h.HeroOfBladehold.class)); + cards.add(new SetCardInfo("Mirran Crusader", "*14", Rarity.RARE, mage.cards.m.MirranCrusader.class)); + cards.add(new SetCardInfo("Thopter Assembly", 140, Rarity.RARE, mage.cards.t.ThopterAssembly.class)); + cards.add(new SetCardInfo("Treasure Mage", 34, Rarity.UNCOMMON, mage.cards.t.TreasureMage.class)); + } +} From eeaceb1008d1c1d976ab4d601581810ef7bc07f7 Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Sun, 15 Mar 2020 18:57:27 +0100 Subject: [PATCH 064/182] Added the New Phyrexia Promos (PNPH) set. --- .../src/mage/sets/NewPhyrexiaPromos.java | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/NewPhyrexiaPromos.java diff --git a/Mage.Sets/src/mage/sets/NewPhyrexiaPromos.java b/Mage.Sets/src/mage/sets/NewPhyrexiaPromos.java new file mode 100644 index 00000000000..adb3eb70bd2 --- /dev/null +++ b/Mage.Sets/src/mage/sets/NewPhyrexiaPromos.java @@ -0,0 +1,30 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/pnph + */ +public class NewPhyrexiaPromos extends ExpansionSet { + + private static final NewPhyrexiaPromos instance = new NewPhyrexiaPromos(); + + public static NewPhyrexiaPromos getInstance() { + return instance; + } + + private NewPhyrexiaPromos() { + super("New Phyrexia Promos", "PNPH", ExpansionSet.buildDate(2011, 5, 12), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Myr Superion", 146, Rarity.RARE, mage.cards.m.MyrSuperion.class)); + cards.add(new SetCardInfo("Phyrexian Metamorph", 42, Rarity.RARE, mage.cards.p.PhyrexianMetamorph.class)); + cards.add(new SetCardInfo("Priest of Urabrask", 90, Rarity.UNCOMMON, mage.cards.p.PriestOfUrabrask.class)); + cards.add(new SetCardInfo("Pristine Talisman", 151, Rarity.COMMON, mage.cards.p.PristineTalisman.class)); + cards.add(new SetCardInfo("Sheoldred, Whispering One", 73, Rarity.MYTHIC, mage.cards.s.SheoldredWhisperingOne.class)); + cards.add(new SetCardInfo("Surgical Extraction", "*74", Rarity.RARE, mage.cards.s.SurgicalExtraction.class)); + } +} From 6d70889989bcdfe37e4fa9a0c41c2118fbf558f0 Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Sun, 15 Mar 2020 19:00:44 +0100 Subject: [PATCH 065/182] Added the Commander 2011 Launch Party (PCMD) set. --- .../mage/sets/Commander2011LaunchParty.java | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/Commander2011LaunchParty.java diff --git a/Mage.Sets/src/mage/sets/Commander2011LaunchParty.java b/Mage.Sets/src/mage/sets/Commander2011LaunchParty.java new file mode 100644 index 00000000000..fd8e0c41f59 --- /dev/null +++ b/Mage.Sets/src/mage/sets/Commander2011LaunchParty.java @@ -0,0 +1,29 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/pcmd + */ +public class Commander2011LaunchParty extends ExpansionSet { + + private static final Commander2011LaunchParty instance = new Commander2011LaunchParty(); + + public static Commander2011LaunchParty getInstance() { + return instance; + } + + private Commander2011LaunchParty() { + super("Commander 2011 Launch Party", "PCMD", ExpansionSet.buildDate(2011, 6, 17), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Basandra, Battle Seraph", 184, Rarity.RARE, mage.cards.b.BasandraBattleSeraph.class)); + cards.add(new SetCardInfo("Edric, Spymaster of Trest", 196, Rarity.RARE, mage.cards.e.EdricSpymasterOfTrest.class)); + cards.add(new SetCardInfo("Nin, the Pain Artist", 213, Rarity.RARE, mage.cards.n.NinThePainArtist.class)); + cards.add(new SetCardInfo("Skullbriar, the Walking Grave", 227, Rarity.RARE, mage.cards.s.SkullbriarTheWalkingGrave.class)); + cards.add(new SetCardInfo("Vish Kal, Blood Arbiter", 234, Rarity.RARE, mage.cards.v.VishKalBloodArbiter.class)); + } +} From ea277fed6517121097d7bbaab97bc2faba738d1e Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Sun, 15 Mar 2020 19:03:05 +0100 Subject: [PATCH 066/182] Added the Innistrad Promos (PISD) set. --- Mage.Sets/src/mage/sets/InnistradPromos.java | 31 ++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/InnistradPromos.java diff --git a/Mage.Sets/src/mage/sets/InnistradPromos.java b/Mage.Sets/src/mage/sets/InnistradPromos.java new file mode 100644 index 00000000000..b77e0d94f39 --- /dev/null +++ b/Mage.Sets/src/mage/sets/InnistradPromos.java @@ -0,0 +1,31 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/pisd + */ +public class InnistradPromos extends ExpansionSet { + + private static final InnistradPromos instance = new InnistradPromos(); + + public static InnistradPromos getInstance() { + return instance; + } + + private InnistradPromos() { + super("Innistrad Promos", "PISD", ExpansionSet.buildDate(2011, 9, 24), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Devil's Play", 140, Rarity.RARE, mage.cards.d.DevilsPlay.class)); + cards.add(new SetCardInfo("Diregraf Ghoul", 97, Rarity.UNCOMMON, mage.cards.d.DiregrafGhoul.class)); + cards.add(new SetCardInfo("Elite Inquisitor", 13, Rarity.RARE, mage.cards.e.EliteInquisitor.class)); + cards.add(new SetCardInfo("Howlpack Alpha", 193, Rarity.RARE, mage.cards.h.HowlpackAlpha.class)); + cards.add(new SetCardInfo("Ludevic's Abomination", 64, Rarity.RARE, mage.cards.l.LudevicsAbomination.class)); + cards.add(new SetCardInfo("Ludevic's Test Subject", 64, Rarity.RARE, mage.cards.l.LudevicsTestSubject.class)); + cards.add(new SetCardInfo("Mayor of Avabruck", 193, Rarity.RARE, mage.cards.m.MayorOfAvabruck.class)); + } +} From 964a4a5e4f24e0b22012c026a4f64a8fe73f420a Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Sun, 15 Mar 2020 19:04:28 +0100 Subject: [PATCH 067/182] Added the IDW Comics 2012 (PIDW) set. --- Mage.Sets/src/mage/sets/IDWComics2012.java | 33 ++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/IDWComics2012.java diff --git a/Mage.Sets/src/mage/sets/IDWComics2012.java b/Mage.Sets/src/mage/sets/IDWComics2012.java new file mode 100644 index 00000000000..3a6880bfaf4 --- /dev/null +++ b/Mage.Sets/src/mage/sets/IDWComics2012.java @@ -0,0 +1,33 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/pidw + */ +public class IDWComics2012 extends ExpansionSet { + + private static final IDWComics2012 instance = new IDWComics2012(); + + public static IDWComics2012 getInstance() { + return instance; + } + + private IDWComics2012() { + super("IDW Comics 2012", "PIDW", ExpansionSet.buildDate(2012, 1, 1), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Arrest", 5, Rarity.RARE, mage.cards.a.Arrest.class)); + cards.add(new SetCardInfo("Breath of Malfegor", 8, Rarity.RARE, mage.cards.b.BreathOfMalfegor.class)); + cards.add(new SetCardInfo("Consume Spirit", 6, Rarity.RARE, mage.cards.c.ConsumeSpirit.class)); + cards.add(new SetCardInfo("Electrolyze", 3, Rarity.RARE, mage.cards.e.Electrolyze.class)); + cards.add(new SetCardInfo("Faithless Looting", 2, Rarity.RARE, mage.cards.f.FaithlessLooting.class)); + cards.add(new SetCardInfo("Feast of Blood", 4, Rarity.RARE, mage.cards.f.FeastOfBlood.class)); + cards.add(new SetCardInfo("Standstill", 7, Rarity.RARE, mage.cards.s.Standstill.class)); + cards.add(new SetCardInfo("Treasure Hunt", 1, Rarity.RARE, mage.cards.t.TreasureHunt.class)); + cards.add(new SetCardInfo("Turnabout", 9, Rarity.RARE, mage.cards.t.Turnabout.class)); + } +} From 00317bbd17e20602facb8a07ec9cc33573d358a4 Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Sun, 15 Mar 2020 19:33:11 +0100 Subject: [PATCH 068/182] Added the Dark Ascension Promos (PDKA) set. --- .../src/mage/sets/DarkAscensionPromos.java | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/DarkAscensionPromos.java diff --git a/Mage.Sets/src/mage/sets/DarkAscensionPromos.java b/Mage.Sets/src/mage/sets/DarkAscensionPromos.java new file mode 100644 index 00000000000..c54e4ad2e5f --- /dev/null +++ b/Mage.Sets/src/mage/sets/DarkAscensionPromos.java @@ -0,0 +1,31 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/pdka + */ +public class DarkAscensionPromos extends ExpansionSet { + + private static final DarkAscensionPromos instance = new DarkAscensionPromos(); + + public static DarkAscensionPromos getInstance() { + return instance; + } + + private DarkAscensionPromos() { + super("Dark Ascension Promos", "PDKA", ExpansionSet.buildDate(2012, 1, 28), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Archdemon of Greed", 71, Rarity.RARE, mage.cards.a.ArchdemonOfGreed.class)); + cards.add(new SetCardInfo("Gravecrawler", "*64", Rarity.RARE, mage.cards.g.Gravecrawler.class)); + cards.add(new SetCardInfo("Mondronen Shaman", 98, Rarity.RARE, mage.cards.m.MondronenShaman.class)); + cards.add(new SetCardInfo("Ravenous Demon", 71, Rarity.RARE, mage.cards.r.RavenousDemon.class)); + cards.add(new SetCardInfo("Strangleroot Geist", 127, Rarity.UNCOMMON, mage.cards.s.StranglerootGeist.class)); + cards.add(new SetCardInfo("Tovolar's Magehunter", 98, Rarity.RARE, mage.cards.t.TovolarsMagehunter.class)); + cards.add(new SetCardInfo("Zombie Apocalypse", 80, Rarity.RARE, mage.cards.z.ZombieApocalypse.class)); + } +} From 4f5e598023ce229e91739b5255cb544227ef040a Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Sun, 15 Mar 2020 19:34:04 +0100 Subject: [PATCH 069/182] Added the Open the Helvault (PHEL) set. --- Mage.Sets/src/mage/sets/OpenTheHelvault.java | 29 ++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/OpenTheHelvault.java diff --git a/Mage.Sets/src/mage/sets/OpenTheHelvault.java b/Mage.Sets/src/mage/sets/OpenTheHelvault.java new file mode 100644 index 00000000000..e6fd211c92f --- /dev/null +++ b/Mage.Sets/src/mage/sets/OpenTheHelvault.java @@ -0,0 +1,29 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/phel + */ +public class OpenTheHelvault extends ExpansionSet { + + private static final OpenTheHelvault instance = new OpenTheHelvault(); + + public static OpenTheHelvault getInstance() { + return instance; + } + + private OpenTheHelvault() { + super("Open the Helvault", "PHEL", ExpansionSet.buildDate(2012, 4, 28), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Avacyn, Angel of Hope", 6, Rarity.MYTHIC, mage.cards.a.AvacynAngelOfHope.class)); + cards.add(new SetCardInfo("Bruna, Light of Alabaster", 208, Rarity.MYTHIC, mage.cards.b.BrunaLightOfAlabaster.class)); + cards.add(new SetCardInfo("Gisela, Blade of Goldnight", 209, Rarity.MYTHIC, mage.cards.g.GiselaBladeOfGoldnight.class)); + cards.add(new SetCardInfo("Griselbrand", 106, Rarity.MYTHIC, mage.cards.g.Griselbrand.class)); + cards.add(new SetCardInfo("Sigarda, Host of Herons", 210, Rarity.MYTHIC, mage.cards.s.SigardaHostOfHerons.class)); + } +} From 167da649dffcc5e2da0dfd999847eaa30ea80a1a Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Sun, 15 Mar 2020 19:35:07 +0100 Subject: [PATCH 070/182] Added the Avacyn Restored Promos (PAVR) set. --- .../src/mage/sets/AvacynRestoredPromos.java | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/AvacynRestoredPromos.java diff --git a/Mage.Sets/src/mage/sets/AvacynRestoredPromos.java b/Mage.Sets/src/mage/sets/AvacynRestoredPromos.java new file mode 100644 index 00000000000..9463c081072 --- /dev/null +++ b/Mage.Sets/src/mage/sets/AvacynRestoredPromos.java @@ -0,0 +1,29 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/pavr + */ +public class AvacynRestoredPromos extends ExpansionSet { + + private static final AvacynRestoredPromos instance = new AvacynRestoredPromos(); + + public static AvacynRestoredPromos getInstance() { + return instance; + } + + private AvacynRestoredPromos() { + super("Avacyn Restored Promos", "PAVR", ExpansionSet.buildDate(2012, 4, 28), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Killing Wave", 111, Rarity.RARE, mage.cards.k.KillingWave.class)); + cards.add(new SetCardInfo("Latch Seeker", 63, Rarity.UNCOMMON, mage.cards.l.LatchSeeker.class)); + cards.add(new SetCardInfo("Moonsilver Spear", 217, Rarity.RARE, mage.cards.m.MoonsilverSpear.class)); + cards.add(new SetCardInfo("Restoration Angel", 32, Rarity.RARE, mage.cards.r.RestorationAngel.class)); + cards.add(new SetCardInfo("Silverblade Paladin", "*36", Rarity.RARE, mage.cards.s.SilverbladePaladin.class)); + } +} From 38fa36ea1bc0f1ba8f6d069d1bff12f50298c682 Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Sun, 15 Mar 2020 19:37:02 +0100 Subject: [PATCH 071/182] Added the Return to Ravnica Promos (PRTR) set. --- .../src/mage/sets/ReturnToRavnicaPromos.java | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/ReturnToRavnicaPromos.java diff --git a/Mage.Sets/src/mage/sets/ReturnToRavnicaPromos.java b/Mage.Sets/src/mage/sets/ReturnToRavnicaPromos.java new file mode 100644 index 00000000000..ae18bd37b7f --- /dev/null +++ b/Mage.Sets/src/mage/sets/ReturnToRavnicaPromos.java @@ -0,0 +1,34 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/prtr + */ +public class ReturnToRavnicaPromos extends ExpansionSet { + + private static final ReturnToRavnicaPromos instance = new ReturnToRavnicaPromos(); + + public static ReturnToRavnicaPromos getInstance() { + return instance; + } + + private ReturnToRavnicaPromos() { + super("Return to Ravnica Promos", "PRTR", ExpansionSet.buildDate(2012, 10, 5), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Archon of the Triumvirate", 142, Rarity.RARE, mage.cards.a.ArchonOfTheTriumvirate.class)); + cards.add(new SetCardInfo("Carnival Hellsteed", 147, Rarity.RARE, mage.cards.c.CarnivalHellsteed.class)); + cards.add(new SetCardInfo("Corpsejack Menace", 152, Rarity.RARE, mage.cards.c.CorpsejackMenace.class)); + cards.add(new SetCardInfo("Cryptborn Horror", 212, Rarity.RARE, mage.cards.c.CryptbornHorror.class)); + cards.add(new SetCardInfo("Deadbridge Goliath", 120, Rarity.RARE, mage.cards.d.DeadbridgeGoliath.class)); + cards.add(new SetCardInfo("Dreg Mangler", 158, Rarity.UNCOMMON, mage.cards.d.DregMangler.class)); + cards.add(new SetCardInfo("Dryad Militant", 214, Rarity.UNCOMMON, mage.cards.d.DryadMilitant.class)); + cards.add(new SetCardInfo("Grove of the Guardian", 240, Rarity.RARE, mage.cards.g.GroveOfTheGuardian.class)); + cards.add(new SetCardInfo("Hypersonic Dragon", 170, Rarity.RARE, mage.cards.h.HypersonicDragon.class)); + cards.add(new SetCardInfo("Supreme Verdict", "*201", Rarity.RARE, mage.cards.s.SupremeVerdict.class)); + } +} From 5a0832408d1dfa14c6444e6a40e491f99c105fb8 Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Sun, 15 Mar 2020 19:38:26 +0100 Subject: [PATCH 072/182] Added the IDW Comics 2013 (PI13) set. --- Mage.Sets/src/mage/sets/IDWComics2013.java | 29 ++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/IDWComics2013.java diff --git a/Mage.Sets/src/mage/sets/IDWComics2013.java b/Mage.Sets/src/mage/sets/IDWComics2013.java new file mode 100644 index 00000000000..d960562b13c --- /dev/null +++ b/Mage.Sets/src/mage/sets/IDWComics2013.java @@ -0,0 +1,29 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/pi13 + */ +public class IDWComics2013 extends ExpansionSet { + + private static final IDWComics2013 instance = new IDWComics2013(); + + public static IDWComics2013 getInstance() { + return instance; + } + + private IDWComics2013() { + super("IDW Comics 2013", "PI13", ExpansionSet.buildDate(2013, 1, 1), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Corrupt", 12, Rarity.RARE, mage.cards.c.Corrupt.class)); + cards.add(new SetCardInfo("Gaze of Granite", 14, Rarity.RARE, mage.cards.g.GazeOfGranite.class)); + cards.add(new SetCardInfo("High Tide", 13, Rarity.RARE, mage.cards.h.HighTide.class)); + cards.add(new SetCardInfo("Ogre Arsonist", 11, Rarity.RARE, mage.cards.o.OgreArsonist.class)); + cards.add(new SetCardInfo("Voidmage Husher", 10, Rarity.RARE, mage.cards.v.VoidmageHusher.class)); + } +} From ed3a96f3fd171be4f7bd63f74633f13d293aac0e Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Sun, 15 Mar 2020 19:39:22 +0100 Subject: [PATCH 073/182] Added the Gatecrash Promos (PGTC) set. --- Mage.Sets/src/mage/sets/GatecrashPromos.java | 33 ++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/GatecrashPromos.java diff --git a/Mage.Sets/src/mage/sets/GatecrashPromos.java b/Mage.Sets/src/mage/sets/GatecrashPromos.java new file mode 100644 index 00000000000..4147b782ef9 --- /dev/null +++ b/Mage.Sets/src/mage/sets/GatecrashPromos.java @@ -0,0 +1,33 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/pgtc + */ +public class GatecrashPromos extends ExpansionSet { + + private static final GatecrashPromos instance = new GatecrashPromos(); + + public static GatecrashPromos getInstance() { + return instance; + } + + private GatecrashPromos() { + super("Gatecrash Promos", "PGTC", ExpansionSet.buildDate(2013, 1, 26), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Consuming Aberration", 152, Rarity.RARE, mage.cards.c.ConsumingAberration.class)); + cards.add(new SetCardInfo("Fathom Mage", 162, Rarity.RARE, mage.cards.f.FathomMage.class)); + cards.add(new SetCardInfo("Firemane Avenger", 163, Rarity.RARE, mage.cards.f.FiremaneAvenger.class)); + cards.add(new SetCardInfo("Foundry Champion", 165, Rarity.RARE, mage.cards.f.FoundryChampion.class)); + cards.add(new SetCardInfo("Nightveil Specter", "*222", Rarity.RARE, mage.cards.n.NightveilSpecter.class)); + cards.add(new SetCardInfo("Rubblehulk", 191, Rarity.RARE, mage.cards.r.Rubblehulk.class)); + cards.add(new SetCardInfo("Skarrg Goliath", 133, Rarity.RARE, mage.cards.s.SkarrgGoliath.class)); + cards.add(new SetCardInfo("Treasury Thrull", 201, Rarity.RARE, mage.cards.t.TreasuryThrull.class)); + cards.add(new SetCardInfo("Zameck Guildmage", 209, Rarity.UNCOMMON, mage.cards.z.ZameckGuildmage.class)); + } +} From daae8602bd11c40114b8783fcf8ffe467f15d2f9 Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Sun, 15 Mar 2020 19:41:40 +0100 Subject: [PATCH 074/182] =?UTF-8?q?Aligned=20World=20Magic=20Cup=20Qualifi?= =?UTF-8?q?er=20set=20abbreviation=20with=20Scryfall=20(WMCQ=20=E2=86=92?= =?UTF-8?q?=20PWCQ).?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Mage.Sets/src/mage/sets/WorldMagicCupQualifier.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/Mage.Sets/src/mage/sets/WorldMagicCupQualifier.java b/Mage.Sets/src/mage/sets/WorldMagicCupQualifier.java index b482fb9ba8c..e4bcb8363d7 100644 --- a/Mage.Sets/src/mage/sets/WorldMagicCupQualifier.java +++ b/Mage.Sets/src/mage/sets/WorldMagicCupQualifier.java @@ -6,7 +6,8 @@ import mage.constants.Rarity; import mage.constants.SetType; /** - * + * https://scryfall.com/sets/pwcq + * https://mtg.gamepedia.com/World_Magic_Cup_Qualifiers * @author fireshoes */ public final class WorldMagicCupQualifier extends ExpansionSet { @@ -18,10 +19,10 @@ public final class WorldMagicCupQualifier extends ExpansionSet { } private WorldMagicCupQualifier() { - super("World Magic Cup Qualifier", "WMCQ", ExpansionSet.buildDate(2011, 6, 17), SetType.PROMOTIONAL); + super("World Magic Cup Qualifier", "PWCQ", ExpansionSet.buildDate(2011, 6, 17), SetType.PROMOTIONAL); this.hasBoosters = false; this.hasBasicLands = false; - // https://mtg.gamepedia.com/World_Magic_Cup_Qualifiers + cards.add(new SetCardInfo("Abrupt Decay", 2016, Rarity.RARE, mage.cards.a.AbruptDecay.class)); cards.add(new SetCardInfo("Geist of Saint Traft", 2014, Rarity.MYTHIC, mage.cards.g.GeistOfSaintTraft.class)); cards.add(new SetCardInfo("Inkmoth Nexus", 2017, Rarity.SPECIAL, mage.cards.i.InkmothNexus.class)); From 257d20f4cf3069039a3494a77e6d1f36e0238288 Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Sun, 15 Mar 2020 19:42:39 +0100 Subject: [PATCH 075/182] Added the Dragon's Maze Promos (PDGM) set. --- .../src/mage/sets/DragonsMazePromos.java | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/DragonsMazePromos.java diff --git a/Mage.Sets/src/mage/sets/DragonsMazePromos.java b/Mage.Sets/src/mage/sets/DragonsMazePromos.java new file mode 100644 index 00000000000..5d0aa1038db --- /dev/null +++ b/Mage.Sets/src/mage/sets/DragonsMazePromos.java @@ -0,0 +1,30 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/pdgm + */ +public class DragonsMazePromos extends ExpansionSet { + + private static final DragonsMazePromos instance = new DragonsMazePromos(); + + public static DragonsMazePromos getInstance() { + return instance; + } + + private DragonsMazePromos() { + super("Dragon's Maze Promos", "PDGM", ExpansionSet.buildDate(2013, 4, 27), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = true; + + cards.add(new SetCardInfo("Breaking // Entering", 124, Rarity.RARE, mage.cards.b.BreakingEntering.class)); + cards.add(new SetCardInfo("Maze's End", 152, Rarity.MYTHIC, mage.cards.m.MazesEnd.class)); + cards.add(new SetCardInfo("Melek, Izzet Paragon", 84, Rarity.RARE, mage.cards.m.MelekIzzetParagon.class)); + cards.add(new SetCardInfo("Plains", 157, Rarity.LAND, mage.cards.basiclands.Plains.class)); + cards.add(new SetCardInfo("Render Silent", "*96", Rarity.RARE, mage.cards.r.RenderSilent.class)); + cards.add(new SetCardInfo("Trostani's Summoner", 110, Rarity.UNCOMMON, mage.cards.t.TrostanisSummoner.class)); + } +} From 83cbc661dfdb425660a290ac951924b79268138b Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Mon, 16 Mar 2020 12:28:13 +0100 Subject: [PATCH 076/182] Added the San Diego Comic Con 2013-2018 sets. Added Sets: - PSDC - PS14 - PS15 - PS16 - PS17 - PS18 --- .../src/mage/sets/SanDiegoComicCon2013.java | 29 ++++++++++++++++ .../src/mage/sets/SanDiegoComicCon2014.java | 30 ++++++++++++++++ .../src/mage/sets/SanDiegoComicCon2015.java | 34 +++++++++++++++++++ .../src/mage/sets/SanDiegoComicCon2016.java | 29 ++++++++++++++++ .../src/mage/sets/SanDiegoComicCon2017.java | 30 ++++++++++++++++ .../src/mage/sets/SanDiegoComicCon2018.java | 29 ++++++++++++++++ 6 files changed, 181 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/SanDiegoComicCon2013.java create mode 100644 Mage.Sets/src/mage/sets/SanDiegoComicCon2014.java create mode 100644 Mage.Sets/src/mage/sets/SanDiegoComicCon2015.java create mode 100644 Mage.Sets/src/mage/sets/SanDiegoComicCon2016.java create mode 100644 Mage.Sets/src/mage/sets/SanDiegoComicCon2017.java create mode 100644 Mage.Sets/src/mage/sets/SanDiegoComicCon2018.java diff --git a/Mage.Sets/src/mage/sets/SanDiegoComicCon2013.java b/Mage.Sets/src/mage/sets/SanDiegoComicCon2013.java new file mode 100644 index 00000000000..217024f5658 --- /dev/null +++ b/Mage.Sets/src/mage/sets/SanDiegoComicCon2013.java @@ -0,0 +1,29 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/psdc + */ +public class SanDiegoComicCon2013 extends ExpansionSet { + + private static final SanDiegoComicCon2013 instance = new SanDiegoComicCon2013(); + + public static SanDiegoComicCon2013 getInstance() { + return instance; + } + + private SanDiegoComicCon2013() { + super("San Diego Comic-Con 2013", "PSDC", ExpansionSet.buildDate(2013, 7, 18), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Ajani, Caller of the Pride", 1, Rarity.MYTHIC, mage.cards.a.AjaniCallerOfThePride.class)); + cards.add(new SetCardInfo("Chandra, Pyromaster", 132, Rarity.MYTHIC, mage.cards.c.ChandraPyromaster.class)); + cards.add(new SetCardInfo("Garruk, Caller of Beasts", 172, Rarity.MYTHIC, mage.cards.g.GarrukCallerOfBeasts.class)); + cards.add(new SetCardInfo("Jace, Memory Adept", 60, Rarity.MYTHIC, mage.cards.j.JaceMemoryAdept.class)); + cards.add(new SetCardInfo("Liliana of the Dark Realms", 102, Rarity.MYTHIC, mage.cards.l.LilianaOfTheDarkRealms.class)); + } +} diff --git a/Mage.Sets/src/mage/sets/SanDiegoComicCon2014.java b/Mage.Sets/src/mage/sets/SanDiegoComicCon2014.java new file mode 100644 index 00000000000..fdda0c9c580 --- /dev/null +++ b/Mage.Sets/src/mage/sets/SanDiegoComicCon2014.java @@ -0,0 +1,30 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/ps14 + */ +public class SanDiegoComicCon2014 extends ExpansionSet { + + private static final SanDiegoComicCon2014 instance = new SanDiegoComicCon2014(); + + public static SanDiegoComicCon2014 getInstance() { + return instance; + } + + private SanDiegoComicCon2014() { + super("San Diego Comic-Con 2014", "PS14", ExpansionSet.buildDate(2014, 7, 8), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Ajani Steadfast", 1, Rarity.MYTHIC, mage.cards.a.AjaniSteadfast.class)); + cards.add(new SetCardInfo("Chandra, Pyromaster", 134, Rarity.MYTHIC, mage.cards.c.ChandraPyromaster.class)); + cards.add(new SetCardInfo("Garruk, Apex Predator", 210, Rarity.MYTHIC, mage.cards.g.GarrukApexPredator.class)); + cards.add(new SetCardInfo("Jace, the Living Guildpact", 62, Rarity.MYTHIC, mage.cards.j.JaceTheLivingGuildpact.class)); + cards.add(new SetCardInfo("Liliana Vess", 103, Rarity.MYTHIC, mage.cards.l.LilianaVess.class)); + cards.add(new SetCardInfo("Nissa, Worldwaker", 187, Rarity.MYTHIC, mage.cards.n.NissaWorldwaker.class)); + } +} diff --git a/Mage.Sets/src/mage/sets/SanDiegoComicCon2015.java b/Mage.Sets/src/mage/sets/SanDiegoComicCon2015.java new file mode 100644 index 00000000000..f36f6f8a0d8 --- /dev/null +++ b/Mage.Sets/src/mage/sets/SanDiegoComicCon2015.java @@ -0,0 +1,34 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/ps15 + */ +public class SanDiegoComicCon2015 extends ExpansionSet { + + private static final SanDiegoComicCon2015 instance = new SanDiegoComicCon2015(); + + public static SanDiegoComicCon2015 getInstance() { + return instance; + } + + private SanDiegoComicCon2015() { + super("San Diego Comic-Con 2015", "PS15", ExpansionSet.buildDate(2015, 7, 9), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Chandra, Fire of Kaladesh", 135, Rarity.MYTHIC, mage.cards.c.ChandraFireOfKaladesh.class)); + cards.add(new SetCardInfo("Chandra, Roaring Flame", 135, Rarity.MYTHIC, mage.cards.c.ChandraRoaringFlame.class)); + cards.add(new SetCardInfo("Gideon, Battle-Forged", 23, Rarity.MYTHIC, mage.cards.g.GideonBattleForged.class)); + cards.add(new SetCardInfo("Jace, Telepath Unbound", 60, Rarity.MYTHIC, mage.cards.j.JaceTelepathUnbound.class)); + cards.add(new SetCardInfo("Jace, Vryn's Prodigy", 60, Rarity.MYTHIC, mage.cards.j.JaceVrynsProdigy.class)); + cards.add(new SetCardInfo("Kytheon, Hero of Akros", 23, Rarity.MYTHIC, mage.cards.k.KytheonHeroOfAkros.class)); + cards.add(new SetCardInfo("Liliana, Defiant Necromancer", 106, Rarity.MYTHIC, mage.cards.l.LilianaDefiantNecromancer.class)); + cards.add(new SetCardInfo("Liliana, Heretical Healer", 106, Rarity.MYTHIC, mage.cards.l.LilianaHereticalHealer.class)); + cards.add(new SetCardInfo("Nissa, Vastwood Seer", 189, Rarity.MYTHIC, mage.cards.n.NissaVastwoodSeer.class)); + cards.add(new SetCardInfo("Nissa, Sage Animist", 189, Rarity.MYTHIC, mage.cards.n.NissaSageAnimist.class)); + } +} diff --git a/Mage.Sets/src/mage/sets/SanDiegoComicCon2016.java b/Mage.Sets/src/mage/sets/SanDiegoComicCon2016.java new file mode 100644 index 00000000000..959af34549c --- /dev/null +++ b/Mage.Sets/src/mage/sets/SanDiegoComicCon2016.java @@ -0,0 +1,29 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/ps16 + */ +public class SanDiegoComicCon2016 extends ExpansionSet { + + private static final SanDiegoComicCon2016 instance = new SanDiegoComicCon2016(); + + public static SanDiegoComicCon2016 getInstance() { + return instance; + } + + private SanDiegoComicCon2016() { + super("San Diego Comic-Con 2016", "PS16", ExpansionSet.buildDate(2016, 10, 1), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Chandra, Flamecaller", 104, Rarity.MYTHIC, mage.cards.c.ChandraFlamecaller.class)); + cards.add(new SetCardInfo("Gideon, Ally of Zendikar", 29, Rarity.MYTHIC, mage.cards.g.GideonAllyOfZendikar.class)); + cards.add(new SetCardInfo("Jace, Unraveler of Secrets", 69, Rarity.MYTHIC, mage.cards.j.JaceUnravelerOfSecrets.class)); + cards.add(new SetCardInfo("Liliana, the Last Hope", 93, Rarity.MYTHIC, mage.cards.l.LilianaTheLastHope.class)); + cards.add(new SetCardInfo("Nissa, Voice of Zendikar", 138, Rarity.MYTHIC, mage.cards.n.NissaVoiceOfZendikar.class)); + } +} diff --git a/Mage.Sets/src/mage/sets/SanDiegoComicCon2017.java b/Mage.Sets/src/mage/sets/SanDiegoComicCon2017.java new file mode 100644 index 00000000000..1865c037957 --- /dev/null +++ b/Mage.Sets/src/mage/sets/SanDiegoComicCon2017.java @@ -0,0 +1,30 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/ps17 + */ +public class SanDiegoComicCon2017 extends ExpansionSet { + + private static final SanDiegoComicCon2017 instance = new SanDiegoComicCon2017(); + + public static SanDiegoComicCon2017 getInstance() { + return instance; + } + + private SanDiegoComicCon2017() { + super("San Diego Comic-Con 2017", "PS17", ExpansionSet.buildDate(2017, 7, 20), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Chandra, Torch of Defiance", 110, Rarity.MYTHIC, mage.cards.c.ChandraTorchOfDefiance.class)); + cards.add(new SetCardInfo("Gideon of the Trials", 14, Rarity.MYTHIC, mage.cards.g.GideonOfTheTrials.class)); + cards.add(new SetCardInfo("Jace, Unraveler of Secrets", 69, Rarity.MYTHIC, mage.cards.j.JaceUnravelerOfSecrets.class)); + cards.add(new SetCardInfo("Liliana, Death's Majesty", 97, Rarity.MYTHIC, mage.cards.l.LilianaDeathsMajesty.class)); + cards.add(new SetCardInfo("Nicol Bolas, God-Pharaoh", 140, Rarity.MYTHIC, mage.cards.n.NicolBolasGodPharaoh.class)); + cards.add(new SetCardInfo("Nissa, Steward of Elements", 204, Rarity.MYTHIC, mage.cards.n.NissaStewardOfElements.class)); + } +} diff --git a/Mage.Sets/src/mage/sets/SanDiegoComicCon2018.java b/Mage.Sets/src/mage/sets/SanDiegoComicCon2018.java new file mode 100644 index 00000000000..9e86c1cfb6f --- /dev/null +++ b/Mage.Sets/src/mage/sets/SanDiegoComicCon2018.java @@ -0,0 +1,29 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/ps18 + */ +public class SanDiegoComicCon2018 extends ExpansionSet { + + private static final SanDiegoComicCon2018 instance = new SanDiegoComicCon2018(); + + public static SanDiegoComicCon2018 getInstance() { + return instance; + } + + private SanDiegoComicCon2018() { + super("San Diego Comic-Con 2018", "PS18", ExpansionSet.buildDate(2018, 7, 19), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Chandra, Torch of Defiance", 110, Rarity.MYTHIC, mage.cards.c.ChandraTorchOfDefiance.class)); + cards.add(new SetCardInfo("Gideon of the Trials", 14, Rarity.MYTHIC, mage.cards.g.GideonOfTheTrials.class)); + cards.add(new SetCardInfo("Jace, Cunning Castaway", 60, Rarity.MYTHIC, mage.cards.j.JaceCunningCastaway.class)); + cards.add(new SetCardInfo("Liliana, Untouched by Death", 106, Rarity.MYTHIC, mage.cards.l.LilianaUntouchedByDeath.class)); + cards.add(new SetCardInfo("Nissa, Vital Force", 163, Rarity.MYTHIC, mage.cards.n.NissaVitalForce.class)); + } +} From 642c146d75c688f370cc72d97716beb82d5033db Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Mon, 16 Mar 2020 12:41:19 +0100 Subject: [PATCH 077/182] Added the IDW Comics 2014 (PI14) set. --- Mage.Sets/src/mage/sets/IDWComics2014.java | 27 ++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/IDWComics2014.java diff --git a/Mage.Sets/src/mage/sets/IDWComics2014.java b/Mage.Sets/src/mage/sets/IDWComics2014.java new file mode 100644 index 00000000000..44bd2f5d55e --- /dev/null +++ b/Mage.Sets/src/mage/sets/IDWComics2014.java @@ -0,0 +1,27 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/pi14 + */ +public class IDWComics2014 extends ExpansionSet { + + private static final IDWComics2014 instance = new IDWComics2014(); + + public static IDWComics2014 getInstance() { + return instance; + } + + private IDWComics2014() { + super("IDW Comics 2014", "PI14", ExpansionSet.buildDate(2014, 1, 1), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Acquire", 16, Rarity.RARE, mage.cards.a.Acquire.class)); + cards.add(new SetCardInfo("Duress", 17, Rarity.RARE, mage.cards.d.Duress.class)); + cards.add(new SetCardInfo("Wash Out", 15, Rarity.RARE, mage.cards.w.WashOut.class)); + } +} From c4b736f7eb255443df94be168baf6eb5a5459770 Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Mon, 16 Mar 2020 12:51:59 +0100 Subject: [PATCH 078/182] Added the Born of the Gods Promos (PBNG) set. --- .../src/mage/sets/BornOfTheGodsPromos.java | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/BornOfTheGodsPromos.java diff --git a/Mage.Sets/src/mage/sets/BornOfTheGodsPromos.java b/Mage.Sets/src/mage/sets/BornOfTheGodsPromos.java new file mode 100644 index 00000000000..ebfb1a4bf7a --- /dev/null +++ b/Mage.Sets/src/mage/sets/BornOfTheGodsPromos.java @@ -0,0 +1,33 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/pbng + */ +public class BornOfTheGodsPromos extends ExpansionSet { + + private static final BornOfTheGodsPromos instance = new BornOfTheGodsPromos(); + + public static BornOfTheGodsPromos getInstance() { + return instance; + } + + private BornOfTheGodsPromos() { + super("Born of the Gods Promos", "PBNG", ExpansionSet.buildDate(2014, 2, 1), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Arbiter of the Ideal", 31, Rarity.RARE, mage.cards.a.ArbiterOfTheIdeal.class)); + cards.add(new SetCardInfo("Eater of Hope", 66, Rarity.RARE, mage.cards.e.EaterOfHope.class)); + cards.add(new SetCardInfo("Fated Conflagration", "*94", Rarity.RARE, mage.cards.f.FatedConflagration.class)); + cards.add(new SetCardInfo("Forgestoker Dragon", 98, Rarity.RARE, mage.cards.f.ForgestokerDragon.class)); + cards.add(new SetCardInfo("Kiora's Follower", 150, Rarity.UNCOMMON, mage.cards.k.KiorasFollower.class)); + cards.add(new SetCardInfo("Nessian Wilds Ravager", 129, Rarity.RARE, mage.cards.n.NessianWildsRavager.class)); + cards.add(new SetCardInfo("Pain Seer", 80, Rarity.RARE, mage.cards.p.PainSeer.class)); + cards.add(new SetCardInfo("Silent Sentinel", 26, Rarity.RARE, mage.cards.s.SilentSentinel.class)); + cards.add(new SetCardInfo("Tromokratis", 55, Rarity.RARE, mage.cards.t.Tromokratis.class)); + } +} From 20949b41ed2fbcc2b88f4c6ecf7288af2478f4c4 Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Mon, 16 Mar 2020 12:52:30 +0100 Subject: [PATCH 079/182] Added the Modern Event Deck 2014 (MD1) set. --- .../src/mage/sets/ModernEventDeck2014.java | 50 +++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/ModernEventDeck2014.java diff --git a/Mage.Sets/src/mage/sets/ModernEventDeck2014.java b/Mage.Sets/src/mage/sets/ModernEventDeck2014.java new file mode 100644 index 00000000000..0b9082b3d2c --- /dev/null +++ b/Mage.Sets/src/mage/sets/ModernEventDeck2014.java @@ -0,0 +1,50 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/md1 + */ +public class ModernEventDeck2014 extends ExpansionSet { + + private static final ModernEventDeck2014 instance = new ModernEventDeck2014(); + + public static ModernEventDeck2014 getInstance() { + return instance; + } + + private ModernEventDeck2014() { + super("Modern Event Deck 2014", "MD1", ExpansionSet.buildDate(2014, 5, 30), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = true; + + cards.add(new SetCardInfo("Burrenton Forge-Tender", 22, Rarity.UNCOMMON, mage.cards.b.BurrentonForgeTender.class)); + cards.add(new SetCardInfo("Caves of Koilos", 14, Rarity.RARE, mage.cards.c.CavesOfKoilos.class)); + cards.add(new SetCardInfo("City of Brass", 15, Rarity.RARE, mage.cards.c.CityOfBrass.class)); + cards.add(new SetCardInfo("Dismember", 25, Rarity.UNCOMMON, mage.cards.d.Dismember.class)); + cards.add(new SetCardInfo("Duress", 23, Rarity.COMMON, mage.cards.d.Duress.class)); + cards.add(new SetCardInfo("Elspeth, Knight-Errant", 13, Rarity.MYTHIC, mage.cards.e.ElspethKnightErrant.class)); + cards.add(new SetCardInfo("Ghost Quarter", 26, Rarity.UNCOMMON, mage.cards.g.GhostQuarter.class)); + cards.add(new SetCardInfo("Honor of the Pure", 6, Rarity.RARE, mage.cards.h.HonorOfThePure.class)); + cards.add(new SetCardInfo("Inquisition of Kozilek", 4, Rarity.UNCOMMON, mage.cards.i.InquisitionOfKozilek.class)); + cards.add(new SetCardInfo("Intangible Virtue", 7, Rarity.UNCOMMON, mage.cards.i.IntangibleVirtue.class)); + cards.add(new SetCardInfo("Isolated Chapel", 16, Rarity.RARE, mage.cards.i.IsolatedChapel.class)); + cards.add(new SetCardInfo("Kataki, War's Wage", 24, Rarity.RARE, mage.cards.k.KatakiWarsWage.class)); + cards.add(new SetCardInfo("Lingering Souls", 11, Rarity.UNCOMMON, mage.cards.l.LingeringSouls.class)); + cards.add(new SetCardInfo("Path to Exile", 3, Rarity.UNCOMMON, mage.cards.p.PathToExile.class)); + cards.add(new SetCardInfo("Plains", 19, Rarity.LAND, mage.cards.basiclands.Plains.class)); + cards.add(new SetCardInfo("Raise the Alarm", 8, Rarity.COMMON, mage.cards.r.RaiseTheAlarm.class)); + cards.add(new SetCardInfo("Relic of Progenitus", 21, Rarity.UNCOMMON, mage.cards.r.RelicOfProgenitus.class)); + cards.add(new SetCardInfo("Shrine of Loyal Legions", 5, Rarity.UNCOMMON, mage.cards.s.ShrineOfLoyalLegions.class)); + cards.add(new SetCardInfo("Soul Warden", 1, Rarity.COMMON, mage.cards.s.SoulWarden.class)); + cards.add(new SetCardInfo("Spectral Procession", 12, Rarity.UNCOMMON, mage.cards.s.SpectralProcession.class)); + cards.add(new SetCardInfo("Swamp", 20, Rarity.LAND, mage.cards.basiclands.Swamp.class)); + cards.add(new SetCardInfo("Sword of Feast and Famine", 10, Rarity.MYTHIC, mage.cards.s.SwordOfFeastAndFamine.class)); + cards.add(new SetCardInfo("Tidehollow Sculler", 2, Rarity.UNCOMMON, mage.cards.t.TidehollowSculler.class)); + cards.add(new SetCardInfo("Vault of the Archangel", 17, Rarity.RARE, mage.cards.v.VaultOfTheArchangel.class)); + cards.add(new SetCardInfo("Windbrisk Heights", 18, Rarity.RARE, mage.cards.w.WindbriskHeights.class)); + cards.add(new SetCardInfo("Zealous Persecution", 9, Rarity.UNCOMMON, mage.cards.z.ZealousPersecution.class)); + } +} From b86d369aa9c1e9b2825ea1fcf9ef2838fbffff58 Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Mon, 16 Mar 2020 12:52:59 +0100 Subject: [PATCH 080/182] Added the Journey into Nyx Promos (PJOU) set. --- .../src/mage/sets/JourneyIntoNyxPromos.java | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/JourneyIntoNyxPromos.java diff --git a/Mage.Sets/src/mage/sets/JourneyIntoNyxPromos.java b/Mage.Sets/src/mage/sets/JourneyIntoNyxPromos.java new file mode 100644 index 00000000000..999876730ce --- /dev/null +++ b/Mage.Sets/src/mage/sets/JourneyIntoNyxPromos.java @@ -0,0 +1,33 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/pjou + */ +public class JourneyIntoNyxPromos extends ExpansionSet { + + private static final JourneyIntoNyxPromos instance = new JourneyIntoNyxPromos(); + + public static JourneyIntoNyxPromos getInstance() { + return instance; + } + + private JourneyIntoNyxPromos() { + super("Journey into Nyx Promos", "PJOU", ExpansionSet.buildDate(2014, 4, 26), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Dawnbringer Charioteers", 6, Rarity.RARE, mage.cards.d.DawnbringerCharioteers.class)); + cards.add(new SetCardInfo("Dictate of Kruphix", 37, Rarity.RARE, mage.cards.d.DictateOfKruphix.class)); + cards.add(new SetCardInfo("Dictate of the Twin Gods", 93, Rarity.RARE, mage.cards.d.DictateOfTheTwinGods.class)); + cards.add(new SetCardInfo("Doomwake Giant", 66, Rarity.RARE, mage.cards.d.DoomwakeGiant.class)); + cards.add(new SetCardInfo("Eidolon of Blossoms", "*122", Rarity.RARE, mage.cards.e.EidolonOfBlossoms.class)); + cards.add(new SetCardInfo("Heroes' Bane", 126, Rarity.RARE, mage.cards.h.HeroesBane.class)); + cards.add(new SetCardInfo("Scourge of Fleets", 51, Rarity.RARE, mage.cards.s.ScourgeOfFleets.class)); + cards.add(new SetCardInfo("Spawn of Thraxes", 112, Rarity.RARE, mage.cards.s.SpawnOfThraxes.class)); + cards.add(new SetCardInfo("Squelching Leeches", 84, Rarity.UNCOMMON, mage.cards.s.SquelchingLeeches.class)); + } +} From 29eea18924f76e71a964431e09f95993a2707836 Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Mon, 16 Mar 2020 12:53:23 +0100 Subject: [PATCH 081/182] Added the Magic 2015 Clash Pack (CP1) set. --- .../src/mage/sets/Magic2015ClashPack.java | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/Magic2015ClashPack.java diff --git a/Mage.Sets/src/mage/sets/Magic2015ClashPack.java b/Mage.Sets/src/mage/sets/Magic2015ClashPack.java new file mode 100644 index 00000000000..9f5b67b285b --- /dev/null +++ b/Mage.Sets/src/mage/sets/Magic2015ClashPack.java @@ -0,0 +1,30 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/cp1 + */ +public class Magic2015ClashPack extends ExpansionSet { + + private static final Magic2015ClashPack instance = new Magic2015ClashPack(); + + public static Magic2015ClashPack getInstance() { + return instance; + } + + private Magic2015ClashPack() { + super("Magic 2015 Clash Pack", "CP1", ExpansionSet.buildDate(2014, 7, 18), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Fated Intervention", 2, Rarity.RARE, mage.cards.f.FatedIntervention.class)); + cards.add(new SetCardInfo("Font of Fertility", 3, Rarity.COMMON, mage.cards.f.FontOfFertility.class)); + cards.add(new SetCardInfo("Hydra Broodmaster", 4, Rarity.RARE, mage.cards.h.HydraBroodmaster.class)); + cards.add(new SetCardInfo("Prognostic Sphinx", 1, Rarity.RARE, mage.cards.p.PrognosticSphinx.class)); + cards.add(new SetCardInfo("Prophet of Kruphix", 5, Rarity.RARE, mage.cards.p.ProphetOfKruphix.class)); + cards.add(new SetCardInfo("Temple of Mystery", 6, Rarity.RARE, mage.cards.t.TempleOfMystery.class)); + } +} From 1cdb4b31b176f9c693d23740d240ec53547480ed Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Mon, 16 Mar 2020 13:11:33 +0100 Subject: [PATCH 082/182] Added the Fate Reforged Clash Pack (CP2) set. --- .../src/mage/sets/FateReforgedClashPack.java | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/FateReforgedClashPack.java diff --git a/Mage.Sets/src/mage/sets/FateReforgedClashPack.java b/Mage.Sets/src/mage/sets/FateReforgedClashPack.java new file mode 100644 index 00000000000..2a94ca23935 --- /dev/null +++ b/Mage.Sets/src/mage/sets/FateReforgedClashPack.java @@ -0,0 +1,30 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/cp2 + */ +public class FateReforgedClashPack extends ExpansionSet { + + private static final FateReforgedClashPack instance = new FateReforgedClashPack(); + + public static FateReforgedClashPack getInstance() { + return instance; + } + + private FateReforgedClashPack() { + super("Fate Reforged Clash Pack", "CP2", ExpansionSet.buildDate(2015, 1, 23), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Courser of Kruphix", 6, Rarity.RARE, mage.cards.c.CourserOfKruphix.class)); + cards.add(new SetCardInfo("Hero's Downfall", 2, Rarity.RARE, mage.cards.h.HerosDownfall.class)); + cards.add(new SetCardInfo("Necropolis Fiend", 1, Rarity.RARE, mage.cards.n.NecropolisFiend.class)); + cards.add(new SetCardInfo("Reaper of the Wilds", 4, Rarity.RARE, mage.cards.r.ReaperOfTheWilds.class)); + cards.add(new SetCardInfo("Sultai Ascendancy", 3, Rarity.RARE, mage.cards.s.SultaiAscendancy.class)); + cards.add(new SetCardInfo("Whip of Erebos", 5, Rarity.RARE, mage.cards.w.WhipOfErebos.class)); + } +} From 55473c9191197b14b2930d2e3581f38942ba8597 Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Mon, 16 Mar 2020 13:11:56 +0100 Subject: [PATCH 083/182] Added the Fate Reforged Promos (PFRF) set. --- .../src/mage/sets/FateReforgedPromos.java | 63 +++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/FateReforgedPromos.java diff --git a/Mage.Sets/src/mage/sets/FateReforgedPromos.java b/Mage.Sets/src/mage/sets/FateReforgedPromos.java new file mode 100644 index 00000000000..bfc0849fb41 --- /dev/null +++ b/Mage.Sets/src/mage/sets/FateReforgedPromos.java @@ -0,0 +1,63 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/pfrf + */ +public class FateReforgedPromos extends ExpansionSet { + + private static final FateReforgedPromos instance = new FateReforgedPromos(); + + public static FateReforgedPromos getInstance() { + return instance; + } + + private FateReforgedPromos() { + super("Fate Reforged Promos", "PFRF", ExpansionSet.buildDate(2015, 1, 24), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Alesha, Who Smiles at Death", "90s", Rarity.RARE, mage.cards.a.AleshaWhoSmilesAtDeath.class)); + cards.add(new SetCardInfo("Arcbond", "91s", Rarity.RARE, mage.cards.a.Arcbond.class)); + cards.add(new SetCardInfo("Archfiend of Depravity", 62, Rarity.RARE, mage.cards.a.ArchfiendOfDepravity.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Archfiend of Depravity", "62s", Rarity.RARE, mage.cards.a.ArchfiendOfDepravity.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Atarka, World Render", "149s", Rarity.RARE, mage.cards.a.AtarkaWorldRender.class)); + cards.add(new SetCardInfo("Brutal Hordechief", "64s", Rarity.MYTHIC, mage.cards.b.BrutalHordechief.class)); + cards.add(new SetCardInfo("Daghatar the Adamant", "9s", Rarity.RARE, mage.cards.d.DaghatarTheAdamant.class)); + cards.add(new SetCardInfo("Dragonscale General", 11, Rarity.RARE, mage.cards.d.DragonscaleGeneral.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Dragonscale General", "11s", Rarity.RARE, mage.cards.d.DragonscaleGeneral.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Dromoka, the Eternal", "151s", Rarity.RARE, mage.cards.d.DromokaTheEternal.class)); + cards.add(new SetCardInfo("Flamerush Rider", 99, Rarity.RARE, mage.cards.f.FlamerushRider.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Flamerush Rider", "99s", Rarity.RARE, mage.cards.f.FlamerushRider.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Flamewake Phoenix", "100s", Rarity.RARE, mage.cards.f.FlamewakePhoenix.class)); + cards.add(new SetCardInfo("Jeskai Infiltrator", "36s", Rarity.RARE, mage.cards.j.JeskaiInfiltrator.class)); + cards.add(new SetCardInfo("Kolaghan, the Storm's Fury", "155s", Rarity.RARE, mage.cards.k.KolaghanTheStormsFury.class)); + cards.add(new SetCardInfo("Mardu Shadowspear", 74, Rarity.UNCOMMON, mage.cards.m.MarduShadowspear.class)); + cards.add(new SetCardInfo("Mardu Strike Leader", "75s", Rarity.RARE, mage.cards.m.MarduStrikeLeader.class)); + cards.add(new SetCardInfo("Mastery of the Unseen", "19s", Rarity.RARE, mage.cards.m.MasteryOfTheUnseen.class)); + cards.add(new SetCardInfo("Ojutai, Soul of Winter", "156s", Rarity.RARE, mage.cards.o.OjutaiSoulOfWinter.class)); + cards.add(new SetCardInfo("Rally the Ancestors", "22s", Rarity.RARE, mage.cards.r.RallyTheAncestors.class)); + cards.add(new SetCardInfo("Sage-Eye Avengers", 50, Rarity.RARE, mage.cards.s.SageEyeAvengers.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Sage-Eye Avengers", "50s", Rarity.RARE, mage.cards.s.SageEyeAvengers.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Sandsteppe Mastodon", 137, Rarity.RARE, mage.cards.s.SandsteppeMastodon.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Sandsteppe Mastodon", "137s", Rarity.RARE, mage.cards.s.SandsteppeMastodon.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Shaman of the Great Hunt", "113s", Rarity.MYTHIC, mage.cards.s.ShamanOfTheGreatHunt.class)); + cards.add(new SetCardInfo("Shamanic Revelation", 138, Rarity.RARE, mage.cards.s.ShamanicRevelation.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Shamanic Revelation", "138s", Rarity.RARE, mage.cards.s.ShamanicRevelation.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Shu Yun, the Silent Tempest", "52s", Rarity.RARE, mage.cards.s.ShuYunTheSilentTempest.class)); + cards.add(new SetCardInfo("Silumgar, the Drifting Death", "157s", Rarity.RARE, mage.cards.s.SilumgarTheDriftingDeath.class)); + cards.add(new SetCardInfo("Soulfire Grand Master", "27s", Rarity.MYTHIC, mage.cards.s.SoulfireGrandMaster.class)); + cards.add(new SetCardInfo("Soulflayer", "84s", Rarity.RARE, mage.cards.s.Soulflayer.class)); + cards.add(new SetCardInfo("Supplant Form", 54, Rarity.RARE, mage.cards.s.SupplantForm.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Supplant Form", "54s", Rarity.RARE, mage.cards.s.SupplantForm.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Tasigur, the Golden Fang", "87s", Rarity.RARE, mage.cards.t.TasigurTheGoldenFang.class)); + cards.add(new SetCardInfo("Temur War Shaman", 142, Rarity.RARE, mage.cards.t.TemurWarShaman.class)); + cards.add(new SetCardInfo("Torrent Elemental", "56s", Rarity.MYTHIC, mage.cards.t.TorrentElemental.class)); + cards.add(new SetCardInfo("Warden of the First Tree", "143s", Rarity.MYTHIC, mage.cards.w.WardenOfTheFirstTree.class)); + cards.add(new SetCardInfo("Wildcall", "146s", Rarity.RARE, mage.cards.w.Wildcall.class)); + cards.add(new SetCardInfo("Yasova Dragonclaw", "148s", Rarity.RARE, mage.cards.y.YasovaDragonclaw.class)); + } +} From fb23b6a0b58360f8d0f30d6f6cb28fdcf5063696 Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Mon, 16 Mar 2020 13:13:08 +0100 Subject: [PATCH 084/182] Added the Khans of Tarkir Promos (PKTK) set. --- .../src/mage/sets/KhansOfTarkirPromos.java | 74 +++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/KhansOfTarkirPromos.java diff --git a/Mage.Sets/src/mage/sets/KhansOfTarkirPromos.java b/Mage.Sets/src/mage/sets/KhansOfTarkirPromos.java new file mode 100644 index 00000000000..4ba4fd8f228 --- /dev/null +++ b/Mage.Sets/src/mage/sets/KhansOfTarkirPromos.java @@ -0,0 +1,74 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/pktk + */ +public class KhansOfTarkirPromos extends ExpansionSet { + + private static final KhansOfTarkirPromos instance = new KhansOfTarkirPromos(); + + public static KhansOfTarkirPromos getInstance() { + return instance; + } + + private KhansOfTarkirPromos() { + super("Khans of Tarkir Promos", "PKTK", ExpansionSet.buildDate(2014, 9, 27), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Abzan Ascendancy", "160s", Rarity.RARE, mage.cards.a.AbzanAscendancy.class)); + cards.add(new SetCardInfo("Anafenza, the Foremost", "163s", Rarity.MYTHIC, mage.cards.a.AnafenzaTheForemost.class)); + cards.add(new SetCardInfo("Ankle Shanker", 164, Rarity.RARE, mage.cards.a.AnkleShanker.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Ankle Shanker", "164s", Rarity.RARE, mage.cards.a.AnkleShanker.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Avalanche Tusker", 166, Rarity.RARE, mage.cards.a.AvalancheTusker.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Avalanche Tusker", "166s", Rarity.RARE, mage.cards.a.AvalancheTusker.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Bloodsoaked Champion", "66s", Rarity.RARE, mage.cards.b.BloodsoakedChampion.class)); + cards.add(new SetCardInfo("Butcher of the Horde", "168s", Rarity.RARE, mage.cards.b.ButcherOfTheHorde.class)); + cards.add(new SetCardInfo("Crackling Doom", "171s", Rarity.RARE, mage.cards.c.CracklingDoom.class)); + cards.add(new SetCardInfo("Crater's Claws", "106s", Rarity.RARE, mage.cards.c.CratersClaws.class)); + cards.add(new SetCardInfo("Deflecting Palm", "173s", Rarity.RARE, mage.cards.d.DeflectingPalm.class)); + cards.add(new SetCardInfo("Dig Through Time", "36s", Rarity.RARE, mage.cards.d.DigThroughTime.class)); + cards.add(new SetCardInfo("Dragon Throne of Tarkir", 219, Rarity.RARE, mage.cards.d.DragonThroneOfTarkir.class)); + cards.add(new SetCardInfo("Dragon-Style Twins", "108s", Rarity.RARE, mage.cards.d.DragonStyleTwins.class)); + cards.add(new SetCardInfo("Duneblast", "174s", Rarity.RARE, mage.cards.d.Duneblast.class)); + cards.add(new SetCardInfo("Flying Crane Technique", "176s", Rarity.RARE, mage.cards.f.FlyingCraneTechnique.class)); + cards.add(new SetCardInfo("Grim Haruspex", "73s", Rarity.RARE, mage.cards.g.GrimHaruspex.class)); + cards.add(new SetCardInfo("Hardened Scales", "133s", Rarity.RARE, mage.cards.h.HardenedScales.class)); + cards.add(new SetCardInfo("Heir of the Wilds", 134, Rarity.UNCOMMON, mage.cards.h.HeirOfTheWilds.class)); + cards.add(new SetCardInfo("Herald of Anafenza", "12s", Rarity.RARE, mage.cards.h.HeraldOfAnafenza.class)); + cards.add(new SetCardInfo("High Sentinels of Arashin", "13s", Rarity.RARE, mage.cards.h.HighSentinelsOfArashin.class)); + cards.add(new SetCardInfo("Icy Blast", "42s", Rarity.RARE, mage.cards.i.IcyBlast.class)); + cards.add(new SetCardInfo("Ivorytusk Fortress", 179, Rarity.RARE, mage.cards.i.IvorytuskFortress.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Ivorytusk Fortress", "179s", Rarity.RARE, mage.cards.i.IvorytuskFortress.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Jeering Instigator", "113s", Rarity.RARE, mage.cards.j.JeeringInstigator.class)); + cards.add(new SetCardInfo("Jeskai Ascendancy", "180s", Rarity.RARE, mage.cards.j.JeskaiAscendancy.class)); + cards.add(new SetCardInfo("Kheru Lich Lord", "182s", Rarity.RARE, mage.cards.k.KheruLichLord.class)); + cards.add(new SetCardInfo("Mardu Ascendancy", "185s", Rarity.RARE, mage.cards.m.MarduAscendancy.class)); + cards.add(new SetCardInfo("Master of Pearls", "18s", Rarity.RARE, mage.cards.m.MasterOfPearls.class)); + cards.add(new SetCardInfo("Narset, Enlightened Master", "190s", Rarity.MYTHIC, mage.cards.n.NarsetEnlightenedMaster.class)); + cards.add(new SetCardInfo("Necropolis Fiend", "82s", Rarity.RARE, mage.cards.n.NecropolisFiend.class)); + cards.add(new SetCardInfo("Rakshasa Vizier", 193, Rarity.RARE, mage.cards.r.RakshasaVizier.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Rakshasa Vizier", "193s", Rarity.RARE, mage.cards.r.RakshasaVizier.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Rattleclaw Mystic", 144, Rarity.RARE, mage.cards.r.RattleclawMystic.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Rattleclaw Mystic", "144s", Rarity.RARE, mage.cards.r.RattleclawMystic.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Sage of the Inward Eye", 195, Rarity.RARE, mage.cards.s.SageOfTheInwardEye.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Sage of the Inward Eye", "195s", Rarity.RARE, mage.cards.s.SageOfTheInwardEye.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Sidisi, Brood Tyrant", "199s", Rarity.MYTHIC, mage.cards.s.SidisiBroodTyrant.class)); + cards.add(new SetCardInfo("Siege Rhino", "200s", Rarity.RARE, mage.cards.s.SiegeRhino.class)); + cards.add(new SetCardInfo("Sultai Ascendancy", "203s", Rarity.RARE, mage.cards.s.SultaiAscendancy.class)); + cards.add(new SetCardInfo("Sultai Charm", 204, Rarity.UNCOMMON, mage.cards.s.SultaiCharm.class)); + cards.add(new SetCardInfo("Surrak Dragonclaw", "206s", Rarity.MYTHIC, mage.cards.s.SurrakDragonclaw.class)); + cards.add(new SetCardInfo("Temur Ascendancy", "207s", Rarity.RARE, mage.cards.t.TemurAscendancy.class)); + cards.add(new SetCardInfo("Thousand Winds", "58s", Rarity.RARE, mage.cards.t.ThousandWinds.class)); + cards.add(new SetCardInfo("Trail of Mystery", "154s", Rarity.RARE, mage.cards.t.TrailOfMystery.class)); + cards.add(new SetCardInfo("Trap Essence", "209s", Rarity.RARE, mage.cards.t.TrapEssence.class)); + cards.add(new SetCardInfo("Utter End", 210, Rarity.RARE, mage.cards.u.UtterEnd.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Utter End", "210s", Rarity.RARE, mage.cards.u.UtterEnd.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Villainous Wealth", "211s", Rarity.RARE, mage.cards.v.VillainousWealth.class)); + cards.add(new SetCardInfo("Zurgo Helmsmasher", "214s", Rarity.MYTHIC, mage.cards.z.ZurgoHelmsmasher.class)); + } +} From 8b88aafa542baacd6674be6f02520fcc45322c3e Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Mon, 16 Mar 2020 13:16:27 +0100 Subject: [PATCH 085/182] Added the Dragons of Tarkir Promos (PDTK) set. --- .../src/mage/sets/DragonsOfTarkirPromos.java | 73 +++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/DragonsOfTarkirPromos.java diff --git a/Mage.Sets/src/mage/sets/DragonsOfTarkirPromos.java b/Mage.Sets/src/mage/sets/DragonsOfTarkirPromos.java new file mode 100644 index 00000000000..79e35c3cb8c --- /dev/null +++ b/Mage.Sets/src/mage/sets/DragonsOfTarkirPromos.java @@ -0,0 +1,73 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/pdtk + */ +public class DragonsOfTarkirPromos extends ExpansionSet { + + private static final DragonsOfTarkirPromos instance = new DragonsOfTarkirPromos(); + + public static DragonsOfTarkirPromos getInstance() { + return instance; + } + + private DragonsOfTarkirPromos() { + super("Dragons of Tarkir Promos", "PDTK", ExpansionSet.buildDate(2015, 3, 28), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Anafenza, Kin-Tree Spirit", "2s", Rarity.RARE, mage.cards.a.AnafenzaKinTreeSpirit.class)); + cards.add(new SetCardInfo("Arashin Foremost", "3s", Rarity.RARE, mage.cards.a.ArashinForemost.class)); + cards.add(new SetCardInfo("Arashin Sovereign", 212, Rarity.RARE, mage.cards.a.ArashinSovereign.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Arashin Sovereign", "212s", Rarity.RARE, mage.cards.a.ArashinSovereign.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Atarka's Command", "213s", Rarity.RARE, mage.cards.a.AtarkasCommand.class)); + cards.add(new SetCardInfo("Avatar of the Resolute", "175s", Rarity.RARE, mage.cards.a.AvatarOfTheResolute.class)); + cards.add(new SetCardInfo("Blessed Reincarnation", "47s", Rarity.RARE, mage.cards.b.BlessedReincarnation.class)); + cards.add(new SetCardInfo("Blood-Chin Fanatic", "88s", Rarity.RARE, mage.cards.b.BloodChinFanatic.class)); + cards.add(new SetCardInfo("Boltwing Marauder", 214, Rarity.RARE, mage.cards.b.BoltwingMarauder.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Boltwing Marauder", "214s", Rarity.RARE, mage.cards.b.BoltwingMarauder.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Crater Elemental", "132s", Rarity.RARE, mage.cards.c.CraterElemental.class)); + cards.add(new SetCardInfo("Damnable Pact", "93s", Rarity.RARE, mage.cards.d.DamnablePact.class)); + cards.add(new SetCardInfo("Deathbringer Regent", 96, Rarity.RARE, mage.cards.d.DeathbringerRegent.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Deathbringer Regent", "96s", Rarity.RARE, mage.cards.d.DeathbringerRegent.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Den Protector", "181s", Rarity.RARE, mage.cards.d.DenProtector.class)); + cards.add(new SetCardInfo("Dragonlord Atarka", "216s", Rarity.MYTHIC, mage.cards.d.DragonlordAtarka.class)); + cards.add(new SetCardInfo("Dragonlord Dromoka", "217s", Rarity.MYTHIC, mage.cards.d.DragonlordDromoka.class)); + cards.add(new SetCardInfo("Dragonlord Kolaghan", "218s", Rarity.MYTHIC, mage.cards.d.DragonlordKolaghan.class)); + cards.add(new SetCardInfo("Dragonlord Ojutai", "219s", Rarity.MYTHIC, mage.cards.d.DragonlordOjutai.class)); + cards.add(new SetCardInfo("Dragonlord Silumgar", "220s", Rarity.MYTHIC, mage.cards.d.DragonlordSilumgar.class)); + cards.add(new SetCardInfo("Dromoka's Command", "221s", Rarity.RARE, mage.cards.d.DromokasCommand.class)); + cards.add(new SetCardInfo("Foe-Razer Regent", "187s", Rarity.RARE, mage.cards.f.FoeRazerRegent.class)); + cards.add(new SetCardInfo("Harbinger of the Hunt", 223, Rarity.RARE, mage.cards.h.HarbingerOfTheHunt.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Harbinger of the Hunt", "223s", Rarity.RARE, mage.cards.h.HarbingerOfTheHunt.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Hidden Dragonslayer", "23s", Rarity.RARE, mage.cards.h.HiddenDragonslayer.class)); + cards.add(new SetCardInfo("Icefall Regent", "58s", Rarity.RARE, mage.cards.i.IcefallRegent.class)); + cards.add(new SetCardInfo("Ire Shaman", "141s", Rarity.RARE, mage.cards.i.IreShaman.class)); + cards.add(new SetCardInfo("Kolaghan's Command", "224s", Rarity.RARE, mage.cards.k.KolaghansCommand.class)); + cards.add(new SetCardInfo("Living Lore", "61s", Rarity.RARE, mage.cards.l.LivingLore.class)); + cards.add(new SetCardInfo("Myth Realized", "26s", Rarity.RARE, mage.cards.m.MythRealized.class)); + cards.add(new SetCardInfo("Necromaster Dragon", 226, Rarity.RARE, mage.cards.n.NecromasterDragon.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Necromaster Dragon", "226s", Rarity.RARE, mage.cards.n.NecromasterDragon.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Ojutai's Command", 227, Rarity.RARE, mage.cards.o.OjutaisCommand.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Ojutai's Command", "227s", Rarity.RARE, mage.cards.o.OjutaisCommand.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Pitiless Horde", "112s", Rarity.RARE, mage.cards.p.PitilessHorde.class)); + cards.add(new SetCardInfo("Pristine Skywise", 228, Rarity.RARE, mage.cards.p.PristineSkywise.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Pristine Skywise", "228s", Rarity.RARE, mage.cards.p.PristineSkywise.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Profaner of the Dead", "70s", Rarity.RARE, mage.cards.p.ProfanerOfTheDead.class)); + cards.add(new SetCardInfo("Scaleguard Sentinels", 201, Rarity.UNCOMMON, mage.cards.s.ScaleguardSentinels.class)); + cards.add(new SetCardInfo("Sidisi, Undead Vizier", "120s", Rarity.RARE, mage.cards.s.SidisiUndeadVizier.class)); + cards.add(new SetCardInfo("Silumgar Assassin", "121s", Rarity.RARE, mage.cards.s.SilumgarAssassin.class)); + cards.add(new SetCardInfo("Silumgar's Command", "232s", Rarity.RARE, mage.cards.s.SilumgarsCommand.class)); + cards.add(new SetCardInfo("Stratus Dancer", "80s", Rarity.RARE, mage.cards.s.StratusDancer.class)); + cards.add(new SetCardInfo("Sunscorch Regent", "41s", Rarity.RARE, mage.cards.s.SunscorchRegent.class)); + cards.add(new SetCardInfo("Surrak, the Hunt Caller", "210s", Rarity.RARE, mage.cards.s.SurrakTheHuntCaller.class)); + cards.add(new SetCardInfo("Thunderbreak Regent", 162, Rarity.RARE, mage.cards.t.ThunderbreakRegent.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Thunderbreak Regent", "162s", Rarity.RARE, mage.cards.t.ThunderbreakRegent.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Volcanic Vision", "167s", Rarity.RARE, mage.cards.v.VolcanicVision.class)); + cards.add(new SetCardInfo("Zurgo Bellstriker", "169s", Rarity.RARE, mage.cards.z.ZurgoBellstriker.class)); + } +} From 2dc9a68fdc6da9259bd9272cffcef945bcd23bc1 Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Mon, 16 Mar 2020 13:17:08 +0100 Subject: [PATCH 086/182] Added the Tarkir Dragonfury (PTKDF) set. --- Mage.Sets/src/mage/sets/TarkirDragonfury.java | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/TarkirDragonfury.java diff --git a/Mage.Sets/src/mage/sets/TarkirDragonfury.java b/Mage.Sets/src/mage/sets/TarkirDragonfury.java new file mode 100644 index 00000000000..95bd896427d --- /dev/null +++ b/Mage.Sets/src/mage/sets/TarkirDragonfury.java @@ -0,0 +1,28 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/ptkdf + */ +public class TarkirDragonfury extends ExpansionSet { + + private static final TarkirDragonfury instance = new TarkirDragonfury(); + + public static TarkirDragonfury getInstance() { + return instance; + } + + private TarkirDragonfury() { + super("Tarkir Dragonfury", "PTKDF", ExpansionSet.buildDate(2015, 4, 3), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Dragon Fodder", 135, Rarity.COMMON, mage.cards.d.DragonFodder.class)); + cards.add(new SetCardInfo("Dragonlord's Servant", 138, Rarity.UNCOMMON, mage.cards.d.DragonlordsServant.class)); + cards.add(new SetCardInfo("Evolving Wilds", 248, Rarity.COMMON, mage.cards.e.EvolvingWilds.class)); + cards.add(new SetCardInfo("Foe-Razer Regent", 187, Rarity.RARE, mage.cards.f.FoeRazerRegent.class)); + } +} From ac1f3f1935c64ff06ab1f444cb53f0ade85b5938 Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Mon, 16 Mar 2020 13:20:35 +0100 Subject: [PATCH 087/182] Added the Magic Origins Clash Pack (CP3) set. --- .../src/mage/sets/MagicOriginsClashPack.java | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/MagicOriginsClashPack.java diff --git a/Mage.Sets/src/mage/sets/MagicOriginsClashPack.java b/Mage.Sets/src/mage/sets/MagicOriginsClashPack.java new file mode 100644 index 00000000000..13030a98a6d --- /dev/null +++ b/Mage.Sets/src/mage/sets/MagicOriginsClashPack.java @@ -0,0 +1,30 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/cp3 + */ +public class MagicOriginsClashPack extends ExpansionSet { + + private static final MagicOriginsClashPack instance = new MagicOriginsClashPack(); + + public static MagicOriginsClashPack getInstance() { + return instance; + } + + private MagicOriginsClashPack() { + super("Magic Origins Clash Pack", "CP3", ExpansionSet.buildDate(2015, 7, 17), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Dromoka, the Eternal", 4, Rarity.RARE, mage.cards.d.DromokaTheEternal.class)); + cards.add(new SetCardInfo("Honored Hierarch", 1, Rarity.RARE, mage.cards.h.HonoredHierarch.class)); + cards.add(new SetCardInfo("Sandsteppe Citadel", 6, Rarity.UNCOMMON, mage.cards.s.SandsteppeCitadel.class)); + cards.add(new SetCardInfo("Seeker of the Way", 2, Rarity.UNCOMMON, mage.cards.s.SeekerOfTheWay.class)); + cards.add(new SetCardInfo("Siege Rhino", 5, Rarity.RARE, mage.cards.s.SiegeRhino.class)); + cards.add(new SetCardInfo("Valorous Stance", 3, Rarity.UNCOMMON, mage.cards.v.ValorousStance.class)); + } +} From 9ecd04b1ee11fce7cecb86d688becd90e64fbd47 Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Mon, 16 Mar 2020 13:21:09 +0100 Subject: [PATCH 088/182] Added the Magic Origins Promos (PORI) set. --- .../src/mage/sets/MagicOriginsPromos.java | 78 +++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/MagicOriginsPromos.java diff --git a/Mage.Sets/src/mage/sets/MagicOriginsPromos.java b/Mage.Sets/src/mage/sets/MagicOriginsPromos.java new file mode 100644 index 00000000000..b76caff8a79 --- /dev/null +++ b/Mage.Sets/src/mage/sets/MagicOriginsPromos.java @@ -0,0 +1,78 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/pori + */ +public class MagicOriginsPromos extends ExpansionSet { + + private static final MagicOriginsPromos instance = new MagicOriginsPromos(); + + public static MagicOriginsPromos getInstance() { + return instance; + } + + private MagicOriginsPromos() { + super("Magic Origins Promos", "PORI", ExpansionSet.buildDate(2015, 7, 17), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Abbot of Keral Keep", "127s", Rarity.RARE, mage.cards.a.AbbotOfKeralKeep.class)); + cards.add(new SetCardInfo("Alhammarret, High Arbiter", 43, Rarity.RARE, mage.cards.a.AlhammarretHighArbiter.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Alhammarret, High Arbiter", "43s", Rarity.RARE, mage.cards.a.AlhammarretHighArbiter.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Chandra's Ignition", "137s", Rarity.RARE, mage.cards.c.ChandrasIgnition.class)); + cards.add(new SetCardInfo("Chandra, Fire of Kaladesh", "135s", Rarity.MYTHIC, mage.cards.c.ChandraFireOfKaladesh.class)); + cards.add(new SetCardInfo("Chandra, Roaring Flame", "135s", Rarity.MYTHIC, mage.cards.c.ChandraRoaringFlame.class)); + cards.add(new SetCardInfo("Conclave Naturalists", 171, Rarity.UNCOMMON, mage.cards.c.ConclaveNaturalists.class)); + cards.add(new SetCardInfo("Dark Petition", "90s", Rarity.RARE, mage.cards.d.DarkPetition.class)); + cards.add(new SetCardInfo("Despoiler of Souls", "93s", Rarity.RARE, mage.cards.d.DespoilerOfSouls.class)); + cards.add(new SetCardInfo("Dwynen, Gilt-Leaf Daen", 172, Rarity.RARE, mage.cards.d.DwynenGiltLeafDaen.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Dwynen, Gilt-Leaf Daen", "172s", Rarity.RARE, mage.cards.d.DwynenGiltLeafDaen.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Embermaw Hellion", "141s", Rarity.RARE, mage.cards.e.EmbermawHellion.class)); + cards.add(new SetCardInfo("Evolutionary Leap", "176s", Rarity.RARE, mage.cards.e.EvolutionaryLeap.class)); + cards.add(new SetCardInfo("Exquisite Firecraft", "143s", Rarity.RARE, mage.cards.e.ExquisiteFirecraft.class)); + cards.add(new SetCardInfo("Gaea's Revenge", "177s", Rarity.RARE, mage.cards.g.GaeasRevenge.class)); + cards.add(new SetCardInfo("Gideon's Phalanx", "14s", Rarity.RARE, mage.cards.g.GideonsPhalanx.class)); + cards.add(new SetCardInfo("Gideon, Battle-Forged", "23s", Rarity.MYTHIC, mage.cards.g.GideonBattleForged.class)); + cards.add(new SetCardInfo("Gilt-Leaf Winnower", "99s", Rarity.RARE, mage.cards.g.GiltLeafWinnower.class)); + cards.add(new SetCardInfo("Goblin Piledriver", "151s", Rarity.RARE, mage.cards.g.GoblinPiledriver.class)); + cards.add(new SetCardInfo("Graveblade Marauder", "101s", Rarity.RARE, mage.cards.g.GravebladeMarauder.class)); + cards.add(new SetCardInfo("Harbinger of the Tides", "58s", Rarity.RARE, mage.cards.h.HarbingerOfTheTides.class)); + cards.add(new SetCardInfo("Hixus, Prison Warden", 19, Rarity.RARE, mage.cards.h.HixusPrisonWarden.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Hixus, Prison Warden", "19s", Rarity.RARE, mage.cards.h.HixusPrisonWarden.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Honored Hierarch", "182s", Rarity.RARE, mage.cards.h.HonoredHierarch.class)); + cards.add(new SetCardInfo("Jace, Telepath Unbound", "60s", Rarity.MYTHIC, mage.cards.j.JaceTelepathUnbound.class)); + cards.add(new SetCardInfo("Jace, Vryn's Prodigy", "60s", Rarity.MYTHIC, mage.cards.j.JaceVrynsProdigy.class)); + cards.add(new SetCardInfo("Knight of the White Orchid", "21s", Rarity.RARE, mage.cards.k.KnightOfTheWhiteOrchid.class)); + cards.add(new SetCardInfo("Kothophed, Soul Hoarder", 104, Rarity.RARE, mage.cards.k.KothophedSoulHoarder.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Kothophed, Soul Hoarder", "104s", Rarity.RARE, mage.cards.k.KothophedSoulHoarder.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Kytheon's Irregulars", "24s", Rarity.RARE, mage.cards.k.KytheonsIrregulars.class)); + cards.add(new SetCardInfo("Kytheon, Hero of Akros", "23s", Rarity.MYTHIC, mage.cards.k.KytheonHeroOfAkros.class)); + cards.add(new SetCardInfo("Languish", 105, Rarity.RARE, mage.cards.l.Languish.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Languish", "105s", Rarity.RARE, mage.cards.l.Languish.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Liliana, Defiant Necromancer", "106s", Rarity.MYTHIC, mage.cards.l.LilianaDefiantNecromancer.class)); + cards.add(new SetCardInfo("Liliana, Heretical Healer", "106s", Rarity.MYTHIC, mage.cards.l.LilianaHereticalHealer.class)); + cards.add(new SetCardInfo("Managorger Hydra", "186s", Rarity.RARE, mage.cards.m.ManagorgerHydra.class)); + cards.add(new SetCardInfo("Mizzium Meddler", 64, Rarity.RARE, mage.cards.m.MizziumMeddler.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mizzium Meddler", "64s", Rarity.RARE, mage.cards.m.MizziumMeddler.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Nissa's Revelation", "191s", Rarity.RARE, mage.cards.n.NissasRevelation.class)); + cards.add(new SetCardInfo("Nissa, Sage Animist", "189s", Rarity.MYTHIC, mage.cards.n.NissaSageAnimist.class)); + cards.add(new SetCardInfo("Nissa, Vastwood Seer", "189s", Rarity.MYTHIC, mage.cards.n.NissaVastwoodSeer.class)); + cards.add(new SetCardInfo("Outland Colossus", "193s", Rarity.RARE, mage.cards.o.OutlandColossus.class)); + cards.add(new SetCardInfo("Pia and Kiran Nalaar", 157, Rarity.RARE, mage.cards.p.PiaAndKiranNalaar.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Pia and Kiran Nalaar", "157s", Rarity.RARE, mage.cards.p.PiaAndKiranNalaar.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Priest of the Blood Rite", "112s", Rarity.RARE, mage.cards.p.PriestOfTheBloodRite.class)); + cards.add(new SetCardInfo("Relic Seeker", 29, Rarity.RARE, mage.cards.r.RelicSeeker.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Relic Seeker", "29s", Rarity.RARE, mage.cards.r.RelicSeeker.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Scab-Clan Berserker", "160s", Rarity.RARE, mage.cards.s.ScabClanBerserker.class)); + cards.add(new SetCardInfo("Soulblade Djinn", "75s", Rarity.RARE, mage.cards.s.SoulbladeDjinn.class)); + cards.add(new SetCardInfo("Talent of the Telepath", "78s", Rarity.RARE, mage.cards.t.TalentOfTheTelepath.class)); + cards.add(new SetCardInfo("Thopter Spy Network", "79s", Rarity.RARE, mage.cards.t.ThopterSpyNetwork.class)); + cards.add(new SetCardInfo("Tragic Arrogance", "38s", Rarity.RARE, mage.cards.t.TragicArrogance.class)); + cards.add(new SetCardInfo("Vryn Wingmare", "40s", Rarity.RARE, mage.cards.v.VrynWingmare.class)); + cards.add(new SetCardInfo("Willbreaker", "84s", Rarity.RARE, mage.cards.w.Willbreaker.class)); + } +} From b2617a6cfb183577a49da26c27636cf4096fc9ca Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Mon, 16 Mar 2020 13:23:42 +0100 Subject: [PATCH 089/182] Added the BFZ Standard Series (PSS1) set. --- .../src/mage/sets/BFZStandardSeries.java | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/BFZStandardSeries.java diff --git a/Mage.Sets/src/mage/sets/BFZStandardSeries.java b/Mage.Sets/src/mage/sets/BFZStandardSeries.java new file mode 100644 index 00000000000..2dc173930ad --- /dev/null +++ b/Mage.Sets/src/mage/sets/BFZStandardSeries.java @@ -0,0 +1,29 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/pss1 + */ +public class BFZStandardSeries extends ExpansionSet { + + private static final BFZStandardSeries instance = new BFZStandardSeries(); + + public static BFZStandardSeries getInstance() { + return instance; + } + + private BFZStandardSeries() { + super("BFZ Standard Series", "PSS1", ExpansionSet.buildDate(2015, 10, 2), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Canopy Vista", 234, Rarity.RARE, mage.cards.c.CanopyVista.class)); + cards.add(new SetCardInfo("Cinder Glade", 235, Rarity.RARE, mage.cards.c.CinderGlade.class)); + cards.add(new SetCardInfo("Prairie Stream", 241, Rarity.RARE, mage.cards.p.PrairieStream.class)); + cards.add(new SetCardInfo("Smoldering Marsh", 247, Rarity.RARE, mage.cards.s.SmolderingMarsh.class)); + cards.add(new SetCardInfo("Sunken Hollow", 249, Rarity.RARE, mage.cards.s.SunkenHollow.class)); + } +} From 7d7a341109abacd7906a5faf0ebdbb696684ed56 Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Mon, 16 Mar 2020 13:24:06 +0100 Subject: [PATCH 090/182] Added the Battle for Zendikar Promos (PBFZ) set. --- .../mage/sets/BattleForZendikarPromos.java | 102 ++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/BattleForZendikarPromos.java diff --git a/Mage.Sets/src/mage/sets/BattleForZendikarPromos.java b/Mage.Sets/src/mage/sets/BattleForZendikarPromos.java new file mode 100644 index 00000000000..2b34de9174e --- /dev/null +++ b/Mage.Sets/src/mage/sets/BattleForZendikarPromos.java @@ -0,0 +1,102 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/pbfz + */ +public class BattleForZendikarPromos extends ExpansionSet { + + private static final BattleForZendikarPromos instance = new BattleForZendikarPromos(); + + public static BattleForZendikarPromos getInstance() { + return instance; + } + + private BattleForZendikarPromos() { + super("Battle for Zendikar Promos", "PBFZ", ExpansionSet.buildDate(2015, 10, 3), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Akoum Firebird", "138s", Rarity.MYTHIC, mage.cards.a.AkoumFirebird.class)); + cards.add(new SetCardInfo("Akoum Hellkite", "139s", Rarity.RARE, mage.cards.a.AkoumHellkite.class)); + cards.add(new SetCardInfo("Aligned Hedron Network", "222s", Rarity.RARE, mage.cards.a.AlignedHedronNetwork.class)); + cards.add(new SetCardInfo("Ally Encampment", "228s", Rarity.RARE, mage.cards.a.AllyEncampment.class)); + cards.add(new SetCardInfo("Angelic Captain", "208s", Rarity.RARE, mage.cards.a.AngelicCaptain.class)); + cards.add(new SetCardInfo("Barrage Tyrant", 127, Rarity.RARE, mage.cards.b.BarrageTyrant.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Barrage Tyrant", "127s", Rarity.RARE, mage.cards.b.BarrageTyrant.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Beastcaller Savant", "170s", Rarity.RARE, mage.cards.b.BeastcallerSavant.class)); + cards.add(new SetCardInfo("Blight Herder", 2, Rarity.RARE, mage.cards.b.BlightHerder.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Blight Herder", "2s", Rarity.RARE, mage.cards.b.BlightHerder.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Bring to Light", "209s", Rarity.RARE, mage.cards.b.BringToLight.class)); + cards.add(new SetCardInfo("Brood Butcher", "199s", Rarity.RARE, mage.cards.b.BroodButcher.class)); + cards.add(new SetCardInfo("Brutal Expulsion", "200s", Rarity.RARE, mage.cards.b.BrutalExpulsion.class)); + cards.add(new SetCardInfo("Canopy Vista", "234s", Rarity.RARE, mage.cards.c.CanopyVista.class)); + cards.add(new SetCardInfo("Cinder Glade", "235s", Rarity.RARE, mage.cards.c.CinderGlade.class)); + cards.add(new SetCardInfo("Conduit of Ruin", "4s", Rarity.RARE, mage.cards.c.ConduitOfRuin.class)); + cards.add(new SetCardInfo("Defiant Bloodlord", 107, Rarity.RARE, mage.cards.d.DefiantBloodlord.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Defiant Bloodlord", "107s", Rarity.RARE, mage.cards.d.DefiantBloodlord.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Desolation Twin", "6s", Rarity.RARE, mage.cards.d.DesolationTwin.class)); + cards.add(new SetCardInfo("Dragonmaster Outcast", "144s", Rarity.MYTHIC, mage.cards.d.DragonmasterOutcast.class)); + cards.add(new SetCardInfo("Drana, Liberator of Malakir", "109s", Rarity.MYTHIC, mage.cards.d.DranaLiberatorOfMalakir.class)); + cards.add(new SetCardInfo("Drowner of Hope", 57, Rarity.RARE, mage.cards.d.DrownerOfHope.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Drowner of Hope", "57s", Rarity.RARE, mage.cards.d.DrownerOfHope.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Dust Stalker", "202s", Rarity.RARE, mage.cards.d.DustStalker.class)); + cards.add(new SetCardInfo("Emeria Shepherd", "22s", Rarity.RARE, mage.cards.e.EmeriaShepherd.class)); + cards.add(new SetCardInfo("Endless One", "8s", Rarity.RARE, mage.cards.e.EndlessOne.class)); + cards.add(new SetCardInfo("Exert Influence", "77s", Rarity.RARE, mage.cards.e.ExertInfluence.class)); + cards.add(new SetCardInfo("Fathom Feeder", "203s", Rarity.RARE, mage.cards.f.FathomFeeder.class)); + cards.add(new SetCardInfo("Felidar Sovereign", "26s", Rarity.RARE, mage.cards.f.FelidarSovereign.class)); + cards.add(new SetCardInfo("From Beyond", "167s", Rarity.RARE, mage.cards.f.FromBeyond.class)); + cards.add(new SetCardInfo("Gideon, Ally of Zendikar", "29s", Rarity.MYTHIC, mage.cards.g.GideonAllyOfZendikar.class)); + cards.add(new SetCardInfo("Greenwarden of Murasa", "174s", Rarity.MYTHIC, mage.cards.g.GreenwardenOfMurasa.class)); + cards.add(new SetCardInfo("Gruesome Slaughter", "9s", Rarity.RARE, mage.cards.g.GruesomeSlaughter.class)); + cards.add(new SetCardInfo("Guardian of Tazeem", "78s", Rarity.RARE, mage.cards.g.GuardianOfTazeem.class)); + cards.add(new SetCardInfo("Guul Draz Overseer", "112s", Rarity.RARE, mage.cards.g.GuulDrazOverseer.class)); + cards.add(new SetCardInfo("Hero of Goma Fada", 31, Rarity.RARE, mage.cards.h.HeroOfGomaFada.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Hero of Goma Fada", "31s", Rarity.RARE, mage.cards.h.HeroOfGomaFada.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Kiora, Master of the Depths", "213s", Rarity.MYTHIC, mage.cards.k.KioraMasterOfTheDepths.class)); + cards.add(new SetCardInfo("Lantern Scout", "37s", Rarity.RARE, mage.cards.l.LanternScout.class)); + cards.add(new SetCardInfo("Lumbering Falls", "239s", Rarity.RARE, mage.cards.l.LumberingFalls.class)); + cards.add(new SetCardInfo("March from the Tomb", "214s", Rarity.RARE, mage.cards.m.MarchFromTheTomb.class)); + cards.add(new SetCardInfo("Munda, Ambush Leader", "215s", Rarity.RARE, mage.cards.m.MundaAmbushLeader.class)); + cards.add(new SetCardInfo("Nissa's Renewal", "180s", Rarity.RARE, mage.cards.n.NissasRenewal.class)); + cards.add(new SetCardInfo("Noyan Dar, Roil Shaper", "216s", Rarity.RARE, mage.cards.n.NoyanDarRoilShaper.class)); + cards.add(new SetCardInfo("Ob Nixilis Reignited", "119s", Rarity.MYTHIC, mage.cards.o.ObNixilisReignited.class)); + cards.add(new SetCardInfo("Oblivion Sower", "11s", Rarity.MYTHIC, mage.cards.o.OblivionSower.class)); + cards.add(new SetCardInfo("Omnath, Locus of Rage", "217s", Rarity.MYTHIC, mage.cards.o.OmnathLocusOfRage.class)); + cards.add(new SetCardInfo("Oran-Rief Hydra", 181, Rarity.RARE, mage.cards.o.OranRiefHydra.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Oran-Rief Hydra", "181s", Rarity.RARE, mage.cards.o.OranRiefHydra.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Painful Truths", "120s", Rarity.RARE, mage.cards.p.PainfulTruths.class)); + cards.add(new SetCardInfo("Part the Waterveil", "80s", Rarity.MYTHIC, mage.cards.p.PartTheWaterveil.class)); + cards.add(new SetCardInfo("Planar Outburst", "42s", Rarity.RARE, mage.cards.p.PlanarOutburst.class)); + cards.add(new SetCardInfo("Prairie Stream", "241s", Rarity.RARE, mage.cards.p.PrairieStream.class)); + cards.add(new SetCardInfo("Prism Array", "81s", Rarity.RARE, mage.cards.p.PrismArray.class)); + cards.add(new SetCardInfo("Quarantine Field", "43s", Rarity.MYTHIC, mage.cards.q.QuarantineField.class)); + cards.add(new SetCardInfo("Radiant Flames", 151, Rarity.RARE, mage.cards.r.RadiantFlames.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Radiant Flames", "151s", Rarity.RARE, mage.cards.r.RadiantFlames.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Ruinous Path", 123, Rarity.RARE, mage.cards.r.RuinousPath.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Ruinous Path", "123s", Rarity.RARE, mage.cards.r.RuinousPath.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Sanctum of Ugin", "242s", Rarity.RARE, mage.cards.s.SanctumOfUgin.class)); + cards.add(new SetCardInfo("Scatter to the Winds", "85s", Rarity.RARE, mage.cards.s.ScatterToTheWinds.class)); + cards.add(new SetCardInfo("Scythe Leopard", 188, Rarity.UNCOMMON, mage.cards.s.ScytheLeopard.class)); + cards.add(new SetCardInfo("Serpentine Spike", "133s", Rarity.RARE, mage.cards.s.SerpentineSpike.class)); + cards.add(new SetCardInfo("Shambling Vent", "244s", Rarity.RARE, mage.cards.s.ShamblingVent.class)); + cards.add(new SetCardInfo("Shrine of the Forsaken Gods", "245s", Rarity.RARE, mage.cards.s.ShrineOfTheForsakenGods.class)); + cards.add(new SetCardInfo("Sire of Stagnation", "206s", Rarity.MYTHIC, mage.cards.s.SireOfStagnation.class)); + cards.add(new SetCardInfo("Smoldering Marsh", "247s", Rarity.RARE, mage.cards.s.SmolderingMarsh.class)); + cards.add(new SetCardInfo("Smothering Abomination", "99s", Rarity.RARE, mage.cards.s.SmotheringAbomination.class)); + cards.add(new SetCardInfo("Stasis Snare", 50, Rarity.UNCOMMON, mage.cards.s.StasisSnare.class)); + cards.add(new SetCardInfo("Sunken Hollow", "249s", Rarity.RARE, mage.cards.s.SunkenHollow.class)); + cards.add(new SetCardInfo("Ugin's Insight", "87s", Rarity.RARE, mage.cards.u.UginsInsight.class)); + cards.add(new SetCardInfo("Ulamog, the Ceaseless Hunger", "15s", Rarity.MYTHIC, mage.cards.u.UlamogTheCeaselessHunger.class)); + cards.add(new SetCardInfo("Undergrowth Champion", "197s", Rarity.MYTHIC, mage.cards.u.UndergrowthChampion.class)); + cards.add(new SetCardInfo("Veteran Warleader", "221s", Rarity.RARE, mage.cards.v.VeteranWarleader.class)); + cards.add(new SetCardInfo("Void Winnower", "17s", Rarity.MYTHIC, mage.cards.v.VoidWinnower.class)); + cards.add(new SetCardInfo("Wasteland Strangler", "102s", Rarity.RARE, mage.cards.w.WastelandStrangler.class)); + cards.add(new SetCardInfo("Woodland Wanderer", "198s", Rarity.RARE, mage.cards.w.WoodlandWanderer.class)); + cards.add(new SetCardInfo("Zada, Hedron Grinder", "162s", Rarity.RARE, mage.cards.z.ZadaHedronGrinder.class)); + } +} From 5fed211907ca797a65771b749e5fb16dceab8102 Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Mon, 16 Mar 2020 13:26:57 +0100 Subject: [PATCH 091/182] Added the Legendary Cube Prize Pack (PZ1) set. --- .../src/mage/sets/LegendaryCubePrizePack.java | 174 ++++++++++++++++++ 1 file changed, 174 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/LegendaryCubePrizePack.java diff --git a/Mage.Sets/src/mage/sets/LegendaryCubePrizePack.java b/Mage.Sets/src/mage/sets/LegendaryCubePrizePack.java new file mode 100644 index 00000000000..0d0d8862839 --- /dev/null +++ b/Mage.Sets/src/mage/sets/LegendaryCubePrizePack.java @@ -0,0 +1,174 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://mtg.gamepedia.com/Legendary_Cube + * https://scryfall.com/sets/pz1 + */ +public class LegendaryCubePrizePack extends ExpansionSet { + + private static final LegendaryCubePrizePack instance = new LegendaryCubePrizePack(); + + public static LegendaryCubePrizePack getInstance() { + return instance; + } + + private LegendaryCubePrizePack() { + super("Legendary Cube Prize Pack", "PZ1", ExpansionSet.buildDate(2015, 11, 18), SetType.MAGIC_ONLINE); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Abyssal Persecutor", 38, Rarity.MYTHIC, mage.cards.a.AbyssalPersecutor.class)); + cards.add(new SetCardInfo("Aethersnatch", 18, Rarity.RARE, mage.cards.a.Aethersnatch.class)); + cards.add(new SetCardInfo("Anger", 53, Rarity.UNCOMMON, mage.cards.a.Anger.class)); + cards.add(new SetCardInfo("Animar, Soul of Elements", 93, Rarity.MYTHIC, mage.cards.a.AnimarSoulOfElements.class)); + cards.add(new SetCardInfo("Anya, Merciless Angel", 94, Rarity.RARE, mage.cards.a.AnyaMercilessAngel.class)); + cards.add(new SetCardInfo("Arachnogenesis", 70, Rarity.UNCOMMON, mage.cards.a.Arachnogenesis.class)); + cards.add(new SetCardInfo("Arcane Sanctum", 134, Rarity.UNCOMMON, mage.cards.a.ArcaneSanctum.class)); + cards.add(new SetCardInfo("Arjun, the Shifting Flame", 95, Rarity.RARE, mage.cards.a.ArjunTheShiftingFlame.class)); + cards.add(new SetCardInfo("Awaken the Sky Tyrant", 54, Rarity.RARE, mage.cards.a.AwakenTheSkyTyrant.class)); + cards.add(new SetCardInfo("Banshee of the Dread Choir", 39, Rarity.UNCOMMON, mage.cards.b.BansheeOfTheDreadChoir.class)); + cards.add(new SetCardInfo("Basalt Monolith", 120, Rarity.UNCOMMON, mage.cards.b.BasaltMonolith.class)); + cards.add(new SetCardInfo("Bastion Protector", 1, Rarity.UNCOMMON, mage.cards.b.BastionProtector.class)); + cards.add(new SetCardInfo("Behemoth Sledge", 96, Rarity.UNCOMMON, mage.cards.b.BehemothSledge.class)); + cards.add(new SetCardInfo("Blade of Selves", 121, Rarity.UNCOMMON, mage.cards.b.BladeOfSelves.class)); + cards.add(new SetCardInfo("Bloodspore Thrinax", 71, Rarity.RARE, mage.cards.b.BloodsporeThrinax.class)); + cards.add(new SetCardInfo("Bojuka Bog", 135, Rarity.UNCOMMON, mage.cards.b.BojukaBog.class)); + cards.add(new SetCardInfo("Brainstorm", 19, Rarity.UNCOMMON, mage.cards.b.Brainstorm.class)); + cards.add(new SetCardInfo("Brawn", 72, Rarity.UNCOMMON, mage.cards.b.Brawn.class)); + cards.add(new SetCardInfo("Broodbirth Viper", 20, Rarity.UNCOMMON, mage.cards.b.BroodbirthViper.class)); + cards.add(new SetCardInfo("Caller of the Pack", 73, Rarity.UNCOMMON, mage.cards.c.CallerOfThePack.class)); + cards.add(new SetCardInfo("Centaur Vinecrasher", 74, Rarity.RARE, mage.cards.c.CentaurVinecrasher.class)); + cards.add(new SetCardInfo("Chaos Warp", 55, Rarity.RARE, mage.cards.c.ChaosWarp.class)); + cards.add(new SetCardInfo("Command Beacon", 136, Rarity.UNCOMMON, mage.cards.c.CommandBeacon.class)); + cards.add(new SetCardInfo("Command Tower", 137, Rarity.UNCOMMON, mage.cards.c.CommandTower.class)); + cards.add(new SetCardInfo("Compulsive Research", 21, Rarity.UNCOMMON, mage.cards.c.CompulsiveResearch.class)); + cards.add(new SetCardInfo("Containment Priest", 2, Rarity.RARE, mage.cards.c.ContainmentPriest.class)); + cards.add(new SetCardInfo("Corpse Augur", 40, Rarity.RARE, mage.cards.c.CorpseAugur.class)); + cards.add(new SetCardInfo("Crumbling Necropolis", 138, Rarity.UNCOMMON, mage.cards.c.CrumblingNecropolis.class)); + cards.add(new SetCardInfo("Cultivate", 75, Rarity.UNCOMMON, mage.cards.c.Cultivate.class)); + cards.add(new SetCardInfo("Dack Fayden", 97, Rarity.MYTHIC, mage.cards.d.DackFayden.class)); + cards.add(new SetCardInfo("Daretti, Scrap Savant", 56, Rarity.MYTHIC, mage.cards.d.DarettiScrapSavant.class)); + cards.add(new SetCardInfo("Dawnbreak Reclaimer", 3, Rarity.RARE, mage.cards.d.DawnbreakReclaimer.class)); + cards.add(new SetCardInfo("Daxos the Returned", 98, Rarity.RARE, mage.cards.d.DaxosTheReturned.class)); + cards.add(new SetCardInfo("Daxos's Torment", 41, Rarity.RARE, mage.cards.d.DaxossTorment.class)); + cards.add(new SetCardInfo("Deadly Tempest", 42, Rarity.RARE, mage.cards.d.DeadlyTempest.class)); + cards.add(new SetCardInfo("Deceiver Exarch", 22, Rarity.UNCOMMON, mage.cards.d.DeceiverExarch.class)); + cards.add(new SetCardInfo("Decree of Pain", 43, Rarity.RARE, mage.cards.d.DecreeOfPain.class)); + cards.add(new SetCardInfo("Deep Analysis", 23, Rarity.UNCOMMON, mage.cards.d.DeepAnalysis.class)); + cards.add(new SetCardInfo("Desertion", 24, Rarity.RARE, mage.cards.d.Desertion.class)); + cards.add(new SetCardInfo("Diaochan, Artful Beauty", 57, Rarity.RARE, mage.cards.d.DiaochanArtfulBeauty.class)); + cards.add(new SetCardInfo("Dragonlair Spider", 99, Rarity.RARE, mage.cards.d.DragonlairSpider.class)); + cards.add(new SetCardInfo("Dread Summons", 44, Rarity.RARE, mage.cards.d.DreadSummons.class)); + cards.add(new SetCardInfo("Dreadship Reef", 139, Rarity.UNCOMMON, mage.cards.d.DreadshipReef.class)); + cards.add(new SetCardInfo("Dream Pillager", 58, Rarity.RARE, mage.cards.d.DreamPillager.class)); + cards.add(new SetCardInfo("Duplicant", 122, Rarity.RARE, mage.cards.d.Duplicant.class)); + cards.add(new SetCardInfo("Edric, Spymaster of Trest", 100, Rarity.RARE, mage.cards.e.EdricSpymasterOfTrest.class)); + cards.add(new SetCardInfo("Electrolyze", 101, Rarity.UNCOMMON, mage.cards.e.Electrolyze.class)); + cards.add(new SetCardInfo("Eternal Witness", 76, Rarity.UNCOMMON, mage.cards.e.EternalWitness.class)); + cards.add(new SetCardInfo("Ezuri's Predation", 77, Rarity.RARE, mage.cards.e.EzurisPredation.class)); + cards.add(new SetCardInfo("Ezuri, Claw of Progress", 102, Rarity.RARE, mage.cards.e.EzuriClawOfProgress.class)); + cards.add(new SetCardInfo("Fact or Fiction", 25, Rarity.UNCOMMON, mage.cards.f.FactOrFiction.class)); + cards.add(new SetCardInfo("Faithless Looting", 59, Rarity.UNCOMMON, mage.cards.f.FaithlessLooting.class)); + cards.add(new SetCardInfo("Fiery Confluence", 60, Rarity.RARE, mage.cards.f.FieryConfluence.class)); + cards.add(new SetCardInfo("Firespout", 103, Rarity.UNCOMMON, mage.cards.f.Firespout.class)); + cards.add(new SetCardInfo("Flametongue Kavu", 61, Rarity.UNCOMMON, mage.cards.f.FlametongueKavu.class)); + cards.add(new SetCardInfo("Flusterstorm", 26, Rarity.RARE, mage.cards.f.Flusterstorm.class)); + cards.add(new SetCardInfo("Freyalise, Llanowar's Fury", 78, Rarity.MYTHIC, mage.cards.f.FreyaliseLlanowarsFury.class)); + cards.add(new SetCardInfo("Fungal Reaches", 140, Rarity.UNCOMMON, mage.cards.f.FungalReaches.class)); + cards.add(new SetCardInfo("Ghave, Guru of Spores", 104, Rarity.MYTHIC, mage.cards.g.GhaveGuruOfSpores.class)); + cards.add(new SetCardInfo("Ghostly Prison", 4, Rarity.UNCOMMON, mage.cards.g.GhostlyPrison.class)); + cards.add(new SetCardInfo("Gigantoplasm", 27, Rarity.RARE, mage.cards.g.Gigantoplasm.class)); + cards.add(new SetCardInfo("Goblin Sharpshooter", 62, Rarity.RARE, mage.cards.g.GoblinSharpshooter.class)); + cards.add(new SetCardInfo("Grasp of Fate", 5, Rarity.UNCOMMON, mage.cards.g.GraspOfFate.class)); + cards.add(new SetCardInfo("Great Oak Guardian", 79, Rarity.UNCOMMON, mage.cards.g.GreatOakGuardian.class)); + cards.add(new SetCardInfo("Harmonize", 80, Rarity.UNCOMMON, mage.cards.h.Harmonize.class)); + cards.add(new SetCardInfo("Herald of the Host", 6, Rarity.UNCOMMON, mage.cards.h.HeraldOfTheHost.class)); + cards.add(new SetCardInfo("Homeward Path", 141, Rarity.RARE, mage.cards.h.HomewardPath.class)); + cards.add(new SetCardInfo("Hull Breach", 105, Rarity.UNCOMMON, mage.cards.h.HullBreach.class)); + cards.add(new SetCardInfo("Illusory Ambusher", 28, Rarity.RARE, mage.cards.i.IllusoryAmbusher.class)); + cards.add(new SetCardInfo("Invigorate", 81, Rarity.UNCOMMON, mage.cards.i.Invigorate.class)); + cards.add(new SetCardInfo("Jungle Shrine", 142, Rarity.UNCOMMON, mage.cards.j.JungleShrine.class)); + cards.add(new SetCardInfo("Kaalia of the Vast", 106, Rarity.MYTHIC, mage.cards.k.KaaliaOfTheVast.class)); + cards.add(new SetCardInfo("Kalemne's Captain", 7, Rarity.RARE, mage.cards.k.KalemnesCaptain.class)); + cards.add(new SetCardInfo("Kalemne, Disciple of Iroas", 107, Rarity.RARE, mage.cards.k.KalemneDiscipleOfIroas.class)); + cards.add(new SetCardInfo("Karlov of the Ghost Council", 108, Rarity.RARE, mage.cards.k.KarlovOfTheGhostCouncil.class)); + cards.add(new SetCardInfo("Kaseto, Orochi Archmage", 109, Rarity.RARE, mage.cards.k.KasetoOrochiArchmage.class)); + cards.add(new SetCardInfo("Khalni Garden", 143, Rarity.UNCOMMON, mage.cards.k.KhalniGarden.class)); + cards.add(new SetCardInfo("Krosan Grip", 82, Rarity.UNCOMMON, mage.cards.k.KrosanGrip.class)); + cards.add(new SetCardInfo("Krosan Verge", 144, Rarity.UNCOMMON, mage.cards.k.KrosanVerge.class)); + cards.add(new SetCardInfo("Lightning Greaves", 123, Rarity.UNCOMMON, mage.cards.l.LightningGreaves.class)); + cards.add(new SetCardInfo("Loyal Retainers", 8, Rarity.RARE, mage.cards.l.LoyalRetainers.class)); + cards.add(new SetCardInfo("Maelstrom Wanderer", 110, Rarity.MYTHIC, mage.cards.m.MaelstromWanderer.class)); + cards.add(new SetCardInfo("Magus of the Wheel", 63, Rarity.RARE, mage.cards.m.MagusOfTheWheel.class)); + cards.add(new SetCardInfo("Marchesa, the Black Rose", 111, Rarity.MYTHIC, mage.cards.m.MarchesaTheBlackRose.class)); + cards.add(new SetCardInfo("Mazirek, Kraul Death Priest", 112, Rarity.RARE, mage.cards.m.MazirekKraulDeathPriest.class)); + cards.add(new SetCardInfo("Meren of Clan Nel Toth", 113, Rarity.RARE, mage.cards.m.MerenOfClanNelToth.class)); + cards.add(new SetCardInfo("Meteor Blast", 64, Rarity.RARE, mage.cards.m.MeteorBlast.class)); + cards.add(new SetCardInfo("Mind's Eye", 124, Rarity.RARE, mage.cards.m.MindsEye.class)); + cards.add(new SetCardInfo("Mirari's Wake", 115, Rarity.RARE, mage.cards.m.MirarisWake.class)); + cards.add(new SetCardInfo("Mirror Match", 29, Rarity.RARE, mage.cards.m.MirrorMatch.class)); + cards.add(new SetCardInfo("Mizzix of the Izmagnus", 116, Rarity.RARE, mage.cards.m.MizzixOfTheIzmagnus.class)); + cards.add(new SetCardInfo("Mizzix's Mastery", 65, Rarity.RARE, mage.cards.m.MizzixsMastery.class)); + cards.add(new SetCardInfo("Molten Slagheap", 145, Rarity.UNCOMMON, mage.cards.m.MoltenSlagheap.class)); + cards.add(new SetCardInfo("Mystic Confluence", 30, Rarity.RARE, mage.cards.m.MysticConfluence.class)); + cards.add(new SetCardInfo("Nahiri, the Lithomancer", 9, Rarity.MYTHIC, mage.cards.n.NahiriTheLithomancer.class)); + cards.add(new SetCardInfo("Nest Invader", 83, Rarity.UNCOMMON, mage.cards.n.NestInvader.class)); + cards.add(new SetCardInfo("Ob Nixilis of the Black Oath", 45, Rarity.MYTHIC, mage.cards.o.ObNixilisOfTheBlackOath.class)); + cards.add(new SetCardInfo("Oreskos Explorer", 10, Rarity.UNCOMMON, mage.cards.o.OreskosExplorer.class)); + cards.add(new SetCardInfo("Pathbreaker Ibex", 84, Rarity.RARE, mage.cards.p.PathbreakerIbex.class)); + cards.add(new SetCardInfo("Propaganda", 31, Rarity.UNCOMMON, mage.cards.p.Propaganda.class)); + cards.add(new SetCardInfo("Punishing Fire", 66, Rarity.UNCOMMON, mage.cards.p.PunishingFire.class)); + cards.add(new SetCardInfo("Rancor", 85, Rarity.UNCOMMON, mage.cards.r.Rancor.class)); + cards.add(new SetCardInfo("Reya Dawnbringer", 11, Rarity.MYTHIC, mage.cards.r.ReyaDawnbringer.class)); + cards.add(new SetCardInfo("Rhystic Study", 32, Rarity.RARE, mage.cards.r.RhysticStudy.class)); + cards.add(new SetCardInfo("Righteous Confluence", 12, Rarity.RARE, mage.cards.r.RighteousConfluence.class)); + cards.add(new SetCardInfo("Rite of the Raging Storm", 67, Rarity.RARE, mage.cards.r.RiteOfTheRagingStorm.class)); + cards.add(new SetCardInfo("Sakura-Tribe Elder", 86, Rarity.UNCOMMON, mage.cards.s.SakuraTribeElder.class)); + cards.add(new SetCardInfo("Saltcrusted Steppe", 146, Rarity.UNCOMMON, mage.cards.s.SaltcrustedSteppe.class)); + cards.add(new SetCardInfo("Sandstone Oracle", 125, Rarity.RARE, mage.cards.s.SandstoneOracle.class)); + cards.add(new SetCardInfo("Savage Lands", 147, Rarity.UNCOMMON, mage.cards.s.SavageLands.class)); + cards.add(new SetCardInfo("Scourge of Nel Toth", 46, Rarity.RARE, mage.cards.s.ScourgeOfNelToth.class)); + cards.add(new SetCardInfo("Scroll Rack", 126, Rarity.RARE, mage.cards.s.ScrollRack.class)); + cards.add(new SetCardInfo("Scytheclaw", 127, Rarity.RARE, mage.cards.s.Scytheclaw.class)); + cards.add(new SetCardInfo("Seal of the Guildpact", 128, Rarity.RARE, mage.cards.s.SealOfTheGuildpact.class)); + cards.add(new SetCardInfo("Seaside Citadel", 148, Rarity.UNCOMMON, mage.cards.s.SeasideCitadel.class)); + cards.add(new SetCardInfo("Shardless Agent", 117, Rarity.RARE, mage.cards.s.ShardlessAgent.class)); + cards.add(new SetCardInfo("Shielded by Faith", 13, Rarity.UNCOMMON, mage.cards.s.ShieldedByFaith.class)); + cards.add(new SetCardInfo("Skullwinder", 87, Rarity.UNCOMMON, mage.cards.s.Skullwinder.class)); + cards.add(new SetCardInfo("Sol Ring", 129, Rarity.UNCOMMON, mage.cards.s.SolRing.class)); + cards.add(new SetCardInfo("Spirit Mantle", 14, Rarity.UNCOMMON, mage.cards.s.SpiritMantle.class)); + cards.add(new SetCardInfo("Swiftfoot Boots", 130, Rarity.UNCOMMON, mage.cards.s.SwiftfootBoots.class)); + cards.add(new SetCardInfo("Sylvan Library", 88, Rarity.RARE, mage.cards.s.SylvanLibrary.class)); + cards.add(new SetCardInfo("Synthetic Destiny", 33, Rarity.RARE, mage.cards.s.SyntheticDestiny.class)); + cards.add(new SetCardInfo("Teferi, Temporal Archmage", 34, Rarity.MYTHIC, mage.cards.t.TeferiTemporalArchmage.class)); + cards.add(new SetCardInfo("Temple of the False God", 149, Rarity.RARE, mage.cards.t.TempleOfTheFalseGod.class)); + cards.add(new SetCardInfo("The Mimeoplasm", 114, Rarity.MYTHIC, mage.cards.t.TheMimeoplasm.class)); + cards.add(new SetCardInfo("Thief of Blood", 47, Rarity.RARE, mage.cards.t.ThiefOfBlood.class)); + cards.add(new SetCardInfo("Thought Vessel", 131, Rarity.UNCOMMON, mage.cards.t.ThoughtVessel.class)); + cards.add(new SetCardInfo("Thran Dynamo", 132, Rarity.UNCOMMON, mage.cards.t.ThranDynamo.class)); + cards.add(new SetCardInfo("Titania, Protector of Argoth", 89, Rarity.RARE, mage.cards.t.TitaniaProtectorOfArgoth.class)); + cards.add(new SetCardInfo("Toxic Deluge", 48, Rarity.RARE, mage.cards.t.ToxicDeluge.class)); + cards.add(new SetCardInfo("Tragic Slip", 49, Rarity.UNCOMMON, mage.cards.t.TragicSlip.class)); + cards.add(new SetCardInfo("True-Name Nemesis", 35, Rarity.MYTHIC, mage.cards.t.TrueNameNemesis.class)); + cards.add(new SetCardInfo("Vela the Night-Clad", 118, Rarity.RARE, mage.cards.v.VelaTheNightClad.class)); + cards.add(new SetCardInfo("Verdant Confluence", 90, Rarity.RARE, mage.cards.v.VerdantConfluence.class)); + cards.add(new SetCardInfo("Viscera Seer", 50, Rarity.UNCOMMON, mage.cards.v.VisceraSeer.class)); + cards.add(new SetCardInfo("Vow of Duty", 15, Rarity.UNCOMMON, mage.cards.v.VowOfDuty.class)); + cards.add(new SetCardInfo("Vow of Flight", 36, Rarity.UNCOMMON, mage.cards.v.VowOfFlight.class)); + cards.add(new SetCardInfo("Vow of Lightning", 68, Rarity.UNCOMMON, mage.cards.v.VowOfLightning.class)); + cards.add(new SetCardInfo("Vow of Malice", 51, Rarity.UNCOMMON, mage.cards.v.VowOfMalice.class)); + cards.add(new SetCardInfo("Vow of Wildness", 91, Rarity.UNCOMMON, mage.cards.v.VowOfWildness.class)); + cards.add(new SetCardInfo("Wall of Blossoms", 92, Rarity.UNCOMMON, mage.cards.w.WallOfBlossoms.class)); + cards.add(new SetCardInfo("Wall of Omens", 16, Rarity.UNCOMMON, mage.cards.w.WallOfOmens.class)); + cards.add(new SetCardInfo("Warchief Giant", 69, Rarity.UNCOMMON, mage.cards.w.WarchiefGiant.class)); + cards.add(new SetCardInfo("Wonder", 37, Rarity.UNCOMMON, mage.cards.w.Wonder.class)); + cards.add(new SetCardInfo("Worn Powerstone", 133, Rarity.UNCOMMON, mage.cards.w.WornPowerstone.class)); + cards.add(new SetCardInfo("Wrath of God", 17, Rarity.RARE, mage.cards.w.WrathOfGod.class)); + cards.add(new SetCardInfo("Wretched Confluence", 52, Rarity.RARE, mage.cards.w.WretchedConfluence.class)); + cards.add(new SetCardInfo("Zedruu the Greathearted", 119, Rarity.MYTHIC, mage.cards.z.ZedruuTheGreathearted.class)); + } +} From a96be97b99997e4501234af41d84d534538efeb9 Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Mon, 16 Mar 2020 13:29:07 +0100 Subject: [PATCH 092/182] Added the Oath of the Gatewatch Promos (POGW) set. --- .../mage/sets/OathOfTheGatewatchPromos.java | 87 +++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/OathOfTheGatewatchPromos.java diff --git a/Mage.Sets/src/mage/sets/OathOfTheGatewatchPromos.java b/Mage.Sets/src/mage/sets/OathOfTheGatewatchPromos.java new file mode 100644 index 00000000000..80a3949badb --- /dev/null +++ b/Mage.Sets/src/mage/sets/OathOfTheGatewatchPromos.java @@ -0,0 +1,87 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/pogw + */ +public class OathOfTheGatewatchPromos extends ExpansionSet { + + private static final OathOfTheGatewatchPromos instance = new OathOfTheGatewatchPromos(); + + public static OathOfTheGatewatchPromos getInstance() { + return instance; + } + + private OathOfTheGatewatchPromos() { + super("Oath of the Gatewatch Promos", "POGW", ExpansionSet.buildDate(2016, 1, 23), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Ayli, Eternal Pilgrim", "151s", Rarity.RARE, mage.cards.a.AyliEternalPilgrim.class)); + cards.add(new SetCardInfo("Bearer of Silence", "67s", Rarity.RARE, mage.cards.b.BearerOfSilence.class)); + cards.add(new SetCardInfo("Call the Gatewatch", "16s", Rarity.RARE, mage.cards.c.CallTheGatewatch.class)); + cards.add(new SetCardInfo("Captain's Claws", "162s", Rarity.RARE, mage.cards.c.CaptainsClaws.class)); + cards.add(new SetCardInfo("Chandra, Flamecaller", "104s", Rarity.MYTHIC, mage.cards.c.ChandraFlamecaller.class)); + cards.add(new SetCardInfo("Corrupted Crossroads", "169s", Rarity.RARE, mage.cards.c.CorruptedCrossroads.class)); + cards.add(new SetCardInfo("Crush of Tentacles", "53s", Rarity.MYTHIC, mage.cards.c.CrushOfTentacles.class)); + cards.add(new SetCardInfo("Deceiver of Form", "1s", Rarity.RARE, mage.cards.d.DeceiverOfForm.class)); + cards.add(new SetCardInfo("Deepfathom Skulker", 43, Rarity.RARE, mage.cards.d.DeepfathomSkulker.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Deepfathom Skulker", "43s", Rarity.RARE, mage.cards.d.DeepfathomSkulker.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Dimensional Infiltrator", "44s", Rarity.RARE, mage.cards.d.DimensionalInfiltrator.class)); + cards.add(new SetCardInfo("Drana's Chosen", "84s", Rarity.RARE, mage.cards.d.DranasChosen.class)); + cards.add(new SetCardInfo("Dread Defiler", 68, Rarity.RARE, mage.cards.d.DreadDefiler.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Dread Defiler", "68s", Rarity.RARE, mage.cards.d.DreadDefiler.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Eldrazi Displacer", "13s", Rarity.RARE, mage.cards.e.EldraziDisplacer.class)); + cards.add(new SetCardInfo("Eldrazi Mimic", "2s", Rarity.RARE, mage.cards.e.EldraziMimic.class)); + cards.add(new SetCardInfo("Eldrazi Obligator", "96s", Rarity.RARE, mage.cards.e.EldraziObligator.class)); + cards.add(new SetCardInfo("Endbringer", 3, Rarity.RARE, mage.cards.e.Endbringer.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Endbringer", "3s", Rarity.RARE, mage.cards.e.Endbringer.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Fall of the Titans", "109s", Rarity.RARE, mage.cards.f.FallOfTheTitans.class)); + cards.add(new SetCardInfo("General Tazri", "19s", Rarity.MYTHIC, mage.cards.g.GeneralTazri.class)); + cards.add(new SetCardInfo("Gladehart Cavalry", 132, Rarity.RARE, mage.cards.g.GladehartCavalry.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Gladehart Cavalry", "132s", Rarity.RARE, mage.cards.g.GladehartCavalry.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Goblin Dark-Dwellers", 110, Rarity.RARE, mage.cards.g.GoblinDarkDwellers.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Goblin Dark-Dwellers", "110s", Rarity.RARE, mage.cards.g.GoblinDarkDwellers.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Hedron Alignment", "57s", Rarity.RARE, mage.cards.h.HedronAlignment.class)); + cards.add(new SetCardInfo("Hissing Quagmire", "171s", Rarity.RARE, mage.cards.h.HissingQuagmire.class)); + cards.add(new SetCardInfo("Immolating Glare", 20, Rarity.UNCOMMON, mage.cards.i.ImmolatingGlare.class)); + cards.add(new SetCardInfo("Inverter of Truth", "72s", Rarity.MYTHIC, mage.cards.i.InverterOfTruth.class)); + cards.add(new SetCardInfo("Jori En, Ruin Diver", 155, Rarity.RARE, mage.cards.j.JoriEnRuinDiver.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Jori En, Ruin Diver", "155s", Rarity.RARE, mage.cards.j.JoriEnRuinDiver.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Kalitas, Traitor of Ghet", "86s", Rarity.MYTHIC, mage.cards.k.KalitasTraitorOfGhet.class)); + cards.add(new SetCardInfo("Kozilek's Return", "98s", Rarity.MYTHIC, mage.cards.k.KozileksReturn.class)); + cards.add(new SetCardInfo("Kozilek, the Great Distortion", "4s", Rarity.MYTHIC, mage.cards.k.KozilekTheGreatDistortion.class)); + cards.add(new SetCardInfo("Linvala, the Preserver", "25s", Rarity.MYTHIC, mage.cards.l.LinvalaThePreserver.class)); + cards.add(new SetCardInfo("Matter Reshaper", "6s", Rarity.RARE, mage.cards.m.MatterReshaper.class)); + cards.add(new SetCardInfo("Mina and Denn, Wildborn", "156s", Rarity.RARE, mage.cards.m.MinaAndDennWildborn.class)); + cards.add(new SetCardInfo("Mirrorpool", "174s", Rarity.MYTHIC, mage.cards.m.Mirrorpool.class)); + cards.add(new SetCardInfo("Munda's Vanguard", 29, Rarity.RARE, mage.cards.m.MundasVanguard.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Munda's Vanguard", "29s", Rarity.RARE, mage.cards.m.MundasVanguard.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Needle Spires", "175s", Rarity.RARE, mage.cards.n.NeedleSpires.class)); + cards.add(new SetCardInfo("Nissa, Voice of Zendikar", "138s", Rarity.MYTHIC, mage.cards.n.NissaVoiceOfZendikar.class)); + cards.add(new SetCardInfo("Oath of Chandra", "113s", Rarity.RARE, mage.cards.o.OathOfChandra.class)); + cards.add(new SetCardInfo("Oath of Gideon", "30s", Rarity.RARE, mage.cards.o.OathOfGideon.class)); + cards.add(new SetCardInfo("Oath of Jace", "60s", Rarity.RARE, mage.cards.o.OathOfJace.class)); + cards.add(new SetCardInfo("Oath of Nissa", "140s", Rarity.RARE, mage.cards.o.OathOfNissa.class)); + cards.add(new SetCardInfo("Overwhelming Denial", "61s", Rarity.RARE, mage.cards.o.OverwhelmingDenial.class)); + cards.add(new SetCardInfo("Reality Smasher", "7s", Rarity.RARE, mage.cards.r.RealitySmasher.class)); + cards.add(new SetCardInfo("Remorseless Punishment", "89s", Rarity.RARE, mage.cards.r.RemorselessPunishment.class)); + cards.add(new SetCardInfo("Ruins of Oran-Rief", "176s", Rarity.RARE, mage.cards.r.RuinsOfOranRief.class)); + cards.add(new SetCardInfo("Sea Gate Wreckage", "177s", Rarity.RARE, mage.cards.s.SeaGateWreckage.class)); + cards.add(new SetCardInfo("Sifter of Skulls", "77s", Rarity.RARE, mage.cards.s.SifterOfSkulls.class)); + cards.add(new SetCardInfo("Sphinx of the Final Word", "63s", Rarity.MYTHIC, mage.cards.s.SphinxOfTheFinalWord.class)); + cards.add(new SetCardInfo("Stone Haven Outfitter", "37s", Rarity.RARE, mage.cards.s.StoneHavenOutfitter.class)); + cards.add(new SetCardInfo("Stoneforge Masterwork", "166s", Rarity.RARE, mage.cards.s.StoneforgeMasterwork.class)); + cards.add(new SetCardInfo("Sylvan Advocate", "144s", Rarity.RARE, mage.cards.s.SylvanAdvocate.class)); + cards.add(new SetCardInfo("Thought-Knot Seer", "9s", Rarity.RARE, mage.cards.t.ThoughtKnotSeer.class)); + cards.add(new SetCardInfo("Tyrant of Valakut", 119, Rarity.RARE, mage.cards.t.TyrantOfValakut.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Tyrant of Valakut", "119s", Rarity.RARE, mage.cards.t.TyrantOfValakut.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Vile Redeemer", "125s", Rarity.RARE, mage.cards.v.VileRedeemer.class)); + cards.add(new SetCardInfo("Wandering Fumarole", "182s", Rarity.RARE, mage.cards.w.WanderingFumarole.class)); + cards.add(new SetCardInfo("World Breaker", "126s", Rarity.MYTHIC, mage.cards.w.WorldBreaker.class)); + cards.add(new SetCardInfo("Zendikar Resurgent", "147s", Rarity.RARE, mage.cards.z.ZendikarResurgent.class)); + } +} From b3bac1cfac4fd2f4550bdd4de3c8b57ce6887c52 Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Mon, 16 Mar 2020 14:06:02 +0100 Subject: [PATCH 093/182] Added the Shadows over Innistrad Promos (PSOI) set. --- .../mage/sets/ShadowsOverInnistradPromos.java | 122 ++++++++++++++++++ 1 file changed, 122 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/ShadowsOverInnistradPromos.java diff --git a/Mage.Sets/src/mage/sets/ShadowsOverInnistradPromos.java b/Mage.Sets/src/mage/sets/ShadowsOverInnistradPromos.java new file mode 100644 index 00000000000..32a652d493b --- /dev/null +++ b/Mage.Sets/src/mage/sets/ShadowsOverInnistradPromos.java @@ -0,0 +1,122 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/psoi + */ +public class ShadowsOverInnistradPromos extends ExpansionSet { + + private static final ShadowsOverInnistradPromos instance = new ShadowsOverInnistradPromos(); + + public static ShadowsOverInnistradPromos getInstance() { + return instance; + } + + private ShadowsOverInnistradPromos() { + super("Shadows over Innistrad Promos", "PSOI", ExpansionSet.buildDate(2016, 4, 9), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Altered Ego", "241s", Rarity.RARE, mage.cards.a.AlteredEgo.class)); + cards.add(new SetCardInfo("Always Watching", "1s", Rarity.RARE, mage.cards.a.AlwaysWatching.class)); + cards.add(new SetCardInfo("Angel of Deliverance", 2, Rarity.RARE, mage.cards.a.AngelOfDeliverance.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Angel of Deliverance", "2s", Rarity.RARE, mage.cards.a.AngelOfDeliverance.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Anguished Unmaking", 242, Rarity.RARE, mage.cards.a.AnguishedUnmaking.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Anguished Unmaking", "242s", Rarity.RARE, mage.cards.a.AnguishedUnmaking.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Archangel Avacyn", "5s", Rarity.MYTHIC, mage.cards.a.ArchangelAvacyn.class)); + cards.add(new SetCardInfo("Arlinn Kord", "243s", Rarity.MYTHIC, mage.cards.a.ArlinnKord.class)); + cards.add(new SetCardInfo("Arlinn, Embraced by the Moon", "243s", Rarity.MYTHIC, mage.cards.a.ArlinnEmbracedByTheMoon.class)); + cards.add(new SetCardInfo("Asylum Visitor", "99s", Rarity.RARE, mage.cards.a.AsylumVisitor.class)); + cards.add(new SetCardInfo("Avacyn's Judgment", "145s", Rarity.RARE, mage.cards.a.AvacynsJudgment.class)); + cards.add(new SetCardInfo("Avacyn, the Purifier", "5s", Rarity.MYTHIC, mage.cards.a.AvacynThePurifier.class)); + cards.add(new SetCardInfo("Awoken Horror", "92s", Rarity.RARE, mage.cards.a.AwokenHorror.class)); + cards.add(new SetCardInfo("Behold the Beyond", "101s", Rarity.MYTHIC, mage.cards.b.BeholdTheBeyond.class)); + cards.add(new SetCardInfo("Brain in a Jar", "252s", Rarity.RARE, mage.cards.b.BrainInAJar.class)); + cards.add(new SetCardInfo("Burn from Within", "148s", Rarity.RARE, mage.cards.b.BurnFromWithin.class)); + cards.add(new SetCardInfo("Bygone Bishop", "8s", Rarity.RARE, mage.cards.b.BygoneBishop.class)); + cards.add(new SetCardInfo("Choked Estuary", "270s", Rarity.RARE, mage.cards.c.ChokedEstuary.class)); + cards.add(new SetCardInfo("Confirm Suspicions", "53s", Rarity.RARE, mage.cards.c.ConfirmSuspicions.class)); + cards.add(new SetCardInfo("Corrupted Grafstone", "253s", Rarity.RARE, mage.cards.c.CorruptedGrafstone.class)); + cards.add(new SetCardInfo("Cryptolith Rite", "200s", Rarity.RARE, mage.cards.c.CryptolithRite.class)); + cards.add(new SetCardInfo("Deathcap Cultivator", "202s", Rarity.RARE, mage.cards.d.DeathcapCultivator.class)); + cards.add(new SetCardInfo("Declaration in Stone", "12s", Rarity.RARE, mage.cards.d.DeclarationInStone.class)); + cards.add(new SetCardInfo("Descend upon the Sinful", "13s", Rarity.MYTHIC, mage.cards.d.DescendUponTheSinful.class)); + cards.add(new SetCardInfo("Devils' Playground", "151s", Rarity.RARE, mage.cards.d.DevilsPlayground.class)); + cards.add(new SetCardInfo("Diregraf Colossus", "107s", Rarity.RARE, mage.cards.d.DiregrafColossus.class)); + cards.add(new SetCardInfo("Drogskol Cavalry", 15, Rarity.RARE, mage.cards.d.DrogskolCavalry.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Drogskol Cavalry", "15s", Rarity.RARE, mage.cards.d.DrogskolCavalry.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Drownyard Temple", "271s", Rarity.RARE, mage.cards.d.DrownyardTemple.class)); + cards.add(new SetCardInfo("Eerie Interlude", "16s", Rarity.RARE, mage.cards.e.EerieInterlude.class)); + cards.add(new SetCardInfo("Elusive Tormentor", 108, Rarity.RARE, mage.cards.e.ElusiveTormentor.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Elusive Tormentor", "108s", Rarity.RARE, mage.cards.e.ElusiveTormentor.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Engulf the Shore", "58s", Rarity.RARE, mage.cards.e.EngulfTheShore.class)); + cards.add(new SetCardInfo("Epiphany at the Drownyard", "59s", Rarity.RARE, mage.cards.e.EpiphanyAtTheDrownyard.class)); + cards.add(new SetCardInfo("Ever After", "109s", Rarity.RARE, mage.cards.e.EverAfter.class)); + cards.add(new SetCardInfo("Falkenrath Gorger", "155s", Rarity.RARE, mage.cards.f.FalkenrathGorger.class)); + cards.add(new SetCardInfo("Fevered Visions", "244s", Rarity.RARE, mage.cards.f.FeveredVisions.class)); + cards.add(new SetCardInfo("Flameblade Angel", 157, Rarity.RARE, mage.cards.f.FlamebladeAngel.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Flameblade Angel", "157s", Rarity.RARE, mage.cards.f.FlamebladeAngel.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Foreboding Ruins", "272s", Rarity.RARE, mage.cards.f.ForebodingRuins.class)); + cards.add(new SetCardInfo("Forgotten Creation", "63s", Rarity.RARE, mage.cards.f.ForgottenCreation.class)); + cards.add(new SetCardInfo("Fortified Village", "274s", Rarity.RARE, mage.cards.f.FortifiedVillage.class)); + cards.add(new SetCardInfo("From Under the Floorboards", "111s", Rarity.RARE, mage.cards.f.FromUnderTheFloorboards.class)); + cards.add(new SetCardInfo("Game Trail", "276s", Rarity.RARE, mage.cards.g.GameTrail.class)); + cards.add(new SetCardInfo("Geier Reach Bandit", "159s", Rarity.RARE, mage.cards.g.GeierReachBandit.class)); + cards.add(new SetCardInfo("Geralf's Masterpiece", "65s", Rarity.MYTHIC, mage.cards.g.GeralfsMasterpiece.class)); + cards.add(new SetCardInfo("Goldnight Castigator", "162s", Rarity.MYTHIC, mage.cards.g.GoldnightCastigator.class)); + cards.add(new SetCardInfo("Hanweir Militia Captain", "21s", Rarity.RARE, mage.cards.h.HanweirMilitiaCaptain.class)); + cards.add(new SetCardInfo("Harness the Storm", "163s", Rarity.RARE, mage.cards.h.HarnessTheStorm.class)); + cards.add(new SetCardInfo("Incorrigible Youths", 166, Rarity.UNCOMMON, mage.cards.i.IncorrigibleYouths.class)); + cards.add(new SetCardInfo("Inexorable Blob", "212s", Rarity.RARE, mage.cards.i.InexorableBlob.class)); + cards.add(new SetCardInfo("Insidious Mist", 108, Rarity.RARE, mage.cards.i.InsidiousMist.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Insidious Mist", "108s", Rarity.RARE, mage.cards.i.InsidiousMist.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Invocation of Saint Traft", "246s", Rarity.RARE, mage.cards.i.InvocationOfSaintTraft.class)); + cards.add(new SetCardInfo("Jace, Unraveler of Secrets", "69s", Rarity.MYTHIC, mage.cards.j.JaceUnravelerOfSecrets.class)); + cards.add(new SetCardInfo("Markov Dreadknight", 122, Rarity.RARE, mage.cards.m.MarkovDreadknight.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Markov Dreadknight", "122s", Rarity.RARE, mage.cards.m.MarkovDreadknight.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mindwrack Demon", "124s", Rarity.MYTHIC, mage.cards.m.MindwrackDemon.class)); + cards.add(new SetCardInfo("Nahiri, the Harbinger", "247s", Rarity.MYTHIC, mage.cards.n.NahiriTheHarbinger.class)); + cards.add(new SetCardInfo("Nephalia Moondrakes", 75, Rarity.RARE, mage.cards.n.NephaliaMoondrakes.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Nephalia Moondrakes", "75s", Rarity.RARE, mage.cards.n.NephaliaMoondrakes.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Odric, Lunarch Marshal", "31s", Rarity.RARE, mage.cards.o.OdricLunarchMarshal.class)); + cards.add(new SetCardInfo("Olivia, Mobilized for War", "248s", Rarity.MYTHIC, mage.cards.o.OliviaMobilizedForWar.class)); + cards.add(new SetCardInfo("Ormendahl, Profane Prince", "281s", Rarity.RARE, mage.cards.o.OrmendahlProfanePrince.class)); + cards.add(new SetCardInfo("Persistent Nightmare", "88s", Rarity.MYTHIC, mage.cards.p.PersistentNightmare.class)); + cards.add(new SetCardInfo("Port Town", "278s", Rarity.RARE, mage.cards.p.PortTown.class)); + cards.add(new SetCardInfo("Prized Amalgam", "249s", Rarity.RARE, mage.cards.p.PrizedAmalgam.class)); + cards.add(new SetCardInfo("Rattlechains", "81s", Rarity.RARE, mage.cards.r.Rattlechains.class)); + cards.add(new SetCardInfo("Ravenous Bloodseeker", 175, Rarity.UNCOMMON, mage.cards.r.RavenousBloodseeker.class)); + cards.add(new SetCardInfo("Relentless Dead", "131s", Rarity.MYTHIC, mage.cards.r.RelentlessDead.class)); + cards.add(new SetCardInfo("Sage of Ancient Lore", "225s", Rarity.RARE, mage.cards.s.SageOfAncientLore.class)); + cards.add(new SetCardInfo("Scourge Wolf", "179s", Rarity.RARE, mage.cards.s.ScourgeWolf.class)); + cards.add(new SetCardInfo("Seasons Past", "226s", Rarity.MYTHIC, mage.cards.s.SeasonsPast.class)); + cards.add(new SetCardInfo("Second Harvest", "227s", Rarity.RARE, mage.cards.s.SecondHarvest.class)); + cards.add(new SetCardInfo("Sigarda, Heron's Grace", "250s", Rarity.MYTHIC, mage.cards.s.SigardaHeronsGrace.class)); + cards.add(new SetCardInfo("Silverfur Partisan", "228s", Rarity.RARE, mage.cards.s.SilverfurPartisan.class)); + cards.add(new SetCardInfo("Sin Prodder", "181s", Rarity.RARE, mage.cards.s.SinProdder.class)); + cards.add(new SetCardInfo("Slayer's Plate", "264s", Rarity.RARE, mage.cards.s.SlayersPlate.class)); + cards.add(new SetCardInfo("Sorin, Grim Nemesis", "251s", Rarity.MYTHIC, mage.cards.s.SorinGrimNemesis.class)); + cards.add(new SetCardInfo("Soul Swallower", 230, Rarity.RARE, mage.cards.s.SoulSwallower.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Soul Swallower", "230s", Rarity.RARE, mage.cards.s.SoulSwallower.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Startled Awake", "88s", Rarity.MYTHIC, mage.cards.s.StartledAwake.class)); + cards.add(new SetCardInfo("Tamiyo's Journal", "265s", Rarity.RARE, mage.cards.t.TamiyosJournal.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Tamiyo's Journal", "265s+", Rarity.RARE, mage.cards.t.TamiyosJournal.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Thalia's Lieutenant", "43s", Rarity.RARE, mage.cards.t.ThaliasLieutenant.class)); + cards.add(new SetCardInfo("The Gitrog Monster", "245s", Rarity.MYTHIC, mage.cards.t.TheGitrogMonster.class)); + cards.add(new SetCardInfo("Thing in the Ice", "92s", Rarity.RARE, mage.cards.t.ThingInTheIce.class)); + cards.add(new SetCardInfo("Tireless Tracker", "233s", Rarity.RARE, mage.cards.t.TirelessTracker.class)); + cards.add(new SetCardInfo("To the Slaughter", "139s", Rarity.RARE, mage.cards.t.ToTheSlaughter.class)); + cards.add(new SetCardInfo("Traverse the Ulvenwald", "234s", Rarity.RARE, mage.cards.t.TraverseTheUlvenwald.class)); + cards.add(new SetCardInfo("Triskaidekaphobia", "141s", Rarity.RARE, mage.cards.t.Triskaidekaphobia.class)); + cards.add(new SetCardInfo("Ulvenwald Hydra", "235s", Rarity.MYTHIC, mage.cards.u.UlvenwaldHydra.class)); + cards.add(new SetCardInfo("Vildin-Pack Alpha", "159s", Rarity.RARE, mage.cards.v.VildinPackAlpha.class)); + cards.add(new SetCardInfo("Welcome to the Fold", "96s", Rarity.RARE, mage.cards.w.WelcomeToTheFold.class)); + cards.add(new SetCardInfo("Westvale Abbey", "281s", Rarity.RARE, mage.cards.w.WestvaleAbbey.class)); + cards.add(new SetCardInfo("Westvale Cult Leader", "21s", Rarity.RARE, mage.cards.w.WestvaleCultLeader.class)); + cards.add(new SetCardInfo("Werewolf of Ancient Hunger", "225s", Rarity.RARE, mage.cards.w.WerewolfOfAncientHunger.class)); + cards.add(new SetCardInfo("Wolf of Devil's Breach", "192s", Rarity.MYTHIC, mage.cards.w.WolfOfDevilsBreach.class)); + } +} From f3050fdecd6181e0c9cfa90f74885646dbaccf65 Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Mon, 16 Mar 2020 14:06:44 +0100 Subject: [PATCH 094/182] Added the Eldritch Moon Promos (PEMN) set. --- .../src/mage/sets/EldritchMoonPromos.java | 99 +++++++++++++++++++ 1 file changed, 99 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/EldritchMoonPromos.java diff --git a/Mage.Sets/src/mage/sets/EldritchMoonPromos.java b/Mage.Sets/src/mage/sets/EldritchMoonPromos.java new file mode 100644 index 00000000000..38d1aabb59c --- /dev/null +++ b/Mage.Sets/src/mage/sets/EldritchMoonPromos.java @@ -0,0 +1,99 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/pemn + */ +public class EldritchMoonPromos extends ExpansionSet { + + private static final EldritchMoonPromos instance = new EldritchMoonPromos(); + + public static EldritchMoonPromos getInstance() { + return instance; + } + + private EldritchMoonPromos() { + super("Eldritch Moon Promos", "PEMN", ExpansionSet.buildDate(2016, 7, 22), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Abolisher of Bloodlines", "111s", Rarity.RARE, mage.cards.a.AbolisherOfBloodlines.class)); + cards.add(new SetCardInfo("Assembled Alphas", 117, Rarity.RARE, mage.cards.a.AssembledAlphas.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Assembled Alphas", "117s", Rarity.RARE, mage.cards.a.AssembledAlphas.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Bedlam Reveler", "118s", Rarity.RARE, mage.cards.b.BedlamReveler.class)); + cards.add(new SetCardInfo("Bloodhall Priest", "181s", Rarity.RARE, mage.cards.b.BloodhallPriest.class)); + cards.add(new SetCardInfo("Brisela, Voice of Nightmares", "15bs", Rarity.MYTHIC, mage.cards.b.BriselaVoiceOfNightmares.class)); + cards.add(new SetCardInfo("Bruna, the Fading Light", "15as", Rarity.RARE, mage.cards.b.BrunaTheFadingLight.class)); + cards.add(new SetCardInfo("Coax from the Blind Eternities", "51s", Rarity.RARE, mage.cards.c.CoaxFromTheBlindEternities.class)); + cards.add(new SetCardInfo("Collective Brutality", "85s", Rarity.RARE, mage.cards.c.CollectiveBrutality.class)); + cards.add(new SetCardInfo("Collective Defiance", "123s", Rarity.RARE, mage.cards.c.CollectiveDefiance.class)); + cards.add(new SetCardInfo("Collective Effort", "17s", Rarity.RARE, mage.cards.c.CollectiveEffort.class)); + cards.add(new SetCardInfo("Cryptbreaker", "86s", Rarity.RARE, mage.cards.c.Cryptbreaker.class)); + cards.add(new SetCardInfo("Dark Salvation", "87s", Rarity.RARE, mage.cards.d.DarkSalvation.class)); + cards.add(new SetCardInfo("Decimator of the Provinces", "2s", Rarity.MYTHIC, mage.cards.d.DecimatorOfTheProvinces.class)); + cards.add(new SetCardInfo("Deploy the Gatewatch", "20s", Rarity.MYTHIC, mage.cards.d.DeployTheGatewatch.class)); + cards.add(new SetCardInfo("Distended Mindbender", "3s", Rarity.RARE, mage.cards.d.DistendedMindbender.class)); + cards.add(new SetCardInfo("Docent of Perfection", "56s", Rarity.RARE, mage.cards.d.DocentOfPerfection.class)); + cards.add(new SetCardInfo("Elder Deep-Fiend", "5s", Rarity.RARE, mage.cards.e.ElderDeepFiend.class)); + cards.add(new SetCardInfo("Eldritch Evolution", "155s", Rarity.RARE, mage.cards.e.EldritchEvolution.class)); + cards.add(new SetCardInfo("Emrakul's Evangel", "156s", Rarity.RARE, mage.cards.e.EmrakulsEvangel.class)); + cards.add(new SetCardInfo("Emrakul, the Promised End", "6s", Rarity.MYTHIC, mage.cards.e.EmrakulThePromisedEnd.class)); + cards.add(new SetCardInfo("Eternal Scourge", "7s", Rarity.RARE, mage.cards.e.EternalScourge.class)); + cards.add(new SetCardInfo("Final Iteration", "56s", Rarity.RARE, mage.cards.f.FinalIteration.class)); + cards.add(new SetCardInfo("Geier Reach Sanitarium", "203s", Rarity.RARE, mage.cards.g.GeierReachSanitarium.class)); + cards.add(new SetCardInfo("Gisa and Geralf", "183s", Rarity.MYTHIC, mage.cards.g.GisaAndGeralf.class)); + cards.add(new SetCardInfo("Gisela, the Broken Blade", "28s", Rarity.MYTHIC, mage.cards.g.GiselaTheBrokenBlade.class)); + cards.add(new SetCardInfo("Grim Flayer", "184s", Rarity.MYTHIC, mage.cards.g.GrimFlayer.class)); + cards.add(new SetCardInfo("Hanweir Battlements", "204s", Rarity.RARE, mage.cards.h.HanweirBattlements.class)); + cards.add(new SetCardInfo("Hanweir Garrison", "130as", Rarity.RARE, mage.cards.h.HanweirGarrison.class)); + cards.add(new SetCardInfo("Hanweir, the Writhing Township", "130bs", Rarity.RARE, mage.cards.h.HanweirTheWrithingTownship.class)); + cards.add(new SetCardInfo("Harmless Offering", "131s", Rarity.RARE, mage.cards.h.HarmlessOffering.class)); + cards.add(new SetCardInfo("Heron's Grace Champion", 185, Rarity.RARE, mage.cards.h.HeronsGraceChampion.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Heron's Grace Champion", "185s", Rarity.RARE, mage.cards.h.HeronsGraceChampion.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Identity Thief", 64, Rarity.RARE, mage.cards.i.IdentityThief.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Identity Thief", "64s", Rarity.RARE, mage.cards.i.IdentityThief.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Impetuous Devils", "132s", Rarity.RARE, mage.cards.i.ImpetuousDevils.class)); + cards.add(new SetCardInfo("Imprisoned in the Moon", "65s", Rarity.RARE, mage.cards.i.ImprisonedInTheMoon.class)); + cards.add(new SetCardInfo("Ishkanah, Grafwidow", "162s", Rarity.MYTHIC, mage.cards.i.IshkanahGrafwidow.class)); + cards.add(new SetCardInfo("Liliana, the Last Hope", "93s", Rarity.MYTHIC, mage.cards.l.LilianaTheLastHope.class)); + cards.add(new SetCardInfo("Lupine Prototype", "197s", Rarity.RARE, mage.cards.l.LupinePrototype.class)); + cards.add(new SetCardInfo("Mausoleum Wanderer", "69s", Rarity.RARE, mage.cards.m.MausoleumWanderer.class)); + cards.add(new SetCardInfo("Mind's Dilation", "70s", Rarity.MYTHIC, mage.cards.m.MindsDilation.class)); + cards.add(new SetCardInfo("Mirrorwing Dragon", "136s", Rarity.MYTHIC, mage.cards.m.MirrorwingDragon.class)); + cards.add(new SetCardInfo("Nahiri's Wrath", "137s", Rarity.MYTHIC, mage.cards.n.NahirisWrath.class)); + cards.add(new SetCardInfo("Niblis of Frost", 72, Rarity.RARE, mage.cards.n.NiblisOfFrost.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Niblis of Frost", "72s", Rarity.RARE, mage.cards.n.NiblisOfFrost.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Noosegraf Mob", 98, Rarity.RARE, mage.cards.n.NoosegrafMob.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Noosegraf Mob", "98s", Rarity.RARE, mage.cards.n.NoosegrafMob.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Oath of Liliana", "99s", Rarity.RARE, mage.cards.o.OathOfLiliana.class)); + cards.add(new SetCardInfo("Permeating Mass", "165s", Rarity.RARE, mage.cards.p.PermeatingMass.class)); + cards.add(new SetCardInfo("Providence", "37s", Rarity.RARE, mage.cards.p.Providence.class)); + cards.add(new SetCardInfo("Sanctifier of Souls", 39, Rarity.RARE, mage.cards.s.SanctifierOfSouls.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Sanctifier of Souls", "39s", Rarity.RARE, mage.cards.s.SanctifierOfSouls.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Selfless Spirit", "40s", Rarity.RARE, mage.cards.s.SelflessSpirit.class)); + cards.add(new SetCardInfo("Sigarda's Aid", "41s", Rarity.RARE, mage.cards.s.SigardasAid.class)); + cards.add(new SetCardInfo("Soul Separator", "199s", Rarity.RARE, mage.cards.s.SoulSeparator.class)); + cards.add(new SetCardInfo("Spell Queller", "189s", Rarity.RARE, mage.cards.s.SpellQueller.class)); + cards.add(new SetCardInfo("Spirit of the Hunt", "170s", Rarity.RARE, mage.cards.s.SpiritOfTheHunt.class)); + cards.add(new SetCardInfo("Splendid Reclamation", "171s", Rarity.RARE, mage.cards.s.SplendidReclamation.class)); + cards.add(new SetCardInfo("Stitcher's Graft", "200s", Rarity.RARE, mage.cards.s.StitchersGraft.class)); + cards.add(new SetCardInfo("Stromkirk Condemned", "106s", Rarity.RARE, mage.cards.s.StromkirkCondemned.class)); + cards.add(new SetCardInfo("Stromkirk Occultist", "146s", Rarity.RARE, mage.cards.s.StromkirkOccultist.class)); + cards.add(new SetCardInfo("Summary Dismissal", "75s", Rarity.RARE, mage.cards.s.SummaryDismissal.class)); + cards.add(new SetCardInfo("Tamiyo, Field Researcher", "190s", Rarity.MYTHIC, mage.cards.t.TamiyoFieldResearcher.class)); + cards.add(new SetCardInfo("Thalia's Lancers", "47s", Rarity.RARE, mage.cards.t.ThaliasLancers.class)); + cards.add(new SetCardInfo("Thalia, Heretic Cathar", 46, Rarity.RARE, mage.cards.t.ThaliaHereticCathar.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Thalia, Heretic Cathar", "46s", Rarity.RARE, mage.cards.t.ThaliaHereticCathar.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Tree of Perdition", "109s", Rarity.MYTHIC, mage.cards.t.TreeOfPerdition.class)); + cards.add(new SetCardInfo("Ulrich, Uncontested Alpha", "191s", Rarity.MYTHIC, mage.cards.u.UlrichUncontestedAlpha.class)); + cards.add(new SetCardInfo("Ulrich of the Krallenhorde", "191s", Rarity.MYTHIC, mage.cards.u.UlrichOfTheKrallenhorde.class)); + cards.add(new SetCardInfo("Ulvenwald Observer", 176, Rarity.RARE, mage.cards.u.UlvenwaldObserver.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Ulvenwald Observer", "176s", Rarity.RARE, mage.cards.u.UlvenwaldObserver.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Unsubstantiate", 79, Rarity.UNCOMMON, mage.cards.u.Unsubstantiate.class)); + cards.add(new SetCardInfo("Voldaren Pariah", "111s", Rarity.RARE, mage.cards.v.VoldarenPariah.class)); + cards.add(new SetCardInfo("Wharf Infiltrator", "80s", Rarity.RARE, mage.cards.w.WharfInfiltrator.class)); + } +} From f6dc34eec7f8b4c2048b530f041d9eb28d56ebec Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Mon, 16 Mar 2020 14:07:17 +0100 Subject: [PATCH 095/182] Added the Kaladesh Promos (PKLD) set. --- Mage.Sets/src/mage/sets/KaladeshPromos.java | 97 +++++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/KaladeshPromos.java diff --git a/Mage.Sets/src/mage/sets/KaladeshPromos.java b/Mage.Sets/src/mage/sets/KaladeshPromos.java new file mode 100644 index 00000000000..62fe723fba1 --- /dev/null +++ b/Mage.Sets/src/mage/sets/KaladeshPromos.java @@ -0,0 +1,97 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/pkld + */ +public class KaladeshPromos extends ExpansionSet { + + private static final KaladeshPromos instance = new KaladeshPromos(); + + public static KaladeshPromos getInstance() { + return instance; + } + + private KaladeshPromos() { + super("Kaladesh Promos", "PKLD", ExpansionSet.buildDate(2016, 9, 30), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Aetherflux Reservoir", "192s", Rarity.RARE, mage.cards.a.AetherfluxReservoir.class)); + cards.add(new SetCardInfo("Aethersquall Ancient", "39s", Rarity.RARE, mage.cards.a.AethersquallAncient.class)); + cards.add(new SetCardInfo("Aetherstorm Roc", "3s", Rarity.RARE, mage.cards.a.AetherstormRoc.class)); + cards.add(new SetCardInfo("Aetherworks Marvel", "193s", Rarity.MYTHIC, mage.cards.a.AetherworksMarvel.class)); + cards.add(new SetCardInfo("Angel of Invention", "4s", Rarity.MYTHIC, mage.cards.a.AngelOfInvention.class)); + cards.add(new SetCardInfo("Animation Module", "194s", Rarity.RARE, mage.cards.a.AnimationModule.class)); + cards.add(new SetCardInfo("Architect of the Untamed", "143s", Rarity.RARE, mage.cards.a.ArchitectOfTheUntamed.class)); + cards.add(new SetCardInfo("Authority of the Consuls", "5s", Rarity.RARE, mage.cards.a.AuthorityOfTheConsuls.class)); + cards.add(new SetCardInfo("Blooming Marsh", "243s", Rarity.RARE, mage.cards.b.BloomingMarsh.class)); + cards.add(new SetCardInfo("Bomat Courier", "199s", Rarity.RARE, mage.cards.b.BomatCourier.class)); + cards.add(new SetCardInfo("Botanical Sanctum", "244s", Rarity.RARE, mage.cards.b.BotanicalSanctum.class)); + cards.add(new SetCardInfo("Bristling Hydra", "147s", Rarity.RARE, mage.cards.b.BristlingHydra.class)); + cards.add(new SetCardInfo("Captured by the Consulate", "8s", Rarity.RARE, mage.cards.c.CapturedByTheConsulate.class)); + cards.add(new SetCardInfo("Cataclysmic Gearhulk", "9s", Rarity.MYTHIC, mage.cards.c.CataclysmicGearhulk.class)); + cards.add(new SetCardInfo("Chandra, Torch of Defiance", "110s", Rarity.MYTHIC, mage.cards.c.ChandraTorchOfDefiance.class)); + cards.add(new SetCardInfo("Chief of the Foundry", 200, Rarity.UNCOMMON, mage.cards.c.ChiefOfTheFoundry.class)); + cards.add(new SetCardInfo("Combustible Gearhulk", "112s", Rarity.MYTHIC, mage.cards.c.CombustibleGearhulk.class)); + cards.add(new SetCardInfo("Concealed Courtyard", "245s", Rarity.RARE, mage.cards.c.ConcealedCourtyard.class)); + cards.add(new SetCardInfo("Confiscation Coup", "41s", Rarity.RARE, mage.cards.c.ConfiscationCoup.class)); + cards.add(new SetCardInfo("Cultivator of Blades", 151, Rarity.RARE, mage.cards.c.CultivatorOfBlades.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Cultivator of Blades", "151s", Rarity.RARE, mage.cards.c.CultivatorOfBlades.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Cultivator's Caravan", "203s", Rarity.RARE, mage.cards.c.CultivatorsCaravan.class)); + cards.add(new SetCardInfo("Deadlock Trap", "204s", Rarity.RARE, mage.cards.d.DeadlockTrap.class)); + cards.add(new SetCardInfo("Demon of Dark Schemes", "73s", Rarity.MYTHIC, mage.cards.d.DemonOfDarkSchemes.class)); + cards.add(new SetCardInfo("Depala, Pilot Exemplar", "178s", Rarity.RARE, mage.cards.d.DepalaPilotExemplar.class)); + cards.add(new SetCardInfo("Dovin Baan", "179s", Rarity.MYTHIC, mage.cards.d.DovinBaan.class)); + cards.add(new SetCardInfo("Dubious Challenge", "152s", Rarity.RARE, mage.cards.d.DubiousChallenge.class)); + cards.add(new SetCardInfo("Dynavolt Tower", "208s", Rarity.RARE, mage.cards.d.DynavoltTower.class)); + cards.add(new SetCardInfo("Electrostatic Pummeler", "210s", Rarity.RARE, mage.cards.e.ElectrostaticPummeler.class)); + cards.add(new SetCardInfo("Eliminate the Competition", "78s", Rarity.RARE, mage.cards.e.EliminateTheCompetition.class)); + cards.add(new SetCardInfo("Essence Extraction", 80, Rarity.UNCOMMON, mage.cards.e.EssenceExtraction.class)); + cards.add(new SetCardInfo("Fateful Showdown", "114s", Rarity.RARE, mage.cards.f.FatefulShowdown.class)); + cards.add(new SetCardInfo("Fleetwheel Cruiser", "214s", Rarity.RARE, mage.cards.f.FleetwheelCruiser.class)); + cards.add(new SetCardInfo("Fumigate", "15s", Rarity.RARE, mage.cards.f.Fumigate.class)); + cards.add(new SetCardInfo("Ghirapur Orrery", "216s", Rarity.RARE, mage.cards.g.GhirapurOrrery.class)); + cards.add(new SetCardInfo("Gonti, Lord of Luxury", "84s", Rarity.RARE, mage.cards.g.GontiLordOfLuxury.class)); + cards.add(new SetCardInfo("Insidious Will", "52s", Rarity.RARE, mage.cards.i.InsidiousWill.class)); + cards.add(new SetCardInfo("Inspiring Vantage", "246s", Rarity.RARE, mage.cards.i.InspiringVantage.class)); + cards.add(new SetCardInfo("Inventors' Fair", "247s", Rarity.RARE, mage.cards.i.InventorsFair.class)); + cards.add(new SetCardInfo("Kambal, Consul of Allocation", "183s", Rarity.RARE, mage.cards.k.KambalConsulOfAllocation.class)); + cards.add(new SetCardInfo("Key to the City", "220s", Rarity.RARE, mage.cards.k.KeyToTheCity.class)); + cards.add(new SetCardInfo("Lathnu Hellion", "121s", Rarity.RARE, mage.cards.l.LathnuHellion.class)); + cards.add(new SetCardInfo("Lost Legacy", "88s", Rarity.RARE, mage.cards.l.LostLegacy.class)); + cards.add(new SetCardInfo("Madcap Experiment", "122s", Rarity.RARE, mage.cards.m.MadcapExperiment.class)); + cards.add(new SetCardInfo("Marionette Master", "90s", Rarity.RARE, mage.cards.m.MarionetteMaster.class)); + cards.add(new SetCardInfo("Master Trinketeer", "21s", Rarity.RARE, mage.cards.m.MasterTrinketeer.class)); + cards.add(new SetCardInfo("Metallurgic Summonings", "56s", Rarity.MYTHIC, mage.cards.m.MetallurgicSummonings.class)); + cards.add(new SetCardInfo("Metalwork Colossus", "222s", Rarity.RARE, mage.cards.m.MetalworkColossus.class)); + cards.add(new SetCardInfo("Midnight Oil", "92s", Rarity.RARE, mage.cards.m.MidnightOil.class)); + cards.add(new SetCardInfo("Multiform Wonder", "223s", Rarity.RARE, mage.cards.m.MultiformWonder.class)); + cards.add(new SetCardInfo("Nissa, Vital Force", "163s", Rarity.MYTHIC, mage.cards.n.NissaVitalForce.class)); + cards.add(new SetCardInfo("Noxious Gearhulk", "96s", Rarity.MYTHIC, mage.cards.n.NoxiousGearhulk.class)); + cards.add(new SetCardInfo("Oviya Pashiri, Sage Lifecrafter", "165s", Rarity.RARE, mage.cards.o.OviyaPashiriSageLifecrafter.class)); + cards.add(new SetCardInfo("Padeem, Consul of Innovation", "59s", Rarity.RARE, mage.cards.p.PadeemConsulOfInnovation.class)); + cards.add(new SetCardInfo("Panharmonicon", "226s", Rarity.RARE, mage.cards.p.Panharmonicon.class)); + cards.add(new SetCardInfo("Paradoxical Outcome", "60s", Rarity.RARE, mage.cards.p.ParadoxicalOutcome.class)); + cards.add(new SetCardInfo("Pia Nalaar", "124s", Rarity.RARE, mage.cards.p.PiaNalaar.class)); + cards.add(new SetCardInfo("Rashmi, Eternities Crafter", "184s", Rarity.MYTHIC, mage.cards.r.RashmiEternitiesCrafter.class)); + cards.add(new SetCardInfo("Saheeli Rai", "186s", Rarity.MYTHIC, mage.cards.s.SaheeliRai.class)); + cards.add(new SetCardInfo("Saheeli's Artistry", 62, Rarity.RARE, mage.cards.s.SaheelisArtistry.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Saheeli's Artistry", "62s", Rarity.RARE, mage.cards.s.SaheelisArtistry.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Scrapheap Scrounger", "231s", Rarity.RARE, mage.cards.s.ScrapheapScrounger.class)); + cards.add(new SetCardInfo("Skyship Stalker", 130, Rarity.RARE, mage.cards.s.SkyshipStalker.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Skyship Stalker", "130s", Rarity.RARE, mage.cards.s.SkyshipStalker.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Skysovereign, Consul Flagship", "234s", Rarity.MYTHIC, mage.cards.s.SkysovereignConsulFlagship.class)); + cards.add(new SetCardInfo("Smuggler's Copter", "235s", Rarity.RARE, mage.cards.s.SmugglersCopter.class)); + cards.add(new SetCardInfo("Spirebluff Canal", "249s", Rarity.RARE, mage.cards.s.SpirebluffCanal.class)); + cards.add(new SetCardInfo("Syndicate Trafficker", "101s", Rarity.RARE, mage.cards.s.SyndicateTrafficker.class)); + cards.add(new SetCardInfo("Territorial Gorger", "136s", Rarity.RARE, mage.cards.t.TerritorialGorger.class)); + cards.add(new SetCardInfo("Toolcraft Exemplar", "32s", Rarity.RARE, mage.cards.t.ToolcraftExemplar.class)); + cards.add(new SetCardInfo("Torrential Gearhulk", "67s", Rarity.MYTHIC, mage.cards.t.TorrentialGearhulk.class)); + cards.add(new SetCardInfo("Verdurous Gearhulk", "172s", Rarity.MYTHIC, mage.cards.v.VerdurousGearhulk.class)); + cards.add(new SetCardInfo("Wildest Dreams", "174s", Rarity.RARE, mage.cards.w.WildestDreams.class)); + } +} From c5e59aa06b46c4c3607ef761e37c746edf193f63 Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Mon, 16 Mar 2020 14:10:14 +0100 Subject: [PATCH 096/182] Added the Treasure Chest (PZ2) set. --- Mage.Sets/src/mage/sets/TreasureChest.java | 307 +++++++++++++++++++++ 1 file changed, 307 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/TreasureChest.java diff --git a/Mage.Sets/src/mage/sets/TreasureChest.java b/Mage.Sets/src/mage/sets/TreasureChest.java new file mode 100644 index 00000000000..33dda8a3051 --- /dev/null +++ b/Mage.Sets/src/mage/sets/TreasureChest.java @@ -0,0 +1,307 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://mtg.gamepedia.com/Treasure_Chests + * https://scryfall.com/sets/pz2 + */ +public class TreasureChest extends ExpansionSet { + + private static final TreasureChest instance = new TreasureChest(); + + public static TreasureChest getInstance() { + return instance; + } + + private TreasureChest() { + super("Treasure Chest", "PZ2", ExpansionSet.buildDate(2018, 12, 6), SetType.MAGIC_ONLINE); + this.hasBoosters = false; + this.hasBasicLands = true; + + cards.add(new SetCardInfo("Adriana, Captain of the Guard", 45, Rarity.RARE, mage.cards.a.AdrianaCaptainOfTheGuard.class)); + cards.add(new SetCardInfo("Aggressive Instinct", 70855, Rarity.COMMON, mage.cards.a.AggressiveInstinct.class)); + cards.add(new SetCardInfo("Akiri, Line-Slinger", 48, Rarity.RARE, mage.cards.a.AkiriLineSlinger.class)); + cards.add(new SetCardInfo("Alms Collector", 65677, Rarity.RARE, mage.cards.a.AlmsCollector.class)); + cards.add(new SetCardInfo("Aminatou's Augury", 70745, Rarity.RARE, mage.cards.a.AminatousAugury.class)); + cards.add(new SetCardInfo("Aminatou, the Fateshifter", 70763, Rarity.MYTHIC, mage.cards.a.AminatouTheFateshifter.class)); + cards.add(new SetCardInfo("Ancestor Dragon", 70829, Rarity.RARE, mage.cards.a.AncestorDragon.class)); + cards.add(new SetCardInfo("Ancient Excavation", 38, Rarity.UNCOMMON, mage.cards.a.AncientExcavation.class)); + cards.add(new SetCardInfo("Ancient Stone Idol", 70755, Rarity.RARE, mage.cards.a.AncientStoneIdol.class)); + cards.add(new SetCardInfo("Angelic Guardian", 70767, Rarity.RARE, mage.cards.a.AngelicGuardian.class)); + cards.add(new SetCardInfo("Angler Turtle", 70769, Rarity.RARE, mage.cards.a.AnglerTurtle.class)); + cards.add(new SetCardInfo("Aquitect's Will", 65865, Rarity.COMMON, mage.cards.a.AquitectsWill.class)); + cards.add(new SetCardInfo("Arahbo, Roar of the World", 65735, Rarity.MYTHIC, mage.cards.a.ArahboRoarOfTheWorld.class)); + cards.add(new SetCardInfo("Arixmethes, Slumbering Isle", 70715, Rarity.RARE, mage.cards.a.ArixmethesSlumberingIsle.class)); + cards.add(new SetCardInfo("Armored Whirl Turtle", 70809, Rarity.COMMON, mage.cards.a.ArmoredWhirlTurtle.class)); + cards.add(new SetCardInfo("Armory Automaton", 68, Rarity.RARE, mage.cards.a.ArmoryAutomaton.class)); + cards.add(new SetCardInfo("Ash Barrens", 72, Rarity.COMMON, mage.cards.a.AshBarrens.class)); + cards.add(new SetCardInfo("Aspect of Wolf", 65819, Rarity.RARE, mage.cards.a.AspectOfWolf.class)); + cards.add(new SetCardInfo("Atraxa, Praetors' Voice", 62, Rarity.MYTHIC, mage.cards.a.AtraxaPraetorsVoice.class)); + cards.add(new SetCardInfo("Avatar of Growth", 70785, Rarity.MYTHIC, mage.cards.a.AvatarOfGrowth.class)); + cards.add(new SetCardInfo("Balan, Wandering Knight", 65757, Rarity.RARE, mage.cards.b.BalanWanderingKnight.class)); + cards.add(new SetCardInfo("Benefactor's Draught", 36, Rarity.RARE, mage.cards.b.BenefactorsDraught.class)); + cards.add(new SetCardInfo("Bloodforged Battle-Axe", 65713, Rarity.RARE, mage.cards.b.BloodforgedBattleAxe.class)); + cards.add(new SetCardInfo("Bloodline Necromancer", 65753, Rarity.UNCOMMON, mage.cards.b.BloodlineNecromancer.class)); + cards.add(new SetCardInfo("Bloodsworn Steward", 65699, Rarity.RARE, mage.cards.b.BloodswornSteward.class)); + cards.add(new SetCardInfo("Bloodtracker", 70689, Rarity.RARE, mage.cards.b.Bloodtracker.class)); + cards.add(new SetCardInfo("Boneyard Scourge", 65687, Rarity.RARE, mage.cards.b.BoneyardScourge.class)); + cards.add(new SetCardInfo("Boompile", 70, Rarity.RARE, mage.cards.b.Boompile.class)); + cards.add(new SetCardInfo("Borderland Explorer", 65775, Rarity.COMMON, mage.cards.b.BorderlandExplorer.class)); + cards.add(new SetCardInfo("Boreas Charger", 70717, Rarity.RARE, mage.cards.b.BoreasCharger.class)); + cards.add(new SetCardInfo("Brainwash", 65795, Rarity.COMMON, mage.cards.b.Brainwash.class)); + cards.add(new SetCardInfo("Breath of Fire", 70859, Rarity.COMMON, mage.cards.b.BreathOfFire.class)); + cards.add(new SetCardInfo("Breya, Etherium Shaper", 65, Rarity.MYTHIC, mage.cards.b.BreyaEtheriumShaper.class)); + cards.add(new SetCardInfo("Brilliant Plan", 70833, Rarity.UNCOMMON, mage.cards.b.BrilliantPlan.class)); + cards.add(new SetCardInfo("Brudiclad, Telchor Engineer", 70709, Rarity.MYTHIC, mage.cards.b.BrudicladTelchorEngineer.class)); + cards.add(new SetCardInfo("Bruse Tarl, Boorish Herder", 56, Rarity.MYTHIC, mage.cards.b.BruseTarlBoorishHerder.class)); + cards.add(new SetCardInfo("Burnt Offering", 65833, Rarity.COMMON, mage.cards.b.BurntOffering.class)); + cards.add(new SetCardInfo("Cao Ren, Wei Commander", 65817, Rarity.RARE, mage.cards.c.CaoRenWeiCommander.class)); + cards.add(new SetCardInfo("Cemetery Gate", 65835, Rarity.COMMON, mage.cards.c.CemeteryGate.class)); + cards.add(new SetCardInfo("Charging Cinderhorn", 26, Rarity.RARE, mage.cards.c.ChargingCinderhorn.class)); + cards.add(new SetCardInfo("Cleansing Screech", 70865, Rarity.COMMON, mage.cards.c.CleansingScreech.class)); + cards.add(new SetCardInfo("Cloak of Mists", 70835, Rarity.COMMON, mage.cards.c.CloakOfMists.class)); + cards.add(new SetCardInfo("Colorful Feiyi Sparrow", 70811, Rarity.COMMON, mage.cards.c.ColorfulFeiyiSparrow.class)); + cards.add(new SetCardInfo("Confidence from Strength", 70857, Rarity.COMMON, mage.cards.c.ConfidenceFromStrength.class)); + cards.add(new SetCardInfo("Conqueror's Flail", 65791, Rarity.RARE, mage.cards.c.ConquerorsFlail.class)); + cards.add(new SetCardInfo("Coveted Jewel", 70673, Rarity.RARE, mage.cards.c.CovetedJewel.class)); + cards.add(new SetCardInfo("Crash of Rhino Beetles", 70693, Rarity.RARE, mage.cards.c.CrashOfRhinoBeetles.class)); + cards.add(new SetCardInfo("Crimson Honor Guard", 65697, Rarity.RARE, mage.cards.c.CrimsonHonorGuard.class)); + cards.add(new SetCardInfo("Cruel Tutor", 65797, Rarity.RARE, mage.cards.c.CruelTutor.class)); + cards.add(new SetCardInfo("Crystalline Crawler", 69, Rarity.RARE, mage.cards.c.CrystallineCrawler.class)); + cards.add(new SetCardInfo("Curse of Bounty", 65747, Rarity.UNCOMMON, mage.cards.c.CurseOfBounty.class)); + cards.add(new SetCardInfo("Curse of Disturbance", 65743, Rarity.UNCOMMON, mage.cards.c.CurseOfDisturbance.class)); + cards.add(new SetCardInfo("Curse of Opulence", 65745, Rarity.UNCOMMON, mage.cards.c.CurseOfOpulence.class)); + cards.add(new SetCardInfo("Curse of Vengeance", 23, Rarity.RARE, mage.cards.c.CurseOfVengeance.class)); + cards.add(new SetCardInfo("Curse of Verbosity", 65767, Rarity.UNCOMMON, mage.cards.c.CurseOfVerbosity.class)); + cards.add(new SetCardInfo("Curse of Vitality", 65765, Rarity.UNCOMMON, mage.cards.c.CurseOfVitality.class)); + cards.add(new SetCardInfo("Custodi Lich", 22, Rarity.RARE, mage.cards.c.CustodiLich.class)); + cards.add(new SetCardInfo("Custodi Soulbinders", 6, Rarity.RARE, mage.cards.c.CustodiSoulbinders.class)); + cards.add(new SetCardInfo("Custodi Squire", 65781, Rarity.COMMON, mage.cards.c.CustodiSquire.class)); + cards.add(new SetCardInfo("Daretti, Ingenious Iconoclast", 66, Rarity.MYTHIC, mage.cards.d.DarettiIngeniousIconoclast.class)); + cards.add(new SetCardInfo("Deepglow Skate", 16, Rarity.RARE, mage.cards.d.DeepglowSkate.class)); + cards.add(new SetCardInfo("Desperate Ritual", 65851, Rarity.UNCOMMON, mage.cards.d.DesperateRitual.class)); + cards.add(new SetCardInfo("Disrupt Decorum", 65695, Rarity.RARE, mage.cards.d.DisruptDecorum.class)); + cards.add(new SetCardInfo("Domesticated Hydra", 31, Rarity.UNCOMMON, mage.cards.d.DomesticatedHydra.class)); + cards.add(new SetCardInfo("Drafna's Restoration", 65827, Rarity.COMMON, mage.cards.d.DrafnasRestoration.class)); + cards.add(new SetCardInfo("Dragon's Presence", 70831, Rarity.COMMON, mage.cards.d.DragonsPresence.class)); + cards.add(new SetCardInfo("Drown in Shapelessness", 70837, Rarity.COMMON, mage.cards.d.DrownInShapelessness.class)); + cards.add(new SetCardInfo("Duelist's Heritage", 9, Rarity.RARE, mage.cards.d.DuelistsHeritage.class)); + cards.add(new SetCardInfo("Earth-Origin Yak", 70821, Rarity.COMMON, mage.cards.e.EarthOriginYak.class)); + cards.add(new SetCardInfo("Earthshaking Si", 70853, Rarity.COMMON, mage.cards.e.EarthshakingSi.class)); + cards.add(new SetCardInfo("Echo Storm", 70695, Rarity.RARE, mage.cards.e.EchoStorm.class)); + cards.add(new SetCardInfo("Edgar Markov", 65693, Rarity.MYTHIC, mage.cards.e.EdgarMarkov.class)); + cards.add(new SetCardInfo("Emissary of Grudges", 70761, Rarity.RARE, mage.cards.e.EmissaryOfGrudges.class)); + cards.add(new SetCardInfo("Empyrial Storm", 70701, Rarity.RARE, mage.cards.e.EmpyrialStorm.class)); + cards.add(new SetCardInfo("Enchanter's Bane", 70703, Rarity.RARE, mage.cards.e.EnchantersBane.class)); + cards.add(new SetCardInfo("Endless Atlas", 70683, Rarity.RARE, mage.cards.e.EndlessAtlas.class)); + cards.add(new SetCardInfo("Energy Tap", 65837, Rarity.COMMON, mage.cards.e.EnergyTap.class)); + cards.add(new SetCardInfo("Entourage of Trest", 65783, Rarity.COMMON, mage.cards.e.EntourageOfTrest.class)); + cards.add(new SetCardInfo("Entrapment Maneuver", 10, Rarity.RARE, mage.cards.e.EntrapmentManeuver.class)); + cards.add(new SetCardInfo("Entreat the Dead", 70743, Rarity.RARE, mage.cards.e.EntreatTheDead.class)); + cards.add(new SetCardInfo("Estrid's Invocation", 70765, Rarity.RARE, mage.cards.e.EstridsInvocation.class)); + cards.add(new SetCardInfo("Estrid, the Masked", 70739, Rarity.MYTHIC, mage.cards.e.EstridTheMasked.class)); + cards.add(new SetCardInfo("Ever-Watching Threshold", 70665, Rarity.RARE, mage.cards.e.EverWatchingThreshold.class)); + cards.add(new SetCardInfo("Evolutionary Escalation", 32, Rarity.UNCOMMON, mage.cards.e.EvolutionaryEscalation.class)); + cards.add(new SetCardInfo("Expropriate", 65785, Rarity.MYTHIC, mage.cards.e.Expropriate.class)); + cards.add(new SetCardInfo("Faerie Artisans", 14, Rarity.RARE, mage.cards.f.FaerieArtisans.class)); + cards.add(new SetCardInfo("Feiyi Snake", 70791, Rarity.COMMON, mage.cards.f.FeiyiSnake.class)); + cards.add(new SetCardInfo("Ferocious Zheng", 70847, Rarity.COMMON, mage.cards.f.FerociousZheng.class)); + cards.add(new SetCardInfo("Field of Dreams", 65831, Rarity.RARE, mage.cards.f.FieldOfDreams.class)); + cards.add(new SetCardInfo("Fire-Omen Crane", 70851, Rarity.UNCOMMON, mage.cards.f.FireOmenCrane.class)); + cards.add(new SetCardInfo("Firesong and Sunspeaker", 68076, Rarity.RARE, mage.cards.f.FiresongAndSunspeaker.class)); + cards.add(new SetCardInfo("Flood", 65829, Rarity.COMMON, mage.cards.f.Flood.class)); + cards.add(new SetCardInfo("Forest", 70807, Rarity.LAND, mage.cards.basiclands.Forest.class)); + cards.add(new SetCardInfo("Forge of Heroes", 70679, Rarity.COMMON, mage.cards.f.ForgeOfHeroes.class)); + cards.add(new SetCardInfo("Fortunate Few", 65673, Rarity.RARE, mage.cards.f.FortunateFew.class)); + cards.add(new SetCardInfo("Fractured Identity", 65681, Rarity.RARE, mage.cards.f.FracturedIdentity.class)); + cards.add(new SetCardInfo("Frenzied Fugue", 24, Rarity.UNCOMMON, mage.cards.f.FrenziedFugue.class)); + cards.add(new SetCardInfo("Fury Storm", 70751, Rarity.RARE, mage.cards.f.FuryStorm.class)); + cards.add(new SetCardInfo("Galecaster Colossus", 65755, Rarity.RARE, mage.cards.g.GalecasterColossus.class)); + cards.add(new SetCardInfo("Game of Chaos", 65821, Rarity.RARE, mage.cards.g.GameOfChaos.class)); + cards.add(new SetCardInfo("Garrulous Sycophant", 17, Rarity.COMMON, mage.cards.g.GarrulousSycophant.class)); + cards.add(new SetCardInfo("Gempalm Incinerator", 65855, Rarity.UNCOMMON, mage.cards.g.GempalmIncinerator.class)); + cards.add(new SetCardInfo("Genesis Storm", 70681, Rarity.RARE, mage.cards.g.GenesisStorm.class)); + cards.add(new SetCardInfo("Geode Golem", 70727, Rarity.UNCOMMON, mage.cards.g.GeodeGolem.class)); + cards.add(new SetCardInfo("Giant Spider", 70849, Rarity.COMMON, mage.cards.g.GiantSpider.class)); + cards.add(new SetCardInfo("Goblin Goliath", 70783, Rarity.MYTHIC, mage.cards.g.GoblinGoliath.class)); + cards.add(new SetCardInfo("Goblin Goon", 65857, Rarity.RARE, mage.cards.g.GoblinGoon.class)); + cards.add(new SetCardInfo("Goblin Spymaster", 25, Rarity.RARE, mage.cards.g.GoblinSpymaster.class)); + cards.add(new SetCardInfo("Grave Upheaval", 41, Rarity.UNCOMMON, mage.cards.g.GraveUpheaval.class)); + cards.add(new SetCardInfo("Grenzo, Havoc Raiser", 29, Rarity.RARE, mage.cards.g.GrenzoHavocRaiser.class)); + cards.add(new SetCardInfo("Grip of Phyresis", 12, Rarity.UNCOMMON, mage.cards.g.GripOfPhyresis.class)); + cards.add(new SetCardInfo("Guttural Response", 65845, Rarity.UNCOMMON, mage.cards.g.GutturalResponse.class)); + cards.add(new SetCardInfo("Gyrus, Waker of Corpses", 70661, Rarity.MYTHIC, mage.cards.g.GyrusWakerOfCorpses.class)); + cards.add(new SetCardInfo("Hammer of Nazahn", 65669, Rarity.RARE, mage.cards.h.HammerOfNazahn.class)); + cards.add(new SetCardInfo("Hardened-Scale Armor", 70787, Rarity.COMMON, mage.cards.h.HardenedScaleArmor.class)); + cards.add(new SetCardInfo("Heavenly Blademaster", 70705, Rarity.RARE, mage.cards.h.HeavenlyBlademaster.class)); + cards.add(new SetCardInfo("Heavenly Qilin", 70827, Rarity.COMMON, mage.cards.h.HeavenlyQilin.class)); + cards.add(new SetCardInfo("Heirloom Blade", 65683, Rarity.UNCOMMON, mage.cards.h.HeirloomBlade.class)); + cards.add(new SetCardInfo("Herald's Horn", 65731, Rarity.UNCOMMON, mage.cards.h.HeraldsHorn.class)); + cards.add(new SetCardInfo("Huang Zhong, Shu General", 65801, Rarity.RARE, mage.cards.h.HuangZhongShuGeneral.class)); + cards.add(new SetCardInfo("Hungry Lynx", 65711, Rarity.RARE, mage.cards.h.HungryLynx.class)); + cards.add(new SetCardInfo("Ikra Shidiqi, the Usurper", 58, Rarity.MYTHIC, mage.cards.i.IkraShidiqiTheUsurper.class)); + cards.add(new SetCardInfo("Immortal Phoenix", 70773, Rarity.RARE, mage.cards.i.ImmortalPhoenix.class)); + cards.add(new SetCardInfo("Inalla, Archmage Ritualist", 65737, Rarity.MYTHIC, mage.cards.i.InallaArchmageRitualist.class)); + cards.add(new SetCardInfo("Inspired Sphinx", 70779, Rarity.MYTHIC, mage.cards.i.InspiredSphinx.class)); + cards.add(new SetCardInfo("Ishai, Ojutai Dragonspeaker", 57, Rarity.MYTHIC, mage.cards.i.IshaiOjutaiDragonspeaker.class)); + cards.add(new SetCardInfo("Island", 70803, Rarity.LAND, mage.cards.basiclands.Island.class)); + cards.add(new SetCardInfo("Isolated Watchtower", 70707, Rarity.RARE, mage.cards.i.IsolatedWatchtower.class)); + cards.add(new SetCardInfo("Izzet Chemister", 65741, Rarity.RARE, mage.cards.i.IzzetChemister.class)); + cards.add(new SetCardInfo("Jhoira of the Ghitu", 65847, Rarity.MYTHIC, mage.cards.j.JhoiraOfTheGhitu.class)); + cards.add(new SetCardInfo("Jiang Yanggu", 70793, Rarity.MYTHIC, mage.cards.j.JiangYanggu.class)); + cards.add(new SetCardInfo("Journey for the Elixir", 70861, Rarity.RARE, mage.cards.j.JourneyForTheElixir.class)); + cards.add(new SetCardInfo("Kaya, Ghost Assassin", 67, Rarity.MYTHIC, mage.cards.k.KayaGhostAssassin.class)); + cards.add(new SetCardInfo("Keeper of Keys", 15, Rarity.RARE, mage.cards.k.KeeperOfKeys.class)); + cards.add(new SetCardInfo("Kess, Dissident Mage", 65763, Rarity.MYTHIC, mage.cards.k.KessDissidentMage.class)); + cards.add(new SetCardInfo("Kestia, the Cultivator", 70699, Rarity.MYTHIC, mage.cards.k.KestiaTheCultivator.class)); + cards.add(new SetCardInfo("Kheru Mind-Eater", 65761, Rarity.RARE, mage.cards.k.KheruMindEater.class)); + cards.add(new SetCardInfo("Kindred Boon", 65717, Rarity.RARE, mage.cards.k.KindredBoon.class)); + cards.add(new SetCardInfo("Kindred Charge", 65721, Rarity.RARE, mage.cards.k.KindredCharge.class)); + cards.add(new SetCardInfo("Kindred Discovery", 65725, Rarity.RARE, mage.cards.k.KindredDiscovery.class)); + cards.add(new SetCardInfo("Kindred Dominance", 65723, Rarity.RARE, mage.cards.k.KindredDominance.class)); + cards.add(new SetCardInfo("Kindred Summons", 65719, Rarity.RARE, mage.cards.k.KindredSummons.class)); + cards.add(new SetCardInfo("Kraum, Ludevic's Opus", 46, Rarity.RARE, mage.cards.k.KraumLudevicsOpus.class)); + cards.add(new SetCardInfo("Kydele, Chosen of Kruphix", 53, Rarity.MYTHIC, mage.cards.k.KydeleChosenOfKruphix.class)); + cards.add(new SetCardInfo("Kynaios and Tiro of Meletis", 63, Rarity.MYTHIC, mage.cards.k.KynaiosAndTiroOfMeletis.class)); + cards.add(new SetCardInfo("Lady Sun", 65803, Rarity.RARE, mage.cards.l.LadySun.class)); + cards.add(new SetCardInfo("Lady Zhurong, Warrior Queen", 65811, Rarity.RARE, mage.cards.l.LadyZhurongWarriorQueen.class)); + cards.add(new SetCardInfo("Leopard-Spotted Jiao", 70789, Rarity.COMMON, mage.cards.l.LeopardSpottedJiao.class)); + cards.add(new SetCardInfo("Leovold, Emissary of Trest", 60, Rarity.MYTHIC, mage.cards.l.LeovoldEmissaryOfTrest.class)); + cards.add(new SetCardInfo("Licia, Sanguine Tribune", 65729, Rarity.MYTHIC, mage.cards.l.LiciaSanguineTribune.class)); + cards.add(new SetCardInfo("Lonely Sandbar", 65863, Rarity.COMMON, mage.cards.l.LonelySandbar.class)); + cards.add(new SetCardInfo("Lord Windgrace", 70667, Rarity.MYTHIC, mage.cards.l.LordWindgrace.class)); + cards.add(new SetCardInfo("Lovisa Coldeyes", 65849, Rarity.MYTHIC, mage.cards.l.LovisaColdeyes.class)); + cards.add(new SetCardInfo("Loyal Apprentice", 70753, Rarity.UNCOMMON, mage.cards.l.LoyalApprentice.class)); + cards.add(new SetCardInfo("Loyal Drake", 70757, Rarity.UNCOMMON, mage.cards.l.LoyalDrake.class)); + cards.add(new SetCardInfo("Loyal Guardian", 70721, Rarity.UNCOMMON, mage.cards.l.LoyalGuardian.class)); + cards.add(new SetCardInfo("Loyal Subordinate", 70735, Rarity.UNCOMMON, mage.cards.l.LoyalSubordinate.class)); + cards.add(new SetCardInfo("Loyal Unicorn", 70729, Rarity.UNCOMMON, mage.cards.l.LoyalUnicorn.class)); + cards.add(new SetCardInfo("Lu Su, Wu Advisor", 65809, Rarity.RARE, mage.cards.l.LuSuWuAdvisor.class)); + cards.add(new SetCardInfo("Ludevic, Necro-Alchemist", 52, Rarity.MYTHIC, mage.cards.l.LudevicNecroAlchemist.class)); + cards.add(new SetCardInfo("Ma Chao, Western Warrior", 65807, Rarity.RARE, mage.cards.m.MaChaoWesternWarrior.class)); + cards.add(new SetCardInfo("Magus of the Balance", 70677, Rarity.RARE, mage.cards.m.MagusOfTheBalance.class)); + cards.add(new SetCardInfo("Magus of the Mind", 65685, Rarity.RARE, mage.cards.m.MagusOfTheMind.class)); + cards.add(new SetCardInfo("Magus of the Will", 21, Rarity.RARE, mage.cards.m.MagusOfTheWill.class)); + cards.add(new SetCardInfo("Marchesa's Decree", 20, Rarity.UNCOMMON, mage.cards.m.MarchesasDecree.class)); + cards.add(new SetCardInfo("Master of Waves", 65859, Rarity.MYTHIC, mage.cards.m.MasterOfWaves.class)); + cards.add(new SetCardInfo("Mathas, Fiend Seeker", 65759, Rarity.MYTHIC, mage.cards.m.MathasFiendSeeker.class)); + cards.add(new SetCardInfo("Meandering River", 70799, Rarity.COMMON, mage.cards.m.MeanderingRiver.class)); + cards.add(new SetCardInfo("Metamorphosis", 65839, Rarity.COMMON, mage.cards.m.Metamorphosis.class)); + cards.add(new SetCardInfo("Migratory Route", 40, Rarity.UNCOMMON, mage.cards.m.MigratoryRoute.class)); + cards.add(new SetCardInfo("Militant Angel", 70777, Rarity.MYTHIC, mage.cards.m.MilitantAngel.class)); + cards.add(new SetCardInfo("Mirri, Weatherlight Duelist", 65707, Rarity.MYTHIC, mage.cards.m.MirriWeatherlightDuelist.class)); + cards.add(new SetCardInfo("Mirror of the Forebears", 65751, Rarity.UNCOMMON, mage.cards.m.MirrorOfTheForebears.class)); + cards.add(new SetCardInfo("Moon-Eating Dog", 70823, Rarity.UNCOMMON, mage.cards.m.MoonEatingDog.class)); + cards.add(new SetCardInfo("Mountain", 70805, Rarity.LAND, mage.cards.basiclands.Mountain.class)); + cards.add(new SetCardInfo("Mu Yanling", 70795, Rarity.MYTHIC, mage.cards.m.MuYanling.class)); + cards.add(new SetCardInfo("Myth Unbound", 70663, Rarity.RARE, mage.cards.m.MythUnbound.class)); + cards.add(new SetCardInfo("Nazahn, Revered Bladesmith", 65771, Rarity.MYTHIC, mage.cards.n.NazahnReveredBladesmith.class)); + cards.add(new SetCardInfo("Nesting Dragon", 70649, Rarity.RARE, mage.cards.n.NestingDragon.class)); + cards.add(new SetCardInfo("Night Incarnate", 70749, Rarity.RARE, mage.cards.n.NightIncarnate.class)); + cards.add(new SetCardInfo("Nine-Tail White Fox", 70819, Rarity.COMMON, mage.cards.n.NineTailWhiteFox.class)); + cards.add(new SetCardInfo("Nylea's Colossus", 70655, Rarity.RARE, mage.cards.n.NyleasColossus.class)); + cards.add(new SetCardInfo("O-Kagachi, Vengeful Kami", 65733, Rarity.MYTHIC, mage.cards.o.OKagachiVengefulKami.class)); + cards.add(new SetCardInfo("Octopus Umbra", 70725, Rarity.RARE, mage.cards.o.OctopusUmbra.class)); + cards.add(new SetCardInfo("Orzhov Advokist", 3, Rarity.UNCOMMON, mage.cards.o.OrzhovAdvokist.class)); + cards.add(new SetCardInfo("Palace Jailer", 4, Rarity.UNCOMMON, mage.cards.p.PalaceJailer.class)); + cards.add(new SetCardInfo("Palace Sentinels", 2, Rarity.COMMON, mage.cards.p.PalaceSentinels.class)); + cards.add(new SetCardInfo("Pang Tong, \"Young Phoenix\"", 65813, Rarity.RARE, mage.cards.p.PangTongYoungPhoenix.class)); + cards.add(new SetCardInfo("Parting Thoughts", 19, Rarity.UNCOMMON, mage.cards.p.PartingThoughts.class)); + cards.add(new SetCardInfo("Path of Ancestry", 65679, Rarity.COMMON, mage.cards.p.PathOfAncestry.class)); + cards.add(new SetCardInfo("Patron of the Vein", 65727, Rarity.RARE, mage.cards.p.PatronOfTheVein.class)); + cards.add(new SetCardInfo("Pit Scorpion", 65823, Rarity.COMMON, mage.cards.p.PitScorpion.class)); + cards.add(new SetCardInfo("Plains", 70801, Rarity.LAND, mage.cards.basiclands.Plains.class)); + cards.add(new SetCardInfo("Plant Elemental", 65825, Rarity.UNCOMMON, mage.cards.p.PlantElemental.class)); + cards.add(new SetCardInfo("Primeval Protector", 33, Rarity.RARE, mage.cards.p.PrimevalProtector.class)); + cards.add(new SetCardInfo("Primordial Mist", 70733, Rarity.RARE, mage.cards.p.PrimordialMist.class)); + cards.add(new SetCardInfo("Prismatic Geoscope", 71, Rarity.RARE, mage.cards.p.PrismaticGeoscope.class)); + cards.add(new SetCardInfo("Protector of the Crown", 8, Rarity.RARE, mage.cards.p.ProtectorOfTheCrown.class)); + cards.add(new SetCardInfo("Purple-Crystal Crab", 70813, Rarity.COMMON, mage.cards.p.PurpleCrystalCrab.class)); + cards.add(new SetCardInfo("Qasali Slingers", 65709, Rarity.RARE, mage.cards.q.QasaliSlingers.class)); + cards.add(new SetCardInfo("Qilin's Blessing", 70841, Rarity.COMMON, mage.cards.q.QilinsBlessing.class)); + cards.add(new SetCardInfo("Queen Marchesa", 50, Rarity.MYTHIC, mage.cards.q.QueenMarchesa.class)); + cards.add(new SetCardInfo("Ramos, Dragon Engine", 65749, Rarity.MYTHIC, mage.cards.r.RamosDragonEngine.class)); + cards.add(new SetCardInfo("Rampaging Brontodon", 70775, Rarity.RARE, mage.cards.r.RampagingBrontodon.class)); + cards.add(new SetCardInfo("Ravenous Slime", 70737, Rarity.RARE, mage.cards.r.RavenousSlime.class)); + cards.add(new SetCardInfo("Ravos, Soultender", 59, Rarity.MYTHIC, mage.cards.r.RavosSoultender.class)); + cards.add(new SetCardInfo("Reality Scramble", 70723, Rarity.RARE, mage.cards.r.RealityScramble.class)); + cards.add(new SetCardInfo("Reckless Pangolin", 70845, Rarity.COMMON, mage.cards.r.RecklessPangolin.class)); + cards.add(new SetCardInfo("Recruiter of the Guard", 5, Rarity.RARE, mage.cards.r.RecruiterOfTheGuard.class)); + cards.add(new SetCardInfo("Retrofitter Foundry", 70697, Rarity.RARE, mage.cards.r.RetrofitterFoundry.class)); + cards.add(new SetCardInfo("Reyhan, Last of the Abzan", 43, Rarity.RARE, mage.cards.r.ReyhanLastOfTheAbzan.class)); + cards.add(new SetCardInfo("Rhythmic Water Vortex", 70839, Rarity.RARE, mage.cards.r.RhythmicWaterVortex.class)); + cards.add(new SetCardInfo("Rot Hulk", 70781, Rarity.MYTHIC, mage.cards.r.RotHulk.class)); + cards.add(new SetCardInfo("Runehorn Hellkite", 27, Rarity.RARE, mage.cards.r.RunehornHellkite.class)); + cards.add(new SetCardInfo("Sacred White Deer", 70843, Rarity.UNCOMMON, mage.cards.s.SacredWhiteDeer.class)); + cards.add(new SetCardInfo("Saheeli's Directive", 70675, Rarity.RARE, mage.cards.s.SaheelisDirective.class)); + cards.add(new SetCardInfo("Saheeli, the Gifted", 70685, Rarity.MYTHIC, mage.cards.s.SaheeliTheGifted.class)); + cards.add(new SetCardInfo("Salvage", 65789, Rarity.COMMON, mage.cards.s.Salvage.class)); + cards.add(new SetCardInfo("Sanctum Prelate", 11, Rarity.MYTHIC, mage.cards.s.SanctumPrelate.class)); + cards.add(new SetCardInfo("Saskia the Unyielding", 61, Rarity.MYTHIC, mage.cards.s.SaskiaTheUnyielding.class)); + cards.add(new SetCardInfo("Scalelord Reckoner", 65689, Rarity.RARE, mage.cards.s.ScalelordReckoner.class)); + cards.add(new SetCardInfo("Screeching Phoenix", 70863, Rarity.RARE, mage.cards.s.ScreechingPhoenix.class)); + cards.add(new SetCardInfo("Selfless Squire", 7, Rarity.RARE, mage.cards.s.SelflessSquire.class)); + cards.add(new SetCardInfo("Selvala's Stampede", 65787, Rarity.RARE, mage.cards.s.SelvalasStampede.class)); + cards.add(new SetCardInfo("Selvala, Heart of the Wilds", 37, Rarity.MYTHIC, mage.cards.s.SelvalaHeartOfTheWilds.class)); + cards.add(new SetCardInfo("Shifting Shadow", 65703, Rarity.RARE, mage.cards.s.ShiftingShadow.class)); + cards.add(new SetCardInfo("Sidar Kondo of Jamuraa", 54, Rarity.MYTHIC, mage.cards.s.SidarKondoOfJamuraa.class)); + cards.add(new SetCardInfo("Silas Renn, Seeker Adept", 51, Rarity.MYTHIC, mage.cards.s.SilasRennSeekerAdept.class)); + cards.add(new SetCardInfo("Sima Yi, Wei Field Marshal", 65815, Rarity.RARE, mage.cards.s.SimaYiWeiFieldMarshal.class)); + cards.add(new SetCardInfo("Sinuous Vermin", 65773, Rarity.COMMON, mage.cards.s.SinuousVermin.class)); + cards.add(new SetCardInfo("Skittering Crustacean", 65777, Rarity.COMMON, mage.cards.s.SkitteringCrustacean.class)); + cards.add(new SetCardInfo("Skull Storm", 70713, Rarity.RARE, mage.cards.s.SkullStorm.class)); + cards.add(new SetCardInfo("Skyline Despot", 28, Rarity.RARE, mage.cards.s.SkylineDespot.class)); + cards.add(new SetCardInfo("Sower of Discord", 70659, Rarity.RARE, mage.cards.s.SowerOfDiscord.class)); + cards.add(new SetCardInfo("Splitting Slime", 34, Rarity.RARE, mage.cards.s.SplittingSlime.class)); + cards.add(new SetCardInfo("Stalking Leonin", 65769, Rarity.RARE, mage.cards.s.StalkingLeonin.class)); + cards.add(new SetCardInfo("Stonehoof Chieftain", 35, Rarity.RARE, mage.cards.s.StonehoofChieftain.class)); + cards.add(new SetCardInfo("Stormcloud Spirit", 70825, Rarity.UNCOMMON, mage.cards.s.StormcloudSpirit.class)); + cards.add(new SetCardInfo("Stream of Acid", 65793, Rarity.UNCOMMON, mage.cards.s.StreamOfAcid.class)); + cards.add(new SetCardInfo("Stunt Double", 13, Rarity.RARE, mage.cards.s.StuntDouble.class)); + cards.add(new SetCardInfo("Subterranean Tremors", 30, Rarity.MYTHIC, mage.cards.s.SubterraneanTremors.class)); + cards.add(new SetCardInfo("Sylvan Reclamation", 39, Rarity.UNCOMMON, mage.cards.s.SylvanReclamation.class)); + cards.add(new SetCardInfo("Taigam, Ojutai Master", 65739, Rarity.RARE, mage.cards.t.TaigamOjutaiMaster.class)); + cards.add(new SetCardInfo("Taigam, Sidisi's Hand", 65715, Rarity.RARE, mage.cards.t.TaigamSidisisHand.class)); + cards.add(new SetCardInfo("Tana, the Bloodsower", 55, Rarity.MYTHIC, mage.cards.t.TanaTheBloodsower.class)); + cards.add(new SetCardInfo("Tawnos, Urza's Apprentice", 70687, Rarity.MYTHIC, mage.cards.t.TawnosUrzasApprentice.class)); + cards.add(new SetCardInfo("Teferi's Protection", 65701, Rarity.RARE, mage.cards.t.TeferisProtection.class)); + cards.add(new SetCardInfo("Territorial Hellkite", 65691, Rarity.RARE, mage.cards.t.TerritorialHellkite.class)); + cards.add(new SetCardInfo("Thantis, the Warweaver", 70671, Rarity.MYTHIC, mage.cards.t.ThantisTheWarweaver.class)); + cards.add(new SetCardInfo("The Unspeakable", 65841, Rarity.RARE, mage.cards.t.TheUnspeakable.class)); + cards.add(new SetCardInfo("The Ur-Dragon", 65675, Rarity.MYTHIC, mage.cards.t.TheUrDragon.class)); + cards.add(new SetCardInfo("Thorn of the Black Rose", 18, Rarity.COMMON, mage.cards.t.ThornOfTheBlackRose.class)); + cards.add(new SetCardInfo("Thrasios, Triton Hero", 47, Rarity.RARE, mage.cards.t.ThrasiosTritonHero.class)); + cards.add(new SetCardInfo("Throne Warden", 1, Rarity.COMMON, mage.cards.t.ThroneWarden.class)); + cards.add(new SetCardInfo("Throne of the High City", 73, Rarity.RARE, mage.cards.t.ThroneOfTheHighCity.class)); + cards.add(new SetCardInfo("Tidal Courier", 65861, Rarity.UNCOMMON, mage.cards.t.TidalCourier.class)); + cards.add(new SetCardInfo("Timber Gorge", 70797, Rarity.COMMON, mage.cards.t.TimberGorge.class)); + cards.add(new SetCardInfo("Traverse the Outlands", 65671, Rarity.RARE, mage.cards.t.TraverseTheOutlands.class)); + cards.add(new SetCardInfo("Treacherous Terrain", 42, Rarity.UNCOMMON, mage.cards.t.TreacherousTerrain.class)); + cards.add(new SetCardInfo("Treasonous Ogre", 65779, Rarity.UNCOMMON, mage.cards.t.TreasonousOgre.class)); + cards.add(new SetCardInfo("Treasure Nabber", 70653, Rarity.RARE, mage.cards.t.TreasureNabber.class)); + cards.add(new SetCardInfo("Turntimber Sower", 70711, Rarity.RARE, mage.cards.t.TurntimberSower.class)); + cards.add(new SetCardInfo("Tuvasa the Sunlit", 70691, Rarity.MYTHIC, mage.cards.t.TuvasaTheSunlit.class)); + cards.add(new SetCardInfo("Tymna the Weaver", 44, Rarity.RARE, mage.cards.t.TymnaTheWeaver.class)); + cards.add(new SetCardInfo("Varchild, Betrayer of Kjeldor", 70759, Rarity.RARE, mage.cards.v.VarchildBetrayerOfKjeldor.class)); + cards.add(new SetCardInfo("Varina, Lich Queen", 70741, Rarity.MYTHIC, mage.cards.v.VarinaLichQueen.class)); + cards.add(new SetCardInfo("Vedalken Humiliator", 70731, Rarity.RARE, mage.cards.v.VedalkenHumiliator.class)); + cards.add(new SetCardInfo("Vengeant Vampire", 70771, Rarity.RARE, mage.cards.v.VengeantVampire.class)); + cards.add(new SetCardInfo("Vial Smasher the Fierce", 49, Rarity.MYTHIC, mage.cards.v.VialSmasherTheFierce.class)); + cards.add(new SetCardInfo("Vivid Flying Fish", 70817, Rarity.COMMON, mage.cards.v.VividFlyingFish.class)); + cards.add(new SetCardInfo("Warren Instigator", 65853, Rarity.MYTHIC, mage.cards.w.WarrenInstigator.class)); + cards.add(new SetCardInfo("Wasitora, Nekoru Queen", 65705, Rarity.RARE, mage.cards.w.WasitoraNekoruQueen.class)); + cards.add(new SetCardInfo("Welkin Tern", 70815, Rarity.COMMON, mage.cards.w.WelkinTern.class)); + cards.add(new SetCardInfo("Whiptongue Hydra", 70657, Rarity.RARE, mage.cards.w.WhiptongueHydra.class)); + cards.add(new SetCardInfo("Windgrace's Judgment", 70669, Rarity.RARE, mage.cards.w.WindgracesJudgment.class)); + cards.add(new SetCardInfo("Xantcha, Sleeper Agent", 70719, Rarity.RARE, mage.cards.x.XantchaSleeperAgent.class)); + cards.add(new SetCardInfo("Xun Yu, Wei Advisor", 65799, Rarity.RARE, mage.cards.x.XunYuWeiAdvisor.class)); + cards.add(new SetCardInfo("Yennett, Cryptic Sovereign", 70747, Rarity.MYTHIC, mage.cards.y.YennettCrypticSovereign.class)); + cards.add(new SetCardInfo("Yidris, Maelstrom Wielder", 64, Rarity.MYTHIC, mage.cards.y.YidrisMaelstromWielder.class)); + cards.add(new SetCardInfo("Yuriko, the Tiger's Shadow", 70651, Rarity.RARE, mage.cards.y.YurikoTheTigersShadow.class)); + cards.add(new SetCardInfo("Zo-Zu the Punisher", 65843, Rarity.RARE, mage.cards.z.ZoZuThePunisher.class)); + cards.add(new SetCardInfo("Zuo Ci, the Mocking Sage", 65805, Rarity.RARE, mage.cards.z.ZuoCiTheMockingSage.class)); + } +} From f6c7b7156a15b205ab89a5724fbc7ecf0f5c90bc Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Mon, 16 Mar 2020 14:13:43 +0100 Subject: [PATCH 097/182] Added the Aether Revolt Promos (PAER) set. --- .../src/mage/sets/AetherRevoltPromos.java | 84 +++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/AetherRevoltPromos.java diff --git a/Mage.Sets/src/mage/sets/AetherRevoltPromos.java b/Mage.Sets/src/mage/sets/AetherRevoltPromos.java new file mode 100644 index 00000000000..57c478a758e --- /dev/null +++ b/Mage.Sets/src/mage/sets/AetherRevoltPromos.java @@ -0,0 +1,84 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/paer + */ +public class AetherRevoltPromos extends ExpansionSet { + + private static final AetherRevoltPromos instance = new AetherRevoltPromos(); + + public static AetherRevoltPromos getInstance() { + return instance; + } + + private AetherRevoltPromos() { + super("Aether Revolt Promos", "PAER", ExpansionSet.buildDate(2017, 1, 21), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Aethergeode Miner", "4s", Rarity.RARE, mage.cards.a.AethergeodeMiner.class)); + cards.add(new SetCardInfo("Aethersphere Harvester", "142s", Rarity.RARE, mage.cards.a.AethersphereHarvester.class)); + cards.add(new SetCardInfo("Aethertide Whale", "27s", Rarity.RARE, mage.cards.a.AethertideWhale.class)); + cards.add(new SetCardInfo("Aetherwind Basker", "104s", Rarity.MYTHIC, mage.cards.a.AetherwindBasker.class)); + cards.add(new SetCardInfo("Aid from the Cowl", "105s", Rarity.RARE, mage.cards.a.AidFromTheCowl.class)); + cards.add(new SetCardInfo("Ajani Unyielding", "127s", Rarity.MYTHIC, mage.cards.a.AjaniUnyielding.class)); + cards.add(new SetCardInfo("Baral's Expertise", "29s", Rarity.RARE, mage.cards.b.BaralsExpertise.class)); + cards.add(new SetCardInfo("Baral, Chief of Compliance", "28s", Rarity.RARE, mage.cards.b.BaralChiefOfCompliance.class)); + cards.add(new SetCardInfo("Battle at the Bridge", "53s", Rarity.RARE, mage.cards.b.BattleAtTheBridge.class)); + cards.add(new SetCardInfo("Call for Unity", "9s", Rarity.RARE, mage.cards.c.CallForUnity.class)); + cards.add(new SetCardInfo("Consulate Crackdown", "11s", Rarity.RARE, mage.cards.c.ConsulateCrackdown.class)); + cards.add(new SetCardInfo("Dark Intimations", "128s", Rarity.RARE, mage.cards.d.DarkIntimations.class)); + cards.add(new SetCardInfo("Disallow", "31p", Rarity.RARE, mage.cards.d.Disallow.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Disallow", "31s", Rarity.RARE, mage.cards.d.Disallow.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Exquisite Archangel", "18s", Rarity.MYTHIC, mage.cards.e.ExquisiteArchangel.class)); + cards.add(new SetCardInfo("Freejam Regent", "81s", Rarity.RARE, mage.cards.f.FreejamRegent.class)); + cards.add(new SetCardInfo("Glint-Sleeve Siphoner", "62s", Rarity.RARE, mage.cards.g.GlintSleeveSiphoner.class)); + cards.add(new SetCardInfo("Gonti's Aether Heart", "152s", Rarity.MYTHIC, mage.cards.g.GontisAetherHeart.class)); + cards.add(new SetCardInfo("Greenbelt Rampager", "107s", Rarity.RARE, mage.cards.g.GreenbeltRampager.class)); + cards.add(new SetCardInfo("Greenwheel Liberator", "108s", Rarity.RARE, mage.cards.g.GreenwheelLiberator.class)); + cards.add(new SetCardInfo("Heart of Kiran", "153s", Rarity.MYTHIC, mage.cards.h.HeartOfKiran.class)); + cards.add(new SetCardInfo("Herald of Anguish", "64s", Rarity.MYTHIC, mage.cards.h.HeraldOfAnguish.class)); + cards.add(new SetCardInfo("Heroic Intervention", "109p", Rarity.RARE, mage.cards.h.HeroicIntervention.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Heroic Intervention", "109s", Rarity.RARE, mage.cards.h.HeroicIntervention.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Hope of Ghirapur", "154s", Rarity.RARE, mage.cards.h.HopeOfGhirapur.class)); + cards.add(new SetCardInfo("Indomitable Creativity", "85s", Rarity.MYTHIC, mage.cards.i.IndomitableCreativity.class)); + cards.add(new SetCardInfo("Inspiring Statuary", "160s", Rarity.RARE, mage.cards.i.InspiringStatuary.class)); + cards.add(new SetCardInfo("Kari Zev's Expertise", "88s", Rarity.RARE, mage.cards.k.KariZevsExpertise.class)); + cards.add(new SetCardInfo("Kari Zev, Skyship Raider", "87s", Rarity.RARE, mage.cards.k.KariZevSkyshipRaider.class)); + cards.add(new SetCardInfo("Lifecrafter's Bestiary", "162s", Rarity.RARE, mage.cards.l.LifecraftersBestiary.class)); + cards.add(new SetCardInfo("Lightning Runner", "90s", Rarity.MYTHIC, mage.cards.l.LightningRunner.class)); + cards.add(new SetCardInfo("Mechanized Production", "38s", Rarity.MYTHIC, mage.cards.m.MechanizedProduction.class)); + cards.add(new SetCardInfo("Merchant's Dockhand", "163s", Rarity.RARE, mage.cards.m.MerchantsDockhand.class)); + cards.add(new SetCardInfo("Metallic Mimic", "164s", Rarity.RARE, mage.cards.m.MetallicMimic.class)); + cards.add(new SetCardInfo("Midnight Entourage", "66s", Rarity.RARE, mage.cards.m.MidnightEntourage.class)); + cards.add(new SetCardInfo("Oath of Ajani", "131s", Rarity.RARE, mage.cards.o.OathOfAjani.class)); + cards.add(new SetCardInfo("Paradox Engine", "169s", Rarity.MYTHIC, mage.cards.p.ParadoxEngine.class)); + cards.add(new SetCardInfo("Peacewalker Colossus", "170s", Rarity.RARE, mage.cards.p.PeacewalkerColossus.class)); + cards.add(new SetCardInfo("Pia's Revolution", "91s", Rarity.RARE, mage.cards.p.PiasRevolution.class)); + cards.add(new SetCardInfo("Planar Bridge", "171s", Rarity.MYTHIC, mage.cards.p.PlanarBridge.class)); + cards.add(new SetCardInfo("Quicksmith Rebel", 93, Rarity.RARE, mage.cards.q.QuicksmithRebel.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Quicksmith Rebel", "93s", Rarity.RARE, mage.cards.q.QuicksmithRebel.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Quicksmith Spy", "41s", Rarity.RARE, mage.cards.q.QuicksmithSpy.class)); + cards.add(new SetCardInfo("Release the Gremlins", "96s", Rarity.RARE, mage.cards.r.ReleaseTheGremlins.class)); + cards.add(new SetCardInfo("Rishkar's Expertise", "123s", Rarity.RARE, mage.cards.r.RishkarsExpertise.class)); + cards.add(new SetCardInfo("Rishkar, Peema Renegade", "122s", Rarity.RARE, mage.cards.r.RishkarPeemaRenegade.class)); + cards.add(new SetCardInfo("Scrap Trawler", 175, Rarity.RARE, mage.cards.s.ScrapTrawler.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Scrap Trawler", "175s", Rarity.RARE, mage.cards.s.ScrapTrawler.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Secret Salvage", "71s", Rarity.RARE, mage.cards.s.SecretSalvage.class)); + cards.add(new SetCardInfo("Solemn Recruit", "22s", Rarity.RARE, mage.cards.s.SolemnRecruit.class)); + cards.add(new SetCardInfo("Spire of Industry", "184s", Rarity.RARE, mage.cards.s.SpireOfIndustry.class)); + cards.add(new SetCardInfo("Sram's Expertise", "24s", Rarity.RARE, mage.cards.s.SramsExpertise.class)); + cards.add(new SetCardInfo("Sram, Senior Edificer", "23s", Rarity.RARE, mage.cards.s.SramSeniorEdificer.class)); + cards.add(new SetCardInfo("Tezzeret the Schemer", "137s", Rarity.MYTHIC, mage.cards.t.TezzeretTheSchemer.class)); + cards.add(new SetCardInfo("Trophy Mage", 48, Rarity.UNCOMMON, mage.cards.t.TrophyMage.class)); + cards.add(new SetCardInfo("Walking Ballista", "181s", Rarity.RARE, mage.cards.w.WalkingBallista.class)); + cards.add(new SetCardInfo("Whir of Invention", "49s", Rarity.RARE, mage.cards.w.WhirOfInvention.class)); + cards.add(new SetCardInfo("Yahenni's Expertise", 75, Rarity.RARE, mage.cards.y.YahennisExpertise.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Yahenni's Expertise", "75s", Rarity.RARE, mage.cards.y.YahennisExpertise.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Yahenni, Undying Partisan", "74s", Rarity.RARE, mage.cards.y.YahenniUndyingPartisan.class)); + } +} From f0e5dcdd9f6376030c683e8432a42669327b028c Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Mon, 16 Mar 2020 14:17:45 +0100 Subject: [PATCH 098/182] Added the Kaladesh Promos (PKLD) set. --- Mage.Sets/src/mage/sets/KaladeshPromos.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Mage.Sets/src/mage/sets/KaladeshPromos.java b/Mage.Sets/src/mage/sets/KaladeshPromos.java index 62fe723fba1..c31b2ce2c87 100644 --- a/Mage.Sets/src/mage/sets/KaladeshPromos.java +++ b/Mage.Sets/src/mage/sets/KaladeshPromos.java @@ -36,7 +36,8 @@ public class KaladeshPromos extends ExpansionSet { cards.add(new SetCardInfo("Cataclysmic Gearhulk", "9s", Rarity.MYTHIC, mage.cards.c.CataclysmicGearhulk.class)); cards.add(new SetCardInfo("Chandra, Torch of Defiance", "110s", Rarity.MYTHIC, mage.cards.c.ChandraTorchOfDefiance.class)); cards.add(new SetCardInfo("Chief of the Foundry", 200, Rarity.UNCOMMON, mage.cards.c.ChiefOfTheFoundry.class)); - cards.add(new SetCardInfo("Combustible Gearhulk", "112s", Rarity.MYTHIC, mage.cards.c.CombustibleGearhulk.class)); + cards.add(new SetCardInfo("Combustible Gearhulk", "112p", Rarity.MYTHIC, mage.cards.c.CombustibleGearhulk.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Combustible Gearhulk", "112s", Rarity.MYTHIC, mage.cards.c.CombustibleGearhulk.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Concealed Courtyard", "245s", Rarity.RARE, mage.cards.c.ConcealedCourtyard.class)); cards.add(new SetCardInfo("Confiscation Coup", "41s", Rarity.RARE, mage.cards.c.ConfiscationCoup.class)); cards.add(new SetCardInfo("Cultivator of Blades", 151, Rarity.RARE, mage.cards.c.CultivatorOfBlades.class, NON_FULL_USE_VARIOUS)); @@ -71,7 +72,8 @@ public class KaladeshPromos extends ExpansionSet { cards.add(new SetCardInfo("Midnight Oil", "92s", Rarity.RARE, mage.cards.m.MidnightOil.class)); cards.add(new SetCardInfo("Multiform Wonder", "223s", Rarity.RARE, mage.cards.m.MultiformWonder.class)); cards.add(new SetCardInfo("Nissa, Vital Force", "163s", Rarity.MYTHIC, mage.cards.n.NissaVitalForce.class)); - cards.add(new SetCardInfo("Noxious Gearhulk", "96s", Rarity.MYTHIC, mage.cards.n.NoxiousGearhulk.class)); + cards.add(new SetCardInfo("Noxious Gearhulk", "96p", Rarity.MYTHIC, mage.cards.n.NoxiousGearhulk.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Noxious Gearhulk", "96s", Rarity.MYTHIC, mage.cards.n.NoxiousGearhulk.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Oviya Pashiri, Sage Lifecrafter", "165s", Rarity.RARE, mage.cards.o.OviyaPashiriSageLifecrafter.class)); cards.add(new SetCardInfo("Padeem, Consul of Innovation", "59s", Rarity.RARE, mage.cards.p.PadeemConsulOfInnovation.class)); cards.add(new SetCardInfo("Panharmonicon", "226s", Rarity.RARE, mage.cards.p.Panharmonicon.class)); From 2f18fdf6667ff7a7c306fa44d72e56d4b83cd062 Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Mon, 16 Mar 2020 14:19:12 +0100 Subject: [PATCH 099/182] Added the Amonkhet Promos (PAKH) set. --- Mage.Sets/src/mage/sets/AmonkhetPromos.java | 99 +++++++++++++++++++++ 1 file changed, 99 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/AmonkhetPromos.java diff --git a/Mage.Sets/src/mage/sets/AmonkhetPromos.java b/Mage.Sets/src/mage/sets/AmonkhetPromos.java new file mode 100644 index 00000000000..75565d15a88 --- /dev/null +++ b/Mage.Sets/src/mage/sets/AmonkhetPromos.java @@ -0,0 +1,99 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/pakh + */ +public class AmonkhetPromos extends ExpansionSet { + + private static final AmonkhetPromos instance = new AmonkhetPromos(); + + public static AmonkhetPromos getInstance() { + return instance; + } + + private AmonkhetPromos() { + super("Amonkhet Promos", "PAKH", ExpansionSet.buildDate(2017, 4, 28), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Angel of Sanctions", "1s", Rarity.MYTHIC, mage.cards.a.AngelOfSanctions.class)); + cards.add(new SetCardInfo("Anointed Procession", "2p", Rarity.RARE, mage.cards.a.AnointedProcession.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Anointed Procession", "2s", Rarity.RARE, mage.cards.a.AnointedProcession.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Approach of the Second Sun", "4s", Rarity.RARE, mage.cards.a.ApproachOfTheSecondSun.class)); + cards.add(new SetCardInfo("Archfiend of Ifnir", 78, Rarity.RARE, mage.cards.a.ArchfiendOfIfnir.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Archfiend of Ifnir", "78s", Rarity.RARE, mage.cards.a.ArchfiendOfIfnir.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("As Foretold", "42s", Rarity.MYTHIC, mage.cards.a.AsForetold.class)); + cards.add(new SetCardInfo("Aven Mindcensor", "5p", Rarity.RARE, mage.cards.a.AvenMindcensor.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Aven Mindcensor", "5s", Rarity.RARE, mage.cards.a.AvenMindcensor.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Bontu the Glorified", "82s", Rarity.MYTHIC, mage.cards.b.BontuTheGlorified.class)); + cards.add(new SetCardInfo("Bounty of the Luxa", "196s", Rarity.RARE, mage.cards.b.BountyOfTheLuxa.class)); + cards.add(new SetCardInfo("Canyon Slough", "239s", Rarity.RARE, mage.cards.c.CanyonSlough.class)); + cards.add(new SetCardInfo("Cascading Cataracts", "240s", Rarity.RARE, mage.cards.c.CascadingCataracts.class)); + cards.add(new SetCardInfo("Champion of Rhonas", "159s", Rarity.RARE, mage.cards.c.ChampionOfRhonas.class)); + cards.add(new SetCardInfo("Channeler Initiate", "160s", Rarity.RARE, mage.cards.c.ChannelerInitiate.class)); + cards.add(new SetCardInfo("Combat Celebrant", "125s", Rarity.MYTHIC, mage.cards.c.CombatCelebrant.class)); + cards.add(new SetCardInfo("Commit // Memory", "211s", Rarity.RARE, mage.cards.c.CommitMemory.class)); + cards.add(new SetCardInfo("Cruel Reality", "84s", Rarity.MYTHIC, mage.cards.c.CruelReality.class)); + cards.add(new SetCardInfo("Curator of Mysteries", "49s", Rarity.RARE, mage.cards.c.CuratorOfMysteries.class)); + cards.add(new SetCardInfo("Cut // Ribbons", "223s", Rarity.RARE, mage.cards.c.CutRibbons.class)); + cards.add(new SetCardInfo("Dispossess", "86s", Rarity.RARE, mage.cards.d.Dispossess.class)); + cards.add(new SetCardInfo("Drake Haven", "51s", Rarity.RARE, mage.cards.d.DrakeHaven.class)); + cards.add(new SetCardInfo("Dread Wanderer", "88s", Rarity.RARE, mage.cards.d.DreadWanderer.class)); + cards.add(new SetCardInfo("Dusk // Dawn", "210s", Rarity.RARE, mage.cards.d.DuskDawn.class)); + cards.add(new SetCardInfo("Failure // Comply", "221s", Rarity.RARE, mage.cards.f.FailureComply.class)); + cards.add(new SetCardInfo("Fetid Pools", "243s", Rarity.RARE, mage.cards.f.FetidPools.class)); + cards.add(new SetCardInfo("Gideon of the Trials", "14s", Rarity.MYTHIC, mage.cards.g.GideonOfTheTrials.class)); + cards.add(new SetCardInfo("Gideon's Intervention", "15s", Rarity.RARE, mage.cards.g.GideonsIntervention.class)); + cards.add(new SetCardInfo("Glorious End", "133s", Rarity.MYTHIC, mage.cards.g.GloriousEnd.class)); + cards.add(new SetCardInfo("Glory-Bound Initiate", "16s", Rarity.RARE, mage.cards.g.GloryBoundInitiate.class)); + cards.add(new SetCardInfo("Glorybringer", 134, Rarity.RARE, mage.cards.g.Glorybringer.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Glorybringer", "134s", Rarity.RARE, mage.cards.g.Glorybringer.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Glyph Keeper", "55s", Rarity.RARE, mage.cards.g.GlyphKeeper.class)); + cards.add(new SetCardInfo("Hapatra, Vizier of Poisons", "199s", Rarity.RARE, mage.cards.h.HapatraVizierOfPoisons.class)); + cards.add(new SetCardInfo("Harsh Mentor", "135s", Rarity.RARE, mage.cards.h.HarshMentor.class)); + cards.add(new SetCardInfo("Harvest Season", "170s", Rarity.RARE, mage.cards.h.HarvestSeason.class)); + cards.add(new SetCardInfo("Hazoret the Fervent", "136s", Rarity.MYTHIC, mage.cards.h.HazoretTheFervent.class)); + cards.add(new SetCardInfo("Hazoret's Favor", "137s", Rarity.RARE, mage.cards.h.HazoretsFavor.class)); + cards.add(new SetCardInfo("Heart-Piercer Manticore", "138s", Rarity.RARE, mage.cards.h.HeartPiercerManticore.class)); + cards.add(new SetCardInfo("Heaven // Earth", "224s", Rarity.RARE, mage.cards.h.HeavenEarth.class)); + cards.add(new SetCardInfo("Honored Hydra", "172s", Rarity.RARE, mage.cards.h.HonoredHydra.class)); + cards.add(new SetCardInfo("Insult // Injury", "213s", Rarity.RARE, mage.cards.i.InsultInjury.class)); + cards.add(new SetCardInfo("Irrigated Farmland", "245s", Rarity.RARE, mage.cards.i.IrrigatedFarmland.class)); + cards.add(new SetCardInfo("Kefnet the Mindful", "59s", Rarity.MYTHIC, mage.cards.k.KefnetTheMindful.class)); + cards.add(new SetCardInfo("Liliana's Mastery", "98s", Rarity.RARE, mage.cards.l.LilianasMastery.class)); + cards.add(new SetCardInfo("Liliana, Death's Majesty", "97s", Rarity.MYTHIC, mage.cards.l.LilianaDeathsMajesty.class)); + cards.add(new SetCardInfo("Mouth // Feed", "214s", Rarity.RARE, mage.cards.m.MouthFeed.class)); + cards.add(new SetCardInfo("Neheb, the Worthy", "203s", Rarity.RARE, mage.cards.n.NehebTheWorthy.class)); + cards.add(new SetCardInfo("Never // Return", "212s", Rarity.RARE, mage.cards.n.NeverReturn.class)); + cards.add(new SetCardInfo("New Perspectives", "63s", Rarity.RARE, mage.cards.n.NewPerspectives.class)); + cards.add(new SetCardInfo("Nissa, Steward of Elements", "204s", Rarity.MYTHIC, mage.cards.n.NissaStewardOfElements.class)); + cards.add(new SetCardInfo("Oketra the True", "21s", Rarity.MYTHIC, mage.cards.o.OketraTheTrue.class)); + cards.add(new SetCardInfo("Oracle's Vault", 234, Rarity.RARE, mage.cards.o.OraclesVault.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Oracle's Vault", "234s", Rarity.RARE, mage.cards.o.OraclesVault.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plague Belcher", "104s", Rarity.RARE, mage.cards.p.PlagueBelcher.class)); + cards.add(new SetCardInfo("Prepare // Fight", "220s", Rarity.RARE, mage.cards.p.PrepareFight.class)); + cards.add(new SetCardInfo("Prowling Serpopard", "180s", Rarity.RARE, mage.cards.p.ProwlingSerpopard.class)); + cards.add(new SetCardInfo("Pull from Tomorrow", "65p", Rarity.RARE, mage.cards.p.PullFromTomorrow.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Pull from Tomorrow", "65s", Rarity.RARE, mage.cards.p.PullFromTomorrow.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Pyramid of the Pantheon", "235s", Rarity.RARE, mage.cards.p.PyramidOfThePantheon.class)); + cards.add(new SetCardInfo("Rags // Riches", "222s", Rarity.RARE, mage.cards.r.RagsRiches.class)); + cards.add(new SetCardInfo("Regal Caracal", "24s", Rarity.RARE, mage.cards.r.RegalCaracal.class)); + cards.add(new SetCardInfo("Rhonas the Indomitable", "182s", Rarity.MYTHIC, mage.cards.r.RhonasTheIndomitable.class)); + cards.add(new SetCardInfo("Samut, Voice of Dissent", "205s", Rarity.MYTHIC, mage.cards.s.SamutVoiceOfDissent.class)); + cards.add(new SetCardInfo("Sandwurm Convergence", "183s", Rarity.RARE, mage.cards.s.SandwurmConvergence.class)); + cards.add(new SetCardInfo("Scattered Groves", "247s", Rarity.RARE, mage.cards.s.ScatteredGroves.class)); + cards.add(new SetCardInfo("Shadow of the Grave", "107s", Rarity.RARE, mage.cards.s.ShadowOfTheGrave.class)); + cards.add(new SetCardInfo("Sheltered Thicket", "248s", Rarity.RARE, mage.cards.s.ShelteredThicket.class)); + cards.add(new SetCardInfo("Soul-Scar Mage", "148s", Rarity.RARE, mage.cards.s.SoulScarMage.class)); + cards.add(new SetCardInfo("Sweltering Suns", "149s", Rarity.RARE, mage.cards.s.SwelteringSuns.class)); + cards.add(new SetCardInfo("Temmet, Vizier of Naktamun", "207s", Rarity.RARE, mage.cards.t.TemmetVizierOfNaktamun.class)); + cards.add(new SetCardInfo("Throne of the God-Pharaoh", "237s", Rarity.RARE, mage.cards.t.ThroneOfTheGodPharaoh.class)); + cards.add(new SetCardInfo("Trueheart Duelist", 35, Rarity.UNCOMMON, mage.cards.t.TrueheartDuelist.class)); + cards.add(new SetCardInfo("Vizier of Many Faces", "74s", Rarity.RARE, mage.cards.v.VizierOfManyFaces.class)); + cards.add(new SetCardInfo("Vizier of the Menagerie", "192s", Rarity.MYTHIC, mage.cards.v.VizierOfTheMenagerie.class)); + } +} From 29afa40484b1eecbacf7c416e255117919c67fa8 Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Mon, 16 Mar 2020 14:21:20 +0100 Subject: [PATCH 100/182] Added the Hour of Devastation Promos (PHOU) set. --- .../mage/sets/HourOfDevastationPromos.java | 83 +++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/HourOfDevastationPromos.java diff --git a/Mage.Sets/src/mage/sets/HourOfDevastationPromos.java b/Mage.Sets/src/mage/sets/HourOfDevastationPromos.java new file mode 100644 index 00000000000..dabf74113c7 --- /dev/null +++ b/Mage.Sets/src/mage/sets/HourOfDevastationPromos.java @@ -0,0 +1,83 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/phou + */ +public class HourOfDevastationPromos extends ExpansionSet { + + private static final HourOfDevastationPromos instance = new HourOfDevastationPromos(); + + public static HourOfDevastationPromos getInstance() { + return instance; + } + + private HourOfDevastationPromos() { + super("Hour of Devastation Promos", "PHOU", ExpansionSet.buildDate(2017, 7, 14), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Abandoned Sarcophagus", "158s", Rarity.RARE, mage.cards.a.AbandonedSarcophagus.class)); + cards.add(new SetCardInfo("Abrade", 83, Rarity.UNCOMMON, mage.cards.a.Abrade.class)); + cards.add(new SetCardInfo("Adorned Pouncer", 2, Rarity.RARE, mage.cards.a.AdornedPouncer.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Adorned Pouncer", "2s", Rarity.RARE, mage.cards.a.AdornedPouncer.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Ammit Eternal", "57s", Rarity.RARE, mage.cards.a.AmmitEternal.class)); + cards.add(new SetCardInfo("Angel of Condemnation", "3s", Rarity.RARE, mage.cards.a.AngelOfCondemnation.class)); + cards.add(new SetCardInfo("Apocalypse Demon", "58s", Rarity.RARE, mage.cards.a.ApocalypseDemon.class)); + cards.add(new SetCardInfo("Bontu's Last Reckoning", "60s", Rarity.RARE, mage.cards.b.BontusLastReckoning.class)); + cards.add(new SetCardInfo("Champion of Wits", "31s", Rarity.RARE, mage.cards.c.ChampionOfWits.class)); + cards.add(new SetCardInfo("Chaos Maw", "87s", Rarity.RARE, mage.cards.c.ChaosMaw.class)); + cards.add(new SetCardInfo("Crested Sunmare", "6s", Rarity.MYTHIC, mage.cards.c.CrestedSunmare.class)); + cards.add(new SetCardInfo("Djeru, With Eyes Open", "10s", Rarity.RARE, mage.cards.d.DjeruWithEyesOpen.class)); + cards.add(new SetCardInfo("Dreamstealer", "63s", Rarity.RARE, mage.cards.d.Dreamstealer.class)); + cards.add(new SetCardInfo("Driven // Despair", "157s", Rarity.RARE, mage.cards.d.DrivenDespair.class)); + cards.add(new SetCardInfo("Earthshaker Khenra", "90s", Rarity.RARE, mage.cards.e.EarthshakerKhenra.class)); + cards.add(new SetCardInfo("Endless Sands", "176s", Rarity.RARE, mage.cards.e.EndlessSands.class)); + cards.add(new SetCardInfo("Fraying Sanity", "35s", Rarity.RARE, mage.cards.f.FrayingSanity.class)); + cards.add(new SetCardInfo("God-Pharaoh's Gift", "161s", Rarity.RARE, mage.cards.g.GodPharaohsGift.class)); + cards.add(new SetCardInfo("Grind // Dust", "155s", Rarity.RARE, mage.cards.g.GrindDust.class)); + cards.add(new SetCardInfo("Hazoret's Undying Fury", "96s", Rarity.RARE, mage.cards.h.HazoretsUndyingFury.class)); + cards.add(new SetCardInfo("Hollow One", "163s", Rarity.RARE, mage.cards.h.HollowOne.class)); + cards.add(new SetCardInfo("Hostile Desert", "178s", Rarity.RARE, mage.cards.h.HostileDesert.class)); + cards.add(new SetCardInfo("Hour of Devastation", "97s", Rarity.RARE, mage.cards.h.HourOfDevastation.class)); + cards.add(new SetCardInfo("Hour of Eternity", "36s", Rarity.RARE, mage.cards.h.HourOfEternity.class)); + cards.add(new SetCardInfo("Hour of Glory", "65s", Rarity.RARE, mage.cards.h.HourOfGlory.class)); + cards.add(new SetCardInfo("Hour of Promise", "120s", Rarity.RARE, mage.cards.h.HourOfPromise.class)); + cards.add(new SetCardInfo("Hour of Revelation", "15s", Rarity.RARE, mage.cards.h.HourOfRevelation.class)); + cards.add(new SetCardInfo("Imminent Doom", "98s", Rarity.RARE, mage.cards.i.ImminentDoom.class)); + cards.add(new SetCardInfo("Kefnet's Last Word", "39s", Rarity.RARE, mage.cards.k.KefnetsLastWord.class)); + cards.add(new SetCardInfo("Leave // Chance", "153s", Rarity.RARE, mage.cards.l.LeaveChance.class)); + cards.add(new SetCardInfo("Majestic Myriarch", "122s", Rarity.MYTHIC, mage.cards.m.MajesticMyriarch.class)); + cards.add(new SetCardInfo("Mirage Mirror", "165p", Rarity.RARE, mage.cards.m.MirageMirror.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mirage Mirror", "165s", Rarity.RARE, mage.cards.m.MirageMirror.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Neheb, the Eternal", "104s", Rarity.MYTHIC, mage.cards.n.NehebTheEternal.class)); + cards.add(new SetCardInfo("Nicol Bolas, God-Pharaoh", "140s", Rarity.MYTHIC, mage.cards.n.NicolBolasGodPharaoh.class)); + cards.add(new SetCardInfo("Nimble Obstructionist", "40s", Rarity.RARE, mage.cards.n.NimbleObstructionist.class)); + cards.add(new SetCardInfo("Oketra's Last Mercy", "18s", Rarity.RARE, mage.cards.o.OketrasLastMercy.class)); + cards.add(new SetCardInfo("Overwhelming Splendor", "19s", Rarity.MYTHIC, mage.cards.o.OverwhelmingSplendor.class)); + cards.add(new SetCardInfo("Pride Sovereign", "126s", Rarity.RARE, mage.cards.p.PrideSovereign.class)); + cards.add(new SetCardInfo("Ramunap Excavator", 129, Rarity.RARE, mage.cards.r.RamunapExcavator.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Ramunap Excavator", "129s", Rarity.RARE, mage.cards.r.RamunapExcavator.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Ramunap Hydra", "130s", Rarity.RARE, mage.cards.r.RamunapHydra.class)); + cards.add(new SetCardInfo("Razaketh, the Foulblooded", "73s", Rarity.MYTHIC, mage.cards.r.RazakethTheFoulblooded.class)); + cards.add(new SetCardInfo("Reason // Believe", "154s", Rarity.RARE, mage.cards.r.ReasonBelieve.class)); + cards.add(new SetCardInfo("Refuse // Cooperate", "156s", Rarity.RARE, mage.cards.r.RefuseCooperate.class)); + cards.add(new SetCardInfo("Resilient Khenra", "131s", Rarity.RARE, mage.cards.r.ResilientKhenra.class)); + cards.add(new SetCardInfo("Rhonas's Last Stand", "132s", Rarity.RARE, mage.cards.r.RhonassLastStand.class)); + cards.add(new SetCardInfo("Samut, the Tested", "144s", Rarity.MYTHIC, mage.cards.s.SamutTheTested.class)); + cards.add(new SetCardInfo("Scavenger Grounds", "182s", Rarity.RARE, mage.cards.s.ScavengerGrounds.class)); + cards.add(new SetCardInfo("Solemnity", "22s", Rarity.RARE, mage.cards.s.Solemnity.class)); + cards.add(new SetCardInfo("Swarm Intelligence", "50s", Rarity.RARE, mage.cards.s.SwarmIntelligence.class)); + cards.add(new SetCardInfo("The Locust God", "139s", Rarity.MYTHIC, mage.cards.t.TheLocustGod.class)); + cards.add(new SetCardInfo("The Scarab God", "145s", Rarity.MYTHIC, mage.cards.t.TheScarabGod.class)); + cards.add(new SetCardInfo("The Scorpion God", "146s", Rarity.MYTHIC, mage.cards.t.TheScorpionGod.class)); + cards.add(new SetCardInfo("Torment of Hailfire", "77s", Rarity.RARE, mage.cards.t.TormentOfHailfire.class)); + cards.add(new SetCardInfo("Uncage the Menagerie", "137s", Rarity.MYTHIC, mage.cards.u.UncageTheMenagerie.class)); + cards.add(new SetCardInfo("Unesh, Criosphinx Sovereign", "52s", Rarity.MYTHIC, mage.cards.u.UneshCriosphinxSovereign.class)); + cards.add(new SetCardInfo("Wildfire Eternal", 109, Rarity.RARE, mage.cards.w.WildfireEternal.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Wildfire Eternal", "109s", Rarity.RARE, mage.cards.w.WildfireEternal.class, NON_FULL_USE_VARIOUS)); + } +} From 53309191f91569ab476e3af198cb0c3ad085022d Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Mon, 16 Mar 2020 14:26:33 +0100 Subject: [PATCH 101/182] Renamed HeroesOfTheRealm 2016 set, added missing cards as comments. --- Mage.Sets/src/mage/sets/HeroesOfTheRealm.java | 24 ---------------- .../src/mage/sets/HeroesOfTheRealm2016.java | 28 +++++++++++++++++++ 2 files changed, 28 insertions(+), 24 deletions(-) delete mode 100644 Mage.Sets/src/mage/sets/HeroesOfTheRealm.java create mode 100644 Mage.Sets/src/mage/sets/HeroesOfTheRealm2016.java diff --git a/Mage.Sets/src/mage/sets/HeroesOfTheRealm.java b/Mage.Sets/src/mage/sets/HeroesOfTheRealm.java deleted file mode 100644 index 4ccfd7f4470..00000000000 --- a/Mage.Sets/src/mage/sets/HeroesOfTheRealm.java +++ /dev/null @@ -1,24 +0,0 @@ -package mage.sets; - -import mage.cards.ExpansionSet; -import mage.constants.Rarity; -import mage.constants.SetType; - -/** - * @author TheElk801 - */ -public final class HeroesOfTheRealm extends ExpansionSet { - - private static final HeroesOfTheRealm instance = new HeroesOfTheRealm(); - - public static HeroesOfTheRealm getInstance() { - return instance; - } - - private HeroesOfTheRealm() { - super("Heroes of the Realm", "HTR", ExpansionSet.buildDate(2017, 9, 20), SetType.JOKESET); - this.hasBasicLands = false; - - cards.add(new SetCardInfo("Chandra, Gremlin Wrangler", 1, Rarity.MYTHIC, mage.cards.c.ChandraGremlinWrangler.class)); - } -} diff --git a/Mage.Sets/src/mage/sets/HeroesOfTheRealm2016.java b/Mage.Sets/src/mage/sets/HeroesOfTheRealm2016.java new file mode 100644 index 00000000000..2b2355a5d98 --- /dev/null +++ b/Mage.Sets/src/mage/sets/HeroesOfTheRealm2016.java @@ -0,0 +1,28 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/htr + * @author TheElk801 + */ +public final class HeroesOfTheRealm2016 extends ExpansionSet { + + private static final HeroesOfTheRealm2016 instance = new HeroesOfTheRealm2016(); + + public static HeroesOfTheRealm2016 getInstance() { + return instance; + } + + private HeroesOfTheRealm2016() { + super("Heroes of the Realm 2016", "HTR", ExpansionSet.buildDate(2017, 9, 20), SetType.JOKESET); + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Chandra, Gremlin Wrangler", 1, Rarity.MYTHIC, mage.cards.c.ChandraGremlinWrangler.class)); + // Cards not implemented + //cards.add(new SetCardInfo("Dungeon Master", 2, Rarity.MYTHIC, mage.cards.d.DungeonMaster.class)); + //cards.add(new SetCardInfo("Nira, Hellkite Duelist", 3, Rarity.MYTHIC, mage.cards.n.NiraHellkiteDuelist.class)); + } +} From 126a434156aea3cfedea5c525a30225e8486772d Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Mon, 16 Mar 2020 15:11:25 +0100 Subject: [PATCH 102/182] Added the 2017 Gift Pack (G17) set. --- Mage.Sets/src/mage/sets/GiftPack2017.java | 29 +++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/GiftPack2017.java diff --git a/Mage.Sets/src/mage/sets/GiftPack2017.java b/Mage.Sets/src/mage/sets/GiftPack2017.java new file mode 100644 index 00000000000..f7f9cd27cdb --- /dev/null +++ b/Mage.Sets/src/mage/sets/GiftPack2017.java @@ -0,0 +1,29 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/g17 + */ +public class GiftPack2017 extends ExpansionSet { + + private static final GiftPack2017 instance = new GiftPack2017(); + + public static GiftPack2017 getInstance() { + return instance; + } + + private GiftPack2017() { + super("Gift Pack 2017", "G17", ExpansionSet.buildDate(2017, 10, 20), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = true; + + cards.add(new SetCardInfo("Forest", 5, Rarity.LAND, mage.cards.basiclands.Forest.class)); + cards.add(new SetCardInfo("Island", 2, Rarity.LAND, mage.cards.basiclands.Island.class)); + cards.add(new SetCardInfo("Mountain", 4, Rarity.LAND, mage.cards.basiclands.Mountain.class)); + cards.add(new SetCardInfo("Plains", 1, Rarity.LAND, mage.cards.basiclands.Plains.class)); + cards.add(new SetCardInfo("Swamp", 3, Rarity.LAND, mage.cards.basiclands.Swamp.class)); + } +} From fc10674fd1796f821d98a02b129d94f30f15fe8f Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Mon, 16 Mar 2020 15:21:34 +0100 Subject: [PATCH 103/182] Added the XLN Standard Showdown (PSS2) set. --- .../src/mage/sets/IxalanStandardShowdown.java | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/IxalanStandardShowdown.java diff --git a/Mage.Sets/src/mage/sets/IxalanStandardShowdown.java b/Mage.Sets/src/mage/sets/IxalanStandardShowdown.java new file mode 100644 index 00000000000..ff9d73b0030 --- /dev/null +++ b/Mage.Sets/src/mage/sets/IxalanStandardShowdown.java @@ -0,0 +1,29 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/pss2 + */ +public class IxalanStandardShowdown extends ExpansionSet { + + private static final IxalanStandardShowdown instance = new IxalanStandardShowdown(); + + public static IxalanStandardShowdown getInstance() { + return instance; + } + + private IxalanStandardShowdown() { + super("Ixalan Standard Showdown", "PSS2", ExpansionSet.buildDate(2017, 9, 29), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = true; + + cards.add(new SetCardInfo("Forest", 5, Rarity.LAND, mage.cards.basiclands.Forest.class)); + cards.add(new SetCardInfo("Island", 2, Rarity.LAND, mage.cards.basiclands.Island.class)); + cards.add(new SetCardInfo("Mountain", 4, Rarity.LAND, mage.cards.basiclands.Mountain.class)); + cards.add(new SetCardInfo("Plains", 1, Rarity.LAND, mage.cards.basiclands.Plains.class)); + cards.add(new SetCardInfo("Swamp", 3, Rarity.LAND, mage.cards.basiclands.Swamp.class)); + } +} From d71d6ce4f9ad72ffc4139ea98d05fca794dd7191 Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Mon, 16 Mar 2020 15:21:53 +0100 Subject: [PATCH 104/182] Added the XLN Treasure Chest (PXTC) set. --- .../src/mage/sets/IxalanTreasureChest.java | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/IxalanTreasureChest.java diff --git a/Mage.Sets/src/mage/sets/IxalanTreasureChest.java b/Mage.Sets/src/mage/sets/IxalanTreasureChest.java new file mode 100644 index 00000000000..93031239777 --- /dev/null +++ b/Mage.Sets/src/mage/sets/IxalanTreasureChest.java @@ -0,0 +1,44 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/pxtc + */ +public class IxalanTreasureChest extends ExpansionSet { + + private static final IxalanTreasureChest instance = new IxalanTreasureChest(); + + public static IxalanTreasureChest getInstance() { + return instance; + } + + private IxalanTreasureChest() { + super("Ixalan Treasure Chest", "PXTC", ExpansionSet.buildDate(2017, 11, 24), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Adanto, the First Fort", 22, Rarity.RARE, mage.cards.a.AdantoTheFirstFort.class)); + cards.add(new SetCardInfo("Arguel's Blood Fast", 90, Rarity.RARE, mage.cards.a.ArguelsBloodFast.class)); + cards.add(new SetCardInfo("Azcanta, the Sunken Ruin", 74, Rarity.RARE, mage.cards.a.AzcantaTheSunkenRuin.class)); + cards.add(new SetCardInfo("Conqueror's Foothold", 234, Rarity.RARE, mage.cards.c.ConquerorsFoothold.class)); + cards.add(new SetCardInfo("Conqueror's Galleon", 234, Rarity.RARE, mage.cards.c.ConquerorsGalleon.class)); + cards.add(new SetCardInfo("Dowsing Dagger", 235, Rarity.RARE, mage.cards.d.DowsingDagger.class)); + cards.add(new SetCardInfo("Growing Rites of Itlimoc", 191, Rarity.RARE, mage.cards.g.GrowingRitesOfItlimoc.class)); + cards.add(new SetCardInfo("Itlimoc, Cradle of the Sun", 191, Rarity.RARE, mage.cards.i.ItlimocCradleOfTheSun.class)); + cards.add(new SetCardInfo("Legion's Landing", 22, Rarity.RARE, mage.cards.l.LegionsLanding.class)); + cards.add(new SetCardInfo("Lost Vale", 235, Rarity.RARE, mage.cards.l.LostVale.class)); + cards.add(new SetCardInfo("Primal Amulet", 243, Rarity.RARE, mage.cards.p.PrimalAmulet.class)); + cards.add(new SetCardInfo("Primal Wellspring", 243, Rarity.RARE, mage.cards.p.PrimalWellspring.class)); + cards.add(new SetCardInfo("Search for Azcanta", 74, Rarity.RARE, mage.cards.s.SearchForAzcanta.class)); + cards.add(new SetCardInfo("Spires of Orazca", 249, Rarity.RARE, mage.cards.s.SpiresOfOrazca.class)); + cards.add(new SetCardInfo("Spitfire Bastion", 173, Rarity.RARE, mage.cards.s.SpitfireBastion.class)); + cards.add(new SetCardInfo("Temple of Aclazotz", 90, Rarity.RARE, mage.cards.t.TempleOfAclazotz.class)); + cards.add(new SetCardInfo("Thaumatic Compass", 249, Rarity.RARE, mage.cards.t.ThaumaticCompass.class)); + cards.add(new SetCardInfo("Treasure Cove", 250, Rarity.RARE, mage.cards.t.TreasureCove.class)); + cards.add(new SetCardInfo("Treasure Map", 250, Rarity.RARE, mage.cards.t.TreasureMap.class)); + cards.add(new SetCardInfo("Vance's Blasting Cannons", 173, Rarity.RARE, mage.cards.v.VancesBlastingCannons.class)); + } +} From 8ca0da18303639245ec63ed59dff247df27a0429 Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Mon, 16 Mar 2020 15:22:56 +0100 Subject: [PATCH 105/182] Added the Ixalan Promos (PXLN) set. --- Mage.Sets/src/mage/sets/IxalanPromos.java | 154 ++++++++++++++++++++++ 1 file changed, 154 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/IxalanPromos.java diff --git a/Mage.Sets/src/mage/sets/IxalanPromos.java b/Mage.Sets/src/mage/sets/IxalanPromos.java new file mode 100644 index 00000000000..d472b0c1307 --- /dev/null +++ b/Mage.Sets/src/mage/sets/IxalanPromos.java @@ -0,0 +1,154 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/pxln + */ +public class IxalanPromos extends ExpansionSet { + + private static final IxalanPromos instance = new IxalanPromos(); + + public static IxalanPromos getInstance() { + return instance; + } + + private IxalanPromos() { + super("Ixalan Promos", "PXLN", ExpansionSet.buildDate(2017, 9, 29), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Adanto, the First Fort", "22s", Rarity.RARE, mage.cards.a.AdantoTheFirstFort.class)); + cards.add(new SetCardInfo("Admiral Beckett Brass", "217s", Rarity.MYTHIC, mage.cards.a.AdmiralBeckettBrass.class)); + cards.add(new SetCardInfo("Angrath's Marauders", "132s", Rarity.RARE, mage.cards.a.AngrathsMarauders.class)); + cards.add(new SetCardInfo("Arcane Adaptation", "46p", Rarity.RARE, mage.cards.a.ArcaneAdaptation.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Arcane Adaptation", "46s", Rarity.RARE, mage.cards.a.ArcaneAdaptation.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Arguel's Blood Fast", "90s", Rarity.RARE, mage.cards.a.ArguelsBloodFast.class)); + cards.add(new SetCardInfo("Ashes of the Abhorrent", "2p", Rarity.RARE, mage.cards.a.AshesOfTheAbhorrent.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Ashes of the Abhorrent", "2s", Rarity.RARE, mage.cards.a.AshesOfTheAbhorrent.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Axis of Mortality", "3s", Rarity.MYTHIC, mage.cards.a.AxisOfMortality.class)); + cards.add(new SetCardInfo("Azcanta, the Sunken Ruin", "74s", Rarity.RARE, mage.cards.a.AzcantaTheSunkenRuin.class)); + cards.add(new SetCardInfo("Bishop of Rebirth", 5, Rarity.RARE, mage.cards.b.BishopOfRebirth.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Bishop of Rebirth", "5s", Rarity.RARE, mage.cards.b.BishopOfRebirth.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Bloodcrazed Paladin", "93s", Rarity.RARE, mage.cards.b.BloodcrazedPaladin.class)); + cards.add(new SetCardInfo("Boneyard Parley", "94s", Rarity.MYTHIC, mage.cards.b.BoneyardParley.class)); + cards.add(new SetCardInfo("Burning Sun's Avatar", 135, Rarity.RARE, mage.cards.b.BurningSunsAvatar.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Burning Sun's Avatar", "135s", Rarity.RARE, mage.cards.b.BurningSunsAvatar.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Captain Lannery Storm", "136p", Rarity.RARE, mage.cards.c.CaptainLanneryStorm.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Captain Lannery Storm", "136s", Rarity.RARE, mage.cards.c.CaptainLanneryStorm.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Captivating Crew", "137p", Rarity.RARE, mage.cards.c.CaptivatingCrew.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Captivating Crew", "137s", Rarity.RARE, mage.cards.c.CaptivatingCrew.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Carnage Tyrant", "179p", Rarity.MYTHIC, mage.cards.c.CarnageTyrant.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Carnage Tyrant", "179s", Rarity.MYTHIC, mage.cards.c.CarnageTyrant.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Conqueror's Foothold", "234s", Rarity.RARE, mage.cards.c.ConquerorsFoothold.class)); + cards.add(new SetCardInfo("Conqueror's Galleon", "234s", Rarity.RARE, mage.cards.c.ConquerorsGalleon.class)); + cards.add(new SetCardInfo("Daring Saboteur", "49s", Rarity.RARE, mage.cards.d.DaringSaboteur.class)); + cards.add(new SetCardInfo("Deadeye Tracker", "99p", Rarity.RARE, mage.cards.d.DeadeyeTracker.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Deadeye Tracker", "99s", Rarity.RARE, mage.cards.d.DeadeyeTracker.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Deathgorge Scavenger", "184p", Rarity.RARE, mage.cards.d.DeathgorgeScavenger.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Deathgorge Scavenger", "184s", Rarity.RARE, mage.cards.d.DeathgorgeScavenger.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Deeproot Champion", 185, Rarity.RARE, mage.cards.d.DeeprootChampion.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Deeproot Champion", "185p", Rarity.RARE, mage.cards.d.DeeprootChampion.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Deeproot Champion", "185s", Rarity.RARE, mage.cards.d.DeeprootChampion.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Dire Fleet Ravager", "104s", Rarity.MYTHIC, mage.cards.d.DireFleetRavager.class)); + cards.add(new SetCardInfo("Dowsing Dagger", "235s", Rarity.RARE, mage.cards.d.DowsingDagger.class)); + cards.add(new SetCardInfo("Dragonskull Summit", "252p", Rarity.RARE, mage.cards.d.DragonskullSummit.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Dragonskull Summit", "252s", Rarity.RARE, mage.cards.d.DragonskullSummit.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Dreamcaller Siren", "54s", Rarity.RARE, mage.cards.d.DreamcallerSiren.class)); + cards.add(new SetCardInfo("Drowned Catacomb", "253p", Rarity.RARE, mage.cards.d.DrownedCatacomb.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Drowned Catacomb", "253s", Rarity.RARE, mage.cards.d.DrownedCatacomb.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Emperor's Vanguard", "189s", Rarity.RARE, mage.cards.e.EmperorsVanguard.class)); + cards.add(new SetCardInfo("Entrancing Melody", "55p", Rarity.RARE, mage.cards.e.EntrancingMelody.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Entrancing Melody", "55s", Rarity.RARE, mage.cards.e.EntrancingMelody.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Fathom Fleet Captain", "106p", Rarity.RARE, mage.cards.f.FathomFleetCaptain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Fathom Fleet Captain", "106s", Rarity.RARE, mage.cards.f.FathomFleetCaptain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Fell Flagship", "238s", Rarity.RARE, mage.cards.f.FellFlagship.class)); + cards.add(new SetCardInfo("Fleet Swallower", "57s", Rarity.RARE, mage.cards.f.FleetSwallower.class)); + cards.add(new SetCardInfo("Gishath, Sun's Avatar", "222s", Rarity.MYTHIC, mage.cards.g.GishathSunsAvatar.class)); + cards.add(new SetCardInfo("Glacial Fortress", "255p", Rarity.RARE, mage.cards.g.GlacialFortress.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Glacial Fortress", "255s", Rarity.RARE, mage.cards.g.GlacialFortress.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Goring Ceratops", "13s", Rarity.RARE, mage.cards.g.GoringCeratops.class)); + cards.add(new SetCardInfo("Growing Rites of Itlimoc", "191s", Rarity.RARE, mage.cards.g.GrowingRitesOfItlimoc.class)); + cards.add(new SetCardInfo("Herald of Secret Streams", "59p", Rarity.RARE, mage.cards.h.HeraldOfSecretStreams.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Herald of Secret Streams", "59s", Rarity.RARE, mage.cards.h.HeraldOfSecretStreams.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Hostage Taker", "223s", Rarity.RARE, mage.cards.h.HostageTaker.class)); + cards.add(new SetCardInfo("Huatli, Warrior Poet", "224s", Rarity.MYTHIC, mage.cards.h.HuatliWarriorPoet.class)); + cards.add(new SetCardInfo("Itlimoc, Cradle of the Sun", "191s", Rarity.RARE, mage.cards.i.ItlimocCradleOfTheSun.class)); + cards.add(new SetCardInfo("Jace, Cunning Castaway", "60s", Rarity.MYTHIC, mage.cards.j.JaceCunningCastaway.class)); + cards.add(new SetCardInfo("Kinjalli's Sunwing", "19p", Rarity.RARE, mage.cards.k.KinjallisSunwing.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Kinjalli's Sunwing", "19s", Rarity.RARE, mage.cards.k.KinjallisSunwing.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Kopala, Warden of Waves", "61p", Rarity.RARE, mage.cards.k.KopalaWardenOfWaves.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Kopala, Warden of Waves", "61s", Rarity.RARE, mage.cards.k.KopalaWardenOfWaves.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Legion's Landing", "22s", Rarity.RARE, mage.cards.l.LegionsLanding.class)); + cards.add(new SetCardInfo("Lost Vale", "235s", Rarity.RARE, mage.cards.l.LostVale.class)); + cards.add(new SetCardInfo("Mavren Fein, Dusk Apostle", "24p", Rarity.RARE, mage.cards.m.MavrenFeinDuskApostle.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mavren Fein, Dusk Apostle", "24s", Rarity.RARE, mage.cards.m.MavrenFeinDuskApostle.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Old-Growth Dryads", "199s", Rarity.RARE, mage.cards.o.OldGrowthDryads.class)); + cards.add(new SetCardInfo("Overflowing Insight", "66s", Rarity.MYTHIC, mage.cards.o.OverflowingInsight.class)); + cards.add(new SetCardInfo("Priest of the Wakening Sun", "27s", Rarity.RARE, mage.cards.p.PriestOfTheWakeningSun.class)); + cards.add(new SetCardInfo("Primal Amulet", "243s", Rarity.RARE, mage.cards.p.PrimalAmulet.class)); + cards.add(new SetCardInfo("Primal Wellspring", "243s", Rarity.RARE, mage.cards.p.PrimalWellspring.class)); + cards.add(new SetCardInfo("Rampaging Ferocidon", "154s", Rarity.RARE, mage.cards.r.RampagingFerocidon.class)); + cards.add(new SetCardInfo("Regisaur Alpha", "227p", Rarity.RARE, mage.cards.r.RegisaurAlpha.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Regisaur Alpha", "227s", Rarity.RARE, mage.cards.r.RegisaurAlpha.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Repeating Barrage", "156s", Rarity.RARE, mage.cards.r.RepeatingBarrage.class)); + cards.add(new SetCardInfo("Revel in Riches", "117p", Rarity.RARE, mage.cards.r.RevelInRiches.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Revel in Riches", "117s", Rarity.RARE, mage.cards.r.RevelInRiches.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Ripjaw Raptor", "203p", Rarity.RARE, mage.cards.r.RipjawRaptor.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Ripjaw Raptor", "203s", Rarity.RARE, mage.cards.r.RipjawRaptor.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("River's Rebuke", "71p", Rarity.RARE, mage.cards.r.RiversRebuke.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("River's Rebuke", "71s", Rarity.RARE, mage.cards.r.RiversRebuke.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Rootbound Crag", "256p", Rarity.RARE, mage.cards.r.RootboundCrag.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Rootbound Crag", "256s", Rarity.RARE, mage.cards.r.RootboundCrag.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Rowdy Crew", "159s", Rarity.MYTHIC, mage.cards.r.RowdyCrew.class)); + cards.add(new SetCardInfo("Ruin Raider", "118p", Rarity.RARE, mage.cards.r.RuinRaider.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Ruin Raider", "118s", Rarity.RARE, mage.cards.r.RuinRaider.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Sanctum Seeker", "120p", Rarity.RARE, mage.cards.s.SanctumSeeker.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Sanctum Seeker", "120s", Rarity.RARE, mage.cards.s.SanctumSeeker.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Sanguine Sacrament", "33s", Rarity.RARE, mage.cards.s.SanguineSacrament.class)); + cards.add(new SetCardInfo("Search for Azcanta", "74s", Rarity.RARE, mage.cards.s.SearchForAzcanta.class)); + cards.add(new SetCardInfo("Settle the Wreckage", "34p", Rarity.RARE, mage.cards.s.SettleTheWreckage.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Settle the Wreckage", "34s", Rarity.RARE, mage.cards.s.SettleTheWreckage.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Shadowed Caravel", "246s", Rarity.RARE, mage.cards.s.ShadowedCaravel.class)); + cards.add(new SetCardInfo("Shapers' Sanctuary", "206p", Rarity.RARE, mage.cards.s.ShapersSanctuary.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Shapers' Sanctuary", "206s", Rarity.RARE, mage.cards.s.ShapersSanctuary.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Sorcerous Spyglass", "248p", Rarity.RARE, mage.cards.s.SorcerousSpyglass.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Sorcerous Spyglass", "248s", Rarity.RARE, mage.cards.s.SorcerousSpyglass.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Spell Swindle", "82p", Rarity.RARE, mage.cards.s.SpellSwindle.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Spell Swindle", "82s", Rarity.RARE, mage.cards.s.SpellSwindle.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Spires of Orazca", "249s", Rarity.RARE, mage.cards.s.SpiresOfOrazca.class)); + cards.add(new SetCardInfo("Spitfire Bastion", "173s", Rarity.RARE, mage.cards.s.SpitfireBastion.class)); + cards.add(new SetCardInfo("Star of Extinction", "161p", Rarity.MYTHIC, mage.cards.s.StarOfExtinction.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Star of Extinction", "161s", Rarity.MYTHIC, mage.cards.s.StarOfExtinction.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Sunbird's Invocation", "165p", Rarity.RARE, mage.cards.s.SunbirdsInvocation.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Sunbird's Invocation", "165s", Rarity.RARE, mage.cards.s.SunbirdsInvocation.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Sunpetal Grove", "257p", Rarity.RARE, mage.cards.s.SunpetalGrove.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Sunpetal Grove", "257s", Rarity.RARE, mage.cards.s.SunpetalGrove.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Sword-Point Diplomacy", "126p", Rarity.RARE, mage.cards.s.SwordPointDiplomacy.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Sword-Point Diplomacy", "126s", Rarity.RARE, mage.cards.s.SwordPointDiplomacy.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Temple of Aclazotz", "90s", Rarity.RARE, mage.cards.t.TempleOfAclazotz.class)); + cards.add(new SetCardInfo("Thaumatic Compass", "249s", Rarity.RARE, mage.cards.t.ThaumaticCompass.class)); + cards.add(new SetCardInfo("Tilonalli's Skinshifter", "170s", Rarity.RARE, mage.cards.t.TilonallisSkinshifter.class)); + cards.add(new SetCardInfo("Tishana, Voice of Thunder", "230s", Rarity.MYTHIC, mage.cards.t.TishanaVoiceOfThunder.class)); + cards.add(new SetCardInfo("Tocatli Honor Guard", "42p", Rarity.RARE, mage.cards.t.TocatliHonorGuard.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Tocatli Honor Guard", "42s", Rarity.RARE, mage.cards.t.TocatliHonorGuard.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Treasure Cove", "250s", Rarity.RARE, mage.cards.t.TreasureCove.class)); + cards.add(new SetCardInfo("Treasure Map", "250s", Rarity.RARE, mage.cards.t.TreasureMap.class)); + cards.add(new SetCardInfo("Unclaimed Territory", 258, Rarity.UNCOMMON, mage.cards.u.UnclaimedTerritory.class)); + cards.add(new SetCardInfo("Vance's Blasting Cannons", "173s", Rarity.RARE, mage.cards.v.VancesBlastingCannons.class)); + cards.add(new SetCardInfo("Vanquisher's Banner", "251p", Rarity.RARE, mage.cards.v.VanquishersBanner.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Vanquisher's Banner", "251s", Rarity.RARE, mage.cards.v.VanquishersBanner.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Verdant Sun's Avatar", "213p", Rarity.RARE, mage.cards.v.VerdantSunsAvatar.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Verdant Sun's Avatar", "213s", Rarity.RARE, mage.cards.v.VerdantSunsAvatar.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Vona, Butcher of Magan", "231s", Rarity.MYTHIC, mage.cards.v.VonaButcherOfMagan.class)); + cards.add(new SetCardInfo("Vraska's Contempt", "129p", Rarity.RARE, mage.cards.v.VraskasContempt.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Vraska's Contempt", "129s", Rarity.RARE, mage.cards.v.VraskasContempt.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Vraska, Relic Seeker", "232p", Rarity.MYTHIC, mage.cards.v.VraskaRelicSeeker.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Vraska, Relic Seeker", "232s", Rarity.MYTHIC, mage.cards.v.VraskaRelicSeeker.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Wakening Sun's Avatar", "44s", Rarity.MYTHIC, mage.cards.w.WakeningSunsAvatar.class)); + cards.add(new SetCardInfo("Waker of the Wilds", "215s", Rarity.RARE, mage.cards.w.WakerOfTheWilds.class)); + cards.add(new SetCardInfo("Walk the Plank", 130, Rarity.UNCOMMON, mage.cards.w.WalkThePlank.class)); + } +} From 51dad5fb0696ef5070011cbb58e9399eab0a88cb Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Mon, 16 Mar 2020 15:23:58 +0100 Subject: [PATCH 106/182] Added the Rivals of Ixalan Promos (PRIX) set. --- .../src/mage/sets/RivalsOfIxalanPromos.java | 127 ++++++++++++++++++ 1 file changed, 127 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/RivalsOfIxalanPromos.java diff --git a/Mage.Sets/src/mage/sets/RivalsOfIxalanPromos.java b/Mage.Sets/src/mage/sets/RivalsOfIxalanPromos.java new file mode 100644 index 00000000000..1fa372d0e88 --- /dev/null +++ b/Mage.Sets/src/mage/sets/RivalsOfIxalanPromos.java @@ -0,0 +1,127 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/prix + */ +public class RivalsOfIxalanPromos extends ExpansionSet { + + private static final RivalsOfIxalanPromos instance = new RivalsOfIxalanPromos(); + + public static RivalsOfIxalanPromos getInstance() { + return instance; + } + + private RivalsOfIxalanPromos() { + super("Rivals of Ixalan Promos", "PRIX", ExpansionSet.buildDate(2018, 1, 19), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Admiral's Order", "31p", Rarity.RARE, mage.cards.a.AdmiralsOrder.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Admiral's Order", "31s", Rarity.RARE, mage.cards.a.AdmiralsOrder.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Angrath, the Flame-Chained", "152s", Rarity.MYTHIC, mage.cards.a.AngrathTheFlameChained.class)); + cards.add(new SetCardInfo("Arch of Orazca", "185p", Rarity.RARE, mage.cards.a.ArchOfOrazca.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Arch of Orazca", "185s", Rarity.RARE, mage.cards.a.ArchOfOrazca.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Atzal, Cave of Eternity", "160s", Rarity.RARE, mage.cards.a.AtzalCaveOfEternity.class)); + cards.add(new SetCardInfo("Awakened Amalgam", "175s", Rarity.RARE, mage.cards.a.AwakenedAmalgam.class)); + cards.add(new SetCardInfo("Azor's Gateway", "176s", Rarity.MYTHIC, mage.cards.a.AzorsGateway.class)); + cards.add(new SetCardInfo("Azor, the Lawbringer", "154s", Rarity.MYTHIC, mage.cards.a.AzorTheLawbringer.class)); + cards.add(new SetCardInfo("Bishop of Binding", "2s", Rarity.RARE, mage.cards.b.BishopOfBinding.class)); + cards.add(new SetCardInfo("Blood Sun", "92p", Rarity.RARE, mage.cards.b.BloodSun.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Blood Sun", "92s", Rarity.RARE, mage.cards.b.BloodSun.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Brass's Bounty", 94, Rarity.RARE, mage.cards.b.BrasssBounty.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Brass's Bounty", "94s", Rarity.RARE, mage.cards.b.BrasssBounty.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Captain's Hook", 177, Rarity.RARE, mage.cards.c.CaptainsHook.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Captain's Hook", "177s", Rarity.RARE, mage.cards.c.CaptainsHook.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Champion of Dusk", "64s", Rarity.RARE, mage.cards.c.ChampionOfDusk.class)); + cards.add(new SetCardInfo("Crafty Cutpurse", "33s", Rarity.RARE, mage.cards.c.CraftyCutpurse.class)); + cards.add(new SetCardInfo("Dead Man's Chest", "66s", Rarity.RARE, mage.cards.d.DeadMansChest.class)); + cards.add(new SetCardInfo("Deeproot Elite", "127p", Rarity.RARE, mage.cards.d.DeeprootElite.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Deeproot Elite", "127s", Rarity.RARE, mage.cards.d.DeeprootElite.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Dire Fleet Daredevil", "99p", Rarity.RARE, mage.cards.d.DireFleetDaredevil.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Dire Fleet Daredevil", "99s", Rarity.RARE, mage.cards.d.DireFleetDaredevil.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Dire Fleet Poisoner", "68p", Rarity.RARE, mage.cards.d.DireFleetPoisoner.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Dire Fleet Poisoner", "68s", Rarity.RARE, mage.cards.d.DireFleetPoisoner.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Elenda, the Dusk Rose", "157s", Rarity.MYTHIC, mage.cards.e.ElendaTheDuskRose.class)); + cards.add(new SetCardInfo("Etali, Primal Storm", "100p", Rarity.RARE, mage.cards.e.EtaliPrimalStorm.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Etali, Primal Storm", "100s", Rarity.RARE, mage.cards.e.EtaliPrimalStorm.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Evolving Wilds", 186, Rarity.COMMON, mage.cards.e.EvolvingWilds.class)); + cards.add(new SetCardInfo("Form of the Dinosaur", "103s", Rarity.RARE, mage.cards.f.FormOfTheDinosaur.class)); + cards.add(new SetCardInfo("Ghalta, Primal Hunger", 130, Rarity.RARE, mage.cards.g.GhaltaPrimalHunger.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Ghalta, Primal Hunger", "130p", Rarity.RARE, mage.cards.g.GhaltaPrimalHunger.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Ghalta, Primal Hunger", "130s", Rarity.RARE, mage.cards.g.GhaltaPrimalHunger.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Gold-Forge Garrison", "179s", Rarity.RARE, mage.cards.g.GoldForgeGarrison.class)); + cards.add(new SetCardInfo("Golden Guardian", "179s", Rarity.RARE, mage.cards.g.GoldenGuardian.class)); + cards.add(new SetCardInfo("Hadana's Climb", "158s", Rarity.RARE, mage.cards.h.HadanasClimb.class)); + cards.add(new SetCardInfo("Huatli, Radiant Champion", "159s", Rarity.MYTHIC, mage.cards.h.HuatliRadiantChampion.class)); + cards.add(new SetCardInfo("Induced Amnesia", "40s", Rarity.RARE, mage.cards.i.InducedAmnesia.class)); + cards.add(new SetCardInfo("Jadelight Ranger", "136p", Rarity.RARE, mage.cards.j.JadelightRanger.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Jadelight Ranger", "136s", Rarity.RARE, mage.cards.j.JadelightRanger.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Journey to Eternity", "160s", Rarity.RARE, mage.cards.j.JourneyToEternity.class)); + cards.add(new SetCardInfo("Kumena's Awakening", "42s", Rarity.RARE, mage.cards.k.KumenasAwakening.class)); + cards.add(new SetCardInfo("Kumena, Tyrant of Orazca", "162s", Rarity.MYTHIC, mage.cards.k.KumenaTyrantOfOrazca.class)); + cards.add(new SetCardInfo("Mastermind's Acquisition", "77p", Rarity.RARE, mage.cards.m.MastermindsAcquisition.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mastermind's Acquisition", "77s", Rarity.RARE, mage.cards.m.MastermindsAcquisition.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Metzali, Tower of Triumph", "165s", Rarity.RARE, mage.cards.m.MetzaliTowerOfTriumph.class)); + cards.add(new SetCardInfo("Nezahal, Primal Tide", "45p", Rarity.RARE, mage.cards.n.NezahalPrimalTide.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Nezahal, Primal Tide", "45s", Rarity.RARE, mage.cards.n.NezahalPrimalTide.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Paladin of Atonement", "16s", Rarity.RARE, mage.cards.p.PaladinOfAtonement.class)); + cards.add(new SetCardInfo("Path of Discovery", "142p", Rarity.RARE, mage.cards.p.PathOfDiscovery.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Path of Discovery", "142s", Rarity.RARE, mage.cards.p.PathOfDiscovery.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Path of Mettle", "165s", Rarity.RARE, mage.cards.p.PathOfMettle.class)); + cards.add(new SetCardInfo("Polyraptor", "144s", Rarity.MYTHIC, mage.cards.p.Polyraptor.class)); + cards.add(new SetCardInfo("Profane Procession", "166s", Rarity.RARE, mage.cards.p.ProfaneProcession.class)); + cards.add(new SetCardInfo("Protean Raider", "167s", Rarity.RARE, mage.cards.p.ProteanRaider.class)); + cards.add(new SetCardInfo("Radiant Destiny", "18p", Rarity.RARE, mage.cards.r.RadiantDestiny.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Radiant Destiny", "18s", Rarity.RARE, mage.cards.r.RadiantDestiny.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Rekindling Phoenix", "111p", Rarity.MYTHIC, mage.cards.r.RekindlingPhoenix.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Rekindling Phoenix", "111s", Rarity.MYTHIC, mage.cards.r.RekindlingPhoenix.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Release to the Wind", "46s", Rarity.RARE, mage.cards.r.ReleaseToTheWind.class)); + cards.add(new SetCardInfo("Sanctum of the Sun", "176s", Rarity.MYTHIC, mage.cards.s.SanctumOfTheSun.class)); + cards.add(new SetCardInfo("Seafloor Oracle", "51p", Rarity.RARE, mage.cards.s.SeafloorOracle.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Seafloor Oracle", "51s", Rarity.RARE, mage.cards.s.SeafloorOracle.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Siegehorn Ceratops", "171p", Rarity.RARE, mage.cards.s.SiegehornCeratops.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Siegehorn Ceratops", "171s", Rarity.RARE, mage.cards.s.SiegehornCeratops.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Silent Gravestone", "182p", Rarity.RARE, mage.cards.s.SilentGravestone.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Silent Gravestone", "182s", Rarity.RARE, mage.cards.s.SilentGravestone.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Silverclad Ferocidons", "115p", Rarity.RARE, mage.cards.s.SilvercladFerocidons.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Silverclad Ferocidons", "115s", Rarity.RARE, mage.cards.s.SilvercladFerocidons.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Silvergill Adept", 53, Rarity.UNCOMMON, mage.cards.s.SilvergillAdept.class)); + cards.add(new SetCardInfo("Slaughter the Strong", "22p", Rarity.RARE, mage.cards.s.SlaughterTheStrong.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Slaughter the Strong", "22s", Rarity.RARE, mage.cards.s.SlaughterTheStrong.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Sphinx's Decree", "24s", Rarity.RARE, mage.cards.s.SphinxsDecree.class)); + cards.add(new SetCardInfo("Storm the Vault", "173s", Rarity.RARE, mage.cards.s.StormTheVault.class)); + cards.add(new SetCardInfo("Temple Altisaur", "28s", Rarity.RARE, mage.cards.t.TempleAltisaur.class)); + cards.add(new SetCardInfo("Tendershoot Dryad", "147p", Rarity.RARE, mage.cards.t.TendershootDryad.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Tendershoot Dryad", "147s", Rarity.RARE, mage.cards.t.TendershootDryad.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Tetzimoc, Primal Death", "86p", Rarity.RARE, mage.cards.t.TetzimocPrimalDeath.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Tetzimoc, Primal Death", "86s", Rarity.RARE, mage.cards.t.TetzimocPrimalDeath.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("The Immortal Sun", "180p", Rarity.MYTHIC, mage.cards.t.TheImmortalSun.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("The Immortal Sun", "180s", Rarity.MYTHIC, mage.cards.t.TheImmortalSun.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Tilonalli's Summoner", "121p", Rarity.RARE, mage.cards.t.TilonallisSummoner.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Tilonalli's Summoner", "121s", Rarity.RARE, mage.cards.t.TilonallisSummoner.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Timestream Navigator", "59s", Rarity.MYTHIC, mage.cards.t.TimestreamNavigator.class)); + cards.add(new SetCardInfo("Tomb of the Dusk Rose", "166s", Rarity.RARE, mage.cards.t.TombOfTheDuskRose.class)); + cards.add(new SetCardInfo("Tomb Robber", "87s", Rarity.RARE, mage.cards.t.TombRobber.class)); + cards.add(new SetCardInfo("Trapjaw Tyrant", "29s", Rarity.MYTHIC, mage.cards.t.TrapjawTyrant.class)); + cards.add(new SetCardInfo("Twilight Prophet", "88s", Rarity.MYTHIC, mage.cards.t.TwilightProphet.class)); + cards.add(new SetCardInfo("Vault of Catlacan", "173s", Rarity.RARE, mage.cards.v.VaultOfCatlacan.class)); + cards.add(new SetCardInfo("Vona's Hunger", "90p", Rarity.RARE, mage.cards.v.VonasHunger.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Vona's Hunger", "90s", Rarity.RARE, mage.cards.v.VonasHunger.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Warkite Marauder", "60p", Rarity.RARE, mage.cards.w.WarkiteMarauder.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Warkite Marauder", "60s", Rarity.RARE, mage.cards.w.WarkiteMarauder.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Wayward Swordtooth", "150p", Rarity.RARE, mage.cards.w.WaywardSwordtooth.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Wayward Swordtooth", "150s", Rarity.RARE, mage.cards.w.WaywardSwordtooth.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Winged Temple of Orazca", "158s", Rarity.RARE, mage.cards.w.WingedTempleOfOrazca.class)); + cards.add(new SetCardInfo("World Shaper", "151p", Rarity.RARE, mage.cards.w.WorldShaper.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("World Shaper", "151s", Rarity.RARE, mage.cards.w.WorldShaper.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Zacama, Primal Calamity", "174p", Rarity.MYTHIC, mage.cards.z.ZacamaPrimalCalamity.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Zacama, Primal Calamity", "174s", Rarity.MYTHIC, mage.cards.z.ZacamaPrimalCalamity.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Zetalpa, Primal Dawn", "30p", Rarity.RARE, mage.cards.z.ZetalpaPrimalDawn.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Zetalpa, Primal Dawn", "30s", Rarity.RARE, mage.cards.z.ZetalpaPrimalDawn.class, NON_FULL_USE_VARIOUS)); + + } +} From 73c4ea558d6a2d6efc2de6e6fee51132b99ab5dc Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Mon, 16 Mar 2020 15:24:46 +0100 Subject: [PATCH 107/182] Added the Nationals Promos (PNAT) set. --- Mage.Sets/src/mage/sets/NationalsPromos.java | 25 ++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/NationalsPromos.java diff --git a/Mage.Sets/src/mage/sets/NationalsPromos.java b/Mage.Sets/src/mage/sets/NationalsPromos.java new file mode 100644 index 00000000000..eb69a7d35be --- /dev/null +++ b/Mage.Sets/src/mage/sets/NationalsPromos.java @@ -0,0 +1,25 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/pnat + */ +public class NationalsPromos extends ExpansionSet { + + private static final NationalsPromos instance = new NationalsPromos(); + + public static NationalsPromos getInstance() { + return instance; + } + + private NationalsPromos() { + super("Nationals Promos", "PNAT", ExpansionSet.buildDate(2018, 1, 25), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Flooded Strand", 2018, Rarity.RARE, mage.cards.f.FloodedStrand.class)); + } +} From cafe355b357e750dad522f7f42c3e867a0ba9b17 Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Mon, 16 Mar 2020 15:29:09 +0100 Subject: [PATCH 108/182] Added the Dominaria Promos (PDOM) set. --- Mage.Sets/src/mage/sets/DominariaPromos.java | 143 +++++++++++++++++++ 1 file changed, 143 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/DominariaPromos.java diff --git a/Mage.Sets/src/mage/sets/DominariaPromos.java b/Mage.Sets/src/mage/sets/DominariaPromos.java new file mode 100644 index 00000000000..57afb2fb3c5 --- /dev/null +++ b/Mage.Sets/src/mage/sets/DominariaPromos.java @@ -0,0 +1,143 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/pdom + */ +public class DominariaPromos extends ExpansionSet { + + private static final DominariaPromos instance = new DominariaPromos(); + + public static DominariaPromos getInstance() { + return instance; + } + + private DominariaPromos() { + super("Dominaria Promos", "PDOM", ExpansionSet.buildDate(2018, 4, 27), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Adeliz, the Cinder Wind", "190s", Rarity.UNCOMMON, mage.cards.a.AdelizTheCinderWind.class)); + cards.add(new SetCardInfo("Arvad the Cursed", "191s", Rarity.UNCOMMON, mage.cards.a.ArvadTheCursed.class)); + cards.add(new SetCardInfo("Aryel, Knight of Windgrace", "192s", Rarity.RARE, mage.cards.a.AryelKnightOfWindgrace.class)); + cards.add(new SetCardInfo("Baird, Steward of Argive", "4s", Rarity.UNCOMMON, mage.cards.b.BairdStewardOfArgive.class)); + cards.add(new SetCardInfo("Benalish Marshal", "6p", Rarity.RARE, mage.cards.b.BenalishMarshal.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Benalish Marshal", "6s", Rarity.RARE, mage.cards.b.BenalishMarshal.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Blackblade Reforged", "211p", Rarity.RARE, mage.cards.b.BlackbladeReforged.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Blackblade Reforged", "211s", Rarity.RARE, mage.cards.b.BlackbladeReforged.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Cabal Stronghold", "238p", Rarity.RARE, mage.cards.c.CabalStronghold.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Cabal Stronghold", "238s", Rarity.RARE, mage.cards.c.CabalStronghold.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Cast Down", 81, Rarity.UNCOMMON, mage.cards.c.CastDown.class)); + cards.add(new SetCardInfo("Clifftop Retreat", "239p", Rarity.RARE, mage.cards.c.ClifftopRetreat.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Clifftop Retreat", "239s", Rarity.RARE, mage.cards.c.ClifftopRetreat.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Danitha Capashen, Paragon", "12s", Rarity.UNCOMMON, mage.cards.d.DanithaCapashenParagon.class)); + cards.add(new SetCardInfo("Darigaaz Reincarnated", "193s", Rarity.MYTHIC, mage.cards.d.DarigaazReincarnated.class)); + cards.add(new SetCardInfo("Daring Archaeologist", "13s", Rarity.RARE, mage.cards.d.DaringArchaeologist.class)); + cards.add(new SetCardInfo("Demonlord Belzenlok", "86s", Rarity.MYTHIC, mage.cards.d.DemonlordBelzenlok.class)); + cards.add(new SetCardInfo("Dread Shade", "88s", Rarity.RARE, mage.cards.d.DreadShade.class)); + cards.add(new SetCardInfo("Evra, Halcyon Witness", "16s", Rarity.RARE, mage.cards.e.EvraHalcyonWitness.class)); + cards.add(new SetCardInfo("Fall of the Thran", "18s", Rarity.RARE, mage.cards.f.FallOfTheThran.class)); + cards.add(new SetCardInfo("Forebear's Blade", "214p", Rarity.RARE, mage.cards.f.ForebearsBlade.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forebear's Blade", "214s", Rarity.RARE, mage.cards.f.ForebearsBlade.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Garna, the Bloodflame", "194s", Rarity.UNCOMMON, mage.cards.g.GarnaTheBloodflame.class)); + cards.add(new SetCardInfo("Gilded Lotus", "215p", Rarity.RARE, mage.cards.g.GildedLotus.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Gilded Lotus", "215s", Rarity.RARE, mage.cards.g.GildedLotus.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Goblin Chainwhirler", "129p", Rarity.RARE, mage.cards.g.GoblinChainwhirler.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Goblin Chainwhirler", "129s", Rarity.RARE, mage.cards.g.GoblinChainwhirler.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Grand Warlord Radha", "195s", Rarity.RARE, mage.cards.g.GrandWarlordRadha.class)); + cards.add(new SetCardInfo("Grunn, the Lonely King", "165s", Rarity.UNCOMMON, mage.cards.g.GrunnTheLonelyKing.class)); + cards.add(new SetCardInfo("Hallar, the Firefletcher", "196s", Rarity.UNCOMMON, mage.cards.h.HallarTheFirefletcher.class)); + cards.add(new SetCardInfo("Haphazard Bombardment", "131s", Rarity.RARE, mage.cards.h.HaphazardBombardment.class)); + cards.add(new SetCardInfo("Helm of the Host", "217p", Rarity.RARE, mage.cards.h.HelmOfTheHost.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Helm of the Host", "217s", Rarity.RARE, mage.cards.h.HelmOfTheHost.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Hinterland Harbor", "240p", Rarity.RARE, mage.cards.h.HinterlandHarbor.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Hinterland Harbor", "240s", Rarity.RARE, mage.cards.h.HinterlandHarbor.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("History of Benalia", "21p", Rarity.MYTHIC, mage.cards.h.HistoryOfBenalia.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("History of Benalia", "21s", Rarity.MYTHIC, mage.cards.h.HistoryOfBenalia.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Isolated Chapel", "241p", Rarity.RARE, mage.cards.i.IsolatedChapel.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Isolated Chapel", "241s", Rarity.RARE, mage.cards.i.IsolatedChapel.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Jaya Ballard", "132s", Rarity.MYTHIC, mage.cards.j.JayaBallard.class)); + cards.add(new SetCardInfo("Jaya's Immolating Inferno", "133s", Rarity.RARE, mage.cards.j.JayasImmolatingInferno.class)); + cards.add(new SetCardInfo("Jhoira, Weatherlight Captain", "197s", Rarity.MYTHIC, mage.cards.j.JhoiraWeatherlightCaptain.class)); + cards.add(new SetCardInfo("Jodah, Archmage Eternal", "198s", Rarity.RARE, mage.cards.j.JodahArchmageEternal.class)); + cards.add(new SetCardInfo("Josu Vess, Lich Knight", "95s", Rarity.RARE, mage.cards.j.JosuVessLichKnight.class)); + cards.add(new SetCardInfo("Kamahl's Druidic Vow", "166s", Rarity.RARE, mage.cards.k.KamahlsDruidicVow.class)); + cards.add(new SetCardInfo("Karn's Temporal Sundering", "55s", Rarity.RARE, mage.cards.k.KarnsTemporalSundering.class)); + cards.add(new SetCardInfo("Karn, Scion of Urza", "1p", Rarity.MYTHIC, mage.cards.k.KarnScionOfUrza.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Karn, Scion of Urza", "1s", Rarity.MYTHIC, mage.cards.k.KarnScionOfUrza.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Kazarov, Sengir Pureblood", "96s", Rarity.RARE, mage.cards.k.KazarovSengirPureblood.class)); + cards.add(new SetCardInfo("Kwende, Pride of Femeref", "25s", Rarity.UNCOMMON, mage.cards.k.KwendePrideOfFemeref.class)); + cards.add(new SetCardInfo("Lich's Mastery", "98s", Rarity.RARE, mage.cards.l.LichsMastery.class)); + cards.add(new SetCardInfo("Llanowar Elves", 168, Rarity.COMMON, mage.cards.l.LlanowarElves.class)); + cards.add(new SetCardInfo("Lyra Dawnbringer", "26p", Rarity.MYTHIC, mage.cards.l.LyraDawnbringer.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Lyra Dawnbringer", "26s", Rarity.MYTHIC, mage.cards.l.LyraDawnbringer.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Marwyn, the Nurturer", "172p", Rarity.RARE, mage.cards.m.MarwynTheNurturer.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Marwyn, the Nurturer", "172s", Rarity.RARE, mage.cards.m.MarwynTheNurturer.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mishra's Self-Replicator", "223s", Rarity.RARE, mage.cards.m.MishrasSelfReplicator.class)); + cards.add(new SetCardInfo("Mox Amber", "224s", Rarity.MYTHIC, mage.cards.m.MoxAmber.class)); + cards.add(new SetCardInfo("Muldrotha, the Gravetide", "199s", Rarity.MYTHIC, mage.cards.m.MuldrothaTheGravetide.class)); + cards.add(new SetCardInfo("Multani, Yavimaya's Avatar", "174s", Rarity.MYTHIC, mage.cards.m.MultaniYavimayasAvatar.class)); + cards.add(new SetCardInfo("Naban, Dean of Iteration", "58s", Rarity.RARE, mage.cards.n.NabanDeanOfIteration.class)); + cards.add(new SetCardInfo("Naru Meha, Master Wizard", "59s", Rarity.MYTHIC, mage.cards.n.NaruMehaMasterWizard.class)); + cards.add(new SetCardInfo("Oath of Teferi", "200s", Rarity.RARE, mage.cards.o.OathOfTeferi.class)); + cards.add(new SetCardInfo("Opt", 60, Rarity.COMMON, mage.cards.o.Opt.class)); + cards.add(new SetCardInfo("Phyrexian Scriptures", "100s", Rarity.MYTHIC, mage.cards.p.PhyrexianScriptures.class)); + cards.add(new SetCardInfo("Precognition Field", "61s", Rarity.RARE, mage.cards.p.PrecognitionField.class)); + cards.add(new SetCardInfo("Primevals' Glorious Rebirth", "201s", Rarity.RARE, mage.cards.p.PrimevalsGloriousRebirth.class)); + cards.add(new SetCardInfo("Raff Capashen, Ship's Mage", "202s", Rarity.UNCOMMON, mage.cards.r.RaffCapashenShipsMage.class)); + cards.add(new SetCardInfo("Rite of Belzenlok", "102s", Rarity.RARE, mage.cards.r.RiteOfBelzenlok.class)); + cards.add(new SetCardInfo("Rona, Disciple of Gix", "203s", Rarity.UNCOMMON, mage.cards.r.RonaDiscipleOfGix.class)); + // Japanese-only printing + //cards.add(new SetCardInfo("Serra Angel", "33c", Rarity.UNCOMMON, mage.cards.s.SerraAngel.class)); + cards.add(new SetCardInfo("Shalai, Voice of Plenty", "35p", Rarity.RARE, mage.cards.s.ShalaiVoiceOfPlenty.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Shalai, Voice of Plenty", "35s", Rarity.RARE, mage.cards.s.ShalaiVoiceOfPlenty.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Shanna, Sisay's Legacy", 204, Rarity.UNCOMMON, mage.cards.s.ShannaSisaysLegacy.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Shanna, Sisay's Legacy", "204s", Rarity.UNCOMMON, mage.cards.s.ShannaSisaysLegacy.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Siege-Gang Commander", "143p", Rarity.RARE, mage.cards.s.SiegeGangCommander.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Siege-Gang Commander", "143s", Rarity.RARE, mage.cards.s.SiegeGangCommander.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Slimefoot, the Stowaway", "205s", Rarity.UNCOMMON, mage.cards.s.SlimefootTheStowaway.class)); + cards.add(new SetCardInfo("Slinn Voda, the Rising Deep", "66s", Rarity.UNCOMMON, mage.cards.s.SlinnVodaTheRisingDeep.class)); + cards.add(new SetCardInfo("Squee, the Immortal", "146p", Rarity.RARE, mage.cards.s.SqueeTheImmortal.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Squee, the Immortal", "146s", Rarity.RARE, mage.cards.s.SqueeTheImmortal.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Steel Leaf Champion", 182, Rarity.RARE, mage.cards.s.SteelLeafChampion.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Steel Leaf Champion", "182p", Rarity.RARE, mage.cards.s.SteelLeafChampion.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Steel Leaf Champion", "182s", Rarity.RARE, mage.cards.s.SteelLeafChampion.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Sulfur Falls", "247p", Rarity.RARE, mage.cards.s.SulfurFalls.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Sulfur Falls", "247s", Rarity.RARE, mage.cards.s.SulfurFalls.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Sylvan Awakening", "183s", Rarity.RARE, mage.cards.s.SylvanAwakening.class)); + cards.add(new SetCardInfo("Tatyova, Benthic Druid", "206s", Rarity.UNCOMMON, mage.cards.t.TatyovaBenthicDruid.class)); + cards.add(new SetCardInfo("Teferi, Hero of Dominaria", "207s", Rarity.MYTHIC, mage.cards.t.TeferiHeroOfDominaria.class)); + cards.add(new SetCardInfo("Tempest Djinn", "68p", Rarity.RARE, mage.cards.t.TempestDjinn.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Tempest Djinn", "68s", Rarity.RARE, mage.cards.t.TempestDjinn.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Territorial Allosaurus", "184s", Rarity.RARE, mage.cards.t.TerritorialAllosaurus.class)); + cards.add(new SetCardInfo("Teshar, Ancestor's Apostle", "36s", Rarity.RARE, mage.cards.t.TesharAncestorsApostle.class)); + cards.add(new SetCardInfo("Tetsuko Umezawa, Fugitive", "69s", Rarity.UNCOMMON, mage.cards.t.TetsukoUmezawaFugitive.class)); + cards.add(new SetCardInfo("The Antiquities War", "42p", Rarity.RARE, mage.cards.t.TheAntiquitiesWar.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("The Antiquities War", "42s", Rarity.RARE, mage.cards.t.TheAntiquitiesWar.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("The First Eruption", "122s", Rarity.RARE, mage.cards.t.TheFirstEruption.class)); + cards.add(new SetCardInfo("The Mending of Dominaria", "173s", Rarity.RARE, mage.cards.t.TheMendingOfDominaria.class)); + cards.add(new SetCardInfo("The Mirari Conjecture", "57s", Rarity.RARE, mage.cards.t.TheMirariConjecture.class)); + cards.add(new SetCardInfo("Thran Temporal Gateway", "233s", Rarity.RARE, mage.cards.t.ThranTemporalGateway.class)); + cards.add(new SetCardInfo("Tiana, Ship's Caretaker", "208s", Rarity.UNCOMMON, mage.cards.t.TianaShipsCaretaker.class)); + cards.add(new SetCardInfo("Torgaar, Famine Incarnate", "108s", Rarity.RARE, mage.cards.t.TorgaarFamineIncarnate.class)); + cards.add(new SetCardInfo("Traxos, Scourge of Kroog", "234s", Rarity.RARE, mage.cards.t.TraxosScourgeOfKroog.class)); + cards.add(new SetCardInfo("Two-Headed Giant", "147s", Rarity.RARE, mage.cards.t.TwoHeadedGiant.class)); + cards.add(new SetCardInfo("Urgoros, the Empty One", "109s", Rarity.UNCOMMON, mage.cards.u.UrgorosTheEmptyOne.class)); + cards.add(new SetCardInfo("Urza's Ruinous Blast", "39s", Rarity.RARE, mage.cards.u.UrzasRuinousBlast.class)); + cards.add(new SetCardInfo("Valduk, Keeper of the Flame", "148s", Rarity.UNCOMMON, mage.cards.v.ValdukKeeperOfTheFlame.class)); + cards.add(new SetCardInfo("Verdant Force", "187s", Rarity.RARE, mage.cards.v.VerdantForce.class)); + cards.add(new SetCardInfo("Verix Bladewing", "149s", Rarity.MYTHIC, mage.cards.v.VerixBladewing.class)); + cards.add(new SetCardInfo("Weatherlight", "237s", Rarity.MYTHIC, mage.cards.w.Weatherlight.class)); + cards.add(new SetCardInfo("Whisper, Blood Liturgist", "111s", Rarity.UNCOMMON, mage.cards.w.WhisperBloodLiturgist.class)); + cards.add(new SetCardInfo("Woodland Cemetery", "248p", Rarity.RARE, mage.cards.w.WoodlandCemetery.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Woodland Cemetery", "248s", Rarity.RARE, mage.cards.w.WoodlandCemetery.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Yargle, Glutton of Urborg", "113s", Rarity.UNCOMMON, mage.cards.y.YargleGluttonOfUrborg.class)); + cards.add(new SetCardInfo("Yawgmoth's Vile Offering", "114s", Rarity.RARE, mage.cards.y.YawgmothsVileOffering.class)); + cards.add(new SetCardInfo("Zahid, Djinn of the Lamp", 76, Rarity.RARE, mage.cards.z.ZahidDjinnOfTheLamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Zahid, Djinn of the Lamp", "76s", Rarity.RARE, mage.cards.z.ZahidDjinnOfTheLamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Zhalfirin Void", 249, Rarity.UNCOMMON, mage.cards.z.ZhalfirinVoid.class)); + } +} From 8e608aeeb18e2a83251c67ffbbcf628e984af5a6 Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Mon, 16 Mar 2020 15:32:12 +0100 Subject: [PATCH 109/182] Added the Battlebond Promos (PBBD) set. --- Mage.Sets/src/mage/sets/BattlebondPromos.java | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/BattlebondPromos.java diff --git a/Mage.Sets/src/mage/sets/BattlebondPromos.java b/Mage.Sets/src/mage/sets/BattlebondPromos.java new file mode 100644 index 00000000000..4e869831ecc --- /dev/null +++ b/Mage.Sets/src/mage/sets/BattlebondPromos.java @@ -0,0 +1,46 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/pbbd + */ +public class BattlebondPromos extends ExpansionSet { + + private static final BattlebondPromos instance = new BattlebondPromos(); + + public static BattlebondPromos getInstance() { + return instance; + } + + private BattlebondPromos() { + super("Battlebond Promos", "PBBD", ExpansionSet.buildDate(2018, 6, 9), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Blaring Captain", "14s", Rarity.UNCOMMON, mage.cards.b.BlaringCaptain.class)); + cards.add(new SetCardInfo("Blaring Recruiter", "13s", Rarity.UNCOMMON, mage.cards.b.BlaringRecruiter.class)); + cards.add(new SetCardInfo("Chakram Retriever", "15s", Rarity.UNCOMMON, mage.cards.c.ChakramRetriever.class)); + cards.add(new SetCardInfo("Chakram Slinger", "16s", Rarity.UNCOMMON, mage.cards.c.ChakramSlinger.class)); + cards.add(new SetCardInfo("Gorm the Great", "8s", Rarity.RARE, mage.cards.g.GormTheGreat.class)); + cards.add(new SetCardInfo("Impetuous Protege", "19s", Rarity.UNCOMMON, mage.cards.i.ImpetuousProtege.class)); + cards.add(new SetCardInfo("Khorvath Brightflame", "9s", Rarity.RARE, mage.cards.k.KhorvathBrightflame.class)); + cards.add(new SetCardInfo("Krav, the Unredeemed", "4s", Rarity.RARE, mage.cards.k.KravTheUnredeemed.class)); + cards.add(new SetCardInfo("Ley Weaver", "21s", Rarity.UNCOMMON, mage.cards.l.LeyWeaver.class)); + cards.add(new SetCardInfo("Lore Weaver", "22s", Rarity.UNCOMMON, mage.cards.l.LoreWeaver.class)); + cards.add(new SetCardInfo("Okaun, Eye of Chaos", "6s", Rarity.RARE, mage.cards.o.OkaunEyeOfChaos.class)); + cards.add(new SetCardInfo("Pir, Imaginative Rascal", "11s", Rarity.RARE, mage.cards.p.PirImaginativeRascal.class)); + cards.add(new SetCardInfo("Proud Mentor", "20s", Rarity.UNCOMMON, mage.cards.p.ProudMentor.class)); + cards.add(new SetCardInfo("Regna, the Redeemer", "3s", Rarity.RARE, mage.cards.r.RegnaTheRedeemer.class)); + cards.add(new SetCardInfo("Rowan Kenrith", "256s", Rarity.MYTHIC, mage.cards.r.RowanKenrith.class)); + cards.add(new SetCardInfo("Soulblade Corrupter", "17s", Rarity.UNCOMMON, mage.cards.s.SoulbladeCorrupter.class)); + cards.add(new SetCardInfo("Soulblade Renewer", "18s", Rarity.UNCOMMON, mage.cards.s.SoulbladeRenewer.class)); + cards.add(new SetCardInfo("Sylvia Brightspear", "10s", Rarity.RARE, mage.cards.s.SylviaBrightspear.class)); + cards.add(new SetCardInfo("Toothy, Imaginary Friend", "12s", Rarity.RARE, mage.cards.t.ToothyImaginaryFriend.class)); + cards.add(new SetCardInfo("Virtus the Veiled", "7s", Rarity.RARE, mage.cards.v.VirtusTheVeiled.class)); + cards.add(new SetCardInfo("Will Kenrith", "255s", Rarity.MYTHIC, mage.cards.w.WillKenrith.class)); + cards.add(new SetCardInfo("Zndrsplt, Eye of Wisdom", "5s", Rarity.RARE, mage.cards.z.ZndrspltEyeOfWisdom.class)); + } +} From 35d881479809f0019ebbd905aaae58c39f15d896 Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Mon, 16 Mar 2020 15:34:42 +0100 Subject: [PATCH 110/182] Added the M19 Standard Showdown (PSS3) set. --- Mage.Sets/src/mage/sets/M19GiftPack.java | 1 + .../src/mage/sets/M19StandardShowdown.java | 29 +++++++++++++++++++ 2 files changed, 30 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/M19StandardShowdown.java diff --git a/Mage.Sets/src/mage/sets/M19GiftPack.java b/Mage.Sets/src/mage/sets/M19GiftPack.java index bd9558c7646..d9473b1a8fe 100644 --- a/Mage.Sets/src/mage/sets/M19GiftPack.java +++ b/Mage.Sets/src/mage/sets/M19GiftPack.java @@ -5,6 +5,7 @@ import mage.constants.Rarity; import mage.constants.SetType; /** + * https://scryfall.com/sets/g18 * @author JayDi85 */ public final class M19GiftPack extends ExpansionSet { diff --git a/Mage.Sets/src/mage/sets/M19StandardShowdown.java b/Mage.Sets/src/mage/sets/M19StandardShowdown.java new file mode 100644 index 00000000000..389cb898994 --- /dev/null +++ b/Mage.Sets/src/mage/sets/M19StandardShowdown.java @@ -0,0 +1,29 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/pss3 + */ +public class M19StandardShowdown extends ExpansionSet { + + private static final M19StandardShowdown instance = new M19StandardShowdown(); + + public static M19StandardShowdown getInstance() { + return instance; + } + + private M19StandardShowdown() { + super("M19 Standard Showdown", "PSS3", ExpansionSet.buildDate(2018, 7, 13), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = true; + + cards.add(new SetCardInfo("Forest", 5, Rarity.LAND, mage.cards.basiclands.Forest.class)); + cards.add(new SetCardInfo("Island", 2, Rarity.LAND, mage.cards.basiclands.Island.class)); + cards.add(new SetCardInfo("Mountain", 4, Rarity.LAND, mage.cards.basiclands.Mountain.class)); + cards.add(new SetCardInfo("Plains", 1, Rarity.LAND, mage.cards.basiclands.Plains.class)); + cards.add(new SetCardInfo("Swamp", 3, Rarity.LAND, mage.cards.basiclands.Swamp.class)); + } +} From d8643002c1cb43a23efd354ac06be96c98b4c37f Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Mon, 16 Mar 2020 15:36:59 +0100 Subject: [PATCH 111/182] Added the Core Set 2019 Promos (PM19) set. --- .../src/mage/sets/CoreSet2019Promos.java | 117 ++++++++++++++++++ 1 file changed, 117 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/CoreSet2019Promos.java diff --git a/Mage.Sets/src/mage/sets/CoreSet2019Promos.java b/Mage.Sets/src/mage/sets/CoreSet2019Promos.java new file mode 100644 index 00000000000..9ebf7e2f241 --- /dev/null +++ b/Mage.Sets/src/mage/sets/CoreSet2019Promos.java @@ -0,0 +1,117 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/pm19 + */ +public class CoreSet2019Promos extends ExpansionSet { + + private static final CoreSet2019Promos instance = new CoreSet2019Promos(); + + public static CoreSet2019Promos getInstance() { + return instance; + } + + private CoreSet2019Promos() { + super("Core Set 2019 Promos", "PM19", ExpansionSet.buildDate(2018, 7, 13), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Ajani's Last Stand", "4s", Rarity.RARE, mage.cards.a.AjanisLastStand.class)); + cards.add(new SetCardInfo("Ajani, Adversary of Tyrants", "3s", Rarity.MYTHIC, mage.cards.a.AjaniAdversaryOfTyrants.class)); + cards.add(new SetCardInfo("Alpine Moon", "128s", Rarity.RARE, mage.cards.a.AlpineMoon.class)); + cards.add(new SetCardInfo("Amulet of Safekeeping", "226s", Rarity.RARE, mage.cards.a.AmuletOfSafekeeping.class)); + cards.add(new SetCardInfo("Apex of Power", "129s", Rarity.MYTHIC, mage.cards.a.ApexOfPower.class)); + cards.add(new SetCardInfo("Arcades, the Strategist", "212s", Rarity.MYTHIC, mage.cards.a.ArcadesTheStrategist.class)); + cards.add(new SetCardInfo("Banefire", "130p", Rarity.RARE, mage.cards.b.Banefire.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Banefire", "130s", Rarity.RARE, mage.cards.b.Banefire.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Bone Dragon", "88s", Rarity.MYTHIC, mage.cards.b.BoneDragon.class)); + cards.add(new SetCardInfo("Chaos Wand", "228s", Rarity.RARE, mage.cards.c.ChaosWand.class)); + cards.add(new SetCardInfo("Chromium, the Mutable", "214s", Rarity.MYTHIC, mage.cards.c.ChromiumTheMutable.class)); + cards.add(new SetCardInfo("Cleansing Nova", "9p", Rarity.RARE, mage.cards.c.CleansingNova.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Cleansing Nova", "9s", Rarity.RARE, mage.cards.c.CleansingNova.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Crucible of Worlds", "229s", Rarity.MYTHIC, mage.cards.c.CrucibleOfWorlds.class)); + cards.add(new SetCardInfo("Dark-Dweller Oracle", "134s", Rarity.RARE, mage.cards.d.DarkDwellerOracle.class)); + cards.add(new SetCardInfo("Death Baron", 90, Rarity.RARE, mage.cards.d.DeathBaron.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Death Baron", "90p", Rarity.RARE, mage.cards.d.DeathBaron.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Death Baron", "90s", Rarity.RARE, mage.cards.d.DeathBaron.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Demanding Dragon", "135p", Rarity.RARE, mage.cards.d.DemandingDragon.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Demanding Dragon", "135s", Rarity.RARE, mage.cards.d.DemandingDragon.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Demon of Catastrophes", 91, Rarity.RARE, mage.cards.d.DemonOfCatastrophes.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Demon of Catastrophes", "91s", Rarity.RARE, mage.cards.d.DemonOfCatastrophes.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Desecrated Tomb", 230, Rarity.RARE, mage.cards.d.DesecratedTomb.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Desecrated Tomb", "230s", Rarity.RARE, mage.cards.d.DesecratedTomb.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Detection Tower", "249s", Rarity.RARE, mage.cards.d.DetectionTower.class)); + cards.add(new SetCardInfo("Dismissive Pyromancer", "136s", Rarity.RARE, mage.cards.d.DismissivePyromancer.class)); + cards.add(new SetCardInfo("Djinn of Wishes", "52s", Rarity.RARE, mage.cards.d.DjinnOfWishes.class)); + cards.add(new SetCardInfo("Dragon's Hoard", "232s", Rarity.RARE, mage.cards.d.DragonsHoard.class)); + cards.add(new SetCardInfo("Elvish Clancaller", "179p", Rarity.RARE, mage.cards.e.ElvishClancaller.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Elvish Clancaller", "179s", Rarity.RARE, mage.cards.e.ElvishClancaller.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Elvish Rejuvenator", 180, Rarity.COMMON, mage.cards.e.ElvishRejuvenator.class)); + cards.add(new SetCardInfo("Fraying Omnipotence", "97s", Rarity.RARE, mage.cards.f.FrayingOmnipotence.class)); + cards.add(new SetCardInfo("Gigantosaurus", "185p", Rarity.RARE, mage.cards.g.Gigantosaurus.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Gigantosaurus", "185s", Rarity.RARE, mage.cards.g.Gigantosaurus.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Goblin Trashmaster", "144p", Rarity.RARE, mage.cards.g.GoblinTrashmaster.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Goblin Trashmaster", "144s", Rarity.RARE, mage.cards.g.GoblinTrashmaster.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Goreclaw, Terror of Qal Sisma", "186p", Rarity.RARE, mage.cards.g.GoreclawTerrorOfQalSisma.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Goreclaw, Terror of Qal Sisma", "186s", Rarity.RARE, mage.cards.g.GoreclawTerrorOfQalSisma.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Graveyard Marshal", "99s", Rarity.RARE, mage.cards.g.GraveyardMarshal.class)); + cards.add(new SetCardInfo("Guttersnipe", 145, Rarity.UNCOMMON, mage.cards.g.Guttersnipe.class)); + cards.add(new SetCardInfo("Hungering Hydra", "189s", Rarity.RARE, mage.cards.h.HungeringHydra.class)); + cards.add(new SetCardInfo("Infernal Reckoning", "102s", Rarity.RARE, mage.cards.i.InfernalReckoning.class)); + cards.add(new SetCardInfo("Isareth the Awakener", "104s", Rarity.RARE, mage.cards.i.IsarethTheAwakener.class)); + cards.add(new SetCardInfo("Isolate", "17s", Rarity.RARE, mage.cards.i.Isolate.class)); + cards.add(new SetCardInfo("Lathliss, Dragon Queen", "149s", Rarity.RARE, mage.cards.l.LathlissDragonQueen.class)); + cards.add(new SetCardInfo("Lena, Selfless Champion", "21s", Rarity.RARE, mage.cards.l.LenaSelflessChampion.class)); + cards.add(new SetCardInfo("Leonin Warleader", "23p", Rarity.RARE, mage.cards.l.LeoninWarleader.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Leonin Warleader", "23s", Rarity.RARE, mage.cards.l.LeoninWarleader.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Liliana's Contract", "107s", Rarity.RARE, mage.cards.l.LilianasContract.class)); + cards.add(new SetCardInfo("Liliana, Untouched by Death", "106s", Rarity.MYTHIC, mage.cards.l.LilianaUntouchedByDeath.class)); + cards.add(new SetCardInfo("Magistrate's Scepter", "238s", Rarity.RARE, mage.cards.m.MagistratesScepter.class)); + cards.add(new SetCardInfo("Mentor of the Meek", "27s", Rarity.RARE, mage.cards.m.MentorOfTheMeek.class)); + cards.add(new SetCardInfo("Metamorphic Alteration", "60s", Rarity.RARE, mage.cards.m.MetamorphicAlteration.class)); + cards.add(new SetCardInfo("Militia Bugler", 29, Rarity.UNCOMMON, mage.cards.m.MilitiaBugler.class)); + cards.add(new SetCardInfo("Mistcaller", "62s", Rarity.RARE, mage.cards.m.Mistcaller.class)); + cards.add(new SetCardInfo("Murder", 110, Rarity.UNCOMMON, mage.cards.m.Murder.class)); + cards.add(new SetCardInfo("Mystic Archaeologist", "63s", Rarity.RARE, mage.cards.m.MysticArchaeologist.class)); + cards.add(new SetCardInfo("Nicol Bolas, the Arisen", "218s", Rarity.MYTHIC, mage.cards.n.NicolBolasTheArisen.class)); + cards.add(new SetCardInfo("Nicol Bolas, the Ravager", "218s", Rarity.MYTHIC, mage.cards.n.NicolBolasTheRavager.class)); + cards.add(new SetCardInfo("Omniscience", "65s", Rarity.MYTHIC, mage.cards.o.Omniscience.class)); + cards.add(new SetCardInfo("One with the Machine", "66s", Rarity.RARE, mage.cards.o.OneWithTheMachine.class)); + cards.add(new SetCardInfo("Open the Graves", "112s", Rarity.RARE, mage.cards.o.OpenTheGraves.class)); + cards.add(new SetCardInfo("Palladia-Mors, the Ruiner", "219s", Rarity.MYTHIC, mage.cards.p.PalladiaMorsTheRuiner.class)); + cards.add(new SetCardInfo("Patient Rebuilding", "67s", Rarity.RARE, mage.cards.p.PatientRebuilding.class)); + cards.add(new SetCardInfo("Pelakka Wurm", "192s", Rarity.RARE, mage.cards.p.PelakkaWurm.class)); + cards.add(new SetCardInfo("Phylactery Lich", "113s", Rarity.RARE, mage.cards.p.PhylacteryLich.class)); + cards.add(new SetCardInfo("Prodigious Growth", "194s", Rarity.RARE, mage.cards.p.ProdigiousGrowth.class)); + cards.add(new SetCardInfo("Reliquary Tower", 254, Rarity.UNCOMMON, mage.cards.r.ReliquaryTower.class)); + cards.add(new SetCardInfo("Remorseful Cleric", "33p", Rarity.RARE, mage.cards.r.RemorsefulCleric.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Remorseful Cleric", "33s", Rarity.RARE, mage.cards.r.RemorsefulCleric.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Resplendent Angel", "34p", Rarity.MYTHIC, mage.cards.r.ResplendentAngel.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Resplendent Angel", "34s", Rarity.MYTHIC, mage.cards.r.ResplendentAngel.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Runic Armasaur", "200s", Rarity.RARE, mage.cards.r.RunicArmasaur.class)); + cards.add(new SetCardInfo("Sai, Master Thopterist", "69p", Rarity.RARE, mage.cards.s.SaiMasterThopterist.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Sai, Master Thopterist", "69s", Rarity.RARE, mage.cards.s.SaiMasterThopterist.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Sarkhan's Unsealing", "155s", Rarity.RARE, mage.cards.s.SarkhansUnsealing.class)); + cards.add(new SetCardInfo("Sarkhan, Fireblood", "154s", Rarity.MYTHIC, mage.cards.s.SarkhanFireblood.class)); + cards.add(new SetCardInfo("Scapeshift", "201s", Rarity.MYTHIC, mage.cards.s.Scapeshift.class)); + cards.add(new SetCardInfo("Sigiled Sword of Valeron", "244s", Rarity.RARE, mage.cards.s.SigiledSwordOfValeron.class)); + cards.add(new SetCardInfo("Spit Flame", "160s", Rarity.RARE, mage.cards.s.SpitFlame.class)); + cards.add(new SetCardInfo("Suncleanser", "39s", Rarity.RARE, mage.cards.s.Suncleanser.class)); + cards.add(new SetCardInfo("Supreme Phantom", "76p", Rarity.RARE, mage.cards.s.SupremePhantom.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Supreme Phantom", "76s", Rarity.RARE, mage.cards.s.SupremePhantom.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Tezzeret, Artifice Master", "79s", Rarity.MYTHIC, mage.cards.t.TezzeretArtificeMaster.class)); + cards.add(new SetCardInfo("Thorn Lieutenant", "203p", Rarity.RARE, mage.cards.t.ThornLieutenant.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Thorn Lieutenant", "203s", Rarity.RARE, mage.cards.t.ThornLieutenant.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Transmogrifying Wand", "247s", Rarity.RARE, mage.cards.t.TransmogrifyingWand.class)); + cards.add(new SetCardInfo("Vaevictis Asmadi, the Dire", "225s", Rarity.MYTHIC, mage.cards.v.VaevictisAsmadiTheDire.class)); + cards.add(new SetCardInfo("Valiant Knight", "42s", Rarity.RARE, mage.cards.v.ValiantKnight.class)); + cards.add(new SetCardInfo("Vivien Reid", "208p", Rarity.MYTHIC, mage.cards.v.VivienReid.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Vivien Reid", "208s", Rarity.MYTHIC, mage.cards.v.VivienReid.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Vivien's Invocation", "209s", Rarity.RARE, mage.cards.v.ViviensInvocation.class)); + cards.add(new SetCardInfo("Windreader Sphinx", "84s", Rarity.RARE, mage.cards.w.WindreaderSphinx.class)); + } +} From 5f92eec1b2062161fb9cfd693825e957143aa287 Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Mon, 16 Mar 2020 15:50:56 +0100 Subject: [PATCH 112/182] Added the GRN Ravnica Weekend (PRWK) set. --- .../src/mage/sets/GRNRavnicaWeekend.java | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/GRNRavnicaWeekend.java diff --git a/Mage.Sets/src/mage/sets/GRNRavnicaWeekend.java b/Mage.Sets/src/mage/sets/GRNRavnicaWeekend.java new file mode 100644 index 00000000000..c620e0cd297 --- /dev/null +++ b/Mage.Sets/src/mage/sets/GRNRavnicaWeekend.java @@ -0,0 +1,34 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/prwk + */ +public class GRNRavnicaWeekend extends ExpansionSet { + + private static final GRNRavnicaWeekend instance = new GRNRavnicaWeekend(); + + public static GRNRavnicaWeekend getInstance() { + return instance; + } + + private GRNRavnicaWeekend() { + super("GRN Ravnica Weekend", "PRWK", ExpansionSet.buildDate(2018, 10, 5), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = true; + + cards.add(new SetCardInfo("Forest", "A06", Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", "A09", Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", "A01", Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", "A03", Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", "A04", Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", "A07", Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", "A08", Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", "A10", Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", "A02", Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", "A05", Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + } +} From 151ea6d61f63621bb4e0b52aef7661be7ac48bbc Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Mon, 16 Mar 2020 15:51:17 +0100 Subject: [PATCH 113/182] Added the Guilds of Ravnica Promos (PGRN) set. --- .../src/mage/sets/GuildsOfRavnicaPromos.java | 91 +++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/GuildsOfRavnicaPromos.java diff --git a/Mage.Sets/src/mage/sets/GuildsOfRavnicaPromos.java b/Mage.Sets/src/mage/sets/GuildsOfRavnicaPromos.java new file mode 100644 index 00000000000..6405aa0050c --- /dev/null +++ b/Mage.Sets/src/mage/sets/GuildsOfRavnicaPromos.java @@ -0,0 +1,91 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/pgrn + */ +public class GuildsOfRavnicaPromos extends ExpansionSet { + + private static final GuildsOfRavnicaPromos instance = new GuildsOfRavnicaPromos(); + + public static GuildsOfRavnicaPromos getInstance() { + return instance; + } + + private GuildsOfRavnicaPromos() { + super("Guilds of Ravnica Promos", "PGRN", ExpansionSet.buildDate(2018, 10, 5), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Arclight Phoenix", "91p", Rarity.MYTHIC, mage.cards.a.ArclightPhoenix.class)); + cards.add(new SetCardInfo("Assassin's Trophy", "152p", Rarity.RARE, mage.cards.a.AssassinsTrophy.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Assassin's Trophy", "152s", Rarity.RARE, mage.cards.a.AssassinsTrophy.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Assure // Assemble", "221s", Rarity.RARE, mage.cards.a.AssureAssemble.class)); + cards.add(new SetCardInfo("Aurelia, Exemplar of Justice", "153p", Rarity.MYTHIC, mage.cards.a.AureliaExemplarOfJustice.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Aurelia, Exemplar of Justice", "153s", Rarity.MYTHIC, mage.cards.a.AureliaExemplarOfJustice.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Beast Whisperer", "123p", Rarity.RARE, mage.cards.b.BeastWhisperer.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Beast Whisperer", "123s", Rarity.RARE, mage.cards.b.BeastWhisperer.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Blood Operative", "63s", Rarity.RARE, mage.cards.b.BloodOperative.class)); + cards.add(new SetCardInfo("Boros Challenger", 156, Rarity.UNCOMMON, mage.cards.b.BorosChallenger.class)); + cards.add(new SetCardInfo("Bounty of Might", "124s", Rarity.RARE, mage.cards.b.BountyOfMight.class)); + cards.add(new SetCardInfo("Chromatic Lantern", "233p", Rarity.RARE, mage.cards.c.ChromaticLantern.class)); + cards.add(new SetCardInfo("Citywide Bust", "4s", Rarity.RARE, mage.cards.c.CitywideBust.class)); + cards.add(new SetCardInfo("Conclave Tribunal", 6, Rarity.UNCOMMON, mage.cards.c.ConclaveTribunal.class)); + cards.add(new SetCardInfo("Connive // Concoct", "222s", Rarity.RARE, mage.cards.c.ConniveConcoct.class)); + cards.add(new SetCardInfo("Dawn of Hope", "8s", Rarity.RARE, mage.cards.d.DawnOfHope.class)); + cards.add(new SetCardInfo("Deafening Clarion", "165s", Rarity.RARE, mage.cards.d.DeafeningClarion.class)); + cards.add(new SetCardInfo("Doom Whisperer", "69p", Rarity.MYTHIC, mage.cards.d.DoomWhisperer.class)); + cards.add(new SetCardInfo("Emmara, Soul of the Accord", 168, Rarity.RARE, mage.cards.e.EmmaraSoulOfTheAccord.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Emmara, Soul of the Accord", "168s", Rarity.RARE, mage.cards.e.EmmaraSoulOfTheAccord.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Etrata, the Silencer", "170s", Rarity.RARE, mage.cards.e.EtrataTheSilencer.class)); + cards.add(new SetCardInfo("Expansion // Explosion", "224p", Rarity.RARE, mage.cards.e.ExpansionExplosion.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Expansion // Explosion", "224s", Rarity.RARE, mage.cards.e.ExpansionExplosion.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Experimental Frenzy", "99p", Rarity.RARE, mage.cards.e.ExperimentalFrenzy.class)); + cards.add(new SetCardInfo("Find // Finality", "225s", Rarity.RARE, mage.cards.f.FindFinality.class)); + cards.add(new SetCardInfo("Firemind's Research", 171, Rarity.RARE, mage.cards.f.FiremindsResearch.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Firemind's Research", "171s", Rarity.RARE, mage.cards.f.FiremindsResearch.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Gruesome Menagerie", "71s", Rarity.RARE, mage.cards.g.GruesomeMenagerie.class)); + cards.add(new SetCardInfo("Hatchery Spider", "132s", Rarity.RARE, mage.cards.h.HatcherySpider.class)); + cards.add(new SetCardInfo("Ionize", "179p", Rarity.RARE, mage.cards.i.Ionize.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Ionize", "179s", Rarity.RARE, mage.cards.i.Ionize.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Izoni, Thousand-Eyed", "180s", Rarity.RARE, mage.cards.i.IzoniThousandEyed.class)); + cards.add(new SetCardInfo("Knight of Autumn", "183p", Rarity.RARE, mage.cards.k.KnightOfAutumn.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Knight of Autumn", "183s", Rarity.RARE, mage.cards.k.KnightOfAutumn.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Lazav, the Multifarious", "184s", Rarity.MYTHIC, mage.cards.l.LazavTheMultifarious.class)); + cards.add(new SetCardInfo("Legion Warboss", "109s", Rarity.RARE, mage.cards.l.LegionWarboss.class)); + cards.add(new SetCardInfo("Light of the Legion", "19s", Rarity.RARE, mage.cards.l.LightOfTheLegion.class)); + cards.add(new SetCardInfo("Mausoleum Secrets", "75s", Rarity.RARE, mage.cards.m.MausoleumSecrets.class)); + cards.add(new SetCardInfo("Midnight Reaper", "77p", Rarity.RARE, mage.cards.m.MidnightReaper.class)); + cards.add(new SetCardInfo("Mission Briefing", "44s", Rarity.RARE, mage.cards.m.MissionBriefing.class)); + cards.add(new SetCardInfo("Narcomoeba", "47s", Rarity.RARE, mage.cards.n.Narcomoeba.class)); + cards.add(new SetCardInfo("Necrotic Wound", 79, Rarity.UNCOMMON, mage.cards.n.NecroticWound.class)); + cards.add(new SetCardInfo("Niv-Mizzet, Parun", "192p", Rarity.RARE, mage.cards.n.NivMizzetParun.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Niv-Mizzet, Parun", "192s", Rarity.RARE, mage.cards.n.NivMizzetParun.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Overgrown Tomb", "253p", Rarity.RARE, mage.cards.o.OvergrownTomb.class)); + cards.add(new SetCardInfo("Quasiduplicate", "51s", Rarity.RARE, mage.cards.q.Quasiduplicate.class)); + cards.add(new SetCardInfo("Response // Resurgence", "229s", Rarity.RARE, mage.cards.r.ResponseResurgence.class)); + cards.add(new SetCardInfo("Risk Factor", "113p", Rarity.RARE, mage.cards.r.RiskFactor.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Risk Factor", "113s", Rarity.RARE, mage.cards.r.RiskFactor.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Ritual of Soot", "84s", Rarity.RARE, mage.cards.r.RitualOfSoot.class)); + cards.add(new SetCardInfo("Runaway Steam-Kin", "115p", Rarity.RARE, mage.cards.r.RunawaySteamKin.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Runaway Steam-Kin", "115s", Rarity.RARE, mage.cards.r.RunawaySteamKin.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Sacred Foundry", "254p", Rarity.RARE, mage.cards.s.SacredFoundry.class)); + cards.add(new SetCardInfo("Sinister Sabotage", 54, Rarity.UNCOMMON, mage.cards.s.SinisterSabotage.class)); + cards.add(new SetCardInfo("Steam Vents", "257p", Rarity.RARE, mage.cards.s.SteamVents.class)); + cards.add(new SetCardInfo("Swiftblade Vindicator", "203s", Rarity.RARE, mage.cards.s.SwiftbladeVindicator.class)); + cards.add(new SetCardInfo("Tajic, Legion's Edge", "204s", Rarity.RARE, mage.cards.t.TajicLegionsEdge.class)); + cards.add(new SetCardInfo("Temple Garden", "258p", Rarity.RARE, mage.cards.t.TempleGarden.class)); + cards.add(new SetCardInfo("Thief of Sanity", "205p", Rarity.RARE, mage.cards.t.ThiefOfSanity.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Thief of Sanity", "205s", Rarity.RARE, mage.cards.t.ThiefOfSanity.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Thought Erasure", 206, Rarity.UNCOMMON, mage.cards.t.ThoughtErasure.class)); + cards.add(new SetCardInfo("Thousand-Year Storm", "207s", Rarity.MYTHIC, mage.cards.t.ThousandYearStorm.class)); + cards.add(new SetCardInfo("Trostani Discordant", "208s", Rarity.MYTHIC, mage.cards.t.TrostaniDiscordant.class)); + cards.add(new SetCardInfo("Underrealm Lich", "211s", Rarity.MYTHIC, mage.cards.u.UnderrealmLich.class)); + cards.add(new SetCardInfo("Venerated Loxodon", "30s", Rarity.RARE, mage.cards.v.VeneratedLoxodon.class)); + cards.add(new SetCardInfo("Vivid Revival", "148s", Rarity.RARE, mage.cards.v.VividRevival.class)); + cards.add(new SetCardInfo("Watery Grave", "259p", Rarity.RARE, mage.cards.w.WateryGrave.class)); + } +} From 3f7513f2d4c3dfaac133c50e546390eb6469c0ef Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Mon, 16 Mar 2020 16:02:29 +0100 Subject: [PATCH 114/182] Added the Modern Horizons Promos (PMH1) set. --- .../src/mage/sets/ModernHorizonsPromos.java | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/ModernHorizonsPromos.java diff --git a/Mage.Sets/src/mage/sets/ModernHorizonsPromos.java b/Mage.Sets/src/mage/sets/ModernHorizonsPromos.java new file mode 100644 index 00000000000..ef251dfad13 --- /dev/null +++ b/Mage.Sets/src/mage/sets/ModernHorizonsPromos.java @@ -0,0 +1,25 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/pmh1 + */ +public class ModernHorizonsPromos extends ExpansionSet { + + private static final ModernHorizonsPromos instance = new ModernHorizonsPromos(); + + public static ModernHorizonsPromos getInstance() { + return instance; + } + + private ModernHorizonsPromos() { + super("Modern Horizons Promos", "PMH1", ExpansionSet.buildDate(2019, 6, 14), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Astral Drift", 3, Rarity.RARE, mage.cards.a.AstralDrift.class)); + } +} From de28ad793a333c13e4d259be656e81ba1d1fb7e1 Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Mon, 16 Mar 2020 16:06:36 +0100 Subject: [PATCH 115/182] Added the War of the Spark Promos (PWAR) set. --- .../src/mage/sets/WarOfTheSparkPromos.java | 192 ++++++++++++++++++ 1 file changed, 192 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/WarOfTheSparkPromos.java diff --git a/Mage.Sets/src/mage/sets/WarOfTheSparkPromos.java b/Mage.Sets/src/mage/sets/WarOfTheSparkPromos.java new file mode 100644 index 00000000000..d776f057c0e --- /dev/null +++ b/Mage.Sets/src/mage/sets/WarOfTheSparkPromos.java @@ -0,0 +1,192 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/pwar + */ +public class WarOfTheSparkPromos extends ExpansionSet { + + private static final WarOfTheSparkPromos instance = new WarOfTheSparkPromos(); + + public static WarOfTheSparkPromos getInstance() { + return instance; + } + + private WarOfTheSparkPromos() { + super("War of the Spark Promos", "PWAR", ExpansionSet.buildDate(2019, 5, 4), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + // Commented cards are Japanese-only printings with a special artwork. + cards.add(new SetCardInfo("Ajani, the Greathearted", "184p", Rarity.RARE, mage.cards.a.AjaniTheGreathearted.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Ajani, the Greathearted", "184s", Rarity.RARE, mage.cards.a.AjaniTheGreathearted.class, NON_FULL_USE_VARIOUS)); + //cards.add(new SetCardInfo("Ajani, the Greathearted", "184s★", Rarity.RARE, mage.cards.a.AjaniTheGreathearted.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Angrath, Captain of Chaos", "227s", Rarity.UNCOMMON, mage.cards.a.AngrathCaptainOfChaos.class, NON_FULL_USE_VARIOUS)); + //cards.add(new SetCardInfo("Angrath, Captain of Chaos", "227s★", Rarity.UNCOMMON, mage.cards.a.AngrathCaptainOfChaos.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Arlinn, Voice of the Pack", "150s", Rarity.UNCOMMON, mage.cards.a.ArlinnVoiceOfThePack.class, NON_FULL_USE_VARIOUS)); + //cards.add(new SetCardInfo("Arlinn, Voice of the Pack", "150s★", Rarity.UNCOMMON, mage.cards.a.ArlinnVoiceOfThePack.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Ashiok, Dream Render", "228s", Rarity.UNCOMMON, mage.cards.a.AshiokDreamRender.class, NON_FULL_USE_VARIOUS)); + //cards.add(new SetCardInfo("Ashiok, Dream Render", "228s★", Rarity.UNCOMMON, mage.cards.a.AshiokDreamRender.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Augur of Bolas", 41, Rarity.UNCOMMON, mage.cards.a.AugurOfBolas.class)); + cards.add(new SetCardInfo("Awakening of Vitu-Ghazi", "152s", Rarity.RARE, mage.cards.a.AwakeningOfVituGhazi.class)); + cards.add(new SetCardInfo("Bioessence Hydra", "186s", Rarity.RARE, mage.cards.b.BioessenceHydra.class)); + cards.add(new SetCardInfo("Blast Zone", "244s", Rarity.RARE, mage.cards.b.BlastZone.class)); + cards.add(new SetCardInfo("Bolas's Citadel", 79, Rarity.RARE, mage.cards.b.BolassCitadel.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Bolas's Citadel", "79s", Rarity.RARE, mage.cards.b.BolassCitadel.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Casualties of War", "187s", Rarity.RARE, mage.cards.c.CasualtiesOfWar.class)); + cards.add(new SetCardInfo("Chandra, Fire Artisan", "119p", Rarity.RARE, mage.cards.c.ChandraFireArtisan.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Chandra, Fire Artisan", "119s", Rarity.RARE, mage.cards.c.ChandraFireArtisan.class, NON_FULL_USE_VARIOUS)); + //cards.add(new SetCardInfo("Chandra, Fire Artisan", "119s★", Rarity.RARE, mage.cards.c.ChandraFireArtisan.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Command the Dreadhorde", "82s", Rarity.RARE, mage.cards.c.CommandTheDreadhorde.class)); + cards.add(new SetCardInfo("Commence the Endgame", "45p", Rarity.RARE, mage.cards.c.CommenceTheEndgame.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Commence the Endgame", "45s", Rarity.RARE, mage.cards.c.CommenceTheEndgame.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Davriel, Rogue Shadowmage", "83s", Rarity.UNCOMMON, mage.cards.d.DavrielRogueShadowmage.class, NON_FULL_USE_VARIOUS)); + //cards.add(new SetCardInfo("Davriel, Rogue Shadowmage", "83s★", Rarity.UNCOMMON, mage.cards.d.DavrielRogueShadowmage.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Deliver Unto Evil", "85s", Rarity.RARE, mage.cards.d.DeliverUntoEvil.class)); + cards.add(new SetCardInfo("Domri, Anarch of Bolas", "191s", Rarity.RARE, mage.cards.d.DomriAnarchOfBolas.class, NON_FULL_USE_VARIOUS)); + //cards.add(new SetCardInfo("Domri, Anarch of Bolas", "191s★", Rarity.RARE, mage.cards.d.DomriAnarchOfBolas.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Dovin's Veto", 193, Rarity.UNCOMMON, mage.cards.d.DovinsVeto.class)); + cards.add(new SetCardInfo("Dovin, Hand of Control", "229s", Rarity.UNCOMMON, mage.cards.d.DovinHandOfControl.class, NON_FULL_USE_VARIOUS)); + //cards.add(new SetCardInfo("Dovin, Hand of Control", "229s★", Rarity.UNCOMMON, mage.cards.d.DovinHandOfControl.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Dreadhorde Arcanist", "125p", Rarity.RARE, mage.cards.d.DreadhordeArcanist.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Dreadhorde Arcanist", "125s", Rarity.RARE, mage.cards.d.DreadhordeArcanist.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Dreadhorde Butcher", "194p", Rarity.RARE, mage.cards.d.DreadhordeButcher.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Dreadhorde Butcher", "194s", Rarity.RARE, mage.cards.d.DreadhordeButcher.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Dreadhorde Invasion", "86p", Rarity.RARE, mage.cards.d.DreadhordeInvasion.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Dreadhorde Invasion", "86s", Rarity.RARE, mage.cards.d.DreadhordeInvasion.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Enter the God-Eternals", "196p", Rarity.RARE, mage.cards.e.EnterTheGodEternals.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Enter the God-Eternals", "196s", Rarity.RARE, mage.cards.e.EnterTheGodEternals.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Fblthp, the Lost", "50p", Rarity.RARE, mage.cards.f.FblthpTheLost.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Fblthp, the Lost", "50s", Rarity.RARE, mage.cards.f.FblthpTheLost.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Feather, the Redeemed", "197s", Rarity.RARE, mage.cards.f.FeatherTheRedeemed.class)); + cards.add(new SetCardInfo("Finale of Devastation", "160p", Rarity.MYTHIC, mage.cards.f.FinaleOfDevastation.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Finale of Devastation", "160s", Rarity.MYTHIC, mage.cards.f.FinaleOfDevastation.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Finale of Eternity", "91p", Rarity.MYTHIC, mage.cards.f.FinaleOfEternity.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Finale of Eternity", "91s", Rarity.MYTHIC, mage.cards.f.FinaleOfEternity.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Finale of Glory", "12s", Rarity.MYTHIC, mage.cards.f.FinaleOfGlory.class)); + cards.add(new SetCardInfo("Finale of Promise", "127s", Rarity.MYTHIC, mage.cards.f.FinaleOfPromise.class)); + cards.add(new SetCardInfo("Finale of Revelation", "51p", Rarity.MYTHIC, mage.cards.f.FinaleOfRevelation.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Finale of Revelation", "51s", Rarity.MYTHIC, mage.cards.f.FinaleOfRevelation.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Gideon Blackblade", "13p", Rarity.MYTHIC, mage.cards.g.GideonBlackblade.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Gideon Blackblade", "13s", Rarity.MYTHIC, mage.cards.g.GideonBlackblade.class, NON_FULL_USE_VARIOUS)); + //cards.add(new SetCardInfo("Gideon Blackblade", "13s★", Rarity.MYTHIC, mage.cards.g.GideonBlackblade.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("God-Eternal Bontu", "92s", Rarity.MYTHIC, mage.cards.g.GodEternalBontu.class)); + cards.add(new SetCardInfo("God-Eternal Kefnet", "53s", Rarity.MYTHIC, mage.cards.g.GodEternalKefnet.class)); + cards.add(new SetCardInfo("God-Eternal Oketra", "16s", Rarity.MYTHIC, mage.cards.g.GodEternalOketra.class)); + cards.add(new SetCardInfo("God-Eternal Rhonas", "163s", Rarity.MYTHIC, mage.cards.g.GodEternalRhonas.class)); + cards.add(new SetCardInfo("Huatli, the Sun's Heart", "230s", Rarity.UNCOMMON, mage.cards.h.HuatliTheSunsHeart.class, NON_FULL_USE_VARIOUS)); + //cards.add(new SetCardInfo("Huatli, the Sun's Heart", "230s★", Rarity.UNCOMMON, mage.cards.h.HuatliTheSunsHeart.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Ignite the Beacon", "18s", Rarity.RARE, mage.cards.i.IgniteTheBeacon.class)); + cards.add(new SetCardInfo("Ilharg, the Raze-Boar", "133s", Rarity.MYTHIC, mage.cards.i.IlhargTheRazeBoar.class)); + cards.add(new SetCardInfo("Jace, Wielder of Mysteries", "54p", Rarity.RARE, mage.cards.j.JaceWielderOfMysteries.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Jace, Wielder of Mysteries", "54s", Rarity.RARE, mage.cards.j.JaceWielderOfMysteries.class, NON_FULL_USE_VARIOUS)); + //cards.add(new SetCardInfo("Jace, Wielder of Mysteries", "54s★", Rarity.RARE, mage.cards.j.JaceWielderOfMysteries.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Jaya, Venerated Firemage", "135s", Rarity.UNCOMMON, mage.cards.j.JayaVeneratedFiremage.class, NON_FULL_USE_VARIOUS)); + //cards.add(new SetCardInfo("Jaya, Venerated Firemage", "135s★", Rarity.UNCOMMON, mage.cards.j.JayaVeneratedFiremage.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Jiang Yanggu, Wildcrafter", "164s", Rarity.UNCOMMON, mage.cards.j.JiangYangguWildcrafter.class, NON_FULL_USE_VARIOUS)); + //cards.add(new SetCardInfo("Jiang Yanggu, Wildcrafter", "164s★", Rarity.UNCOMMON, mage.cards.j.JiangYangguWildcrafter.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Karn's Bastion", 248, Rarity.RARE, mage.cards.k.KarnsBastion.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Karn's Bastion", "248p", Rarity.RARE, mage.cards.k.KarnsBastion.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Karn's Bastion", "248s", Rarity.RARE, mage.cards.k.KarnsBastion.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Karn, the Great Creator", "1s", Rarity.RARE, mage.cards.k.KarnTheGreatCreator.class, NON_FULL_USE_VARIOUS)); + //cards.add(new SetCardInfo("Karn, the Great Creator", "1s★", Rarity.RARE, mage.cards.k.KarnTheGreatCreator.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Kasmina, Enigmatic Mentor", "56s", Rarity.UNCOMMON, mage.cards.k.KasminaEnigmaticMentor.class, NON_FULL_USE_VARIOUS)); + //cards.add(new SetCardInfo("Kasmina, Enigmatic Mentor", "56s★", Rarity.UNCOMMON, mage.cards.k.KasminaEnigmaticMentor.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Kaya, Bane of the Dead", "231s", Rarity.UNCOMMON, mage.cards.k.KayaBaneOfTheDead.class, NON_FULL_USE_VARIOUS)); + //cards.add(new SetCardInfo("Kaya, Bane of the Dead", "231s★", Rarity.UNCOMMON, mage.cards.k.KayaBaneOfTheDead.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Kiora, Behemoth Beckoner", "232s", Rarity.UNCOMMON, mage.cards.k.KioraBehemothBeckoner.class, NON_FULL_USE_VARIOUS)); + //cards.add(new SetCardInfo("Kiora, Behemoth Beckoner", "232s★", Rarity.UNCOMMON, mage.cards.k.KioraBehemothBeckoner.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Krenko, Tin Street Kingpin", "137p", Rarity.RARE, mage.cards.k.KrenkoTinStreetKingpin.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Krenko, Tin Street Kingpin", "137s", Rarity.RARE, mage.cards.k.KrenkoTinStreetKingpin.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Liliana's Triumph", 98, Rarity.UNCOMMON, mage.cards.l.LilianasTriumph.class)); + cards.add(new SetCardInfo("Liliana, Dreadhorde General", "97s", Rarity.MYTHIC, mage.cards.l.LilianaDreadhordeGeneral.class, NON_FULL_USE_VARIOUS)); + //cards.add(new SetCardInfo("Liliana, Dreadhorde General", "97s★", Rarity.MYTHIC, mage.cards.l.LilianaDreadhordeGeneral.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Living Twister", "203p", Rarity.RARE, mage.cards.l.LivingTwister.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Living Twister", "203s", Rarity.RARE, mage.cards.l.LivingTwister.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Massacre Girl", "99s", Rarity.RARE, mage.cards.m.MassacreGirl.class)); + cards.add(new SetCardInfo("Mizzium Tank", "138p", Rarity.RARE, mage.cards.m.MizziumTank.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mizzium Tank", "138s", Rarity.RARE, mage.cards.m.MizziumTank.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mobilized District", "249p", Rarity.RARE, mage.cards.m.MobilizedDistrict.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mobilized District", "249s", Rarity.RARE, mage.cards.m.MobilizedDistrict.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Nahiri, Storm of Stone", "233s", Rarity.UNCOMMON, mage.cards.n.NahiriStormOfStone.class, NON_FULL_USE_VARIOUS)); + //cards.add(new SetCardInfo("Nahiri, Storm of Stone", "233s★", Rarity.UNCOMMON, mage.cards.n.NahiriStormOfStone.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Narset's Reversal", "62s", Rarity.RARE, mage.cards.n.NarsetsReversal.class)); + cards.add(new SetCardInfo("Narset, Parter of Veils", "61s", Rarity.UNCOMMON, mage.cards.n.NarsetParterOfVeils.class, NON_FULL_USE_VARIOUS)); + //cards.add(new SetCardInfo("Narset, Parter of Veils", "61s★", Rarity.UNCOMMON, mage.cards.n.NarsetParterOfVeils.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Neheb, Dreadhorde Champion", "140s", Rarity.RARE, mage.cards.n.NehebDreadhordeChampion.class)); + cards.add(new SetCardInfo("Nicol Bolas, Dragon-God", "207p", Rarity.MYTHIC, mage.cards.n.NicolBolasDragonGod.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Nicol Bolas, Dragon-God", "207s", Rarity.MYTHIC, mage.cards.n.NicolBolasDragonGod.class, NON_FULL_USE_VARIOUS)); + //cards.add(new SetCardInfo("Nicol Bolas, Dragon-God", "207s★", Rarity.MYTHIC, mage.cards.n.NicolBolasDragonGod.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Nissa, Who Shakes the World", "169p", Rarity.RARE, mage.cards.n.NissaWhoShakesTheWorld.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Nissa, Who Shakes the World", "169s", Rarity.RARE, mage.cards.n.NissaWhoShakesTheWorld.class, NON_FULL_USE_VARIOUS)); + //cards.add(new SetCardInfo("Nissa, Who Shakes the World", "169s★", Rarity.RARE, mage.cards.n.NissaWhoShakesTheWorld.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Niv-Mizzet Reborn", "208s", Rarity.MYTHIC, mage.cards.n.NivMizzetReborn.class)); + cards.add(new SetCardInfo("Oath of Kaya", "209p", Rarity.RARE, mage.cards.o.OathOfKaya.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Oath of Kaya", "209s", Rarity.RARE, mage.cards.o.OathOfKaya.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Ob Nixilis, the Hate-Twisted", "100s", Rarity.UNCOMMON, mage.cards.o.ObNixilisTheHateTwisted.class, NON_FULL_USE_VARIOUS)); + //cards.add(new SetCardInfo("Ob Nixilis, the Hate-Twisted", "100s★", Rarity.UNCOMMON, mage.cards.o.ObNixilisTheHateTwisted.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Paradise Druid", 171, Rarity.UNCOMMON, mage.cards.p.ParadiseDruid.class)); + cards.add(new SetCardInfo("Parhelion II", "24s", Rarity.RARE, mage.cards.p.ParhelionII.class)); + cards.add(new SetCardInfo("Planewide Celebration", "172s", Rarity.RARE, mage.cards.p.PlanewideCelebration.class)); + cards.add(new SetCardInfo("Ral, Storm Conduit", "211p", Rarity.RARE, mage.cards.r.RalStormConduit.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Ral, Storm Conduit", "211s", Rarity.RARE, mage.cards.r.RalStormConduit.class, NON_FULL_USE_VARIOUS)); + //cards.add(new SetCardInfo("Ral, Storm Conduit", "211s★", Rarity.RARE, mage.cards.r.RalStormConduit.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Ravnica at War", "28s", Rarity.RARE, mage.cards.r.RavnicaAtWar.class)); + cards.add(new SetCardInfo("Roalesk, Apex Hybrid", "213s", Rarity.MYTHIC, mage.cards.r.RoaleskApexHybrid.class)); + cards.add(new SetCardInfo("Role Reversal", "214s", Rarity.RARE, mage.cards.r.RoleReversal.class)); + cards.add(new SetCardInfo("Saheeli, Sublime Artificer", "234s", Rarity.UNCOMMON, mage.cards.s.SaheeliSublimeArtificer.class, NON_FULL_USE_VARIOUS)); + //cards.add(new SetCardInfo("Saheeli, Sublime Artificer", "234s★", Rarity.UNCOMMON, mage.cards.s.SaheeliSublimeArtificer.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Samut, Tyrant Smasher", "235s", Rarity.UNCOMMON, mage.cards.s.SamutTyrantSmasher.class, NON_FULL_USE_VARIOUS)); + //cards.add(new SetCardInfo("Samut, Tyrant Smasher", "235s★", Rarity.UNCOMMON, mage.cards.s.SamutTyrantSmasher.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Sarkhan the Masterless", "143s", Rarity.RARE, mage.cards.s.SarkhanTheMasterless.class, NON_FULL_USE_VARIOUS)); + //cards.add(new SetCardInfo("Sarkhan the Masterless", "143s★", Rarity.RARE, mage.cards.s.SarkhanTheMasterless.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Silent Submersible", "66p", Rarity.RARE, mage.cards.s.SilentSubmersible.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Silent Submersible", "66s", Rarity.RARE, mage.cards.s.SilentSubmersible.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Single Combat", "30s", Rarity.RARE, mage.cards.s.SingleCombat.class)); + cards.add(new SetCardInfo("Solar Blaze", "216p", Rarity.RARE, mage.cards.s.SolarBlaze.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Solar Blaze", "216s", Rarity.RARE, mage.cards.s.SolarBlaze.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Sorin, Vengeful Bloodlord", "217p", Rarity.RARE, mage.cards.s.SorinVengefulBloodlord.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Sorin, Vengeful Bloodlord", "217s", Rarity.RARE, mage.cards.s.SorinVengefulBloodlord.class, NON_FULL_USE_VARIOUS)); + //cards.add(new SetCardInfo("Sorin, Vengeful Bloodlord", "217s★", Rarity.RARE, mage.cards.s.SorinVengefulBloodlord.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Soul Diviner", "218p", Rarity.RARE, mage.cards.s.SoulDiviner.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Soul Diviner", "218s", Rarity.RARE, mage.cards.s.SoulDiviner.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Spark Double", "68p", Rarity.RARE, mage.cards.s.SparkDouble.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Spark Double", "68s", Rarity.RARE, mage.cards.s.SparkDouble.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Storrev, Devkarin Lich", "219p", Rarity.RARE, mage.cards.s.StorrevDevkarinLich.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Storrev, Devkarin Lich", "219s", Rarity.RARE, mage.cards.s.StorrevDevkarinLich.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Tamiyo, Collector of Tales", "220s", Rarity.RARE, mage.cards.t.TamiyoCollectorOfTales.class, NON_FULL_USE_VARIOUS)); + //cards.add(new SetCardInfo("Tamiyo, Collector of Tales", "220s★", Rarity.RARE, mage.cards.t.TamiyoCollectorOfTales.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Teferi, Time Raveler", "221p", Rarity.RARE, mage.cards.t.TeferiTimeRaveler.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Teferi, Time Raveler", "221s", Rarity.RARE, mage.cards.t.TeferiTimeRaveler.class, NON_FULL_USE_VARIOUS)); + //cards.add(new SetCardInfo("Teferi, Time Raveler", "221s★", Rarity.RARE, mage.cards.t.TeferiTimeRaveler.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Teyo, the Shieldmage", "32s", Rarity.UNCOMMON, mage.cards.t.TeyoTheShieldmage.class, NON_FULL_USE_VARIOUS)); + //cards.add(new SetCardInfo("Teyo, the Shieldmage", "32s★", Rarity.UNCOMMON, mage.cards.t.TeyoTheShieldmage.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("The Elderspell", "89p", Rarity.RARE, mage.cards.t.TheElderspell.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("The Elderspell", "89s", Rarity.RARE, mage.cards.t.TheElderspell.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("The Wanderer", "37s", Rarity.UNCOMMON, mage.cards.t.TheWanderer.class, NON_FULL_USE_VARIOUS)); + //cards.add(new SetCardInfo("The Wanderer", "37s★", Rarity.UNCOMMON, mage.cards.t.TheWanderer.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Tibalt, Rakish Instigator", "146s", Rarity.UNCOMMON, mage.cards.t.TibaltRakishInstigator.class, NON_FULL_USE_VARIOUS)); + //cards.add(new SetCardInfo("Tibalt, Rakish Instigator", "146s★", Rarity.UNCOMMON, mage.cards.t.TibaltRakishInstigator.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Time Wipe", 223, Rarity.RARE, mage.cards.t.TimeWipe.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Time Wipe", "223p", Rarity.RARE, mage.cards.t.TimeWipe.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Time Wipe", "223s", Rarity.RARE, mage.cards.t.TimeWipe.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Tolsimir, Friend to Wolves", "224p", Rarity.RARE, mage.cards.t.TolsimirFriendToWolves.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Tolsimir, Friend to Wolves", "224s", Rarity.RARE, mage.cards.t.TolsimirFriendToWolves.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Tomik, Distinguished Advokist", "34p", Rarity.RARE, mage.cards.t.TomikDistinguishedAdvokist.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Tomik, Distinguished Advokist", "34s", Rarity.RARE, mage.cards.t.TomikDistinguishedAdvokist.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Ugin, the Ineffable", "2p", Rarity.RARE, mage.cards.u.UginTheIneffable.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Ugin, the Ineffable", "2s", Rarity.RARE, mage.cards.u.UginTheIneffable.class, NON_FULL_USE_VARIOUS)); + //cards.add(new SetCardInfo("Ugin, the Ineffable", "2s★", Rarity.RARE, mage.cards.u.UginTheIneffable.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Vivien's Arkbow", "181s", Rarity.RARE, mage.cards.v.ViviensArkbow.class)); + cards.add(new SetCardInfo("Vivien, Champion of the Wilds", "180p", Rarity.RARE, mage.cards.v.VivienChampionOfTheWilds.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Vivien, Champion of the Wilds", "180s", Rarity.RARE, mage.cards.v.VivienChampionOfTheWilds.class, NON_FULL_USE_VARIOUS)); + //cards.add(new SetCardInfo("Vivien, Champion of the Wilds", "180s★", Rarity.RARE, mage.cards.v.VivienChampionOfTheWilds.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Vraska, Swarm's Eminence", "236s", Rarity.UNCOMMON, mage.cards.v.VraskaSwarmsEminence.class, NON_FULL_USE_VARIOUS)); + //cards.add(new SetCardInfo("Vraska, Swarm's Eminence", "236s★", Rarity.UNCOMMON, mage.cards.v.VraskaSwarmsEminence.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Widespread Brutality", "226p", Rarity.RARE, mage.cards.w.WidespreadBrutality.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Widespread Brutality", "226s", Rarity.RARE, mage.cards.w.WidespreadBrutality.class, NON_FULL_USE_VARIOUS)); + } +} From 18bb7a4e9a43ccea37711f953c190d95d42e6a20 Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Mon, 16 Mar 2020 16:11:38 +0100 Subject: [PATCH 116/182] Added the Throne of Eldraine Promos (PELD) set. --- .../src/mage/sets/ThroneOfEldrainePromos.java | 160 ++++++++++++++++++ 1 file changed, 160 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/ThroneOfEldrainePromos.java diff --git a/Mage.Sets/src/mage/sets/ThroneOfEldrainePromos.java b/Mage.Sets/src/mage/sets/ThroneOfEldrainePromos.java new file mode 100644 index 00000000000..9fb6b76e0d3 --- /dev/null +++ b/Mage.Sets/src/mage/sets/ThroneOfEldrainePromos.java @@ -0,0 +1,160 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/peld + */ +public class ThroneOfEldrainePromos extends ExpansionSet { + + private static final ThroneOfEldrainePromos instance = new ThroneOfEldrainePromos(); + + public static ThroneOfEldrainePromos getInstance() { + return instance; + } + + private ThroneOfEldrainePromos() { + super("Throne of Eldraine Promos", "PELD", ExpansionSet.buildDate(2019, 10, 4), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Acclaimed Contender", "1p", Rarity.RARE, mage.cards.a.AcclaimedContender.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Acclaimed Contender", "1s", Rarity.RARE, mage.cards.a.AcclaimedContender.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Ayara, First of Locthwain", "75p", Rarity.RARE, mage.cards.a.AyaraFirstOfLocthwain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Ayara, First of Locthwain", "75s", Rarity.RARE, mage.cards.a.AyaraFirstOfLocthwain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Blacklance Paragon", "79p", Rarity.RARE, mage.cards.b.BlacklanceParagon.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Blacklance Paragon", "79s", Rarity.RARE, mage.cards.b.BlacklanceParagon.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Bonecrusher Giant", "115p", Rarity.RARE, mage.cards.b.BonecrusherGiant.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Bonecrusher Giant", "115s", Rarity.RARE, mage.cards.b.BonecrusherGiant.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Brazen Borrower", "39p", Rarity.MYTHIC, mage.cards.b.BrazenBorrower.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Brazen Borrower", "39s", Rarity.MYTHIC, mage.cards.b.BrazenBorrower.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Castle Ardenvale", "238p", Rarity.RARE, mage.cards.c.CastleArdenvale.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Castle Ardenvale", "238s", Rarity.RARE, mage.cards.c.CastleArdenvale.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Castle Embereth", "239p", Rarity.RARE, mage.cards.c.CastleEmbereth.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Castle Embereth", "239s", Rarity.RARE, mage.cards.c.CastleEmbereth.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Castle Garenbrig", "240p", Rarity.RARE, mage.cards.c.CastleGarenbrig.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Castle Garenbrig", "240s", Rarity.RARE, mage.cards.c.CastleGarenbrig.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Castle Locthwain", "241p", Rarity.RARE, mage.cards.c.CastleLocthwain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Castle Locthwain", "241s", Rarity.RARE, mage.cards.c.CastleLocthwain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Castle Vantress", "242p", Rarity.RARE, mage.cards.c.CastleVantress.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Castle Vantress", "242s", Rarity.RARE, mage.cards.c.CastleVantress.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Charming Prince", "8p", Rarity.RARE, mage.cards.c.CharmingPrince.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Charming Prince", "8s", Rarity.RARE, mage.cards.c.CharmingPrince.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Clackbridge Troll", "84p", Rarity.RARE, mage.cards.c.ClackbridgeTroll.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Clackbridge Troll", "84s", Rarity.RARE, mage.cards.c.ClackbridgeTroll.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Dance of the Manse", "186p", Rarity.RARE, mage.cards.d.DanceOfTheManse.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Dance of the Manse", "186s", Rarity.RARE, mage.cards.d.DanceOfTheManse.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Doom Foretold", "187p", Rarity.RARE, mage.cards.d.DoomForetold.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Doom Foretold", "187s", Rarity.RARE, mage.cards.d.DoomForetold.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Embercleave", "120p", Rarity.MYTHIC, mage.cards.e.Embercleave.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Embercleave", "120s", Rarity.MYTHIC, mage.cards.e.Embercleave.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Emry, Lurker of the Loch", "43p", Rarity.RARE, mage.cards.e.EmryLurkerOfTheLoch.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Emry, Lurker of the Loch", "43s", Rarity.RARE, mage.cards.e.EmryLurkerOfTheLoch.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Escape to the Wilds", "189p", Rarity.RARE, mage.cards.e.EscapeToTheWilds.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Escape to the Wilds", "189s", Rarity.RARE, mage.cards.e.EscapeToTheWilds.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Fabled Passage", "244p", Rarity.RARE, mage.cards.f.FabledPassage.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Fabled Passage", "244s", Rarity.RARE, mage.cards.f.FabledPassage.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Fae of Wishes", "44p", Rarity.RARE, mage.cards.f.FaeOfWishes.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Fae of Wishes", "44s", Rarity.RARE, mage.cards.f.FaeOfWishes.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Faeburrow Elder", "190p", Rarity.RARE, mage.cards.f.FaeburrowElder.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Faeburrow Elder", "190s", Rarity.RARE, mage.cards.f.FaeburrowElder.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Feasting Troll King", "152p", Rarity.RARE, mage.cards.f.FeastingTrollKing.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Feasting Troll King", "152s", Rarity.RARE, mage.cards.f.FeastingTrollKing.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Fervent Champion", "124p", Rarity.RARE, mage.cards.f.FerventChampion.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Fervent Champion", "124s", Rarity.RARE, mage.cards.f.FerventChampion.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Fires of Invention", "125p", Rarity.RARE, mage.cards.f.FiresOfInvention.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Fires of Invention", "125s", Rarity.RARE, mage.cards.f.FiresOfInvention.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Folio of Fancies", "46p", Rarity.RARE, mage.cards.f.FolioOfFancies.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Folio of Fancies", "46s", Rarity.RARE, mage.cards.f.FolioOfFancies.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Gadwick, the Wizened", "48p", Rarity.RARE, mage.cards.g.GadwickTheWizened.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Gadwick, the Wizened", "48s", Rarity.RARE, mage.cards.g.GadwickTheWizened.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Garruk, Cursed Huntsman", "191p", Rarity.MYTHIC, mage.cards.g.GarrukCursedHuntsman.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Garruk, Cursed Huntsman", "191s", Rarity.MYTHIC, mage.cards.g.GarrukCursedHuntsman.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Giant Killer", "14p", Rarity.RARE, mage.cards.g.GiantKiller.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Giant Killer", "14s", Rarity.RARE, mage.cards.g.GiantKiller.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Gilded Goose", "160p", Rarity.RARE, mage.cards.g.GildedGoose.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Gilded Goose", "160s", Rarity.RARE, mage.cards.g.GildedGoose.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Happily Ever After", "16p", Rarity.RARE, mage.cards.h.HappilyEverAfter.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Happily Ever After", "16s", Rarity.RARE, mage.cards.h.HappilyEverAfter.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Harmonious Archon", "17p", Rarity.MYTHIC, mage.cards.h.HarmoniousArchon.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Harmonious Archon", "17s", Rarity.MYTHIC, mage.cards.h.HarmoniousArchon.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Hushbringer", "18p", Rarity.RARE, mage.cards.h.Hushbringer.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Hushbringer", "18s", Rarity.RARE, mage.cards.h.Hushbringer.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Irencrag Feat", "127p", Rarity.RARE, mage.cards.i.IrencragFeat.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Irencrag Feat", "127s", Rarity.RARE, mage.cards.i.IrencragFeat.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Irencrag Pyromancer", "128p", Rarity.RARE, mage.cards.i.IrencragPyromancer.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Irencrag Pyromancer", "128s", Rarity.RARE, mage.cards.i.IrencragPyromancer.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Linden, the Steadfast Queen", "20p", Rarity.RARE, mage.cards.l.LindenTheSteadfastQueen.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Linden, the Steadfast Queen", "20s", Rarity.RARE, mage.cards.l.LindenTheSteadfastQueen.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Lochmere Serpent", "195p", Rarity.RARE, mage.cards.l.LochmereSerpent.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Lochmere Serpent", "195s", Rarity.RARE, mage.cards.l.LochmereSerpent.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Lovestruck Beast", "165p", Rarity.RARE, mage.cards.l.LovestruckBeast.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Lovestruck Beast", "165s", Rarity.RARE, mage.cards.l.LovestruckBeast.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Midnight Clock", "54p", Rarity.RARE, mage.cards.m.MidnightClock.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Midnight Clock", "54s", Rarity.RARE, mage.cards.m.MidnightClock.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mirrormade", "55p", Rarity.RARE, mage.cards.m.Mirrormade.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mirrormade", "55s", Rarity.RARE, mage.cards.m.Mirrormade.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Murderous Rider", "97p", Rarity.RARE, mage.cards.m.MurderousRider.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Murderous Rider", "97s", Rarity.RARE, mage.cards.m.MurderousRider.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Oathsworn Knight", "98p", Rarity.RARE, mage.cards.o.OathswornKnight.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Oathsworn Knight", "98s", Rarity.RARE, mage.cards.o.OathswornKnight.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Oko, Thief of Crowns", "197p", Rarity.MYTHIC, mage.cards.o.OkoThiefOfCrowns.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Oko, Thief of Crowns", "197s", Rarity.MYTHIC, mage.cards.o.OkoThiefOfCrowns.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Once Upon a Time", "169p", Rarity.RARE, mage.cards.o.OnceUponATime.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Once Upon a Time", "169s", Rarity.RARE, mage.cards.o.OnceUponATime.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Opportunistic Dragon", "133p", Rarity.RARE, mage.cards.o.OpportunisticDragon.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Opportunistic Dragon", "133s", Rarity.RARE, mage.cards.o.OpportunisticDragon.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Outlaws' Merriment", "198p", Rarity.MYTHIC, mage.cards.o.OutlawsMerriment.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Outlaws' Merriment", "198s", Rarity.MYTHIC, mage.cards.o.OutlawsMerriment.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Piper of the Swarm", "100p", Rarity.RARE, mage.cards.p.PiperOfTheSwarm.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Piper of the Swarm", "100s", Rarity.RARE, mage.cards.p.PiperOfTheSwarm.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Questing Beast", "171p", Rarity.MYTHIC, mage.cards.q.QuestingBeast.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Questing Beast", "171s", Rarity.MYTHIC, mage.cards.q.QuestingBeast.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Rankle, Master of Pranks", "101p", Rarity.MYTHIC, mage.cards.r.RankleMasterOfPranks.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Rankle, Master of Pranks", "101s", Rarity.MYTHIC, mage.cards.r.RankleMasterOfPranks.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Realm-Cloaked Giant", "26p", Rarity.MYTHIC, mage.cards.r.RealmCloakedGiant.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Realm-Cloaked Giant", "26s", Rarity.MYTHIC, mage.cards.r.RealmCloakedGiant.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Return of the Wildspeaker", "172p", Rarity.RARE, mage.cards.r.ReturnOfTheWildspeaker.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Return of the Wildspeaker", "172s", Rarity.RARE, mage.cards.r.ReturnOfTheWildspeaker.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Robber of the Rich", "138p", Rarity.MYTHIC, mage.cards.r.RobberOfTheRich.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Robber of the Rich", "138s", Rarity.MYTHIC, mage.cards.r.RobberOfTheRich.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Sorcerous Spyglass", "233p", Rarity.RARE, mage.cards.s.SorcerousSpyglass.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Sorcerous Spyglass", "233s", Rarity.RARE, mage.cards.s.SorcerousSpyglass.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Stolen by the Fae", "66p", Rarity.RARE, mage.cards.s.StolenByTheFae.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Stolen by the Fae", "66s", Rarity.RARE, mage.cards.s.StolenByTheFae.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Stonecoil Serpent", "235p", Rarity.RARE, mage.cards.s.StonecoilSerpent.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Stonecoil Serpent", "235s", Rarity.RARE, mage.cards.s.StonecoilSerpent.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Stormfist Crusader", "203p", Rarity.RARE, mage.cards.s.StormfistCrusader.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Stormfist Crusader", "203s", Rarity.RARE, mage.cards.s.StormfistCrusader.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Sundering Stroke", "144p", Rarity.RARE, mage.cards.s.SunderingStroke.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Sundering Stroke", "144s", Rarity.RARE, mage.cards.s.SunderingStroke.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("The Cauldron of Eternity", "82p", Rarity.MYTHIC, mage.cards.t.TheCauldronOfEternity.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("The Cauldron of Eternity", "82s", Rarity.MYTHIC, mage.cards.t.TheCauldronOfEternity.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("The Circle of Loyalty", "9p", Rarity.MYTHIC, mage.cards.t.TheCircleOfLoyalty.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("The Circle of Loyalty", "9s", Rarity.MYTHIC, mage.cards.t.TheCircleOfLoyalty.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("The Great Henge", "161p", Rarity.MYTHIC, mage.cards.t.TheGreatHenge.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("The Great Henge", "161s", Rarity.MYTHIC, mage.cards.t.TheGreatHenge.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("The Magic Mirror", "51p", Rarity.MYTHIC, mage.cards.t.TheMagicMirror.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("The Magic Mirror", "51s", Rarity.MYTHIC, mage.cards.t.TheMagicMirror.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("The Royal Scions", "199p", Rarity.MYTHIC, mage.cards.t.TheRoyalScions.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("The Royal Scions", "199s", Rarity.MYTHIC, mage.cards.t.TheRoyalScions.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Torbran, Thane of Red Fell", "147p", Rarity.RARE, mage.cards.t.TorbranThaneOfRedFell.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Torbran, Thane of Red Fell", "147s", Rarity.RARE, mage.cards.t.TorbranThaneOfRedFell.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Vantress Gargoyle", "71p", Rarity.RARE, mage.cards.v.VantressGargoyle.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Vantress Gargoyle", "71s", Rarity.RARE, mage.cards.v.VantressGargoyle.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Wicked Wolf", "181p", Rarity.RARE, mage.cards.w.WickedWolf.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Wicked Wolf", "181s", Rarity.RARE, mage.cards.w.WickedWolf.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Wildborn Preserver", "182p", Rarity.RARE, mage.cards.w.WildbornPreserver.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Wildborn Preserver", "182s", Rarity.RARE, mage.cards.w.WildbornPreserver.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Wishclaw Talisman", "110p", Rarity.RARE, mage.cards.w.WishclawTalisman.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Wishclaw Talisman", "110s", Rarity.RARE, mage.cards.w.WishclawTalisman.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Witch's Vengeance", "111p", Rarity.RARE, mage.cards.w.WitchsVengeance.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Witch's Vengeance", "111s", Rarity.RARE, mage.cards.w.WitchsVengeance.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Worthy Knight", "36p", Rarity.RARE, mage.cards.w.WorthyKnight.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Worthy Knight", "36s", Rarity.RARE, mage.cards.w.WorthyKnight.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Yorvo, Lord of Garenbrig", "185p", Rarity.RARE, mage.cards.y.YorvoLordOfGarenbrig.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Yorvo, Lord of Garenbrig", "185s", Rarity.RARE, mage.cards.y.YorvoLordOfGarenbrig.class, NON_FULL_USE_VARIOUS)); + } +} From fffeed364333659f7f92e3284020fbf6051c56ec Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Mon, 16 Mar 2020 16:30:29 +0100 Subject: [PATCH 117/182] Added the Unsanctioned (UND) set. Added all cards to the card list, commented out all cards not implemented. --- Mage.Sets/src/mage/sets/Unsanctioned.java | 120 ++++++++++++++++++++++ 1 file changed, 120 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/Unsanctioned.java diff --git a/Mage.Sets/src/mage/sets/Unsanctioned.java b/Mage.Sets/src/mage/sets/Unsanctioned.java new file mode 100644 index 00000000000..7f725f4ffa9 --- /dev/null +++ b/Mage.Sets/src/mage/sets/Unsanctioned.java @@ -0,0 +1,120 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/und + */ +public class Unsanctioned extends ExpansionSet { + + private static final Unsanctioned instance = new Unsanctioned(); + + public static Unsanctioned getInstance() { + return instance; + } + + private Unsanctioned() { + super("Unsanctioned", "UND", ExpansionSet.buildDate(2020, 2, 29), SetType.JOKESET); + this.hasBoosters = false; + this.hasBasicLands = true; + + //cards.add(new SetCardInfo("AWOL", 2, Rarity.COMMON, mage.cards.a.AWOL.class)); + //cards.add(new SetCardInfo("Abstract Iguanart", 47, Rarity.UNCOMMON, mage.cards.a.AbstractIguanart.class)); + //cards.add(new SetCardInfo("Acornelia, Fashionable Filcher", 31, Rarity.RARE, mage.cards.a.AcorneliaFashionableFilcher.class)); + //cards.add(new SetCardInfo("Adorable Kitten", 1, Rarity.COMMON, mage.cards.a.AdorableKitten.class)); + //cards.add(new SetCardInfo("Alexander Clamilton", 16, Rarity.RARE, mage.cards.a.AlexanderClamilton.class)); + //cards.add(new SetCardInfo("Avatar of Me", 17, Rarity.RARE, mage.cards.a.AvatarOfMe.class)); + cards.add(new SetCardInfo("B-I-N-G-O", 61, Rarity.RARE, mage.cards.b.BINGO.class)); + //cards.add(new SetCardInfo("B.O.B. (Bevy of Beebles)", 18, Rarity.MYTHIC, mage.cards.b.BOBBevyOfBeebles.class)); + //cards.add(new SetCardInfo("Bat-", 32, Rarity.UNCOMMON, mage.cards.b.Bat.class)); + cards.add(new SetCardInfo("Blast from the Past", 48, Rarity.RARE, mage.cards.b.BlastFromThePast.class)); + //cards.add(new SetCardInfo("Boomstacker", 49, Rarity.RARE, mage.cards.b.Boomstacker.class)); + cards.add(new SetCardInfo("Booster Tutor", 33, Rarity.UNCOMMON, mage.cards.b.BoosterTutor.class)); + //cards.add(new SetCardInfo("Bronze Calendar", 76, Rarity.UNCOMMON, mage.cards.b.BronzeCalendar.class)); + //cards.add(new SetCardInfo("Carnivorous Death-Parrot", 19, Rarity.COMMON, mage.cards.c.CarnivorousDeathParrot.class)); + //cards.add(new SetCardInfo("Cheatyface", 20, Rarity.UNCOMMON, mage.cards.c.Cheatyface.class)); + //cards.add(new SetCardInfo("Chicken à la King", 21, Rarity.RARE, mage.cards.c.ChickenLaKing.class)); + //cards.add(new SetCardInfo("Common Courtesy", 22, Rarity.UNCOMMON, mage.cards.c.CommonCourtesy.class)); + //cards.add(new SetCardInfo("Common Iguana", 50, Rarity.COMMON, mage.cards.c.CommonIguana.class)); + //cards.add(new SetCardInfo("Dirty Rat", 34, Rarity.COMMON, mage.cards.d.DirtyRat.class)); + //cards.add(new SetCardInfo("Duh", 35, Rarity.COMMON, mage.cards.d.Duh.class)); + cards.add(new SetCardInfo("Elvish Impersonators", 62, Rarity.COMMON, mage.cards.e.ElvishImpersonators.class)); + //cards.add(new SetCardInfo("Emcee", 3, Rarity.UNCOMMON, mage.cards.e.Emcee.class)); + //cards.add(new SetCardInfo("Enter the Dungeon", 36, Rarity.RARE, mage.cards.e.EnterTheDungeon.class)); + //cards.add(new SetCardInfo("Entirely Normal Armchair", 77, Rarity.UNCOMMON, mage.cards.e.EntirelyNormalArmchair.class)); + //cards.add(new SetCardInfo("Flavor Judge", 4, Rarity.RARE, mage.cards.f.FlavorJudge.class)); + cards.add(new SetCardInfo("Forest", 95, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", 96, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + //cards.add(new SetCardInfo("Frankie Peanuts", 5, Rarity.RARE, mage.cards.f.FrankiePeanuts.class)); + cards.add(new SetCardInfo("Free-Range Chicken", 63, Rarity.COMMON, mage.cards.f.FreeRangeChicken.class)); + //cards.add(new SetCardInfo("GO TO JAIL", 6, Rarity.COMMON, mage.cards.g.GoToJail.class)); + //cards.add(new SetCardInfo("Goblin Haberdasher", 51, Rarity.UNCOMMON, mage.cards.g.GoblinHaberdasher.class)); + //cards.add(new SetCardInfo("Goblin S.W.A.T. Team", 52, Rarity.COMMON, mage.cards.g.GoblinSWATTeam.class)); + cards.add(new SetCardInfo("Goblin Tutor", 53, Rarity.UNCOMMON, mage.cards.g.GoblinTutor.class)); + cards.add(new SetCardInfo("Growth Spurt", 64, Rarity.COMMON, mage.cards.g.GrowthSpurt.class)); + //cards.add(new SetCardInfo("Half-Squirrel, Half-", 65, Rarity.UNCOMMON, mage.cards.h.HalfSquirrelHalf.class)); + //cards.add(new SetCardInfo("Hoisted Hireling", 37, Rarity.COMMON, mage.cards.h.HoistedHireling.class)); + //cards.add(new SetCardInfo("Humming-", 7, Rarity.COMMON, mage.cards.h.Humming.class)); + cards.add(new SetCardInfo("Infernal Spawn of Evil", 38, Rarity.RARE, mage.cards.i.InfernalSpawnOfEvil.class)); + //cards.add(new SetCardInfo("Infernal Spawn of Infernal Spawn of Evil", 39, Rarity.RARE, mage.cards.i.InfernalSpawnOfInfernalSpawnOfEvil.class)); + //cards.add(new SetCardInfo("Infernius Spawnington III, Esq.", 40, Rarity.RARE, mage.cards.i.InferniusSpawningtonIIIEsq.class)); + //cards.add(new SetCardInfo("Infinity Elemental", 54, Rarity.MYTHIC, mage.cards.i.InfinityElemental.class)); + cards.add(new SetCardInfo("Inhumaniac", 41, Rarity.UNCOMMON, mage.cards.i.Inhumaniac.class)); + cards.add(new SetCardInfo("Island", 89, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", 90, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Jack-in-the-Mox", 78, Rarity.RARE, mage.cards.j.JackInTheMox.class)); + cards.add(new SetCardInfo("Johnny, Combo Player", 23, Rarity.RARE, mage.cards.j.JohnnyComboPlayer.class)); + cards.add(new SetCardInfo("Jumbo Imp", 42, Rarity.UNCOMMON, mage.cards.j.JumboImp.class)); + //cards.add(new SetCardInfo("Knight of the Hokey Pokey", 8, Rarity.COMMON, mage.cards.k.KnightOfTheHokeyPokey.class)); + cards.add(new SetCardInfo("Krark's Other Thumb", 79, Rarity.UNCOMMON, mage.cards.k.KrarksOtherThumb.class)); + //cards.add(new SetCardInfo("Look at Me, I'm R&D", 9, Rarity.RARE, mage.cards.l.LookAtMeImRD.class)); + //cards.add(new SetCardInfo("Look at Me, I'm the DCI", 10, Rarity.RARE, mage.cards.l.LookAtMeImTheDci.class)); + //cards.add(new SetCardInfo("Magic Word", 24, Rarity.COMMON, mage.cards.m.MagicWord.class)); + //cards.add(new SetCardInfo("Mer Man", 25, Rarity.COMMON, mage.cards.m.MerMan.class)); + //cards.add(new SetCardInfo("Mother Kangaroo", 66, Rarity.COMMON, mage.cards.m.MotherKangaroo.class)); + cards.add(new SetCardInfo("Mountain", 93, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", 94, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Old Fogey", 67, Rarity.RARE, mage.cards.o.OldFogey.class)); + //cards.add(new SetCardInfo("Old Guard", 11, Rarity.COMMON, mage.cards.o.OldGuard.class)); + //cards.add(new SetCardInfo("Ordinary Pony", 12, Rarity.COMMON, mage.cards.o.OrdinaryPony.class)); + cards.add(new SetCardInfo("Painiac", 55, Rarity.COMMON, mage.cards.p.Painiac.class)); + cards.add(new SetCardInfo("Paper Tiger", 80, Rarity.COMMON, mage.cards.p.PaperTiger.class)); + //cards.add(new SetCardInfo("Pippa, Duchess of Dice", 68, Rarity.RARE, mage.cards.p.PippaDuchessOfDice.class)); + cards.add(new SetCardInfo("Plains", 87, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", 88, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + //cards.add(new SetCardInfo("Pointy Finger of Doom", 81, Rarity.RARE, mage.cards.p.PointyFingerOfDoom.class)); + cards.add(new SetCardInfo("Poultrygeist", 43, Rarity.COMMON, mage.cards.p.Poultrygeist.class)); + //cards.add(new SetCardInfo("Richard Garfield, Ph.D.", 26, Rarity.RARE, mage.cards.r.RichardGarfieldPhD.class)); + //cards.add(new SetCardInfo("Rings a Bell", 27, Rarity.UNCOMMON, mage.cards.r.RingsaBell.class)); + cards.add(new SetCardInfo("Rock Lobster", 82, Rarity.COMMON, mage.cards.r.RockLobster.class)); + cards.add(new SetCardInfo("Scissors Lizard", 83, Rarity.COMMON, mage.cards.s.ScissorsLizard.class)); + cards.add(new SetCardInfo("Six-y Beast", 56, Rarity.UNCOMMON, mage.cards.s.SixyBeast.class)); + //cards.add(new SetCardInfo("Skull Saucer", 44, Rarity.UNCOMMON, mage.cards.s.SkullSaucer.class)); + //cards.add(new SetCardInfo("Slaying Mantis", 69, Rarity.UNCOMMON, mage.cards.s.SlayingMantis.class)); + cards.add(new SetCardInfo("Snickering Squirrel", 45, Rarity.COMMON, mage.cards.s.SnickeringSquirrel.class)); + //cards.add(new SetCardInfo("Spirit of the Season", 70, Rarity.UNCOMMON, mage.cards.s.SpiritOfTheSeason.class)); + //cards.add(new SetCardInfo("Squirrel Farm", 71, Rarity.RARE, mage.cards.s.SquirrelFarm.class)); + //cards.add(new SetCardInfo("Staying Power", 13, Rarity.RARE, mage.cards.s.StayingPower.class)); + //cards.add(new SetCardInfo("Stet, Draconic Proofreader", 57, Rarity.RARE, mage.cards.s.StetDraconicProofreader.class)); + //cards.add(new SetCardInfo("Stinging Scorpion", 46, Rarity.COMMON, mage.cards.s.StingingScorpion.class)); + cards.add(new SetCardInfo("Strategy, Schmategy", 58, Rarity.RARE, mage.cards.s.StrategySchmategy.class)); + //cards.add(new SetCardInfo("Strutting Turkey", 14, Rarity.UNCOMMON, mage.cards.s.StruttingTurkey.class)); + //cards.add(new SetCardInfo("Super-Duper Death Ray", 59, Rarity.UNCOMMON, mage.cards.s.SuperDuperDeathRay.class)); + //cards.add(new SetCardInfo("Surgeon General Commander", 72, Rarity.MYTHIC, mage.cards.s.SurgeonGeneralCommander.class)); + cards.add(new SetCardInfo("Swamp", 91, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", 92, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + //cards.add(new SetCardInfo("Sword of Dungeons & Dragons", 84, Rarity.MYTHIC, mage.cards.s.SwordOfDungeonsDragons.class)); + //cards.add(new SetCardInfo("Syr Cadian, Knight Owl", 15, Rarity.RARE, mage.cards.s.SyrCadianKnightOwl.class)); + cards.add(new SetCardInfo("Time Out", 28, Rarity.COMMON, mage.cards.t.TimeOut.class)); + cards.add(new SetCardInfo("Timmy, Power Gamer", 73, Rarity.RARE, mage.cards.t.TimmyPowerGamer.class)); + //cards.add(new SetCardInfo("Topsy Turvy", 29, Rarity.UNCOMMON, mage.cards.t.TopsyTurvy.class)); + //cards.add(new SetCardInfo("Underdome", 86, Rarity.COMMON, mage.cards.u.Underdome.class)); + //cards.add(new SetCardInfo("Wall of Fortune", 30, Rarity.COMMON, mage.cards.w.WallOfFortune.class)); + //cards.add(new SetCardInfo("Water Gun Balloon Game", 85, Rarity.RARE, mage.cards.w.WaterGunBalloonGame.class)); + //cards.add(new SetCardInfo("Who // What // When // Where // Why", 75, Rarity.RARE, mage.cards.w.WhoWhatWhenWhereWhy.class)); + //cards.add(new SetCardInfo("Wild Crocodile", 74, Rarity.COMMON, mage.cards.w.WildCrocodile.class)); + //cards.add(new SetCardInfo("Yet Another Aether Vortex", 60, Rarity.RARE, mage.cards.y.YetAnotherAetherVortex.class)); + } +} From 68d5ababc6421ba7804f34efbb8a9e043fbe2810 Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Mon, 16 Mar 2020 16:33:23 +0100 Subject: [PATCH 118/182] Added missing cards to the Game Night 2019 (GN2) set. --- Mage.Sets/src/mage/sets/GameNight2019.java | 67 +++++++++++++++++++++- 1 file changed, 64 insertions(+), 3 deletions(-) diff --git a/Mage.Sets/src/mage/sets/GameNight2019.java b/Mage.Sets/src/mage/sets/GameNight2019.java index ece39af0803..3ae313fd40a 100644 --- a/Mage.Sets/src/mage/sets/GameNight2019.java +++ b/Mage.Sets/src/mage/sets/GameNight2019.java @@ -5,9 +5,10 @@ import mage.constants.Rarity; import mage.constants.SetType; /** + * https://scryfall.com/sets/gn2 * @author TheElk801 */ -public final class GameNight2019 extends ExpansionSet { +public class GameNight2019 extends ExpansionSet { private static final GameNight2019 instance = new GameNight2019(); @@ -17,12 +18,72 @@ public final class GameNight2019 extends ExpansionSet { private GameNight2019() { super("Game Night 2019", "GN2", ExpansionSet.buildDate(2019, 11, 15), SetType.SUPPLEMENTAL); - this.hasBasicLands = false; // TODO: change when spoiled + this.hasBoosters = false; + this.hasBasicLands = true; + cards.add(new SetCardInfo("Accursed Horde", 26, Rarity.UNCOMMON, mage.cards.a.AccursedHorde.class)); + cards.add(new SetCardInfo("Akoum Hellkite", 36, Rarity.RARE, mage.cards.a.AkoumHellkite.class)); + cards.add(new SetCardInfo("Aven Wind Mage", 16, Rarity.COMMON, mage.cards.a.AvenWindMage.class)); + cards.add(new SetCardInfo("Brute Strength", 37, Rarity.COMMON, mage.cards.b.BruteStrength.class)); cards.add(new SetCardInfo("Calculating Lich", 3, Rarity.MYTHIC, mage.cards.c.CalculatingLich.class)); + cards.add(new SetCardInfo("Carrion Screecher", 27, Rarity.COMMON, mage.cards.c.CarrionScreecher.class)); + cards.add(new SetCardInfo("Claustrophobia", 17, Rarity.COMMON, mage.cards.c.Claustrophobia.class)); + cards.add(new SetCardInfo("Consul's Lieutenant", 6, Rarity.UNCOMMON, mage.cards.c.ConsulsLieutenant.class)); + cards.add(new SetCardInfo("Crested Herdcaller", 46, Rarity.UNCOMMON, mage.cards.c.CrestedHerdcaller.class)); + cards.add(new SetCardInfo("Crow of Dark Tidings", 28, Rarity.COMMON, mage.cards.c.CrowOfDarkTidings.class)); + cards.add(new SetCardInfo("Cryptic Serpent", 18, Rarity.UNCOMMON, mage.cards.c.CrypticSerpent.class)); + cards.add(new SetCardInfo("Decision Paralysis", 19, Rarity.COMMON, mage.cards.d.DecisionParalysis.class)); + cards.add(new SetCardInfo("Destructive Tampering", 38, Rarity.COMMON, mage.cards.d.DestructiveTampering.class)); + cards.add(new SetCardInfo("Dragon Egg", 39, Rarity.UNCOMMON, mage.cards.d.DragonEgg.class)); + cards.add(new SetCardInfo("Dramatic Reversal", 20, Rarity.COMMON, mage.cards.d.DramaticReversal.class)); cards.add(new SetCardInfo("Earthshaker Giant", 5, Rarity.MYTHIC, mage.cards.e.EarthshakerGiant.class)); + cards.add(new SetCardInfo("Engulf the Shore", 21, Rarity.RARE, mage.cards.e.EngulfTheShore.class)); + cards.add(new SetCardInfo("Fiend Binder", 7, Rarity.COMMON, mage.cards.f.FiendBinder.class)); cards.add(new SetCardInfo("Fiendish Duo", 4, Rarity.MYTHIC, mage.cards.f.FiendishDuo.class)); + cards.add(new SetCardInfo("Forest", 63, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", 64, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Galestrike", 22, Rarity.UNCOMMON, mage.cards.g.Galestrike.class)); + cards.add(new SetCardInfo("Gavony Unhallowed", 29, Rarity.COMMON, mage.cards.g.GavonyUnhallowed.class)); + cards.add(new SetCardInfo("Ghalta, Primal Hunger", 47, Rarity.RARE, mage.cards.g.GhaltaPrimalHunger.class)); + cards.add(new SetCardInfo("Grasp of Darkness", 30, Rarity.UNCOMMON, mage.cards.g.GraspOfDarkness.class)); + cards.add(new SetCardInfo("Grazing Whiptail", 48, Rarity.COMMON, mage.cards.g.GrazingWhiptail.class)); cards.add(new SetCardInfo("Highcliff Felidar", 1, Rarity.MYTHIC, mage.cards.h.HighcliffFelidar.class)); + cards.add(new SetCardInfo("Howling Golem", 54, Rarity.UNCOMMON, mage.cards.h.HowlingGolem.class)); + cards.add(new SetCardInfo("Island", 57, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", 58, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Kargan Dragonrider", 40, Rarity.COMMON, mage.cards.k.KarganDragonrider.class)); + cards.add(new SetCardInfo("Kytheon's Irregulars", 8, Rarity.RARE, mage.cards.k.KytheonsIrregulars.class)); + cards.add(new SetCardInfo("Lathliss, Dragon Queen", 41, Rarity.RARE, mage.cards.l.LathlissDragonQueen.class)); + cards.add(new SetCardInfo("Lightning Strike", 42, Rarity.COMMON, mage.cards.l.LightningStrike.class)); + cards.add(new SetCardInfo("Liliana's Mastery", 31, Rarity.RARE, mage.cards.l.LilianasMastery.class)); + cards.add(new SetCardInfo("Lord of the Accursed", 32, Rarity.UNCOMMON, mage.cards.l.LordOfTheAccursed.class)); + cards.add(new SetCardInfo("Mighty Leap", 9, Rarity.COMMON, mage.cards.m.MightyLeap.class)); + cards.add(new SetCardInfo("Mountain", 61, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", 62, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Patron of the Valiant", 10, Rarity.UNCOMMON, mage.cards.p.PatronOfTheValiant.class)); + cards.add(new SetCardInfo("Plains", 55, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", 56, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Ranging Raptors", 49, Rarity.UNCOMMON, mage.cards.r.RangingRaptors.class)); + cards.add(new SetCardInfo("Relief Captain", 11, Rarity.UNCOMMON, mage.cards.r.ReliefCaptain.class)); + cards.add(new SetCardInfo("Ripjaw Raptor", 50, Rarity.RARE, mage.cards.r.RipjawRaptor.class)); + cards.add(new SetCardInfo("Rise from the Grave", 33, Rarity.UNCOMMON, mage.cards.r.RiseFromTheGrave.class)); + cards.add(new SetCardInfo("Rise from the Tides", 23, Rarity.UNCOMMON, mage.cards.r.RiseFromTheTides.class)); + cards.add(new SetCardInfo("River's Rebuke", 24, Rarity.RARE, mage.cards.r.RiversRebuke.class)); + cards.add(new SetCardInfo("Salvager of Secrets", 25, Rarity.COMMON, mage.cards.s.SalvagerOfSecrets.class)); + cards.add(new SetCardInfo("Sparktongue Dragon", 43, Rarity.COMMON, mage.cards.s.SparktongueDragon.class)); cards.add(new SetCardInfo("Sphinx of Enlightenment", 2, Rarity.MYTHIC, mage.cards.s.SphinxOfEnlightenment.class)); - } + cards.add(new SetCardInfo("Spidery Grasp", 51, Rarity.COMMON, mage.cards.s.SpideryGrasp.class)); + cards.add(new SetCardInfo("Steppe Glider", 12, Rarity.UNCOMMON, mage.cards.s.SteppeGlider.class)); + cards.add(new SetCardInfo("Swamp", 59, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", 60, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Take Vengeance", 13, Rarity.COMMON, mage.cards.t.TakeVengeance.class)); + cards.add(new SetCardInfo("Tattered Mummy", 34, Rarity.COMMON, mage.cards.t.TatteredMummy.class)); + cards.add(new SetCardInfo("Thunderherd Migration", 52, Rarity.UNCOMMON, mage.cards.t.ThunderherdMigration.class)); + cards.add(new SetCardInfo("Thundering Spineback", 53, Rarity.UNCOMMON, mage.cards.t.ThunderingSpineback.class)); + cards.add(new SetCardInfo("Topan Freeblade", 14, Rarity.COMMON, mage.cards.t.TopanFreeblade.class)); + cards.add(new SetCardInfo("Torgaar, Famine Incarnate", 35, Rarity.RARE, mage.cards.t.TorgaarFamineIncarnate.class)); + cards.add(new SetCardInfo("Voldaren Duelist", 44, Rarity.COMMON, mage.cards.v.VoldarenDuelist.class)); + cards.add(new SetCardInfo("Zealot of the God-Pharaoh", 45, Rarity.COMMON, mage.cards.z.ZealotOfTheGodPharaoh.class)); + cards.add(new SetCardInfo("Zetalpa, Primal Dawn", 15, Rarity.RARE, mage.cards.z.ZetalpaPrimalDawn.class)); + } } From 3f288ef04ec0845aad5f6ae0620e6b8fe811a8d1 Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Mon, 16 Mar 2020 16:34:51 +0100 Subject: [PATCH 119/182] Added the Secret Lair (SLD, PSLD, SLU) sets. --- Mage.Sets/src/mage/sets/SecretLairDrop.java | 78 +++++++++++++++++++ .../src/mage/sets/SecretLairDropPromos.java | 58 ++++++++++++++ .../mage/sets/SecretLairUltimateEdition.java | 29 +++++++ .../mage/cards/repository/CardRepository.java | 1 + 4 files changed, 166 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/SecretLairDrop.java create mode 100644 Mage.Sets/src/mage/sets/SecretLairDropPromos.java create mode 100644 Mage.Sets/src/mage/sets/SecretLairUltimateEdition.java diff --git a/Mage.Sets/src/mage/sets/SecretLairDrop.java b/Mage.Sets/src/mage/sets/SecretLairDrop.java new file mode 100644 index 00000000000..dd852fb5d59 --- /dev/null +++ b/Mage.Sets/src/mage/sets/SecretLairDrop.java @@ -0,0 +1,78 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/sld + */ +public class SecretLairDrop extends ExpansionSet { + + private static final SecretLairDrop instance = new SecretLairDrop(); + + public static SecretLairDrop getInstance() { + return instance; + } + + private SecretLairDrop() { + super("Secret Lair Drop", "SLD", ExpansionSet.buildDate(2020, 3, 12), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = true; + + cards.add(new SetCardInfo("Arahbo, Roar of the World", 25, Rarity.MYTHIC, mage.cards.a.ArahboRoarOfTheWorld.class)); + cards.add(new SetCardInfo("Athreos, God of Passage", 76, Rarity.MYTHIC, mage.cards.a.AthreosGodOfPassage.class)); + cards.add(new SetCardInfo("Bitterblossom", 12, Rarity.MYTHIC, mage.cards.b.Bitterblossom.class)); + cards.add(new SetCardInfo("Bloodghast", 6, Rarity.RARE, mage.cards.b.Bloodghast.class)); + cards.add(new SetCardInfo("Captain Sisay", 51, Rarity.MYTHIC, mage.cards.c.CaptainSisay.class)); + cards.add(new SetCardInfo("Ephara, God of the Polis", 72, Rarity.MYTHIC, mage.cards.e.EpharaGodOfThePolis.class)); + cards.add(new SetCardInfo("Erebos, God of the Dead", 74, Rarity.MYTHIC, mage.cards.e.ErebosGodOfTheDead.class)); + cards.add(new SetCardInfo("Goblin Bushwhacker", 17, Rarity.RARE, mage.cards.g.GoblinBushwhacker.class)); + cards.add(new SetCardInfo("Goblin King", 19, Rarity.RARE, mage.cards.g.GoblinKing.class)); + cards.add(new SetCardInfo("Goblin Lackey", 20, Rarity.RARE, mage.cards.g.GoblinLackey.class)); + cards.add(new SetCardInfo("Goblin Piledriver", 21, Rarity.RARE, mage.cards.g.GoblinPiledriver.class)); + cards.add(new SetCardInfo("Goblin Sharpshooter", 18, Rarity.RARE, mage.cards.g.GoblinSharpshooter.class)); + cards.add(new SetCardInfo("Golgari Thug", 7, Rarity.RARE, mage.cards.g.GolgariThug.class)); + cards.add(new SetCardInfo("Heliod, God of the Sun", 68, Rarity.MYTHIC, mage.cards.h.HeliodGodOfTheSun.class)); + cards.add(new SetCardInfo("Ink-Eyes, Servant of Oni", 33, Rarity.RARE, mage.cards.i.InkEyesServantOfOni.class)); + cards.add(new SetCardInfo("Iroas, God of Victory", 70, Rarity.MYTHIC, mage.cards.i.IroasGodOfVictory.class)); + cards.add(new SetCardInfo("Karametra, God of Harvests", 69, Rarity.MYTHIC, mage.cards.k.KarametraGodOfHarvests.class)); + cards.add(new SetCardInfo("Keranos, God of Storms", 79, Rarity.MYTHIC, mage.cards.k.KeranosGodOfStorms.class)); + cards.add(new SetCardInfo("Kruphix, God of Horizons", 73, Rarity.MYTHIC, mage.cards.k.KruphixGodOfHorizons.class)); + cards.add(new SetCardInfo("Leonin Warleader", 22, Rarity.RARE, mage.cards.l.LeoninWarleader.class)); + cards.add(new SetCardInfo("Life from the Loam", 8, Rarity.RARE, mage.cards.l.LifeFromTheLoam.class)); + cards.add(new SetCardInfo("Marrow-Gnawer", 34, Rarity.RARE, mage.cards.m.MarrowGnawer.class)); + cards.add(new SetCardInfo("Meren of Clan Nel Toth", 52, Rarity.MYTHIC, mage.cards.m.MerenOfClanNelToth.class)); + cards.add(new SetCardInfo("Mirri, Weatherlight Duelist", 26, Rarity.MYTHIC, mage.cards.m.MirriWeatherlightDuelist.class)); + cards.add(new SetCardInfo("Mogis, God of Slaughter", 78, Rarity.MYTHIC, mage.cards.m.MogisGodOfSlaughter.class)); + cards.add(new SetCardInfo("Narset, Enlightened Master", 53, Rarity.MYTHIC, mage.cards.n.NarsetEnlightenedMaster.class)); + cards.add(new SetCardInfo("Nylea, God of the Hunt", 80, Rarity.MYTHIC, mage.cards.n.NyleaGodOfTheHunt.class)); + cards.add(new SetCardInfo("Oona, Queen of the Fae", 54, Rarity.MYTHIC, mage.cards.o.OonaQueenOfTheFae.class)); + cards.add(new SetCardInfo("Pack Rat", 35, Rarity.RARE, mage.cards.p.PackRat.class)); + cards.add(new SetCardInfo("Pharika, God of Affliction", 82, Rarity.MYTHIC, mage.cards.p.PharikaGodOfAffliction.class)); + cards.add(new SetCardInfo("Phenax, God of Deception", 75, Rarity.MYTHIC, mage.cards.p.PhenaxGodOfDeception.class)); + cards.add(new SetCardInfo("Purphoros, God of the Forge", 77, Rarity.MYTHIC, mage.cards.p.PurphorosGodOfTheForge.class)); + cards.add(new SetCardInfo("Qasali Slingers", 24, Rarity.RARE, mage.cards.q.QasaliSlingers.class)); + cards.add(new SetCardInfo("Rat Colony", 36, Rarity.RARE, mage.cards.r.RatColony.class)); + cards.add(new SetCardInfo("Reaper King", 9, Rarity.MYTHIC, mage.cards.r.ReaperKing.class)); + cards.add(new SetCardInfo("Regal Caracal", 23, Rarity.RARE, mage.cards.r.RegalCaracal.class)); + cards.add(new SetCardInfo("Saskia the Unyielding", 55, Rarity.MYTHIC, mage.cards.s.SaskiaTheUnyielding.class)); + cards.add(new SetCardInfo("Serum Visions", 29, Rarity.RARE, mage.cards.s.SerumVisions.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Serum Visions", 30, Rarity.RARE, mage.cards.s.SerumVisions.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Serum Visions", 31, Rarity.RARE, mage.cards.s.SerumVisions.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Serum Visions", 32, Rarity.RARE, mage.cards.s.SerumVisions.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Sliver Overlord", 10, Rarity.MYTHIC, mage.cards.s.SliverOverlord.class)); + cards.add(new SetCardInfo("Snow-Covered Forest", 5, Rarity.LAND, mage.cards.s.SnowCoveredForest.class)); + cards.add(new SetCardInfo("Snow-Covered Island", 2, Rarity.LAND, mage.cards.s.SnowCoveredIsland.class)); + cards.add(new SetCardInfo("Snow-Covered Mountain", 4, Rarity.LAND, mage.cards.s.SnowCoveredMountain.class)); + cards.add(new SetCardInfo("Snow-Covered Plains", 1, Rarity.LAND, mage.cards.s.SnowCoveredPlains.class)); + cards.add(new SetCardInfo("Snow-Covered Swamp", 3, Rarity.LAND, mage.cards.s.SnowCoveredSwamp.class)); + cards.add(new SetCardInfo("Thalia, Guardian of Thraben", 37, Rarity.RARE, mage.cards.t.ThaliaGuardianOfThraben.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Thalia, Guardian of Thraben", 38, Rarity.RARE, mage.cards.t.ThaliaGuardianOfThraben.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Thalia, Guardian of Thraben", 39, Rarity.RARE, mage.cards.t.ThaliaGuardianOfThraben.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Thalia, Guardian of Thraben", 40, Rarity.RARE, mage.cards.t.ThaliaGuardianOfThraben.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Thassa, God of the Sea", 71, Rarity.MYTHIC, mage.cards.t.ThassaGodOfTheSea.class)); + cards.add(new SetCardInfo("The Ur-Dragon", 11, Rarity.MYTHIC, mage.cards.t.TheUrDragon.class)); + cards.add(new SetCardInfo("Xenagos, God of Revels", 81, Rarity.MYTHIC, mage.cards.x.XenagosGodOfRevels.class)); + } +} diff --git a/Mage.Sets/src/mage/sets/SecretLairDropPromos.java b/Mage.Sets/src/mage/sets/SecretLairDropPromos.java new file mode 100644 index 00000000000..2c13baa7745 --- /dev/null +++ b/Mage.Sets/src/mage/sets/SecretLairDropPromos.java @@ -0,0 +1,58 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/psld + */ +public class SecretLairDropPromos extends ExpansionSet { + + private static final SecretLairDropPromos instance = new SecretLairDropPromos(); + + public static SecretLairDropPromos getInstance() { + return instance; + } + + private SecretLairDropPromos() { + super("Secret Lair Drop Promos", "PSLD", ExpansionSet.buildDate(2020, 2, 18), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Ajani, the Greathearted", 520, Rarity.RARE, mage.cards.a.AjaniTheGreathearted.class)); + cards.add(new SetCardInfo("Angrath, Captain of Chaos", 527, Rarity.UNCOMMON, mage.cards.a.AngrathCaptainOfChaos.class)); + cards.add(new SetCardInfo("Arlinn, Voice of the Pack", 516, Rarity.UNCOMMON, mage.cards.a.ArlinnVoiceOfThePack.class)); + cards.add(new SetCardInfo("Ashiok, Dream Render", 528, Rarity.UNCOMMON, mage.cards.a.AshiokDreamRender.class)); + cards.add(new SetCardInfo("Chandra, Fire Artisan", 512, Rarity.RARE, mage.cards.c.ChandraFireArtisan.class)); + cards.add(new SetCardInfo("Davriel, Rogue Shadowmage", 509, Rarity.UNCOMMON, mage.cards.d.DavrielRogueShadowmage.class)); + cards.add(new SetCardInfo("Domri, Anarch of Bolas", 521, Rarity.RARE, mage.cards.d.DomriAnarchOfBolas.class)); + cards.add(new SetCardInfo("Dovin, Hand of Control", 529, Rarity.UNCOMMON, mage.cards.d.DovinHandOfControl.class)); + cards.add(new SetCardInfo("Gideon Blackblade", 503, Rarity.MYTHIC, mage.cards.g.GideonBlackblade.class)); + cards.add(new SetCardInfo("Huatli, the Sun's Heart", 530, Rarity.UNCOMMON, mage.cards.h.HuatliTheSunsHeart.class)); + cards.add(new SetCardInfo("Jace, Wielder of Mysteries", 506, Rarity.RARE, mage.cards.j.JaceWielderOfMysteries.class)); + cards.add(new SetCardInfo("Jaya, Venerated Firemage", 513, Rarity.UNCOMMON, mage.cards.j.JayaVeneratedFiremage.class)); + cards.add(new SetCardInfo("Jiang Yanggu, Wildcrafter", 517, Rarity.UNCOMMON, mage.cards.j.JiangYangguWildcrafter.class)); + cards.add(new SetCardInfo("Kasmina, Enigmatic Mentor", 507, Rarity.UNCOMMON, mage.cards.k.KasminaEnigmaticMentor.class)); + cards.add(new SetCardInfo("Kaya, Bane of the Dead", 531, Rarity.UNCOMMON, mage.cards.k.KayaBaneOfTheDead.class)); + cards.add(new SetCardInfo("Kiora, Behemoth Beckoner", 532, Rarity.UNCOMMON, mage.cards.k.KioraBehemothBeckoner.class)); + cards.add(new SetCardInfo("Liliana, Dreadhorde General", 510, Rarity.MYTHIC, mage.cards.l.LilianaDreadhordeGeneral.class)); + cards.add(new SetCardInfo("Nahiri, Storm of Stone", 533, Rarity.UNCOMMON, mage.cards.n.NahiriStormOfStone.class)); + cards.add(new SetCardInfo("Narset, Parter of Veils", 508, Rarity.UNCOMMON, mage.cards.n.NarsetParterOfVeils.class)); + cards.add(new SetCardInfo("Nicol Bolas, Dragon-God", 522, Rarity.MYTHIC, mage.cards.n.NicolBolasDragonGod.class)); + cards.add(new SetCardInfo("Nissa, Who Shakes the World", 518, Rarity.RARE, mage.cards.n.NissaWhoShakesTheWorld.class)); + cards.add(new SetCardInfo("Ob Nixilis, the Hate-Twisted", 511, Rarity.UNCOMMON, mage.cards.o.ObNixilisTheHateTwisted.class)); + cards.add(new SetCardInfo("Ral, Storm Conduit", 523, Rarity.RARE, mage.cards.r.RalStormConduit.class)); + cards.add(new SetCardInfo("Saheeli, Sublime Artificer", 534, Rarity.UNCOMMON, mage.cards.s.SaheeliSublimeArtificer.class)); + cards.add(new SetCardInfo("Samut, Tyrant Smasher", 535, Rarity.UNCOMMON, mage.cards.s.SamutTyrantSmasher.class)); + cards.add(new SetCardInfo("Sarkhan the Masterless", 514, Rarity.RARE, mage.cards.s.SarkhanTheMasterless.class)); + cards.add(new SetCardInfo("Sorin, Vengeful Bloodlord", 524, Rarity.RARE, mage.cards.s.SorinVengefulBloodlord.class)); + cards.add(new SetCardInfo("Tamiyo, Collector of Tales", 525, Rarity.RARE, mage.cards.t.TamiyoCollectorOfTales.class)); + cards.add(new SetCardInfo("Teferi, Time Raveler", 526, Rarity.RARE, mage.cards.t.TeferiTimeRaveler.class)); + cards.add(new SetCardInfo("Teyo, the Shieldmage", 504, Rarity.UNCOMMON, mage.cards.t.TeyoTheShieldmage.class)); + cards.add(new SetCardInfo("The Wanderer", 505, Rarity.UNCOMMON, mage.cards.t.TheWanderer.class)); + cards.add(new SetCardInfo("Tibalt, Rakish Instigator", 515, Rarity.UNCOMMON, mage.cards.t.TibaltRakishInstigator.class)); + cards.add(new SetCardInfo("Vivien, Champion of the Wilds", 519, Rarity.RARE, mage.cards.v.VivienChampionOfTheWilds.class)); + cards.add(new SetCardInfo("Vraska, Swarm's Eminence", 536, Rarity.UNCOMMON, mage.cards.v.VraskaSwarmsEminence.class)); + } +} diff --git a/Mage.Sets/src/mage/sets/SecretLairUltimateEdition.java b/Mage.Sets/src/mage/sets/SecretLairUltimateEdition.java new file mode 100644 index 00000000000..edb3b4e22b9 --- /dev/null +++ b/Mage.Sets/src/mage/sets/SecretLairUltimateEdition.java @@ -0,0 +1,29 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/slu + */ +public class SecretLairUltimateEdition extends ExpansionSet { + + private static final SecretLairUltimateEdition instance = new SecretLairUltimateEdition(); + + public static SecretLairUltimateEdition getInstance() { + return instance; + } + + private SecretLairUltimateEdition() { + super("Secret Lair: Ultimate Edition", "SLU", ExpansionSet.buildDate(2020, 5, 29), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Arid Mesa", 4, Rarity.RARE, mage.cards.a.AridMesa.class)); + cards.add(new SetCardInfo("Marsh Flats", 1, Rarity.RARE, mage.cards.m.MarshFlats.class)); + cards.add(new SetCardInfo("Misty Rainforest", 5, Rarity.RARE, mage.cards.m.MistyRainforest.class)); + cards.add(new SetCardInfo("Scalding Tarn", 2, Rarity.RARE, mage.cards.s.ScaldingTarn.class)); + cards.add(new SetCardInfo("Verdant Catacombs", 3, Rarity.RARE, mage.cards.v.VerdantCatacombs.class)); + } +} diff --git a/Mage/src/main/java/mage/cards/repository/CardRepository.java b/Mage/src/main/java/mage/cards/repository/CardRepository.java index d77c31bd1ad..690da5f9fa5 100644 --- a/Mage/src/main/java/mage/cards/repository/CardRepository.java +++ b/Mage/src/main/java/mage/cards/repository/CardRepository.java @@ -179,6 +179,7 @@ public enum CardRepository { public Boolean haveSnowLands(String setCode) { return setCode.equals("CSP") || setCode.equals("MH1") + || setCode.equals("SLD") || setCode.equals("ME2") || setCode.equals("ICE"); } From 4ba92292e26e135b5966e5de634ac423e9925c73 Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Mon, 16 Mar 2020 17:17:27 +0100 Subject: [PATCH 120/182] Added the Duel Decks: Mirrodin Pure vs. New Phyrexia (TD2) set. --- .../DuelDecksMirrodinPureVsNewPhyrexia.java | 112 ++++++++++++++++++ 1 file changed, 112 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/DuelDecksMirrodinPureVsNewPhyrexia.java diff --git a/Mage.Sets/src/mage/sets/DuelDecksMirrodinPureVsNewPhyrexia.java b/Mage.Sets/src/mage/sets/DuelDecksMirrodinPureVsNewPhyrexia.java new file mode 100644 index 00000000000..aeabfef7f19 --- /dev/null +++ b/Mage.Sets/src/mage/sets/DuelDecksMirrodinPureVsNewPhyrexia.java @@ -0,0 +1,112 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/td2 + */ +public class DuelDecksMirrodinPureVsNewPhyrexia extends ExpansionSet { + + private static final DuelDecksMirrodinPureVsNewPhyrexia instance = new DuelDecksMirrodinPureVsNewPhyrexia(); + + public static DuelDecksMirrodinPureVsNewPhyrexia getInstance() { + return instance; + } + + private DuelDecksMirrodinPureVsNewPhyrexia() { + super("Duel Decks: Mirrodin Pure vs. New Phyrexia", "TD2", ExpansionSet.buildDate(2011, 5, 14), SetType.SUPPLEMENTAL); + this.hasBoosters = false; + this.hasBasicLands = true; + + cards.add(new SetCardInfo("Ancient Den", 36, Rarity.COMMON, mage.cards.a.AncientDen.class)); + cards.add(new SetCardInfo("Ardent Recruit", 4, Rarity.COMMON, mage.cards.a.ArdentRecruit.class)); + cards.add(new SetCardInfo("Argent Sphinx", 13, Rarity.RARE, mage.cards.a.ArgentSphinx.class)); + cards.add(new SetCardInfo("Arrest", 32, Rarity.COMMON, mage.cards.a.Arrest.class)); + cards.add(new SetCardInfo("Barter in Blood", 76, Rarity.UNCOMMON, mage.cards.b.BarterInBlood.class)); + cards.add(new SetCardInfo("Black Sun's Zenith", 81, Rarity.RARE, mage.cards.b.BlackSunsZenith.class)); + cards.add(new SetCardInfo("Blinkmoth Nexus", 37, Rarity.RARE, mage.cards.b.BlinkmothNexus.class)); + cards.add(new SetCardInfo("Bonesplitter", 20, Rarity.COMMON, mage.cards.b.Bonesplitter.class)); + cards.add(new SetCardInfo("Coastal Tower", 38, Rarity.UNCOMMON, mage.cards.c.CoastalTower.class)); + cards.add(new SetCardInfo("Condemn", 22, Rarity.UNCOMMON, mage.cards.c.Condemn.class)); + cards.add(new SetCardInfo("Contagion Clasp", 67, Rarity.UNCOMMON, mage.cards.c.ContagionClasp.class)); + cards.add(new SetCardInfo("Darksteel Gargoyle", 19, Rarity.UNCOMMON, mage.cards.d.DarksteelGargoyle.class)); + cards.add(new SetCardInfo("Darksteel Sentinel", 16, Rarity.UNCOMMON, mage.cards.d.DarksteelSentinel.class)); + cards.add(new SetCardInfo("Desecration Elemental", 57, Rarity.RARE, mage.cards.d.DesecrationElemental.class)); + cards.add(new SetCardInfo("Diabolic Servitude", 75, Rarity.UNCOMMON, mage.cards.d.DiabolicServitude.class)); + cards.add(new SetCardInfo("Dispatch", 23, Rarity.UNCOMMON, mage.cards.d.Dispatch.class)); + cards.add(new SetCardInfo("Drooling Groodion", 64, Rarity.UNCOMMON, mage.cards.d.DroolingGroodion.class)); + cards.add(new SetCardInfo("Duplicant", 17, Rarity.RARE, mage.cards.d.Duplicant.class)); + cards.add(new SetCardInfo("Exhume", 70, Rarity.COMMON, mage.cards.e.Exhume.class)); + cards.add(new SetCardInfo("Flesh-Eater Imp", 58, Rarity.UNCOMMON, mage.cards.f.FleshEaterImp.class)); + cards.add(new SetCardInfo("Forbidding Watchtower", 39, Rarity.UNCOMMON, mage.cards.f.ForbiddingWatchtower.class)); + cards.add(new SetCardInfo("Forest", 86, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", 87, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", 88, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Fume Spitter", 49, Rarity.COMMON, mage.cards.f.FumeSpitter.class)); + cards.add(new SetCardInfo("Glimmerpoint Stag", 12, Rarity.UNCOMMON, mage.cards.g.GlimmerpointStag.class)); + cards.add(new SetCardInfo("Gold Myr", 6, Rarity.COMMON, mage.cards.g.GoldMyr.class)); + cards.add(new SetCardInfo("Grafted Exoskeleton", 74, Rarity.UNCOMMON, mage.cards.g.GraftedExoskeleton.class)); + cards.add(new SetCardInfo("Grand Architect", 10, Rarity.RARE, mage.cards.g.GrandArchitect.class)); + cards.add(new SetCardInfo("Innocent Blood", 66, Rarity.COMMON, mage.cards.i.InnocentBlood.class)); + cards.add(new SetCardInfo("Island", 45, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", 46, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", 47, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Kuldotha Forgemaster", 14, Rarity.RARE, mage.cards.k.KuldothaForgemaster.class)); + cards.add(new SetCardInfo("Lumengrid Gargoyle", 18, Rarity.UNCOMMON, mage.cards.l.LumengridGargoyle.class)); + cards.add(new SetCardInfo("Memnite", 2, Rarity.UNCOMMON, mage.cards.m.Memnite.class)); + cards.add(new SetCardInfo("Mitotic Slime", 61, Rarity.RARE, mage.cards.m.MitoticSlime.class)); + cards.add(new SetCardInfo("Morbid Plunder", 72, Rarity.COMMON, mage.cards.m.MorbidPlunder.class)); + cards.add(new SetCardInfo("Mortarpod", 68, Rarity.UNCOMMON, mage.cards.m.Mortarpod.class)); + cards.add(new SetCardInfo("Myr Retriever", 7, Rarity.UNCOMMON, mage.cards.m.MyrRetriever.class)); + cards.add(new SetCardInfo("Myr Sire", 50, Rarity.COMMON, mage.cards.m.MyrSire.class)); + cards.add(new SetCardInfo("Necroskitter", 55, Rarity.RARE, mage.cards.n.Necroskitter.class)); + cards.add(new SetCardInfo("Neurok Stealthsuit", 25, Rarity.COMMON, mage.cards.n.NeurokStealthsuit.class)); + cards.add(new SetCardInfo("One Dozen Eyes", 80, Rarity.UNCOMMON, mage.cards.o.OneDozenEyes.class)); + cards.add(new SetCardInfo("Phyrexian Altar", 71, Rarity.RARE, mage.cards.p.PhyrexianAltar.class)); + cards.add(new SetCardInfo("Phyrexian Ghoul", 53, Rarity.COMMON, mage.cards.p.PhyrexianGhoul.class)); + cards.add(new SetCardInfo("Phyrexian Juggernaut", 63, Rarity.UNCOMMON, mage.cards.p.PhyrexianJuggernaut.class)); + cards.add(new SetCardInfo("Phyrexian Plaguelord", 48, Rarity.MYTHIC, mage.cards.p.PhyrexianPlaguelord.class)); + cards.add(new SetCardInfo("Plague Myr", 51, Rarity.UNCOMMON, mage.cards.p.PlagueMyr.class)); + cards.add(new SetCardInfo("Plaguemaw Beast", 62, Rarity.UNCOMMON, mage.cards.p.PlaguemawBeast.class)); + cards.add(new SetCardInfo("Plains", 42, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", 43, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", 44, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Platinum Angel", 1, Rarity.MYTHIC, mage.cards.p.PlatinumAngel.class)); + cards.add(new SetCardInfo("Protean Hulk", 65, Rarity.RARE, mage.cards.p.ProteanHulk.class)); + cards.add(new SetCardInfo("Purge", 28, Rarity.UNCOMMON, mage.cards.p.Purge.class)); + cards.add(new SetCardInfo("Putrefy", 73, Rarity.UNCOMMON, mage.cards.p.Putrefy.class)); + cards.add(new SetCardInfo("Reprocess", 77, Rarity.RARE, mage.cards.r.Reprocess.class)); + cards.add(new SetCardInfo("Rot Wolf", 54, Rarity.COMMON, mage.cards.r.RotWolf.class)); + cards.add(new SetCardInfo("Seat of the Synod", 40, Rarity.COMMON, mage.cards.s.SeatOfTheSynod.class)); + cards.add(new SetCardInfo("Silent Arbiter", 11, Rarity.RARE, mage.cards.s.SilentArbiter.class)); + cards.add(new SetCardInfo("Silver Myr", 8, Rarity.COMMON, mage.cards.s.SilverMyr.class)); + cards.add(new SetCardInfo("Slagwurm Armor", 21, Rarity.COMMON, mage.cards.s.SlagwurmArmor.class)); + cards.add(new SetCardInfo("Soul Snuffers", 60, Rarity.UNCOMMON, mage.cards.s.SoulSnuffers.class)); + cards.add(new SetCardInfo("Spawning Pit", 69, Rarity.UNCOMMON, mage.cards.s.SpawningPit.class)); + cards.add(new SetCardInfo("Spire Serpent", 15, Rarity.COMMON, mage.cards.s.SpireSerpent.class)); + cards.add(new SetCardInfo("Spread the Sickness", 79, Rarity.COMMON, mage.cards.s.SpreadTheSickness.class)); + cards.add(new SetCardInfo("Steel Wall", 3, Rarity.COMMON, mage.cards.s.SteelWall.class)); + cards.add(new SetCardInfo("Steelshaper's Gift", 24, Rarity.UNCOMMON, mage.cards.s.SteelshapersGift.class)); + cards.add(new SetCardInfo("Stoic Rebuttal", 34, Rarity.COMMON, mage.cards.s.StoicRebuttal.class)); + cards.add(new SetCardInfo("Swamp", 83, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", 84, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", 85, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Symbiotic Elf", 59, Rarity.COMMON, mage.cards.s.SymbioticElf.class)); + cards.add(new SetCardInfo("Tainted Wood", 82, Rarity.UNCOMMON, mage.cards.t.TaintedWood.class)); + cards.add(new SetCardInfo("Talisman of Progress", 26, Rarity.UNCOMMON, mage.cards.t.TalismanOfProgress.class)); + cards.add(new SetCardInfo("Terramorphic Expanse", 41, Rarity.COMMON, mage.cards.t.TerramorphicExpanse.class)); + cards.add(new SetCardInfo("Test of Faith", 29, Rarity.UNCOMMON, mage.cards.t.TestOfFaith.class)); + cards.add(new SetCardInfo("Thirst for Knowledge", 33, Rarity.UNCOMMON, mage.cards.t.ThirstForKnowledge.class)); + cards.add(new SetCardInfo("Thunderstaff", 31, Rarity.UNCOMMON, mage.cards.t.Thunderstaff.class)); + cards.add(new SetCardInfo("Trinket Mage", 9, Rarity.UNCOMMON, mage.cards.t.TrinketMage.class)); + cards.add(new SetCardInfo("Triumph of the Hordes", 78, Rarity.UNCOMMON, mage.cards.t.TriumphOfTheHordes.class)); + cards.add(new SetCardInfo("Turn the Tide", 30, Rarity.COMMON, mage.cards.t.TurnTheTide.class)); + cards.add(new SetCardInfo("Vedalken Certarch", 5, Rarity.COMMON, mage.cards.v.VedalkenCertarch.class)); + cards.add(new SetCardInfo("Viridian Claw", 27, Rarity.UNCOMMON, mage.cards.v.ViridianClaw.class)); + cards.add(new SetCardInfo("Viridian Corrupter", 56, Rarity.UNCOMMON, mage.cards.v.ViridianCorrupter.class)); + cards.add(new SetCardInfo("Viridian Emissary", 52, Rarity.COMMON, mage.cards.v.ViridianEmissary.class)); + cards.add(new SetCardInfo("White Sun's Zenith", 35, Rarity.RARE, mage.cards.w.WhiteSunsZenith.class)); + } +} From 0060846daba722ddfc2f3842960863445dcc2885 Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Mon, 16 Mar 2020 18:27:11 +0100 Subject: [PATCH 121/182] Resolved set code clash between Mythic Edition and Masters Edition. Both now use the code from Scryfall. Converted line endings from CLRF to LF. --- Mage.Sets/src/mage/sets/MastersEdition.java | 444 ++++++++++---------- Mage.Sets/src/mage/sets/MythicEdition.java | 2 +- 2 files changed, 223 insertions(+), 223 deletions(-) diff --git a/Mage.Sets/src/mage/sets/MastersEdition.java b/Mage.Sets/src/mage/sets/MastersEdition.java index 17317b3cd8a..efb3378435f 100644 --- a/Mage.Sets/src/mage/sets/MastersEdition.java +++ b/Mage.Sets/src/mage/sets/MastersEdition.java @@ -1,223 +1,223 @@ - -package mage.sets; - -import mage.cards.ExpansionSet; -import mage.constants.Rarity; -import mage.constants.SetType; - -/** - * @author LevelX2 - */ -public final class MastersEdition extends ExpansionSet { - - private static final MastersEdition instance = new MastersEdition(); - - public static MastersEdition getInstance() { - return instance; - } - - private MastersEdition() { - super("Masters Edition", "MED", ExpansionSet.buildDate(2007, 9, 10), SetType.MAGIC_ONLINE); - this.hasBasicLands = true; - this.hasBoosters = true; - this.numBoosterLands = 1; - this.numBoosterCommon = 10; - this.numBoosterUncommon = 3; - this.numBoosterRare = 1; - this.ratioBoosterMythic = 0; - - cards.add(new SetCardInfo("Adun Oakenshield", 141, Rarity.RARE, mage.cards.a.AdunOakenshield.class)); - cards.add(new SetCardInfo("Amnesia", 29, Rarity.RARE, mage.cards.a.Amnesia.class)); - cards.add(new SetCardInfo("Angry Mob", 1, Rarity.UNCOMMON, mage.cards.a.AngryMob.class)); - cards.add(new SetCardInfo("Animate Dead", 57, Rarity.UNCOMMON, mage.cards.a.AnimateDead.class)); - cards.add(new SetCardInfo("Animate Wall", 2, Rarity.UNCOMMON, mage.cards.a.AnimateWall.class)); - cards.add(new SetCardInfo("Ankh of Mishra", 151, Rarity.RARE, mage.cards.a.AnkhOfMishra.class)); - cards.add(new SetCardInfo("Apprentice Wizard", 30, Rarity.COMMON, mage.cards.a.ApprenticeWizard.class)); - cards.add(new SetCardInfo("Arcane Denial", 31, Rarity.COMMON, mage.cards.a.ArcaneDenial.class)); - cards.add(new SetCardInfo("Argivian Archaeologist", 3, Rarity.RARE, mage.cards.a.ArgivianArchaeologist.class)); - cards.add(new SetCardInfo("Armageddon", 4, Rarity.RARE, mage.cards.a.Armageddon.class)); - cards.add(new SetCardInfo("Artifact Blast", 85, Rarity.COMMON, mage.cards.a.ArtifactBlast.class)); - cards.add(new SetCardInfo("Ashnod's Transmogrant", 152, Rarity.COMMON, mage.cards.a.AshnodsTransmogrant.class)); - cards.add(new SetCardInfo("Autumn Willow", 113, Rarity.RARE, mage.cards.a.AutumnWillow.class)); - cards.add(new SetCardInfo("Balduvian Horde", 86, Rarity.RARE, mage.cards.b.BalduvianHorde.class)); - cards.add(new SetCardInfo("Ball Lightning", 87, Rarity.RARE, mage.cards.b.BallLightning.class)); - cards.add(new SetCardInfo("Baron Sengir", 58, Rarity.RARE, mage.cards.b.BaronSengir.class)); - cards.add(new SetCardInfo("Basal Thrull", 59, Rarity.COMMON, mage.cards.b.BasalThrull.class)); - cards.add(new SetCardInfo("Benalish Hero", 5, Rarity.COMMON, mage.cards.b.BenalishHero.class)); - cards.add(new SetCardInfo("Berserk", 114, Rarity.RARE, mage.cards.b.Berserk.class)); - cards.add(new SetCardInfo("Bestial Fury", 88, Rarity.COMMON, mage.cards.b.BestialFury.class)); - cards.add(new SetCardInfo("Black Knight", 60, Rarity.UNCOMMON, mage.cards.b.BlackKnight.class)); - cards.add(new SetCardInfo("Blight", 61, Rarity.UNCOMMON, mage.cards.b.Blight.class)); - cards.add(new SetCardInfo("Breeding Pit", 62, Rarity.UNCOMMON, mage.cards.b.BreedingPit.class)); - cards.add(new SetCardInfo("Brothers of Fire", 89, Rarity.COMMON, mage.cards.b.BrothersOfFire.class)); - cards.add(new SetCardInfo("Carnivorous Plant", 115, Rarity.UNCOMMON, mage.cards.c.CarnivorousPlant.class)); - cards.add(new SetCardInfo("Centaur Archer", 142, Rarity.UNCOMMON, mage.cards.c.CentaurArcher.class)); - cards.add(new SetCardInfo("Chains of Mephistopheles", 63, Rarity.RARE, mage.cards.c.ChainsOfMephistopheles.class)); - cards.add(new SetCardInfo("Chub Toad", 116, Rarity.COMMON, mage.cards.c.ChubToad.class)); - cards.add(new SetCardInfo("Clockwork Beast", 153, Rarity.UNCOMMON, mage.cards.c.ClockworkBeast.class)); - cards.add(new SetCardInfo("Contagion", 64, Rarity.RARE, mage.cards.c.Contagion.class)); - cards.add(new SetCardInfo("Copper Tablet", 154, Rarity.UNCOMMON, mage.cards.c.CopperTablet.class)); - cards.add(new SetCardInfo("Crookshank Kobolds", 90, Rarity.COMMON, mage.cards.c.CrookshankKobolds.class)); - cards.add(new SetCardInfo("Crusade", 6, Rarity.RARE, mage.cards.c.Crusade.class)); - cards.add(new SetCardInfo("Cuombajj Witches", 65, Rarity.COMMON, mage.cards.c.CuombajjWitches.class)); - cards.add(new SetCardInfo("Cursed Rack", 155, Rarity.UNCOMMON, mage.cards.c.CursedRack.class)); - cards.add(new SetCardInfo("Dakkon Blackblade", 143, Rarity.RARE, mage.cards.d.DakkonBlackblade.class)); - cards.add(new SetCardInfo("Death Speakers", 7, Rarity.COMMON, mage.cards.d.DeathSpeakers.class)); - cards.add(new SetCardInfo("Death Ward", 8, Rarity.COMMON, mage.cards.d.DeathWard.class)); - cards.add(new SetCardInfo("Derelor", 66, Rarity.UNCOMMON, mage.cards.d.Derelor.class)); - cards.add(new SetCardInfo("Diamond Valley", 175, Rarity.RARE, mage.cards.d.DiamondValley.class)); - cards.add(new SetCardInfo("Diminishing Returns", 32, Rarity.RARE, mage.cards.d.DiminishingReturns.class)); - cards.add(new SetCardInfo("Divine Transformation", 9, Rarity.UNCOMMON, mage.cards.d.DivineTransformation.class)); - cards.add(new SetCardInfo("Dragon Engine", 156, Rarity.COMMON, mage.cards.d.DragonEngine.class)); - cards.add(new SetCardInfo("Dust to Dust", 10, Rarity.COMMON, mage.cards.d.DustToDust.class)); - cards.add(new SetCardInfo("Dwarven Catapult", 91, Rarity.UNCOMMON, mage.cards.d.DwarvenCatapult.class)); - cards.add(new SetCardInfo("Dwarven Soldier", 92, Rarity.COMMON, mage.cards.d.DwarvenSoldier.class)); - cards.add(new SetCardInfo("Eater of the Dead", 67, Rarity.UNCOMMON, mage.cards.e.EaterOfTheDead.class)); - cards.add(new SetCardInfo("Elder Land Wurm", 11, Rarity.UNCOMMON, mage.cards.e.ElderLandWurm.class)); - cards.add(new SetCardInfo("Erg Raiders", 68, Rarity.COMMON, mage.cards.e.ErgRaiders.class)); - cards.add(new SetCardInfo("Eureka", 117, Rarity.RARE, mage.cards.e.Eureka.class)); - cards.add(new SetCardInfo("Exile", 12, Rarity.COMMON, mage.cards.e.Exile.class)); - cards.add(new SetCardInfo("The Fallen", 69, Rarity.UNCOMMON, mage.cards.t.TheFallen.class)); - cards.add(new SetCardInfo("Feast or Famine", 70, Rarity.COMMON, mage.cards.f.FeastOrFamine.class)); - cards.add(new SetCardInfo("Fire Covenant", 145, Rarity.UNCOMMON, mage.cards.f.FireCovenant.class)); - cards.add(new SetCardInfo("Fissure", 93, Rarity.COMMON, mage.cards.f.Fissure.class)); - cards.add(new SetCardInfo("Forcefield", 157, Rarity.RARE, mage.cards.f.Forcefield.class)); - cards.add(new SetCardInfo("Force of Will", 33, Rarity.RARE, mage.cards.f.ForceOfWill.class)); - cards.add(new SetCardInfo("Forest", 193, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Forest", 194, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Forest", 195, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Fyndhorn Elves", 118, Rarity.COMMON, mage.cards.f.FyndhornElves.class)); - cards.add(new SetCardInfo("Ghazban Ogre", 120, Rarity.COMMON, mage.cards.g.GhazbanOgre.class)); - cards.add(new SetCardInfo("Giant Tortoise", 34, Rarity.COMMON, mage.cards.g.GiantTortoise.class)); - cards.add(new SetCardInfo("Goblin Chirurgeon", 94, Rarity.COMMON, mage.cards.g.GoblinChirurgeon.class)); - cards.add(new SetCardInfo("Goblin Grenade", 95, Rarity.UNCOMMON, mage.cards.g.GoblinGrenade.class)); - cards.add(new SetCardInfo("Goblin Mutant", 96, Rarity.UNCOMMON, mage.cards.g.GoblinMutant.class)); - cards.add(new SetCardInfo("Goblins of the Flarg", 98, Rarity.COMMON, mage.cards.g.GoblinsOfTheFlarg.class)); - cards.add(new SetCardInfo("Goblin Wizard", 97, Rarity.RARE, mage.cards.g.GoblinWizard.class)); - cards.add(new SetCardInfo("Granite Gargoyle", 99, Rarity.UNCOMMON, mage.cards.g.GraniteGargoyle.class)); - cards.add(new SetCardInfo("Greater Realm of Preservation", 13, Rarity.UNCOMMON, mage.cards.g.GreaterRealmOfPreservation.class)); - cards.add(new SetCardInfo("Hallowed Ground", 14, Rarity.UNCOMMON, mage.cards.h.HallowedGround.class)); - cards.add(new SetCardInfo("Hand of Justice", 15, Rarity.RARE, mage.cards.h.HandOfJustice.class)); - cards.add(new SetCardInfo("Hecatomb", 71, Rarity.RARE, mage.cards.h.Hecatomb.class)); - cards.add(new SetCardInfo("High Tide", 35, Rarity.UNCOMMON, mage.cards.h.HighTide.class)); - cards.add(new SetCardInfo("Holy Light", 16, Rarity.COMMON, mage.cards.h.HolyLight.class)); - cards.add(new SetCardInfo("Homarid Spawning Bed", 36, Rarity.UNCOMMON, mage.cards.h.HomaridSpawningBed.class)); - cards.add(new SetCardInfo("Hungry Mist", 121, Rarity.COMMON, mage.cards.h.HungryMist.class)); - cards.add(new SetCardInfo("Hyalopterous Lemure", 72, Rarity.COMMON, mage.cards.h.HyalopterousLemure.class)); - cards.add(new SetCardInfo("Hydroblast", 37, Rarity.COMMON, mage.cards.h.Hydroblast.class)); - cards.add(new SetCardInfo("Hymn of Rebirth", 146, Rarity.UNCOMMON, mage.cards.h.HymnOfRebirth.class)); - cards.add(new SetCardInfo("Hymn to Tourach", 73, Rarity.UNCOMMON, mage.cards.h.HymnToTourach.class)); - cards.add(new SetCardInfo("Icatian Lieutenant", 17, Rarity.COMMON, mage.cards.i.IcatianLieutenant.class)); - cards.add(new SetCardInfo("Icatian Town", 18, Rarity.UNCOMMON, mage.cards.i.IcatianTown.class)); - cards.add(new SetCardInfo("Ice Storm", 122, Rarity.UNCOMMON, mage.cards.i.IceStorm.class)); - cards.add(new SetCardInfo("Ifh-Biff Efreet", 123, Rarity.RARE, mage.cards.i.IfhBiffEfreet.class)); - cards.add(new SetCardInfo("Illusionary Forces", 38, Rarity.UNCOMMON, mage.cards.i.IllusionaryForces.class)); - cards.add(new SetCardInfo("Illusionary Wall", 39, Rarity.COMMON, mage.cards.i.IllusionaryWall.class)); - cards.add(new SetCardInfo("Illusions of Grandeur", 40, Rarity.RARE, mage.cards.i.IllusionsOfGrandeur.class)); - cards.add(new SetCardInfo("Island", 184, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Island", 185, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Island", 186, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Island of Wak-Wak", 176, Rarity.RARE, mage.cards.i.IslandOfWakWak.class)); - cards.add(new SetCardInfo("Ivory Tower", 158, Rarity.RARE, mage.cards.i.IvoryTower.class)); - cards.add(new SetCardInfo("Jacques le Vert", 147, Rarity.RARE, mage.cards.j.JacquesLeVert.class)); - cards.add(new SetCardInfo("Jokulhaups", 100, Rarity.RARE, mage.cards.j.Jokulhaups.class)); - cards.add(new SetCardInfo("Juxtapose", 41, Rarity.UNCOMMON, mage.cards.j.Juxtapose.class)); - cards.add(new SetCardInfo("Juzam Djinn", 74, Rarity.RARE, mage.cards.j.JuzamDjinn.class)); - cards.add(new SetCardInfo("Keldon Warlord", 101, Rarity.UNCOMMON, mage.cards.k.KeldonWarlord.class)); - cards.add(new SetCardInfo("Khabal Ghoul", 75, Rarity.RARE, mage.cards.k.KhabalGhoul.class)); - cards.add(new SetCardInfo("Knights of Thorn", 19, Rarity.COMMON, mage.cards.k.KnightsOfThorn.class)); - cards.add(new SetCardInfo("Lake of the Dead", 177, Rarity.RARE, mage.cards.l.LakeOfTheDead.class)); - cards.add(new SetCardInfo("Lightning Bolt", 102, Rarity.COMMON, mage.cards.l.LightningBolt.class)); - cards.add(new SetCardInfo("Lim-Dul's Vault", 148, Rarity.UNCOMMON, mage.cards.l.LimDulsVault.class)); - cards.add(new SetCardInfo("Lord of Tresserhorn", 149, Rarity.RARE, mage.cards.l.LordOfTresserhorn.class)); - cards.add(new SetCardInfo("Mana Flare", 103, Rarity.RARE, mage.cards.m.ManaFlare.class)); - cards.add(new SetCardInfo("Marton Stromgald", 104, Rarity.RARE, mage.cards.m.MartonStromgald.class)); - cards.add(new SetCardInfo("Mesa Pegasus", 20, Rarity.COMMON, mage.cards.m.MesaPegasus.class)); - cards.add(new SetCardInfo("Mindstab Thrull", 76, Rarity.COMMON, mage.cards.m.MindstabThrull.class)); - cards.add(new SetCardInfo("Mirror Universe", 159, Rarity.RARE, mage.cards.m.MirrorUniverse.class)); - cards.add(new SetCardInfo("Mishra's Factory", 178, Rarity.UNCOMMON, mage.cards.m.MishrasFactory.class)); - cards.add(new SetCardInfo("Moat", 21, Rarity.RARE, mage.cards.m.Moat.class)); - cards.add(new SetCardInfo("Mountain", 190, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Mountain", 191, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Mountain", 192, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Mountain Yeti", 105, Rarity.COMMON, mage.cards.m.MountainYeti.class)); - cards.add(new SetCardInfo("Mystic Remora", 42, Rarity.UNCOMMON, mage.cards.m.MysticRemora.class)); - cards.add(new SetCardInfo("Nature's Lore", 124, Rarity.COMMON, mage.cards.n.NaturesLore.class)); - cards.add(new SetCardInfo("Nether Shadow", 77, Rarity.UNCOMMON, mage.cards.n.NetherShadow.class)); - cards.add(new SetCardInfo("Nevinyrral's Disk", 160, Rarity.RARE, mage.cards.n.NevinyrralsDisk.class)); - cards.add(new SetCardInfo("Onulet", 161, Rarity.COMMON, mage.cards.o.Onulet.class)); - cards.add(new SetCardInfo("Orcish Mechanics", 106, Rarity.UNCOMMON, mage.cards.o.OrcishMechanics.class)); - cards.add(new SetCardInfo("Order of Leitbur", 22, Rarity.COMMON, mage.cards.o.OrderOfLeitbur.class)); - cards.add(new SetCardInfo("Order of the Ebon Hand", 78, Rarity.COMMON, mage.cards.o.OrderOfTheEbonHand.class)); - cards.add(new SetCardInfo("Oubliette", 79, Rarity.COMMON, mage.cards.o.Oubliette.class)); - cards.add(new SetCardInfo("Paralyze", 80, Rarity.COMMON, mage.cards.p.Paralyze.class)); - cards.add(new SetCardInfo("Petra Sphinx", 23, Rarity.RARE, mage.cards.p.PetraSphinx.class)); - cards.add(new SetCardInfo("Phantom Monster", 43, Rarity.COMMON, mage.cards.p.PhantomMonster.class)); - cards.add(new SetCardInfo("Phelddagrif", 150, Rarity.RARE, mage.cards.p.Phelddagrif.class)); - cards.add(new SetCardInfo("Phyrexian Boon", 81, Rarity.COMMON, mage.cards.p.PhyrexianBoon.class)); - cards.add(new SetCardInfo("Phyrexian War Beast", 162, Rarity.UNCOMMON, mage.cards.p.PhyrexianWarBeast.class)); - cards.add(new SetCardInfo("Plains", 181, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Plains", 182, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Plains", 183, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Polar Kraken", 44, Rarity.RARE, mage.cards.p.PolarKraken.class)); - cards.add(new SetCardInfo("Pox", 82, Rarity.RARE, mage.cards.p.Pox.class)); - cards.add(new SetCardInfo("Preacher", 24, Rarity.RARE, mage.cards.p.Preacher.class)); - cards.add(new SetCardInfo("Primal Order", 125, Rarity.RARE, mage.cards.p.PrimalOrder.class)); - cards.add(new SetCardInfo("Psychic Purge", 45, Rarity.UNCOMMON, mage.cards.p.PsychicPurge.class)); - cards.add(new SetCardInfo("Psychic Venom", 46, Rarity.COMMON, mage.cards.p.PsychicVenom.class)); - cards.add(new SetCardInfo("Pyroblast", 107, Rarity.COMMON, mage.cards.p.Pyroblast.class)); - cards.add(new SetCardInfo("Rabid Wombat", 126, Rarity.UNCOMMON, mage.cards.r.RabidWombat.class)); - cards.add(new SetCardInfo("Rainbow Vale", 179, Rarity.RARE, mage.cards.r.RainbowVale.class)); - cards.add(new SetCardInfo("Righteous Avengers", 25, Rarity.COMMON, mage.cards.r.RighteousAvengers.class)); - cards.add(new SetCardInfo("Ring of Ma'ruf", 163, Rarity.RARE, mage.cards.r.RingOfMaruf.class)); - cards.add(new SetCardInfo("River Merfolk", 47, Rarity.COMMON, mage.cards.r.RiverMerfolk.class)); - cards.add(new SetCardInfo("Roots", 127, Rarity.COMMON, mage.cards.r.Roots.class)); - cards.add(new SetCardInfo("Scryb Sprites", 128, Rarity.COMMON, mage.cards.s.ScrybSprites.class)); - cards.add(new SetCardInfo("Seasinger", 49, Rarity.UNCOMMON, mage.cards.s.Seasinger.class)); - cards.add(new SetCardInfo("Sea Sprite", 48, Rarity.COMMON, mage.cards.s.SeaSprite.class)); - cards.add(new SetCardInfo("Seraph", 26, Rarity.RARE, mage.cards.s.Seraph.class)); - cards.add(new SetCardInfo("Serendib Efreet", 50, Rarity.RARE, mage.cards.s.SerendibEfreet.class)); - cards.add(new SetCardInfo("Serpent Generator", 164, Rarity.RARE, mage.cards.s.SerpentGenerator.class)); - cards.add(new SetCardInfo("Shambling Strider", 129, Rarity.COMMON, mage.cards.s.ShamblingStrider.class)); - cards.add(new SetCardInfo("Shield of the Ages", 165, Rarity.UNCOMMON, mage.cards.s.ShieldOfTheAges.class)); - cards.add(new SetCardInfo("Shield Sphere", 166, Rarity.COMMON, mage.cards.s.ShieldSphere.class)); - cards.add(new SetCardInfo("Singing Tree", 130, Rarity.UNCOMMON, mage.cards.s.SingingTree.class)); - cards.add(new SetCardInfo("Spectral Bears", 131, Rarity.UNCOMMON, mage.cards.s.SpectralBears.class)); - cards.add(new SetCardInfo("Spinal Villain", 108, Rarity.UNCOMMON, mage.cards.s.SpinalVillain.class)); - cards.add(new SetCardInfo("Stone Calendar", 167, Rarity.UNCOMMON, mage.cards.s.StoneCalendar.class)); - cards.add(new SetCardInfo("Stone Giant", 109, Rarity.UNCOMMON, mage.cards.s.StoneGiant.class)); - cards.add(new SetCardInfo("Storm Seeker", 132, Rarity.UNCOMMON, mage.cards.s.StormSeeker.class)); - cards.add(new SetCardInfo("Su-Chi", 168, Rarity.RARE, mage.cards.s.SuChi.class)); - cards.add(new SetCardInfo("Sunken City", 51, Rarity.UNCOMMON, mage.cards.s.SunkenCity.class)); - cards.add(new SetCardInfo("Swamp", 187, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Swamp", 188, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Swamp", 189, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Sylvan Library", 133, Rarity.RARE, mage.cards.s.SylvanLibrary.class)); - cards.add(new SetCardInfo("Tawnos's Coffin", 169, Rarity.RARE, mage.cards.t.TawnossCoffin.class)); - cards.add(new SetCardInfo("Telekinesis", 52, Rarity.COMMON, mage.cards.t.Telekinesis.class)); - cards.add(new SetCardInfo("Thawing Glaciers", 180, Rarity.RARE, mage.cards.t.ThawingGlaciers.class)); - cards.add(new SetCardInfo("Thicket Basilisk", 134, Rarity.UNCOMMON, mage.cards.t.ThicketBasilisk.class)); - cards.add(new SetCardInfo("Thorn Thallid", 135, Rarity.COMMON, mage.cards.t.ThornThallid.class)); - cards.add(new SetCardInfo("Thrull Champion", 83, Rarity.RARE, mage.cards.t.ThrullChampion.class)); - cards.add(new SetCardInfo("Thrull Retainer", 84, Rarity.COMMON, mage.cards.t.ThrullRetainer.class)); - cards.add(new SetCardInfo("Thunder Spirit", 27, Rarity.UNCOMMON, mage.cards.t.ThunderSpirit.class)); - cards.add(new SetCardInfo("Time Elemental", 53, Rarity.RARE, mage.cards.t.TimeElemental.class)); - cards.add(new SetCardInfo("Tivadar's Crusade", 28, Rarity.UNCOMMON, mage.cards.t.TivadarsCrusade.class)); - cards.add(new SetCardInfo("Tornado", 136, Rarity.RARE, mage.cards.t.Tornado.class)); - cards.add(new SetCardInfo("Urza's Bauble", 170, Rarity.UNCOMMON, mage.cards.u.UrzasBauble.class)); - cards.add(new SetCardInfo("Urza's Chalice", 171, Rarity.COMMON, mage.cards.u.UrzasChalice.class)); - cards.add(new SetCardInfo("Varchild's War-Riders", 110, Rarity.RARE, mage.cards.v.VarchildsWarRiders.class)); - cards.add(new SetCardInfo("Vesuvan Doppelganger", 54, Rarity.RARE, mage.cards.v.VesuvanDoppelganger.class)); - cards.add(new SetCardInfo("Vodalian Knights", 55, Rarity.UNCOMMON, mage.cards.v.VodalianKnights.class)); - cards.add(new SetCardInfo("Walking Wall", 172, Rarity.UNCOMMON, mage.cards.w.WalkingWall.class)); - cards.add(new SetCardInfo("Wanderlust", 137, Rarity.COMMON, mage.cards.w.Wanderlust.class)); - cards.add(new SetCardInfo("Winds of Change", 111, Rarity.UNCOMMON, mage.cards.w.WindsOfChange.class)); - cards.add(new SetCardInfo("Winter Blast", 138, Rarity.UNCOMMON, mage.cards.w.WinterBlast.class)); - cards.add(new SetCardInfo("Winter Orb", 173, Rarity.RARE, mage.cards.w.WinterOrb.class)); - cards.add(new SetCardInfo("Word of Undoing", 56, Rarity.COMMON, mage.cards.w.WordOfUndoing.class)); - cards.add(new SetCardInfo("Wyluli Wolf", 139, Rarity.COMMON, mage.cards.w.WyluliWolf.class)); - cards.add(new SetCardInfo("Yavimaya Ants", 140, Rarity.UNCOMMON, mage.cards.y.YavimayaAnts.class)); - cards.add(new SetCardInfo("Ydwen Efreet", 112, Rarity.RARE, mage.cards.y.YdwenEfreet.class)); - cards.add(new SetCardInfo("Zuran Orb", 174, Rarity.UNCOMMON, mage.cards.z.ZuranOrb.class)); - } + +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * @author LevelX2 + */ +public final class MastersEdition extends ExpansionSet { + + private static final MastersEdition instance = new MastersEdition(); + + public static MastersEdition getInstance() { + return instance; + } + + private MastersEdition() { + super("Masters Edition", "ME1", ExpansionSet.buildDate(2007, 9, 10), SetType.MAGIC_ONLINE); + this.hasBasicLands = true; + this.hasBoosters = true; + this.numBoosterLands = 1; + this.numBoosterCommon = 10; + this.numBoosterUncommon = 3; + this.numBoosterRare = 1; + this.ratioBoosterMythic = 0; + + cards.add(new SetCardInfo("Adun Oakenshield", 141, Rarity.RARE, mage.cards.a.AdunOakenshield.class)); + cards.add(new SetCardInfo("Amnesia", 29, Rarity.RARE, mage.cards.a.Amnesia.class)); + cards.add(new SetCardInfo("Angry Mob", 1, Rarity.UNCOMMON, mage.cards.a.AngryMob.class)); + cards.add(new SetCardInfo("Animate Dead", 57, Rarity.UNCOMMON, mage.cards.a.AnimateDead.class)); + cards.add(new SetCardInfo("Animate Wall", 2, Rarity.UNCOMMON, mage.cards.a.AnimateWall.class)); + cards.add(new SetCardInfo("Ankh of Mishra", 151, Rarity.RARE, mage.cards.a.AnkhOfMishra.class)); + cards.add(new SetCardInfo("Apprentice Wizard", 30, Rarity.COMMON, mage.cards.a.ApprenticeWizard.class)); + cards.add(new SetCardInfo("Arcane Denial", 31, Rarity.COMMON, mage.cards.a.ArcaneDenial.class)); + cards.add(new SetCardInfo("Argivian Archaeologist", 3, Rarity.RARE, mage.cards.a.ArgivianArchaeologist.class)); + cards.add(new SetCardInfo("Armageddon", 4, Rarity.RARE, mage.cards.a.Armageddon.class)); + cards.add(new SetCardInfo("Artifact Blast", 85, Rarity.COMMON, mage.cards.a.ArtifactBlast.class)); + cards.add(new SetCardInfo("Ashnod's Transmogrant", 152, Rarity.COMMON, mage.cards.a.AshnodsTransmogrant.class)); + cards.add(new SetCardInfo("Autumn Willow", 113, Rarity.RARE, mage.cards.a.AutumnWillow.class)); + cards.add(new SetCardInfo("Balduvian Horde", 86, Rarity.RARE, mage.cards.b.BalduvianHorde.class)); + cards.add(new SetCardInfo("Ball Lightning", 87, Rarity.RARE, mage.cards.b.BallLightning.class)); + cards.add(new SetCardInfo("Baron Sengir", 58, Rarity.RARE, mage.cards.b.BaronSengir.class)); + cards.add(new SetCardInfo("Basal Thrull", 59, Rarity.COMMON, mage.cards.b.BasalThrull.class)); + cards.add(new SetCardInfo("Benalish Hero", 5, Rarity.COMMON, mage.cards.b.BenalishHero.class)); + cards.add(new SetCardInfo("Berserk", 114, Rarity.RARE, mage.cards.b.Berserk.class)); + cards.add(new SetCardInfo("Bestial Fury", 88, Rarity.COMMON, mage.cards.b.BestialFury.class)); + cards.add(new SetCardInfo("Black Knight", 60, Rarity.UNCOMMON, mage.cards.b.BlackKnight.class)); + cards.add(new SetCardInfo("Blight", 61, Rarity.UNCOMMON, mage.cards.b.Blight.class)); + cards.add(new SetCardInfo("Breeding Pit", 62, Rarity.UNCOMMON, mage.cards.b.BreedingPit.class)); + cards.add(new SetCardInfo("Brothers of Fire", 89, Rarity.COMMON, mage.cards.b.BrothersOfFire.class)); + cards.add(new SetCardInfo("Carnivorous Plant", 115, Rarity.UNCOMMON, mage.cards.c.CarnivorousPlant.class)); + cards.add(new SetCardInfo("Centaur Archer", 142, Rarity.UNCOMMON, mage.cards.c.CentaurArcher.class)); + cards.add(new SetCardInfo("Chains of Mephistopheles", 63, Rarity.RARE, mage.cards.c.ChainsOfMephistopheles.class)); + cards.add(new SetCardInfo("Chub Toad", 116, Rarity.COMMON, mage.cards.c.ChubToad.class)); + cards.add(new SetCardInfo("Clockwork Beast", 153, Rarity.UNCOMMON, mage.cards.c.ClockworkBeast.class)); + cards.add(new SetCardInfo("Contagion", 64, Rarity.RARE, mage.cards.c.Contagion.class)); + cards.add(new SetCardInfo("Copper Tablet", 154, Rarity.UNCOMMON, mage.cards.c.CopperTablet.class)); + cards.add(new SetCardInfo("Crookshank Kobolds", 90, Rarity.COMMON, mage.cards.c.CrookshankKobolds.class)); + cards.add(new SetCardInfo("Crusade", 6, Rarity.RARE, mage.cards.c.Crusade.class)); + cards.add(new SetCardInfo("Cuombajj Witches", 65, Rarity.COMMON, mage.cards.c.CuombajjWitches.class)); + cards.add(new SetCardInfo("Cursed Rack", 155, Rarity.UNCOMMON, mage.cards.c.CursedRack.class)); + cards.add(new SetCardInfo("Dakkon Blackblade", 143, Rarity.RARE, mage.cards.d.DakkonBlackblade.class)); + cards.add(new SetCardInfo("Death Speakers", 7, Rarity.COMMON, mage.cards.d.DeathSpeakers.class)); + cards.add(new SetCardInfo("Death Ward", 8, Rarity.COMMON, mage.cards.d.DeathWard.class)); + cards.add(new SetCardInfo("Derelor", 66, Rarity.UNCOMMON, mage.cards.d.Derelor.class)); + cards.add(new SetCardInfo("Diamond Valley", 175, Rarity.RARE, mage.cards.d.DiamondValley.class)); + cards.add(new SetCardInfo("Diminishing Returns", 32, Rarity.RARE, mage.cards.d.DiminishingReturns.class)); + cards.add(new SetCardInfo("Divine Transformation", 9, Rarity.UNCOMMON, mage.cards.d.DivineTransformation.class)); + cards.add(new SetCardInfo("Dragon Engine", 156, Rarity.COMMON, mage.cards.d.DragonEngine.class)); + cards.add(new SetCardInfo("Dust to Dust", 10, Rarity.COMMON, mage.cards.d.DustToDust.class)); + cards.add(new SetCardInfo("Dwarven Catapult", 91, Rarity.UNCOMMON, mage.cards.d.DwarvenCatapult.class)); + cards.add(new SetCardInfo("Dwarven Soldier", 92, Rarity.COMMON, mage.cards.d.DwarvenSoldier.class)); + cards.add(new SetCardInfo("Eater of the Dead", 67, Rarity.UNCOMMON, mage.cards.e.EaterOfTheDead.class)); + cards.add(new SetCardInfo("Elder Land Wurm", 11, Rarity.UNCOMMON, mage.cards.e.ElderLandWurm.class)); + cards.add(new SetCardInfo("Erg Raiders", 68, Rarity.COMMON, mage.cards.e.ErgRaiders.class)); + cards.add(new SetCardInfo("Eureka", 117, Rarity.RARE, mage.cards.e.Eureka.class)); + cards.add(new SetCardInfo("Exile", 12, Rarity.COMMON, mage.cards.e.Exile.class)); + cards.add(new SetCardInfo("The Fallen", 69, Rarity.UNCOMMON, mage.cards.t.TheFallen.class)); + cards.add(new SetCardInfo("Feast or Famine", 70, Rarity.COMMON, mage.cards.f.FeastOrFamine.class)); + cards.add(new SetCardInfo("Fire Covenant", 145, Rarity.UNCOMMON, mage.cards.f.FireCovenant.class)); + cards.add(new SetCardInfo("Fissure", 93, Rarity.COMMON, mage.cards.f.Fissure.class)); + cards.add(new SetCardInfo("Forcefield", 157, Rarity.RARE, mage.cards.f.Forcefield.class)); + cards.add(new SetCardInfo("Force of Will", 33, Rarity.RARE, mage.cards.f.ForceOfWill.class)); + cards.add(new SetCardInfo("Forest", 193, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", 194, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", 195, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Fyndhorn Elves", 118, Rarity.COMMON, mage.cards.f.FyndhornElves.class)); + cards.add(new SetCardInfo("Ghazban Ogre", 120, Rarity.COMMON, mage.cards.g.GhazbanOgre.class)); + cards.add(new SetCardInfo("Giant Tortoise", 34, Rarity.COMMON, mage.cards.g.GiantTortoise.class)); + cards.add(new SetCardInfo("Goblin Chirurgeon", 94, Rarity.COMMON, mage.cards.g.GoblinChirurgeon.class)); + cards.add(new SetCardInfo("Goblin Grenade", 95, Rarity.UNCOMMON, mage.cards.g.GoblinGrenade.class)); + cards.add(new SetCardInfo("Goblin Mutant", 96, Rarity.UNCOMMON, mage.cards.g.GoblinMutant.class)); + cards.add(new SetCardInfo("Goblins of the Flarg", 98, Rarity.COMMON, mage.cards.g.GoblinsOfTheFlarg.class)); + cards.add(new SetCardInfo("Goblin Wizard", 97, Rarity.RARE, mage.cards.g.GoblinWizard.class)); + cards.add(new SetCardInfo("Granite Gargoyle", 99, Rarity.UNCOMMON, mage.cards.g.GraniteGargoyle.class)); + cards.add(new SetCardInfo("Greater Realm of Preservation", 13, Rarity.UNCOMMON, mage.cards.g.GreaterRealmOfPreservation.class)); + cards.add(new SetCardInfo("Hallowed Ground", 14, Rarity.UNCOMMON, mage.cards.h.HallowedGround.class)); + cards.add(new SetCardInfo("Hand of Justice", 15, Rarity.RARE, mage.cards.h.HandOfJustice.class)); + cards.add(new SetCardInfo("Hecatomb", 71, Rarity.RARE, mage.cards.h.Hecatomb.class)); + cards.add(new SetCardInfo("High Tide", 35, Rarity.UNCOMMON, mage.cards.h.HighTide.class)); + cards.add(new SetCardInfo("Holy Light", 16, Rarity.COMMON, mage.cards.h.HolyLight.class)); + cards.add(new SetCardInfo("Homarid Spawning Bed", 36, Rarity.UNCOMMON, mage.cards.h.HomaridSpawningBed.class)); + cards.add(new SetCardInfo("Hungry Mist", 121, Rarity.COMMON, mage.cards.h.HungryMist.class)); + cards.add(new SetCardInfo("Hyalopterous Lemure", 72, Rarity.COMMON, mage.cards.h.HyalopterousLemure.class)); + cards.add(new SetCardInfo("Hydroblast", 37, Rarity.COMMON, mage.cards.h.Hydroblast.class)); + cards.add(new SetCardInfo("Hymn of Rebirth", 146, Rarity.UNCOMMON, mage.cards.h.HymnOfRebirth.class)); + cards.add(new SetCardInfo("Hymn to Tourach", 73, Rarity.UNCOMMON, mage.cards.h.HymnToTourach.class)); + cards.add(new SetCardInfo("Icatian Lieutenant", 17, Rarity.COMMON, mage.cards.i.IcatianLieutenant.class)); + cards.add(new SetCardInfo("Icatian Town", 18, Rarity.UNCOMMON, mage.cards.i.IcatianTown.class)); + cards.add(new SetCardInfo("Ice Storm", 122, Rarity.UNCOMMON, mage.cards.i.IceStorm.class)); + cards.add(new SetCardInfo("Ifh-Biff Efreet", 123, Rarity.RARE, mage.cards.i.IfhBiffEfreet.class)); + cards.add(new SetCardInfo("Illusionary Forces", 38, Rarity.UNCOMMON, mage.cards.i.IllusionaryForces.class)); + cards.add(new SetCardInfo("Illusionary Wall", 39, Rarity.COMMON, mage.cards.i.IllusionaryWall.class)); + cards.add(new SetCardInfo("Illusions of Grandeur", 40, Rarity.RARE, mage.cards.i.IllusionsOfGrandeur.class)); + cards.add(new SetCardInfo("Island", 184, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", 185, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", 186, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island of Wak-Wak", 176, Rarity.RARE, mage.cards.i.IslandOfWakWak.class)); + cards.add(new SetCardInfo("Ivory Tower", 158, Rarity.RARE, mage.cards.i.IvoryTower.class)); + cards.add(new SetCardInfo("Jacques le Vert", 147, Rarity.RARE, mage.cards.j.JacquesLeVert.class)); + cards.add(new SetCardInfo("Jokulhaups", 100, Rarity.RARE, mage.cards.j.Jokulhaups.class)); + cards.add(new SetCardInfo("Juxtapose", 41, Rarity.UNCOMMON, mage.cards.j.Juxtapose.class)); + cards.add(new SetCardInfo("Juzam Djinn", 74, Rarity.RARE, mage.cards.j.JuzamDjinn.class)); + cards.add(new SetCardInfo("Keldon Warlord", 101, Rarity.UNCOMMON, mage.cards.k.KeldonWarlord.class)); + cards.add(new SetCardInfo("Khabal Ghoul", 75, Rarity.RARE, mage.cards.k.KhabalGhoul.class)); + cards.add(new SetCardInfo("Knights of Thorn", 19, Rarity.COMMON, mage.cards.k.KnightsOfThorn.class)); + cards.add(new SetCardInfo("Lake of the Dead", 177, Rarity.RARE, mage.cards.l.LakeOfTheDead.class)); + cards.add(new SetCardInfo("Lightning Bolt", 102, Rarity.COMMON, mage.cards.l.LightningBolt.class)); + cards.add(new SetCardInfo("Lim-Dul's Vault", 148, Rarity.UNCOMMON, mage.cards.l.LimDulsVault.class)); + cards.add(new SetCardInfo("Lord of Tresserhorn", 149, Rarity.RARE, mage.cards.l.LordOfTresserhorn.class)); + cards.add(new SetCardInfo("Mana Flare", 103, Rarity.RARE, mage.cards.m.ManaFlare.class)); + cards.add(new SetCardInfo("Marton Stromgald", 104, Rarity.RARE, mage.cards.m.MartonStromgald.class)); + cards.add(new SetCardInfo("Mesa Pegasus", 20, Rarity.COMMON, mage.cards.m.MesaPegasus.class)); + cards.add(new SetCardInfo("Mindstab Thrull", 76, Rarity.COMMON, mage.cards.m.MindstabThrull.class)); + cards.add(new SetCardInfo("Mirror Universe", 159, Rarity.RARE, mage.cards.m.MirrorUniverse.class)); + cards.add(new SetCardInfo("Mishra's Factory", 178, Rarity.UNCOMMON, mage.cards.m.MishrasFactory.class)); + cards.add(new SetCardInfo("Moat", 21, Rarity.RARE, mage.cards.m.Moat.class)); + cards.add(new SetCardInfo("Mountain", 190, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", 191, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", 192, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain Yeti", 105, Rarity.COMMON, mage.cards.m.MountainYeti.class)); + cards.add(new SetCardInfo("Mystic Remora", 42, Rarity.UNCOMMON, mage.cards.m.MysticRemora.class)); + cards.add(new SetCardInfo("Nature's Lore", 124, Rarity.COMMON, mage.cards.n.NaturesLore.class)); + cards.add(new SetCardInfo("Nether Shadow", 77, Rarity.UNCOMMON, mage.cards.n.NetherShadow.class)); + cards.add(new SetCardInfo("Nevinyrral's Disk", 160, Rarity.RARE, mage.cards.n.NevinyrralsDisk.class)); + cards.add(new SetCardInfo("Onulet", 161, Rarity.COMMON, mage.cards.o.Onulet.class)); + cards.add(new SetCardInfo("Orcish Mechanics", 106, Rarity.UNCOMMON, mage.cards.o.OrcishMechanics.class)); + cards.add(new SetCardInfo("Order of Leitbur", 22, Rarity.COMMON, mage.cards.o.OrderOfLeitbur.class)); + cards.add(new SetCardInfo("Order of the Ebon Hand", 78, Rarity.COMMON, mage.cards.o.OrderOfTheEbonHand.class)); + cards.add(new SetCardInfo("Oubliette", 79, Rarity.COMMON, mage.cards.o.Oubliette.class)); + cards.add(new SetCardInfo("Paralyze", 80, Rarity.COMMON, mage.cards.p.Paralyze.class)); + cards.add(new SetCardInfo("Petra Sphinx", 23, Rarity.RARE, mage.cards.p.PetraSphinx.class)); + cards.add(new SetCardInfo("Phantom Monster", 43, Rarity.COMMON, mage.cards.p.PhantomMonster.class)); + cards.add(new SetCardInfo("Phelddagrif", 150, Rarity.RARE, mage.cards.p.Phelddagrif.class)); + cards.add(new SetCardInfo("Phyrexian Boon", 81, Rarity.COMMON, mage.cards.p.PhyrexianBoon.class)); + cards.add(new SetCardInfo("Phyrexian War Beast", 162, Rarity.UNCOMMON, mage.cards.p.PhyrexianWarBeast.class)); + cards.add(new SetCardInfo("Plains", 181, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", 182, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", 183, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Polar Kraken", 44, Rarity.RARE, mage.cards.p.PolarKraken.class)); + cards.add(new SetCardInfo("Pox", 82, Rarity.RARE, mage.cards.p.Pox.class)); + cards.add(new SetCardInfo("Preacher", 24, Rarity.RARE, mage.cards.p.Preacher.class)); + cards.add(new SetCardInfo("Primal Order", 125, Rarity.RARE, mage.cards.p.PrimalOrder.class)); + cards.add(new SetCardInfo("Psychic Purge", 45, Rarity.UNCOMMON, mage.cards.p.PsychicPurge.class)); + cards.add(new SetCardInfo("Psychic Venom", 46, Rarity.COMMON, mage.cards.p.PsychicVenom.class)); + cards.add(new SetCardInfo("Pyroblast", 107, Rarity.COMMON, mage.cards.p.Pyroblast.class)); + cards.add(new SetCardInfo("Rabid Wombat", 126, Rarity.UNCOMMON, mage.cards.r.RabidWombat.class)); + cards.add(new SetCardInfo("Rainbow Vale", 179, Rarity.RARE, mage.cards.r.RainbowVale.class)); + cards.add(new SetCardInfo("Righteous Avengers", 25, Rarity.COMMON, mage.cards.r.RighteousAvengers.class)); + cards.add(new SetCardInfo("Ring of Ma'ruf", 163, Rarity.RARE, mage.cards.r.RingOfMaruf.class)); + cards.add(new SetCardInfo("River Merfolk", 47, Rarity.COMMON, mage.cards.r.RiverMerfolk.class)); + cards.add(new SetCardInfo("Roots", 127, Rarity.COMMON, mage.cards.r.Roots.class)); + cards.add(new SetCardInfo("Scryb Sprites", 128, Rarity.COMMON, mage.cards.s.ScrybSprites.class)); + cards.add(new SetCardInfo("Seasinger", 49, Rarity.UNCOMMON, mage.cards.s.Seasinger.class)); + cards.add(new SetCardInfo("Sea Sprite", 48, Rarity.COMMON, mage.cards.s.SeaSprite.class)); + cards.add(new SetCardInfo("Seraph", 26, Rarity.RARE, mage.cards.s.Seraph.class)); + cards.add(new SetCardInfo("Serendib Efreet", 50, Rarity.RARE, mage.cards.s.SerendibEfreet.class)); + cards.add(new SetCardInfo("Serpent Generator", 164, Rarity.RARE, mage.cards.s.SerpentGenerator.class)); + cards.add(new SetCardInfo("Shambling Strider", 129, Rarity.COMMON, mage.cards.s.ShamblingStrider.class)); + cards.add(new SetCardInfo("Shield of the Ages", 165, Rarity.UNCOMMON, mage.cards.s.ShieldOfTheAges.class)); + cards.add(new SetCardInfo("Shield Sphere", 166, Rarity.COMMON, mage.cards.s.ShieldSphere.class)); + cards.add(new SetCardInfo("Singing Tree", 130, Rarity.UNCOMMON, mage.cards.s.SingingTree.class)); + cards.add(new SetCardInfo("Spectral Bears", 131, Rarity.UNCOMMON, mage.cards.s.SpectralBears.class)); + cards.add(new SetCardInfo("Spinal Villain", 108, Rarity.UNCOMMON, mage.cards.s.SpinalVillain.class)); + cards.add(new SetCardInfo("Stone Calendar", 167, Rarity.UNCOMMON, mage.cards.s.StoneCalendar.class)); + cards.add(new SetCardInfo("Stone Giant", 109, Rarity.UNCOMMON, mage.cards.s.StoneGiant.class)); + cards.add(new SetCardInfo("Storm Seeker", 132, Rarity.UNCOMMON, mage.cards.s.StormSeeker.class)); + cards.add(new SetCardInfo("Su-Chi", 168, Rarity.RARE, mage.cards.s.SuChi.class)); + cards.add(new SetCardInfo("Sunken City", 51, Rarity.UNCOMMON, mage.cards.s.SunkenCity.class)); + cards.add(new SetCardInfo("Swamp", 187, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", 188, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", 189, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Sylvan Library", 133, Rarity.RARE, mage.cards.s.SylvanLibrary.class)); + cards.add(new SetCardInfo("Tawnos's Coffin", 169, Rarity.RARE, mage.cards.t.TawnossCoffin.class)); + cards.add(new SetCardInfo("Telekinesis", 52, Rarity.COMMON, mage.cards.t.Telekinesis.class)); + cards.add(new SetCardInfo("Thawing Glaciers", 180, Rarity.RARE, mage.cards.t.ThawingGlaciers.class)); + cards.add(new SetCardInfo("Thicket Basilisk", 134, Rarity.UNCOMMON, mage.cards.t.ThicketBasilisk.class)); + cards.add(new SetCardInfo("Thorn Thallid", 135, Rarity.COMMON, mage.cards.t.ThornThallid.class)); + cards.add(new SetCardInfo("Thrull Champion", 83, Rarity.RARE, mage.cards.t.ThrullChampion.class)); + cards.add(new SetCardInfo("Thrull Retainer", 84, Rarity.COMMON, mage.cards.t.ThrullRetainer.class)); + cards.add(new SetCardInfo("Thunder Spirit", 27, Rarity.UNCOMMON, mage.cards.t.ThunderSpirit.class)); + cards.add(new SetCardInfo("Time Elemental", 53, Rarity.RARE, mage.cards.t.TimeElemental.class)); + cards.add(new SetCardInfo("Tivadar's Crusade", 28, Rarity.UNCOMMON, mage.cards.t.TivadarsCrusade.class)); + cards.add(new SetCardInfo("Tornado", 136, Rarity.RARE, mage.cards.t.Tornado.class)); + cards.add(new SetCardInfo("Urza's Bauble", 170, Rarity.UNCOMMON, mage.cards.u.UrzasBauble.class)); + cards.add(new SetCardInfo("Urza's Chalice", 171, Rarity.COMMON, mage.cards.u.UrzasChalice.class)); + cards.add(new SetCardInfo("Varchild's War-Riders", 110, Rarity.RARE, mage.cards.v.VarchildsWarRiders.class)); + cards.add(new SetCardInfo("Vesuvan Doppelganger", 54, Rarity.RARE, mage.cards.v.VesuvanDoppelganger.class)); + cards.add(new SetCardInfo("Vodalian Knights", 55, Rarity.UNCOMMON, mage.cards.v.VodalianKnights.class)); + cards.add(new SetCardInfo("Walking Wall", 172, Rarity.UNCOMMON, mage.cards.w.WalkingWall.class)); + cards.add(new SetCardInfo("Wanderlust", 137, Rarity.COMMON, mage.cards.w.Wanderlust.class)); + cards.add(new SetCardInfo("Winds of Change", 111, Rarity.UNCOMMON, mage.cards.w.WindsOfChange.class)); + cards.add(new SetCardInfo("Winter Blast", 138, Rarity.UNCOMMON, mage.cards.w.WinterBlast.class)); + cards.add(new SetCardInfo("Winter Orb", 173, Rarity.RARE, mage.cards.w.WinterOrb.class)); + cards.add(new SetCardInfo("Word of Undoing", 56, Rarity.COMMON, mage.cards.w.WordOfUndoing.class)); + cards.add(new SetCardInfo("Wyluli Wolf", 139, Rarity.COMMON, mage.cards.w.WyluliWolf.class)); + cards.add(new SetCardInfo("Yavimaya Ants", 140, Rarity.UNCOMMON, mage.cards.y.YavimayaAnts.class)); + cards.add(new SetCardInfo("Ydwen Efreet", 112, Rarity.RARE, mage.cards.y.YdwenEfreet.class)); + cards.add(new SetCardInfo("Zuran Orb", 174, Rarity.UNCOMMON, mage.cards.z.ZuranOrb.class)); + } } \ No newline at end of file diff --git a/Mage.Sets/src/mage/sets/MythicEdition.java b/Mage.Sets/src/mage/sets/MythicEdition.java index 57740797501..1e2a490c6ca 100644 --- a/Mage.Sets/src/mage/sets/MythicEdition.java +++ b/Mage.Sets/src/mage/sets/MythicEdition.java @@ -16,7 +16,7 @@ public final class MythicEdition extends ExpansionSet { } private MythicEdition() { - super("Mythic Edition", "MEDM", ExpansionSet.buildDate(2018, 10, 5), SetType.SUPPLEMENTAL); // MEDM cause MED uses for master edition + super("Mythic Edition", "MED", ExpansionSet.buildDate(2018, 10, 5), SetType.SUPPLEMENTAL); this.hasBasicLands = false; cards.add(new SetCardInfo("Ajani, Mentor of Heroes", "RA5", Rarity.MYTHIC, mage.cards.a.AjaniMentorOfHeroes.class)); From f35d0fa994621257e343f20ff2d268c285dbf124 Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Mon, 16 Mar 2020 18:40:13 +0100 Subject: [PATCH 122/182] Fixed set codes for the Duel Decks. The decks now use the set codes from Scryfall. Also fixed the affected Duel Decks deck lists supplied with the client. --- .../Duel Decks/Elves vs. Goblins/Elves.dck | 62 +- .../Duel Decks/Elves vs. Goblins/Goblins.dck | 62 +- .../dl/sources/ScryfallImageSupportCards.java | 731 +++++++++++------- .../DuelDecksAnthologyDivineVsDemonic.java | 2 +- .../DuelDecksAnthologyElvesVsGoblins.java | 2 +- .../DuelDecksAnthologyGarrukVsLiliana.java | 2 +- .../sets/DuelDecksAnthologyJaceVsChandra.java | 2 +- .../mage/sets/DuelDecksElvesVsGoblins.java | 2 +- .../DuelDecksMirrodinPureVsNewPhyrexia.java | 2 +- 9 files changed, 519 insertions(+), 348 deletions(-) diff --git a/Mage.Client/release/sample-decks/Duel Decks/Elves vs. Goblins/Elves.dck b/Mage.Client/release/sample-decks/Duel Decks/Elves vs. Goblins/Elves.dck index 8b78427d777..cccbc3ff8fe 100644 --- a/Mage.Client/release/sample-decks/Duel Decks/Elves vs. Goblins/Elves.dck +++ b/Mage.Client/release/sample-decks/Duel Decks/Elves vs. Goblins/Elves.dck @@ -1,31 +1,31 @@ -2 [EVG:3] Elvish Eulogist -1 [EVG:26] Wirewood Lodge -1 [EVG:2] Allosaurus Rider -2 [EVG:27] Tranquil Thicket -3 [EVG:5] Elvish Warrior -3 [EVG:24] Moonglove Extract -1 [EVG:4] Elvish Harbinger -1 [EVG:25] Slate of Ancestry -4 [EVG:28] Forest -1 [EVG:1] Ambush Commander -5 [EVG:29] Forest -1 [EVG:22] Harmonize -1 [EVG:23] Wildsize -1 [EVG:20] Elvish Promenade -2 [EVG:21] Giant Growth -2 [EVG:8] Imperious Perfect -3 [EVG:9] Llanowar Elves -2 [EVG:6] Gempalm Strider -1 [EVG:7] Heedless One -1 [EVG:13] Timberwatch Elf -5 [EVG:31] Forest -1 [EVG:14] Voice of the Woods -2 [EVG:15] Wellwisher -1 [EVG:16] Wirewood Herald -1 [EVG:17] Wirewood Symbiote -2 [EVG:18] Wood Elves -5 [EVG:30] Forest -1 [EVG:19] Wren's Run Vanquisher -2 [EVG:10] Lys Alana Huntmaster -1 [EVG:11] Stonewood Invoker -1 [EVG:12] Sylvan Messenger +2 [DD1:3] Elvish Eulogist +1 [DD1:26] Wirewood Lodge +1 [DD1:2] Allosaurus Rider +2 [DD1:27] Tranquil Thicket +3 [DD1:5] Elvish Warrior +3 [DD1:24] Moonglove Extract +1 [DD1:4] Elvish Harbinger +1 [DD1:25] Slate of Ancestry +4 [DD1:28] Forest +1 [DD1:1] Ambush Commander +5 [DD1:29] Forest +1 [DD1:22] Harmonize +1 [DD1:23] Wildsize +1 [DD1:20] Elvish Promenade +2 [DD1:21] Giant Growth +2 [DD1:8] Imperious Perfect +3 [DD1:9] Llanowar Elves +2 [DD1:6] Gempalm Strider +1 [DD1:7] Heedless One +1 [DD1:13] Timberwatch Elf +5 [DD1:31] Forest +1 [DD1:14] Voice of the Woods +2 [DD1:15] Wellwisher +1 [DD1:16] Wirewood Herald +1 [DD1:17] Wirewood Symbiote +2 [DD1:18] Wood Elves +5 [DD1:30] Forest +1 [DD1:19] Wren's Run Vanquisher +2 [DD1:10] Lys Alana Huntmaster +1 [DD1:11] Stonewood Invoker +1 [DD1:12] Sylvan Messenger diff --git a/Mage.Client/release/sample-decks/Duel Decks/Elves vs. Goblins/Goblins.dck b/Mage.Client/release/sample-decks/Duel Decks/Elves vs. Goblins/Goblins.dck index a61a1b842f0..a79fad411d2 100644 --- a/Mage.Client/release/sample-decks/Duel Decks/Elves vs. Goblins/Goblins.dck +++ b/Mage.Client/release/sample-decks/Duel Decks/Elves vs. Goblins/Goblins.dck @@ -1,31 +1,31 @@ -2 [EVG:45] Mogg War Marshal -5 [EVG:62] Mountain -1 [EVG:44] Mogg Fanatic -5 [EVG:61] Mountain -1 [EVG:43] Ib Halfheart, Goblin Tactician -6 [EVG:60] Mountain -1 [EVG:42] Goblin Warchief -1 [EVG:41] Goblin Sledder -1 [EVG:40] Goblin Ringleader -2 [EVG:49] Skirk Drill Sergeant -1 [EVG:48] Reckless One -2 [EVG:47] Raging Goblin -2 [EVG:46] Mudbutton Torchrunner -1 [EVG:50] Skirk Fire Marshal -1 [EVG:32] Siege-Gang Commander -1 [EVG:52] Skirk Shaman -1 [EVG:34] Clickslither -1 [EVG:51] Skirk Prospector -1 [EVG:33] Akki Coalflinger -2 [EVG:54] Boggart Shenanigans -1 [EVG:53] Tar Pitcher -3 [EVG:56] Tarfire -1 [EVG:55] Spitting Earth -1 [EVG:58] Goblin Burrows -1 [EVG:57] Forgotten Cave -1 [EVG:39] Goblin Matron -6 [EVG:59] Mountain -1 [EVG:36] Flamewave Invoker -3 [EVG:35] Emberwilde Augur -3 [EVG:38] Goblin Cohort -1 [EVG:37] Gempalm Incinerator +2 [DD1:45] Mogg War Marshal +5 [DD1:62] Mountain +1 [DD1:44] Mogg Fanatic +5 [DD1:61] Mountain +1 [DD1:43] Ib Halfheart, Goblin Tactician +6 [DD1:60] Mountain +1 [DD1:42] Goblin Warchief +1 [DD1:41] Goblin Sledder +1 [DD1:40] Goblin Ringleader +2 [DD1:49] Skirk Drill Sergeant +1 [DD1:48] Reckless One +2 [DD1:47] Raging Goblin +2 [DD1:46] Mudbutton Torchrunner +1 [DD1:50] Skirk Fire Marshal +1 [DD1:32] Siege-Gang Commander +1 [DD1:52] Skirk Shaman +1 [DD1:34] Clickslither +1 [DD1:51] Skirk Prospector +1 [DD1:33] Akki Coalflinger +2 [DD1:54] Boggart Shenanigans +1 [DD1:53] Tar Pitcher +3 [DD1:56] Tarfire +1 [DD1:55] Spitting Earth +1 [DD1:58] Goblin Burrows +1 [DD1:57] Forgotten Cave +1 [DD1:39] Goblin Matron +6 [DD1:59] Mountain +1 [DD1:36] Flamewave Invoker +3 [DD1:35] Emberwilde Augur +3 [DD1:38] Goblin Cohort +1 [DD1:37] Gempalm Incinerator diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java index 44832225b99..6891ccb3533 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java @@ -8,307 +8,478 @@ import java.util.Locale; import java.util.Map; import java.util.Set; + /** * @author JayDi85 */ public class ScryfallImageSupportCards { private static final Map xmageSetsToScryfall = ImmutableMap.builder().put("DD3GVL", "gvl"). - put("DD3JVC", "jvc"). - put("DD3DVD", "dvd"). - put("DD3EVG", "evg"). - put("MPS-AKH", "mp2"). put("MBP", "pmei"). - put("WMCQ", "pwcq"). - put("MED", "me1"). - put("MEDM", "med"). build(); + private static final Set supportedSets = new ArraySet() { { - // xmage set codes - add("PPRE"); - add("LEA"); - add("LEB"); - add("2ED"); - add("ARN"); - add("ATQ"); - add("3ED"); - add("LEG"); - add("DRK"); - add("FEM"); - add("4ED"); - add("ICE"); - add("CHR"); - add("HML"); - add("ALL"); - add("MIR"); - add("VIS"); - add("5ED"); - add("POR"); - add("PPOD"); - add("WTH"); - add("TMP"); - add("STH"); - add("EXO"); - add("P02"); - add("UGL"); - add("USG"); - add("DD3DVD"); - add("DD3EVG"); - add("DD3GVL"); - add("DD3JVC"); + // Sorted by release date, as listed on Scryfall + // Commented sets are not available on XMage, most likely because they are non-English sets. - // Judge gift sets - add("JGP"); - add("G99"); - add("G00"); - add("G01"); - add("G02"); - add("G03"); - add("G04"); - add("G05"); - add("G06"); - add("G07"); - add("G08"); - add("G09"); - add("G10"); - add("G11"); - add("J12"); - add("J13"); - add("J14"); - add("J15"); - add("J16"); - add("J17"); - add("J18"); - add("J19"); - add("J20"); - - // Arena League - add("PARL"); - add("PAL99"); - add("PAL00"); - add("PAL01"); - add("PAL02"); - add("PAL03"); - add("PAL04"); - add("PAL05"); - add("PAL06"); - - // Other promo sets - add("PWOR"); - add("PWOS"); - add("PDRC"); - add("PHPR"); - add("PLGM"); - add("OVNT"); // Vintage Championship - add("PREL"); // Release Events - add("PJSE"); // Junior Series Europe + add("LEA"); // Limited Edition Alpha + add("LEB"); // Limited Edition Beta + add("2ED"); // Unlimited Edition + //add("CEI"); // Intl. Collectors’ Edition + //add("CED"); // Collectors’ Edition + add("ARN"); // Arabian Nights + add("ATQ"); // Antiquities + //add("FBB"); // Foreign Black Border + add("3ED"); // Revised Edition + add("LEG"); // Legends + add("SUM"); // Summer Magic / Edgar + add("PDRC"); // Dragon Con + add("DRK"); // The Dark + add("FEM"); // Fallen Empires + add("PLGM"); // DCI Legend Membership + //add("4BB"); // Fourth Edition Foreign Black Border + add("PHPR"); // HarperPrism Book Promos + add("4ED"); // Fourth Edition + add("ICE"); // Ice Age + add("CHR"); // Chronicles + //add("RIN"); // Rinascimento + //add("REN"); // Renaissance + add("HML"); // Homelands + add("PTC"); // Pro Tour Collector Set + add("ALL"); // Alliances + add("RQS"); // Rivals Quick Start Set + add("PARL"); // Arena League 1996 + //add("PRED"); // Redemption Program + add("MIR"); // Mirage + add("MGB"); // Multiverse Gift Box + add("ITP"); // Introductory Two-Player Set + add("VIS"); // Visions + add("5ED"); // Fifth Edition + add("PVAN"); // Vanguard Series + add("PPOD"); // Portal Demo Game + add("POR"); // Portal + add("WTH"); // Weatherlight + add("WC97"); // World Championship Decks 1997 + add("TMP"); // Tempest + add("JGP"); // Judge Gift Cards 1998 + add("STH"); // Stronghold + add("P02"); // Portal Second Age + add("EXO"); // Exodus + add("UGL"); // Unglued + add("WC98"); // World Championship Decks 1998 + add("PALP"); // Asia Pacific Land Program + add("USG"); // Urza's Saga + add("ATH"); // Anthologies + add("PAL99"); // Arena League 1999 + add("G99"); // Judge Gift Cards 1999 + add("ULG"); // Urza's Legacy + add("6ED"); // Classic Sixth Edition + add("PTK"); // Portal Three Kingdoms + add("UDS"); // Urza's Destiny + add("S99"); // Starter 1999 + add("PGRU"); // Guru + add("WC99"); // World Championship Decks 1999 + add("PWOS"); // Wizards of the Coast Online Store + add("MMQ"); // Mercadian Masques + add("BRB"); // Battle Royale Box Set + add("PAL00"); // Arena League 2000 + add("G00"); // Judge Gift Cards 2000 + add("FNM"); // Friday Night Magic 2000 + add("PELP"); // European Land Program + add("NEM"); // Nemesis + add("S00"); // Starter 2000 + add("PCY"); // Prophecy + add("WC00"); // World Championship Decks 2000 + add("BTD"); // Beatdown Box Set + add("INV"); // Invasion + add("PAL01"); // Arena League 2001 + add("MPR"); // Magic Player Rewards 2001 + add("G01"); // Judge Gift Cards 2001 + add("F01"); // Friday Night Magic 2001 + add("PLS"); // Planeshift + add("7ED"); // Seventh Edition + add("APC"); // Apocalypse + add("WC01"); // World Championship Decks 2001 + add("ODY"); // Odyssey + add("DKM"); // Deckmasters + add("PAL02"); // Arena League 2002 + add("PR2"); // Magic Player Rewards 2002 + add("G02"); // Judge Gift Cards 2002 + add("F02"); // Friday Night Magic 2002 + add("TOR"); // Torment + add("JUD"); // Judgment + //add("PHJ"); // Hobby Japan Promos + add("WC02"); // World Championship Decks 2002 + add("ONS"); // Onslaught + add("PMOA"); // Magic Online Avatars + add("PAL03"); // Arena League 2003 + add("P03"); // Magic Player Rewards 2003 + add("G03"); // Judge Gift Cards 2003 + add("F03"); // Friday Night Magic 2003 + add("LGN"); // Legions + add("SCG"); // Scourge + add("8ED"); // Eighth Edition + add("WC03"); // World Championship Decks 2003 + add("MRD"); // Mirrodin + add("PAL04"); // Arena League 2004 + add("P04"); // Magic Player Rewards 2004 + add("G04"); // Judge Gift Cards 2004 + add("F04"); // Friday Night Magic 2004 + add("DST"); // Darksteel + add("5DN"); // Fifth Dawn + add("WC04"); // World Championship Decks 2004 + add("CHK"); // Champions of Kamigawa + add("UNH"); // Unhinged + //add("PMPS"); // Magic Premiere Shop 2005 + add("PAL05"); // Arena League 2005 + add("P05"); // Magic Player Rewards 2005 + add("G05"); // Judge Gift Cards 2005 + add("F05"); // Friday Night Magic 2005 + add("BOK"); // Betrayers of Kamigawa + add("SOK"); // Saviors of Kamigawa + add("9ED"); // Ninth Edition + //add("PSAL"); // Salvat 2005 + add("RAV"); // Ravnica: City of Guilds add("P2HG"); // Two-Headed Giant Tournament + add("PAL06"); // Arena League 2006 + //add("PMPS06"); // Magic Premiere Shop 2006 + add("PHUK"); // Hachette UK add("PGTW"); // Gateway 2006 + add("P06"); // Magic Player Rewards 2006 + add("G06"); // Judge Gift Cards 2006 + add("F06"); // Friday Night Magic 2006 + add("GPT"); // Guildpact + add("DIS"); // Dissension + add("CST"); // Coldsnap Theme Decks + add("CSP"); // Coldsnap + add("TSP"); // Time Spiral + add("TSB"); // Time Spiral Timeshifted + add("PG07"); // Gateway 2007 + //add("PMPS07"); // Magic Premiere Shop 2007 + add("P07"); // Magic Player Rewards 2007 + add("G07"); // Judge Gift Cards 2007 + add("F07"); // Friday Night Magic 2007 + add("PLC"); // Planar Chaos + add("FUT"); // Future Sight + add("10E"); // Tenth Edition + add("P10E"); // Tenth Edition Promos + add("PSUM"); // Summer of Magic + add("ME1"); // Masters Edition + add("PREL"); // Release Events + add("LRW"); // Lorwyn + add("DD1"); // Duel Decks: Elves vs. Goblins + add("PSUS"); // Junior Super Series + add("PJSE"); // Junior Series Europe add("PJAS"); // Junior APAC Series + //add("PMPS08"); // Magic Premiere Shop 2008 + add("PG08"); // Gateway 2008 + add("P08"); // Magic Player Rewards 2008 + add("G08"); // Judge Gift Cards 2008 + add("F08"); // Friday Night Magic 2008 + add("MOR"); // Morningtide + add("PCMP"); // Champs and States + add("P15A"); // 15th Anniversary Cards + add("SHM"); // Shadowmoor + //add("PJJT"); // Japan Junior Tournament + add("EVE"); // Eventide + add("DRB"); // From the Vault: Dragons + add("ME2"); // Masters Edition II + add("PWPN"); // Wizards Play Network 2008 + add("ALA"); // Shards of Alara + add("DD2"); // Duel Decks: Jace vs. Chandra + add("PWP09"); // Wizards Play Network 2009 + add("PDTP"); // Duels of the Planeswalkers 2009 Promos + //add("PMPS09"); // Magic Premiere Shop 2009 + add("P09"); // Magic Player Rewards 2009 + add("G09"); // Judge Gift Cards 2009 + add("F09"); // Friday Night Magic 2009 + add("PBOK"); // Miscellaneous Book Promos + add("CON"); // Conflux + add("DDC"); // Duel Decks: Divine vs. Demonic + add("PPRE"); // Prerelease Events + add("ARB"); // Alara Reborn + add("PM10"); // Magic 2010 Promos + add("M10"); // Magic 2010 + add("V09"); // From the Vault: Exiled + add("HOP"); // Planechase + add("ME3"); // Masters Edition III + add("PZEN"); // Zendikar Promos + add("ZEN"); // Zendikar + add("DDD"); // Duel Decks: Garruk vs. Liliana + add("H09"); // Premium Deck Series: Slivers + add("PDP10"); // Duels of the Planeswalkers 2010 Promos + add("PWP10"); // Wizards Play Network 2010 + //add("PMPS10"); // Magic Premiere Shop 2010 + add("P10"); // Magic Player Rewards 2010 + add("G10"); // Judge Gift Cards 2010 + add("F10"); // Friday Night Magic 2010 + add("WWK"); // Worldwake + add("DDE"); // Duel Decks: Phyrexia vs. the Coalition + add("ROE"); // Rise of the Eldrazi + add("DPA"); // Duels of the Planeswalkers + add("ARC"); // Archenemy + add("PM11"); // Magic 2011 Promos + add("M11"); // Magic 2011 + add("PWWK"); // Worldwake Promos + add("PROE"); // Rise of the Eldrazi Promos + add("V10"); // From the Vault: Relics + add("DDF"); // Duel Decks: Elspeth vs. Tezzeret + add("PSOM"); // Scars of Mirrodin Promos + add("SOM"); // Scars of Mirrodin + add("TD0"); // Magic Online Theme Decks + add("PD2"); // Premium Deck Series: Fire and Lightning + //add("PMPS11"); // Magic Premiere Shop 2011 + add("PDP11"); // Duels of the Planeswalkers 2011 Promos + add("PWP11"); // Wizards Play Network 2011 + //add("PS11"); // Salvat 2011 + add("P11"); // Magic Player Rewards 2011 + add("G11"); // Judge Gift Cards 2011 + add("F11"); // Friday Night Magic 2011 + add("ME4"); // Masters Edition IV + add("PMBS"); // Mirrodin Besieged Promos + add("MBS"); // Mirrodin Besieged + add("DDG"); // Duel Decks: Knights vs. Dragons + add("PNPH"); // New Phyrexia Promos + add("NPH"); // New Phyrexia + add("TD2"); // Duel Decks: Mirrodin Pure vs. New Phyrexia + add("PCMD"); // Commander 2011 Launch Party + add("CMD"); // Commander 2011 + add("PM12"); // Magic 2012 Promos + add("M12"); // Magic 2012 + add("V11"); // From the Vault: Legends + add("DDH"); // Duel Decks: Ajani vs. Nicol Bolas + add("PISD"); // Innistrad Promos + add("ISD"); // Innistrad + add("PD3"); // Premium Deck Series: Graveborn + add("PIDW"); // IDW Comics 2012 + add("PWP12"); // Wizards Play Network 2012 + add("PDP12"); // Duels of the Planeswalkers 2012 Promos + add("J12"); // Judge Gift Cards 2012 + add("F12"); // Friday Night Magic 2012 + add("PDKA"); // Dark Ascension Promos + add("DKA"); // Dark Ascension + add("DDI"); // Duel Decks: Venser vs. Koth + add("PHEL"); // Open the Helvault + add("PAVR"); // Avacyn Restored Promos + add("AVR"); // Avacyn Restored + add("PC2"); // Planechase 2012 + add("PM13"); // Magic 2013 Promos + add("M13"); // Magic 2013 + add("V12"); // From the Vault: Realms + add("DDJ"); // Duel Decks: Izzet vs. Golgari + add("RTR"); // Return to Ravnica + add("PRTR"); // Return to Ravnica Promos + add("CM1"); // Commander's Arsenal + add("PDP13"); // Duels of the Planeswalkers 2013 Promos + add("PI13"); // IDW Comics 2013 + add("J13"); // Judge Gift Cards 2013 + add("F13"); // Friday Night Magic 2013 + add("PGTC"); // Gatecrash Promos + add("GTC"); // Gatecrash + add("DDK"); // Duel Decks: Sorin vs. Tibalt + add("PDGM"); // Dragon's Maze Promos + add("DGM"); // Dragon's Maze + add("MMA"); // Modern Masters + add("PM14"); // Magic 2014 Promos + add("PSDC"); // San Diego Comic-Con 2013 + add("M14"); // Magic 2014 + add("V13"); // From the Vault: Twenty + add("DDL"); // Duel Decks: Heroes vs. Monsters + add("PTHS"); // Theros Promos + add("THS"); // Theros + add("C13"); // Commander 2013 + add("PDP14"); // Duels of the Planeswalkers 2014 Promos + add("PI14"); // IDW Comics 2014 + add("J14"); // Judge Gift Cards 2014 + add("F14"); // Friday Night Magic 2014 + add("PBNG"); // Born of the Gods Promos + add("THP2"); // Born of the Gods Hero's Path + add("BNG"); // Born of the Gods + add("DDM"); // Duel Decks: Jace vs. Vraska + add("PJOU"); // Journey into Nyx Promos + add("JOU"); // Journey into Nyx + add("MD1"); // Modern Event Deck 2014 + add("PLPA"); // Launch Parties + add("CNS"); // Conspiracy + add("VMA"); // Vintage Masters + add("PS14"); // San Diego Comic-Con 2014 + add("PPC1"); // M15 Prerelease Challenge + add("PM15"); // Magic 2015 Promos + add("M15"); // Magic 2015 + add("CP1"); // Magic 2015 Clash Pack + add("V14"); // From the Vault: Annihilation + add("DDN"); // Duel Decks: Speed vs. Cunning + add("KTK"); // Khans of Tarkir + add("PKTK"); // Khans of Tarkir Promos + add("C14"); // Commander 2014 + //add("PCEL"); // Celebration Cards + add("JVC"); // Duel Decks Anthology: Jace vs. Chandra + add("GVL"); // Duel Decks Anthology: Garruk vs. Liliana + add("EVG"); // Duel Decks Anthology: Elves vs. Goblins + add("DVD"); // Duel Decks Anthology: Divine vs. Demonic + add("J15"); // Judge Gift Cards 2015 + add("F15"); // Friday Night Magic 2015 + add("UGIN"); // Ugin's Fate + add("PURL"); // URL/Convention Promos + add("CP2"); // Fate Reforged Clash Pack + add("FRF"); // Fate Reforged + add("PFRF"); // Fate Reforged Promos + add("DDO"); // Duel Decks: Elspeth vs. Kiora + add("DTK"); // Dragons of Tarkir + add("PDTK"); // Dragons of Tarkir Promos + add("PTKDF"); // Tarkir Dragonfury + add("TPR"); // Tempest Remastered + add("MM2"); // Modern Masters 2015 + add("PS15"); // San Diego Comic-Con 2015 + add("CP3"); // Magic Origins Clash Pack + add("PORI"); // Magic Origins Promos + add("ORI"); // Magic Origins + add("V15"); // From the Vault: Angels + add("DDP"); // Duel Decks: Zendikar vs. Eldrazi + add("BFZ"); // Battle for Zendikar + add("PSS1"); // BFZ Standard Series + add("EXP"); // Zendikar Expeditions + add("PBFZ"); // Battle for Zendikar Promos + add("C15"); // Commander 2015 + add("PZ1"); // Legendary Cube Prize Pack + add("J16"); // Judge Gift Cards 2016 + add("F16"); // Friday Night Magic 2016 + add("OGW"); // Oath of the Gatewatch + add("POGW"); // Oath of the Gatewatch Promos + add("DDQ"); // Duel Decks: Blessed vs. Cursed + add("SOI"); // Shadows over Innistrad + add("W16"); // Welcome Deck 2016 + add("PSOI"); // Shadows over Innistrad Promos + add("EMA"); // Eternal Masters + add("PEMN"); // Eldritch Moon Promos + add("EMN"); // Eldritch Moon + add("V16"); // From the Vault: Lore + add("CN2"); // Conspiracy: Take the Crown + add("DDR"); // Duel Decks: Nissa vs. Ob Nixilis + add("PKLD"); // Kaladesh Promos + add("KLD"); // Kaladesh + add("MPS"); // Kaladesh Inventions + add("PS16"); // San Diego Comic-Con 2016 + add("C16"); // Commander 2016 + add("PCA"); // Planechase Anthology + add("J17"); // Judge Gift Cards 2017 + add("F17"); // Friday Night Magic 2017 + add("AER"); // Aether Revolt + add("PAER"); // Aether Revolt Promos + add("MM3"); // Modern Masters 2017 + add("DDS"); // Duel Decks: Mind vs. Might + add("W17"); // Welcome Deck 2017 + add("PAKH"); // Amonkhet Promos + add("AKH"); // Amonkhet + add("MP2"); // Amonkhet Invocations + add("CMA"); // Commander Anthology + add("E01"); // Archenemy: Nicol Bolas + add("PHOU"); // Hour of Devastation Promos + add("HOU"); // Hour of Devastation + add("PS17"); // San Diego Comic-Con 2017 + add("C17"); // Commander 2017 + add("PWCQ"); // World Magic Cup Qualifiers + add("H17"); // HasCon 2017 + add("HTR"); // 2016 Heroes of the Realm + add("PXLN"); // Ixalan Promos + add("XLN"); // Ixalan + add("PSS2"); // XLN Standard Showdown + add("G17"); // 2017 Gift Pack + add("DDT"); // Duel Decks: Merfolk vs. Goblins + add("PUST"); // Unstable Promos + add("IMA"); // Iconic Masters + add("V17"); // From the Vault: Transform + add("PXTC"); // XLN Treasure Chest + add("E02"); // Explorers of Ixalan + add("UST"); // Unstable + add("J18"); // Judge Gift Cards 2018 + add("PRIX"); // Rivals of Ixalan Promos + add("RIX"); // Rivals of Ixalan + add("PNAT"); // Nationals Promos + add("A25"); // Masters 25 + add("DDU"); // Duel Decks: Elves vs. Inventors + add("PDOM"); // Dominaria Promos + add("DOM"); // Dominaria + add("CM2"); // Commander Anthology Volume II + add("BBD"); // Battlebond + add("PBBD"); // Battlebond Promos + add("PGPX"); // Grand Prix Promos + add("SS1"); // Signature Spellbook: Jace + add("GS1"); // Global Series Jiang Yanggu & Mu Yanling + add("PM19"); // Core Set 2019 Promos + add("PSS3"); // M19 Standard Showdown + add("M19"); // Core Set 2019 + //add("ANA"); // Arena New Player Experience + add("PS18"); // San Diego Comic-Con 2018 + //add("HTR17"); // 2017 Heroes of the Realm + add("C18"); // Commander 2018 + add("PGRN"); // Guilds of Ravnica Promos + add("PRWK"); // GRN Ravnica Weekend + add("GRN"); // Guilds of Ravnica + add("GK1"); // GRN Guild Kit + add("GNT"); // Game Night + add("G18"); // M19 Gift Pack + add("PZ2"); // Treasure Chest + add("PUMA"); // Ultimate Box Topper + add("UMA"); // Ultimate Masters + add("PF19"); // MagicFest 2019 + add("PRNA"); // Ravnica Allegiance Promos + add("RNA"); // Ravnica Allegiance + add("GK2"); // RNA Guild Kit + add("PRW2"); // RNA Ravnica Weekend + add("J19"); // Judge Gift Cards 2019 + add("PRM"); // Magic Online Promos + add("MED"); // Mythic Edition + add("WAR"); // War of the Spark + add("PWAR"); // War of the Spark Promos + add("PMH1"); // Modern Horizons Promos + add("MH1"); // Modern Horizons + add("SS2"); // Signature Spellbook: Gideon + add("PRES"); // Resale Promos + add("PPP1"); // M20 Promo Packs + add("PM20"); // Core Set 2020 Promos + add("M20"); // Core Set 2020 + add("PS19"); // San Diego Comic-Con 2019 + //add("HTR18"); // Heroes of the Realm 2018 + add("C19"); // Commander 2019 + add("PELD"); // Throne of Eldraine Promos + add("ELD"); // Throne of Eldraine + //add("PTG"); // Ponies: The Galloping + //add("CMB1"); // Mystery Booster Playtest Cards + add("MB1"); // Mystery Booster + add("GN2"); // Game Night 2019 + //add("HA1"); // Historic Anthology 1 + //add("HHO"); // Happy Holidays + add("OVNT"); // Vintage Championship + add("OLGC"); // Legacy Championship + add("PPRO"); // Pro Tour Promos + add("PF20"); // MagicFest 2020 + add("J20"); // Judge Gift Cards 2020 + add("PTHB"); // Theros Beyond Death Promos + add("THB"); // Theros Beyond Death + add("PWOR"); // World Championship Promos + //add("PANA"); // MTG Arena Promos + add("PSLD"); // Secret Lair Drop Promos + add("UND"); // Unsanctioned + add("FMB1"); // Mystery Booster Retail Edition Foils + //add("HA2"); // Historic Anthology 2 + add("SLD"); // Secret Lair Drop + add("PMEI"); // Magazine Inserts + add("SLU"); // Secret Lair: Ultimate Edition + add("SS3"); // Signature Spellbook: Chandra - add("MGB"); - add("ULG"); - add("6ED"); - add("UDS"); - add("PTK"); - add("S99"); - add("MMQ"); - add("BRB"); - add("NEM"); - add("S00"); - add("PCY"); - add("INV"); - add("BTD"); - add("PLS"); - add("7ED"); - add("APC"); - add("ODY"); - add("DKM"); - add("TOR"); - add("JUD"); - add("PRM"); - add("ONS"); - add("LGN"); - add("SCG"); - add("8ED"); - add("MRD"); - add("DST"); - add("5DN"); - add("CHK"); - add("UNH"); - add("BOK"); - add("SOK"); - add("9ED"); - add("RAV"); - add("PHUK"); - add("GPT"); - add("DIS"); - add("CSP"); - add("TSP"); - add("TSB"); - add("PLC"); - add("FUT"); - add("10E"); - add("MED"); - add("LRW"); - add("EVG"); - add("MOR"); - add("SHM"); - add("EVE"); - add("DRB"); - add("ME2"); - add("ALA"); - add("DD2"); - add("CON"); - add("DDC"); - add("ARB"); - add("M10"); - // add("TD0"); // Magic Online Deck Series - add("V09"); - add("HOP"); - add("ME3"); - add("ZEN"); - add("DDD"); - add("H09"); - add("WWK"); - add("DDE"); - add("ROE"); - // duels of the planewalkers: - add("DPA"); + + + + + // TODO: DuelsOfThePlaneswalkersPromos add("DPAP"); - // - add("ARC"); - add("M11"); - add("V10"); - add("DDF"); - add("SOM"); - // add("TD0"); // Commander Theme Decks - add("PD2"); - add("ME4"); - add("MBS"); - add("DDG"); - add("NPH"); - add("CMD"); - add("M12"); - add("V11"); - add("DDH"); - add("ISD"); - add("PD3"); - add("DKA"); - add("DDI"); - add("AVR"); - add("PC2"); - add("M13"); - add("V12"); - add("DDJ"); - add("RTR"); - add("CM1"); - // add("TD2"); // Duel Decks: Mirrodin Pure vs. New Phyrexia - add("GTC"); - add("DDK"); - add("DGM"); - add("MMA"); - add("M14"); - add("V13"); - add("DDL"); - add("THS"); - add("C13"); - add("BNG"); - add("DDM"); - add("JOU"); - // add("MD1"); // Modern Event Deck - add("CNS"); - add("VMA"); - add("M15"); - add("V14"); - add("DDN"); - add("KTK"); - add("C14"); - // add("DD3"); // Duel Decks Anthology - add("FRF"); - add("DDO"); - add("DTK"); - add("TPR"); - add("MM2"); - add("ORI"); - add("V15"); - add("DDP"); - add("BFZ"); - add("EXP"); - add("C15"); - // add("PZ1"); // Legendary Cube - add("OGW"); - add("DDQ"); - add("W16"); - add("SOI"); - add("EMA"); - add("EMN"); - add("V16"); - add("CN2"); - add("DDR"); - add("KLD"); - add("MPS"); - // add("PZ2"); - add("C16"); - add("PCA"); - add("AER"); - add("MM3"); - add("DDS"); - add("W17"); - add("AKH"); - add("CMA"); - add("E01"); - add("HOU"); - add("C17"); - add("XLN"); - add("DDT"); - add("IMA"); - add("E02"); - add("V17"); - add("UST"); - add("DDU"); - add("RIX"); - add("WMCQ"); - add("PPRO"); - add("A25"); - add("DOM"); - add("BBD"); - add("C18"); - add("CM2"); - add("M19"); - add("GS1"); - add("GRN"); - add("GK1"); - add("GNT"); - add("UMA"); - add("PUMA"); - add("RNA"); add("MEDM"); - add("GK2"); - add("MH1"); - add("WAR"); - add("M20"); - add("C19"); - add("ELD"); - add("THB"); - // - add("PALP"); - add("PELP"); - add("PGPX"); - add("ATH"); add("GRC"); add("ANA"); - add("G18"); - add("PM20"); - add("PS19"); - add("SS1"); - add("SS2"); - add("PPP1"); - add("PF19"); - add("MPS-AKH"); } }; diff --git a/Mage.Sets/src/mage/sets/DuelDecksAnthologyDivineVsDemonic.java b/Mage.Sets/src/mage/sets/DuelDecksAnthologyDivineVsDemonic.java index a25fdfb6e43..c3f6e8950c9 100644 --- a/Mage.Sets/src/mage/sets/DuelDecksAnthologyDivineVsDemonic.java +++ b/Mage.Sets/src/mage/sets/DuelDecksAnthologyDivineVsDemonic.java @@ -16,7 +16,7 @@ public final class DuelDecksAnthologyDivineVsDemonic extends ExpansionSet { } private DuelDecksAnthologyDivineVsDemonic() { - super("Duel Decks: Anthology, Divine vs. Demonic", "DD3DVD", ExpansionSet.buildDate(2014, 12, 5), SetType.SUPPLEMENTAL); + super("Duel Decks: Anthology, Divine vs. Demonic", "DVD", ExpansionSet.buildDate(2014, 12, 5), SetType.SUPPLEMENTAL); this.blockName = "Duel Decks: Anthology"; this.hasBasicLands = true; diff --git a/Mage.Sets/src/mage/sets/DuelDecksAnthologyElvesVsGoblins.java b/Mage.Sets/src/mage/sets/DuelDecksAnthologyElvesVsGoblins.java index 90d7b150030..80bc91dd080 100644 --- a/Mage.Sets/src/mage/sets/DuelDecksAnthologyElvesVsGoblins.java +++ b/Mage.Sets/src/mage/sets/DuelDecksAnthologyElvesVsGoblins.java @@ -17,7 +17,7 @@ public final class DuelDecksAnthologyElvesVsGoblins extends ExpansionSet { } private DuelDecksAnthologyElvesVsGoblins() { - super("Duel Decks: Anthology, Elves vs. Goblins", "DD3EVG", ExpansionSet.buildDate(2014, 12, 5), + super("Duel Decks: Anthology, Elves vs. Goblins", "EVG", ExpansionSet.buildDate(2014, 12, 5), SetType.SUPPLEMENTAL); this.blockName = "Duel Decks: Anthology"; this.hasBasicLands = true; diff --git a/Mage.Sets/src/mage/sets/DuelDecksAnthologyGarrukVsLiliana.java b/Mage.Sets/src/mage/sets/DuelDecksAnthologyGarrukVsLiliana.java index 82154d1beb0..0abb1006c18 100644 --- a/Mage.Sets/src/mage/sets/DuelDecksAnthologyGarrukVsLiliana.java +++ b/Mage.Sets/src/mage/sets/DuelDecksAnthologyGarrukVsLiliana.java @@ -17,7 +17,7 @@ public final class DuelDecksAnthologyGarrukVsLiliana extends ExpansionSet { } private DuelDecksAnthologyGarrukVsLiliana() { - super("Duel Decks: Anthology, Garruk vs. Liliana", "DD3GVL", ExpansionSet.buildDate(2014, 12, 5), + super("Duel Decks: Anthology, Garruk vs. Liliana", "GVL", ExpansionSet.buildDate(2014, 12, 5), SetType.SUPPLEMENTAL); this.blockName = "Duel Decks: Anthology"; this.hasBasicLands = true; diff --git a/Mage.Sets/src/mage/sets/DuelDecksAnthologyJaceVsChandra.java b/Mage.Sets/src/mage/sets/DuelDecksAnthologyJaceVsChandra.java index d75ab380eef..2939bed8bd1 100644 --- a/Mage.Sets/src/mage/sets/DuelDecksAnthologyJaceVsChandra.java +++ b/Mage.Sets/src/mage/sets/DuelDecksAnthologyJaceVsChandra.java @@ -17,7 +17,7 @@ public final class DuelDecksAnthologyJaceVsChandra extends ExpansionSet { } private DuelDecksAnthologyJaceVsChandra() { - super("Duel Decks: Anthology, Jace vs. Chandra", "DD3JVC", ExpansionSet.buildDate(2014, 12, 5), + super("Duel Decks: Anthology, Jace vs. Chandra", "JVC", ExpansionSet.buildDate(2014, 12, 5), SetType.SUPPLEMENTAL); this.blockName = "Duel Decks: Anthology"; this.hasBasicLands = true; diff --git a/Mage.Sets/src/mage/sets/DuelDecksElvesVsGoblins.java b/Mage.Sets/src/mage/sets/DuelDecksElvesVsGoblins.java index b86f6038692..7d3bbc1aaa3 100644 --- a/Mage.Sets/src/mage/sets/DuelDecksElvesVsGoblins.java +++ b/Mage.Sets/src/mage/sets/DuelDecksElvesVsGoblins.java @@ -16,7 +16,7 @@ public final class DuelDecksElvesVsGoblins extends ExpansionSet { } private DuelDecksElvesVsGoblins() { - super("Duel Decks: Elves vs. Goblins", "EVG", ExpansionSet.buildDate(2007, 11, 16), SetType.SUPPLEMENTAL); + super("Duel Decks: Elves vs. Goblins", "DD1", ExpansionSet.buildDate(2007, 11, 16), SetType.SUPPLEMENTAL); this.blockName = "Duel Decks"; this.hasBasicLands = true; diff --git a/Mage.Sets/src/mage/sets/DuelDecksMirrodinPureVsNewPhyrexia.java b/Mage.Sets/src/mage/sets/DuelDecksMirrodinPureVsNewPhyrexia.java index aeabfef7f19..198f1d8ffba 100644 --- a/Mage.Sets/src/mage/sets/DuelDecksMirrodinPureVsNewPhyrexia.java +++ b/Mage.Sets/src/mage/sets/DuelDecksMirrodinPureVsNewPhyrexia.java @@ -16,7 +16,7 @@ public class DuelDecksMirrodinPureVsNewPhyrexia extends ExpansionSet { } private DuelDecksMirrodinPureVsNewPhyrexia() { - super("Duel Decks: Mirrodin Pure vs. New Phyrexia", "TD2", ExpansionSet.buildDate(2011, 5, 14), SetType.SUPPLEMENTAL); + super("Duel Decks: Mirrodin Pure vs. New Phyrexia", "TD2", ExpansionSet.buildDate(2011, 5, 14), SetType.MAGIC_ONLINE); this.hasBoosters = false; this.hasBasicLands = true; From 2d97f9d24eff71b44290e26c9c7acf6df32a3e0c Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Tue, 17 Mar 2020 13:35:52 +0100 Subject: [PATCH 123/182] Added the Historic Anthology 1 & 2 (HA1, HA2) sets --- .../src/mage/sets/HistoricAnthology1.java | 44 +++++++++++++++++ .../src/mage/sets/HistoricAnthology2.java | 49 +++++++++++++++++++ 2 files changed, 93 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/HistoricAnthology1.java create mode 100644 Mage.Sets/src/mage/sets/HistoricAnthology2.java diff --git a/Mage.Sets/src/mage/sets/HistoricAnthology1.java b/Mage.Sets/src/mage/sets/HistoricAnthology1.java new file mode 100644 index 00000000000..94bed8ae953 --- /dev/null +++ b/Mage.Sets/src/mage/sets/HistoricAnthology1.java @@ -0,0 +1,44 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/ha1 + */ +public class HistoricAnthology1 extends ExpansionSet { + + private static final HistoricAnthology1 instance = new HistoricAnthology1(); + + public static HistoricAnthology1 getInstance() { + return instance; + } + + private HistoricAnthology1() { + super("Historic Anthology 1", "HA1", ExpansionSet.buildDate(2019, 11, 21), SetType.MAGIC_ONLINE); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Burning-Tree Emissary", 16, Rarity.UNCOMMON, mage.cards.b.BurningTreeEmissary.class)); + cards.add(new SetCardInfo("Captain Sisay", 17, Rarity.RARE, mage.cards.c.CaptainSisay.class)); + cards.add(new SetCardInfo("Cryptbreaker", 6, Rarity.RARE, mage.cards.c.Cryptbreaker.class)); + cards.add(new SetCardInfo("Darksteel Reactor", 20, Rarity.RARE, mage.cards.d.DarksteelReactor.class)); + cards.add(new SetCardInfo("Distant Melody", 5, Rarity.COMMON, mage.cards.d.DistantMelody.class)); + cards.add(new SetCardInfo("Elvish Visionary", 13, Rarity.COMMON, mage.cards.e.ElvishVisionary.class)); + cards.add(new SetCardInfo("Fauna Shaman", 14, Rarity.RARE, mage.cards.f.FaunaShaman.class)); + cards.add(new SetCardInfo("Goblin Matron", 11, Rarity.UNCOMMON, mage.cards.g.GoblinMatron.class)); + cards.add(new SetCardInfo("Hidetsugu's Second Rite", 12, Rarity.RARE, mage.cards.h.HidetsugusSecondRite.class)); + cards.add(new SetCardInfo("Hypnotic Specter", 7, Rarity.RARE, mage.cards.h.HypnoticSpecter.class)); + cards.add(new SetCardInfo("Imperious Perfect", 15, Rarity.UNCOMMON, mage.cards.i.ImperiousPerfect.class)); + cards.add(new SetCardInfo("Kiln Fiend", 10, Rarity.COMMON, mage.cards.k.KilnFiend.class)); + cards.add(new SetCardInfo("Kinsbaile Cavalier", 3, Rarity.RARE, mage.cards.k.KinsbaileCavalier.class)); + cards.add(new SetCardInfo("Mind Stone", 19, Rarity.COMMON, mage.cards.m.MindStone.class)); + cards.add(new SetCardInfo("Ornithopter", 18, Rarity.UNCOMMON, mage.cards.o.Ornithopter.class)); + cards.add(new SetCardInfo("Phyrexian Arena", 8, Rarity.RARE, mage.cards.p.PhyrexianArena.class)); + cards.add(new SetCardInfo("Serra Ascendant", 1, Rarity.RARE, mage.cards.s.SerraAscendant.class)); + cards.add(new SetCardInfo("Soul Warden", 2, Rarity.COMMON, mage.cards.s.SoulWarden.class)); + cards.add(new SetCardInfo("Tendrils of Corruption", 9, Rarity.COMMON, mage.cards.t.TendrilsOfCorruption.class)); + cards.add(new SetCardInfo("Treasure Hunt", 4, Rarity.COMMON, mage.cards.t.TreasureHunt.class)); + } +} diff --git a/Mage.Sets/src/mage/sets/HistoricAnthology2.java b/Mage.Sets/src/mage/sets/HistoricAnthology2.java new file mode 100644 index 00000000000..ae56ddcaefe --- /dev/null +++ b/Mage.Sets/src/mage/sets/HistoricAnthology2.java @@ -0,0 +1,49 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/ha2 + */ +public class HistoricAnthology2 extends ExpansionSet { + + private static final HistoricAnthology2 instance = new HistoricAnthology2(); + + public static HistoricAnthology2 getInstance() { + return instance; + } + + private HistoricAnthology2() { + super("Historic Anthology 2", "HA2", ExpansionSet.buildDate(2020, 3, 12), SetType.MAGIC_ONLINE); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Ancestral Mask", 13, Rarity.COMMON, mage.cards.a.AncestralMask.class)); + cards.add(new SetCardInfo("Barren Moor", 19, Rarity.COMMON, mage.cards.b.BarrenMoor.class)); + cards.add(new SetCardInfo("Bojuka Bog", 20, Rarity.COMMON, mage.cards.b.BojukaBog.class)); + cards.add(new SetCardInfo("Brain Maggot", 7, Rarity.UNCOMMON, mage.cards.b.BrainMaggot.class)); + cards.add(new SetCardInfo("Dragonmaster Outcast", 11, Rarity.MYTHIC, mage.cards.d.DragonmasterOutcast.class)); + cards.add(new SetCardInfo("Forgotten Cave", 21, Rarity.COMMON, mage.cards.f.ForgottenCave.class)); + cards.add(new SetCardInfo("Ghost Quarter", 22, Rarity.UNCOMMON, mage.cards.g.GhostQuarter.class)); + cards.add(new SetCardInfo("Goblin Ruinblaster", 12, Rarity.UNCOMMON, mage.cards.g.GoblinRuinblaster.class)); + cards.add(new SetCardInfo("Inexorable Tide", 6, Rarity.RARE, mage.cards.i.InexorableTide.class)); + cards.add(new SetCardInfo("Knight of the Reliquary", 15, Rarity.RARE, mage.cards.k.KnightOfTheReliquary.class)); + cards.add(new SetCardInfo("Lonely Sandbar", 23, Rarity.COMMON, mage.cards.l.LonelySandbar.class)); + cards.add(new SetCardInfo("Maelstrom Pulse", 16, Rarity.RARE, mage.cards.m.MaelstromPulse.class)); + cards.add(new SetCardInfo("Meddling Mage", 17, Rarity.RARE, mage.cards.m.MeddlingMage.class)); + cards.add(new SetCardInfo("Merrow Reejerey", 5, Rarity.UNCOMMON, mage.cards.m.MerrowReejerey.class)); + cards.add(new SetCardInfo("Nyx-Fleece Ram", 1, Rarity.UNCOMMON, mage.cards.n.NyxFleeceRam.class)); + cards.add(new SetCardInfo("Pack Rat", 8, Rarity.RARE, mage.cards.p.PackRat.class)); + cards.add(new SetCardInfo("Platinum Angel", 18, Rarity.MYTHIC, mage.cards.p.PlatinumAngel.class)); + cards.add(new SetCardInfo("Ranger of Eos", 2, Rarity.RARE, mage.cards.r.RangerOfEos.class)); + cards.add(new SetCardInfo("Secluded Steppe", 24, Rarity.COMMON, mage.cards.s.SecludedSteppe.class)); + cards.add(new SetCardInfo("Sigil of the Empty Throne", 3, Rarity.RARE, mage.cards.s.SigilOfTheEmptyThrone.class)); + cards.add(new SetCardInfo("Terravore", 14, Rarity.RARE, mage.cards.t.Terravore.class)); + cards.add(new SetCardInfo("Thalia, Guardian of Thraben", 4, Rarity.RARE, mage.cards.t.ThaliaGuardianOfThraben.class)); + cards.add(new SetCardInfo("Tranquil Thicket", 25, Rarity.COMMON, mage.cards.t.TranquilThicket.class)); + cards.add(new SetCardInfo("Virulent Plague", 9, Rarity.UNCOMMON, mage.cards.v.VirulentPlague.class)); + cards.add(new SetCardInfo("Waste Not", 10, Rarity.RARE, mage.cards.w.WasteNot.class)); + } +} From 874b1a776018537ba1bcaf67b1d592e075e772a0 Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Tue, 17 Mar 2020 13:37:03 +0100 Subject: [PATCH 124/182] Amonkhet & Amonkhet Masterpieces: Aligned the Masterpiece set code with Scryfall. --- Mage.Sets/src/mage/sets/Amonkhet.java | 2 +- Mage.Sets/src/mage/sets/MasterpieceSeriesAmonkhet.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Mage.Sets/src/mage/sets/Amonkhet.java b/Mage.Sets/src/mage/sets/Amonkhet.java index dd916747732..4cfcba2fbb7 100644 --- a/Mage.Sets/src/mage/sets/Amonkhet.java +++ b/Mage.Sets/src/mage/sets/Amonkhet.java @@ -331,7 +331,7 @@ public final class Amonkhet extends ExpansionSet { public List getSpecialLand() { if (savedSpecialLand.isEmpty()) { CardCriteria criteria = new CardCriteria(); - criteria.setCodes("MPS-AKH"); + criteria.setCodes("MP2"); criteria.minCardNumber(1); criteria.maxCardNumber(30); savedSpecialLand.addAll(CardRepository.instance.findCards(criteria)); diff --git a/Mage.Sets/src/mage/sets/MasterpieceSeriesAmonkhet.java b/Mage.Sets/src/mage/sets/MasterpieceSeriesAmonkhet.java index 710af8423e5..448fa0ffc43 100644 --- a/Mage.Sets/src/mage/sets/MasterpieceSeriesAmonkhet.java +++ b/Mage.Sets/src/mage/sets/MasterpieceSeriesAmonkhet.java @@ -18,7 +18,7 @@ public final class MasterpieceSeriesAmonkhet extends ExpansionSet { } private MasterpieceSeriesAmonkhet() { - super("Masterpiece Series Amonkhet", "MPS-AKH", ExpansionSet.buildDate(2017, 4, 28), SetType.PROMOTIONAL); + super("Masterpiece Series Amonkhet", "MP2", ExpansionSet.buildDate(2017, 4, 28), SetType.PROMOTIONAL); this.blockName = "Masterpiece Series"; this.hasBoosters = false; this.hasBasicLands = false; From 654eb7e6a676864feb3aa06e41ae5735d25f0645 Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Tue, 17 Mar 2020 14:28:57 +0100 Subject: [PATCH 125/182] Added the Magazine Inserts (PMEI) set. --- Mage.Sets/src/mage/sets/MagazineInserts.java | 58 ++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/MagazineInserts.java diff --git a/Mage.Sets/src/mage/sets/MagazineInserts.java b/Mage.Sets/src/mage/sets/MagazineInserts.java new file mode 100644 index 00000000000..277dd699be2 --- /dev/null +++ b/Mage.Sets/src/mage/sets/MagazineInserts.java @@ -0,0 +1,58 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/pmei + */ +public class MagazineInserts extends ExpansionSet { + + private static final MagazineInserts instance = new MagazineInserts(); + + public static MagazineInserts getInstance() { + return instance; + } + + private MagazineInserts() { + super("Magazine Inserts", "PMEI", ExpansionSet.buildDate(2020, 3, 26), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + // Commented cards are non-English printings (most are Japanese, Jamuraan Lion has a German printing) + + //cards.add(new SetCardInfo("Archangel", 29, Rarity.RARE, mage.cards.a.Archangel.class)); + //cards.add(new SetCardInfo("Ascendant Evincar", 28, Rarity.RARE, mage.cards.a.AscendantEvincar.class)); + cards.add(new SetCardInfo("Blue Elemental Blast", 5, Rarity.COMMON, mage.cards.b.BlueElementalBlast.class)); + //cards.add(new SetCardInfo("Cast Down", 30, Rarity.UNCOMMON, mage.cards.c.CastDown.class)); + //cards.add(new SetCardInfo("Chandra's Outrage", 18, Rarity.COMMON, mage.cards.c.ChandrasOutrage.class)); + //cards.add(new SetCardInfo("Chandra's Spitfire", 19, Rarity.UNCOMMON, mage.cards.c.ChandrasSpitfire.class)); + //cards.add(new SetCardInfo("Cunning Sparkmage", 17, Rarity.UNCOMMON, mage.cards.c.CunningSparkmage.class)); + //cards.add(new SetCardInfo("Darksteel Juggernaut", 16, Rarity.RARE, mage.cards.d.DarksteelJuggernaut.class)); + //cards.add(new SetCardInfo("Daxos, Blessed by the Sun", 36, Rarity.UNCOMMON, mage.cards.d.DaxosBlessedByTheSun.class)); + //cards.add(new SetCardInfo("Diabolic Edict", 31, Rarity.RARE, mage.cards.d.DiabolicEdict.class)); + //cards.add(new SetCardInfo("Duress", 34, Rarity.RARE, mage.cards.d.Duress.class)); + cards.add(new SetCardInfo("Fireball", 4, Rarity.COMMON, mage.cards.f.Fireball.class)); + //cards.add(new SetCardInfo("Jamuraan Lion", "10*", Rarity.COMMON, mage.cards.j.JamuraanLion.class)); + //cards.add(new SetCardInfo("Kuldotha Phoenix", 20, Rarity.RARE, mage.cards.k.KuldothaPhoenix.class)); + //cards.add(new SetCardInfo("Lava Coil", 33, Rarity.UNCOMMON, mage.cards.l.LavaCoil.class)); + cards.add(new SetCardInfo("Lightning Hounds", 10, Rarity.COMMON, mage.cards.l.LightningHounds.class)); + //cards.add(new SetCardInfo("Parallax Dementia", 27, Rarity.COMMON, mage.cards.p.ParallaxDementia.class)); + //cards.add(new SetCardInfo("Phantasmal Dragon", 21, Rarity.UNCOMMON, mage.cards.p.PhantasmalDragon.class)); + cards.add(new SetCardInfo("Phyrexian Rager", 14, Rarity.COMMON, mage.cards.p.PhyrexianRager.class)); + //cards.add(new SetCardInfo("Sandbar Crocodile", 22, Rarity.COMMON, mage.cards.s.SandbarCrocodile.class)); + cards.add(new SetCardInfo("Scent of Cinder", 9, Rarity.COMMON, mage.cards.s.ScentOfCinder.class)); + //cards.add(new SetCardInfo("Shivan Dragon", 15, Rarity.RARE, mage.cards.s.ShivanDragon.class)); + //cards.add(new SetCardInfo("Shock", 32, Rarity.RARE, mage.cards.s.Shock.class)); + //cards.add(new SetCardInfo("Shrieking Drake", 24, Rarity.COMMON, mage.cards.s.ShriekingDrake.class)); + cards.add(new SetCardInfo("Silver Drake", 13, Rarity.COMMON, mage.cards.s.SilverDrake.class)); + cards.add(new SetCardInfo("Spined Wurm", 11, Rarity.COMMON, mage.cards.s.SpinedWurm.class)); + //cards.add(new SetCardInfo("Staggering Insight", 37, Rarity.RARE, mage.cards.s.StaggeringInsight.class)); + //cards.add(new SetCardInfo("Stream of Life", 25, Rarity.COMMON, mage.cards.s.StreamOfLife.class)); + //cards.add(new SetCardInfo("Thorn Elemental", 26, Rarity.RARE, mage.cards.t.ThornElemental.class)); + //cards.add(new SetCardInfo("Voltaic Key", 35, Rarity.RARE, mage.cards.v.VoltaicKey.class)); + cards.add(new SetCardInfo("Warmonger", 12, Rarity.UNCOMMON, mage.cards.w.Warmonger.class)); + //cards.add(new SetCardInfo("Zhalfirin Knight", 23, Rarity.COMMON, mage.cards.z.ZhalfirinKnight.class)); + } +} From ab7f2c5bc3a040198ec098f7035098bf52892218 Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Tue, 17 Mar 2020 14:47:56 +0100 Subject: [PATCH 126/182] =?UTF-8?q?Deprecated=20the=20MediaInserts=20set,?= =?UTF-8?q?=20which=20isn=E2=80=99t=20listed=20at=20all=20on=20Scryfall.?= =?UTF-8?q?=20Added=20a=20note=20to=20the=20Starter=202000=20set,=20which?= =?UTF-8?q?=20seems=20to=20be=20incomplete=20on=20Scyfall.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Mage.Sets/src/mage/sets/MediaInserts.java | 4 ++++ Mage.Sets/src/mage/sets/Starter2000.java | 3 ++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/Mage.Sets/src/mage/sets/MediaInserts.java b/Mage.Sets/src/mage/sets/MediaInserts.java index 4ca2dbfb030..4fd1d0397ef 100644 --- a/Mage.Sets/src/mage/sets/MediaInserts.java +++ b/Mage.Sets/src/mage/sets/MediaInserts.java @@ -5,6 +5,10 @@ import mage.cards.ExpansionSet; import mage.constants.Rarity; import mage.constants.SetType; +/** + * This looks like it is an aggregate set + * @deprecated + */ public final class MediaInserts extends ExpansionSet { private static final MediaInserts instance = new MediaInserts(); diff --git a/Mage.Sets/src/mage/sets/Starter2000.java b/Mage.Sets/src/mage/sets/Starter2000.java index f4956946dc1..b412a1fdd88 100644 --- a/Mage.Sets/src/mage/sets/Starter2000.java +++ b/Mage.Sets/src/mage/sets/Starter2000.java @@ -6,7 +6,8 @@ import mage.constants.Rarity; import mage.constants.SetType; /** - * + * Somehow, Scryfall only lists 20 cards in this set. + * https://scryfall.com/sets/s00 * @author LevelX2 */ public final class Starter2000 extends ExpansionSet { From 529552dd2cce441e4426687e55890342fe2210b4 Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Tue, 17 Mar 2020 16:06:44 +0100 Subject: [PATCH 127/182] Fixed set codes for the Duel Deck Anthology deck sets. The decks now use the set codes from Scryfall. --- .../plugins/card/dl/sources/GathererSets.java | 20 ++++++++--------- .../src/main/resources/card-pictures-tok.txt | 22 +++++++++---------- .../serverside/deck/DeckValidatorTest.java | 2 +- .../src/main/java/mage/verify/MtgJson.java | 5 ++--- .../mage/game/permanent/token/BeastToken.java | 4 ++-- .../game/permanent/token/BeastToken2.java | 4 ++-- .../permanent/token/ElementalShamanToken.java | 2 +- .../game/permanent/token/ElephantToken.java | 2 +- .../game/permanent/token/GoblinToken.java | 2 +- Utils/get_modo_artids.pl | 8 +++---- Utils/mtg-sets-data.txt | 8 +++---- 11 files changed, 39 insertions(+), 40 deletions(-) diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/GathererSets.java b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/GathererSets.java index 26887719432..f18151e681b 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/GathererSets.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/GathererSets.java @@ -64,13 +64,13 @@ public class GathererSets implements Iterable { // "PALP" -- Gatherer does not have the set Asia Pacific Land Program // "ATH" -- has cards from many sets, symbol does not exist on gatherer // "CLASH", "CP", "DPA", "PELP", "PGPX", "GRC", "GUR", "H17", "JR", "MBP", "MGDC", "MLP", "PPRE", "SUS", "SWS", "WMCQ", // need to fix - "H09", "PD2", "PD3", "UNH", "CM1", "V11", "A25", "UST", "IMA", "DD2", "EVG", "DDC", "DDE", "DDD", "8EB", "9EB", "CHR", "G18", "DD3GVL", "S00", "S99", "UGL" // ok + "H09", "PD2", "PD3", "UNH", "CM1", "V11", "A25", "UST", "IMA", "DD2", "EVG", "DDC", "DDE", "DDD", "8EB", "9EB", "CHR", "G18", "GVL", "S00", "S99", "UGL" // ok // current testing }; private static final String[] symbolsBasicWithMyth = {"M10", "M11", "M12", "M13", "M14", "M15", "ORI", "DDF", "DDG", "DDH", "DDI", "DDJ", "DDK", "DDL", "DDM", "DDN", - "DD3DVD", "DD3JVC", "DDO", "DDP", "DDQ", "DDR", "DDS", "DDT", "DDU", + "DVD", "JVC", "DDO", "DDP", "DDQ", "DDR", "DDS", "DDT", "DDU", "ALA", "CON", "ARB", "ZEN", "WWK", "ROE", "SOM", "MBS", "NPH", @@ -98,11 +98,11 @@ public class GathererSets implements Iterable { }; private static final String[] symbolsOnlyMyth = { - "DRB", "V09", "V10", "V12", "V13", "V14", "V15", "V16", "V17", "EXP", "MEDM" + "DRB", "V09", "V10", "V12", "V13", "V14", "V15", "V16", "V17", "EXP", "MED" // "HTR" does not exist }; private static final String[] symbolsOnlySpecial = { - "MPS", "MPS-AKH" + "MPS", "MP2" }; private static final HashMap codeReplacements = new HashMap<>(); @@ -120,10 +120,10 @@ public class GathererSets implements Iterable { codeReplacements.put("ATQ", "AQ"); codeReplacements.put("CMA", "CM1"); codeReplacements.put("CHR", "CH"); - codeReplacements.put("DD3DVD", "DD3_DVD"); - codeReplacements.put("DD3EVG", "DD3_EVG"); - codeReplacements.put("DD3GVL", "DD3_GVL"); - codeReplacements.put("DD3JVC", "DD3_JVC"); + codeReplacements.put("DVD", "DD3_DVD"); + codeReplacements.put("EVG", "DD3_EVG"); + codeReplacements.put("GVL", "DD3_GVL"); + codeReplacements.put("JVC", "DD3_JVC"); codeReplacements.put("DRK", "DK"); codeReplacements.put("EXO", "EX"); codeReplacements.put("FEM", "FE"); @@ -133,9 +133,9 @@ public class GathererSets implements Iterable { codeReplacements.put("LEA", "1E"); codeReplacements.put("LEB", "2E"); codeReplacements.put("LEG", "LE"); - codeReplacements.put("MEDM", "MPS_WAR"); + codeReplacements.put("MED", "MPS_WAR"); codeReplacements.put("MPS", "MPS_KLD"); - codeReplacements.put("MPS-AKH", "MPS_AKH"); + codeReplacements.put("MP2", "MPS_AKH"); codeReplacements.put("MIR", "MI"); codeReplacements.put("MMQ", "MM"); codeReplacements.put("NEM", "NE"); diff --git a/Mage.Client/src/main/resources/card-pictures-tok.txt b/Mage.Client/src/main/resources/card-pictures-tok.txt index 1ef4df299c7..712f9912df7 100644 --- a/Mage.Client/src/main/resources/card-pictures-tok.txt +++ b/Mage.Client/src/main/resources/card-pictures-tok.txt @@ -502,18 +502,18 @@ |Generate|TOK:DD3C|Beast|1| |Generate|TOK:DD3C|Beast|2| |Generate|TOK:DD3C|Elephant|| -|Generate|TOK:DD3DVD|Demon|||ReignOfThePitToken| -|Generate|TOK:DD3DVD|Spirit|||SpiritWhiteToken| -|Generate|TOK:DD3DVD|Thrull|||BreedingPitBlackInsectToken| +|Generate|TOK:DVD|Demon|||ReignOfThePitToken| +|Generate|TOK:DVD|Spirit|||SpiritWhiteToken| +|Generate|TOK:DVD|Thrull|||BreedingPitBlackInsectToken| |Generate|TOK:DD3D|Elemental Shaman|| -|Generate|TOK:DD3EVG|Elf Warrior|||ElfToken| -|Generate|TOK:DD3EVG|Goblin|||GoblinToken| -|Generate|TOK:DD3GVL|Ape|||PongifyApeToken| -|Generate|TOK:DD3GVL|Bat|||BatToken| -|Generate|TOK:DD3GVL|Beast|||BeastToken2| -|Generate|TOK:DD3GVL|Beast|||BeastToken| -|Generate|TOK:DD3GVL|Elephant|||ElephantToken| -|Generate|TOK:DD3JVC|Elemental Shaman|||ElementalShamanToken| +|Generate|TOK:EVG|Elf Warrior|||ElfToken| +|Generate|TOK:EVG|Goblin|||GoblinToken| +|Generate|TOK:GVL|Ape|||PongifyApeToken| +|Generate|TOK:GVL|Bat|||BatToken| +|Generate|TOK:GVL|Beast|||BeastToken2| +|Generate|TOK:GVL|Beast|||BeastToken| +|Generate|TOK:GVL|Elephant|||ElephantToken| +|Generate|TOK:JVC|Elemental Shaman|||ElementalShamanToken| |Generate|TOK:DDC|Demon|||ReignOfThePitToken| |Generate|TOK:DDC|Spirit|||SpiritWhiteToken| |Generate|TOK:DDC|Thrull|||BreedingPitBlackInsectToken| diff --git a/Mage.Tests/src/test/java/org/mage/test/serverside/deck/DeckValidatorTest.java b/Mage.Tests/src/test/java/org/mage/test/serverside/deck/DeckValidatorTest.java index 1628d329dc6..c0cd480fb9f 100644 --- a/Mage.Tests/src/test/java/org/mage/test/serverside/deck/DeckValidatorTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/serverside/deck/DeckValidatorTest.java @@ -115,7 +115,7 @@ public class DeckValidatorTest extends MageTestBase { @Test public void testModernCounterspell1() { ArrayList deckList = new ArrayList<>(); - deckList.add(new CardNameAmount("DD3JVC", 24, 4)); + deckList.add(new CardNameAmount("JVC", 24, 4)); deckList.add(new CardNameAmount("Mountain", 56)); Assert.assertFalse("Counterspell not allowed in modern", testDeckValid(new Modern(), deckList)); diff --git a/Mage.Verify/src/main/java/mage/verify/MtgJson.java b/Mage.Verify/src/main/java/mage/verify/MtgJson.java index dd12823d154..bf42cd50e14 100644 --- a/Mage.Verify/src/main/java/mage/verify/MtgJson.java +++ b/Mage.Verify/src/main/java/mage/verify/MtgJson.java @@ -28,7 +28,6 @@ public final class MtgJson { // TODO: MtgJson now seems to use upper case set codes only. // Review the ones beginning with a lower case "p" and remove the redundant entries. static { - mtgJsonToXMageCodes.put("pWCQ", "WMCQ"); mtgJsonToXMageCodes.put("pSUS", "SUS"); mtgJsonToXMageCodes.put("pPRE", "PPRE"); // mtgJsonToXMageCodes.put("pMPR", "MPRP"); // TODO: The set was split into the individual sets @@ -41,9 +40,9 @@ public final class MtgJson { mtgJsonToXMageCodes.put("pARL", "PARL"); // TODO: What about the other Arena League sets (1999-2006)? mtgJsonToXMageCodes.put("pALP", "PALP"); mtgJsonToXMageCodes.put("PO2", "P02"); - mtgJsonToXMageCodes.put("DD3_JVC", "DD3JVC"); + mtgJsonToXMageCodes.put("DD3_JVC", "JVC"); mtgJsonToXMageCodes.put("DD3_GVL", "DDD"); - mtgJsonToXMageCodes.put("DD3_EVG", "DD3EVG"); + mtgJsonToXMageCodes.put("DD3_EVG", "EVG"); mtgJsonToXMageCodes.put("DD3_DVD", "DDC"); mtgJsonToXMageCodes.put("NMS", "NEM"); mtgJsonToXMageCodes.put("MPS_AKH", "MPS-AKH"); diff --git a/Mage/src/main/java/mage/game/permanent/token/BeastToken.java b/Mage/src/main/java/mage/game/permanent/token/BeastToken.java index 50727e81da4..78e19582c03 100644 --- a/Mage/src/main/java/mage/game/permanent/token/BeastToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/BeastToken.java @@ -16,7 +16,7 @@ public final class BeastToken extends TokenImpl { static final private List tokenImageSets = new ArrayList<>(); static { - tokenImageSets.addAll(Arrays.asList("C14", "LRW", "M15", "M14", "DDL", "M13", "M12", "DD3GVL", "NPH", "M11", "M10", "EVE", "MM3", "CMA", "E01", "C19")); + tokenImageSets.addAll(Arrays.asList("C14", "LRW", "M15", "M14", "DDL", "M13", "M12", "GVL", "NPH", "M11", "M10", "EVE", "MM3", "CMA", "E01", "C19")); } public BeastToken() { @@ -45,7 +45,7 @@ public final class BeastToken extends TokenImpl { if (getOriginalExpansionSetCode().equals("M15")) { this.setTokenType(2); } - if (getOriginalExpansionSetCode().equals("DD3GVL") || getOriginalExpansionSetCode().equals("C14") || getOriginalExpansionSetCode().equals("DDD") || getOriginalExpansionSetCode().equals("MM3")) { + if (getOriginalExpansionSetCode().equals("GVL") || getOriginalExpansionSetCode().equals("C14") || getOriginalExpansionSetCode().equals("DDD") || getOriginalExpansionSetCode().equals("MM3")) { this.setTokenType(1); } } diff --git a/Mage/src/main/java/mage/game/permanent/token/BeastToken2.java b/Mage/src/main/java/mage/game/permanent/token/BeastToken2.java index f59cbc94a6d..c25bd3e8b47 100644 --- a/Mage/src/main/java/mage/game/permanent/token/BeastToken2.java +++ b/Mage/src/main/java/mage/game/permanent/token/BeastToken2.java @@ -16,7 +16,7 @@ public final class BeastToken2 extends TokenImpl { static final private List tokenImageSets = new ArrayList<>(); static { - tokenImageSets.addAll(Arrays.asList("ZEN", "C14", "DDD", "C15", "DD3GVL", "MM3", "CMA", "E01", "C19")); + tokenImageSets.addAll(Arrays.asList("ZEN", "C14", "DDD", "C15", "GVL", "MM3", "CMA", "E01", "C19")); } public BeastToken2() { @@ -50,7 +50,7 @@ public final class BeastToken2 extends TokenImpl { @Override public void setExpansionSetCodeForImage(String code) { super.setExpansionSetCodeForImage(code); - if (getOriginalExpansionSetCode().equals("C14") || getOriginalExpansionSetCode().equals("DDD") || getOriginalExpansionSetCode().equals("DD3GVL") || getOriginalExpansionSetCode().equals("MM3")) { + if (getOriginalExpansionSetCode().equals("C14") || getOriginalExpansionSetCode().equals("DDD") || getOriginalExpansionSetCode().equals("GVL") || getOriginalExpansionSetCode().equals("MM3")) { this.setTokenType(2); } } diff --git a/Mage/src/main/java/mage/game/permanent/token/ElementalShamanToken.java b/Mage/src/main/java/mage/game/permanent/token/ElementalShamanToken.java index 88637b7b67d..0ebe90174f1 100644 --- a/Mage/src/main/java/mage/game/permanent/token/ElementalShamanToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/ElementalShamanToken.java @@ -18,7 +18,7 @@ public final class ElementalShamanToken extends TokenImpl { static final private List tokenImageSets = new ArrayList<>(); static { - tokenImageSets.addAll(Arrays.asList("C15", "DD3JVC", "DD2", "LRW")); + tokenImageSets.addAll(Arrays.asList("C15", "JVC", "DD2", "LRW")); } public ElementalShamanToken(boolean withHaste) { diff --git a/Mage/src/main/java/mage/game/permanent/token/ElephantToken.java b/Mage/src/main/java/mage/game/permanent/token/ElephantToken.java index 71ae36fa8be..e98809db1cf 100644 --- a/Mage/src/main/java/mage/game/permanent/token/ElephantToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/ElephantToken.java @@ -16,7 +16,7 @@ public final class ElephantToken extends TokenImpl { static final private List tokenImageSets = new ArrayList<>(); static { - tokenImageSets.addAll(Arrays.asList("C14", "CNS", "DDD", "MM2", "WWK", "OGW", "C15", "DD3GVL", "MM3", "CMA", "MH1")); + tokenImageSets.addAll(Arrays.asList("C14", "CNS", "DDD", "MM2", "WWK", "OGW", "C15", "GVL", "MM3", "CMA", "MH1")); } public ElephantToken() { diff --git a/Mage/src/main/java/mage/game/permanent/token/GoblinToken.java b/Mage/src/main/java/mage/game/permanent/token/GoblinToken.java index da279757c1b..5eae26f2d38 100644 --- a/Mage/src/main/java/mage/game/permanent/token/GoblinToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/GoblinToken.java @@ -18,7 +18,7 @@ public final class GoblinToken extends TokenImpl { static { tokenImageSets.addAll(Arrays.asList("10E", "ALA", "SOM", "M10", "NPH", "M13", "RTR", - "MMA", "M15", "C14", "KTK", "EVG", "DTK", "ORI", "DDG", "DDN", "DD3EVG", "MM2", + "MMA", "M15", "C14", "KTK", "EVG", "DTK", "ORI", "DDG", "DDN", "EVG", "MM2", "MM3", "EMA", "C16", "DOM", "ANA", "RNA", "WAR", "MH1")); } diff --git a/Utils/get_modo_artids.pl b/Utils/get_modo_artids.pl index 287ce363dd0..6eea0494025 100644 --- a/Utils/get_modo_artids.pl +++ b/Utils/get_modo_artids.pl @@ -34,10 +34,10 @@ $fix_set_codes {"AP"} = "APC"; $fix_set_codes {"AN"} = "ARN"; $fix_set_codes {"AQ"} = "ATQ"; $fix_set_codes {"CM1"} = "CMA"; -$fix_set_codes {"DD3_DVD"} = "DD3DVD"; -$fix_set_codes {"DD3_EVG"} = "DD3EVG"; -$fix_set_codes {"DD3_GLV"} = "DD3GLV"; -$fix_set_codes {"DD3_JVC"} = "DD3JVC"; +$fix_set_codes {"DD3_DVD"} = "DVD"; +$fix_set_codes {"DD3_EVG"} = "EVG"; +$fix_set_codes {"DD3_GLV"} = "GLV"; +$fix_set_codes {"DD3_JVC"} = "JVC"; $fix_set_codes {"DK"} = "DRK"; $fix_set_codes {"EX"} = "EXO"; $fix_set_codes {"FE"} = "FEM"; diff --git a/Utils/mtg-sets-data.txt b/Utils/mtg-sets-data.txt index dcf78d3f08f..cebde6a01d1 100644 --- a/Utils/mtg-sets-data.txt +++ b/Utils/mtg-sets-data.txt @@ -47,10 +47,10 @@ Conflux|CON| Champs|CP| Coldsnap|CSP| Duel Decks: Jace vs. Chandra|DD2| -Duel Decks: Anthology, Divine vs. Demonic|DD3DVD| -Duel Decks: Anthology, Elves vs. Goblins|DD3EVG| -Duel Decks: Anthology, Garruk vs. Liliana|DD3GVL| -Duel Decks: Anthology, Jace vs. Chandra|DD3JVC| +Duel Decks: Anthology, Divine vs. Demonic|DVD| +Duel Decks: Anthology, Elves vs. Goblins|EVG| +Duel Decks: Anthology, Garruk vs. Liliana|GVL| +Duel Decks: Anthology, Jace vs. Chandra|JVC| Duel Decks: Divine vs. Demonic|DDC| Duel Decks: Garruk vs. Liliana|DDD| Duel Decks: Phyrexia vs. the Coalition|DDE| From 2e08c1a9c4a47e142b745f9ea8d6569590f0a5a9 Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Tue, 17 Mar 2020 17:23:49 +0100 Subject: [PATCH 128/182] Test for NULL values in test_CreateRandomDeck(). Sometimes, building a random deck fails and returns NULL. Properly handle this case by adding some assert statements that verify that a Deck instance is actually returned, before checking the cards. Prevents NPEs during test runs. --- .../src/test/java/org/mage/test/load/LoadTest.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/Mage.Tests/src/test/java/org/mage/test/load/LoadTest.java b/Mage.Tests/src/test/java/org/mage/test/load/LoadTest.java index 2cb55d3994d..d1e77dad433 100644 --- a/Mage.Tests/src/test/java/org/mage/test/load/LoadTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/load/LoadTest.java @@ -59,46 +59,60 @@ public class LoadTest { Deck deck; deck = DeckTestUtils.buildRandomDeck("G", false); + Assert.assertNotNull(deck); for (Card card : deck.getCards()) { + Assert.assertNotNull(card); Assert.assertTrue("card " + card.getName() + " color " + card.getColorIdentity().toString() + " must be in G", card.getColorIdentity().isGreen()); } deck = DeckTestUtils.buildRandomDeck("U", false); + Assert.assertNotNull(deck); for (Card card : deck.getCards()) { + Assert.assertNotNull(card); Assert.assertTrue("card " + card.getName() + " color " + card.getColorIdentity().toString() + " must be in U", card.getColorIdentity().isBlue()); } deck = DeckTestUtils.buildRandomDeck("BR", false); + Assert.assertNotNull(deck); for (Card card : deck.getCards()) { + Assert.assertNotNull(card); Assert.assertTrue("card " + card.getName() + " color " + card.getColorIdentity().toString() + " must be in BR", card.getColorIdentity().isBlack() || card.getColorIdentity().isRed()); } deck = DeckTestUtils.buildRandomDeck("BUG", false); + Assert.assertNotNull(deck); for (Card card : deck.getCards()) { + Assert.assertNotNull(card); Assert.assertTrue("card " + card.getName() + " color " + card.getColorIdentity().toString() + " must be in BUG", card.getColorIdentity().isBlack() || card.getColorIdentity().isBlue() || card.getColorIdentity().isGreen()); } // lands deck = DeckTestUtils.buildRandomDeck("UR", true); + Assert.assertNotNull(deck); for (Card card : deck.getCards()) { + Assert.assertNotNull(card); Assert.assertTrue("card " + card.getName() + " color " + card.getColorIdentity().toString() + " must be in UR", card.getColorIdentity().isBlue() || card.getColorIdentity().isRed()); Assert.assertEquals("card " + card.getName() + " must be basic land ", Rarity.LAND, card.getRarity()); } deck = DeckTestUtils.buildRandomDeck("B", true); + Assert.assertNotNull(deck); for (Card card : deck.getCards()) { + Assert.assertNotNull(card); Assert.assertTrue("card " + card.getName() + " color " + card.getColorIdentity().toString() + " must be in B", card.getColorIdentity().isBlack()); Assert.assertEquals("card " + card.getName() + " must be basic land ", Rarity.LAND, card.getRarity()); } // allowed sets deck = DeckTestUtils.buildRandomDeck("B", true, "GRN"); + Assert.assertNotNull(deck); for (Card card : deck.getCards()) { + Assert.assertNotNull(card); Assert.assertTrue("card " + card.getName() + " color " + card.getColorIdentity().toString() + " must be in B", card.getColorIdentity().isBlack()); Assert.assertEquals("card " + card.getName() + " have wrong set code " + card.getExpansionSetCode(), "GRN", card.getExpansionSetCode()); } From d9803dcd87f5a82f5cca7151a3360254d9a01c33 Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Tue, 17 Mar 2020 17:26:18 +0100 Subject: [PATCH 129/182] Updated the VerifyCardDataTest Added newly added Silver bordered cards that need to be skipped during tests. Added temporary skips for Chicken -> Bird errata. --- .../src/test/java/mage/verify/VerifyCardDataTest.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java b/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java index a7c4e0026ac..6ccc816491e 100644 --- a/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java +++ b/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java @@ -92,7 +92,6 @@ public class VerifyCardDataTest { skipListCreate(SKIP_LIST_PT); skipListAddName(SKIP_LIST_PT, "UST", "Garbage Elemental"); skipListAddName(SKIP_LIST_PT, "UST", "Infinity Elemental"); - skipListAddName(SKIP_LIST_PT, "UNH", "Old Fogey"); // color skipListCreate(SKIP_LIST_COLOR); @@ -105,7 +104,6 @@ public class VerifyCardDataTest { skipListAddName(SKIP_LIST_COST, "WC00", "Erase"); skipListAddName(SKIP_LIST_COST, "H17", "Grimlock, Dinobot Leader"); skipListAddName(SKIP_LIST_COST, "UST", "Everythingamajig"); - skipListAddName(SKIP_LIST_COST, "THB", "Anax, Hardened in the Forge"); // until it's been corrected in MTGJSON skipListAddName(SKIP_LIST_COST, "ANA", "Shrine Keeper"); // until it's been corrected in MTGJSON // supertype @@ -114,6 +112,7 @@ public class VerifyCardDataTest { // type skipListCreate(SKIP_LIST_TYPE); skipListAddName(SKIP_LIST_TYPE, "UNH", "Old Fogey"); + skipListAddName(SKIP_LIST_TYPE, "UND", "Old Fogey"); skipListAddName(SKIP_LIST_TYPE, "UST", "capital offense"); // subtype @@ -124,7 +123,12 @@ public class VerifyCardDataTest { skipListAddName(SKIP_LIST_SUBTYPE, "AER", "Ridgescale Tusker"); skipListAddName(SKIP_LIST_SUBTYPE, "ME3", "Lady Caleria"); skipListAddName(SKIP_LIST_SUBTYPE, "LEG", "Lady Caleria"); - + // Errata: Chicken -> Bird (2020). Remove thene, when it's been corrected in MTGJSON + skipListAddName(SKIP_LIST_SUBTYPE, "UGL", "Chicken a la King"); + skipListAddName(SKIP_LIST_SUBTYPE, "UGL", "Free-Range Chicken"); + skipListAddName(SKIP_LIST_SUBTYPE, "UND", "Free-Range Chicken"); + skipListAddName(SKIP_LIST_SUBTYPE, "UGL", "Poultrygeist"); + skipListAddName(SKIP_LIST_SUBTYPE, "UND", "Poultrygeist"); // number skipListCreate(SKIP_LIST_NUMBER); From 3b150daf271cefa785276ddf5a7bde0716894294 Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Tue, 17 Mar 2020 17:27:02 +0100 Subject: [PATCH 130/182] Started updating the image sources for the new set structure. --- .../java/mage/client/cards/DragCardGrid.java | 1 - .../dl/sources/ScryfallImageSupportCards.java | 19 ++++++------------- .../dl/sources/WizardCardsImageSource.java | 1 - 3 files changed, 6 insertions(+), 15 deletions(-) diff --git a/Mage.Client/src/main/java/mage/client/cards/DragCardGrid.java b/Mage.Client/src/main/java/mage/client/cards/DragCardGrid.java index 27e901d2ce1..80fbe145234 100644 --- a/Mage.Client/src/main/java/mage/client/cards/DragCardGrid.java +++ b/Mage.Client/src/main/java/mage/client/cards/DragCardGrid.java @@ -1542,7 +1542,6 @@ public class DragCardGrid extends JPanel implements DragCardSource, DragCardTarg pimpedSets.put("PAL06", 1); pimpedSets.put("UGIN", 1); - pimpedSets.put("WMCQ", 1); pimpedSets.put("PALP", 1); pimpedSets.put("PELP", 1); diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java index 6891ccb3533..05a365525cc 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java @@ -14,7 +14,7 @@ import java.util.Set; */ public class ScryfallImageSupportCards { - private static final Map xmageSetsToScryfall = ImmutableMap.builder().put("DD3GVL", "gvl"). + private static final Map xmageSetsToScryfall = ImmutableMap.builder(). put("MBP", "pmei"). build(); @@ -411,9 +411,9 @@ public class ScryfallImageSupportCards { add("PM19"); // Core Set 2019 Promos add("PSS3"); // M19 Standard Showdown add("M19"); // Core Set 2019 - //add("ANA"); // Arena New Player Experience + add("ANA"); // Arena New Player Experience add("PS18"); // San Diego Comic-Con 2018 - //add("HTR17"); // 2017 Heroes of the Realm + //add("HTR17"); // Heroes of the Realm 2017 add("C18"); // Commander 2018 add("PGRN"); // Guilds of Ravnica Promos add("PRWK"); // GRN Ravnica Weekend @@ -450,7 +450,7 @@ public class ScryfallImageSupportCards { //add("CMB1"); // Mystery Booster Playtest Cards add("MB1"); // Mystery Booster add("GN2"); // Game Night 2019 - //add("HA1"); // Historic Anthology 1 + add("HA1"); // Historic Anthology 1 //add("HHO"); // Happy Holidays add("OVNT"); // Vintage Championship add("OLGC"); // Legacy Championship @@ -464,22 +464,15 @@ public class ScryfallImageSupportCards { add("PSLD"); // Secret Lair Drop Promos add("UND"); // Unsanctioned add("FMB1"); // Mystery Booster Retail Edition Foils - //add("HA2"); // Historic Anthology 2 + add("HA2"); // Historic Anthology 2 add("SLD"); // Secret Lair Drop add("PMEI"); // Magazine Inserts add("SLU"); // Secret Lair: Ultimate Edition - add("SS3"); // Signature Spellbook: Chandra - - - - - + //add("SS3"); // Signature Spellbook: Chandra // TODO: DuelsOfThePlaneswalkersPromos add("DPAP"); - add("MEDM"); add("GRC"); - add("ANA"); } }; diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/WizardCardsImageSource.java b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/WizardCardsImageSource.java index dd1b9055b75..f8a7c35fa9b 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/WizardCardsImageSource.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/WizardCardsImageSource.java @@ -436,7 +436,6 @@ public enum WizardCardsImageSource implements CardImageSource { setsAliases.put("VMA", "Vintage Masters"); setsAliases.put("W16", "Welcome Deck 2016"); setsAliases.put("W17", "Welcome Deck 2017"); - setsAliases.put("WMCQ", "World Magic Cup Qualifier"); setsAliases.put("WTH", "Weatherlight"); setsAliases.put("WWK", "Worldwake"); setsAliases.put("ZEN", "Zendikar"); From da98ac82ed0b6734bffb27bbb25c5db75b78f199 Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Wed, 18 Mar 2020 16:44:38 +0100 Subject: [PATCH 131/182] =?UTF-8?q?Aligned=20Guru=20Set=20code=20with=20Sc?= =?UTF-8?q?ryfall=20(GUR=20=E2=86=92=20PGRU).?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Tobias Graefensteiner's Pyromancer Ascension.dck | 2 +- .../sample-decks/2012/ISD-DKA-AVR/Turbo Poison.dck | 2 +- .../org/mage/plugins/card/dl/sources/GathererSets.java | 2 +- Mage.Sets/src/mage/sets/Guru.java | 8 +++++++- Mage.Tests/RB Aggro.dck | 4 ++-- Mage.Verify/src/main/java/mage/verify/MtgJson.java | 2 +- Utils/mtg-sets-data.txt | 2 +- 7 files changed, 14 insertions(+), 8 deletions(-) diff --git a/Mage.Client/release/sample-decks/2011/Ala-M10-Zen/Tobias Graefensteiner's Pyromancer Ascension.dck b/Mage.Client/release/sample-decks/2011/Ala-M10-Zen/Tobias Graefensteiner's Pyromancer Ascension.dck index 877242c508d..780c3c20788 100644 --- a/Mage.Client/release/sample-decks/2011/Ala-M10-Zen/Tobias Graefensteiner's Pyromancer Ascension.dck +++ b/Mage.Client/release/sample-decks/2011/Ala-M10-Zen/Tobias Graefensteiner's Pyromancer Ascension.dck @@ -3,7 +3,7 @@ 3 [WWK:138] Khalni Garden 4 [M11:70] Preordain 4 [M12:63] Mana Leak -10 [GUR:2] Island +10 [PGRU:2] Island 2 [ZEN:48] Into the Roil 4 [ROE:86] See Beyond 4 [M12:73] Ponder diff --git a/Mage.Client/release/sample-decks/2012/ISD-DKA-AVR/Turbo Poison.dck b/Mage.Client/release/sample-decks/2012/ISD-DKA-AVR/Turbo Poison.dck index 6385c46c944..627583151c2 100644 --- a/Mage.Client/release/sample-decks/2012/ISD-DKA-AVR/Turbo Poison.dck +++ b/Mage.Client/release/sample-decks/2012/ISD-DKA-AVR/Turbo Poison.dck @@ -2,7 +2,7 @@ 1 [ISD:262] Forest 4 [MBS:145] Inkmoth Nexus 2 [DKA:27] Artful Dodge -1 [GUR:1] Forest +1 [PGRU:1] Forest 4 [SOM:166] Ichorclaw Myr 3 [NPH:2] Apostle's Blessing 1 [INV:335] Island diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/GathererSets.java b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/GathererSets.java index f18151e681b..11aee196d4f 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/GathererSets.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/GathererSets.java @@ -63,7 +63,7 @@ public class GathererSets implements Iterable { "W16", "W17", // "PALP" -- Gatherer does not have the set Asia Pacific Land Program // "ATH" -- has cards from many sets, symbol does not exist on gatherer - // "CLASH", "CP", "DPA", "PELP", "PGPX", "GRC", "GUR", "H17", "JR", "MBP", "MGDC", "MLP", "PPRE", "SUS", "SWS", "WMCQ", // need to fix + // "CLASH", "CP", "DPA", "PELP", "PGPX", "GRC", "PGRU", "H17", "JR", "MBP", "MGDC", "MLP", "PPRE", "SUS", "SWS", "WMCQ", // need to fix "H09", "PD2", "PD3", "UNH", "CM1", "V11", "A25", "UST", "IMA", "DD2", "EVG", "DDC", "DDE", "DDD", "8EB", "9EB", "CHR", "G18", "GVL", "S00", "S99", "UGL" // ok // current testing }; diff --git a/Mage.Sets/src/mage/sets/Guru.java b/Mage.Sets/src/mage/sets/Guru.java index f3739fd241e..111f977007b 100644 --- a/Mage.Sets/src/mage/sets/Guru.java +++ b/Mage.Sets/src/mage/sets/Guru.java @@ -4,6 +4,9 @@ import mage.cards.ExpansionSet; import mage.constants.Rarity; import mage.constants.SetType; +/** + * https://scryfall.com/sets/pgru + */ public final class Guru extends ExpansionSet { private static final Guru instance = new Guru(); @@ -13,7 +16,10 @@ public final class Guru extends ExpansionSet { } private Guru() { - super("Guru", "GUR", ExpansionSet.buildDate(1990, 1, 2), SetType.PROMOTIONAL); + super("Guru", "PGRU", ExpansionSet.buildDate(1990, 1, 2), SetType.PROMOTIONAL); + this.hasBasicLands = true; + this.hasBoosters = false; + cards.add(new SetCardInfo("Forest", 1, Rarity.LAND, mage.cards.basiclands.Forest.class)); cards.add(new SetCardInfo("Island", 2, Rarity.LAND, mage.cards.basiclands.Island.class)); cards.add(new SetCardInfo("Mountain", 3, Rarity.LAND, mage.cards.basiclands.Mountain.class)); diff --git a/Mage.Tests/RB Aggro.dck b/Mage.Tests/RB Aggro.dck index 649d436fe18..ab9cb014d87 100644 --- a/Mage.Tests/RB Aggro.dck +++ b/Mage.Tests/RB Aggro.dck @@ -19,7 +19,7 @@ NAME:RB Aggro 1 [M10:245] Mountain 1 [M10:242] Mountain 1 [M10:243] Mountain -1 [GUR:3] Mountain +1 [PGRU:3] Mountain 1 [MRD:299] Mountain 1 [SOM:245] Mountain 1 [SOM:244] Mountain @@ -67,5 +67,5 @@ NAME:RB Aggro 1 [TSP:295] Mountain 1 [TSP:294] Mountain 1 [ISD:259] Mountain -LAYOUT MAIN:(2,1)(CMC,true,5)|()([GUR:3],[SHM:296],[AVR:240],[SHM:295],[SHM:294],[TSP:295],[TSP:294],[10E:379],[SOM:245],[ZEN:262],[ZEN:245],[10E:378],[SOM:244],[SOM:243],[ZEN:244],[SOM:242],[ZEN:243],[ZEN:242],[ALA:243],[ALA:242],[M12:245],[CHK:299],[M12:243],[M12:244],[CHK:300],[CHK:301],[M12:242],[CHK:302],[10E:376],[M11:243],[M11:242],[M11:245],[M11:244],[MBS:152],[ALA:244],[ALA:245],[ZEN:263],[ZEN:264],[RAV:301],[RAV:300],[RAV:299],[USG:345],[USG:346],[M10:242],[RAV:302],[USG:343],[USG:344],[ISD:259],[ROE:244],[ISD:261],[ISD:260],[ROE:241],[ROE:242],[ROE:243],[MRD:301],[MRD:300],[MRD:299],[M10:244],[M10:243],[M10:245],[LRW:294],[TMP:343],[LRW:295],[LRW:296],[LRW:297],[TMP:343],[MRD:302],[TMP:343],[TMP:343],[INV:345],[INV:344]) +LAYOUT MAIN:(2,1)(CMC,true,5)|()([PGRU:3],[SHM:296],[AVR:240],[SHM:295],[SHM:294],[TSP:295],[TSP:294],[10E:379],[SOM:245],[ZEN:262],[ZEN:245],[10E:378],[SOM:244],[SOM:243],[ZEN:244],[SOM:242],[ZEN:243],[ZEN:242],[ALA:243],[ALA:242],[M12:245],[CHK:299],[M12:243],[M12:244],[CHK:300],[CHK:301],[M12:242],[CHK:302],[10E:376],[M11:243],[M11:242],[M11:245],[M11:244],[MBS:152],[ALA:244],[ALA:245],[ZEN:263],[ZEN:264],[RAV:301],[RAV:300],[RAV:299],[USG:345],[USG:346],[M10:242],[RAV:302],[USG:343],[USG:344],[ISD:259],[ROE:244],[ISD:261],[ISD:260],[ROE:241],[ROE:242],[ROE:243],[MRD:301],[MRD:300],[MRD:299],[M10:244],[M10:243],[M10:245],[LRW:294],[TMP:343],[LRW:295],[LRW:296],[LRW:297],[TMP:343],[MRD:302],[TMP:343],[TMP:343],[INV:345],[INV:344]) LAYOUT SIDEBOARD:(0,0)(COLOR_IDENTITY,true,5)| diff --git a/Mage.Verify/src/main/java/mage/verify/MtgJson.java b/Mage.Verify/src/main/java/mage/verify/MtgJson.java index bf42cd50e14..364d7542010 100644 --- a/Mage.Verify/src/main/java/mage/verify/MtgJson.java +++ b/Mage.Verify/src/main/java/mage/verify/MtgJson.java @@ -34,7 +34,7 @@ public final class MtgJson { mtgJsonToXMageCodes.put("pMEI", "MBP"); mtgJsonToXMageCodes.put("pGTW", "GRC"); // pGTW - Gateway = GRC (WPN + Gateway in one inner set) mtgJsonToXMageCodes.put("pWPN", "GRC"); // pWPN - Wizards Play Network = GRC (WPN + Gateway in one inner set) - mtgJsonToXMageCodes.put("pGRU", "GUR"); + mtgJsonToXMageCodes.put("pGRU", "PGRU"); mtgJsonToXMageCodes.put("pFNM", "FNMP"); mtgJsonToXMageCodes.put("pELP", "PELP"); mtgJsonToXMageCodes.put("pARL", "PARL"); // TODO: What about the other Arena League sets (1999-2006)? diff --git a/Utils/mtg-sets-data.txt b/Utils/mtg-sets-data.txt index cebde6a01d1..a6dd8bb0fa1 100644 --- a/Utils/mtg-sets-data.txt +++ b/Utils/mtg-sets-data.txt @@ -101,7 +101,7 @@ Guilds of Ravnica|GRN| Grand Prix|PGPX| WPN Gateway|GRC| Gatecrash|GTC| -Guru|GUR| +Guru|PGRU| Premium Deck Series: Slivers|H09| Homelands|HML| Heroes of the Realm|HOTR| From 17da620d8ad5dfdf92243eaf9ad931423b81fe34 Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Wed, 18 Mar 2020 17:04:35 +0100 Subject: [PATCH 132/182] Added the Unstable Promos (PUST) set. --- Mage.Sets/src/mage/sets/UnstablePromos.java | 25 +++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/UnstablePromos.java diff --git a/Mage.Sets/src/mage/sets/UnstablePromos.java b/Mage.Sets/src/mage/sets/UnstablePromos.java new file mode 100644 index 00000000000..80779ead409 --- /dev/null +++ b/Mage.Sets/src/mage/sets/UnstablePromos.java @@ -0,0 +1,25 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/pust + */ +public class UnstablePromos extends ExpansionSet { + + private static final UnstablePromos instance = new UnstablePromos(); + + public static UnstablePromos getInstance() { + return instance; + } + + private UnstablePromos() { + super("Unstable Promos", "PUST", ExpansionSet.buildDate(2017, 11, 13), SetType.JOKESET); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Earl of Squirrel", 108, Rarity.RARE, mage.cards.e.EarlOfSquirrel.class)); + } +} From b02c9e58adf5c9cda244d0572c8b0bdfb829878d Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Wed, 18 Mar 2020 17:06:03 +0100 Subject: [PATCH 133/182] Added the Theros Promos (PTHS) set. --- Mage.Sets/src/mage/sets/TherosPromos.java | 34 +++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/TherosPromos.java diff --git a/Mage.Sets/src/mage/sets/TherosPromos.java b/Mage.Sets/src/mage/sets/TherosPromos.java new file mode 100644 index 00000000000..a0f7b13c1c1 --- /dev/null +++ b/Mage.Sets/src/mage/sets/TherosPromos.java @@ -0,0 +1,34 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/pths + */ +public class TherosPromos extends ExpansionSet { + + private static final TherosPromos instance = new TherosPromos(); + + public static TherosPromos getInstance() { + return instance; + } + + private TherosPromos() { + super("Theros Promos", "PTHS", ExpansionSet.buildDate(2013, 9, 21), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Abhorrent Overlord", 75, Rarity.RARE, mage.cards.a.AbhorrentOverlord.class)); + cards.add(new SetCardInfo("Anthousa, Setessan Hero", 149, Rarity.RARE, mage.cards.a.AnthousaSetessanHero.class)); + cards.add(new SetCardInfo("Bident of Thassa", 42, Rarity.RARE, mage.cards.b.BidentOfThassa.class)); + cards.add(new SetCardInfo("Celestial Archon", 3, Rarity.RARE, mage.cards.c.CelestialArchon.class)); + cards.add(new SetCardInfo("Ember Swallower", 120, Rarity.RARE, mage.cards.e.EmberSwallower.class)); + cards.add(new SetCardInfo("Karametra's Acolyte", 160, Rarity.UNCOMMON, mage.cards.k.KarametrasAcolyte.class)); + cards.add(new SetCardInfo("Nighthowler", 98, Rarity.RARE, mage.cards.n.Nighthowler.class)); + cards.add(new SetCardInfo("Phalanx Leader", 26, Rarity.UNCOMMON, mage.cards.p.PhalanxLeader.class)); + cards.add(new SetCardInfo("Shipbreaker Kraken", 63, Rarity.RARE, mage.cards.s.ShipbreakerKraken.class)); + cards.add(new SetCardInfo("Sylvan Caryatid", "*180", Rarity.RARE, mage.cards.s.SylvanCaryatid.class)); + } +} From e248a6a7e84fc79b9d268e3764199edfdee9384d Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Wed, 18 Mar 2020 17:06:42 +0100 Subject: [PATCH 134/182] Added the Theros Beyond Death Promos (PTHB) set. --- .../mage/sets/TherosBeyondDeathPromos.java | 160 ++++++++++++++++++ 1 file changed, 160 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/TherosBeyondDeathPromos.java diff --git a/Mage.Sets/src/mage/sets/TherosBeyondDeathPromos.java b/Mage.Sets/src/mage/sets/TherosBeyondDeathPromos.java new file mode 100644 index 00000000000..3c8252c57f2 --- /dev/null +++ b/Mage.Sets/src/mage/sets/TherosBeyondDeathPromos.java @@ -0,0 +1,160 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/pthb + */ +public class TherosBeyondDeathPromos extends ExpansionSet { + + private static final TherosBeyondDeathPromos instance = new TherosBeyondDeathPromos(); + + public static TherosBeyondDeathPromos getInstance() { + return instance; + } + + private TherosBeyondDeathPromos() { + super("Theros Beyond Death Promos", "PTHB", ExpansionSet.buildDate(2020, 1, 24), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Allure of the Unknown", "207p", Rarity.RARE, mage.cards.a.AllureOfTheUnknown.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Allure of the Unknown", "207s", Rarity.RARE, mage.cards.a.AllureOfTheUnknown.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Aphemia, the Cacophony", "84p", Rarity.RARE, mage.cards.a.AphemiaTheCacophony.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Aphemia, the Cacophony", "84s", Rarity.RARE, mage.cards.a.AphemiaTheCacophony.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Arasta of the Endless Web", "165p", Rarity.RARE, mage.cards.a.ArastaOfTheEndlessWeb.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Arasta of the Endless Web", "165s", Rarity.RARE, mage.cards.a.ArastaOfTheEndlessWeb.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Archon of Sun's Grace", "3p", Rarity.RARE, mage.cards.a.ArchonOfSunsGrace.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Archon of Sun's Grace", "3s", Rarity.RARE, mage.cards.a.ArchonOfSunsGrace.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Ashiok's Erasure", "43p", Rarity.RARE, mage.cards.a.AshioksErasure.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Ashiok's Erasure", "43s", Rarity.RARE, mage.cards.a.AshioksErasure.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Ashiok, Nightmare Muse", "208p", Rarity.MYTHIC, mage.cards.a.AshiokNightmareMuse.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Ashiok, Nightmare Muse", "208s", Rarity.MYTHIC, mage.cards.a.AshiokNightmareMuse.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Atris, Oracle of Half-Truths", "209p", Rarity.RARE, mage.cards.a.AtrisOracleOfHalfTruths.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Atris, Oracle of Half-Truths", "209s", Rarity.RARE, mage.cards.a.AtrisOracleOfHalfTruths.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Bronzehide Lion", "210p", Rarity.RARE, mage.cards.b.BronzehideLion.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Bronzehide Lion", "210s", Rarity.RARE, mage.cards.b.BronzehideLion.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Calix, Destiny's Hand", "211p", Rarity.MYTHIC, mage.cards.c.CalixDestinysHand.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Calix, Destiny's Hand", "211s", Rarity.MYTHIC, mage.cards.c.CalixDestinysHand.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Dalakos, Crafter of Wonders", "212p", Rarity.RARE, mage.cards.d.DalakosCrafterOfWonders.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Dalakos, Crafter of Wonders", "212s", Rarity.RARE, mage.cards.d.DalakosCrafterOfWonders.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Dream Trawler", "214p", Rarity.RARE, mage.cards.d.DreamTrawler.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Dream Trawler", "214s", Rarity.RARE, mage.cards.d.DreamTrawler.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Dryad of the Ilysian Grove", "169p", Rarity.RARE, mage.cards.d.DryadOfTheIlysianGrove.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Dryad of the Ilysian Grove", "169s", Rarity.RARE, mage.cards.d.DryadOfTheIlysianGrove.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Eat to Extinction", "90p", Rarity.RARE, mage.cards.e.EatToExtinction.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Eat to Extinction", "90s", Rarity.RARE, mage.cards.e.EatToExtinction.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Eidolon of Obstruction", "12p", Rarity.RARE, mage.cards.e.EidolonOfObstruction.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Eidolon of Obstruction", "12s", Rarity.RARE, mage.cards.e.EidolonOfObstruction.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Elspeth Conquers Death", "13p", Rarity.RARE, mage.cards.e.ElspethConquersDeath.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Elspeth Conquers Death", "13s", Rarity.RARE, mage.cards.e.ElspethConquersDeath.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Elspeth, Sun's Nemesis", "14p", Rarity.MYTHIC, mage.cards.e.ElspethSunsNemesis.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Elspeth, Sun's Nemesis", "14s", Rarity.MYTHIC, mage.cards.e.ElspethSunsNemesis.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Enigmatic Incarnation", "215p", Rarity.RARE, mage.cards.e.EnigmaticIncarnation.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Enigmatic Incarnation", "215s", Rarity.RARE, mage.cards.e.EnigmaticIncarnation.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Erebos's Intervention", "94p", Rarity.RARE, mage.cards.e.ErebossIntervention.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Erebos's Intervention", "94s", Rarity.RARE, mage.cards.e.ErebossIntervention.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Erebos, Bleak-Hearted", "93p", Rarity.MYTHIC, mage.cards.e.ErebosBleakHearted.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Erebos, Bleak-Hearted", "93s", Rarity.MYTHIC, mage.cards.e.ErebosBleakHearted.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Gallia of the Endless Dance", "217p", Rarity.RARE, mage.cards.g.GalliaOfTheEndlessDance.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Gallia of the Endless Dance", "217s", Rarity.RARE, mage.cards.g.GalliaOfTheEndlessDance.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Gravebreaker Lamia", "98p", Rarity.RARE, mage.cards.g.GravebreakerLamia.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Gravebreaker Lamia", "98s", Rarity.RARE, mage.cards.g.GravebreakerLamia.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Haktos the Unscarred", "218p", Rarity.RARE, mage.cards.h.HaktosTheUnscarred.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Haktos the Unscarred", "218s", Rarity.RARE, mage.cards.h.HaktosTheUnscarred.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Heliod's Intervention", "19p", Rarity.RARE, mage.cards.h.HeliodsIntervention.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Heliod's Intervention", "19s", Rarity.RARE, mage.cards.h.HeliodsIntervention.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Heliod, Sun-Crowned", "18p", Rarity.MYTHIC, mage.cards.h.HeliodSunCrowned.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Heliod, Sun-Crowned", "18s", Rarity.MYTHIC, mage.cards.h.HeliodSunCrowned.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Idyllic Tutor", "24p", Rarity.RARE, mage.cards.i.IdyllicTutor.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Idyllic Tutor", "24s", Rarity.RARE, mage.cards.i.IdyllicTutor.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Kiora Bests the Sea God", "52p", Rarity.MYTHIC, mage.cards.k.KioraBestsTheSeaGod.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Kiora Bests the Sea God", "52s", Rarity.MYTHIC, mage.cards.k.KioraBestsTheSeaGod.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Klothys, God of Destiny", "220p", Rarity.MYTHIC, mage.cards.k.KlothysGodOfDestiny.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Klothys, God of Destiny", "220s", Rarity.MYTHIC, mage.cards.k.KlothysGodOfDestiny.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Kroxa, Titan of Death's Hunger", "221p", Rarity.MYTHIC, mage.cards.k.KroxaTitanOfDeathsHunger.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Kroxa, Titan of Death's Hunger", "221s", Rarity.MYTHIC, mage.cards.k.KroxaTitanOfDeathsHunger.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Kunoros, Hound of Athreos", "222p", Rarity.RARE, mage.cards.k.KunorosHoundOfAthreos.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Kunoros, Hound of Athreos", "222s", Rarity.RARE, mage.cards.k.KunorosHoundOfAthreos.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Labyrinth of Skophos", "243p", Rarity.RARE, mage.cards.l.LabyrinthOfSkophos.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Labyrinth of Skophos", "243s", Rarity.RARE, mage.cards.l.LabyrinthOfSkophos.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mantle of the Wolf", "178p", Rarity.RARE, mage.cards.m.MantleOfTheWolf.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mantle of the Wolf", "178s", Rarity.RARE, mage.cards.m.MantleOfTheWolf.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Nadir Kraken", "55p", Rarity.RARE, mage.cards.n.NadirKraken.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Nadir Kraken", "55s", Rarity.RARE, mage.cards.n.NadirKraken.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Nessian Boar", "181p", Rarity.RARE, mage.cards.n.NessianBoar.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Nessian Boar", "181s", Rarity.RARE, mage.cards.n.NessianBoar.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Nightmare Shepherd", "108p", Rarity.RARE, mage.cards.n.NightmareShepherd.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Nightmare Shepherd", "108s", Rarity.RARE, mage.cards.n.NightmareShepherd.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Nylea's Intervention", "188p", Rarity.RARE, mage.cards.n.NyleasIntervention.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Nylea's Intervention", "188s", Rarity.RARE, mage.cards.n.NyleasIntervention.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Nylea, Keen-Eyed", "185p", Rarity.MYTHIC, mage.cards.n.NyleaKeenEyed.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Nylea, Keen-Eyed", "185s", Rarity.MYTHIC, mage.cards.n.NyleaKeenEyed.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Nyx Lotus", "235p", Rarity.RARE, mage.cards.n.NyxLotus.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Nyx Lotus", "235s", Rarity.RARE, mage.cards.n.NyxLotus.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Nyxbloom Ancient", "190p", Rarity.MYTHIC, mage.cards.n.NyxbloomAncient.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Nyxbloom Ancient", "190s", Rarity.MYTHIC, mage.cards.n.NyxbloomAncient.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Ox of Agonas", "147p", Rarity.MYTHIC, mage.cards.o.OxOfAgonas.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Ox of Agonas", "147s", Rarity.MYTHIC, mage.cards.o.OxOfAgonas.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Phoenix of Ash", "148p", Rarity.RARE, mage.cards.p.PhoenixOfAsh.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Phoenix of Ash", "148s", Rarity.RARE, mage.cards.p.PhoenixOfAsh.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Polukranos, Unchained", "224p", Rarity.MYTHIC, mage.cards.p.PolukranosUnchained.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Polukranos, Unchained", "224s", Rarity.MYTHIC, mage.cards.p.PolukranosUnchained.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Protean Thaumaturge", "60p", Rarity.RARE, mage.cards.p.ProteanThaumaturge.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Protean Thaumaturge", "60s", Rarity.RARE, mage.cards.p.ProteanThaumaturge.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Purphoros's Intervention", "151p", Rarity.RARE, mage.cards.p.PurphorossIntervention.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Purphoros's Intervention", "151s", Rarity.RARE, mage.cards.p.PurphorossIntervention.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Purphoros, Bronze-Blooded", "150p", Rarity.MYTHIC, mage.cards.p.PurphorosBronzeBlooded.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Purphoros, Bronze-Blooded", "150s", Rarity.MYTHIC, mage.cards.p.PurphorosBronzeBlooded.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Setessan Champion", "198p", Rarity.RARE, mage.cards.s.SetessanChampion.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Setessan Champion", "198s", Rarity.RARE, mage.cards.s.SetessanChampion.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Shadowspear", "236p", Rarity.RARE, mage.cards.s.Shadowspear.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Shadowspear", "236s", Rarity.RARE, mage.cards.s.Shadowspear.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Shatter the Sky", "37p", Rarity.RARE, mage.cards.s.ShatterTheSky.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Shatter the Sky", "37s", Rarity.RARE, mage.cards.s.ShatterTheSky.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Storm Herald", "156p", Rarity.RARE, mage.cards.s.StormHerald.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Storm Herald", "156s", Rarity.RARE, mage.cards.s.StormHerald.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Storm's Wrath", "157p", Rarity.RARE, mage.cards.s.StormsWrath.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Storm's Wrath", "157s", Rarity.RARE, mage.cards.s.StormsWrath.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Taranika, Akroan Veteran", "39p", Rarity.RARE, mage.cards.t.TaranikaAkroanVeteran.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Taranika, Akroan Veteran", "39s", Rarity.RARE, mage.cards.t.TaranikaAkroanVeteran.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Tectonic Giant", "158p", Rarity.RARE, mage.cards.t.TectonicGiant.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Tectonic Giant", "158s", Rarity.RARE, mage.cards.t.TectonicGiant.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Temple of Abandon", "244p", Rarity.RARE, mage.cards.t.TempleOfAbandon.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Temple of Abandon", "244s", Rarity.RARE, mage.cards.t.TempleOfAbandon.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Temple of Deceit", "245p", Rarity.RARE, mage.cards.t.TempleOfDeceit.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Temple of Deceit", "245s", Rarity.RARE, mage.cards.t.TempleOfDeceit.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Temple of Enlightenment", "246p", Rarity.RARE, mage.cards.t.TempleOfEnlightenment.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Temple of Enlightenment", "246s", Rarity.RARE, mage.cards.t.TempleOfEnlightenment.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Temple of Malice", "247p", Rarity.RARE, mage.cards.t.TempleOfMalice.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Temple of Malice", "247s", Rarity.RARE, mage.cards.t.TempleOfMalice.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Temple of Plenty", "248p", Rarity.RARE, mage.cards.t.TempleOfPlenty.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Temple of Plenty", "248s", Rarity.RARE, mage.cards.t.TempleOfPlenty.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Thassa's Intervention", "72p", Rarity.RARE, mage.cards.t.ThassasIntervention.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Thassa's Intervention", "72s", Rarity.RARE, mage.cards.t.ThassasIntervention.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Thassa's Oracle", "73p", Rarity.RARE, mage.cards.t.ThassasOracle.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Thassa's Oracle", "73s", Rarity.RARE, mage.cards.t.ThassasOracle.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Thassa, Deep-Dwelling", "71p", Rarity.MYTHIC, mage.cards.t.ThassaDeepDwelling.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Thassa, Deep-Dwelling", "71s", Rarity.MYTHIC, mage.cards.t.ThassaDeepDwelling.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("The Akroan War", "124p", Rarity.RARE, mage.cards.t.TheAkroanWar.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("The Akroan War", "124s", Rarity.RARE, mage.cards.t.TheAkroanWar.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("The First Iroan Games", "170p", Rarity.RARE, mage.cards.t.TheFirstIroanGames.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("The First Iroan Games", "170s", Rarity.RARE, mage.cards.t.TheFirstIroanGames.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Thryx, the Sudden Storm", "76p", Rarity.RARE, mage.cards.t.ThryxTheSuddenStorm.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Thryx, the Sudden Storm", "76s", Rarity.RARE, mage.cards.t.ThryxTheSuddenStorm.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Treacherous Blessing", "117p", Rarity.RARE, mage.cards.t.TreacherousBlessing.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Treacherous Blessing", "117s", Rarity.RARE, mage.cards.t.TreacherousBlessing.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Tymaret Calls the Dead", "118p", Rarity.RARE, mage.cards.t.TymaretCallsTheDead.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Tymaret Calls the Dead", "118s", Rarity.RARE, mage.cards.t.TymaretCallsTheDead.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Underworld Breach", "161p", Rarity.RARE, mage.cards.u.UnderworldBreach.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Underworld Breach", "161s", Rarity.RARE, mage.cards.u.UnderworldBreach.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Uro, Titan of Nature's Wrath", "229p", Rarity.MYTHIC, mage.cards.u.UroTitanOfNaturesWrath.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Uro, Titan of Nature's Wrath", "229s", Rarity.MYTHIC, mage.cards.u.UroTitanOfNaturesWrath.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Wavebreak Hippocamp", "80p", Rarity.RARE, mage.cards.w.WavebreakHippocamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Wavebreak Hippocamp", "80s", Rarity.RARE, mage.cards.w.WavebreakHippocamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Woe Strider", "123p", Rarity.RARE, mage.cards.w.WoeStrider.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Woe Strider", "123s", Rarity.RARE, mage.cards.w.WoeStrider.class, NON_FULL_USE_VARIOUS)); + } +} From 834c9b8daeb35d93fedc453b28ed2f1f52d98b68 Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Wed, 18 Mar 2020 17:09:03 +0100 Subject: [PATCH 135/182] Added the Wizards Play Network 2011 (PWP11) and Wizards Play Network 2012 (PWP12) sets. --- .../src/mage/sets/WizardsPlayNetwork2011.java | 38 +++++++++++++++++++ .../src/mage/sets/WizardsPlayNetwork2012.java | 27 +++++++++++++ 2 files changed, 65 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/WizardsPlayNetwork2011.java create mode 100644 Mage.Sets/src/mage/sets/WizardsPlayNetwork2012.java diff --git a/Mage.Sets/src/mage/sets/WizardsPlayNetwork2011.java b/Mage.Sets/src/mage/sets/WizardsPlayNetwork2011.java new file mode 100644 index 00000000000..e628de4527e --- /dev/null +++ b/Mage.Sets/src/mage/sets/WizardsPlayNetwork2011.java @@ -0,0 +1,38 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/pwp11 + */ +public class WizardsPlayNetwork2011 extends ExpansionSet { + + private static final WizardsPlayNetwork2011 instance = new WizardsPlayNetwork2011(); + + public static WizardsPlayNetwork2011 getInstance() { + return instance; + } + + private WizardsPlayNetwork2011() { + super("Wizards Play Network 2011", "PWP11", ExpansionSet.buildDate(2011, 1, 1), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Auramancer", 77, Rarity.RARE, mage.cards.a.Auramancer.class)); + cards.add(new SetCardInfo("Bloodcrazed Neonate", 83, Rarity.RARE, mage.cards.b.BloodcrazedNeonate.class)); + cards.add(new SetCardInfo("Boneyard Wurm", 84, Rarity.RARE, mage.cards.b.BoneyardWurm.class)); + cards.add(new SetCardInfo("Circle of Flame", 78, Rarity.RARE, mage.cards.c.CircleOfFlame.class)); + cards.add(new SetCardInfo("Curse of the Bloody Tome", 80, Rarity.RARE, mage.cards.c.CurseOfTheBloodyTome.class)); + cards.add(new SetCardInfo("Fling", 69, Rarity.RARE, mage.cards.f.Fling.class)); + cards.add(new SetCardInfo("Master's Call", 64, Rarity.RARE, mage.cards.m.MastersCall.class)); + cards.add(new SetCardInfo("Maul Splicer", 72, Rarity.RARE, mage.cards.m.MaulSplicer.class)); + cards.add(new SetCardInfo("Plague Myr", 65, Rarity.RARE, mage.cards.p.PlagueMyr.class)); + cards.add(new SetCardInfo("Shrine of Burning Rage", 73, Rarity.RARE, mage.cards.s.ShrineOfBurningRage.class)); + cards.add(new SetCardInfo("Signal Pest", 66, Rarity.RARE, mage.cards.s.SignalPest.class)); + cards.add(new SetCardInfo("Sylvan Ranger", 70, Rarity.RARE, mage.cards.s.SylvanRanger.class)); + cards.add(new SetCardInfo("Tormented Soul", 76, Rarity.RARE, mage.cards.t.TormentedSoul.class)); + cards.add(new SetCardInfo("Vault Skirge", 71, Rarity.RARE, mage.cards.v.VaultSkirge.class)); + } +} diff --git a/Mage.Sets/src/mage/sets/WizardsPlayNetwork2012.java b/Mage.Sets/src/mage/sets/WizardsPlayNetwork2012.java new file mode 100644 index 00000000000..2c732534d8d --- /dev/null +++ b/Mage.Sets/src/mage/sets/WizardsPlayNetwork2012.java @@ -0,0 +1,27 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/pwp12 + */ +public class WizardsPlayNetwork2012 extends ExpansionSet { + + private static final WizardsPlayNetwork2012 instance = new WizardsPlayNetwork2012(); + + public static WizardsPlayNetwork2012 getInstance() { + return instance; + } + + private WizardsPlayNetwork2012() { + super("Wizards Play Network 2012", "PWP12", ExpansionSet.buildDate(2012, 1, 1), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Curse of Thirst", 81, Rarity.RARE, mage.cards.c.CurseOfThirst.class)); + cards.add(new SetCardInfo("Gather the Townsfolk", 79, Rarity.RARE, mage.cards.g.GatherTheTownsfolk.class)); + cards.add(new SetCardInfo("Nearheath Stalker", 82, Rarity.RARE, mage.cards.n.NearheathStalker.class)); + } +} From a8f5f5b10503990de0fd937e34406fffc55d0989 Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Wed, 18 Mar 2020 17:11:00 +0100 Subject: [PATCH 136/182] Added the RNA Ravnica Weekend (PRW2) set. --- .../sets/RavnicaAllegianceRavnicaWeekend.java | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/RavnicaAllegianceRavnicaWeekend.java diff --git a/Mage.Sets/src/mage/sets/RavnicaAllegianceRavnicaWeekend.java b/Mage.Sets/src/mage/sets/RavnicaAllegianceRavnicaWeekend.java new file mode 100644 index 00000000000..11ad5554133 --- /dev/null +++ b/Mage.Sets/src/mage/sets/RavnicaAllegianceRavnicaWeekend.java @@ -0,0 +1,34 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/prw2 + */ +public class RavnicaAllegianceRavnicaWeekend extends ExpansionSet { + + private static final RavnicaAllegianceRavnicaWeekend instance = new RavnicaAllegianceRavnicaWeekend(); + + public static RavnicaAllegianceRavnicaWeekend getInstance() { + return instance; + } + + private RavnicaAllegianceRavnicaWeekend() { + super("Ravnica Allegiance Ravnica Weekend", "PRW2", ExpansionSet.buildDate(2019, 2, 16), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = true; + + cards.add(new SetCardInfo("Forest", "B08", Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", "B09", Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", "B02", Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", "B10", Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", "B06", Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", "B07", Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", "B01", Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", "B03", Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", "B04", Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", "B05", Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + } +} From 99a54aea424a57af50b384c98caa9e4967914693 Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Wed, 18 Mar 2020 17:12:09 +0100 Subject: [PATCH 137/182] Added the Ravnica Allegiance Promos (PRNA) set. --- .../mage/sets/RavnicaAllegiancePromos.java | 103 ++++++++++++++++++ 1 file changed, 103 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/RavnicaAllegiancePromos.java diff --git a/Mage.Sets/src/mage/sets/RavnicaAllegiancePromos.java b/Mage.Sets/src/mage/sets/RavnicaAllegiancePromos.java new file mode 100644 index 00000000000..2034e2cd029 --- /dev/null +++ b/Mage.Sets/src/mage/sets/RavnicaAllegiancePromos.java @@ -0,0 +1,103 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/prna + */ +public class RavnicaAllegiancePromos extends ExpansionSet { + + private static final RavnicaAllegiancePromos instance = new RavnicaAllegiancePromos(); + + public static RavnicaAllegiancePromos getInstance() { + return instance; + } + + private RavnicaAllegiancePromos() { + super("Ravnica Allegiance Promos", "PRNA", ExpansionSet.buildDate(2019, 1, 25), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Absorb", "151p", Rarity.RARE, mage.cards.a.Absorb.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Absorb", "151s", Rarity.RARE, mage.cards.a.Absorb.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Amplifire", "92s", Rarity.RARE, mage.cards.a.Amplifire.class)); + cards.add(new SetCardInfo("Awaken the Erstwhile", "61s", Rarity.RARE, mage.cards.a.AwakenTheErstwhile.class)); + cards.add(new SetCardInfo("Bedeck // Bedazzle", "221p", Rarity.RARE, mage.cards.b.BedeckBedazzle.class)); + cards.add(new SetCardInfo("Bedevil", "157p", Rarity.RARE, mage.cards.b.Bedevil.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Bedevil", "157s", Rarity.RARE, mage.cards.b.Bedevil.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Benthic Biomancer", "32p", Rarity.RARE, mage.cards.b.BenthicBiomancer.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Benthic Biomancer", "32s", Rarity.RARE, mage.cards.b.BenthicBiomancer.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Biogenic Ooze", "122p", Rarity.MYTHIC, mage.cards.b.BiogenicOoze.class)); + cards.add(new SetCardInfo("Biomancer's Familiar", "158s", Rarity.RARE, mage.cards.b.BiomancersFamiliar.class)); + cards.add(new SetCardInfo("Blood Crypt", "245p", Rarity.RARE, mage.cards.b.BloodCrypt.class)); + cards.add(new SetCardInfo("Breeding Pool", "246p", Rarity.RARE, mage.cards.b.BreedingPool.class)); + cards.add(new SetCardInfo("Cindervines", "161p", Rarity.RARE, mage.cards.c.Cindervines.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Cindervines", "161s", Rarity.RARE, mage.cards.c.Cindervines.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Consecrate // Consume", "224p", Rarity.UNCOMMON, mage.cards.c.ConsecrateConsume.class)); + cards.add(new SetCardInfo("Deputy of Detention", "165p", Rarity.RARE, mage.cards.d.DeputyOfDetention.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Deputy of Detention", "165s", Rarity.RARE, mage.cards.d.DeputyOfDetention.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Electrodominance", "99p", Rarity.RARE, mage.cards.e.Electrodominance.class)); + cards.add(new SetCardInfo("Emergency Powers", "169s", Rarity.MYTHIC, mage.cards.e.EmergencyPowers.class)); + cards.add(new SetCardInfo("End-Raze Forerunners", "124s", Rarity.RARE, mage.cards.e.EndRazeForerunners.class)); + cards.add(new SetCardInfo("Ethereal Absolution", "170s", Rarity.RARE, mage.cards.e.EtherealAbsolution.class)); + cards.add(new SetCardInfo("Font of Agonies", "74s", Rarity.RARE, mage.cards.f.FontOfAgonies.class)); + cards.add(new SetCardInfo("Gate Colossus", 232, Rarity.UNCOMMON, mage.cards.g.GateColossus.class)); + cards.add(new SetCardInfo("Godless Shrine", "248p", Rarity.RARE, mage.cards.g.GodlessShrine.class)); + cards.add(new SetCardInfo("Growth Spiral", 178, Rarity.COMMON, mage.cards.g.GrowthSpiral.class)); + cards.add(new SetCardInfo("Growth-Chamber Guardian", "128p", Rarity.RARE, mage.cards.g.GrowthChamberGuardian.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Growth-Chamber Guardian", "128s", Rarity.RARE, mage.cards.g.GrowthChamberGuardian.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Gruul Spellbreaker", "179p", Rarity.RARE, mage.cards.g.GruulSpellbreaker.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Gruul Spellbreaker", "179s", Rarity.RARE, mage.cards.g.GruulSpellbreaker.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Guardian Project", "130p", Rarity.RARE, mage.cards.g.GuardianProject.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Guardian Project", "130s", Rarity.RARE, mage.cards.g.GuardianProject.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Gutterbones", "76p", Rarity.RARE, mage.cards.g.Gutterbones.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Gutterbones", "76s", Rarity.RARE, mage.cards.g.Gutterbones.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Hallowed Fountain", "251p", Rarity.RARE, mage.cards.h.HallowedFountain.class)); + cards.add(new SetCardInfo("Hero of Precinct One", "11p", Rarity.RARE, mage.cards.h.HeroOfPrecinctOne.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Hero of Precinct One", "11s", Rarity.RARE, mage.cards.h.HeroOfPrecinctOne.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Hydroid Krasis", "183p", Rarity.MYTHIC, mage.cards.h.HydroidKrasis.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Hydroid Krasis", "183s", Rarity.MYTHIC, mage.cards.h.HydroidKrasis.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Immolation Shaman", "106s", Rarity.RARE, mage.cards.i.ImmolationShaman.class)); + cards.add(new SetCardInfo("Incubation Druid", "131p", Rarity.RARE, mage.cards.i.IncubationDruid.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Incubation Druid", "131s", Rarity.RARE, mage.cards.i.IncubationDruid.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Judith, the Scourge Diva", "185p", Rarity.RARE, mage.cards.j.JudithTheScourgeDiva.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Judith, the Scourge Diva", "185s", Rarity.RARE, mage.cards.j.JudithTheScourgeDiva.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Kaya's Wrath", "187p", Rarity.RARE, mage.cards.k.KayasWrath.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Kaya's Wrath", "187s", Rarity.RARE, mage.cards.k.KayasWrath.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Kaya, Orzhov Usurper", "186p", Rarity.MYTHIC, mage.cards.k.KayaOrzhovUsurper.class)); + cards.add(new SetCardInfo("Lavinia, Azorius Renegade", 189, Rarity.RARE, mage.cards.l.LaviniaAzoriusRenegade.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Lavinia, Azorius Renegade", "189s", Rarity.RARE, mage.cards.l.LaviniaAzoriusRenegade.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Light Up the Stage", 107, Rarity.UNCOMMON, mage.cards.l.LightUpTheStage.class)); + cards.add(new SetCardInfo("Lumbering Battlement", "15s", Rarity.RARE, mage.cards.l.LumberingBattlement.class)); + cards.add(new SetCardInfo("Mass Manipulation", "42p", Rarity.RARE, mage.cards.m.MassManipulation.class)); + cards.add(new SetCardInfo("Mirror March", "108s", Rarity.RARE, mage.cards.m.MirrorMarch.class)); + cards.add(new SetCardInfo("Mortify", 192, Rarity.UNCOMMON, mage.cards.m.Mortify.class)); + cards.add(new SetCardInfo("Nikya of the Old Ways", "193s", Rarity.RARE, mage.cards.n.NikyaOfTheOldWays.class)); + cards.add(new SetCardInfo("Plaza of Harmony", "254p", Rarity.RARE, mage.cards.p.PlazaOfHarmony.class)); + cards.add(new SetCardInfo("Precognitive Perception", "45s", Rarity.RARE, mage.cards.p.PrecognitivePerception.class)); + cards.add(new SetCardInfo("Priest of Forgotten Gods", "83p", Rarity.RARE, mage.cards.p.PriestOfForgottenGods.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Priest of Forgotten Gods", "83s", Rarity.RARE, mage.cards.p.PriestOfForgottenGods.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Rakdos Firewheeler", 197, Rarity.UNCOMMON, mage.cards.r.RakdosFirewheeler.class)); + cards.add(new SetCardInfo("Rakdos, the Showstopper", "199s", Rarity.MYTHIC, mage.cards.r.RakdosTheShowstopper.class)); + cards.add(new SetCardInfo("Rampage of the Clans", "134s", Rarity.RARE, mage.cards.r.RampageOfTheClans.class)); + cards.add(new SetCardInfo("Ravager Wurm", "200s", Rarity.MYTHIC, mage.cards.r.RavagerWurm.class)); + cards.add(new SetCardInfo("Rix Maadi Reveler", "109s", Rarity.RARE, mage.cards.r.RixMaadiReveler.class)); + cards.add(new SetCardInfo("Seraph of the Scales", "205p", Rarity.MYTHIC, mage.cards.s.SeraphOfTheScales.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Seraph of the Scales", "205s", Rarity.MYTHIC, mage.cards.s.SeraphOfTheScales.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Simic Ascendancy", 207, Rarity.RARE, mage.cards.s.SimicAscendancy.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Simic Ascendancy", "207s", Rarity.RARE, mage.cards.s.SimicAscendancy.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Skarrgan Hellkite", "114p", Rarity.MYTHIC, mage.cards.s.SkarrganHellkite.class)); + cards.add(new SetCardInfo("Smothering Tithe", "22p", Rarity.RARE, mage.cards.s.SmotheringTithe.class)); + cards.add(new SetCardInfo("Sphinx of Foresight", "55s", Rarity.RARE, mage.cards.s.SphinxOfForesight.class)); + cards.add(new SetCardInfo("Stomping Ground", "259p", Rarity.RARE, mage.cards.s.StompingGround.class)); + cards.add(new SetCardInfo("Teysa Karlov", "212p", Rarity.RARE, mage.cards.t.TeysaKarlov.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Teysa Karlov", "212s", Rarity.RARE, mage.cards.t.TeysaKarlov.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Theater of Horrors", "213s", Rarity.RARE, mage.cards.t.TheaterOfHorrors.class)); + cards.add(new SetCardInfo("Tithe Taker", "27p", Rarity.RARE, mage.cards.t.TitheTaker.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Tithe Taker", "27s", Rarity.RARE, mage.cards.t.TitheTaker.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Unbreakable Formation", "29s", Rarity.RARE, mage.cards.u.UnbreakableFormation.class)); + cards.add(new SetCardInfo("Zegana, Utopian Speaker", "214s", Rarity.RARE, mage.cards.z.ZeganaUtopianSpeaker.class)); + } +} From 770b65c8c058bef310a8c19f32d0c83259d5efba Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Wed, 18 Mar 2020 17:13:55 +0100 Subject: [PATCH 138/182] Added the MTG Arena Promos (PANA) set. --- Mage.Sets/src/mage/sets/MTGArenaPromos.java | 59 +++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/MTGArenaPromos.java diff --git a/Mage.Sets/src/mage/sets/MTGArenaPromos.java b/Mage.Sets/src/mage/sets/MTGArenaPromos.java new file mode 100644 index 00000000000..38c19da3331 --- /dev/null +++ b/Mage.Sets/src/mage/sets/MTGArenaPromos.java @@ -0,0 +1,59 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/pana + */ +public class MTGArenaPromos extends ExpansionSet { + + private static final MTGArenaPromos instance = new MTGArenaPromos(); + + public static MTGArenaPromos getInstance() { + return instance; + } + + private MTGArenaPromos() { + super("MTG Arena Promos", "PANA", ExpansionSet.buildDate(2020, 2, 15), SetType.MAGIC_ONLINE); + this.hasBoosters = false; + this.hasBasicLands = true; + + cards.add(new SetCardInfo("Duress", "ALT-4", Rarity.COMMON, mage.cards.d.Duress.class)); + cards.add(new SetCardInfo("Firemind's Research", "ALT-7", Rarity.RARE, mage.cards.f.FiremindsResearch.class)); + cards.add(new SetCardInfo("Forest", "AKH-105", Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", "BFZ-105", Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", "MIR-105", Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", "ROE-105", Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", "RTR-105", Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Ghalta, Primal Hunger", "ALT-5", Rarity.RARE, mage.cards.g.GhaltaPrimalHunger.class)); + cards.add(new SetCardInfo("Island", "AKH-102", Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", "BFZ-102", Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", "MIR-102", Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", "ROE-102", Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", "RTR-102", Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Llanowar Elves", "ALT-6", Rarity.COMMON, mage.cards.l.LlanowarElves.class)); + cards.add(new SetCardInfo("Mountain", "AKH-104", Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", "BFZ-104", Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", "MIR-104", Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", "ROE-104", Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", "RTR-104", Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", "AKH-101", Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", "BFZ-101", Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", "MIR-101", Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", "ROE-101", Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", "RTR-101", Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Ral, Izzet Viceroy", "ALT-1", Rarity.MYTHIC, mage.cards.r.RalIzzetViceroy.class)); + cards.add(new SetCardInfo("Rhys the Redeemed", "BRAWL-201", Rarity.RARE, mage.cards.r.RhysTheRedeemed.class)); + cards.add(new SetCardInfo("Swamp", "AKH-103", Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", "BFZ-103", Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", "MIR-103", Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", "ROE-103", Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", "RTR-103", Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Talrand, Sky Summoner", "BRAWL-202", Rarity.RARE, mage.cards.t.TalrandSkySummoner.class)); + cards.add(new SetCardInfo("Teferi, Hero of Dominaria", "ALT-2", Rarity.MYTHIC, mage.cards.t.TeferiHeroOfDominaria.class)); + cards.add(new SetCardInfo("The Gitrog Monster", "BRAWL-203", Rarity.MYTHIC, mage.cards.t.TheGitrogMonster.class)); + cards.add(new SetCardInfo("Vraska, Golgari Queen", "ALT-3", Rarity.MYTHIC, mage.cards.v.VraskaGolgariQueen.class)); + } +} From 07bd00c6e4593fb152084061979ce497edfbf7ab Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Wed, 18 Mar 2020 17:14:29 +0100 Subject: [PATCH 139/182] Added the Miscellaneous Book Promos (PBOK) set. --- .../mage/sets/MiscellaneousBookPromos.java | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/MiscellaneousBookPromos.java diff --git a/Mage.Sets/src/mage/sets/MiscellaneousBookPromos.java b/Mage.Sets/src/mage/sets/MiscellaneousBookPromos.java new file mode 100644 index 00000000000..dc84b75d37f --- /dev/null +++ b/Mage.Sets/src/mage/sets/MiscellaneousBookPromos.java @@ -0,0 +1,25 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/pbok + */ +public class MiscellaneousBookPromos extends ExpansionSet { + + private static final MiscellaneousBookPromos instance = new MiscellaneousBookPromos(); + + public static MiscellaneousBookPromos getInstance() { + return instance; + } + + private MiscellaneousBookPromos() { + super("Miscellaneous Book Promos", "PBOK", ExpansionSet.buildDate(2009, 1, 27), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Jace Beleren", 1, Rarity.MYTHIC, mage.cards.j.JaceBeleren.class)); + } +} From 5cbc160149f3ef1967b968b60ca2ec753170b8c6 Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Wed, 18 Mar 2020 17:15:13 +0100 Subject: [PATCH 140/182] Added the MagicFest 2020 (PF20) set. --- Mage.Sets/src/mage/sets/MagicFest2020.java | 30 ++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/MagicFest2020.java diff --git a/Mage.Sets/src/mage/sets/MagicFest2020.java b/Mage.Sets/src/mage/sets/MagicFest2020.java new file mode 100644 index 00000000000..eddf156086f --- /dev/null +++ b/Mage.Sets/src/mage/sets/MagicFest2020.java @@ -0,0 +1,30 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/pf20 + */ +public class MagicFest2020 extends ExpansionSet { + + private static final MagicFest2020 instance = new MagicFest2020(); + + public static MagicFest2020 getInstance() { + return instance; + } + + private MagicFest2020() { + super("MagicFest 2020", "PF20", ExpansionSet.buildDate(2020, 1, 1), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = true; + + cards.add(new SetCardInfo("Forest", 6, Rarity.LAND, mage.cards.basiclands.Forest.class)); + cards.add(new SetCardInfo("Island", 3, Rarity.LAND, mage.cards.basiclands.Island.class)); + cards.add(new SetCardInfo("Mountain", 5, Rarity.LAND, mage.cards.basiclands.Mountain.class)); + cards.add(new SetCardInfo("Path to Exile", 1, Rarity.RARE, mage.cards.p.PathToExile.class)); + cards.add(new SetCardInfo("Plains", 2, Rarity.LAND, mage.cards.basiclands.Plains.class)); + cards.add(new SetCardInfo("Swamp", 4, Rarity.LAND, mage.cards.basiclands.Swamp.class)); + } +} From 07a8799c134a39225ef75ce160ab6474e7bcacef Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Wed, 18 Mar 2020 17:16:43 +0100 Subject: [PATCH 141/182] Added the Gateway 2008 (PG08) set. --- Mage.Sets/src/mage/sets/Gateway2008.java | 32 ++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/Gateway2008.java diff --git a/Mage.Sets/src/mage/sets/Gateway2008.java b/Mage.Sets/src/mage/sets/Gateway2008.java new file mode 100644 index 00000000000..c13eade07ed --- /dev/null +++ b/Mage.Sets/src/mage/sets/Gateway2008.java @@ -0,0 +1,32 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/pg08 + */ +public class Gateway2008 extends ExpansionSet { + + private static final Gateway2008 instance = new Gateway2008(); + + public static Gateway2008 getInstance() { + return instance; + } + + private Gateway2008() { + super("Gateway 2008", "PG08", ExpansionSet.buildDate(2008, 1, 1), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Boggart Ram-Gang", 17, Rarity.RARE, mage.cards.b.BoggartRamGang.class)); + cards.add(new SetCardInfo("Cenn's Tactician", 14, Rarity.RARE, mage.cards.c.CennsTactician.class)); + cards.add(new SetCardInfo("Duergar Hedge-Mage", 19, Rarity.RARE, mage.cards.d.DuergarHedgeMage.class)); + cards.add(new SetCardInfo("Gravedigger", 16, Rarity.RARE, mage.cards.g.Gravedigger.class)); + cards.add(new SetCardInfo("Lava Axe", 13, Rarity.RARE, mage.cards.l.LavaAxe.class)); + cards.add(new SetCardInfo("Oona's Blackguard", 15, Rarity.RARE, mage.cards.o.OonasBlackguard.class)); + cards.add(new SetCardInfo("Selkie Hedge-Mage", 20, Rarity.RARE, mage.cards.s.SelkieHedgeMage.class)); + cards.add(new SetCardInfo("Wilt-Leaf Cavaliers", 18, Rarity.RARE, mage.cards.w.WiltLeafCavaliers.class)); + } +} From 7fb56aafda68303cccde9395387ffd5cc1f768aa Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Wed, 18 Mar 2020 17:24:51 +0100 Subject: [PATCH 142/182] mage.verify.VerifyCardDataTest: Skip known not-implemented sets. Skipped are: - Pure token sets - Commander set oversized cards - Non-English-only sets - Non-traditional cards used for casual PvE modes - Planechase Planes - Archenemy Schemes - Modern Horizons artwork cards - Some other misc sets with non-traditional cards --- .../java/mage/verify/VerifyCardDataTest.java | 69 ++++++++++++++++++- 1 file changed, 68 insertions(+), 1 deletion(-) diff --git a/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java b/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java index 6ccc816491e..fa6ed0a7cef 100644 --- a/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java +++ b/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java @@ -83,6 +83,7 @@ public class VerifyCardDataTest { private static final String SKIP_LIST_NUMBER = "NUMBER"; private static final String SKIP_LIST_MISSING_ABILITIES = "MISSING_ABILITIES"; private static final String SKIP_LIST_DOUBLE_RARE = "DOUBLE_RARE"; + private static final String SKIP_LIST_INVALID_SETS = "INVALID_SETS"; static { // skip lists for checks (example: unstable cards with same name may have different stats) @@ -123,7 +124,7 @@ public class VerifyCardDataTest { skipListAddName(SKIP_LIST_SUBTYPE, "AER", "Ridgescale Tusker"); skipListAddName(SKIP_LIST_SUBTYPE, "ME3", "Lady Caleria"); skipListAddName(SKIP_LIST_SUBTYPE, "LEG", "Lady Caleria"); - // Errata: Chicken -> Bird (2020). Remove thene, when it's been corrected in MTGJSON + // Errata: Chicken -> Bird (2020). Remove these, when it's been corrected in MTGJSON skipListAddName(SKIP_LIST_SUBTYPE, "UGL", "Chicken a la King"); skipListAddName(SKIP_LIST_SUBTYPE, "UGL", "Free-Range Chicken"); skipListAddName(SKIP_LIST_SUBTYPE, "UND", "Free-Range Chicken"); @@ -138,6 +139,70 @@ public class VerifyCardDataTest { // double rare cards skipListCreate(SKIP_LIST_DOUBLE_RARE); + + // Non-English or empty sets: Token sets, Archenemy Schemes, Plane-Chase Planes, etc. + skipListCreate(SKIP_LIST_INVALID_SETS); + // Non-English-only sets should not be added. https://github.com/magefree/mage/pull/6190#issuecomment-582354790 + skipListAddName(SKIP_LIST_INVALID_SETS, "4BB"); // 4th Edition Foreign black border. + skipListAddName(SKIP_LIST_INVALID_SETS, "FBB"); // Foreign Black Border. Not on Scryfall, but other sources use this to distinguish non-English Revised cards + skipListAddName(SKIP_LIST_INVALID_SETS, "PHJ"); // Hobby Japan Promos + skipListAddName(SKIP_LIST_INVALID_SETS, "PJJT"); // Japan Junior Tournament + skipListAddName(SKIP_LIST_INVALID_SETS, "PRED"); // Redemption Program + skipListAddName(SKIP_LIST_INVALID_SETS, "PSAL"); // Salvat 2005 + skipListAddName(SKIP_LIST_INVALID_SETS, "PS11"); // Salvat 2011 + skipListAddName(SKIP_LIST_INVALID_SETS, "PMPS"); // Magic Premiere Shop 2005, Japanese Basic lands + skipListAddName(SKIP_LIST_INVALID_SETS, "PMPS06"); // Magic Premiere Shop 2006, Japanese Basic lands + skipListAddName(SKIP_LIST_INVALID_SETS, "PMPS07"); // Magic Premiere Shop 2007, Japanese Basic lands + skipListAddName(SKIP_LIST_INVALID_SETS, "PMPS08"); // Magic Premiere Shop 2008, Japanese Basic lands + skipListAddName(SKIP_LIST_INVALID_SETS, "PMPS09"); // Magic Premiere Shop 2009, Japanese Basic lands + skipListAddName(SKIP_LIST_INVALID_SETS, "PMPS10"); // Magic Premiere Shop 2010, Japanese Basic lands + skipListAddName(SKIP_LIST_INVALID_SETS, "PMPS11"); // Magic Premiere Shop 2011, Japanese Basic lands + skipListAddName(SKIP_LIST_INVALID_SETS, "REN"); // Renaissance + skipListAddName(SKIP_LIST_INVALID_SETS, "RIN"); // Rinascimento + // Archenemy Schemes + skipListAddName(SKIP_LIST_INVALID_SETS, "OARC"); // Archenemy Schemes + skipListAddName(SKIP_LIST_INVALID_SETS, "OE01"); // Archenemy: Nicol Bolas Schemes + skipListAddName(SKIP_LIST_INVALID_SETS, "PARC"); // Promotional Schemes + // Plane-chase Planes + skipListAddName(SKIP_LIST_INVALID_SETS, "OHOP"); // Planechase Planes + skipListAddName(SKIP_LIST_INVALID_SETS, "OPC2"); // Planechase 2012 Plane + skipListAddName(SKIP_LIST_INVALID_SETS, "OPCA"); // Planechase Anthology Planes + skipListAddName(SKIP_LIST_INVALID_SETS, "PHOP"); // Promotional Planes + // Token sets + skipListAddName(SKIP_LIST_INVALID_SETS, "L12"); // League Tokens 2012 + skipListAddName(SKIP_LIST_INVALID_SETS, "L13"); // League Tokens 2013 + skipListAddName(SKIP_LIST_INVALID_SETS, "L14"); // League Tokens 2014 + skipListAddName(SKIP_LIST_INVALID_SETS, "L15"); // League Tokens 2015 + skipListAddName(SKIP_LIST_INVALID_SETS, "L16"); // League Tokens 2016 + skipListAddName(SKIP_LIST_INVALID_SETS, "L17"); // League Tokens 2017 + skipListAddName(SKIP_LIST_INVALID_SETS, "PLNY"); // 2018 Lunar New Year + skipListAddName(SKIP_LIST_INVALID_SETS, "F18"); // Friday Night Magic 2018 + skipListAddName(SKIP_LIST_INVALID_SETS, "PR2"); // Magic Player Rewards 2002 + // PvE sets containing non-traditional cards. These enable casual PvE battles against a "random AI"-driven opponent. + skipListAddName(SKIP_LIST_INVALID_SETS, "PPC1"); // M15 Prerelease Challenge + skipListAddName(SKIP_LIST_INVALID_SETS, "TBTH"); // Battle the Horde + skipListAddName(SKIP_LIST_INVALID_SETS, "TDAG"); // Defeat a God + skipListAddName(SKIP_LIST_INVALID_SETS, "TFTH"); // Face the Hydra + skipListAddName(SKIP_LIST_INVALID_SETS, "THP1"); // Theros Hero's Path + skipListAddName(SKIP_LIST_INVALID_SETS, "THP2"); // Born of the Gods Hero's Path + skipListAddName(SKIP_LIST_INVALID_SETS, "THP3"); // Journey into Nyx Hero's Path + // Commander Oversized cards. + skipListAddName(SKIP_LIST_INVALID_SETS, "OCMD"); // Commander 2011 Oversized + skipListAddName(SKIP_LIST_INVALID_SETS, "OC13"); // Commander 2013 Oversized + skipListAddName(SKIP_LIST_INVALID_SETS, "OC14"); // Commander 2014 Oversized + skipListAddName(SKIP_LIST_INVALID_SETS, "OC15"); // Commander 2015 Oversized + skipListAddName(SKIP_LIST_INVALID_SETS, "OC16"); // Commander 2016 Oversized + skipListAddName(SKIP_LIST_INVALID_SETS, "OC17"); // Commander 2017 Oversized + skipListAddName(SKIP_LIST_INVALID_SETS, "OC18"); // Commander 2018 Oversized + skipListAddName(SKIP_LIST_INVALID_SETS, "OC19"); // Commander 2019 Oversized + skipListAddName(SKIP_LIST_INVALID_SETS, "OCM1"); // Commander's Arsenal Oversized + // Other + skipListAddName(SKIP_LIST_INVALID_SETS, "PCEL"); // Celebration Cards + skipListAddName(SKIP_LIST_INVALID_SETS, "PMOA"); // Magic Online Avatar + skipListAddName(SKIP_LIST_INVALID_SETS, "PVAN"); // Vanguard Series + skipListAddName(SKIP_LIST_INVALID_SETS, "AMH1"); // Modern Horizons Art Series + skipListAddName(SKIP_LIST_INVALID_SETS, "PTG"); // Ponies: The Galloping + } private void warn(Card card, String message) { @@ -337,6 +402,8 @@ public class VerifyCardDataTest { // replace codes for aliases String searchSet = MtgJson.mtgJsonToXMageCodes.getOrDefault(refSet.code, refSet.code); + if (skipListHaveName(SKIP_LIST_INVALID_SETS, searchSet)) + continue; ExpansionSet mageSet = Sets.findSet(searchSet.toUpperCase()); if (mageSet == null) { From 69c5407d15daca80133c01a194b52217c75d6427 Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Wed, 18 Mar 2020 18:52:30 +0100 Subject: [PATCH 143/182] Removed Amonkhet cards from the Archenemy: Nicol Bolas set. - The Amonkhet cards are indistinguishable from the regular Amonkhet cards - Simplified the ScryfallImageSource class by removing a special case. --- .../card/dl/sources/ScryfallImageSource.java | 14 -------------- .../src/mage/sets/ArchenemyNicolBolas.java | 17 +---------------- 2 files changed, 1 insertion(+), 30 deletions(-) diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSource.java b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSource.java index a3e4e150553..b1731b610cd 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSource.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSource.java @@ -198,20 +198,6 @@ public enum ScryfallImageSource implements CardImageSource { preparedUrls.put(card, url); } - // if an E01 card number is above 106, it's actually an AKH card - if (card.getSet().equals("E01") && card.getCollectorIdAsInt() > 106) { - String url = null; - - try { - url = searchCard(proxy, "AKH", card.getName()); - } catch (Exception e) { - logger.warn("Failed to prepare image URL (E01) for " + card.getName() + " (" + card.getSet() + ") #" + card.getCollectorId()); - downloadServiceInfo.incErrorCount(); - continue; - } - - preparedUrls.put(card, url); - } // inc error count to stop on too many errors // downloadServiceInfo.incErrorCount(); diff --git a/Mage.Sets/src/mage/sets/ArchenemyNicolBolas.java b/Mage.Sets/src/mage/sets/ArchenemyNicolBolas.java index a6c4a696ace..aec6d79249d 100644 --- a/Mage.Sets/src/mage/sets/ArchenemyNicolBolas.java +++ b/Mage.Sets/src/mage/sets/ArchenemyNicolBolas.java @@ -20,6 +20,7 @@ public final class ArchenemyNicolBolas extends ExpansionSet { private ArchenemyNicolBolas() { super("Archenemy: Nicol Bolas", "E01", ExpansionSet.buildDate(2017, 6, 16), SetType.SUPPLEMENTAL); this.blockName = "Command Zone"; + cards.add(new SetCardInfo("Aegis Angel", 1, Rarity.RARE, mage.cards.a.AegisAngel.class)); cards.add(new SetCardInfo("Aerial Responder", 2, Rarity.UNCOMMON, mage.cards.a.AerialResponder.class)); cards.add(new SetCardInfo("Anointer of Champions", 3, Rarity.UNCOMMON, mage.cards.a.AnointerOfChampions.class)); @@ -29,12 +30,9 @@ public final class ArchenemyNicolBolas extends ExpansionSet { cards.add(new SetCardInfo("Battle-Rattle Shaman", 40, Rarity.COMMON, mage.cards.b.BattleRattleShaman.class)); cards.add(new SetCardInfo("Blood Ogre", 41, Rarity.COMMON, mage.cards.b.BloodOgre.class)); cards.add(new SetCardInfo("Blood Tyrant", 81, Rarity.RARE, mage.cards.b.BloodTyrant.class)); - cards.add(new SetCardInfo("Bone Picker", 110, Rarity.UNCOMMON, mage.cards.b.BonePicker.class)); - cards.add(new SetCardInfo("Brute Strength", 111, Rarity.COMMON, mage.cards.b.BruteStrength.class)); cards.add(new SetCardInfo("Chandra, Pyromaster", 42, Rarity.MYTHIC, mage.cards.c.ChandraPyromaster.class)); cards.add(new SetCardInfo("Chandra's Outrage", 43, Rarity.COMMON, mage.cards.c.ChandrasOutrage.class)); cards.add(new SetCardInfo("Chandra's Phoenix", 44, Rarity.RARE, mage.cards.c.ChandrasPhoenix.class)); - cards.add(new SetCardInfo("Cinder Barrens", 119, Rarity.UNCOMMON, mage.cards.c.CinderBarrens.class)); cards.add(new SetCardInfo("Compulsive Research", 23, Rarity.UNCOMMON, mage.cards.c.CompulsiveResearch.class)); cards.add(new SetCardInfo("Coordinated Assault", 45, Rarity.UNCOMMON, mage.cards.c.CoordinatedAssault.class)); cards.add(new SetCardInfo("Cruel Ultimatum", 82, Rarity.RARE, mage.cards.c.CruelUltimatum.class)); @@ -65,24 +63,20 @@ public final class ArchenemyNicolBolas extends ExpansionSet { cards.add(new SetCardInfo("Gorehorn Minotaurs", 49, Rarity.COMMON, mage.cards.g.GorehornMinotaurs.class)); cards.add(new SetCardInfo("Grand Abolisher", 12, Rarity.RARE, mage.cards.g.GrandAbolisher.class)); cards.add(new SetCardInfo("Grasp of the Hieromancer", 13, Rarity.COMMON, mage.cards.g.GraspOfTheHieromancer.class)); - cards.add(new SetCardInfo("Greater Sandwurm", 115, Rarity.COMMON, mage.cards.g.GreaterSandwurm.class)); cards.add(new SetCardInfo("Grim Lavamancer", 50, Rarity.RARE, mage.cards.g.GrimLavamancer.class)); cards.add(new SetCardInfo("Grixis Panorama", 95, Rarity.COMMON, mage.cards.g.GrixisPanorama.class)); cards.add(new SetCardInfo("Guttersnipe", 51, Rarity.UNCOMMON, mage.cards.g.Guttersnipe.class)); cards.add(new SetCardInfo("Hammerhand", 52, Rarity.COMMON, mage.cards.h.Hammerhand.class)); cards.add(new SetCardInfo("Harvester of Souls", 34, Rarity.RARE, mage.cards.h.HarvesterOfSouls.class)); - cards.add(new SetCardInfo("Highland Lake", 120, Rarity.UNCOMMON, mage.cards.h.HighlandLake.class)); cards.add(new SetCardInfo("Hunter's Prowess", 66, Rarity.RARE, mage.cards.h.HuntersProwess.class)); cards.add(new SetCardInfo("Icefall Regent", 24, Rarity.RARE, mage.cards.i.IcefallRegent.class)); cards.add(new SetCardInfo("Inferno Titan", 53, Rarity.MYTHIC, mage.cards.i.InfernoTitan.class)); - cards.add(new SetCardInfo("Initiate's Companion", 116, Rarity.COMMON, mage.cards.i.InitiatesCompanion.class)); cards.add(new SetCardInfo("Ior Ruin Expedition", 25, Rarity.COMMON, mage.cards.i.IorRuinExpedition.class)); cards.add(new SetCardInfo("Island", 103, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Island", 98, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Khalni Heart Expedition", 67, Rarity.COMMON, mage.cards.k.KhalniHeartExpedition.class)); cards.add(new SetCardInfo("Lightning Bolt", 54, Rarity.COMMON, mage.cards.l.LightningBolt.class)); cards.add(new SetCardInfo("Lightwielder Paladin", 14, Rarity.RARE, mage.cards.l.LightwielderPaladin.class)); - cards.add(new SetCardInfo("Limits of Solidarity", 112, Rarity.UNCOMMON, mage.cards.l.LimitsOfSolidarity.class)); cards.add(new SetCardInfo("Mentor of the Meek", 15, Rarity.RARE, mage.cards.m.MentorOfTheMeek.class)); cards.add(new SetCardInfo("Moment of Heroism", 16, Rarity.COMMON, mage.cards.m.MomentOfHeroism.class)); cards.add(new SetCardInfo("Mountain", 100, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); @@ -95,7 +89,6 @@ public final class ArchenemyNicolBolas extends ExpansionSet { cards.add(new SetCardInfo("Odric, Master Tactician", 17, Rarity.RARE, mage.cards.o.OdricMasterTactician.class)); cards.add(new SetCardInfo("Oran-Rief Hydra", 69, Rarity.RARE, mage.cards.o.OranRiefHydra.class)); cards.add(new SetCardInfo("Overseer of the Damned", 36, Rarity.RARE, mage.cards.o.OverseerOfTheDamned.class)); - cards.add(new SetCardInfo("Pathmaker Initiate", 113, Rarity.COMMON, mage.cards.p.PathmakerInitiate.class)); cards.add(new SetCardInfo("Plains", 102, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Plains", 97, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Precinct Captain", 18, Rarity.RARE, mage.cards.p.PrecinctCaptain.class)); @@ -106,19 +99,15 @@ public final class ArchenemyNicolBolas extends ExpansionSet { cards.add(new SetCardInfo("Reckless Spite", 37, Rarity.UNCOMMON, mage.cards.r.RecklessSpite.class)); cards.add(new SetCardInfo("Relief Captain", 19, Rarity.UNCOMMON, mage.cards.r.ReliefCaptain.class)); cards.add(new SetCardInfo("Retreat to Kazandu", 72, Rarity.UNCOMMON, mage.cards.r.RetreatToKazandu.class)); - cards.add(new SetCardInfo("Scaled Behemoth", 117, Rarity.UNCOMMON, mage.cards.s.ScaledBehemoth.class)); cards.add(new SetCardInfo("Scute Mob", 73, Rarity.RARE, mage.cards.s.ScuteMob.class)); cards.add(new SetCardInfo("Searing Spear", 56, Rarity.COMMON, mage.cards.s.SearingSpear.class)); cards.add(new SetCardInfo("Shoulder to Shoulder", 20, Rarity.COMMON, mage.cards.s.ShoulderToShoulder.class)); - cards.add(new SetCardInfo("Sixth Sense", 118, Rarity.UNCOMMON, mage.cards.s.SixthSense.class)); cards.add(new SetCardInfo("Skarrgan Firebird", 57, Rarity.UNCOMMON, mage.cards.s.SkarrganFirebird.class)); cards.add(new SetCardInfo("Slave of Bolas", 86, Rarity.UNCOMMON, mage.cards.s.SlaveOfBolas.class)); cards.add(new SetCardInfo("Smoldering Spires", 96, Rarity.COMMON, mage.cards.s.SmolderingSpires.class)); cards.add(new SetCardInfo("Soul Ransom", 87, Rarity.UNCOMMON, mage.cards.s.SoulRansom.class)); - cards.add(new SetCardInfo("Sparring Mummy", 107, Rarity.COMMON, mage.cards.s.SparringMummy.class)); cards.add(new SetCardInfo("Sphinx of Jwar Isle", 28, Rarity.RARE, mage.cards.s.SphinxOfJwarIsle.class)); cards.add(new SetCardInfo("Stormblood Berserker", 58, Rarity.UNCOMMON, mage.cards.s.StormbloodBerserker.class)); - cards.add(new SetCardInfo("Submerged Boneyard", 121, Rarity.COMMON, mage.cards.s.SubmergedBoneyard.class)); cards.add(new SetCardInfo("Sudden Demise", 59, Rarity.RARE, mage.cards.s.SuddenDemise.class)); cards.add(new SetCardInfo("Sun Titan", 21, Rarity.MYTHIC, mage.cards.s.SunTitan.class)); cards.add(new SetCardInfo("Swamp", 104, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); @@ -127,20 +116,16 @@ public final class ArchenemyNicolBolas extends ExpansionSet { cards.add(new SetCardInfo("Sylvan Bounty", 74, Rarity.COMMON, mage.cards.s.SylvanBounty.class)); cards.add(new SetCardInfo("Talisman of Dominance", 90, Rarity.UNCOMMON, mage.cards.t.TalismanOfDominance.class)); cards.add(new SetCardInfo("Talisman of Indulgence", 91, Rarity.UNCOMMON, mage.cards.t.TalismanOfIndulgence.class)); - cards.add(new SetCardInfo("Those Who Serve", 108, Rarity.COMMON, mage.cards.t.ThoseWhoServe.class)); cards.add(new SetCardInfo("Thragtusk", 75, Rarity.RARE, mage.cards.t.Thragtusk.class)); cards.add(new SetCardInfo("Torchling", 60, Rarity.RARE, mage.cards.t.Torchling.class)); - cards.add(new SetCardInfo("Tormenting Voice", 114, Rarity.COMMON, mage.cards.t.TormentingVoice.class)); cards.add(new SetCardInfo("Turntimber Basilisk", 76, Rarity.UNCOMMON, mage.cards.t.TurntimberBasilisk.class)); cards.add(new SetCardInfo("Vampire Nighthawk", 38, Rarity.UNCOMMON, mage.cards.v.VampireNighthawk.class)); cards.add(new SetCardInfo("Vastwood Zendikon", 77, Rarity.COMMON, mage.cards.v.VastwoodZendikon.class)); cards.add(new SetCardInfo("Vines of the Recluse", 78, Rarity.COMMON, mage.cards.v.VinesOfTheRecluse.class)); cards.add(new SetCardInfo("Vision Skeins", 29, Rarity.COMMON, mage.cards.v.VisionSkeins.class)); - cards.add(new SetCardInfo("Vizier of Deferment", 109, Rarity.UNCOMMON, mage.cards.v.VizierOfDeferment.class)); cards.add(new SetCardInfo("Volcanic Geyser", 61, Rarity.UNCOMMON, mage.cards.v.VolcanicGeyser.class)); cards.add(new SetCardInfo("Windrider Eel", 30, Rarity.COMMON, mage.cards.w.WindriderEel.class)); cards.add(new SetCardInfo("Woodborn Behemoth", 79, Rarity.UNCOMMON, mage.cards.w.WoodbornBehemoth.class)); - cards.add(new SetCardInfo("Woodland Stream", 122, Rarity.COMMON, mage.cards.w.WoodlandStream.class)); cards.add(new SetCardInfo("Youthful Knight", 22, Rarity.COMMON, mage.cards.y.YouthfulKnight.class)); } From e4f545ff85580a0241504e38901327100e2dcfd0 Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Wed, 18 Mar 2020 19:32:10 +0100 Subject: [PATCH 144/182] Removed date-stamped pre-release promos from the Prerelease Events (PPRE) set, MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit that are not listed as part of this set on Scryfall. The removed cards were added to the individual expansion’s promo sets before, so no printing is lost. --- ...Abzan Midrange TDtB ST Dec 2014.mwDeck.dck | 88 ++--- .../Saint WW TDtB ST Jan 2012.mwDeck.dck | 86 ++--- .../card/dl/sources/GrabbagImageSource.java | 9 - Mage.Sets/src/mage/sets/PrereleaseEvents.java | 348 +++--------------- 4 files changed, 129 insertions(+), 402 deletions(-) diff --git a/Mage.Client/release/sample-decks/Decks to Beat/Abzan Midrange TDtB ST Dec 2014.mwDeck.dck b/Mage.Client/release/sample-decks/Decks to Beat/Abzan Midrange TDtB ST Dec 2014.mwDeck.dck index d0f096cf246..96a807222e0 100644 --- a/Mage.Client/release/sample-decks/Decks to Beat/Abzan Midrange TDtB ST Dec 2014.mwDeck.dck +++ b/Mage.Client/release/sample-decks/Decks to Beat/Abzan Midrange TDtB ST Dec 2014.mwDeck.dck @@ -1,44 +1,44 @@ -4 [KTK:248] Windswept Heath -1 [TPR:267] Forest -2 [JOU:165] Temple of Malady -1 [PLC:165] Urborg, Tomb of Yawgmoth -1 [JOU:5] Banishing Light -4 [KTK:200] Siege Rhino -2 [M15:34] Soul of Theros -2 [C14:191] Elvish Mystic -1 [F14:9] Banishing Light -1 [M11:233] Plains -1 [LRW:299] Forest -4 [KTK:241] Sandsteppe Citadel -1 [10E:355] Llanowar Wastes -1 [M15:178] Hornet Queen -1 [UNH:140] Forest -1 [APC:140] Caves of Koilos -1 [M15:173] Elvish Mystic -2 [BNG:136] Satyr Wayfinder -4 [BNG:119] Courser of Kruphix -1 [RAV:287] Plains -2 [THS:227] Temple of Silence -1 [APC:141] Llanowar Wastes -4 [KTK:31] Wingmate Roc -2 [M15:198] Satyr Wayfinder -2 [THS:155] Commune with the Gods -2 [THS:180] Sylvan Caryatid -1 [MBP:77] Sylvan Caryatid -2 [THS:110] Whip of Erebos -1 [F14:2] Elvish Mystic -3 [KTK:81] Murderous Cut -2 [CMD:159] Hornet Queen -2 [M15:244] Llanowar Wastes -SB: 1 [M15:194] Reclamation Sage -SB: 1 [PPRE:80] Doomwake Giant -SB: 2 [LRW:145] Thoughtseize -SB: 1 [KTK:174] Duneblast -SB: 1 [M15:187] Nissa, Worldwaker -SB: 1 [THS:110] Whip of Erebos -SB: 2 [THS:15] Glare of Heresy -SB: 2 [KTK:8] End Hostilities -SB: 1 [JOU:66] Doomwake Giant -SB: 1 [C14:213] Reclamation Sage -SB: 1 [THS:101] Read the Bones -SB: 1 [MBP:103] Nissa, Worldwaker +4 [KTK:248] Windswept Heath +1 [TPR:267] Forest +2 [JOU:165] Temple of Malady +1 [PLC:165] Urborg, Tomb of Yawgmoth +1 [JOU:5] Banishing Light +4 [KTK:200] Siege Rhino +2 [M15:34] Soul of Theros +2 [C14:191] Elvish Mystic +1 [F14:9] Banishing Light +1 [M11:233] Plains +1 [LRW:299] Forest +4 [KTK:241] Sandsteppe Citadel +1 [10E:355] Llanowar Wastes +1 [M15:178] Hornet Queen +1 [UNH:140] Forest +1 [APC:140] Caves of Koilos +1 [M15:173] Elvish Mystic +2 [BNG:136] Satyr Wayfinder +4 [BNG:119] Courser of Kruphix +1 [RAV:287] Plains +2 [THS:227] Temple of Silence +1 [APC:141] Llanowar Wastes +4 [KTK:31] Wingmate Roc +2 [M15:198] Satyr Wayfinder +2 [THS:155] Commune with the Gods +2 [THS:180] Sylvan Caryatid +1 [MBP:77] Sylvan Caryatid +2 [THS:110] Whip of Erebos +1 [F14:2] Elvish Mystic +3 [KTK:81] Murderous Cut +2 [CMD:159] Hornet Queen +2 [M15:244] Llanowar Wastes +SB: 1 [M15:194] Reclamation Sage +SB: 1 [PJOU:66] Doomwake Giant +SB: 2 [LRW:145] Thoughtseize +SB: 1 [KTK:174] Duneblast +SB: 1 [M15:187] Nissa, Worldwaker +SB: 1 [THS:110] Whip of Erebos +SB: 2 [THS:15] Glare of Heresy +SB: 2 [KTK:8] End Hostilities +SB: 1 [JOU:66] Doomwake Giant +SB: 1 [C14:213] Reclamation Sage +SB: 1 [THS:101] Read the Bones +SB: 1 [MBP:103] Nissa, Worldwaker diff --git a/Mage.Client/release/sample-decks/Decks to Beat/Saint WW TDtB ST Jan 2012.mwDeck.dck b/Mage.Client/release/sample-decks/Decks to Beat/Saint WW TDtB ST Jan 2012.mwDeck.dck index 362faa98cb0..8cab13eec2c 100644 --- a/Mage.Client/release/sample-decks/Decks to Beat/Saint WW TDtB ST Jan 2012.mwDeck.dck +++ b/Mage.Client/release/sample-decks/Decks to Beat/Saint WW TDtB ST Jan 2012.mwDeck.dck @@ -1,43 +1,43 @@ -1 [WMCQ:2] Geist of Saint Traft -2 [M12:18] Gideon's Lawkeeper -1 [M12:19] Grand Abolisher -3 [C13:11] Fiend Hunter -1 [ALA:20] Oblivion Ring -3 [C14:74] Grand Abolisher -2 [M10:16] Honor of the Pure -1 [POR:216] Plains -1 [M10:233] Plains -1 [M13:225] Glacial Fortress -4 [PPRE:47] Hero of Bladehold -3 [ISD:11] Doomed Traveler -1 [DDK:2] Doomed Traveler -1 [DDN:81] Plains -1 [ODY:333] Plains -1 [DDI:40] Plains -3 [ISD:244] Moorland Haunt -1 [MBS:14] Mirran Crusader -1 [ALA:230] Plains -2 [M10:226] Glacial Fortress -1 [M12:227] Glacial Fortress -2 [MBP:32] Mirran Crusader -3 [M12:3] Angelic Destiny -1 [LRW:34] Oblivion Ring -1 [ZEN:232] Plains -1 [DDN:38] Plains -1 [HOP:145] Plains -1 [KTK:250] Plains -1 [MM2:25] Mirran Crusader -1 [ISD:251] Plains -4 [SOM:229] Seachrome Coast -1 [ISD:213] Geist of Saint Traft -2 [M12:23] Honor of the Pure -1 [ME3:220] Island -4 [ISD:6] Champion of the Parish -1 [AVR:231] Plains -SB: 2 [NPH:161] Sword of War and Peace -SB: 2 [NPH:57] Dismember -SB: 1 [M12:11] Celestial Purge -SB: 1 [MBS:115] Mortarpod -SB: 4 [M12:40] Timely Reinforcements -SB: 3 [M12:63] Mana Leak -SB: 2 [M15:71] Negate +1 [WMCQ:2] Geist of Saint Traft +2 [M12:18] Gideon's Lawkeeper +1 [M12:19] Grand Abolisher +3 [C13:11] Fiend Hunter +1 [ALA:20] Oblivion Ring +3 [C14:74] Grand Abolisher +2 [M10:16] Honor of the Pure +1 [POR:216] Plains +1 [M10:233] Plains +1 [M13:225] Glacial Fortress +4 [PMBS:8] Hero of Bladehold +3 [ISD:11] Doomed Traveler +1 [DDK:2] Doomed Traveler +1 [DDN:81] Plains +1 [ODY:333] Plains +1 [DDI:40] Plains +3 [ISD:244] Moorland Haunt +1 [MBS:14] Mirran Crusader +1 [ALA:230] Plains +2 [M10:226] Glacial Fortress +1 [M12:227] Glacial Fortress +2 [MBP:32] Mirran Crusader +3 [M12:3] Angelic Destiny +1 [LRW:34] Oblivion Ring +1 [ZEN:232] Plains +1 [DDN:38] Plains +1 [HOP:145] Plains +1 [KTK:250] Plains +1 [MM2:25] Mirran Crusader +1 [ISD:251] Plains +4 [SOM:229] Seachrome Coast +1 [ISD:213] Geist of Saint Traft +2 [M12:23] Honor of the Pure +1 [ME3:220] Island +4 [ISD:6] Champion of the Parish +1 [AVR:231] Plains +SB: 2 [NPH:161] Sword of War and Peace +SB: 2 [NPH:57] Dismember +SB: 1 [M12:11] Celestial Purge +SB: 1 [MBS:115] Mortarpod +SB: 4 [M12:40] Timely Reinforcements +SB: 3 [M12:63] Mana Leak +SB: 2 [M15:71] Negate diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/GrabbagImageSource.java b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/GrabbagImageSource.java index 7fb30821af8..2fc3cfeb372 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/GrabbagImageSource.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/GrabbagImageSource.java @@ -76,15 +76,6 @@ public enum GrabbagImageSource implements CardImageSource { return; } singleLinks = new HashMap<>(); - singleLinks.put("PPRE/Arbiter of the Ideal", "MTG/BNG/en/promo/ArbiterOfTheIdeal.jpg"); - singleLinks.put("PPRE/Courser of Kruphix", "MTG/BNG/en/promo/CourserOfKruphix.jpg"); - singleLinks.put("PPRE/Eater of Hope", "MTG/BNG/en/promo/EaterOfHope.jpg"); - singleLinks.put("PPRE/Fated Return", "MTG/BNG/en/promo/FatedReturn.jpg"); - singleLinks.put("PPRE/Forgestoker Dragon", "MTG/BNG/en/promo/ForgestokerDragon.jpg"); - singleLinks.put("PPRE/Nessian Wilds Ravager", "MTG/BNG/en/promo/NessianWildsRavager.jpg"); - singleLinks.put("PPRE/Pain Seer", "MTG/BNG/en/promo/PainSeer.jpg"); - singleLinks.put("PPRE/Silent Sentinel", "MTG/BNG/en/promo/SilentSentinel.jpg"); - singleLinks.put("PPRE/Tromokratis", "MTG/BNG/en/promo/Tromokratis.jpg"); singleLinks.put("SWS/AAT-1", "CqmDY8V.jpg"); singleLinks.put("SWS/Acklay of the Arena", "ESVRm6F.jpg"); diff --git a/Mage.Sets/src/mage/sets/PrereleaseEvents.java b/Mage.Sets/src/mage/sets/PrereleaseEvents.java index 9478b870752..f3c647779bb 100644 --- a/Mage.Sets/src/mage/sets/PrereleaseEvents.java +++ b/Mage.Sets/src/mage/sets/PrereleaseEvents.java @@ -15,312 +15,48 @@ public final class PrereleaseEvents extends ExpansionSet { private PrereleaseEvents() { super("Prerelease Events", "PPRE", ExpansionSet.buildDate(1990, 1, 1), SetType.PROMOTIONAL); this.hasBoosters = false; - this.hasBasicLands = true; + this.hasBasicLands = false; - cards.add(new SetCardInfo("Abbot of Keral Keep", 198, Rarity.RARE, mage.cards.a.AbbotOfKeralKeep.class)); - cards.add(new SetCardInfo("Abhorrent Overlord", 70, Rarity.SPECIAL, mage.cards.a.AbhorrentOverlord.class)); - cards.add(new SetCardInfo("Abzan Ascendancy", 88, Rarity.SPECIAL, mage.cards.a.AbzanAscendancy.class)); - cards.add(new SetCardInfo("Ajani Vengeant", 38, Rarity.SPECIAL, mage.cards.a.AjaniVengeant.class)); - cards.add(new SetCardInfo("Akoum Firebird", 238, Rarity.MYTHIC, mage.cards.a.AkoumFirebird.class)); - cards.add(new SetCardInfo("Akoum Hellkite", 239, Rarity.RARE, mage.cards.a.AkoumHellkite.class)); - cards.add(new SetCardInfo("Alesha, Who Smiles at Death", 128, Rarity.RARE, mage.cards.a.AleshaWhoSmilesAtDeath.class)); - cards.add(new SetCardInfo("Alhammarret, High Arbiter", 199, Rarity.RARE, mage.cards.a.AlhammarretHighArbiter.class)); - cards.add(new SetCardInfo("Aligned Hedron Network", 240, Rarity.RARE, mage.cards.a.AlignedHedronNetwork.class)); - cards.add(new SetCardInfo("Allosaurus Rider", 30, Rarity.SPECIAL, mage.cards.a.AllosaurusRider.class)); - cards.add(new SetCardInfo("Ally Encampment", 241, Rarity.RARE, mage.cards.a.AllyEncampment.class)); - cards.add(new SetCardInfo("Anafenza, Kin-Tree Spirit", 158, Rarity.RARE, mage.cards.a.AnafenzaKinTreeSpirit.class)); - cards.add(new SetCardInfo("Anafenza, the Foremost", 89, Rarity.SPECIAL, mage.cards.a.AnafenzaTheForemost.class)); - cards.add(new SetCardInfo("Angelic Captain", 242, Rarity.RARE, mage.cards.a.AngelicCaptain.class)); - cards.add(new SetCardInfo("Ankle Shanker", 90, Rarity.SPECIAL, mage.cards.a.AnkleShanker.class)); - cards.add(new SetCardInfo("Anthousa, Setessan Hero", 72, Rarity.SPECIAL, mage.cards.a.AnthousaSetessanHero.class)); - cards.add(new SetCardInfo("Arashin Foremost", 159, Rarity.RARE, mage.cards.a.ArashinForemost.class)); - cards.add(new SetCardInfo("Arashin Sovereign", 160, Rarity.RARE, mage.cards.a.ArashinSovereign.class)); - cards.add(new SetCardInfo("Arbiter of the Ideal", 74, Rarity.SPECIAL, mage.cards.a.ArbiterOfTheIdeal.class)); - cards.add(new SetCardInfo("Arcbond", 129, Rarity.RARE, mage.cards.a.Arcbond.class)); - cards.add(new SetCardInfo("Archdemon of Greed", "52b", Rarity.SPECIAL, mage.cards.a.ArchdemonOfGreed.class)); - cards.add(new SetCardInfo("Archfiend of Depravity", 130, Rarity.RARE, mage.cards.a.ArchfiendOfDepravity.class)); - cards.add(new SetCardInfo("Archon of the Triumvirate", 55, Rarity.SPECIAL, mage.cards.a.ArchonOfTheTriumvirate.class)); - cards.add(new SetCardInfo("Atarka's Command", 161, Rarity.RARE, mage.cards.a.AtarkasCommand.class)); - cards.add(new SetCardInfo("Atarka, World Render", 131, Rarity.RARE, mage.cards.a.AtarkaWorldRender.class)); - cards.add(new SetCardInfo("Avalanche Tusker", 91, Rarity.SPECIAL, mage.cards.a.AvalancheTusker.class)); - cards.add(new SetCardInfo("Avatar of Discord", 29, Rarity.SPECIAL, mage.cards.a.AvatarOfDiscord.class)); - cards.add(new SetCardInfo("Avatar of Hope", 11, Rarity.SPECIAL, mage.cards.a.AvatarOfHope.class)); - cards.add(new SetCardInfo("Avatar of the Resolute", 162, Rarity.RARE, mage.cards.a.AvatarOfTheResolute.class)); - cards.add(new SetCardInfo("Barrage Tyrant", 243, Rarity.RARE, mage.cards.b.BarrageTyrant.class)); - cards.add(new SetCardInfo("Beastcaller Savant", 244, Rarity.RARE, mage.cards.b.BeastcallerSavant.class)); - cards.add(new SetCardInfo("Beast of Burden", 5, Rarity.SPECIAL, mage.cards.b.BeastOfBurden.class)); - cards.add(new SetCardInfo("Blessed Reincarnation", 163, Rarity.RARE, mage.cards.b.BlessedReincarnation.class)); - cards.add(new SetCardInfo("Blight Herder", 245, Rarity.RARE, mage.cards.b.BlightHerder.class)); - cards.add(new SetCardInfo("Blood-Chin Fanatic", 164, Rarity.RARE, mage.cards.b.BloodChinFanatic.class)); - cards.add(new SetCardInfo("Bloodlord of Vaasgoth", 50, Rarity.SPECIAL, mage.cards.b.BloodlordOfVaasgoth.class)); - cards.add(new SetCardInfo("Bloodsoaked Champion", 92, Rarity.SPECIAL, mage.cards.b.BloodsoakedChampion.class)); - cards.add(new SetCardInfo("Boltwing Marauder", 165, Rarity.RARE, mage.cards.b.BoltwingMarauder.class)); - cards.add(new SetCardInfo("Bring to Light", 246, Rarity.RARE, mage.cards.b.BringToLight.class)); - cards.add(new SetCardInfo("Brood Butcher", 247, Rarity.RARE, mage.cards.b.BroodButcher.class)); - cards.add(new SetCardInfo("Brutal Expulsion", 248, Rarity.RARE, mage.cards.b.BrutalExpulsion.class)); - cards.add(new SetCardInfo("Brutal Hordechief", 132, Rarity.MYTHIC, mage.cards.b.BrutalHordechief.class)); - cards.add(new SetCardInfo("Butcher of the Horde", 93, Rarity.SPECIAL, mage.cards.b.ButcherOfTheHorde.class)); - cards.add(new SetCardInfo("Canopy Vista", 249, Rarity.RARE, mage.cards.c.CanopyVista.class)); - cards.add(new SetCardInfo("Carnival Hellsteed", 57, Rarity.SPECIAL, mage.cards.c.CarnivalHellsteed.class)); - cards.add(new SetCardInfo("Celestial Archon", 68, Rarity.SPECIAL, mage.cards.c.CelestialArchon.class)); - cards.add(new SetCardInfo("Chandra, Fire of Kaladesh", 201, Rarity.MYTHIC, mage.cards.c.ChandraFireOfKaladesh.class)); - cards.add(new SetCardInfo("Chandra, Roaring Flame", 201, Rarity.MYTHIC, mage.cards.c.ChandraRoaringFlame.class)); - cards.add(new SetCardInfo("Chandra's Ignition", 200, Rarity.RARE, mage.cards.c.ChandrasIgnition.class)); - cards.add(new SetCardInfo("Cinder Glade", 250, Rarity.RARE, mage.cards.c.CinderGlade.class)); - cards.add(new SetCardInfo("Comet Storm", 43, Rarity.SPECIAL, mage.cards.c.CometStorm.class)); - cards.add(new SetCardInfo("Conduit of Ruin", 251, Rarity.RARE, mage.cards.c.ConduitOfRuin.class)); - cards.add(new SetCardInfo("Consuming Aberration", 60, Rarity.SPECIAL, mage.cards.c.ConsumingAberration.class)); - cards.add(new SetCardInfo("Corpsejack Menace", 58, Rarity.SPECIAL, mage.cards.c.CorpsejackMenace.class)); - cards.add(new SetCardInfo("Crackling Doom", 94, Rarity.SPECIAL, mage.cards.c.CracklingDoom.class)); - cards.add(new SetCardInfo("Crater Elemental", 166, Rarity.RARE, mage.cards.c.CraterElemental.class)); - cards.add(new SetCardInfo("Crater's Claws", 95, Rarity.SPECIAL, mage.cards.c.CratersClaws.class)); - cards.add(new SetCardInfo("Daghatar the Adamant", 133, Rarity.RARE, mage.cards.d.DaghatarTheAdamant.class)); - cards.add(new SetCardInfo("Damnable Pact", 167, Rarity.RARE, mage.cards.d.DamnablePact.class)); - cards.add(new SetCardInfo("Dark Petition", 202, Rarity.RARE, mage.cards.d.DarkPetition.class)); - cards.add(new SetCardInfo("Dawnbringer Charioteers", 78, Rarity.SPECIAL, mage.cards.d.DawnbringerCharioteers.class)); - cards.add(new SetCardInfo("Deathbringer Regent", 168, Rarity.RARE, mage.cards.d.DeathbringerRegent.class)); - cards.add(new SetCardInfo("Defiant Bloodlord", 252, Rarity.RARE, mage.cards.d.DefiantBloodlord.class)); - cards.add(new SetCardInfo("Deflecting Palm", 96, Rarity.SPECIAL, mage.cards.d.DeflectingPalm.class)); - cards.add(new SetCardInfo("Demigod of Revenge", 36, Rarity.SPECIAL, mage.cards.d.DemigodOfRevenge.class)); - cards.add(new SetCardInfo("Den Protector", 169, Rarity.RARE, mage.cards.d.DenProtector.class)); - cards.add(new SetCardInfo("Desolation Twin", 253, Rarity.RARE, mage.cards.d.DesolationTwin.class)); - cards.add(new SetCardInfo("Despoiler of Souls", 203, Rarity.RARE, mage.cards.d.DespoilerOfSouls.class)); - cards.add(new SetCardInfo("Dig Through Time", 97, Rarity.SPECIAL, mage.cards.d.DigThroughTime.class)); - cards.add(new SetCardInfo("Dirtcowl Wurm", 1, Rarity.SPECIAL, mage.cards.d.DirtcowlWurm.class)); - cards.add(new SetCardInfo("Djinn Illuminatus", 28, Rarity.SPECIAL, mage.cards.d.DjinnIlluminatus.class)); - cards.add(new SetCardInfo("Doomwake Giant", 80, Rarity.SPECIAL, mage.cards.d.DoomwakeGiant.class)); - cards.add(new SetCardInfo("Door of Destinies", 35, Rarity.SPECIAL, mage.cards.d.DoorOfDestinies.class)); - cards.add(new SetCardInfo("Dragon Broodmother", 40, Rarity.SPECIAL, mage.cards.d.DragonBroodmother.class)); - cards.add(new SetCardInfo("Dragonlord Atarka", 170, Rarity.MYTHIC, mage.cards.d.DragonlordAtarka.class)); - cards.add(new SetCardInfo("Dragonlord Dromoka", 171, Rarity.MYTHIC, mage.cards.d.DragonlordDromoka.class)); - cards.add(new SetCardInfo("Dragonlord Kolaghan", 172, Rarity.MYTHIC, mage.cards.d.DragonlordKolaghan.class)); - cards.add(new SetCardInfo("Dragonlord Ojutai", 173, Rarity.MYTHIC, mage.cards.d.DragonlordOjutai.class)); - cards.add(new SetCardInfo("Dragonlord Silumgar", 174, Rarity.MYTHIC, mage.cards.d.DragonlordSilumgar.class)); - cards.add(new SetCardInfo("Dragonmaster Outcast", 254, Rarity.MYTHIC, mage.cards.d.DragonmasterOutcast.class)); - cards.add(new SetCardInfo("Dragonscale General", 134, Rarity.RARE, mage.cards.d.DragonscaleGeneral.class)); - cards.add(new SetCardInfo("Dragon-Style Twins", 98, Rarity.SPECIAL, mage.cards.d.DragonStyleTwins.class)); - cards.add(new SetCardInfo("Drana, Liberator of Malakir", 255, Rarity.MYTHIC, mage.cards.d.DranaLiberatorOfMalakir.class)); - cards.add(new SetCardInfo("Dromoka's Command", 175, Rarity.RARE, mage.cards.d.DromokasCommand.class)); - cards.add(new SetCardInfo("Dromoka, the Eternal", 135, Rarity.RARE, mage.cards.d.DromokaTheEternal.class)); - cards.add(new SetCardInfo("Drowner of Hope", 256, Rarity.RARE, mage.cards.d.DrownerOfHope.class)); - cards.add(new SetCardInfo("Duneblast", 99, Rarity.SPECIAL, mage.cards.d.Duneblast.class)); - cards.add(new SetCardInfo("Dust Stalker", 257, Rarity.RARE, mage.cards.d.DustStalker.class)); - cards.add(new SetCardInfo("Dwynen, Gilt-Leaf Daen", 204, Rarity.RARE, mage.cards.d.DwynenGiltLeafDaen.class)); - cards.add(new SetCardInfo("Eater of Hope", 75, Rarity.SPECIAL, mage.cards.e.EaterOfHope.class)); - cards.add(new SetCardInfo("Embermaw Hellion", 205, Rarity.RARE, mage.cards.e.EmbermawHellion.class)); - cards.add(new SetCardInfo("Ember Swallower", 71, Rarity.SPECIAL, mage.cards.e.EmberSwallower.class)); - cards.add(new SetCardInfo("Emeria Shepherd", 258, Rarity.RARE, mage.cards.e.EmeriaShepherd.class)); - cards.add(new SetCardInfo("Emrakul, the Aeons Torn", 44, Rarity.SPECIAL, mage.cards.e.EmrakulTheAeonsTorn.class)); - cards.add(new SetCardInfo("Endless One", 259, Rarity.RARE, mage.cards.e.EndlessOne.class)); - cards.add(new SetCardInfo("Evolutionary Leap", 206, Rarity.RARE, mage.cards.e.EvolutionaryLeap.class)); - cards.add(new SetCardInfo("Exert Influence", 260, Rarity.RARE, mage.cards.e.ExertInfluence.class)); - cards.add(new SetCardInfo("Exquisite Firecraft", 207, Rarity.RARE, mage.cards.e.ExquisiteFirecraft.class)); - cards.add(new SetCardInfo("False Prophet", 7, Rarity.SPECIAL, mage.cards.f.FalseProphet.class)); - cards.add(new SetCardInfo("Fathom Feeder", 261, Rarity.RARE, mage.cards.f.FathomFeeder.class)); - cards.add(new SetCardInfo("Fathom Mage", 61, Rarity.SPECIAL, mage.cards.f.FathomMage.class)); - cards.add(new SetCardInfo("Felidar Sovereign", 262, Rarity.RARE, mage.cards.f.FelidarSovereign.class)); - cards.add(new SetCardInfo("Feral Throwback", 19, Rarity.SPECIAL, mage.cards.f.FeralThrowback.class)); - cards.add(new SetCardInfo("Flamerush Rider", 136, Rarity.RARE, mage.cards.f.FlamerushRider.class)); - cards.add(new SetCardInfo("Flamewake Phoenix", 137, Rarity.RARE, mage.cards.f.FlamewakePhoenix.class)); - cards.add(new SetCardInfo("Flying Crane Technique", 100, Rarity.SPECIAL, mage.cards.f.FlyingCraneTechnique.class)); - cards.add(new SetCardInfo("Foe-Razer Regent", 176, Rarity.RARE, mage.cards.f.FoeRazerRegent.class)); - cards.add(new SetCardInfo("Forgestoker Dragon", 76, Rarity.SPECIAL, mage.cards.f.ForgestokerDragon.class)); - cards.add(new SetCardInfo("Foundry Champion", 62, Rarity.SPECIAL, mage.cards.f.FoundryChampion.class)); - cards.add(new SetCardInfo("From Beyond", 263, Rarity.RARE, mage.cards.f.FromBeyond.class)); - cards.add(new SetCardInfo("Fungal Shambler", 14, Rarity.SPECIAL, mage.cards.f.FungalShambler.class)); - cards.add(new SetCardInfo("Gaea's Revenge", 208, Rarity.RARE, mage.cards.g.GaeasRevenge.class)); - cards.add(new SetCardInfo("Gideon, Battle-Forged", 220, Rarity.MYTHIC, mage.cards.g.GideonBattleForged.class)); - cards.add(new SetCardInfo("Gideon, Ally of Zendikar", 264, Rarity.MYTHIC, mage.cards.g.GideonAllyOfZendikar.class)); - cards.add(new SetCardInfo("Gideon's Phalanx", 209, Rarity.RARE, mage.cards.g.GideonsPhalanx.class)); - cards.add(new SetCardInfo("Gilt-Leaf Winnower", 210, Rarity.RARE, mage.cards.g.GiltLeafWinnower.class)); - cards.add(new SetCardInfo("Gleancrawler", 27, Rarity.SPECIAL, mage.cards.g.Gleancrawler.class)); - cards.add(new SetCardInfo("Glissa, the Traitor", 48, Rarity.SPECIAL, mage.cards.g.GlissaTheTraitor.class)); - cards.add(new SetCardInfo("Glory", 17, Rarity.SPECIAL, mage.cards.g.Glory.class)); - cards.add(new SetCardInfo("Goblin Piledriver", 211, Rarity.RARE, mage.cards.g.GoblinPiledriver.class)); - cards.add(new SetCardInfo("Graveblade Marauder", 212, Rarity.RARE, mage.cards.g.GravebladeMarauder.class)); - cards.add(new SetCardInfo("Greenwarden of Murasa", 265, Rarity.MYTHIC, mage.cards.g.GreenwardenOfMurasa.class)); - cards.add(new SetCardInfo("Grim Haruspex", 101, Rarity.SPECIAL, mage.cards.g.GrimHaruspex.class)); - cards.add(new SetCardInfo("Grove of the Guardian", 59, Rarity.SPECIAL, mage.cards.g.GroveOfTheGuardian.class)); - cards.add(new SetCardInfo("Gruesome Slaughter", 266, Rarity.RARE, mage.cards.g.GruesomeSlaughter.class)); - cards.add(new SetCardInfo("Guardian of Tazeem", 267, Rarity.RARE, mage.cards.g.GuardianOfTazeem.class)); - cards.add(new SetCardInfo("Guul Draz Overseer", 268, Rarity.RARE, mage.cards.g.GuulDrazOverseer.class)); - cards.add(new SetCardInfo("Harbinger of the Hunt", 177, Rarity.RARE, mage.cards.h.HarbingerOfTheHunt.class)); - cards.add(new SetCardInfo("Harbinger of the Tides", 213, Rarity.RARE, mage.cards.h.HarbingerOfTheTides.class)); - cards.add(new SetCardInfo("Hardened Scales", 102, Rarity.SPECIAL, mage.cards.h.HardenedScales.class)); - cards.add(new SetCardInfo("Helm of Kaldra", 23, Rarity.SPECIAL, mage.cards.h.HelmOfKaldra.class)); - cards.add(new SetCardInfo("Herald of Anafenza", 103, Rarity.SPECIAL, mage.cards.h.HeraldOfAnafenza.class)); - cards.add(new SetCardInfo("Heroes' Bane", 82, Rarity.SPECIAL, mage.cards.h.HeroesBane.class)); - cards.add(new SetCardInfo("Hero of Bladehold", 47, Rarity.SPECIAL, mage.cards.h.HeroOfBladehold.class)); - cards.add(new SetCardInfo("Hero of Goma Fada", 269, Rarity.RARE, mage.cards.h.HeroOfGomaFada.class)); - cards.add(new SetCardInfo("Hidden Dragonslayer", 178, Rarity.RARE, mage.cards.h.HiddenDragonslayer.class)); - cards.add(new SetCardInfo("High Sentinels of Arashin", 104, Rarity.SPECIAL, mage.cards.h.HighSentinelsOfArashin.class)); - cards.add(new SetCardInfo("Hixus, Prison Warden", 214, Rarity.RARE, mage.cards.h.HixusPrisonWarden.class)); - cards.add(new SetCardInfo("Honored Hierarch", 215, Rarity.RARE, mage.cards.h.HonoredHierarch.class)); - cards.add(new SetCardInfo("Howlpack Alpha", 51, Rarity.SPECIAL, mage.cards.h.HowlpackAlpha.class)); - cards.add(new SetCardInfo("Hypersonic Dragon", 56, Rarity.SPECIAL, mage.cards.h.HypersonicDragon.class)); - cards.add(new SetCardInfo("Icefall Regent", 179, Rarity.RARE, mage.cards.i.IcefallRegent.class)); - cards.add(new SetCardInfo("Icy Blast", 105, Rarity.SPECIAL, mage.cards.i.IcyBlast.class)); - cards.add(new SetCardInfo("Indulgent Tormentor", 85, Rarity.SPECIAL, mage.cards.i.IndulgentTormentor.class)); - cards.add(new SetCardInfo("Ink-Eyes, Servant of Oni", 25, Rarity.SPECIAL, mage.cards.i.InkEyesServantOfOni.class)); - cards.add(new SetCardInfo("Ire Shaman", 180, Rarity.RARE, mage.cards.i.IreShaman.class)); - cards.add(new SetCardInfo("Ivorytusk Fortress", 106, Rarity.SPECIAL, mage.cards.i.IvorytuskFortress.class)); - cards.add(new SetCardInfo("Jace, Telepath Unbound", 216, Rarity.MYTHIC, mage.cards.j.JaceTelepathUnbound.class)); - cards.add(new SetCardInfo("Jace, Vryn's Prodigy", 216, Rarity.MYTHIC, mage.cards.j.JaceVrynsProdigy.class)); - cards.add(new SetCardInfo("Jeering Instigator", 107, Rarity.SPECIAL, mage.cards.j.JeeringInstigator.class)); - cards.add(new SetCardInfo("Jeskai Ascendancy", 108, Rarity.SPECIAL, mage.cards.j.JeskaiAscendancy.class)); - cards.add(new SetCardInfo("Jeskai Infiltrator", 138, Rarity.RARE, mage.cards.j.JeskaiInfiltrator.class)); - cards.add(new SetCardInfo("Kheru Lich Lord", 109, Rarity.SPECIAL, mage.cards.k.KheruLichLord.class)); - cards.add(new SetCardInfo("Kiora, Master of the Depths", 270, Rarity.MYTHIC, mage.cards.k.KioraMasterOfTheDepths.class)); - cards.add(new SetCardInfo("Kolaghan's Command", 181, Rarity.RARE, mage.cards.k.KolaghansCommand.class)); - cards.add(new SetCardInfo("Kolaghan, the Storm's Fury", 139, Rarity.RARE, mage.cards.k.KolaghanTheStormsFury.class)); - cards.add(new SetCardInfo("Korlash, Heir to Blackblade", 33, Rarity.SPECIAL, mage.cards.k.KorlashHeirToBlackblade.class)); - cards.add(new SetCardInfo("Kothophed, Soul Hoarder", 218, Rarity.RARE, mage.cards.k.KothophedSoulHoarder.class)); - cards.add(new SetCardInfo("Kytheon, Hero of Akros", 220, Rarity.MYTHIC, mage.cards.k.KytheonHeroOfAkros.class)); - cards.add(new SetCardInfo("Kytheon's Irregulars", 219, Rarity.RARE, mage.cards.k.KytheonsIrregulars.class)); - cards.add(new SetCardInfo("Languish", 221, Rarity.RARE, mage.cards.l.Languish.class)); - cards.add(new SetCardInfo("Lantern Scout", 271, Rarity.RARE, mage.cards.l.LanternScout.class)); - cards.add(new SetCardInfo("Laquatus's Champion", 16, Rarity.SPECIAL, mage.cards.l.LaquatussChampion.class)); - cards.add(new SetCardInfo("Liliana, Defiant Necromancer", 222, Rarity.MYTHIC, mage.cards.l.LilianaDefiantNecromancer.class)); - cards.add(new SetCardInfo("Liliana, Heretical Healer", 222, Rarity.MYTHIC, mage.cards.l.LilianaHereticalHealer.class)); - cards.add(new SetCardInfo("Living Lore", 182, Rarity.RARE, mage.cards.l.LivingLore.class)); - cards.add(new SetCardInfo("Lotus Bloom", 31, Rarity.SPECIAL, mage.cards.l.LotusBloom.class)); - cards.add(new SetCardInfo("Lu Bu, Master-at-Arms", 8, Rarity.SPECIAL, mage.cards.l.LuBuMasterAtArms.class)); - cards.add(new SetCardInfo("Lumbering Falls", 272, Rarity.RARE, mage.cards.l.LumberingFalls.class)); - cards.add(new SetCardInfo("Malfegor", 39, Rarity.SPECIAL, mage.cards.m.Malfegor.class)); - cards.add(new SetCardInfo("Managorger Hydra", 223, Rarity.RARE, mage.cards.m.ManagorgerHydra.class)); - cards.add(new SetCardInfo("March from the Tomb", 273, Rarity.RARE, mage.cards.m.MarchFromTheTomb.class)); - cards.add(new SetCardInfo("Mardu Ascendancy", 110, Rarity.SPECIAL, mage.cards.m.MarduAscendancy.class)); - cards.add(new SetCardInfo("Mardu Strike Leader", 140, Rarity.RARE, mage.cards.m.MarduStrikeLeader.class)); - cards.add(new SetCardInfo("Master of Pearls", 111, Rarity.SPECIAL, mage.cards.m.MasterOfPearls.class)); - cards.add(new SetCardInfo("Mastery of the Unseen", 141, Rarity.RARE, mage.cards.m.MasteryOfTheUnseen.class)); - cards.add(new SetCardInfo("Mayor of Avabruck", 51, Rarity.SPECIAL, mage.cards.m.MayorOfAvabruck.class)); - cards.add(new SetCardInfo("Maze's End", 65, Rarity.SPECIAL, mage.cards.m.MazesEnd.class)); - cards.add(new SetCardInfo("Megantic Sliver", 67, Rarity.SPECIAL, mage.cards.m.MeganticSliver.class)); - cards.add(new SetCardInfo("Mercurial Pretender", 84, Rarity.SPECIAL, mage.cards.m.MercurialPretender.class)); - cards.add(new SetCardInfo("Mizzium Meddler", 224, Rarity.RARE, mage.cards.m.MizziumMeddler.class)); - cards.add(new SetCardInfo("Moonsilver Spear", 53, Rarity.SPECIAL, mage.cards.m.MoonsilverSpear.class)); - cards.add(new SetCardInfo("Munda, Ambush Leader", 274, Rarity.RARE, mage.cards.m.MundaAmbushLeader.class)); - cards.add(new SetCardInfo("Myth Realized", 183, Rarity.RARE, mage.cards.m.MythRealized.class)); - cards.add(new SetCardInfo("Narset, Enlightened Master", 112, Rarity.SPECIAL, mage.cards.n.NarsetEnlightenedMaster.class)); - cards.add(new SetCardInfo("Necromaster Dragon", 184, Rarity.RARE, mage.cards.n.NecromasterDragon.class)); - cards.add(new SetCardInfo("Necropolis Fiend", 113, Rarity.SPECIAL, mage.cards.n.NecropolisFiend.class)); - cards.add(new SetCardInfo("Nessian Wilds Ravager", 77, Rarity.SPECIAL, mage.cards.n.NessianWildsRavager.class)); - cards.add(new SetCardInfo("Nissa's Renewal", 275, Rarity.RARE, mage.cards.n.NissasRenewal.class)); - cards.add(new SetCardInfo("Nissa's Revelation", 225, Rarity.RARE, mage.cards.n.NissasRevelation.class)); - cards.add(new SetCardInfo("Nissa, Sage Animist", 226, Rarity.MYTHIC, mage.cards.n.NissaSageAnimist.class)); - cards.add(new SetCardInfo("Nissa, Vastwood Seer", 226, Rarity.MYTHIC, mage.cards.n.NissaVastwoodSeer.class)); - cards.add(new SetCardInfo("Noyan Dar, Roil Shaper", 276, Rarity.RARE, mage.cards.n.NoyanDarRoilShaper.class)); - cards.add(new SetCardInfo("Oblivion Sower", 278, Rarity.MYTHIC, mage.cards.o.OblivionSower.class)); - cards.add(new SetCardInfo("Ob Nixilis Reignited", 277, Rarity.MYTHIC, mage.cards.o.ObNixilisReignited.class)); - cards.add(new SetCardInfo("Ojutai's Command", 185, Rarity.RARE, mage.cards.o.OjutaisCommand.class)); - cards.add(new SetCardInfo("Ojutai, Soul of Winter", 142, Rarity.RARE, mage.cards.o.OjutaiSoulOfWinter.class)); - cards.add(new SetCardInfo("Omnath, Locus of Rage", 279, Rarity.MYTHIC, mage.cards.o.OmnathLocusOfRage.class)); - cards.add(new SetCardInfo("Oran-Rief Hydra", 280, Rarity.RARE, mage.cards.o.OranRiefHydra.class)); - cards.add(new SetCardInfo("Oros, the Avenger", 32, Rarity.SPECIAL, mage.cards.o.OrosTheAvenger.class)); - cards.add(new SetCardInfo("Outland Colossus", 227, Rarity.RARE, mage.cards.o.OutlandColossus.class)); - cards.add(new SetCardInfo("Overbeing of Myth", 37, Rarity.SPECIAL, mage.cards.o.OverbeingOfMyth.class)); - cards.add(new SetCardInfo("Overtaker", 9, Rarity.SPECIAL, mage.cards.o.Overtaker.class)); - cards.add(new SetCardInfo("Painful Truths", 281, Rarity.RARE, mage.cards.p.PainfulTruths.class)); - cards.add(new SetCardInfo("Part the Waterveil", 282, Rarity.MYTHIC, mage.cards.p.PartTheWaterveil.class)); - cards.add(new SetCardInfo("Phytotitan", 87, Rarity.SPECIAL, mage.cards.p.Phytotitan.class)); - cards.add(new SetCardInfo("Pia and Kiran Nalaar", 228, Rarity.RARE, mage.cards.p.PiaAndKiranNalaar.class)); - cards.add(new SetCardInfo("Pitiless Horde", 186, Rarity.RARE, mage.cards.p.PitilessHorde.class)); - cards.add(new SetCardInfo("Plains", 66, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Planar Outburst", 283, Rarity.RARE, mage.cards.p.PlanarOutburst.class)); - cards.add(new SetCardInfo("Prairie Stream", 284, Rarity.RARE, mage.cards.p.PrairieStream.class)); - cards.add(new SetCardInfo("Priest of the Blood Rite", 229, Rarity.RARE, mage.cards.p.PriestOfTheBloodRite.class)); - cards.add(new SetCardInfo("Prism Array", 285, Rarity.RARE, mage.cards.p.PrismArray.class)); - cards.add(new SetCardInfo("Pristine Skywise", 187, Rarity.RARE, mage.cards.p.PristineSkywise.class)); - cards.add(new SetCardInfo("Profaner of the Dead", 188, Rarity.RARE, mage.cards.p.ProfanerOfTheDead.class)); - cards.add(new SetCardInfo("Quarantine Field", 286, Rarity.MYTHIC, mage.cards.q.QuarantineField.class)); - cards.add(new SetCardInfo("Questing Phelddagrif", 13, Rarity.SPECIAL, mage.cards.q.QuestingPhelddagrif.class)); - cards.add(new SetCardInfo("Radiant Flames", 287, Rarity.RARE, mage.cards.r.RadiantFlames.class)); - cards.add(new SetCardInfo("Raging Kavu", 12, Rarity.SPECIAL, mage.cards.r.RagingKavu.class)); - cards.add(new SetCardInfo("Rakshasa Vizier", 114, Rarity.SPECIAL, mage.cards.r.RakshasaVizier.class)); - cards.add(new SetCardInfo("Rally the Ancestors", 143, Rarity.RARE, mage.cards.r.RallyTheAncestors.class)); - cards.add(new SetCardInfo("Rampaging Baloths", 42, Rarity.SPECIAL, mage.cards.r.RampagingBaloths.class)); - cards.add(new SetCardInfo("Rathi Assassin", 10, Rarity.SPECIAL, mage.cards.r.RathiAssassin.class)); - cards.add(new SetCardInfo("Rattleclaw Mystic", 115, Rarity.SPECIAL, mage.cards.r.RattleclawMystic.class)); - cards.add(new SetCardInfo("Ravenous Demon", "52a", Rarity.SPECIAL, mage.cards.r.RavenousDemon.class)); - cards.add(new SetCardInfo("Relic Seeker", 230, Rarity.RARE, mage.cards.r.RelicSeeker.class)); - cards.add(new SetCardInfo("Resolute Archangel", 83, Rarity.SPECIAL, mage.cards.r.ResoluteArchangel.class)); - cards.add(new SetCardInfo("Revenant", 2, Rarity.SPECIAL, mage.cards.r.Revenant.class)); - cards.add(new SetCardInfo("Rubblehulk", 63, Rarity.SPECIAL, mage.cards.r.Rubblehulk.class)); - cards.add(new SetCardInfo("Ruinous Path", 288, Rarity.RARE, mage.cards.r.RuinousPath.class)); - cards.add(new SetCardInfo("Ryusei, the Falling Star", 24, Rarity.SPECIAL, mage.cards.r.RyuseiTheFallingStar.class)); - cards.add(new SetCardInfo("Sage of the Inward Eye", 116, Rarity.SPECIAL, mage.cards.s.SageOfTheInwardEye.class)); - cards.add(new SetCardInfo("Sanctum of Ugin", 289, Rarity.RARE, mage.cards.s.SanctumOfUgin.class)); - cards.add(new SetCardInfo("Sandsteppe Mastodon", 145, Rarity.RARE, mage.cards.s.SandsteppeMastodon.class)); - cards.add(new SetCardInfo("Scab-Clan Berserker", 231, Rarity.RARE, mage.cards.s.ScabClanBerserker.class)); - cards.add(new SetCardInfo("Scatter to the Winds", 290, Rarity.RARE, mage.cards.s.ScatterToTheWinds.class)); - cards.add(new SetCardInfo("Scourge of Fleets", 79, Rarity.SPECIAL, mage.cards.s.ScourgeOfFleets.class)); - cards.add(new SetCardInfo("Serpentine Spike", 291, Rarity.RARE, mage.cards.s.SerpentineSpike.class)); - cards.add(new SetCardInfo("Shamanic Revelation", 147, Rarity.RARE, mage.cards.s.ShamanicRevelation.class)); - cards.add(new SetCardInfo("Shaman of the Great Hunt", 146, Rarity.MYTHIC, mage.cards.s.ShamanOfTheGreatHunt.class)); - cards.add(new SetCardInfo("Shambling Vent", 292, Rarity.RARE, mage.cards.s.ShamblingVent.class)); - cards.add(new SetCardInfo("Sheoldred, Whispering One", 49, Rarity.SPECIAL, mage.cards.s.SheoldredWhisperingOne.class)); - cards.add(new SetCardInfo("Shield of Kaldra", 22, Rarity.SPECIAL, mage.cards.s.ShieldOfKaldra.class)); - cards.add(new SetCardInfo("Shipbreaker Kraken", 69, Rarity.SPECIAL, mage.cards.s.ShipbreakerKraken.class)); - cards.add(new SetCardInfo("Shrine of the Forsaken Gods", 293, Rarity.RARE, mage.cards.s.ShrineOfTheForsakenGods.class)); - cards.add(new SetCardInfo("Shu Yun, the Silent Tempest", 148, Rarity.RARE, mage.cards.s.ShuYunTheSilentTempest.class)); - cards.add(new SetCardInfo("Sidisi, Brood Tyrant", 117, Rarity.SPECIAL, mage.cards.s.SidisiBroodTyrant.class)); - cards.add(new SetCardInfo("Sidisi, Undead Vizier", 189, Rarity.RARE, mage.cards.s.SidisiUndeadVizier.class)); - cards.add(new SetCardInfo("Siege Dragon", 86, Rarity.SPECIAL, mage.cards.s.SiegeDragon.class)); - cards.add(new SetCardInfo("Siege Rhino", 118, Rarity.SPECIAL, mage.cards.s.SiegeRhino.class)); - cards.add(new SetCardInfo("Silent Sentinel", 73, Rarity.SPECIAL, mage.cards.s.SilentSentinel.class)); - cards.add(new SetCardInfo("Silent Specter", 18, Rarity.SPECIAL, mage.cards.s.SilentSpecter.class)); - cards.add(new SetCardInfo("Silumgar Assassin", 190, Rarity.RARE, mage.cards.s.SilumgarAssassin.class)); - cards.add(new SetCardInfo("Silumgar's Command", 191, Rarity.RARE, mage.cards.s.SilumgarsCommand.class)); - cards.add(new SetCardInfo("Silumgar, the Drifting Death", 149, Rarity.RARE, mage.cards.s.SilumgarTheDriftingDeath.class)); - cards.add(new SetCardInfo("Sire of Stagnation", 294, Rarity.MYTHIC, mage.cards.s.SireOfStagnation.class)); - cards.add(new SetCardInfo("Smoldering Marsh", 295, Rarity.RARE, mage.cards.s.SmolderingMarsh.class)); - cards.add(new SetCardInfo("Smothering Abomination", 296, Rarity.RARE, mage.cards.s.SmotheringAbomination.class)); - cards.add(new SetCardInfo("Soulblade Djinn", 232, Rarity.RARE, mage.cards.s.SoulbladeDjinn.class)); - cards.add(new SetCardInfo("Soul Collector", 20, Rarity.SPECIAL, mage.cards.s.SoulCollector.class)); - cards.add(new SetCardInfo("Soulfire Grand Master", 150, Rarity.MYTHIC, mage.cards.s.SoulfireGrandMaster.class)); - cards.add(new SetCardInfo("Soulflayer", 151, Rarity.RARE, mage.cards.s.Soulflayer.class)); - cards.add(new SetCardInfo("Spawn of Thraxes", 81, Rarity.SPECIAL, mage.cards.s.SpawnOfThraxes.class)); - cards.add(new SetCardInfo("Stratus Dancer", 192, Rarity.RARE, mage.cards.s.StratusDancer.class)); - cards.add(new SetCardInfo("Sultai Ascendancy", 119, Rarity.SPECIAL, mage.cards.s.SultaiAscendancy.class)); - cards.add(new SetCardInfo("Sunken Hollow", 297, Rarity.RARE, mage.cards.s.SunkenHollow.class)); - cards.add(new SetCardInfo("Sunscorch Regent", 193, Rarity.RARE, mage.cards.s.SunscorchRegent.class)); - cards.add(new SetCardInfo("Sun Titan", 45, Rarity.SPECIAL, mage.cards.s.SunTitan.class)); - cards.add(new SetCardInfo("Supplant Form", 152, Rarity.RARE, mage.cards.s.SupplantForm.class)); - cards.add(new SetCardInfo("Surrak Dragonclaw", 120, Rarity.SPECIAL, mage.cards.s.SurrakDragonclaw.class)); - cards.add(new SetCardInfo("Surrak, the Hunt Caller", 194, Rarity.RARE, mage.cards.s.SurrakTheHuntCaller.class)); - cards.add(new SetCardInfo("Sword of Kaldra", 21, Rarity.SPECIAL, mage.cards.s.SwordOfKaldra.class)); - cards.add(new SetCardInfo("Talent of the Telepath", 233, Rarity.RARE, mage.cards.t.TalentOfTheTelepath.class)); - cards.add(new SetCardInfo("Tasigur, the Golden Fang", 153, Rarity.RARE, mage.cards.t.TasigurTheGoldenFang.class)); - cards.add(new SetCardInfo("Temur Ascendancy", 121, Rarity.SPECIAL, mage.cards.t.TemurAscendancy.class)); - cards.add(new SetCardInfo("Thopter Spy Network", 234, Rarity.RARE, mage.cards.t.ThopterSpyNetwork.class)); - cards.add(new SetCardInfo("Thousand Winds", 122, Rarity.SPECIAL, mage.cards.t.ThousandWinds.class)); - cards.add(new SetCardInfo("Thunderbreak Regent", 195, Rarity.RARE, mage.cards.t.ThunderbreakRegent.class)); - cards.add(new SetCardInfo("Torrent Elemental", 154, Rarity.MYTHIC, mage.cards.t.TorrentElemental.class)); - cards.add(new SetCardInfo("Tragic Arrogance", 235, Rarity.RARE, mage.cards.t.TragicArrogance.class)); - cards.add(new SetCardInfo("Trail of Mystery", 123, Rarity.SPECIAL, mage.cards.t.TrailOfMystery.class)); - cards.add(new SetCardInfo("Trap Essence", 124, Rarity.SPECIAL, mage.cards.t.TrapEssence.class)); - cards.add(new SetCardInfo("Treasury Thrull", 64, Rarity.SPECIAL, mage.cards.t.TreasuryThrull.class)); - cards.add(new SetCardInfo("Ugin's Insight", 298, Rarity.RARE, mage.cards.u.UginsInsight.class)); - cards.add(new SetCardInfo("Ulamog, the Ceaseless Hunger", 299, Rarity.MYTHIC, mage.cards.u.UlamogTheCeaselessHunger.class)); - cards.add(new SetCardInfo("Undergrowth Champion", 300, Rarity.MYTHIC, mage.cards.u.UndergrowthChampion.class)); - cards.add(new SetCardInfo("Utter End", 125, Rarity.SPECIAL, mage.cards.u.UtterEnd.class)); - cards.add(new SetCardInfo("Vampire Nocturnus", 41, Rarity.SPECIAL, mage.cards.v.VampireNocturnus.class)); - cards.add(new SetCardInfo("Veteran Warleader", 301, Rarity.RARE, mage.cards.v.VeteranWarleader.class)); - cards.add(new SetCardInfo("Villainous Wealth", 126, Rarity.SPECIAL, mage.cards.v.VillainousWealth.class)); - cards.add(new SetCardInfo("Void Winnower", 302, Rarity.MYTHIC, mage.cards.v.VoidWinnower.class)); - cards.add(new SetCardInfo("Volcanic Vision", 196, Rarity.RARE, mage.cards.v.VolcanicVision.class)); - cards.add(new SetCardInfo("Vryn Wingmare", 236, Rarity.RARE, mage.cards.v.VrynWingmare.class)); - cards.add(new SetCardInfo("Warden of the First Tree", 155, Rarity.MYTHIC, mage.cards.w.WardenOfTheFirstTree.class)); - cards.add(new SetCardInfo("Wasteland Strangler", 303, Rarity.RARE, mage.cards.w.WastelandStrangler.class)); - cards.add(new SetCardInfo("Wildcall", 156, Rarity.RARE, mage.cards.w.Wildcall.class)); - cards.add(new SetCardInfo("Willbreaker", 237, Rarity.RARE, mage.cards.w.Willbreaker.class)); - cards.add(new SetCardInfo("Woodland Wanderer", 304, Rarity.RARE, mage.cards.w.WoodlandWanderer.class)); - cards.add(new SetCardInfo("Wren's Run Packmaster", 34, Rarity.SPECIAL, mage.cards.w.WrensRunPackmaster.class)); - cards.add(new SetCardInfo("Wurmcoil Engine", 46, Rarity.SPECIAL, mage.cards.w.WurmcoilEngine.class)); - cards.add(new SetCardInfo("Xathrid Gorgon", 54, Rarity.SPECIAL, mage.cards.x.XathridGorgon.class)); - cards.add(new SetCardInfo("Yasova Dragonclaw", 157, Rarity.RARE, mage.cards.y.YasovaDragonclaw.class)); - cards.add(new SetCardInfo("Zada, Hedron Grinder", 305, Rarity.RARE, mage.cards.z.ZadaHedronGrinder.class)); - cards.add(new SetCardInfo("Zurgo Bellstriker", 197, Rarity.RARE, mage.cards.z.ZurgoBellstriker.class)); - cards.add(new SetCardInfo("Zurgo Helmsmasher", 127, Rarity.SPECIAL, mage.cards.z.ZurgoHelmsmasher.class)); + // Commented cards are non-English printings + cards.add(new SetCardInfo("Ajani Vengeant", 38, Rarity.MYTHIC, mage.cards.a.AjaniVengeant.class)); + cards.add(new SetCardInfo("Allosaurus Rider", 30, Rarity.RARE, mage.cards.a.AllosaurusRider.class)); + cards.add(new SetCardInfo("Avatar of Discord", 29, Rarity.RARE, mage.cards.a.AvatarOfDiscord.class)); + cards.add(new SetCardInfo("Avatar of Hope", 11, Rarity.RARE, mage.cards.a.AvatarOfHope.class)); + cards.add(new SetCardInfo("Beast of Burden", 5, Rarity.RARE, mage.cards.b.BeastOfBurden.class)); + cards.add(new SetCardInfo("Demigod of Revenge", 36, Rarity.RARE, mage.cards.d.DemigodOfRevenge.class)); + cards.add(new SetCardInfo("Dirtcowl Wurm", 1, Rarity.RARE, mage.cards.d.DirtcowlWurm.class)); + cards.add(new SetCardInfo("Djinn Illuminatus", 28, Rarity.RARE, mage.cards.d.DjinnIlluminatus.class)); + cards.add(new SetCardInfo("Door of Destinies", 35, Rarity.RARE, mage.cards.d.DoorOfDestinies.class)); + cards.add(new SetCardInfo("Dragon Broodmother", 40, Rarity.MYTHIC, mage.cards.d.DragonBroodmother.class)); + cards.add(new SetCardInfo("False Prophet", 7, Rarity.RARE, mage.cards.f.FalseProphet.class)); + cards.add(new SetCardInfo("Feral Throwback", 19, Rarity.RARE, mage.cards.f.FeralThrowback.class)); + //cards.add(new SetCardInfo("Fungal Shambler", 14, Rarity.RARE, mage.cards.f.FungalShambler.class)); + cards.add(new SetCardInfo("Gleancrawler", 27, Rarity.RARE, mage.cards.g.Gleancrawler.class)); + //cards.add(new SetCardInfo("Glory", 17, Rarity.RARE, mage.cards.g.Glory.class)); + cards.add(new SetCardInfo("Helm of Kaldra", 23, Rarity.RARE, mage.cards.h.HelmOfKaldra.class)); + cards.add(new SetCardInfo("Ink-Eyes, Servant of Oni", 25, Rarity.RARE, mage.cards.i.InkEyesServantOfOni.class)); + cards.add(new SetCardInfo("Kiyomaro, First to Stand", 26, Rarity.RARE, mage.cards.k.KiyomaroFirstToStand.class)); + cards.add(new SetCardInfo("Korlash, Heir to Blackblade", 33, Rarity.RARE, mage.cards.k.KorlashHeirToBlackblade.class)); + //cards.add(new SetCardInfo("Laquatus's Champion", 16, Rarity.RARE, mage.cards.l.LaquatussChampion.class)); + cards.add(new SetCardInfo("Lightning Dragon", 4, Rarity.RARE, mage.cards.l.LightningDragon.class)); + cards.add(new SetCardInfo("Lotus Bloom", 31, Rarity.RARE, mage.cards.l.LotusBloom.class)); + cards.add(new SetCardInfo("Lu Bu, Master-at-Arms", 6, Rarity.RARE, mage.cards.l.LuBuMasterAtArms.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Lu Bu, Master-at-Arms", 8, Rarity.RARE, mage.cards.l.LuBuMasterAtArms.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Malfegor", 39, Rarity.RARE, mage.cards.m.Malfegor.class)); + cards.add(new SetCardInfo("Monstrous Hound", 3, Rarity.RARE, mage.cards.m.MonstrousHound.class)); + cards.add(new SetCardInfo("Oros, the Avenger", 32, Rarity.RARE, mage.cards.o.OrosTheAvenger.class)); + cards.add(new SetCardInfo("Overbeing of Myth", 37, Rarity.RARE, mage.cards.o.OverbeingOfMyth.class)); + cards.add(new SetCardInfo("Overtaker", 9, Rarity.RARE, mage.cards.o.Overtaker.class)); + //cards.add(new SetCardInfo("Questing Phelddagrif", 13, Rarity.RARE, mage.cards.q.QuestingPhelddagrif.class)); + //cards.add(new SetCardInfo("Raging Kavu", 12, Rarity.RARE, mage.cards.r.RagingKavu.class)); + cards.add(new SetCardInfo("Rathi Assassin", 10, Rarity.RARE, mage.cards.r.RathiAssassin.class)); + cards.add(new SetCardInfo("Revenant", 2, Rarity.RARE, mage.cards.r.Revenant.class)); + cards.add(new SetCardInfo("Ryusei, the Falling Star", 24, Rarity.RARE, mage.cards.r.RyuseiTheFallingStar.class)); + cards.add(new SetCardInfo("Shield of Kaldra", 22, Rarity.RARE, mage.cards.s.ShieldOfKaldra.class)); + cards.add(new SetCardInfo("Silent Specter", 18, Rarity.RARE, mage.cards.s.SilentSpecter.class)); + cards.add(new SetCardInfo("Soul Collector", 20, Rarity.RARE, mage.cards.s.SoulCollector.class)); + //cards.add(new SetCardInfo("Stone-Tongue Basilisk", 15, Rarity.RARE, mage.cards.s.StoneTongueBasilisk.class)); + cards.add(new SetCardInfo("Sword of Kaldra", 21, Rarity.RARE, mage.cards.s.SwordOfKaldra.class)); + cards.add(new SetCardInfo("Wren's Run Packmaster", 34, Rarity.RARE, mage.cards.w.WrensRunPackmaster.class)); } } \ No newline at end of file From 95c69efa0eac5c53c29cb97b985b8c17ed4c3217 Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Wed, 18 Mar 2020 20:01:34 +0100 Subject: [PATCH 145/182] Innistrad set: Removed offset by 1000 from back faces of double-faced cards. --- Mage.Sets/src/mage/sets/Innistrad.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Mage.Sets/src/mage/sets/Innistrad.java b/Mage.Sets/src/mage/sets/Innistrad.java index b32374439f6..d70af168b8c 100644 --- a/Mage.Sets/src/mage/sets/Innistrad.java +++ b/Mage.Sets/src/mage/sets/Innistrad.java @@ -116,7 +116,7 @@ public final class Innistrad extends ExpansionSet { cards.add(new SetCardInfo("Gallows Warden", 16, Rarity.UNCOMMON, mage.cards.g.GallowsWarden.class)); cards.add(new SetCardInfo("Galvanic Juggernaut", 222, Rarity.UNCOMMON, mage.cards.g.GalvanicJuggernaut.class)); cards.add(new SetCardInfo("Garruk Relentless", 181, Rarity.MYTHIC, mage.cards.g.GarrukRelentless.class)); - cards.add(new SetCardInfo("Garruk, the Veil-Cursed", 1181, Rarity.MYTHIC, mage.cards.g.GarrukTheVeilCursed.class)); + cards.add(new SetCardInfo("Garruk, the Veil-Cursed", 181, Rarity.MYTHIC, mage.cards.g.GarrukTheVeilCursed.class)); cards.add(new SetCardInfo("Gatstaf Howler", 182, Rarity.UNCOMMON, mage.cards.g.GatstafHowler.class)); cards.add(new SetCardInfo("Gatstaf Shepherd", 182, Rarity.UNCOMMON, mage.cards.g.GatstafShepherd.class)); cards.add(new SetCardInfo("Gavony Township", 239, Rarity.RARE, mage.cards.g.GavonyTownship.class)); @@ -151,7 +151,7 @@ public final class Innistrad extends ExpansionSet { cards.add(new SetCardInfo("Hysterical Blindness", 59, Rarity.COMMON, mage.cards.h.HystericalBlindness.class)); cards.add(new SetCardInfo("Infernal Plunge", 148, Rarity.COMMON, mage.cards.i.InfernalPlunge.class)); cards.add(new SetCardInfo("Inquisitor's Flail", 227, Rarity.UNCOMMON, mage.cards.i.InquisitorsFlail.class)); - cards.add(new SetCardInfo("Insectile Aberration", 1051, Rarity.COMMON, mage.cards.i.InsectileAberration.class)); + cards.add(new SetCardInfo("Insectile Aberration", 51, Rarity.COMMON, mage.cards.i.InsectileAberration.class)); cards.add(new SetCardInfo("Instigator Gang", 149, Rarity.RARE, mage.cards.i.InstigatorGang.class)); cards.add(new SetCardInfo("Intangible Virtue", 19, Rarity.UNCOMMON, mage.cards.i.IntangibleVirtue.class)); cards.add(new SetCardInfo("Into the Maw of Hell", 150, Rarity.UNCOMMON, mage.cards.i.IntoTheMawOfHell.class)); @@ -170,9 +170,9 @@ public final class Innistrad extends ExpansionSet { cards.add(new SetCardInfo("Laboratory Maniac", 61, Rarity.RARE, mage.cards.l.LaboratoryManiac.class)); cards.add(new SetCardInfo("Lantern Spirit", 62, Rarity.UNCOMMON, mage.cards.l.LanternSpirit.class)); cards.add(new SetCardInfo("Liliana of the Veil", 105, Rarity.MYTHIC, mage.cards.l.LilianaOfTheVeil.class)); - cards.add(new SetCardInfo("Lord of Lineage", 1090, Rarity.RARE, mage.cards.l.LordOfLineage.class)); + cards.add(new SetCardInfo("Lord of Lineage", 90, Rarity.RARE, mage.cards.l.LordOfLineage.class)); cards.add(new SetCardInfo("Lost in the Mist", 63, Rarity.COMMON, mage.cards.l.LostInTheMist.class)); - cards.add(new SetCardInfo("Ludevic's Abomination", 1064, Rarity.RARE, mage.cards.l.LudevicsAbomination.class)); + cards.add(new SetCardInfo("Ludevic's Abomination", 64, Rarity.RARE, mage.cards.l.LudevicsAbomination.class)); cards.add(new SetCardInfo("Ludevic's Test Subject", 64, Rarity.RARE, mage.cards.l.LudevicsTestSubject.class)); cards.add(new SetCardInfo("Lumberknot", 191, Rarity.UNCOMMON, mage.cards.l.Lumberknot.class)); cards.add(new SetCardInfo("Make a Wish", 192, Rarity.UNCOMMON, mage.cards.m.MakeAWish.class)); @@ -276,7 +276,7 @@ public final class Innistrad extends ExpansionSet { cards.add(new SetCardInfo("Swamp", 258, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Terror of Kruin Pass", 152, Rarity.RARE, mage.cards.t.TerrorOfKruinPass.class)); cards.add(new SetCardInfo("Think Twice", 83, Rarity.COMMON, mage.cards.t.ThinkTwice.class)); - cards.add(new SetCardInfo("Thraben Militia", 1038, Rarity.COMMON, mage.cards.t.ThrabenMilitia.class)); + cards.add(new SetCardInfo("Thraben Militia", 38, Rarity.COMMON, mage.cards.t.ThrabenMilitia.class)); cards.add(new SetCardInfo("Thraben Purebloods", 37, Rarity.COMMON, mage.cards.t.ThrabenPurebloods.class)); cards.add(new SetCardInfo("Thraben Sentry", 38, Rarity.COMMON, mage.cards.t.ThrabenSentry.class)); cards.add(new SetCardInfo("Tormented Pariah", 165, Rarity.COMMON, mage.cards.t.TormentedPariah.class)); From 64e862276f50d457af75ff0d61fedf21ccb5fd0e Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Wed, 18 Mar 2020 20:18:33 +0100 Subject: [PATCH 146/182] Removed collector number modulo 1000 hack from ScryfallImageSource.getFaceImageUrl() that was used for double-faced cards in Innistrad. --- .../mage/plugins/card/dl/sources/ScryfallImageSource.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSource.java b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSource.java index b1731b610cd..c6e08e1eb39 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSource.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSource.java @@ -127,7 +127,7 @@ public enum ScryfallImageSource implements CardImageSource { private String getFaceImageUrl(Proxy proxy, CardDownloadData card, boolean isToken, String localizationCode) throws Exception { // connect to Scryfall API final URL cardUrl = new URL("https://api.scryfall.com/cards/" + formatSetName(card.getSet(), isToken) + "/" - + (card.getCollectorIdAsInt() % 1000) + "/" + localizationCode); + + card.getCollectorId() + "/" + localizationCode); URLConnection request = proxy == null ? cardUrl.openConnection() : cardUrl.openConnection(proxy); request.connect(); @@ -136,7 +136,7 @@ public enum ScryfallImageSource implements CardImageSource { JsonElement root = jp.parse(new InputStreamReader((InputStream) request.getContent())); JsonObject jsonCard = root.getAsJsonObject(); if (!jsonCard.has("card_faces")) { - throw new Exception("Couldn't find card_faces in Card JSON."); + throw new Exception("Couldn't find card_faces in Card JSON.: " + cardUrl.toString()); } JsonArray jsonCardFaces = jsonCard.getAsJsonArray("card_faces"); JsonObject jsonCardFace = jsonCardFaces.get(card.isSecondSide() ? 1 : 0).getAsJsonObject(); @@ -170,7 +170,8 @@ public enum ScryfallImageSource implements CardImageSource { try { url = getFaceImageUrl(proxy, card, card.isToken(), localizedCode); } catch (Exception e) { - logger.warn("Failed to prepare image URL (back face) for " + card.getName() + " (" + card.getSet() + ") #" + card.getCollectorId()); + logger.warn("Failed to prepare image URL (back face) for " + card.getName() + " (" + card.getSet() + ") #" + + card.getCollectorId() + ", Error Message: " + e.getMessage()); downloadServiceInfo.incErrorCount(); continue; } From e1f81810a62667e36cd4ddc87ab8c440327ba14c Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Wed, 18 Mar 2020 20:49:47 +0100 Subject: [PATCH 147/182] From the Vault Transform (V17): Fixed Collector numbers to be in line with Scryfall. --- .../src/mage/sets/FromTheVaultTransform.java | 56 +++++++++---------- 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/Mage.Sets/src/mage/sets/FromTheVaultTransform.java b/Mage.Sets/src/mage/sets/FromTheVaultTransform.java index 5fb2ccb42bf..47f7159343c 100644 --- a/Mage.Sets/src/mage/sets/FromTheVaultTransform.java +++ b/Mage.Sets/src/mage/sets/FromTheVaultTransform.java @@ -20,34 +20,34 @@ public final class FromTheVaultTransform extends ExpansionSet { super("From the Vault: Transform", "V17", ExpansionSet.buildDate(2017, 11, 24), SetType.SUPPLEMENTAL); this.hasBasicLands = false; - cards.add(new SetCardInfo("Archangel Avacyn", "1a", Rarity.MYTHIC, mage.cards.a.ArchangelAvacyn.class)); - cards.add(new SetCardInfo("Avacyn, the Purifier", "1b", Rarity.MYTHIC, mage.cards.a.AvacynThePurifier.class)); - cards.add(new SetCardInfo("Arguel's Blood Fast", "2a", Rarity.MYTHIC, mage.cards.a.ArguelsBloodFast.class)); - cards.add(new SetCardInfo("Temple of Aclazotz", "2b", Rarity.MYTHIC, mage.cards.t.TempleOfAclazotz.class)); - cards.add(new SetCardInfo("Arlinn Kord", "3a", Rarity.MYTHIC, mage.cards.a.ArlinnKord.class)); - cards.add(new SetCardInfo("Arlinn, Embraced by the Moon", "3b", Rarity.MYTHIC, mage.cards.a.ArlinnEmbracedByTheMoon.class)); - cards.add(new SetCardInfo("Bloodline Keeper", "4a", Rarity.MYTHIC, mage.cards.b.BloodlineKeeper.class)); - cards.add(new SetCardInfo("Lord of Lineage", "4b", Rarity.MYTHIC, mage.cards.l.LordOfLineage.class)); + cards.add(new SetCardInfo("Archangel Avacyn", 1, Rarity.MYTHIC, mage.cards.a.ArchangelAvacyn.class)); + cards.add(new SetCardInfo("Avacyn, the Purifier", 1, Rarity.MYTHIC, mage.cards.a.AvacynThePurifier.class)); + cards.add(new SetCardInfo("Arguel's Blood Fast", 2, Rarity.MYTHIC, mage.cards.a.ArguelsBloodFast.class)); + cards.add(new SetCardInfo("Temple of Aclazotz", 2, Rarity.MYTHIC, mage.cards.t.TempleOfAclazotz.class)); + cards.add(new SetCardInfo("Arlinn Kord", 3, Rarity.MYTHIC, mage.cards.a.ArlinnKord.class)); + cards.add(new SetCardInfo("Arlinn, Embraced by the Moon", 3, Rarity.MYTHIC, mage.cards.a.ArlinnEmbracedByTheMoon.class)); + cards.add(new SetCardInfo("Bloodline Keeper", 4, Rarity.MYTHIC, mage.cards.b.BloodlineKeeper.class)); + cards.add(new SetCardInfo("Lord of Lineage", 4, Rarity.MYTHIC, mage.cards.l.LordOfLineage.class)); cards.add(new SetCardInfo("Bruna, the Fading Light", "5a", Rarity.MYTHIC, mage.cards.b.BrunaTheFadingLight.class)); - cards.add(new SetCardInfo("Brisela, Voice of Nightmares", "5b", Rarity.MYTHIC, mage.cards.b.BriselaVoiceOfNightmares.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Chandra, Fire of Kaladesh", "6a", Rarity.MYTHIC, mage.cards.c.ChandraFireOfKaladesh.class)); - cards.add(new SetCardInfo("Chandra, Roaring Flame", "6b", Rarity.MYTHIC, mage.cards.c.ChandraRoaringFlame.class)); - cards.add(new SetCardInfo("Delver of Secrets", "7a", Rarity.MYTHIC, mage.cards.d.DelverOfSecrets.class)); - cards.add(new SetCardInfo("Insectile Aberration", "7b", Rarity.MYTHIC, mage.cards.i.InsectileAberration.class)); - cards.add(new SetCardInfo("Elbrus, the Binding Blade", "8a", Rarity.MYTHIC, mage.cards.e.ElbrusTheBindingBlade.class)); - cards.add(new SetCardInfo("Withengar Unbound", "8b", Rarity.MYTHIC, mage.cards.w.WithengarUnbound.class)); - cards.add(new SetCardInfo("Garruk Relentless", "9a", Rarity.MYTHIC, mage.cards.g.GarrukRelentless.class)); - cards.add(new SetCardInfo("Garruk, the Veil-Cursed", "9b", Rarity.MYTHIC, mage.cards.g.GarrukTheVeilCursed.class)); - cards.add(new SetCardInfo("Gisela, the Broken Blade", "10a", Rarity.MYTHIC, mage.cards.g.GiselaTheBrokenBlade.class)); - cards.add(new SetCardInfo("Huntmaster of the Fells", "11a", Rarity.MYTHIC, mage.cards.h.HuntmasterOfTheFells.class)); - cards.add(new SetCardInfo("Ravager of the Fells", "11b", Rarity.MYTHIC, mage.cards.r.RavagerOfTheFells.class)); - cards.add(new SetCardInfo("Jace, Vryn's Prodigy", "12a", Rarity.MYTHIC, mage.cards.j.JaceVrynsProdigy.class)); - cards.add(new SetCardInfo("Jace, Telepath Unbound", "12b", Rarity.MYTHIC, mage.cards.j.JaceTelepathUnbound.class)); - cards.add(new SetCardInfo("Kytheon, Hero of Akros", "13a", Rarity.MYTHIC, mage.cards.k.KytheonHeroOfAkros.class)); - cards.add(new SetCardInfo("Gideon, Battle-Forged", "13b", Rarity.MYTHIC, mage.cards.g.GideonBattleForged.class)); - cards.add(new SetCardInfo("Liliana, Heretical Healer", "14a", Rarity.MYTHIC, mage.cards.l.LilianaHereticalHealer.class)); - cards.add(new SetCardInfo("Liliana, Defiant Necromancer", "14b", Rarity.MYTHIC, mage.cards.l.LilianaDefiantNecromancer.class)); - cards.add(new SetCardInfo("Nissa, Vastwood Seer", "15a", Rarity.MYTHIC, mage.cards.n.NissaVastwoodSeer.class)); - cards.add(new SetCardInfo("Nissa, Sage Animist", "15b", Rarity.MYTHIC, mage.cards.n.NissaSageAnimist.class)); + cards.add(new SetCardInfo("Brisela, Voice of Nightmares", "5b", Rarity.MYTHIC, mage.cards.b.BriselaVoiceOfNightmares.class)); + cards.add(new SetCardInfo("Chandra, Fire of Kaladesh", 6, Rarity.MYTHIC, mage.cards.c.ChandraFireOfKaladesh.class)); + cards.add(new SetCardInfo("Chandra, Roaring Flame", 6, Rarity.MYTHIC, mage.cards.c.ChandraRoaringFlame.class)); + cards.add(new SetCardInfo("Delver of Secrets", 7, Rarity.MYTHIC, mage.cards.d.DelverOfSecrets.class)); + cards.add(new SetCardInfo("Insectile Aberration", 7, Rarity.MYTHIC, mage.cards.i.InsectileAberration.class)); + cards.add(new SetCardInfo("Elbrus, the Binding Blade", 8, Rarity.MYTHIC, mage.cards.e.ElbrusTheBindingBlade.class)); + cards.add(new SetCardInfo("Withengar Unbound", 8, Rarity.MYTHIC, mage.cards.w.WithengarUnbound.class)); + cards.add(new SetCardInfo("Garruk Relentless", 9, Rarity.MYTHIC, mage.cards.g.GarrukRelentless.class)); + cards.add(new SetCardInfo("Garruk, the Veil-Cursed", 9, Rarity.MYTHIC, mage.cards.g.GarrukTheVeilCursed.class)); + cards.add(new SetCardInfo("Gisela, the Broken Blade", 10, Rarity.MYTHIC, mage.cards.g.GiselaTheBrokenBlade.class)); + cards.add(new SetCardInfo("Huntmaster of the Fells", 11, Rarity.MYTHIC, mage.cards.h.HuntmasterOfTheFells.class)); + cards.add(new SetCardInfo("Ravager of the Fells", 11, Rarity.MYTHIC, mage.cards.r.RavagerOfTheFells.class)); + cards.add(new SetCardInfo("Jace, Vryn's Prodigy", 12, Rarity.MYTHIC, mage.cards.j.JaceVrynsProdigy.class)); + cards.add(new SetCardInfo("Jace, Telepath Unbound", 12, Rarity.MYTHIC, mage.cards.j.JaceTelepathUnbound.class)); + cards.add(new SetCardInfo("Kytheon, Hero of Akros", 13, Rarity.MYTHIC, mage.cards.k.KytheonHeroOfAkros.class)); + cards.add(new SetCardInfo("Gideon, Battle-Forged", 13, Rarity.MYTHIC, mage.cards.g.GideonBattleForged.class)); + cards.add(new SetCardInfo("Liliana, Heretical Healer", 14, Rarity.MYTHIC, mage.cards.l.LilianaHereticalHealer.class)); + cards.add(new SetCardInfo("Liliana, Defiant Necromancer", 14, Rarity.MYTHIC, mage.cards.l.LilianaDefiantNecromancer.class)); + cards.add(new SetCardInfo("Nissa, Vastwood Seer", 15, Rarity.MYTHIC, mage.cards.n.NissaVastwoodSeer.class)); + cards.add(new SetCardInfo("Nissa, Sage Animist", 15, Rarity.MYTHIC, mage.cards.n.NissaSageAnimist.class)); } } From 921340c012c2e970e17335b08df249898886481d Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Wed, 18 Mar 2020 21:01:56 +0100 Subject: [PATCH 148/182] Shadows over Innistrad (SOI): Fixed Collector numbers to be in line with Scryfall. --- Mage.Sets/src/mage/sets/ShadowsOverInnistrad.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Mage.Sets/src/mage/sets/ShadowsOverInnistrad.java b/Mage.Sets/src/mage/sets/ShadowsOverInnistrad.java index e988c73cec8..3d67e316806 100644 --- a/Mage.Sets/src/mage/sets/ShadowsOverInnistrad.java +++ b/Mage.Sets/src/mage/sets/ShadowsOverInnistrad.java @@ -110,7 +110,7 @@ public final class ShadowsOverInnistrad extends ExpansionSet { cards.add(new SetCardInfo("Dual Shot", 153, Rarity.COMMON, mage.cards.d.DualShot.class)); cards.add(new SetCardInfo("Duskwatch Recruiter", 203, Rarity.UNCOMMON, mage.cards.d.DuskwatchRecruiter.class)); cards.add(new SetCardInfo("Eerie Interlude", 16, Rarity.RARE, mage.cards.e.EerieInterlude.class)); - cards.add(new SetCardInfo("Elusive Tormentor", "108a", Rarity.RARE, mage.cards.e.ElusiveTormentor.class)); + cards.add(new SetCardInfo("Elusive Tormentor", 108, Rarity.RARE, mage.cards.e.ElusiveTormentor.class)); cards.add(new SetCardInfo("Ember-Eye Wolf", 154, Rarity.COMMON, mage.cards.e.EmberEyeWolf.class)); cards.add(new SetCardInfo("Emissary of the Sleepless", 17, Rarity.COMMON, mage.cards.e.EmissaryOfTheSleepless.class)); cards.add(new SetCardInfo("Engulf the Shore", 58, Rarity.RARE, mage.cards.e.EngulfTheShore.class)); @@ -181,7 +181,7 @@ public final class ShadowsOverInnistrad extends ExpansionSet { cards.add(new SetCardInfo("Infectious Curse", 97, Rarity.UNCOMMON, mage.cards.i.InfectiousCurse.class)); cards.add(new SetCardInfo("Inner Struggle", 167, Rarity.UNCOMMON, mage.cards.i.InnerStruggle.class)); cards.add(new SetCardInfo("Inquisitor's Ox", 24, Rarity.COMMON, mage.cards.i.InquisitorsOx.class)); - cards.add(new SetCardInfo("Insidious Mist", "108b", Rarity.RARE, mage.cards.i.InsidiousMist.class)); + cards.add(new SetCardInfo("Insidious Mist", 108, Rarity.RARE, mage.cards.i.InsidiousMist.class)); cards.add(new SetCardInfo("Insolent Neonate", 168, Rarity.COMMON, mage.cards.i.InsolentNeonate.class)); cards.add(new SetCardInfo("Inspiring Captain", 25, Rarity.COMMON, mage.cards.i.InspiringCaptain.class)); cards.add(new SetCardInfo("Intrepid Provisioner", 213, Rarity.COMMON, mage.cards.i.IntrepidProvisioner.class)); From 5abb5f9e2c33cc0b990e50c241f9895d0eab1297 Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Wed, 18 Mar 2020 21:07:00 +0100 Subject: [PATCH 149/182] HASCON Promo 2017 (H17): Fixed Collector numbers to be in line with Scryfall. --- Mage.Sets/src/mage/sets/HASCONPromo2017.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Mage.Sets/src/mage/sets/HASCONPromo2017.java b/Mage.Sets/src/mage/sets/HASCONPromo2017.java index be06cda1e15..8620d6024bd 100644 --- a/Mage.Sets/src/mage/sets/HASCONPromo2017.java +++ b/Mage.Sets/src/mage/sets/HASCONPromo2017.java @@ -20,8 +20,8 @@ public final class HASCONPromo2017 extends ExpansionSet { super("HASCON Promo 2017", "H17", ExpansionSet.buildDate(2017, 9, 8), SetType.JOKESET); this.hasBasicLands = false; - cards.add(new ExpansionSet.SetCardInfo("Grimlock, Dinobot Leader", "1a", Rarity.MYTHIC, mage.cards.g.GrimlockDinobotLeader.class)); - cards.add(new ExpansionSet.SetCardInfo("Grimlock, Ferocious King", "1b", Rarity.MYTHIC, mage.cards.g.GrimlockFerociousKing.class)); + cards.add(new ExpansionSet.SetCardInfo("Grimlock, Dinobot Leader", 1, Rarity.MYTHIC, mage.cards.g.GrimlockDinobotLeader.class)); + cards.add(new ExpansionSet.SetCardInfo("Grimlock, Ferocious King", 1, Rarity.MYTHIC, mage.cards.g.GrimlockFerociousKing.class)); cards.add(new ExpansionSet.SetCardInfo("Sword of Dungeons & Dragons", 3, Rarity.MYTHIC, mage.cards.s.SwordOfDungeonsAndDragons.class)); } } From 0da6d4af3ca3e5e8db9146ba76a43aaccf576dd0 Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Wed, 18 Mar 2020 21:09:38 +0100 Subject: [PATCH 150/182] Rivals of Ixalan (RIX): Fixed Collector numbers to be in line with Scryfall. --- Mage.Sets/src/mage/sets/RivalsOfIxalan.java | 28 ++++++++++----------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/Mage.Sets/src/mage/sets/RivalsOfIxalan.java b/Mage.Sets/src/mage/sets/RivalsOfIxalan.java index e0995645d6e..d1955c54eed 100644 --- a/Mage.Sets/src/mage/sets/RivalsOfIxalan.java +++ b/Mage.Sets/src/mage/sets/RivalsOfIxalan.java @@ -39,10 +39,10 @@ public final class RivalsOfIxalan extends ExpansionSet { cards.add(new SetCardInfo("Aquatic Incursion", 32, Rarity.UNCOMMON, mage.cards.a.AquaticIncursion.class)); cards.add(new SetCardInfo("Arch of Orazca", 185, Rarity.RARE, mage.cards.a.ArchOfOrazca.class)); cards.add(new SetCardInfo("Arterial Flow", 62, Rarity.UNCOMMON, mage.cards.a.ArterialFlow.class)); - cards.add(new SetCardInfo("Atzal, Cave of Eternity", "160b", Rarity.RARE, mage.cards.a.AtzalCaveOfEternity.class)); + cards.add(new SetCardInfo("Atzal, Cave of Eternity", 160, Rarity.RARE, mage.cards.a.AtzalCaveOfEternity.class)); cards.add(new SetCardInfo("Atzocan Seer", 153, Rarity.UNCOMMON, mage.cards.a.AtzocanSeer.class)); cards.add(new SetCardInfo("Awakened Amalgam", 175, Rarity.RARE, mage.cards.a.AwakenedAmalgam.class)); - cards.add(new SetCardInfo("Azor's Gateway", "176a", Rarity.MYTHIC, mage.cards.a.AzorsGateway.class)); + cards.add(new SetCardInfo("Azor's Gateway", 176, Rarity.MYTHIC, mage.cards.a.AzorsGateway.class)); cards.add(new SetCardInfo("Azor, the Lawbringer", 154, Rarity.MYTHIC, mage.cards.a.AzorTheLawbringer.class)); cards.add(new SetCardInfo("Baffling End", 1, Rarity.UNCOMMON, mage.cards.b.BafflingEnd.class)); cards.add(new SetCardInfo("Bishop of Binding", 2, Rarity.RARE, mage.cards.b.BishopOfBinding.class)); @@ -103,11 +103,11 @@ public final class RivalsOfIxalan extends ExpansionSet { cards.add(new SetCardInfo("Gleaming Barrier", 178, Rarity.COMMON, mage.cards.g.GleamingBarrier.class)); cards.add(new SetCardInfo("Goblin Trailblazer", 105, Rarity.COMMON, mage.cards.g.GoblinTrailblazer.class)); cards.add(new SetCardInfo("Golden Demise", 73, Rarity.UNCOMMON, mage.cards.g.GoldenDemise.class)); - cards.add(new SetCardInfo("Golden Guardian", "179a", Rarity.RARE, mage.cards.g.GoldenGuardian.class)); - cards.add(new SetCardInfo("Gold-Forge Garrison", "179b", Rarity.RARE, mage.cards.g.GoldForgeGarrison.class)); + cards.add(new SetCardInfo("Golden Guardian", 179, Rarity.RARE, mage.cards.g.GoldenGuardian.class)); + cards.add(new SetCardInfo("Gold-Forge Garrison", 179, Rarity.RARE, mage.cards.g.GoldForgeGarrison.class)); cards.add(new SetCardInfo("Grasping Scoundrel", 74, Rarity.COMMON, mage.cards.g.GraspingScoundrel.class)); cards.add(new SetCardInfo("Gruesome Fate", 75, Rarity.COMMON, mage.cards.g.GruesomeFate.class)); - cards.add(new SetCardInfo("Hadana's Climb", "158a", Rarity.RARE, mage.cards.h.HadanasClimb.class)); + cards.add(new SetCardInfo("Hadana's Climb", 158, Rarity.RARE, mage.cards.h.HadanasClimb.class)); cards.add(new SetCardInfo("Hardy Veteran", 132, Rarity.COMMON, mage.cards.h.HardyVeteran.class)); cards.add(new SetCardInfo("Highland Lake", 189, Rarity.UNCOMMON, mage.cards.h.HighlandLake.class)); cards.add(new SetCardInfo("Hornswoggle", 39, Rarity.UNCOMMON, mage.cards.h.Hornswoggle.class)); @@ -120,7 +120,7 @@ public final class RivalsOfIxalan extends ExpansionSet { cards.add(new SetCardInfo("Jade Bearer", 134, Rarity.COMMON, mage.cards.j.JadeBearer.class)); cards.add(new SetCardInfo("Jadecraft Artisan", 135, Rarity.COMMON, mage.cards.j.JadecraftArtisan.class)); cards.add(new SetCardInfo("Jadelight Ranger", 136, Rarity.RARE, mage.cards.j.JadelightRanger.class)); - cards.add(new SetCardInfo("Journey to Eternity", "160a", Rarity.RARE, mage.cards.j.JourneyToEternity.class)); + cards.add(new SetCardInfo("Journey to Eternity", 160, Rarity.RARE, mage.cards.j.JourneyToEternity.class)); cards.add(new SetCardInfo("Jungle Creeper", 161, Rarity.UNCOMMON, mage.cards.j.JungleCreeper.class)); cards.add(new SetCardInfo("Jungleborn Pioneer", 137, Rarity.COMMON, mage.cards.j.JunglebornPioneer.class)); cards.add(new SetCardInfo("Kitesail Corsair", 41, Rarity.COMMON, mage.cards.k.KitesailCorsair.class)); @@ -135,7 +135,7 @@ public final class RivalsOfIxalan extends ExpansionSet { cards.add(new SetCardInfo("Mastermind's Acquisition", 77, Rarity.RARE, mage.cards.m.MastermindsAcquisition.class)); cards.add(new SetCardInfo("Mausoleum Harpy", 78, Rarity.UNCOMMON, mage.cards.m.MausoleumHarpy.class)); cards.add(new SetCardInfo("Merfolk Mistbinder", 164, Rarity.UNCOMMON, mage.cards.m.MerfolkMistbinder.class)); - cards.add(new SetCardInfo("Metzali, Tower of Triumph", "165b", Rarity.RARE, mage.cards.m.MetzaliTowerOfTriumph.class)); + cards.add(new SetCardInfo("Metzali, Tower of Triumph", 165, Rarity.RARE, mage.cards.m.MetzaliTowerOfTriumph.class)); cards.add(new SetCardInfo("Mist-Cloaked Herald", 43, Rarity.COMMON, mage.cards.m.MistCloakedHerald.class)); cards.add(new SetCardInfo("Moment of Craving", 79, Rarity.COMMON, mage.cards.m.MomentOfCraving.class)); cards.add(new SetCardInfo("Moment of Triumph", 15, Rarity.COMMON, mage.cards.m.MomentOfTriumph.class)); @@ -152,14 +152,14 @@ public final class RivalsOfIxalan extends ExpansionSet { cards.add(new SetCardInfo("Overgrown Armasaur", 141, Rarity.COMMON, mage.cards.o.OvergrownArmasaur.class)); cards.add(new SetCardInfo("Paladin of Atonement", 16, Rarity.RARE, mage.cards.p.PaladinOfAtonement.class)); cards.add(new SetCardInfo("Path of Discovery", 142, Rarity.RARE, mage.cards.p.PathOfDiscovery.class)); - cards.add(new SetCardInfo("Path of Mettle", "165a", Rarity.RARE, mage.cards.p.PathOfMettle.class)); + cards.add(new SetCardInfo("Path of Mettle", 165, Rarity.RARE, mage.cards.p.PathOfMettle.class)); cards.add(new SetCardInfo("Pirate's Pillage", 109, Rarity.UNCOMMON, mage.cards.p.PiratesPillage.class)); cards.add(new SetCardInfo("Pitiless Plunderer", 81, Rarity.UNCOMMON, mage.cards.p.PitilessPlunderer.class)); cards.add(new SetCardInfo("Plains", 192, Rarity.LAND, mage.cards.basiclands.Plains.class)); cards.add(new SetCardInfo("Plummet", 143, Rarity.COMMON, mage.cards.p.Plummet.class)); cards.add(new SetCardInfo("Polyraptor", 144, Rarity.MYTHIC, mage.cards.p.Polyraptor.class)); cards.add(new SetCardInfo("Pride of Conquerors", 17, Rarity.UNCOMMON, mage.cards.p.PrideOfConquerors.class)); - cards.add(new SetCardInfo("Profane Procession", "166a", Rarity.RARE, mage.cards.p.ProfaneProcession.class)); + cards.add(new SetCardInfo("Profane Procession", 166, Rarity.RARE, mage.cards.p.ProfaneProcession.class)); cards.add(new SetCardInfo("Protean Raider", 167, Rarity.RARE, mage.cards.p.ProteanRaider.class)); cards.add(new SetCardInfo("Radiant Destiny", 18, Rarity.RARE, mage.cards.r.RadiantDestiny.class)); cards.add(new SetCardInfo("Raging Regisaur", 168, Rarity.UNCOMMON, mage.cards.r.RagingRegisaur.class)); @@ -176,7 +176,7 @@ public final class RivalsOfIxalan extends ExpansionSet { cards.add(new SetCardInfo("Riverwise Augur", 48, Rarity.UNCOMMON, mage.cards.r.RiverwiseAugur.class)); cards.add(new SetCardInfo("Sadistic Skymarcher", 85, Rarity.UNCOMMON, mage.cards.s.SadisticSkymarcher.class)); cards.add(new SetCardInfo("Sailor of Means", 49, Rarity.COMMON, mage.cards.s.SailorOfMeans.class)); - cards.add(new SetCardInfo("Sanctum of the Sun", "176b", Rarity.MYTHIC, mage.cards.s.SanctumOfTheSun.class)); + cards.add(new SetCardInfo("Sanctum of the Sun", 176, Rarity.MYTHIC, mage.cards.s.SanctumOfTheSun.class)); cards.add(new SetCardInfo("Sanguine Glorifier", 20, Rarity.COMMON, mage.cards.s.SanguineGlorifier.class)); cards.add(new SetCardInfo("Sea Legs", 50, Rarity.COMMON, mage.cards.s.SeaLegs.class)); cards.add(new SetCardInfo("Seafloor Oracle", 51, Rarity.RARE, mage.cards.s.SeafloorOracle.class)); @@ -201,7 +201,7 @@ public final class RivalsOfIxalan extends ExpansionSet { cards.add(new SetCardInfo("Stone Quarry", 190, Rarity.UNCOMMON, mage.cards.s.StoneQuarry.class)); cards.add(new SetCardInfo("Storm Fleet Sprinter", 172, Rarity.UNCOMMON, mage.cards.s.StormFleetSprinter.class)); cards.add(new SetCardInfo("Storm Fleet Swashbuckler", 117, Rarity.UNCOMMON, mage.cards.s.StormFleetSwashbuckler.class)); - cards.add(new SetCardInfo("Storm the Vault", "173a", Rarity.RARE, mage.cards.s.StormTheVault.class)); + cards.add(new SetCardInfo("Storm the Vault", 173, Rarity.RARE, mage.cards.s.StormTheVault.class)); cards.add(new SetCardInfo("Strength of the Pack", 145, Rarity.UNCOMMON, mage.cards.s.StrengthOfThePack.class)); cards.add(new SetCardInfo("Strider Harness", 183, Rarity.COMMON, mage.cards.s.StriderHarness.class)); cards.add(new SetCardInfo("Sun Sentinel", 26, Rarity.COMMON, mage.cards.s.SunSentinel.class)); @@ -221,14 +221,14 @@ public final class RivalsOfIxalan extends ExpansionSet { cards.add(new SetCardInfo("Tilonalli's Crown", 120, Rarity.COMMON, mage.cards.t.TilonallisCrown.class)); cards.add(new SetCardInfo("Tilonalli's Summoner", 121, Rarity.RARE, mage.cards.t.TilonallisSummoner.class)); cards.add(new SetCardInfo("Timestream Navigator", 59, Rarity.MYTHIC, mage.cards.t.TimestreamNavigator.class)); - cards.add(new SetCardInfo("Tomb of the Dusk Rose", "166b", Rarity.RARE, mage.cards.t.TombOfTheDuskRose.class)); + cards.add(new SetCardInfo("Tomb of the Dusk Rose", 166, Rarity.RARE, mage.cards.t.TombOfTheDuskRose.class)); cards.add(new SetCardInfo("Tomb Robber", 87, Rarity.RARE, mage.cards.t.TombRobber.class)); cards.add(new SetCardInfo("Trapjaw Tyrant", 29, Rarity.MYTHIC, mage.cards.t.TrapjawTyrant.class)); cards.add(new SetCardInfo("Traveler's Amulet", 184, Rarity.COMMON, mage.cards.t.TravelersAmulet.class)); cards.add(new SetCardInfo("Twilight Prophet", 88, Rarity.MYTHIC, mage.cards.t.TwilightProphet.class)); cards.add(new SetCardInfo("Vampire Champion", 198, Rarity.COMMON, mage.cards.v.VampireChampion.class)); cards.add(new SetCardInfo("Vampire Revenant", 89, Rarity.COMMON, mage.cards.v.VampireRevenant.class)); - cards.add(new SetCardInfo("Vault of Catlacan", "173b", Rarity.RARE, mage.cards.v.VaultOfCatlacan.class)); + cards.add(new SetCardInfo("Vault of Catlacan", 173, Rarity.RARE, mage.cards.v.VaultOfCatlacan.class)); cards.add(new SetCardInfo("Vona's Hunger", 90, Rarity.RARE, mage.cards.v.VonasHunger.class)); cards.add(new SetCardInfo("Voracious Vampire", 91, Rarity.COMMON, mage.cards.v.VoraciousVampire.class)); cards.add(new SetCardInfo("Vraska, Scheming Gorgon", 197, Rarity.MYTHIC, mage.cards.v.VraskaSchemingGorgon.class)); @@ -237,7 +237,7 @@ public final class RivalsOfIxalan extends ExpansionSet { cards.add(new SetCardInfo("Warkite Marauder", 60, Rarity.RARE, mage.cards.w.WarkiteMarauder.class)); cards.add(new SetCardInfo("Waterknot", 61, Rarity.COMMON, mage.cards.w.Waterknot.class)); cards.add(new SetCardInfo("Wayward Swordtooth", 150, Rarity.RARE, mage.cards.w.WaywardSwordtooth.class)); - cards.add(new SetCardInfo("Winged Temple of Orazca", "158b", Rarity.RARE, mage.cards.w.WingedTempleOfOrazca.class)); + cards.add(new SetCardInfo("Winged Temple of Orazca", 158, Rarity.RARE, mage.cards.w.WingedTempleOfOrazca.class)); cards.add(new SetCardInfo("Woodland Stream", 191, Rarity.UNCOMMON, mage.cards.w.WoodlandStream.class)); cards.add(new SetCardInfo("World Shaper", 151, Rarity.RARE, mage.cards.w.WorldShaper.class)); cards.add(new SetCardInfo("Zacama, Primal Calamity", 174, Rarity.MYTHIC, mage.cards.z.ZacamaPrimalCalamity.class)); From 7219d51572ff0e18b4160425aa3c907f84af55c8 Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Wed, 18 Mar 2020 21:38:16 +0100 Subject: [PATCH 151/182] Removed 6th Edition cards from Starter 2000 set. These are indistinguishable from regular 6ED cards and not listed on Scryfall. --- ...lins Deck Wins TDtB ST Apr 2011.mwDeck.dck | 92 +++++++++---------- Mage.Sets/src/mage/sets/Starter2000.java | 42 +-------- .../serverside/deck/DeckValidatorTest.java | 5 - 3 files changed, 48 insertions(+), 91 deletions(-) diff --git a/Mage.Client/release/sample-decks/Decks to Beat/Goblins Deck Wins TDtB ST Apr 2011.mwDeck.dck b/Mage.Client/release/sample-decks/Decks to Beat/Goblins Deck Wins TDtB ST Apr 2011.mwDeck.dck index 729cfcb3cb4..4920e10c15b 100644 --- a/Mage.Client/release/sample-decks/Decks to Beat/Goblins Deck Wins TDtB ST Apr 2011.mwDeck.dck +++ b/Mage.Client/release/sample-decks/Decks to Beat/Goblins Deck Wins TDtB ST Apr 2011.mwDeck.dck @@ -1,46 +1,46 @@ -1 [POR:214] Mountain -4 [MBS:64] Goblin Wardriver -1 [WWK:145] Tectonic Edge -3 [M10:139] Goblin Chieftain -1 [M12:138] Goblin Chieftain -1 [SHM:296] Mountain -1 [ARC:147] Mountain -1 [RTR:267] Mountain -1 [C13:352] Mountain -4 [ZEN:125] Goblin Bushwhacker -1 [DDE:69] Mountain -2 [ZEN:126] Goblin Guide -3 [P10:8] Burst Lightning -1 [ZEN:226] Teetering Peaks -1 [SOM:81] Arc Trail -1 [S00:102] Mountain -2 [MM2:127] Spikeshot Elder -1 [LEA:283] Mountain -1 [MMQ:345] Mountain -1 [RAV:300] Mountain -2 [PGPX:6] Goblin Guide -4 [M11:135] Ember Hauler -2 [JGP:1] Lightning Bolt -1 [M10:146] Lightning Bolt -1 [M10:243] Mountain -1 [M12:242] Mountain -2 [ROE:166] Staggershock -1 [C14:313] Tectonic Edge -1 [MIR:301] Mountain -1 [DDL:77] Mountain -2 [GRC:48] Staggershock -1 [ZEN:119] Burst Lightning -1 [DD3B:60] Mountain -3 [F11:9] Teetering Peaks -2 [SOM:104] Spikeshot Elder -1 [HOP:163] Mountain -1 [LEB:163] Lightning Bolt -1 [SOM:243] Mountain -SB: 2 [M12:151] Manic Vandal -SB: 2 [M13:141] Mark of Mutiny -SB: 1 [DDN:23] Arc Trail -SB: 1 [SOM:196] Ratchet Bomb -SB: 2 [PC2:39] Arc Trail -SB: 2 [PC2:47] Mark of Mutiny -SB: 3 [M14:215] Ratchet Bomb -SB: 2 [M11:151] Manic Vandal +1 [POR:214] Mountain +4 [MBS:64] Goblin Wardriver +1 [WWK:145] Tectonic Edge +3 [M10:139] Goblin Chieftain +1 [M12:138] Goblin Chieftain +1 [SHM:296] Mountain +1 [ARC:147] Mountain +1 [RTR:267] Mountain +1 [C13:352] Mountain +4 [ZEN:125] Goblin Bushwhacker +1 [DDE:69] Mountain +2 [ZEN:126] Goblin Guide +3 [P10:8] Burst Lightning +1 [ZEN:226] Teetering Peaks +1 [SOM:81] Arc Trail +1 [4ED:343] Mountain +2 [MM2:127] Spikeshot Elder +1 [LEA:283] Mountain +1 [MMQ:345] Mountain +1 [RAV:300] Mountain +2 [PGPX:6] Goblin Guide +4 [M11:135] Ember Hauler +2 [JGP:1] Lightning Bolt +1 [M10:146] Lightning Bolt +1 [M10:243] Mountain +1 [M12:242] Mountain +2 [ROE:166] Staggershock +1 [C14:313] Tectonic Edge +1 [MIR:301] Mountain +1 [DDL:77] Mountain +2 [GRC:48] Staggershock +1 [ZEN:119] Burst Lightning +1 [DD3B:60] Mountain +3 [F11:9] Teetering Peaks +2 [SOM:104] Spikeshot Elder +1 [HOP:163] Mountain +1 [LEB:163] Lightning Bolt +1 [SOM:243] Mountain +SB: 2 [M12:151] Manic Vandal +SB: 2 [M13:141] Mark of Mutiny +SB: 1 [DDN:23] Arc Trail +SB: 1 [SOM:196] Ratchet Bomb +SB: 2 [PC2:39] Arc Trail +SB: 2 [PC2:47] Mark of Mutiny +SB: 3 [M14:215] Ratchet Bomb +SB: 2 [M11:151] Manic Vandal diff --git a/Mage.Sets/src/mage/sets/Starter2000.java b/Mage.Sets/src/mage/sets/Starter2000.java index b412a1fdd88..089428d8b92 100644 --- a/Mage.Sets/src/mage/sets/Starter2000.java +++ b/Mage.Sets/src/mage/sets/Starter2000.java @@ -6,7 +6,6 @@ import mage.constants.Rarity; import mage.constants.SetType; /** - * Somehow, Scryfall only lists 20 cards in this set. * https://scryfall.com/sets/s00 * @author LevelX2 */ @@ -21,66 +20,29 @@ public final class Starter2000 extends ExpansionSet { private Starter2000() { super("Starter 2000", "S00", ExpansionSet.buildDate(2000, 7, 1), SetType.SUPPLEMENTAL); this.blockName = "Beginner"; - this.hasBasicLands = true; + this.hasBasicLands = false; this.hasBoosters = false; cards.add(new SetCardInfo("Angelic Blessing", 1, Rarity.COMMON, mage.cards.a.AngelicBlessing.class)); - cards.add(new SetCardInfo("Armored Pegasus", 2, Rarity.COMMON, mage.cards.a.ArmoredPegasus.class)); - cards.add(new SetCardInfo("Bog Imp", 22, Rarity.COMMON, mage.cards.b.BogImp.class)); cards.add(new SetCardInfo("Breath of Life", 3, Rarity.UNCOMMON, mage.cards.b.BreathOfLife.class)); - cards.add(new SetCardInfo("Coercion", 23, Rarity.COMMON, mage.cards.c.Coercion.class)); - cards.add(new SetCardInfo("Counterspell", 12, Rarity.COMMON, mage.cards.c.Counterspell.class)); - cards.add(new SetCardInfo("Disenchant", 4, Rarity.COMMON, mage.cards.d.Disenchant.class)); - cards.add(new SetCardInfo("Drudge Skeletons", 24, Rarity.COMMON, mage.cards.d.DrudgeSkeletons.class)); cards.add(new SetCardInfo("Durkwood Boars", 38, Rarity.COMMON, mage.cards.d.DurkwoodBoars.class)); cards.add(new SetCardInfo("Eager Cadet", 5, Rarity.COMMON, mage.cards.e.EagerCadet.class)); - cards.add(new SetCardInfo("Flame Spirit", 29, Rarity.COMMON, mage.cards.f.FlameSpirit.class)); - cards.add(new SetCardInfo("Flight", 13, Rarity.COMMON, mage.cards.f.Flight.class)); - cards.add(new SetCardInfo("Forest", 49, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Forest", 50, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Giant Growth", 39, Rarity.COMMON, mage.cards.g.GiantGrowth.class)); cards.add(new SetCardInfo("Giant Octopus", 14, Rarity.COMMON, mage.cards.g.GiantOctopus.class)); - cards.add(new SetCardInfo("Goblin Hero", 30, Rarity.COMMON, mage.cards.g.GoblinHero.class)); cards.add(new SetCardInfo("Hand of Death", 25, Rarity.COMMON, mage.cards.h.HandOfDeath.class)); - cards.add(new SetCardInfo("Hero's Resolve", 6, Rarity.COMMON, mage.cards.h.HerosResolve.class)); - cards.add(new SetCardInfo("Inspiration", 15, Rarity.COMMON, mage.cards.i.Inspiration.class)); - cards.add(new SetCardInfo("Island", 51, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Island", 52, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Knight Errant", 7, Rarity.COMMON, mage.cards.k.KnightErrant.class)); cards.add(new SetCardInfo("Lava Axe", 31, Rarity.COMMON, mage.cards.l.LavaAxe.class)); - cards.add(new SetCardInfo("Llanowar Elves", 40, Rarity.COMMON, mage.cards.l.LlanowarElves.class)); - cards.add(new SetCardInfo("Merfolk of the Pearl Trident", 16, Rarity.COMMON, mage.cards.m.MerfolkOfThePearlTrident.class)); cards.add(new SetCardInfo("Mons's Goblin Raiders", 32, Rarity.COMMON, mage.cards.m.MonssGoblinRaiders.class)); cards.add(new SetCardInfo("Monstrous Growth", 41, Rarity.COMMON, mage.cards.m.MonstrousGrowth.class)); cards.add(new SetCardInfo("Moon Sprite", 42, Rarity.UNCOMMON, mage.cards.m.MoonSprite.class)); - cards.add(new SetCardInfo("Mountain", 53, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Mountain", 54, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Obsianus Golem", 46, Rarity.UNCOMMON, mage.cards.o.ObsianusGolem.class)); cards.add(new SetCardInfo("Ogre Warrior", 33, Rarity.COMMON, mage.cards.o.OgreWarrior.class)); - cards.add(new SetCardInfo("Orcish Oriflamme", 34, Rarity.UNCOMMON, mage.cards.o.OrcishOriflamme.class)); - cards.add(new SetCardInfo("Plains", 55, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Plains", 56, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Prodigal Sorcerer", 17, Rarity.COMMON, mage.cards.p.ProdigalSorcerer.class)); - cards.add(new SetCardInfo("Python", 26, Rarity.COMMON, mage.cards.p.Python.class)); cards.add(new SetCardInfo("Rhox", 43, Rarity.RARE, mage.cards.r.Rhox.class)); - cards.add(new SetCardInfo("Rod of Ruin", 47, Rarity.UNCOMMON, mage.cards.r.RodOfRuin.class)); cards.add(new SetCardInfo("Royal Falcon", 8, Rarity.COMMON, mage.cards.r.RoyalFalcon.class)); - cards.add(new SetCardInfo("Samite Healer", 9, Rarity.COMMON, mage.cards.s.SamiteHealer.class)); - cards.add(new SetCardInfo("Scathe Zombies", 27, Rarity.COMMON, mage.cards.s.ScatheZombies.class)); cards.add(new SetCardInfo("Sea Eagle", 18, Rarity.COMMON, mage.cards.s.SeaEagle.class)); - cards.add(new SetCardInfo("Shock", 35, Rarity.COMMON, mage.cards.s.Shock.class)); - cards.add(new SetCardInfo("Soul Net", 48, Rarity.UNCOMMON, mage.cards.s.SoulNet.class)); - cards.add(new SetCardInfo("Spined Wurm", 44, Rarity.COMMON, mage.cards.s.SpinedWurm.class)); - cards.add(new SetCardInfo("Stone Rain", 36, Rarity.COMMON, mage.cards.s.StoneRain.class)); - cards.add(new SetCardInfo("Swamp", 57, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Swamp", 58, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Terror", 28, Rarity.COMMON, mage.cards.t.Terror.class)); cards.add(new SetCardInfo("Time Ebb", 19, Rarity.COMMON, mage.cards.t.TimeEbb.class)); cards.add(new SetCardInfo("Trained Orgg", 37, Rarity.RARE, mage.cards.t.TrainedOrgg.class)); - cards.add(new SetCardInfo("Venerable Monk", 10, Rarity.COMMON, mage.cards.v.VenerableMonk.class)); cards.add(new SetCardInfo("Vizzerdrix", 20, Rarity.RARE, mage.cards.v.Vizzerdrix.class)); cards.add(new SetCardInfo("Wild Griffin", 11, Rarity.COMMON, mage.cards.w.WildGriffin.class)); cards.add(new SetCardInfo("Willow Elf", 45, Rarity.COMMON, mage.cards.w.WillowElf.class)); - cards.add(new SetCardInfo("Wind Drake", 21, Rarity.COMMON, mage.cards.w.WindDrake.class)); + } } diff --git a/Mage.Tests/src/test/java/org/mage/test/serverside/deck/DeckValidatorTest.java b/Mage.Tests/src/test/java/org/mage/test/serverside/deck/DeckValidatorTest.java index c0cd480fb9f..317176a7183 100644 --- a/Mage.Tests/src/test/java/org/mage/test/serverside/deck/DeckValidatorTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/serverside/deck/DeckValidatorTest.java @@ -214,11 +214,6 @@ public class DeckValidatorTest extends MageTestBase { deckList.add(new CardNameAmount("Mountain", 56)); Assert.assertFalse("Counterspell not allowed in modern", testDeckValid(new Modern(), deckList)); - deckList.clear(); - deckList.add(new CardNameAmount("S00", 12, 4)); - deckList.add(new CardNameAmount("Mountain", 56)); - Assert.assertFalse("Counterspell not allowed in modern", testDeckValid(new Modern(), deckList)); - } @Test From 5a812a448f8580120b4a3876162c72fd1c86f0b6 Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Wed, 18 Mar 2020 21:44:05 +0100 Subject: [PATCH 152/182] Removed obsolete 6th Edition workarounds. Removed from the ScryfallImageSource and ScryfallImageSupportCards classes. --- .../card/dl/sources/ScryfallImageSource.java | 41 --------- .../dl/sources/ScryfallImageSupportCards.java | 84 ------------------- 2 files changed, 125 deletions(-) diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSource.java b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSource.java index c6e08e1eb39..fce6eb2e266 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSource.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSource.java @@ -152,8 +152,6 @@ public enum ScryfallImageSource implements CardImageSource { preparedUrls.clear(); - final List sixthEditionCards = Sets.findSet("6ED").getSetCardInfo(); - for (CardDownloadData card : downloadList) { // need cancel if (downloadServiceInfo.isNeedCancel()) { @@ -179,27 +177,6 @@ public enum ScryfallImageSource implements CardImageSource { preparedUrls.put(card, url); } - // if a S00 card is in 6ED, it's actually a 6ED card - if (card.getSet().equals("S00") && sixthEditionCards.stream().anyMatch(sixthEditionCard -> sixthEditionCard.getName().equals(card.getName()))) { - // we have direct links for the lands because there are multiple search results - if (card.getUsesVariousArt()) { // lands are the only defined multiple art cards in S00 in XMage - continue; - } - - String url = null; - - try { - url = searchCard(proxy, "6ED", card.getName()); - } catch (Exception e) { - logger.warn("Failed to prepare image URL (S00) for " + card.getName() + " (" + card.getSet() + ") #" + card.getCollectorId()); - downloadServiceInfo.incErrorCount(); - continue; - } - - preparedUrls.put(card, url); - } - - // inc error count to stop on too many errors // downloadServiceInfo.incErrorCount(); } @@ -207,24 +184,6 @@ public enum ScryfallImageSource implements CardImageSource { return true; } - private String searchCard(Proxy proxy, String set, String name) throws Exception { - final URL searchUrl = new URL("https://api.scryfall.com/cards/search?q=s:" + CardUtil.urlEncode(set + " " + name)); - URLConnection request = proxy == null ? searchUrl.openConnection() : searchUrl.openConnection(proxy); - request.connect(); - - // parse the response and return the image URI from the correct card face - JsonParser jp = new JsonParser(); - JsonElement root = jp.parse(new InputStreamReader((InputStream) request.getContent())); - JsonObject searchResult = root.getAsJsonObject(); - if (searchResult.get("total_cards").getAsInt() != 1) { - throw new Exception("Card not found in Scryfall."); - } - JsonObject jsonCard = searchResult.getAsJsonArray("data").get(0).getAsJsonObject(); - JsonObject jsonImageUris = jsonCard.getAsJsonObject("image_uris"); - - return jsonImageUris.get("large").getAsString(); - } - @Override public CardImageUrls generateCardUrl(CardDownloadData card) throws Exception { return innerGenerateURL(card, false); diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java index 05a365525cc..b14f93e81cb 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java @@ -513,90 +513,6 @@ public class ScryfallImageSupportCards { // 2014 - https://scryfall.com/sets/pdp14 put("DPAP/Soul of Ravnica", "https://api.scryfall.com/cards/pdp14/1/en?format=image"); put("DPAP/Soul of Zendikar", "https://api.scryfall.com/cards/pdp14/2/en?format=image"); - - // Gateway Promos -- xmage uses one set (GRC), but scryfall store it by years - // 2006 - https://scryfall.com/sets/pgtw - put("GRC/Fiery Temper", "https://api.scryfall.com/cards/pgtw/3/en?format=image"); - put("GRC/Icatian Javelineers", "https://api.scryfall.com/cards/pgtw/2/en?format=image"); - put("GRC/Wood Elves", "https://api.scryfall.com/cards/pgtw/1/en?format=image"); - // 2007 - https://scryfall.com/sets/pg07 - put("GRC/Boomerang", "https://api.scryfall.com/cards/pg07/4/en?format=image"); - put("GRC/Calciderm", "https://api.scryfall.com/cards/pg07/5/en?format=image"); - put("GRC/Dauntless Dourbark", "https://api.scryfall.com/cards/pg07/12/en?format=image"); - put("GRC/Llanowar Elves", "https://api.scryfall.com/cards/pg07/9/en?format=image"); - put("GRC/Mind Stone", "https://api.scryfall.com/cards/pg07/11/en?format=image"); - put("GRC/Mogg Fanatic", "https://api.scryfall.com/cards/pg07/10/en?format=image"); - put("GRC/Reckless Wurm", "https://api.scryfall.com/cards/pg07/6/en?format=image"); - put("GRC/Yixlid Jailer", "https://api.scryfall.com/cards/pg07/7/en?format=image"); - put("GRC/Zoetic Cavern", "https://api.scryfall.com/cards/pg07/8/en?format=image"); - // 2008a - https://scryfall.com/sets/pg08 - put("GRC/Boggart Ram-Gang", "https://api.scryfall.com/cards/pg08/17/en?format=image"); - put("GRC/Cenn's Tactician", "https://api.scryfall.com/cards/pg08/14/en?format=image"); - put("GRC/Duergar Hedge-Mage", "https://api.scryfall.com/cards/pg08/19/en?format=image"); - put("GRC/Gravedigger", "https://api.scryfall.com/cards/pg08/16/en?format=image"); - put("GRC/Lava Axe", "https://api.scryfall.com/cards/pg08/13/en?format=image"); - put("GRC/Oona's Blackguard", "https://api.scryfall.com/cards/pg08/15/en?format=image"); - put("GRC/Selkie Hedge-Mage", "https://api.scryfall.com/cards/pg08/20/en?format=image"); - put("GRC/Wilt-Leaf Cavaliers", "https://api.scryfall.com/cards/pg08/18/en?format=image"); - - // Wizards Play Network Promos -- xmage uses one set (GRC), but scryfall store it by years - // 2008b - https://scryfall.com/sets/pwpn - put("GRC/Sprouting Thrinax", "https://api.scryfall.com/cards/pwpn/21/en?format=image"); - put("GRC/Woolly Thoctar", "https://api.scryfall.com/cards/pwpn/22/en?format=image"); - // 2009 - https://scryfall.com/sets/pwp09 - put("GRC/Hellspark Elemental", "https://api.scryfall.com/cards/pwp09/25/en?format=image"); - put("GRC/Kor Duelist", "https://api.scryfall.com/cards/pwp09/32/en?format=image"); - put("GRC/Marisi's Twinclaws", "https://api.scryfall.com/cards/pwp09/26/en?format=image"); - put("GRC/Mind Control", "https://api.scryfall.com/cards/pwp09/30/en?format=image"); - put("GRC/Path to Exile", "https://api.scryfall.com/cards/pwp09/24/en?format=image"); - put("GRC/Rise from the Grave", "https://api.scryfall.com/cards/pwp09/31/en?format=image"); - put("GRC/Slave of Bolas", "https://api.scryfall.com/cards/pwp09/27/en?format=image"); - put("GRC/Vampire Nighthawk", "https://api.scryfall.com/cards/pwp09/33/en?format=image"); - // 2010 - https://scryfall.com/sets/pwp10 - put("GRC/Kor Firewalker", "https://api.scryfall.com/cards/pwp10/36/en?format=image"); - put("GRC/Leatherback Baloth", "https://api.scryfall.com/cards/pwp10/37/en?format=image"); - put("GRC/Syphon Mind", "https://api.scryfall.com/cards/pwp10/40/en?format=image"); - put("GRC/Pathrazer of Ulamog", "https://api.scryfall.com/cards/pwp10/46/en?format=image"); - put("GRC/Curse of Wizardry", "https://api.scryfall.com/cards/pwp10/47/en?format=image"); - put("GRC/Fling/50", "https://api.scryfall.com/cards/pwp10/50/en?format=image"); // same card but different year - put("GRC/Sylvan Ranger/51", "https://api.scryfall.com/cards/pwp10/51/en?format=image"); // same card but different year - put("GRC/Plague Stinger", "https://api.scryfall.com/cards/pwp10/59/en?format=image"); - put("GRC/Golem's Heart", "https://api.scryfall.com/cards/pwp10/60/en?format=image"); - put("GRC/Skinrender", "https://api.scryfall.com/cards/pwp10/63/en?format=image"); - // 2011 - https://scryfall.com/sets/pwp11 - put("GRC/Auramancer", "https://api.scryfall.com/cards/pwp11/77/en?format=image"); - put("GRC/Bloodcrazed Neonate", "https://api.scryfall.com/cards/pwp11/83/en?format=image"); - put("GRC/Boneyard Wurm", "https://api.scryfall.com/cards/pwp11/84/en?format=image"); - put("GRC/Circle of Flame", "https://api.scryfall.com/cards/pwp11/78/en?format=image"); - put("GRC/Curse of the Bloody Tome", "https://api.scryfall.com/cards/pwp11/80/en?format=image"); - put("GRC/Fling/69", "https://api.scryfall.com/cards/pwp11/69/en?format=image"); // same card but different year - put("GRC/Master's Call", "https://api.scryfall.com/cards/pwp11/64/en?format=image"); - put("GRC/Maul Splicer", "https://api.scryfall.com/cards/pwp11/72/en?format=image"); - put("GRC/Plague Myr", "https://api.scryfall.com/cards/pwp11/65/en?format=image"); - put("GRC/Shrine of Burning Rage", "https://api.scryfall.com/cards/pwp11/73/en?format=image"); - put("GRC/Signal Pest", "https://api.scryfall.com/cards/pwp11/66/en?format=image"); - put("GRC/Sylvan Ranger/70", "https://api.scryfall.com/cards/pwp11/70/en?format=image"); // same card but different year - put("GRC/Tormented Soul", "https://api.scryfall.com/cards/pwp11/76/en?format=image"); - put("GRC/Vault Skirge", "https://api.scryfall.com/cards/pwp11/71/en?format=image"); - // 2012 - https://scryfall.com/sets/pwp12 - put("GRC/Curse of Thirst", "https://api.scryfall.com/cards/pwp12/81/en?format=image"); - put("GRC/Gather the Townsfolk", "https://api.scryfall.com/cards/pwp12/79/en?format=image"); - put("GRC/Nearheath Stalker", "https://api.scryfall.com/cards/pwp12/82/en?format=image"); - - // Spined Wurm print in Starter 2000 is actually from Magazine Inserts - put("S00/Spined Wurm", "https://api.scryfall.com/cards/pmei/11/en?format=image"); - // Most of the other S00 cards are from 6ED - // We'll download lands manually because we have multiple arts and XMage has totally different ID's - put("S00/Forest/49", "https://api.scryfall.com/cards/6ed/347/en?format=image"); - put("S00/Forest/50", "https://api.scryfall.com/cards/6ed/348/en?format=image"); - put("S00/Island/51", "https://api.scryfall.com/cards/6ed/335/en?format=image"); - put("S00/Island/52", "https://api.scryfall.com/cards/6ed/336/en?format=image"); - put("S00/Mountain/53", "https://api.scryfall.com/cards/6ed/343/en?format=image"); - put("S00/Mountain/54", "https://api.scryfall.com/cards/6ed/344/en?format=image"); - put("S00/Plains/55", "https://api.scryfall.com/cards/6ed/331/en?format=image"); - put("S00/Plains/56", "https://api.scryfall.com/cards/6ed/332/en?format=image"); - put("S00/Swamp/57", "https://api.scryfall.com/cards/6ed/339/en?format=image"); - put("S00/Swamp/58", "https://api.scryfall.com/cards/6ed/340/en?format=image"); } }; From 46d0e911031a3afefa7d1628c27118676b42de5e Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Wed, 18 Mar 2020 22:46:07 +0100 Subject: [PATCH 153/182] Further simplified the Scryfall image download code. --- .../card/dl/sources/ScryfallImageSource.java | 31 +++++------- .../dl/sources/ScryfallImageSupportCards.java | 49 ++++++++++++------- Mage.Sets/src/mage/sets/ArabianNights.java | 28 +++++------ .../src/mage/sets/DuelDecksJaceVsChandra.java | 4 +- Mage.Sets/src/mage/sets/Planeshift.java | 12 ++--- Mage.Sets/src/mage/sets/Portal.java | 14 +++--- .../src/mage/sets/RiseOfTheEldraziPromos.java | 11 +++-- 7 files changed, 79 insertions(+), 70 deletions(-) diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSource.java b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSource.java index fce6eb2e266..01ede30250e 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSource.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSource.java @@ -75,27 +75,22 @@ public enum ScryfallImageSource implements CardImageSource { // CARDS TRY - // direct links to images (non localization) + // direct links to images via hardcoded API path. Used for cards with non-ASCII collector numbers. if (baseUrl == null) { baseUrl = ScryfallImageSupportCards.findDirectDownloadLink(card.getSet(), card.getName(), card.getCollectorId()); - alternativeUrl = null; + if (baseUrl != null) { + alternativeUrl = baseUrl + defaultCode + "?format=image"; + baseUrl += localizedCode + "?format=image"; + } } - // art variation cards - // ARN and POR use † notation - // PLS uses ★ notation - if (baseUrl == null && card.getUsesVariousArt() && card.getSet().matches("ARN|POR|PLS")) { - String scryfallCollectorId = card.getCollectorIdAsInt().toString(); + // ARN and POR uses † notation for art variation cards + if (baseUrl == null && card.getUsesVariousArt() && card.getSet().matches("ARN|POR")) { + String collectorId = card.getCollectorId(); + if (collectorId.endsWith("b")) + collectorId = collectorId.replace("b", "†"); - if (card.getCollectorId().endsWith("b")) { - if (card.getSet().matches("ARN|POR")) { - scryfallCollectorId += "†"; - } else if (card.getSet().matches("PLS")) { - scryfallCollectorId += "★"; - } - } - - scryfallCollectorId = CardUtil.urlEncode(scryfallCollectorId); + final String scryfallCollectorId = CardUtil.urlEncode(collectorId); baseUrl = "https://api.scryfall.com/cards/" + formatSetName(card.getSet(), isToken) + "/" + scryfallCollectorId + "/" + localizedCode + "?format=image"; alternativeUrl = "https://api.scryfall.com/cards/" + formatSetName(card.getSet(), isToken) + "/" @@ -107,9 +102,9 @@ public enum ScryfallImageSource implements CardImageSource { // the back face is prepared beforehand if (baseUrl == null && card.isTwoFacedCard() && !card.isSecondSide()) { baseUrl = "https://api.scryfall.com/cards/" + formatSetName(card.getSet(), isToken) + "/" - + card.getCollectorIdAsInt() + "/" + localizedCode + "?format=image"; + + card.getCollectorId() + "/" + localizedCode + "?format=image"; alternativeUrl = "https://api.scryfall.com/cards/" + formatSetName(card.getSet(), isToken) + "/" - + card.getCollectorIdAsInt() + "/" + defaultCode + "?format=image"; + + card.getCollectorId() + "/" + defaultCode + "?format=image"; } // basic cards by api call (redirect to img link) diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java index b14f93e81cb..16d87d7be5f 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java @@ -478,11 +478,9 @@ public class ScryfallImageSupportCards { private static final Map directDownloadLinks = new HashMap() { { - // xmage card -> direct or api link: + // xmage card -> api link: // examples: - // direct example: https://img.scryfall.com/cards/large/en/trix/6.jpg - // api example: https://api.scryfall.com/cards/trix/6/en?format=image - // api example: https://api.scryfall.com/cards/trix/6?format=image + // api example: https://api.scryfall.com/cards/trix/6/ // api format is primary // // code form for one card: @@ -492,27 +490,42 @@ public class ScryfallImageSupportCards { // set/card_name/card_number // set/card_name/card_number + // Cards with non-ASCII collector numbers + put("J14/Plains/1*", "https://api.scryfall.com/cards/j14/1★/"); + put("J14/Island/2*", "https://api.scryfall.com/cards/j14/2★/"); + put("J14/Swamp/3*", "https://api.scryfall.com/cards/j14/3★/"); + put("J14/Mountain/4*", "https://api.scryfall.com/cards/j14/4★/"); + put("J14/Forest/5*", "https://api.scryfall.com/cards/j14/5★/"); + put("PLS/Tahngarth, Talruum Hero/74*", "https://api.scryfall.com/cards/pls/74★/"); + put("PLS/Ertai, the Corrupted/107*", "https://api.scryfall.com/cards/pls/107★/"); + put("PLS/Skyship Weatherlight/133*", "https://api.scryfall.com/cards/pls/133★/"); + put("PROE/Emrakul, the Aeons Torn/*4", "https://api.scryfall.com/cards/proe/★4/"); + put("PROE/Lord of Shatterskull Pass/*156", "https://api.scryfall.com/cards/proe/★156/"); + + put("PAL99/Island/3+", "https://api.scryfall.com/cards/pal99/3†/"); + put("PSOI/Tamiyo's Journal/265s+", "https://api.scryfall.com/cards/psoi/265s†/"); + // Duels of the Planeswalkers Promos -- xmage uses one set (DPAP), but scryfall store it by years // 2009 - https://scryfall.com/sets/pdtp - put("DPAP/Garruk Wildspeaker", "https://api.scryfall.com/cards/pdtp/1/en?format=image"); + put("DPAP/Garruk Wildspeaker", "https://api.scryfall.com/cards/pdtp/1/"); // 2010 - https://scryfall.com/sets/pdp10 - put("DPAP/Liliana Vess", "https://api.scryfall.com/cards/pdp10/1/en?format=image"); - put("DPAP/Nissa Revane", "https://api.scryfall.com/cards/pdp10/2/en?format=image"); + put("DPAP/Liliana Vess", "https://api.scryfall.com/cards/pdp10/1/"); + put("DPAP/Nissa Revane", "https://api.scryfall.com/cards/pdp10/2/"); // 2011 - https://scryfall.com/sets/pdp11 - put("DPAP/Frost Titan", "https://api.scryfall.com/cards/pdp11/1/en?format=image"); - put("DPAP/Grave Titan", "https://api.scryfall.com/cards/pdp11/2/en?format=image"); - put("DPAP/Inferno Titan", "https://api.scryfall.com/cards/pdp11/3/en?format=image"); + put("DPAP/Frost Titan", "https://api.scryfall.com/cards/pdp11/1/"); + put("DPAP/Grave Titan", "https://api.scryfall.com/cards/pdp11/2/"); + put("DPAP/Inferno Titan", "https://api.scryfall.com/cards/pdp11/3/"); // 2012 - https://scryfall.com/sets/pdp12 - put("DPAP/Primordial Hydra", "https://api.scryfall.com/cards/pdp12/1/en?format=image"); - put("DPAP/Serra Avatar", "https://api.scryfall.com/cards/pdp12/2/en?format=image"); - put("DPAP/Vampire Nocturnus", "https://api.scryfall.com/cards/pdp12/3/en?format=image"); + put("DPAP/Primordial Hydra", "https://api.scryfall.com/cards/pdp12/1/"); + put("DPAP/Serra Avatar", "https://api.scryfall.com/cards/pdp12/2/"); + put("DPAP/Vampire Nocturnus", "https://api.scryfall.com/cards/pdp12/3/"); // 2013 - https://scryfall.com/sets/pdp13 - put("DPAP/Bonescythe Sliver", "https://api.scryfall.com/cards/pdp13/1/en?format=image"); - put("DPAP/Ogre Battledriver", "https://api.scryfall.com/cards/pdp13/2/en?format=image"); - put("DPAP/Scavenging Ooze", "https://api.scryfall.com/cards/pdp13/3/en?format=image"); + put("DPAP/Bonescythe Sliver", "https://api.scryfall.com/cards/pdp13/1/"); + put("DPAP/Ogre Battledriver", "https://api.scryfall.com/cards/pdp13/2/"); + put("DPAP/Scavenging Ooze", "https://api.scryfall.com/cards/pdp13/3/"); // 2014 - https://scryfall.com/sets/pdp14 - put("DPAP/Soul of Ravnica", "https://api.scryfall.com/cards/pdp14/1/en?format=image"); - put("DPAP/Soul of Zendikar", "https://api.scryfall.com/cards/pdp14/2/en?format=image"); + put("DPAP/Soul of Ravnica", "https://api.scryfall.com/cards/pdp14/1/"); + put("DPAP/Soul of Zendikar", "https://api.scryfall.com/cards/pdp14/2/"); } }; diff --git a/Mage.Sets/src/mage/sets/ArabianNights.java b/Mage.Sets/src/mage/sets/ArabianNights.java index 05f01c9e54e..0219602404b 100644 --- a/Mage.Sets/src/mage/sets/ArabianNights.java +++ b/Mage.Sets/src/mage/sets/ArabianNights.java @@ -32,10 +32,10 @@ public final class ArabianNights extends ExpansionSet { cards.add(new SetCardInfo("Aladdin's Ring", 57, Rarity.RARE, mage.cards.a.AladdinsRing.class)); cards.add(new SetCardInfo("Ali Baba", 35, Rarity.UNCOMMON, mage.cards.a.AliBaba.class)); cards.add(new SetCardInfo("Ali from Cairo", 36, Rarity.RARE, mage.cards.a.AliFromCairo.class)); - cards.add(new SetCardInfo("Army of Allah", "2a", Rarity.COMMON, mage.cards.a.ArmyOfAllah.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Army of Allah", 2, Rarity.COMMON, mage.cards.a.ArmyOfAllah.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Army of Allah", "2b", Rarity.COMMON, mage.cards.a.ArmyOfAllah.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Bazaar of Baghdad", 70, Rarity.UNCOMMON, mage.cards.b.BazaarOfBaghdad.class)); - cards.add(new SetCardInfo("Bird Maiden", "37a", Rarity.COMMON, mage.cards.b.BirdMaiden.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Bird Maiden", 37, Rarity.COMMON, mage.cards.b.BirdMaiden.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Bird Maiden", "37b", Rarity.COMMON, mage.cards.b.BirdMaiden.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Bottle of Suleiman", 58, Rarity.RARE, mage.cards.b.BottleOfSuleiman.class)); cards.add(new SetCardInfo("Brass Man", 59, Rarity.UNCOMMON, mage.cards.b.BrassMan.class)); @@ -54,19 +54,19 @@ public final class ArabianNights extends ExpansionSet { cards.add(new SetCardInfo("Ebony Horse", 62, Rarity.RARE, mage.cards.e.EbonyHorse.class)); cards.add(new SetCardInfo("El-Hajjaj", 24, Rarity.RARE, mage.cards.e.ElHajjaj.class)); cards.add(new SetCardInfo("Elephant Graveyard", 74, Rarity.RARE, mage.cards.e.ElephantGraveyard.class)); - cards.add(new SetCardInfo("Erg Raiders", "25a", Rarity.COMMON, mage.cards.e.ErgRaiders.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Erg Raiders", 25, Rarity.COMMON, mage.cards.e.ErgRaiders.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Erg Raiders", "25b", Rarity.COMMON, mage.cards.e.ErgRaiders.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Erhnam Djinn", 48, Rarity.RARE, mage.cards.e.ErhnamDjinn.class)); cards.add(new SetCardInfo("Eye for an Eye", 4, Rarity.UNCOMMON, mage.cards.e.EyeForAnEye.class)); - cards.add(new SetCardInfo("Fishliver Oil", "13a", Rarity.COMMON, mage.cards.f.FishliverOil.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Fishliver Oil", 13, Rarity.COMMON, mage.cards.f.FishliverOil.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Fishliver Oil", "13b", Rarity.COMMON, mage.cards.f.FishliverOil.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Flying Carpet", 63, Rarity.UNCOMMON, mage.cards.f.FlyingCarpet.class)); cards.add(new SetCardInfo("Flying Men", 14, Rarity.COMMON, mage.cards.f.FlyingMen.class)); cards.add(new SetCardInfo("Ghazban Ogre", 49, Rarity.COMMON, mage.cards.g.GhazbanOgre.class)); - cards.add(new SetCardInfo("Giant Tortoise", "15a", Rarity.COMMON, mage.cards.g.GiantTortoise.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Giant Tortoise", 15, Rarity.COMMON, mage.cards.g.GiantTortoise.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Giant Tortoise", "15b", Rarity.COMMON, mage.cards.g.GiantTortoise.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Guardian Beast", 26, Rarity.RARE, mage.cards.g.GuardianBeast.class)); - cards.add(new SetCardInfo("Hasran Ogress", "27a", Rarity.COMMON, mage.cards.h.HasranOgress.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Hasran Ogress", 27, Rarity.COMMON, mage.cards.h.HasranOgress.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Hasran Ogress", "27b", Rarity.COMMON, mage.cards.h.HasranOgress.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Hurr Jackal", 39, Rarity.COMMON, mage.cards.h.HurrJackal.class)); cards.add(new SetCardInfo("Ifh-Biff Efreet", 50, Rarity.RARE, mage.cards.i.IfhBiffEfreet.class)); @@ -85,21 +85,21 @@ public final class ArabianNights extends ExpansionSet { cards.add(new SetCardInfo("Merchant Ship", 17, Rarity.UNCOMMON, mage.cards.m.MerchantShip.class)); cards.add(new SetCardInfo("Metamorphosis", 51, Rarity.COMMON, mage.cards.m.Metamorphosis.class)); cards.add(new SetCardInfo("Mijae Djinn", 42, Rarity.RARE, mage.cards.m.MijaeDjinn.class)); - cards.add(new SetCardInfo("Moorish Cavalry", "7a", Rarity.COMMON, mage.cards.m.MoorishCavalry.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Moorish Cavalry", 7, Rarity.COMMON, mage.cards.m.MoorishCavalry.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Moorish Cavalry", "7b", Rarity.COMMON, mage.cards.m.MoorishCavalry.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Mountain", 77, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Nafs Asp", "52a", Rarity.COMMON, mage.cards.n.NafsAsp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Nafs Asp", 52, Rarity.COMMON, mage.cards.n.NafsAsp.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Nafs Asp", "52b", Rarity.COMMON, mage.cards.n.NafsAsp.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Oasis", 78, Rarity.UNCOMMON, mage.cards.o.Oasis.class)); cards.add(new SetCardInfo("Old Man of the Sea", 18, Rarity.RARE, mage.cards.o.OldManOfTheSea.class)); - cards.add(new SetCardInfo("Oubliette", "31a", Rarity.COMMON, mage.cards.o.Oubliette.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Oubliette", 31, Rarity.COMMON, mage.cards.o.Oubliette.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Oubliette", "31b", Rarity.COMMON, mage.cards.o.Oubliette.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Piety", "8a", Rarity.COMMON, mage.cards.p.Piety.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Piety", 8, Rarity.COMMON, mage.cards.p.Piety.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Piety", "8b", Rarity.COMMON, mage.cards.p.Piety.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Pyramids", 67, Rarity.RARE, mage.cards.p.Pyramids.class)); cards.add(new SetCardInfo("Repentant Blacksmith", 9, Rarity.RARE, mage.cards.r.RepentantBlacksmith.class)); cards.add(new SetCardInfo("Ring of Ma'ruf", 68, Rarity.RARE, mage.cards.r.RingOfMaruf.class)); - cards.add(new SetCardInfo("Rukh Egg", "43a", Rarity.COMMON, mage.cards.r.RukhEgg.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Rukh Egg", 43, Rarity.COMMON, mage.cards.r.RukhEgg.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Rukh Egg", "43b", Rarity.COMMON, mage.cards.r.RukhEgg.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Sandals of Abdallah", 69, Rarity.UNCOMMON, mage.cards.s.SandalsOfAbdallah.class)); cards.add(new SetCardInfo("Sandstorm", 53, Rarity.COMMON, mage.cards.s.Sandstorm.class)); @@ -108,12 +108,12 @@ public final class ArabianNights extends ExpansionSet { cards.add(new SetCardInfo("Sindbad", 21, Rarity.UNCOMMON, mage.cards.s.Sindbad.class)); cards.add(new SetCardInfo("Singing Tree", 54, Rarity.RARE, mage.cards.s.SingingTree.class)); cards.add(new SetCardInfo("Sorceress Queen", 32, Rarity.UNCOMMON, mage.cards.s.SorceressQueen.class)); - cards.add(new SetCardInfo("Stone-Throwing Devils", "33a", Rarity.COMMON, mage.cards.s.StoneThrowingDevils.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Stone-Throwing Devils", 33, Rarity.COMMON, mage.cards.s.StoneThrowingDevils.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Stone-Throwing Devils", "33b", Rarity.COMMON, mage.cards.s.StoneThrowingDevils.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Unstable Mutation", 22, Rarity.COMMON, mage.cards.u.UnstableMutation.class)); - cards.add(new SetCardInfo("War Elephant", "11a", Rarity.COMMON, mage.cards.w.WarElephant.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("War Elephant", 11, Rarity.COMMON, mage.cards.w.WarElephant.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("War Elephant", "11b", Rarity.COMMON, mage.cards.w.WarElephant.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Wyluli Wolf", "55a", Rarity.COMMON, mage.cards.w.WyluliWolf.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Wyluli Wolf", 55, Rarity.COMMON, mage.cards.w.WyluliWolf.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Wyluli Wolf", "55b", Rarity.COMMON, mage.cards.w.WyluliWolf.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Ydwen Efreet", 44, Rarity.RARE, mage.cards.y.YdwenEfreet.class)); } diff --git a/Mage.Sets/src/mage/sets/DuelDecksJaceVsChandra.java b/Mage.Sets/src/mage/sets/DuelDecksJaceVsChandra.java index 1592d0482b4..43658194fbb 100644 --- a/Mage.Sets/src/mage/sets/DuelDecksJaceVsChandra.java +++ b/Mage.Sets/src/mage/sets/DuelDecksJaceVsChandra.java @@ -30,7 +30,7 @@ public final class DuelDecksJaceVsChandra extends ExpansionSet { cards.add(new SetCardInfo("Ancestral Vision", 21, Rarity.RARE, mage.cards.a.AncestralVision.class)); cards.add(new SetCardInfo("Bottle Gnomes", 7, Rarity.UNCOMMON, mage.cards.b.BottleGnomes.class)); cards.add(new SetCardInfo("Brine Elemental", 18, Rarity.UNCOMMON, mage.cards.b.BrineElemental.class)); - cards.add(new SetCardInfo("Chandra Nalaar", 34, Rarity.MYTHIC, mage.cards.c.ChandraNalaar.class)); + cards.add(new SetCardInfo("Chandra Nalaar", "34*", Rarity.MYTHIC, mage.cards.c.ChandraNalaar.class)); cards.add(new SetCardInfo("Chartooth Cougar", 47, Rarity.COMMON, mage.cards.c.ChartoothCougar.class)); cards.add(new SetCardInfo("Condescend", 28, Rarity.COMMON, mage.cards.c.Condescend.class)); cards.add(new SetCardInfo("Cone of Flame", 54, Rarity.UNCOMMON, mage.cards.c.ConeOfFlame.class)); @@ -60,7 +60,7 @@ public final class DuelDecksJaceVsChandra extends ExpansionSet { cards.add(new SetCardInfo("Island", 31, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Island", 32, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Island", 33, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Jace Beleren", 1, Rarity.MYTHIC, mage.cards.j.JaceBeleren.class)); + cards.add(new SetCardInfo("Jace Beleren", "1*", Rarity.MYTHIC, mage.cards.j.JaceBeleren.class)); cards.add(new SetCardInfo("Keldon Megaliths", 58, Rarity.UNCOMMON, mage.cards.k.KeldonMegaliths.class)); cards.add(new SetCardInfo("Magma Jet", 52, Rarity.UNCOMMON, mage.cards.m.MagmaJet.class)); cards.add(new SetCardInfo("Man-o'-War", 8, Rarity.COMMON, mage.cards.m.ManOWar.class)); diff --git a/Mage.Sets/src/mage/sets/Planeshift.java b/Mage.Sets/src/mage/sets/Planeshift.java index 206dd194b31..2ae0b873728 100644 --- a/Mage.Sets/src/mage/sets/Planeshift.java +++ b/Mage.Sets/src/mage/sets/Planeshift.java @@ -60,8 +60,8 @@ public final class Planeshift extends ExpansionSet { cards.add(new SetCardInfo("Dromar's Charm", 105, Rarity.UNCOMMON, mage.cards.d.DromarsCharm.class)); cards.add(new SetCardInfo("Eladamri's Call", 106, Rarity.RARE, mage.cards.e.EladamrisCall.class)); cards.add(new SetCardInfo("Ertai's Trickery", 24, Rarity.UNCOMMON, mage.cards.e.ErtaisTrickery.class)); - cards.add(new SetCardInfo("Ertai, the Corrupted", "107a", Rarity.RARE, mage.cards.e.ErtaiTheCorrupted.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Ertai, the Corrupted", "107b", Rarity.RARE, mage.cards.e.ErtaiTheCorrupted.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Ertai, the Corrupted", 107, Rarity.RARE, mage.cards.e.ErtaiTheCorrupted.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Ertai, the Corrupted", "107*", Rarity.RARE, mage.cards.e.ErtaiTheCorrupted.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Escape Routes", 25, Rarity.COMMON, mage.cards.e.EscapeRoutes.class)); cards.add(new SetCardInfo("Exotic Disease", 43, Rarity.UNCOMMON, mage.cards.e.ExoticDisease.class)); cards.add(new SetCardInfo("Falling Timber", 79, Rarity.COMMON, mage.cards.f.FallingTimber.class)); @@ -141,8 +141,8 @@ public final class Planeshift extends ExpansionSet { cards.add(new SetCardInfo("Singe", 71, Rarity.COMMON, mage.cards.s.Singe.class)); cards.add(new SetCardInfo("Sinister Strength", 54, Rarity.COMMON, mage.cards.s.SinisterStrength.class)); cards.add(new SetCardInfo("Sisay's Ingenuity", 33, Rarity.COMMON, mage.cards.s.SisaysIngenuity.class)); - cards.add(new SetCardInfo("Skyship Weatherlight", "133a", Rarity.RARE, mage.cards.s.SkyshipWeatherlight.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Skyship Weatherlight", "133b", Rarity.RARE, mage.cards.s.SkyshipWeatherlight.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Skyship Weatherlight", 133, Rarity.RARE, mage.cards.s.SkyshipWeatherlight.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Skyship Weatherlight", "133*", Rarity.RARE, mage.cards.s.SkyshipWeatherlight.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Skyshroud Blessing", 92, Rarity.UNCOMMON, mage.cards.s.SkyshroudBlessing.class)); cards.add(new SetCardInfo("Slay", 55, Rarity.UNCOMMON, mage.cards.s.Slay.class)); cards.add(new SetCardInfo("Sleeping Potion", 34, Rarity.COMMON, mage.cards.s.SleepingPotion.class)); @@ -159,8 +159,8 @@ public final class Planeshift extends ExpansionSet { cards.add(new SetCardInfo("Sunscape Battlemage", 16, Rarity.UNCOMMON, mage.cards.s.SunscapeBattlemage.class)); cards.add(new SetCardInfo("Sunscape Familiar", 17, Rarity.COMMON, mage.cards.s.SunscapeFamiliar.class)); cards.add(new SetCardInfo("Surprise Deployment", 18, Rarity.UNCOMMON, mage.cards.s.SurpriseDeployment.class)); - cards.add(new SetCardInfo("Tahngarth, Talruum Hero", "74a", Rarity.RARE, mage.cards.t.TahngarthTalruumHero.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Tahngarth, Talruum Hero", "74b", Rarity.RARE, mage.cards.t.TahngarthTalruumHero.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Tahngarth, Talruum Hero", 74, Rarity.RARE, mage.cards.t.TahngarthTalruumHero.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Tahngarth, Talruum Hero", "74*", Rarity.RARE, mage.cards.t.TahngarthTalruumHero.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Terminal Moraine", 142, Rarity.UNCOMMON, mage.cards.t.TerminalMoraine.class)); cards.add(new SetCardInfo("Terminate", 128, Rarity.COMMON, mage.cards.t.Terminate.class)); cards.add(new SetCardInfo("Thornscape Battlemage", 94, Rarity.UNCOMMON, mage.cards.t.ThornscapeBattlemage.class)); diff --git a/Mage.Sets/src/mage/sets/Portal.java b/Mage.Sets/src/mage/sets/Portal.java index b55822aa539..17dffa17c17 100644 --- a/Mage.Sets/src/mage/sets/Portal.java +++ b/Mage.Sets/src/mage/sets/Portal.java @@ -29,7 +29,7 @@ public final class Portal extends ExpansionSet { cards.add(new SetCardInfo("Alabaster Dragon", 1, Rarity.RARE, mage.cards.a.AlabasterDragon.class)); cards.add(new SetCardInfo("Alluring Scent", 157, Rarity.RARE, mage.cards.a.AlluringScent.class)); - cards.add(new SetCardInfo("Anaconda", "158a", Rarity.UNCOMMON, mage.cards.a.Anaconda.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Anaconda", 158, Rarity.UNCOMMON, mage.cards.a.Anaconda.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Anaconda", "158b", Rarity.UNCOMMON, mage.cards.a.Anaconda.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Ancestral Memories", 40, Rarity.RARE, mage.cards.a.AncestralMemories.class)); cards.add(new SetCardInfo("Angelic Blessing", 2, Rarity.COMMON, mage.cards.a.AngelicBlessing.class)); @@ -42,7 +42,7 @@ public final class Portal extends ExpansionSet { cards.add(new SetCardInfo("Balance of Power", 41, Rarity.RARE, mage.cards.b.BalanceOfPower.class)); cards.add(new SetCardInfo("Baleful Stare", 42, Rarity.UNCOMMON, mage.cards.b.BalefulStare.class)); cards.add(new SetCardInfo("Bee Sting", 159, Rarity.UNCOMMON, mage.cards.b.BeeSting.class)); - cards.add(new SetCardInfo("Blaze", "118a", Rarity.UNCOMMON, mage.cards.b.Blaze.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Blaze", 118, Rarity.UNCOMMON, mage.cards.b.Blaze.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Blaze", "118b", Rarity.UNCOMMON, mage.cards.b.Blaze.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Blessed Reversal", 7, Rarity.RARE, mage.cards.b.BlessedReversal.class)); cards.add(new SetCardInfo("Blinding Light", 8, Rarity.RARE, mage.cards.b.BlindingLight.class)); @@ -82,7 +82,7 @@ public final class Portal extends ExpansionSet { cards.add(new SetCardInfo("Dry Spell", 90, Rarity.UNCOMMON, mage.cards.d.DrySpell.class)); cards.add(new SetCardInfo("Earthquake", 124, Rarity.RARE, mage.cards.e.Earthquake.class)); cards.add(new SetCardInfo("Ebon Dragon", 91, Rarity.RARE, mage.cards.e.EbonDragon.class)); - cards.add(new SetCardInfo("Elite Cat Warrior", "163a", Rarity.COMMON, mage.cards.e.EliteCatWarrior.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Elite Cat Warrior", 163, Rarity.COMMON, mage.cards.e.EliteCatWarrior.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Elite Cat Warrior", "163b", Rarity.COMMON, mage.cards.e.EliteCatWarrior.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Elven Cache", 164, Rarity.COMMON, mage.cards.e.ElvenCache.class)); cards.add(new SetCardInfo("Elvish Ranger", 165, Rarity.COMMON, mage.cards.e.ElvishRanger.class)); @@ -112,7 +112,7 @@ public final class Portal extends ExpansionSet { cards.add(new SetCardInfo("Gorilla Warrior", 168, Rarity.COMMON, mage.cards.g.GorillaWarrior.class)); cards.add(new SetCardInfo("Gravedigger", 95, Rarity.UNCOMMON, mage.cards.g.Gravedigger.class)); cards.add(new SetCardInfo("Grizzly Bears", 169, Rarity.COMMON, mage.cards.g.GrizzlyBears.class)); - cards.add(new SetCardInfo("Hand of Death", "96a", Rarity.COMMON, mage.cards.h.HandOfDeath.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Hand of Death", 96, Rarity.COMMON, mage.cards.h.HandOfDeath.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Hand of Death", "96b", Rarity.COMMON, mage.cards.h.HandOfDeath.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Harsh Justice", 18, Rarity.RARE, mage.cards.h.HarshJustice.class)); cards.add(new SetCardInfo("Highland Giant", 132, Rarity.COMMON, mage.cards.h.HighlandGiant.class)); @@ -142,7 +142,7 @@ public final class Portal extends ExpansionSet { cards.add(new SetCardInfo("Mind Rot", 101, Rarity.COMMON, mage.cards.m.MindRot.class)); cards.add(new SetCardInfo("Minotaur Warrior", 140, Rarity.COMMON, mage.cards.m.MinotaurWarrior.class)); cards.add(new SetCardInfo("Mobilize", 172, Rarity.COMMON, mage.cards.m.Mobilize.class)); - cards.add(new SetCardInfo("Monstrous Growth", "173a", Rarity.COMMON, mage.cards.m.MonstrousGrowth.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Monstrous Growth", 173, Rarity.COMMON, mage.cards.m.MonstrousGrowth.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Monstrous Growth", "173b", Rarity.COMMON, mage.cards.m.MonstrousGrowth.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Moon Sprite", 174, Rarity.UNCOMMON, mage.cards.m.MoonSprite.class)); cards.add(new SetCardInfo("Mountain Goat", 141, Rarity.UNCOMMON, mage.cards.m.MountainGoat.class)); @@ -176,7 +176,7 @@ public final class Portal extends ExpansionSet { cards.add(new SetCardInfo("Pyroclasm", 143, Rarity.RARE, mage.cards.p.Pyroclasm.class)); cards.add(new SetCardInfo("Python", 105, Rarity.COMMON, mage.cards.p.Python.class)); cards.add(new SetCardInfo("Raging Cougar", 144, Rarity.COMMON, mage.cards.r.RagingCougar.class)); - cards.add(new SetCardInfo("Raging Goblin", "145a", Rarity.COMMON, mage.cards.r.RagingGoblin.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Raging Goblin", 145, Rarity.COMMON, mage.cards.r.RagingGoblin.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Raging Goblin", "145b", Rarity.COMMON, mage.cards.r.RagingGoblin.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Raging Minotaur", 146, Rarity.COMMON, mage.cards.r.RagingMinotaur.class)); cards.add(new SetCardInfo("Rain of Salt", 147, Rarity.UNCOMMON, mage.cards.r.RainOfSalt.class)); @@ -238,7 +238,7 @@ public final class Portal extends ExpansionSet { cards.add(new SetCardInfo("Volcanic Hammer", 154, Rarity.COMMON, mage.cards.v.VolcanicHammer.class)); cards.add(new SetCardInfo("Wall of Granite", 155, Rarity.UNCOMMON, mage.cards.w.WallOfGranite.class)); cards.add(new SetCardInfo("Wall of Swords", 37, Rarity.UNCOMMON, mage.cards.w.WallOfSwords.class)); - cards.add(new SetCardInfo("Warrior's Charge", "38a", Rarity.COMMON, mage.cards.w.WarriorsCharge.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Warrior's Charge", 38, Rarity.COMMON, mage.cards.w.WarriorsCharge.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Warrior's Charge", "38b", Rarity.COMMON, mage.cards.w.WarriorsCharge.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Whiptail Wurm", 192, Rarity.UNCOMMON, mage.cards.w.WhiptailWurm.class)); cards.add(new SetCardInfo("Wicked Pact", 117, Rarity.RARE, mage.cards.w.WickedPact.class)); diff --git a/Mage.Sets/src/mage/sets/RiseOfTheEldraziPromos.java b/Mage.Sets/src/mage/sets/RiseOfTheEldraziPromos.java index ef0f3a7adc8..7f468c39f56 100644 --- a/Mage.Sets/src/mage/sets/RiseOfTheEldraziPromos.java +++ b/Mage.Sets/src/mage/sets/RiseOfTheEldraziPromos.java @@ -21,11 +21,12 @@ public class RiseOfTheEldraziPromos extends ExpansionSet { this.hasBasicLands = false; cards.add(new SetCardInfo("Deathless Angel", 49, Rarity.RARE, mage.cards.d.DeathlessAngel.class)); - cards.add(new SetCardInfo("Emrakul, the Aeons Torn", 4, Rarity.RARE, mage.cards.e.EmrakulTheAeonsTorn.class)); - cards.add(new SetCardInfo("Guul Draz Assassin", 112, Rarity.RARE, mage.cards.g.GuulDrazAssassin.class)); - cards.add(new SetCardInfo("Lord of Shatterskull Pass", 156, Rarity.RARE, mage.cards.l.LordOfShatterskullPass.class)); - // Japanese-only printing - //cards.add(new SetCardInfo("Pestilence Demon", 124, Rarity.RARE, mage.cards.p.PestilenceDemon.class)); + cards.add(new SetCardInfo("Emrakul, the Aeons Torn", "*4", Rarity.RARE, mage.cards.e.EmrakulTheAeonsTorn.class)); + // Guul Draz Assassin actually uses regular ASCII * + cards.add(new SetCardInfo("Guul Draz Assassin", "*112", Rarity.RARE, mage.cards.g.GuulDrazAssassin.class)); + cards.add(new SetCardInfo("Lord of Shatterskull Pass", "*156", Rarity.RARE, mage.cards.l.LordOfShatterskullPass.class)); + // Japanese-only printing, actually uses regular ASCII * + //cards.add(new SetCardInfo("Pestilence Demon", "*124", Rarity.RARE, mage.cards.p.PestilenceDemon.class)); cards.add(new SetCardInfo("Staggershock", 48, Rarity.RARE, mage.cards.s.Staggershock.class)); } } From b0ae7e9328d18e5e1f88e3a08e97ec50c02c4344 Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Thu, 19 Mar 2020 10:30:03 +0100 Subject: [PATCH 154/182] Eldrich Moon: Align collector numbers with Scryfall. --- Mage.Sets/src/mage/sets/EldritchMoon.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Mage.Sets/src/mage/sets/EldritchMoon.java b/Mage.Sets/src/mage/sets/EldritchMoon.java index c6a1872f04b..40d15bdb2d5 100644 --- a/Mage.Sets/src/mage/sets/EldritchMoon.java +++ b/Mage.Sets/src/mage/sets/EldritchMoon.java @@ -118,18 +118,18 @@ public final class EldritchMoon extends ExpansionSet { cards.add(new SetCardInfo("Geist of the Lonely Vigil", 27, Rarity.UNCOMMON, mage.cards.g.GeistOfTheLonelyVigil.class)); cards.add(new SetCardInfo("Geist-Fueled Scarecrow", 196, Rarity.UNCOMMON, mage.cards.g.GeistFueledScarecrow.class)); cards.add(new SetCardInfo("Gisa and Geralf", 183, Rarity.MYTHIC, mage.cards.g.GisaAndGeralf.class)); - cards.add(new SetCardInfo("Gisela, the Broken Blade", "28a", Rarity.MYTHIC, mage.cards.g.GiselaTheBrokenBlade.class)); + cards.add(new SetCardInfo("Gisela, the Broken Blade", 28, Rarity.MYTHIC, mage.cards.g.GiselaTheBrokenBlade.class)); cards.add(new SetCardInfo("Give No Ground", 29, Rarity.UNCOMMON, mage.cards.g.GiveNoGround.class)); cards.add(new SetCardInfo("Gnarlwood Dryad", 159, Rarity.UNCOMMON, mage.cards.g.GnarlwoodDryad.class)); cards.add(new SetCardInfo("Graf Harvest", 90, Rarity.UNCOMMON, mage.cards.g.GrafHarvest.class)); - cards.add(new SetCardInfo("Graf Rats", "91a", Rarity.COMMON, mage.cards.g.GrafRats.class)); + cards.add(new SetCardInfo("Graf Rats", 91, Rarity.COMMON, mage.cards.g.GrafRats.class)); cards.add(new SetCardInfo("Grapple with the Past", 160, Rarity.COMMON, mage.cards.g.GrappleWithThePast.class)); cards.add(new SetCardInfo("Grim Flayer", 184, Rarity.MYTHIC, mage.cards.g.GrimFlayer.class)); cards.add(new SetCardInfo("Grisly Anglerfish", 63, Rarity.UNCOMMON, mage.cards.g.GrislyAnglerfish.class)); cards.add(new SetCardInfo("Grizzled Angler", 63, Rarity.UNCOMMON, mage.cards.g.GrizzledAngler.class)); cards.add(new SetCardInfo("Guardian of Pilgrims", 30, Rarity.COMMON, mage.cards.g.GuardianOfPilgrims.class)); cards.add(new SetCardInfo("Hamlet Captain", 161, Rarity.UNCOMMON, mage.cards.h.HamletCaptain.class)); - cards.add(new SetCardInfo("Hanweir Battlements", "204a", Rarity.RARE, mage.cards.h.HanweirBattlements.class)); + cards.add(new SetCardInfo("Hanweir Battlements", 204, Rarity.RARE, mage.cards.h.HanweirBattlements.class)); cards.add(new SetCardInfo("Hanweir Garrison", "130a", Rarity.RARE, mage.cards.h.HanweirGarrison.class)); cards.add(new SetCardInfo("Hanweir, the Writhing Township", "130b", Rarity.RARE, mage.cards.h.HanweirTheWrithingTownship.class)); cards.add(new SetCardInfo("Harmless Offering", 131, Rarity.RARE, mage.cards.h.HarmlessOffering.class)); From 843af7abeed88d6e689c11b076bc617da07c6b02 Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Thu, 19 Mar 2020 10:31:44 +0100 Subject: [PATCH 155/182] Fix Duel Decks Jace vs Chandra: Use the English printing instead of the Japanese printing for both Planeswalkers. --- Mage.Sets/src/mage/sets/DuelDecksJaceVsChandra.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Mage.Sets/src/mage/sets/DuelDecksJaceVsChandra.java b/Mage.Sets/src/mage/sets/DuelDecksJaceVsChandra.java index 43658194fbb..1592d0482b4 100644 --- a/Mage.Sets/src/mage/sets/DuelDecksJaceVsChandra.java +++ b/Mage.Sets/src/mage/sets/DuelDecksJaceVsChandra.java @@ -30,7 +30,7 @@ public final class DuelDecksJaceVsChandra extends ExpansionSet { cards.add(new SetCardInfo("Ancestral Vision", 21, Rarity.RARE, mage.cards.a.AncestralVision.class)); cards.add(new SetCardInfo("Bottle Gnomes", 7, Rarity.UNCOMMON, mage.cards.b.BottleGnomes.class)); cards.add(new SetCardInfo("Brine Elemental", 18, Rarity.UNCOMMON, mage.cards.b.BrineElemental.class)); - cards.add(new SetCardInfo("Chandra Nalaar", "34*", Rarity.MYTHIC, mage.cards.c.ChandraNalaar.class)); + cards.add(new SetCardInfo("Chandra Nalaar", 34, Rarity.MYTHIC, mage.cards.c.ChandraNalaar.class)); cards.add(new SetCardInfo("Chartooth Cougar", 47, Rarity.COMMON, mage.cards.c.ChartoothCougar.class)); cards.add(new SetCardInfo("Condescend", 28, Rarity.COMMON, mage.cards.c.Condescend.class)); cards.add(new SetCardInfo("Cone of Flame", 54, Rarity.UNCOMMON, mage.cards.c.ConeOfFlame.class)); @@ -60,7 +60,7 @@ public final class DuelDecksJaceVsChandra extends ExpansionSet { cards.add(new SetCardInfo("Island", 31, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Island", 32, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Island", 33, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Jace Beleren", "1*", Rarity.MYTHIC, mage.cards.j.JaceBeleren.class)); + cards.add(new SetCardInfo("Jace Beleren", 1, Rarity.MYTHIC, mage.cards.j.JaceBeleren.class)); cards.add(new SetCardInfo("Keldon Megaliths", 58, Rarity.UNCOMMON, mage.cards.k.KeldonMegaliths.class)); cards.add(new SetCardInfo("Magma Jet", 52, Rarity.UNCOMMON, mage.cards.m.MagmaJet.class)); cards.add(new SetCardInfo("Man-o'-War", 8, Rarity.COMMON, mage.cards.m.ManOWar.class)); From 49c5e5712dbd621fd413f4064a081a228f3a5ce0 Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Thu, 19 Mar 2020 10:58:01 +0100 Subject: [PATCH 156/182] Removed obsolete Promo set --- .../src/mage/sets/WPNAndGatewayPromos.java | 95 ------------------- 1 file changed, 95 deletions(-) delete mode 100644 Mage.Sets/src/mage/sets/WPNAndGatewayPromos.java diff --git a/Mage.Sets/src/mage/sets/WPNAndGatewayPromos.java b/Mage.Sets/src/mage/sets/WPNAndGatewayPromos.java deleted file mode 100644 index 2ca40ffc6bd..00000000000 --- a/Mage.Sets/src/mage/sets/WPNAndGatewayPromos.java +++ /dev/null @@ -1,95 +0,0 @@ -package mage.sets; - -import mage.cards.ExpansionSet; -import mage.constants.Rarity; -import mage.constants.SetType; - -/** - * @author fireshoes, JayDi85 - */ -public final class WPNAndGatewayPromos extends ExpansionSet { - - private static final WPNAndGatewayPromos instance = new WPNAndGatewayPromos(); - - public static WPNAndGatewayPromos getInstance() { - return instance; - } - - private WPNAndGatewayPromos() { - super("WPN and Gateway Promos", "GRC", ExpansionSet.buildDate(2011, 6, 17), SetType.PROMOTIONAL); - this.hasBoosters = false; - this.hasBasicLands = false; - - // one inner set for many promos by years (Gameway + Wizards Play Network promos by years) - // https://mtg.gamepedia.com/Gateway_cards - - // Gateway Promos -- xmage uses one set (GRC), but scryfall store it by years - // 2006 - https://scryfall.com/sets/pgtw - cards.add(new SetCardInfo("Fiery Temper", 3, Rarity.RARE, mage.cards.f.FieryTemper.class)); - cards.add(new SetCardInfo("Icatian Javelineers", 2, Rarity.RARE, mage.cards.i.IcatianJavelineers.class)); - cards.add(new SetCardInfo("Wood Elves", 1, Rarity.RARE, mage.cards.w.WoodElves.class)); - // 2007 - https://scryfall.com/sets/pg07 - cards.add(new SetCardInfo("Boomerang", 4, Rarity.RARE, mage.cards.b.Boomerang.class)); - cards.add(new SetCardInfo("Calciderm", 5, Rarity.RARE, mage.cards.c.Calciderm.class)); - cards.add(new SetCardInfo("Dauntless Dourbark", 12, Rarity.RARE, mage.cards.d.DauntlessDourbark.class)); - cards.add(new SetCardInfo("Llanowar Elves", 9, Rarity.RARE, mage.cards.l.LlanowarElves.class)); - cards.add(new SetCardInfo("Mind Stone", 11, Rarity.RARE, mage.cards.m.MindStone.class)); - cards.add(new SetCardInfo("Mogg Fanatic", 10, Rarity.RARE, mage.cards.m.MoggFanatic.class)); - cards.add(new SetCardInfo("Reckless Wurm", 6, Rarity.RARE, mage.cards.r.RecklessWurm.class)); - cards.add(new SetCardInfo("Yixlid Jailer", 7, Rarity.RARE, mage.cards.y.YixlidJailer.class)); - cards.add(new SetCardInfo("Zoetic Cavern", 8, Rarity.RARE, mage.cards.z.ZoeticCavern.class)); - // 2008a - https://scryfall.com/sets/pg08 - cards.add(new SetCardInfo("Boggart Ram-Gang", 17, Rarity.RARE, mage.cards.b.BoggartRamGang.class)); - cards.add(new SetCardInfo("Cenn's Tactician", 14, Rarity.RARE, mage.cards.c.CennsTactician.class)); - cards.add(new SetCardInfo("Duergar Hedge-Mage", 19, Rarity.RARE, mage.cards.d.DuergarHedgeMage.class)); - cards.add(new SetCardInfo("Gravedigger", 16, Rarity.RARE, mage.cards.g.Gravedigger.class)); - cards.add(new SetCardInfo("Lava Axe", 13, Rarity.RARE, mage.cards.l.LavaAxe.class)); - cards.add(new SetCardInfo("Oona's Blackguard", 15, Rarity.RARE, mage.cards.o.OonasBlackguard.class)); - cards.add(new SetCardInfo("Selkie Hedge-Mage", 20, Rarity.RARE, mage.cards.s.SelkieHedgeMage.class)); - cards.add(new SetCardInfo("Wilt-Leaf Cavaliers", 18, Rarity.RARE, mage.cards.w.WiltLeafCavaliers.class)); - - // Wizards Play Network Promos -- xmage uses one set (GRC), but scryfall store it by years - // 2008b - https://scryfall.com/sets/pwpn - cards.add(new SetCardInfo("Sprouting Thrinax", 21, Rarity.RARE, mage.cards.s.SproutingThrinax.class)); - cards.add(new SetCardInfo("Woolly Thoctar", 22, Rarity.RARE, mage.cards.w.WoollyThoctar.class)); - // 2009 - https://scryfall.com/sets/pwp09 - cards.add(new SetCardInfo("Hellspark Elemental", 25, Rarity.RARE, mage.cards.h.HellsparkElemental.class)); - cards.add(new SetCardInfo("Kor Duelist", 32, Rarity.RARE, mage.cards.k.KorDuelist.class)); - cards.add(new SetCardInfo("Marisi's Twinclaws", 26, Rarity.RARE, mage.cards.m.MarisisTwinclaws.class)); - cards.add(new SetCardInfo("Mind Control", 30, Rarity.RARE, mage.cards.m.MindControl.class)); - cards.add(new SetCardInfo("Path to Exile", 24, Rarity.RARE, mage.cards.p.PathToExile.class)); - cards.add(new SetCardInfo("Rise from the Grave", 31, Rarity.RARE, mage.cards.r.RiseFromTheGrave.class)); - cards.add(new SetCardInfo("Slave of Bolas", 27, Rarity.RARE, mage.cards.s.SlaveOfBolas.class)); - cards.add(new SetCardInfo("Vampire Nighthawk", 33, Rarity.RARE, mage.cards.v.VampireNighthawk.class)); - // 2010 - https://scryfall.com/sets/pwp10 - cards.add(new SetCardInfo("Curse of Wizardry", 47, Rarity.RARE, mage.cards.c.CurseOfWizardry.class)); - cards.add(new SetCardInfo("Fling", 50, Rarity.RARE, mage.cards.f.Fling.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Golem's Heart", 60, Rarity.RARE, mage.cards.g.GolemsHeart.class)); - cards.add(new SetCardInfo("Kor Firewalker", 36, Rarity.RARE, mage.cards.k.KorFirewalker.class)); - cards.add(new SetCardInfo("Leatherback Baloth", 37, Rarity.RARE, mage.cards.l.LeatherbackBaloth.class)); - cards.add(new SetCardInfo("Pathrazer of Ulamog", 46, Rarity.RARE, mage.cards.p.PathrazerOfUlamog.class)); - cards.add(new SetCardInfo("Plague Stinger", 59, Rarity.RARE, mage.cards.p.PlagueStinger.class)); - cards.add(new SetCardInfo("Skinrender", 63, Rarity.RARE, mage.cards.s.Skinrender.class)); - cards.add(new SetCardInfo("Sylvan Ranger", 51, Rarity.RARE, mage.cards.s.SylvanRanger.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Syphon Mind", 40, Rarity.RARE, mage.cards.s.SyphonMind.class)); - // 2011 - https://scryfall.com/sets/pwp11 - cards.add(new SetCardInfo("Auramancer", 77, Rarity.RARE, mage.cards.a.Auramancer.class)); - cards.add(new SetCardInfo("Bloodcrazed Neonate", 83, Rarity.RARE, mage.cards.b.BloodcrazedNeonate.class)); - cards.add(new SetCardInfo("Boneyard Wurm", 84, Rarity.RARE, mage.cards.b.BoneyardWurm.class)); - cards.add(new SetCardInfo("Circle of Flame", 78, Rarity.RARE, mage.cards.c.CircleOfFlame.class)); - cards.add(new SetCardInfo("Curse of the Bloody Tome", 80, Rarity.RARE, mage.cards.c.CurseOfTheBloodyTome.class)); - cards.add(new SetCardInfo("Fling", 69, Rarity.RARE, mage.cards.f.Fling.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Master's Call", 64, Rarity.RARE, mage.cards.m.MastersCall.class)); - cards.add(new SetCardInfo("Maul Splicer", 72, Rarity.RARE, mage.cards.m.MaulSplicer.class)); - cards.add(new SetCardInfo("Plague Myr", 65, Rarity.RARE, mage.cards.p.PlagueMyr.class)); - cards.add(new SetCardInfo("Shrine of Burning Rage", 73, Rarity.RARE, mage.cards.s.ShrineOfBurningRage.class)); - cards.add(new SetCardInfo("Signal Pest", 66, Rarity.RARE, mage.cards.s.SignalPest.class)); - cards.add(new SetCardInfo("Sylvan Ranger", 70, Rarity.RARE, mage.cards.s.SylvanRanger.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Tormented Soul", 76, Rarity.RARE, mage.cards.t.TormentedSoul.class)); - cards.add(new SetCardInfo("Vault Skirge", 71, Rarity.RARE, mage.cards.v.VaultSkirge.class)); - // 2012 - https://scryfall.com/sets/pwp12 - cards.add(new SetCardInfo("Curse of Thirst", 81, Rarity.RARE, mage.cards.c.CurseOfThirst.class)); - cards.add(new SetCardInfo("Gather the Townsfolk", 79, Rarity.RARE, mage.cards.g.GatherTheTownsfolk.class)); - cards.add(new SetCardInfo("Nearheath Stalker", 82, Rarity.RARE, mage.cards.n.NearheathStalker.class)); - } -} \ No newline at end of file From 1ec381fd3d063ce733618f233733c51383950833 Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Thu, 19 Mar 2020 11:29:50 +0100 Subject: [PATCH 157/182] Updated the expected average file size. Value is based on the full Scryfall download of March 2020. --- .../org/mage/plugins/card/dl/sources/ScryfallImageSource.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSource.java b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSource.java index 01ede30250e..c8fff3c3704 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSource.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSource.java @@ -207,7 +207,8 @@ public enum ScryfallImageSource implements CardImageSource { @Override public float getAverageSize() { - return 90; + // March 2020: 46_354 image files with total size 9_545_168 KiB + return 206; } @Override From eca8e4669bd2e24da5ac1e9477e051abf3e1c42d Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Thu, 19 Mar 2020 11:59:58 +0100 Subject: [PATCH 158/182] Guru: Fix collector numbers. --- Mage.Sets/src/mage/sets/Guru.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Mage.Sets/src/mage/sets/Guru.java b/Mage.Sets/src/mage/sets/Guru.java index 111f977007b..9e6c5f115a4 100644 --- a/Mage.Sets/src/mage/sets/Guru.java +++ b/Mage.Sets/src/mage/sets/Guru.java @@ -20,10 +20,10 @@ public final class Guru extends ExpansionSet { this.hasBasicLands = true; this.hasBoosters = false; - cards.add(new SetCardInfo("Forest", 1, Rarity.LAND, mage.cards.basiclands.Forest.class)); + cards.add(new SetCardInfo("Forest", 5, Rarity.LAND, mage.cards.basiclands.Forest.class)); cards.add(new SetCardInfo("Island", 2, Rarity.LAND, mage.cards.basiclands.Island.class)); - cards.add(new SetCardInfo("Mountain", 3, Rarity.LAND, mage.cards.basiclands.Mountain.class)); - cards.add(new SetCardInfo("Plains", 4, Rarity.LAND, mage.cards.basiclands.Plains.class)); - cards.add(new SetCardInfo("Swamp", 5, Rarity.LAND, mage.cards.basiclands.Swamp.class)); + cards.add(new SetCardInfo("Mountain", 4, Rarity.LAND, mage.cards.basiclands.Mountain.class)); + cards.add(new SetCardInfo("Plains", 1, Rarity.LAND, mage.cards.basiclands.Plains.class)); + cards.add(new SetCardInfo("Swamp", 3, Rarity.LAND, mage.cards.basiclands.Swamp.class)); } } From fc3e8a3a6f3c2a0202f9ff753d4c4de4add272ff Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Thu, 19 Mar 2020 12:43:15 +0100 Subject: [PATCH 159/182] Removed PPRE from the GrabbagImageSource --- .../org/mage/plugins/card/dl/sources/GrabbagImageSource.java | 1 - 1 file changed, 1 deletion(-) diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/GrabbagImageSource.java b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/GrabbagImageSource.java index 2fc3cfeb372..928849404da 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/GrabbagImageSource.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/GrabbagImageSource.java @@ -18,7 +18,6 @@ public enum GrabbagImageSource implements CardImageSource { private static final Set supportedSets = new LinkedHashSet() { { - add("PPRE"); add("SWS"); } }; From 80fc5463148e6b7fe268cbe7e83ac849e8b5469e Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Sun, 22 Mar 2020 21:54:54 +0100 Subject: [PATCH 160/182] ScryfallImageSupportCards: activated an implemented set. --- .../mage/plugins/card/dl/sources/ScryfallImageSupportCards.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java index 16d87d7be5f..ec91a476e3a 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java @@ -460,7 +460,7 @@ public class ScryfallImageSupportCards { add("PTHB"); // Theros Beyond Death Promos add("THB"); // Theros Beyond Death add("PWOR"); // World Championship Promos - //add("PANA"); // MTG Arena Promos + add("PANA"); // MTG Arena Promos add("PSLD"); // Secret Lair Drop Promos add("UND"); // Unsanctioned add("FMB1"); // Mystery Booster Retail Edition Foils From e7347ff7f2c5fa4ab9f581d463706b2ff4cf5284 Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Wed, 25 Mar 2020 10:38:47 +0100 Subject: [PATCH 161/182] Fixed code warning: Octal integer literals in XMage sets. --- Mage.Sets/src/mage/sets/Anthologies.java | 2 +- Mage.Sets/src/mage/sets/Commander2013Edition.java | 2 +- Mage.Sets/src/mage/sets/Commander2014Edition.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Mage.Sets/src/mage/sets/Anthologies.java b/Mage.Sets/src/mage/sets/Anthologies.java index 17df9798d6c..0d2a31ebd39 100644 --- a/Mage.Sets/src/mage/sets/Anthologies.java +++ b/Mage.Sets/src/mage/sets/Anthologies.java @@ -17,7 +17,7 @@ public final class Anthologies extends ExpansionSet { } private Anthologies() { - super("Anthologies", "ATH", ExpansionSet.buildDate(1998, 11, 01), SetType.SUPPLEMENTAL); + super("Anthologies", "ATH", ExpansionSet.buildDate(1998, 11, 1), SetType.SUPPLEMENTAL); this.hasBoosters = false; this.hasBasicLands = true; diff --git a/Mage.Sets/src/mage/sets/Commander2013Edition.java b/Mage.Sets/src/mage/sets/Commander2013Edition.java index e1011787db1..54cff546fbb 100644 --- a/Mage.Sets/src/mage/sets/Commander2013Edition.java +++ b/Mage.Sets/src/mage/sets/Commander2013Edition.java @@ -17,7 +17,7 @@ public final class Commander2013Edition extends ExpansionSet { } private Commander2013Edition() { - super("Commander 2013 Edition", "C13", ExpansionSet.buildDate(2013, 11, 01), SetType.SUPPLEMENTAL); + super("Commander 2013 Edition", "C13", ExpansionSet.buildDate(2013, 11, 1), SetType.SUPPLEMENTAL); this.blockName = "Command Zone"; cards.add(new SetCardInfo("Acidic Slime", 134, Rarity.UNCOMMON, mage.cards.a.AcidicSlime.class)); diff --git a/Mage.Sets/src/mage/sets/Commander2014Edition.java b/Mage.Sets/src/mage/sets/Commander2014Edition.java index e3422ee3ea1..707356f10e2 100644 --- a/Mage.Sets/src/mage/sets/Commander2014Edition.java +++ b/Mage.Sets/src/mage/sets/Commander2014Edition.java @@ -18,7 +18,7 @@ public final class Commander2014Edition extends ExpansionSet { } private Commander2014Edition() { - super("Commander 2014 Edition", "C14", ExpansionSet.buildDate(2014, 11, 07), SetType.SUPPLEMENTAL); + super("Commander 2014 Edition", "C14", ExpansionSet.buildDate(2014, 11, 7), SetType.SUPPLEMENTAL); this.blockName = "Command Zone"; cards.add(new SetCardInfo("Abyssal Persecutor", 132, Rarity.MYTHIC, mage.cards.a.AbyssalPersecutor.class)); cards.add(new SetCardInfo("Adarkar Valkyrie", 63, Rarity.RARE, mage.cards.a.AdarkarValkyrie.class)); From 40fd976da6390b6e3e06acc1bbd652834cab93d8 Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Wed, 25 Mar 2020 20:15:48 +0100 Subject: [PATCH 162/182] GrabbagImageSource: Fixed approximate download file size. The new value is based on a finished download of the SWS set. --- .../org/mage/plugins/card/dl/sources/GrabbagImageSource.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/GrabbagImageSource.java b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/GrabbagImageSource.java index 928849404da..324b4bc7368 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/GrabbagImageSource.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/GrabbagImageSource.java @@ -29,7 +29,7 @@ public enum GrabbagImageSource implements CardImageSource { @Override public float getAverageSize() { - return 26.7f; + return 74.8f; } @Override From 62161212bb5aa92bd8e7147131068e46c3c3dc7f Mon Sep 17 00:00:00 2001 From: Thomas Hess Date: Wed, 25 Mar 2020 21:40:56 +0100 Subject: [PATCH 163/182] ScryfallImageSupportCards: Re-added direct links for 8ED/9ED box set cards. --- .../dl/sources/ScryfallImageSupportCards.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java index ec91a476e3a..7f52346d10a 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java @@ -526,6 +526,25 @@ public class ScryfallImageSupportCards { // 2014 - https://scryfall.com/sets/pdp14 put("DPAP/Soul of Ravnica", "https://api.scryfall.com/cards/pdp14/1/"); put("DPAP/Soul of Zendikar", "https://api.scryfall.com/cards/pdp14/2/"); + + // 8th Edition box set and 9th Edition box set + put("8EB/Eager Cadet", "https://api.scryfall.com/cards/8ed/S1"); + put("8EB/Vengeance", "https://api.scryfall.com/cards/8ed/S2"); + put("8EB/Giant Octopus", "https://api.scryfall.com/cards/8ed/S3"); + put("8EB/Sea Eagle", "https://api.scryfall.com/cards/8ed/S4"); + put("8EB/Vizzerdrix", "https://api.scryfall.com/cards/8ed/S5"); + put("8EB/Enormous Baloth", "https://api.scryfall.com/cards/8ed/S6"); + put("8EB/Silverback Ape", "https://api.scryfall.com/cards/8ed/S7"); + put("9EB/Eager Cadet", "https://api.scryfall.com/cards/9ed/S1"); + put("9EB/Vengeance", "https://api.scryfall.com/cards/9ed/S3"); + put("9EB/Coral Eel", "https://api.scryfall.com/cards/9ed/S3"); + put("9EB/Giant Octopus", "https://api.scryfall.com/cards/9ed/S4"); + put("9EB/Index", "https://api.scryfall.com/cards/9ed/S5"); + put("9EB/Vizzerdrix", "https://api.scryfall.com/cards/9ed/S7"); + put("9EB/Goblin Raider", "https://api.scryfall.com/cards/9ed/S8"); + put("9EB/Enormous Baloth", "https://api.scryfall.com/cards/9ed/S9"); + put("9EB/Spined Wurm", "https://api.scryfall.com/cards/9ed/S10"); + } }; From ffd98d5c3c0ed01a66ba7f7afd9bba29d2cadad3 Mon Sep 17 00:00:00 2001 From: Oleg Agafonov Date: Fri, 7 Aug 2020 11:08:30 +0400 Subject: [PATCH 164/182] Merge fixed --- .../dl/sources/ScryfallImageSupportCards.java | 123 +----------------- .../plugins/card/utils/CardImageUtils.java | 5 +- 2 files changed, 5 insertions(+), 123 deletions(-) diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java index 99cfdb2b2b9..c77ec42b363 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java @@ -3,10 +3,7 @@ package org.mage.plugins.card.dl.sources; import com.google.common.collect.ImmutableMap; import org.tritonus.share.ArraySet; -import java.util.HashMap; -import java.util.Locale; -import java.util.Map; -import java.util.Set; +import java.util.*; /** @@ -474,137 +471,19 @@ public class ScryfallImageSupportCards { add("DPAP"); add("GRC"); // - add("ARC"); - add("M11"); - add("V10"); - add("DDF"); - add("SOM"); // add("TD0"); // Commander Theme Decks - add("PD2"); - add("ME4"); - add("MBS"); - add("DDG"); - add("NPH"); - add("CMD"); - add("M12"); - add("V11"); - add("DDH"); - add("ISD"); - add("PD3"); - add("DKA"); - add("DDI"); - add("AVR"); - add("PC2"); - add("M13"); - add("V12"); - add("DDJ"); - add("RTR"); - add("CM1"); // add("TD2"); // Duel Decks: Mirrodin Pure vs. New Phyrexia - add("GTC"); - add("DDK"); - add("DGM"); - add("MMA"); - add("M14"); - add("V13"); - add("DDL"); - add("THS"); - add("C13"); - add("BNG"); - add("DDM"); - add("JOU"); // add("MD1"); // Modern Event Deck - add("CNS"); - add("VMA"); - add("M15"); - add("V14"); - add("DDN"); - add("KTK"); - add("C14"); // add("DD3"); // Duel Decks Anthology - add("FRF"); - add("DDO"); - add("DTK"); - add("TPR"); - add("MM2"); - add("ORI"); - add("V15"); - add("DDP"); - add("BFZ"); - add("EXP"); - add("C15"); // add("PZ1"); // Legendary Cube - add("OGW"); - add("DDQ"); - add("W16"); - add("SOI"); - add("EMA"); - add("EMN"); - add("V16"); - add("CN2"); - add("DDR"); - add("KLD"); - add("MPS"); // add("PZ2"); - add("C16"); - add("PCA"); - add("AER"); - add("MM3"); - add("DDS"); - add("W17"); - add("AKH"); - add("CMA"); - add("E01"); - add("HOU"); - add("C17"); - add("XLN"); - add("DDT"); - add("IMA"); - add("E02"); - add("V17"); - add("UST"); - add("DDU"); - add("RIX"); add("WMCQ"); - add("PPRO"); - add("A25"); - add("DOM"); - add("BBD"); - add("C18"); - add("CM2"); - add("M19"); - add("GS1"); - add("GRN"); - add("GK1"); - add("GNT"); - add("UMA"); - add("PUMA"); - add("RNA"); add("MEDM"); - add("GK2"); - add("MH1"); - add("WAR"); - add("M20"); - add("C19"); - add("ELD"); - add("THB"); add("IKO"); add("C20"); - add("MB1"); - add("FMB1"); // add("EURO"); add("GPX"); - add("ATH"); - add("GRC"); - add("ANA"); - add("G18"); - add("PM20"); - add("PS19"); - add("SS1"); - add("SS2"); - add("PPP1"); - add("PF19"); add("MPS-AKH"); add("M21"); add("JMP"); diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/utils/CardImageUtils.java b/Mage.Client/src/main/java/org/mage/plugins/card/utils/CardImageUtils.java index ed3684e71a1..0645e2d7318 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/utils/CardImageUtils.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/utils/CardImageUtils.java @@ -101,7 +101,10 @@ public final class CardImageUtils { } public static String prepareCardNameForFile(String cardName) { - return cardName.replace(":", "").replace("\"", "").replace("//", "-"); + return cardName + .replace(":", "") + .replace("\"", "") + .replace("//", "-"); } public static String getImagesDir() { From 2954bbaf04832286211cc322a56f59e81c752ceb Mon Sep 17 00:00:00 2001 From: Oleg Agafonov Date: Fri, 7 Aug 2020 11:28:03 +0400 Subject: [PATCH 165/182] Images download: removed outdated source mtgimage.com --- .../card/dl/sources/MtgImageSource.java | 92 ------------------- 1 file changed, 92 deletions(-) delete mode 100644 Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/MtgImageSource.java diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/MtgImageSource.java b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/MtgImageSource.java deleted file mode 100644 index 8509e957303..00000000000 --- a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/MtgImageSource.java +++ /dev/null @@ -1,92 +0,0 @@ -package org.mage.plugins.card.dl.sources; - -import org.mage.plugins.card.dl.DownloadServiceInfo; -import org.mage.plugins.card.images.CardDownloadData; - -import java.util.List; -import java.util.Locale; - -/** - * Site was shutdown by wizards Feb. 2015 - * - * @author LevelX2 - */ -public enum MtgImageSource implements CardImageSource { - - instance; - - @Override - public String getSourceName() { - return "mtgimage.com"; - } - - @Override - public String getNextHttpImageUrl() { - return null; - } - - @Override - public String getFileForHttpImage(String httpImageUrl) { - return null; - } - - @Override - public boolean prepareDownloadList(DownloadServiceInfo downloadServiceInfo, List downloadList) { - return true; - } - - @Override - public CardImageUrls generateCardUrl(CardDownloadData card) throws Exception { - String collectorId = card.getCollectorId(); - String cardSet = card.getSet(); - if (collectorId == null || cardSet == null) { - throw new Exception("Wrong parameters for image: collector id: " + collectorId + ",card set: " + cardSet); - } - StringBuilder url = new StringBuilder("http://mtgimage.com/set/"); - url.append(cardSet.toUpperCase(Locale.ENGLISH)).append('/'); - - if (card.isSplitCard()) { - url.append(card.getDownloadName().replaceAll(" // ", "")); - } else { - url.append(card.getDownloadName().replaceAll(" ", "%20")); - } - - if (card.isTwoFacedCard()) { - url.append(card.isSecondSide() ? "b" : "a"); - } - if (card.isFlipCard()) { - if (card.isFlippedSide()) { // download rotated by 180 degree image - url.append('b'); - } else { - url.append('a'); - } - } - url.append(".jpg"); - - return new CardImageUrls(url.toString()); - } - - @Override - public CardImageUrls generateTokenUrl(CardDownloadData card) { - return null; - } - - @Override - public float getAverageSize() { - return 70.0f; - } - - @Override - public int getTotalImages() { - return -1; - } - - @Override - public boolean isTokenSource() { - return false; - } - - @Override - public void doPause(String httpImageUrl) { - } -} From 3bf0f800332363509d73ccb030eb9d1b028dffb4 Mon Sep 17 00:00:00 2001 From: Oleg Agafonov Date: Fri, 7 Aug 2020 11:29:49 +0400 Subject: [PATCH 166/182] Images download: fixed broken download dialog --- .../card/dl/sources/MythicspoilerComSource.java | 2 +- .../card/dl/sources/ScryfallImageSource.java | 6 ++---- .../card/dl/sources/WizardCardsImageSource.java | 2 +- .../plugins/card/images/CardDownloadData.java | 15 +++++++++------ .../mage/plugins/card/utils/CardImageUtils.java | 2 +- 5 files changed, 14 insertions(+), 13 deletions(-) diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/MythicspoilerComSource.java b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/MythicspoilerComSource.java index f642b3e06fe..d7c9eec3941 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/MythicspoilerComSource.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/MythicspoilerComSource.java @@ -396,7 +396,7 @@ public enum MythicspoilerComSource implements CardImageSource { String collectorId = card.getCollectorId(); String cardSet = card.getSet(); if (collectorId == null || cardSet == null) { - throw new Exception("Wrong parameters for image: collector id: " + collectorId + ",card set: " + cardSet); + throw new Exception("Wrong parameters for image: collector id: " + collectorId + ", card set: " + cardSet); } if (card.isFlippedSide()) { //doesn't support rotated images return null; diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSource.java b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSource.java index 255aac82c05..968eff235e2 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSource.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSource.java @@ -4,8 +4,6 @@ import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParser; -import mage.cards.ExpansionSet; -import mage.cards.Sets; import mage.client.util.CardLanguage; import mage.util.CardUtil; import org.apache.log4j.Logger; @@ -30,7 +28,7 @@ public enum ScryfallImageSource implements CardImageSource { private final Map languageAliases; private CardLanguage currentLanguage = CardLanguage.ENGLISH; // working language - private Map preparedUrls = new HashMap<>(); + private final Map preparedUrls = new HashMap<>(); ScryfallImageSource() { // LANGUAGES @@ -68,7 +66,7 @@ public enum ScryfallImageSource implements CardImageSource { // TOKENS TRY // tokens support only direct links - if (baseUrl == null && isToken) { + if (isToken) { baseUrl = ScryfallImageSupportTokens.findTokenLink(card.getSet(), card.getName(), card.getType()); alternativeUrl = null; } diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/WizardCardsImageSource.java b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/WizardCardsImageSource.java index f8a7c35fa9b..368b6e7f791 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/WizardCardsImageSource.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/WizardCardsImageSource.java @@ -461,7 +461,7 @@ public enum WizardCardsImageSource implements CardImageSource { String collectorId = card.getCollectorId(); String cardSet = card.getSet(); if (collectorId == null || cardSet == null) { - throw new Exception("Wrong parameters for image: collector id: " + collectorId + ",card set: " + cardSet); + throw new Exception("Wrong parameters for image: collector id: " + collectorId + ", card set: " + cardSet); } if (card.isFlippedSide()) { //doesn't support rotated images return null; diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/images/CardDownloadData.java b/Mage.Client/src/main/java/org/mage/plugins/card/images/CardDownloadData.java index 08c0a25587e..6913d5223f3 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/images/CardDownloadData.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/images/CardDownloadData.java @@ -1,11 +1,11 @@ package org.mage.plugins.card.images; +import mage.util.CardUtil; + import java.util.Locale; import java.util.Objects; -import mage.util.CardUtil; /** - * * @author North */ public class CardDownloadData { @@ -106,10 +106,7 @@ public class CardDownloadData { if (this.secondSide != other.secondSide) { return false; } - if (this.isType2 != other.isType2) { - return false; - } - return true; + return this.isType2 == other.isType2; } @Override @@ -134,6 +131,12 @@ public class CardDownloadData { return CardUtil.parseCardNumberAsInt(collectorId); } + public String getCollectorIdAsFileName() { + // return file names compatible card number (e.g. replace special symbols) + return collectorId + .replace("*", "star"); + } + public String getCollectorIdPostfix() { return getCollectorId().replaceAll(getCollectorIdAsInt().toString(), ""); } diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/utils/CardImageUtils.java b/Mage.Client/src/main/java/org/mage/plugins/card/utils/CardImageUtils.java index 0645e2d7318..77bbf87f9bc 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/utils/CardImageUtils.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/utils/CardImageUtils.java @@ -203,7 +203,7 @@ public final class CardImageUtils { String finalFileName = ""; if (card.getUsesVariousArt()) { // different arts uses name + collector id - finalFileName = cardName + prefixType + '.' + card.getCollectorId() + ".full.jpg"; + finalFileName = cardName + prefixType + '.' + card.getCollectorIdAsFileName() + ".full.jpg"; } else { // basic arts uses name finalFileName = cardName + prefixType + ".full.jpg"; From 401d4684945330c46277ee00e8b8b7d828979afe Mon Sep 17 00:00:00 2001 From: Oleg Agafonov Date: Fri, 7 Aug 2020 11:48:40 +0400 Subject: [PATCH 167/182] Images download: decrease default images threads to 3 instead 10 (scryfall IP ban workaround for massive download) --- .../main/java/mage/client/dialog/PreferencesDialog.java | 8 ++++---- .../mage/plugins/card/images/DownloadPicturesService.java | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/Mage.Client/src/main/java/mage/client/dialog/PreferencesDialog.java b/Mage.Client/src/main/java/mage/client/dialog/PreferencesDialog.java index 1b9e9881bad..6f69eeed8fc 100644 --- a/Mage.Client/src/main/java/mage/client/dialog/PreferencesDialog.java +++ b/Mage.Client/src/main/java/mage/client/dialog/PreferencesDialog.java @@ -79,6 +79,7 @@ public class PreferencesDialog extends javax.swing.JDialog { public static final String KEY_CARD_IMAGES_USE_DEFAULT = "cardImagesUseDefault"; public static final String KEY_CARD_IMAGES_PATH = "cardImagesPath"; public static final String KEY_CARD_IMAGES_THREADS = "cardImagesThreads"; + public static final String KEY_CARD_IMAGES_THREADS_DEFAULT = "3"; public static final String KEY_CARD_IMAGES_SAVE_TO_ZIP = "cardImagesSaveToZip"; public static final String KEY_CARD_IMAGES_PREF_LANGUAGE = "cardImagesPreferedImageLaguage"; @@ -3465,7 +3466,7 @@ public class PreferencesDialog extends javax.swing.JDialog { updateCache(KEY_CARD_IMAGES_PATH, path); } load(prefs, dialog.cbSaveToZipFiles, KEY_CARD_IMAGES_SAVE_TO_ZIP, "true"); - dialog.cbNumberOfDownloadThreads.setSelectedItem(MageFrame.getPreferences().get(KEY_CARD_IMAGES_THREADS, "10")); + dialog.cbNumberOfDownloadThreads.setSelectedItem(MageFrame.getPreferences().get(KEY_CARD_IMAGES_THREADS, KEY_CARD_IMAGES_THREADS_DEFAULT)); dialog.cbPreferedImageLanguage.setSelectedItem(MageFrame.getPreferences().get(KEY_CARD_IMAGES_PREF_LANGUAGE, CardLanguage.ENGLISH.getCode())); // rendering settings @@ -3762,10 +3763,9 @@ public class PreferencesDialog extends javax.swing.JDialog { if (CACHE.containsKey(key)) { return CACHE.get(key); } else { - Preferences prefs = MageFrame.getPreferences(); - String value = prefs.get(key, def); + String value = MageFrame.getPreferences().get(key, def); if (value == null) { - return null; + return def; } CACHE.put(key, value); return value; diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/images/DownloadPicturesService.java b/Mage.Client/src/main/java/org/mage/plugins/card/images/DownloadPicturesService.java index 6c43bb0a584..9211ba721a4 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/images/DownloadPicturesService.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/images/DownloadPicturesService.java @@ -51,18 +51,18 @@ public class DownloadPicturesService extends DefaultBoundedRangeModel implements private static final int MAX_ERRORS_COUNT_BEFORE_CANCEL = 50; - private DownloadImagesDialog uiDialog; + private final DownloadImagesDialog uiDialog; private boolean needCancel; private int errorCount; private int cardIndex; private List cardsAll; private List cardsMissing; - private List cardsDownloadQueue; + private final List cardsDownloadQueue; private int missingCardsCount = 0; private int missingTokensCount = 0; - private List selectedSets = new ArrayList<>(); + private final List selectedSets = new ArrayList<>(); private static CardImageSource selectedSource; private final Object sync = new Object(); @@ -617,7 +617,7 @@ public class DownloadPicturesService extends DefaultBoundedRangeModel implements uiDialog.getProgressBar().setString("Preparing download list..."); if (selectedSource.prepareDownloadList(this, cardsDownloadQueue)) { update(0, cardsDownloadQueue.size()); - int numberOfThreads = Integer.parseInt(PreferencesDialog.getCachedValue(PreferencesDialog.KEY_CARD_IMAGES_THREADS, "10")); + int numberOfThreads = Integer.parseInt(PreferencesDialog.getCachedValue(PreferencesDialog.KEY_CARD_IMAGES_THREADS, PreferencesDialog.KEY_CARD_IMAGES_THREADS_DEFAULT)); ExecutorService executor = Executors.newFixedThreadPool(numberOfThreads); for (int i = 0; i < cardsDownloadQueue.size() && !this.isNeedCancel(); i++) { try { From 450646ca5ed086e4c8ac5337e01a5c1a9a7ad782 Mon Sep 17 00:00:00 2001 From: Oleg Agafonov Date: Fri, 7 Aug 2020 12:41:17 +0400 Subject: [PATCH 168/182] * Images download: added threads settings in download dialog; --- .../client/dialog/DownloadImagesDialog.form | 54 ++++++++++++++--- .../client/dialog/DownloadImagesDialog.java | 59 +++++++++++++------ .../mage/client/dialog/PreferencesDialog.form | 2 +- .../mage/client/dialog/PreferencesDialog.java | 14 +++-- .../card/images/DownloadPicturesService.java | 14 +++-- 5 files changed, 108 insertions(+), 35 deletions(-) diff --git a/Mage.Client/src/main/java/mage/client/dialog/DownloadImagesDialog.form b/Mage.Client/src/main/java/mage/client/dialog/DownloadImagesDialog.form index 2ab6699220e..420011de615 100644 --- a/Mage.Client/src/main/java/mage/client/dialog/DownloadImagesDialog.form +++ b/Mage.Client/src/main/java/mage/client/dialog/DownloadImagesDialog.form @@ -20,7 +20,7 @@ - + @@ -223,14 +223,14 @@ - + - + @@ -258,7 +258,47 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -368,10 +408,10 @@ - + - + @@ -379,7 +419,7 @@ - + diff --git a/Mage.Client/src/main/java/mage/client/dialog/DownloadImagesDialog.java b/Mage.Client/src/main/java/mage/client/dialog/DownloadImagesDialog.java index f6877c8eff4..cbf581d0c00 100644 --- a/Mage.Client/src/main/java/mage/client/dialog/DownloadImagesDialog.java +++ b/Mage.Client/src/main/java/mage/client/dialog/DownloadImagesDialog.java @@ -19,9 +19,9 @@ public class DownloadImagesDialog extends MageDialog { public static final int RET_CANCEL = 0; public static final int RET_OK = 1; - private Dimension sizeModeMessageOnly; - private Dimension sizeModeMessageAndControls; - private Map actionsControlStates = new HashMap<>(); + private final Dimension sizeModeMessageOnly; + private final Dimension sizeModeMessageAndControls; + private final Map actionsControlStates = new HashMap<>(); /** @@ -34,9 +34,9 @@ public class DownloadImagesDialog extends MageDialog { // fix for panelInfo (it's resets aligmentX after netbeans designer opened) panelInfo.setAlignmentX(CENTER_ALIGNMENT); - // save default sizes + // save default sizes (WARNING, you must sync it manually with designer sizes) // - this.sizeModeMessageAndControls = new Dimension(580, 330); // dialog -> properties -> designer size + this.sizeModeMessageAndControls = new Dimension(716, 329); // dialog -> properties -> code tab -> designer size // this.sizeModeMessageOnly = new Dimension(this.sizeModeMessageAndControls.getSize()); sizeModeMessageOnly.height = 25 * 4; @@ -95,6 +95,10 @@ public class DownloadImagesDialog extends MageDialog { return this.comboLanguage; } + public JComboBox getDownloadThreadsCombo() { + return this.comboDownloadThreads; + } + public JComboBox getSetsCombo() { return this.comboSets; } @@ -142,6 +146,7 @@ public class DownloadImagesDialog extends MageDialog { enableActionControl(enable, comboSets); enableActionControl(enable, buttonSearchSet); enableActionControl(enable, comboLanguage); + enableActionControl(enable, comboDownloadThreads); enableActionControl(enable, checkboxRedownload); } @@ -214,9 +219,12 @@ public class DownloadImagesDialog extends MageDialog { panelSourceLeft = new javax.swing.JPanel(); labelSource = new javax.swing.JLabel(); comboSource = new javax.swing.JComboBox<>(); - panelSourceRight = new javax.swing.JPanel(); + panelSourceCenter = new javax.swing.JPanel(); labelLanguage = new javax.swing.JLabel(); comboLanguage = new javax.swing.JComboBox<>(); + panelSourceRight = new javax.swing.JPanel(); + labelDownloadThreads = new javax.swing.JLabel(); + comboDownloadThreads = new javax.swing.JComboBox<>(); panelMode = new javax.swing.JPanel(); panelModeInner = new javax.swing.JPanel(); labelMode = new javax.swing.JLabel(); @@ -295,19 +303,33 @@ public class DownloadImagesDialog extends MageDialog { panelSource.add(panelSourceLeft); - panelSourceRight.setAlignmentX(0.0F); - panelSourceRight.setMaximumSize(new java.awt.Dimension(130, 32767)); - panelSourceRight.setMinimumSize(new java.awt.Dimension(130, 30)); - panelSourceRight.setPreferredSize(new java.awt.Dimension(130, 100)); - panelSourceRight.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.LEADING)); + panelSourceCenter.setAlignmentX(0.0F); + panelSourceCenter.setMaximumSize(new java.awt.Dimension(130, 32767)); + panelSourceCenter.setMinimumSize(new java.awt.Dimension(130, 10)); + panelSourceCenter.setPreferredSize(new java.awt.Dimension(130, 100)); + panelSourceCenter.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.LEADING)); labelLanguage.setText("Language:"); - panelSourceRight.add(labelLanguage); + panelSourceCenter.add(labelLanguage); comboLanguage.setMaximumRowCount(15); comboLanguage.setModel(new javax.swing.DefaultComboBoxModel<>(new String[]{"Item 1", "Item 2", "Item 3", "Item 4"})); - comboLanguage.setPreferredSize(new java.awt.Dimension(90, 25)); - panelSourceRight.add(comboLanguage); + comboLanguage.setPreferredSize(new java.awt.Dimension(110, 25)); + panelSourceCenter.add(comboLanguage); + + panelSource.add(panelSourceCenter); + + panelSourceRight.setMinimumSize(new java.awt.Dimension(150, 30)); + panelSourceRight.setPreferredSize(new java.awt.Dimension(150, 35)); + panelSourceRight.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.LEADING)); + + labelDownloadThreads.setText("Download threads:"); + panelSourceRight.add(labelDownloadThreads); + + comboDownloadThreads.setMaximumRowCount(15); + comboDownloadThreads.setModel(new javax.swing.DefaultComboBoxModel<>(new String[]{"Item 1", "Item 2", "Item 3", "Item 4"})); + comboDownloadThreads.setPreferredSize(new java.awt.Dimension(110, 25)); + panelSourceRight.add(comboDownloadThreads); panelSource.add(panelSourceRight); @@ -350,11 +372,11 @@ public class DownloadImagesDialog extends MageDialog { panelRedownload.setAlignmentX(0.0F); panelRedownload.setMaximumSize(new java.awt.Dimension(130, 32767)); - panelRedownload.setMinimumSize(new java.awt.Dimension(130, 30)); - panelRedownload.setPreferredSize(new java.awt.Dimension(130, 100)); + panelRedownload.setMinimumSize(new java.awt.Dimension(280, 30)); + panelRedownload.setPreferredSize(new java.awt.Dimension(280, 100)); panelRedownload.setLayout(new java.awt.BorderLayout()); - checkboxRedownload.setText("Re-download selected images"); + checkboxRedownload.setText("Re-download all images"); checkboxRedownload.setVerticalAlignment(javax.swing.SwingConstants.BOTTOM); panelRedownload.add(checkboxRedownload, java.awt.BorderLayout.CENTER); panelRedownload.add(filler1, java.awt.BorderLayout.PAGE_END); @@ -431,6 +453,7 @@ public class DownloadImagesDialog extends MageDialog { private javax.swing.JButton buttonSearchSet; private javax.swing.JButton buttonStop; private javax.swing.JCheckBox checkboxRedownload; + private javax.swing.JComboBox comboDownloadThreads; private javax.swing.JComboBox comboLanguage; private javax.swing.JComboBox comboSets; private javax.swing.JComboBox comboSource; @@ -444,6 +467,7 @@ public class DownloadImagesDialog extends MageDialog { private javax.swing.Box.Filler fillerProgress1; private javax.swing.Box.Filler fillerProgress2; private javax.swing.Box.Filler fillerglobal2; + private javax.swing.JLabel labelDownloadThreads; private javax.swing.JLabel labelGlobal; private javax.swing.JLabel labelInfo; private javax.swing.JLabel labelLanguage; @@ -458,6 +482,7 @@ public class DownloadImagesDialog extends MageDialog { private javax.swing.JPanel panelProgress; private javax.swing.JPanel panelRedownload; private javax.swing.JPanel panelSource; + private javax.swing.JPanel panelSourceCenter; private javax.swing.JPanel panelSourceLeft; private javax.swing.JPanel panelSourceRight; private javax.swing.JProgressBar progress; diff --git a/Mage.Client/src/main/java/mage/client/dialog/PreferencesDialog.form b/Mage.Client/src/main/java/mage/client/dialog/PreferencesDialog.form index 1e52f053914..b1a497484ec 100644 --- a/Mage.Client/src/main/java/mage/client/dialog/PreferencesDialog.form +++ b/Mage.Client/src/main/java/mage/client/dialog/PreferencesDialog.form @@ -4425,7 +4425,7 @@ - + diff --git a/Mage.Client/src/main/java/mage/client/dialog/PreferencesDialog.java b/Mage.Client/src/main/java/mage/client/dialog/PreferencesDialog.java index 6f69eeed8fc..07f5b02ae04 100644 --- a/Mage.Client/src/main/java/mage/client/dialog/PreferencesDialog.java +++ b/Mage.Client/src/main/java/mage/client/dialog/PreferencesDialog.java @@ -344,6 +344,10 @@ public class PreferencesDialog extends javax.swing.JDialog { return CardLanguage.valueByCode(getCachedValue(PreferencesDialog.KEY_CARD_IMAGES_PREF_LANGUAGE, CardLanguage.ENGLISH.getCode())); } + public static Integer getPrefDownloadThreads() { + return Integer.parseInt(getCachedValue(KEY_CARD_IMAGES_THREADS, KEY_CARD_IMAGES_THREADS_DEFAULT)); + } + private static class ImageFileFilter extends FileFilter { @Override @@ -487,7 +491,7 @@ public class PreferencesDialog extends javax.swing.JDialog { txtImageFolderPath = new javax.swing.JTextField(); btnBrowseImageLocation = new javax.swing.JButton(); cbSaveToZipFiles = new javax.swing.JCheckBox(); - cbPreferedImageLanguage = new javax.swing.JComboBox(); + cbPreferedImageLanguage = new javax.swing.JComboBox<>(); labelPreferedImageLanguage = new javax.swing.JLabel(); labelNumberOfDownloadThreads = new javax.swing.JLabel(); cbNumberOfDownloadThreads = new javax.swing.JComboBox(); @@ -548,7 +552,7 @@ public class PreferencesDialog extends javax.swing.JDialog { txtURLServerList = new javax.swing.JTextField(); jLabel17 = new javax.swing.JLabel(); lblProxyType = new javax.swing.JLabel(); - cbProxyType = new javax.swing.JComboBox(); + cbProxyType = new javax.swing.JComboBox<>(); pnlProxySettings = new javax.swing.JPanel(); pnlProxy = new javax.swing.JPanel(); lblProxyServer = new javax.swing.JLabel(); @@ -589,7 +593,7 @@ public class PreferencesDialog extends javax.swing.JDialog { tabThemes = new javax.swing.JPanel(); themesCategory = new javax.swing.JPanel(); lbSelectLabel = new javax.swing.JLabel(); - cbTheme = new javax.swing.JComboBox(); + cbTheme = new javax.swing.JComboBox<>(); lbThemeHint = new javax.swing.JLabel(); saveButton = new javax.swing.JButton(); exitButton = new javax.swing.JButton(); @@ -1557,12 +1561,12 @@ public class PreferencesDialog extends javax.swing.JDialog { }); cbPreferedImageLanguage.setMaximumRowCount(20); - cbPreferedImageLanguage.setModel(new javax.swing.DefaultComboBoxModel(new String[]{"Item 1", "Item 2", "Item 3", "Item 4"})); + cbPreferedImageLanguage.setModel(new javax.swing.DefaultComboBoxModel<>(new String[]{"Item 1", "Item 2", "Item 3", "Item 4"})); labelPreferedImageLanguage.setText("Default images language:"); labelPreferedImageLanguage.setFocusable(false); - labelNumberOfDownloadThreads.setText("Number of download threads:"); + labelNumberOfDownloadThreads.setText("Default download threads:"); cbNumberOfDownloadThreads.setMaximumRowCount(20); cbNumberOfDownloadThreads.setModel(new javax.swing.DefaultComboBoxModel(new String[]{"Item 1", "Item 2", "Item 3", "Item 4"})); diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/images/DownloadPicturesService.java b/Mage.Client/src/main/java/org/mage/plugins/card/images/DownloadPicturesService.java index 9211ba721a4..92b84cf1faa 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/images/DownloadPicturesService.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/images/DownloadPicturesService.java @@ -164,11 +164,14 @@ public class DownloadPicturesService extends DefaultBoundedRangeModel implements uiDialog.getLaunguagesCombo().setSelectedItem(PreferencesDialog.getPrefImagesLanguage()); reloadLanguagesForSelectedSource(); + // DOWNLOAD THREADS + uiDialog.getDownloadThreadsCombo().setModel(new DefaultComboBoxModel<>(new String[]{"10", "9", "8", "7", "6", "5", "4", "3", "2", "1"})); + uiDialog.getDownloadThreadsCombo().setSelectedItem(PreferencesDialog.getPrefDownloadThreads().toString()); + // REDOWNLOAD uiDialog.getRedownloadCheckbox().setSelected(false); uiDialog.getRedownloadCheckbox().addItemListener(this::checkboxRedowloadChanged); - // SETS (fills after source and language select) //uiDialog.getSetsCombo().setModel(new DefaultComboBoxModel(DownloadSources.values())); uiDialog.getSetsCombo().addItemListener((ItemEvent event) -> { @@ -585,7 +588,6 @@ public class DownloadPicturesService extends DefaultBoundedRangeModel implements } Connection.ProxyType configProxyType = Connection.ProxyType.valueByText(PreferencesDialog.getCachedValue(PreferencesDialog.KEY_PROXY_TYPE, "None")); - Proxy.Type type = Proxy.Type.DIRECT; switch (configProxyType) { case HTTP: @@ -610,15 +612,17 @@ public class DownloadPicturesService extends DefaultBoundedRangeModel implements } } + int downloadThreadsAmount = Integer.parseInt((String) uiDialog.getDownloadThreadsCombo().getSelectedItem()); + if (proxy != null) { logger.info("Started download of " + cardsDownloadQueue.size() + " images" + " from source: " + selectedSource.getSourceName() - + ", language: " + selectedSource.getCurrentLanguage().getCode()); + + ", language: " + selectedSource.getCurrentLanguage().getCode() + + ", threads: " + downloadThreadsAmount); uiDialog.getProgressBar().setString("Preparing download list..."); if (selectedSource.prepareDownloadList(this, cardsDownloadQueue)) { update(0, cardsDownloadQueue.size()); - int numberOfThreads = Integer.parseInt(PreferencesDialog.getCachedValue(PreferencesDialog.KEY_CARD_IMAGES_THREADS, PreferencesDialog.KEY_CARD_IMAGES_THREADS_DEFAULT)); - ExecutorService executor = Executors.newFixedThreadPool(numberOfThreads); + ExecutorService executor = Executors.newFixedThreadPool(downloadThreadsAmount); for (int i = 0; i < cardsDownloadQueue.size() && !this.isNeedCancel(); i++) { try { CardDownloadData card = cardsDownloadQueue.get(i); From fbcdeeb2a892181f4f9899db6084d5e47b13ccd5 Mon Sep 17 00:00:00 2001 From: Oleg Agafonov Date: Sat, 8 Aug 2020 10:08:22 +0400 Subject: [PATCH 169/182] Tests: added verify test to check wrong scryfall download settings; --- .../java/mage/verify/VerifyCardDataTest.java | 50 +++++++++++++++---- 1 file changed, 40 insertions(+), 10 deletions(-) diff --git a/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java b/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java index d821855a241..bcde89e5494 100644 --- a/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java +++ b/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java @@ -26,6 +26,7 @@ import org.apache.log4j.Logger; import org.junit.Assert; import org.junit.Ignore; import org.junit.Test; +import org.mage.plugins.card.dl.sources.ScryfallImageSupportCards; import org.mage.plugins.card.images.CardDownloadData; import org.mage.plugins.card.images.DownloadPicturesService; import org.reflections.Reflections; @@ -89,6 +90,7 @@ public class VerifyCardDataTest { private static final String SKIP_LIST_MISSING_ABILITIES = "MISSING_ABILITIES"; private static final String SKIP_LIST_DOUBLE_RARE = "DOUBLE_RARE"; private static final String SKIP_LIST_INVALID_SETS = "INVALID_SETS"; + private static final String SKIP_LIST_SCRYFALL_DOWNLOAD_SETS = "SCRYFALL_DOWNLOAD_SETS"; static { // skip lists for checks (example: unstable cards with same name may have different stats) @@ -196,6 +198,9 @@ public class VerifyCardDataTest { skipListAddName(SKIP_LIST_INVALID_SETS, "AMH1"); // Modern Horizons Art Series skipListAddName(SKIP_LIST_INVALID_SETS, "PTG"); // Ponies: The Galloping + // scryfall download sets (missing from scryfall website) + skipListCreate(SKIP_LIST_SCRYFALL_DOWNLOAD_SETS); + skipListAddName(SKIP_LIST_SCRYFALL_DOWNLOAD_SETS, "SWS"); // Star Wars } private void warn(Card card, String message) { @@ -370,13 +375,10 @@ public class VerifyCardDataTest { } } - for (String error : errorsList) { - System.out.println(error); - } - // unique cards stats - System.out.println("Total unique cards: " + classesIndex.size() + ", total non unique cards (reprints): " + totalCards); + errorsList.add("Total unique cards: " + classesIndex.size() + ", total non unique cards (reprints): " + totalCards); + printMessages(errorsList); if (errorsList.size() > 0) { Assert.fail("DB has wrong card classes, found errors: " + errorsList.size()); } @@ -409,9 +411,7 @@ public class VerifyCardDataTest { } // only warnings - for (String error : errorsList) { - System.out.println(error); - } + printMessages(errorsList); } @Test @@ -444,8 +444,8 @@ public class VerifyCardDataTest { DeckCardLists deckCards = DeckImporter.importDeckFromFile(deckFile.toString(), deckErrors); if (!deckErrors.toString().isEmpty()) { - errorsList.add("Error: sample contains errors " + deckName); - System.out.println("Errors in sample file " + deckName + ":\n" + deckErrors.toString()); + errorsList.add("Error: sample deck contains errors " + deckName); + System.out.println("Errors in sample deck " + deckName + ":\n" + deckErrors.toString()); totalErrorFiles++; continue; } @@ -463,6 +463,36 @@ public class VerifyCardDataTest { } } + @Test + public void test_checkMissingScryfallSettings() { + Collection errorsList = new ArrayList<>(); + + Collection xmageSets = Sets.getInstance().values(); + Set scryfallSets = ScryfallImageSupportCards.getSupportedSets(); + + // missing + for (ExpansionSet set : xmageSets) { + if (skipListHaveName(SKIP_LIST_SCRYFALL_DOWNLOAD_SETS, set.getCode())) + continue; + + if (!scryfallSets.contains(set.getCode())) { + errorsList.add("Error: scryfall download missing setting: " + set.getCode() + " - " + set.getName()); + } + } + + // unknown + for (String scryfallCode : scryfallSets) { + if (xmageSets.stream().noneMatch(e -> e.getCode().equals(scryfallCode))) { + errorsList.add("Error: scryfall download unknown setting: " + scryfallCode); + } + } + + printMessages(errorsList); + if (errorsList.size() > 0) { + Assert.fail("Found scryfall download errors: " + errorsList.size()); + } + } + private Object createNewObject(Class clazz) { try { Constructor cons = clazz.getConstructor(); From f746d4d8d2a69804ce0514fcd5bde7b9a973a71d Mon Sep 17 00:00:00 2001 From: Oleg Agafonov Date: Sat, 8 Aug 2020 10:14:17 +0400 Subject: [PATCH 170/182] Images download: * removed duplicated set (Clash Pack); * added images download for Eighth Edition Box, Ninth Edition Box; --- .../java/mage/client/cards/DragCardGrid.java | 4 ++- .../dl/sources/ScryfallImageSupportCards.java | 5 +++ Mage.Sets/src/mage/sets/ClashPack.java | 36 ------------------- Mage.Sets/src/mage/sets/EighthEdition.java | 4 +++ Mage.Sets/src/mage/sets/EighthEditionBox.java | 4 +-- Mage.Sets/src/mage/sets/NinthEdition.java | 3 ++ 6 files changed, 17 insertions(+), 39 deletions(-) delete mode 100644 Mage.Sets/src/mage/sets/ClashPack.java diff --git a/Mage.Client/src/main/java/mage/client/cards/DragCardGrid.java b/Mage.Client/src/main/java/mage/client/cards/DragCardGrid.java index b98fadfe5ec..231a4feb56d 100644 --- a/Mage.Client/src/main/java/mage/client/cards/DragCardGrid.java +++ b/Mage.Client/src/main/java/mage/client/cards/DragCardGrid.java @@ -1509,7 +1509,9 @@ public class DragCardGrid extends JPanel implements DragCardSource, DragCardTarg Map pimpedCards = new HashMap<>(); pimpedSets.put("CP", 1); pimpedSets.put("MPS", 1); - pimpedSets.put("CLASH", 1); + pimpedSets.put("CP1", 1); + pimpedSets.put("CP2", 1); + pimpedSets.put("CP3", 1); // Judge Reward Gifts pimpedSets.put("JGP", 1); diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java index c77ec42b363..4c51a110d04 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java @@ -487,6 +487,10 @@ public class ScryfallImageSupportCards { add("MPS-AKH"); add("M21"); add("JMP"); + + // + add("8EB"); // Eighth Edition Box + add("9EB"); // Ninth Edition Box } }; @@ -542,6 +546,7 @@ public class ScryfallImageSupportCards { put("DPAP/Soul of Zendikar", "https://api.scryfall.com/cards/pdp14/2/"); // 8th Edition box set and 9th Edition box set + // scryfall stores it with one set, by xmage split into two -- 8ED and 8EB, 9ED and 9EB put("8EB/Eager Cadet", "https://api.scryfall.com/cards/8ed/S1"); put("8EB/Vengeance", "https://api.scryfall.com/cards/8ed/S2"); put("8EB/Giant Octopus", "https://api.scryfall.com/cards/8ed/S3"); diff --git a/Mage.Sets/src/mage/sets/ClashPack.java b/Mage.Sets/src/mage/sets/ClashPack.java deleted file mode 100644 index 93453e15b0e..00000000000 --- a/Mage.Sets/src/mage/sets/ClashPack.java +++ /dev/null @@ -1,36 +0,0 @@ - -package mage.sets; - -import mage.cards.ExpansionSet; -import mage.constants.Rarity; -import mage.constants.SetType; - -/** - * - * @author LevelX2 - */ -public final class ClashPack extends ExpansionSet { - - private static final ClashPack instance = new ClashPack(); - - public static ClashPack getInstance() { - return instance; - } - - private ClashPack() { - super("Clash Pack", "CLASH", ExpansionSet.buildDate(2014, 7, 18), SetType.SUPPLEMENTAL); - this.hasBasicLands = false; - cards.add(new SetCardInfo("Courser of Kruphix", 12, Rarity.SPECIAL, mage.cards.c.CourserOfKruphix.class)); - cards.add(new SetCardInfo("Fated Intervention", 2, Rarity.SPECIAL, mage.cards.f.FatedIntervention.class)); - cards.add(new SetCardInfo("Font of Fertility", 3, Rarity.SPECIAL, mage.cards.f.FontOfFertility.class)); - cards.add(new SetCardInfo("Hero's Downfall", 8, Rarity.SPECIAL, mage.cards.h.HerosDownfall.class)); - cards.add(new SetCardInfo("Hydra Broodmaster", 4, Rarity.SPECIAL, mage.cards.h.HydraBroodmaster.class)); - cards.add(new SetCardInfo("Necropolis Fiend", 7, Rarity.SPECIAL, mage.cards.n.NecropolisFiend.class)); - cards.add(new SetCardInfo("Prognostic Sphinx", 1, Rarity.SPECIAL, mage.cards.p.PrognosticSphinx.class)); - cards.add(new SetCardInfo("Prophet of Kruphix", 5, Rarity.SPECIAL, mage.cards.p.ProphetOfKruphix.class)); - cards.add(new SetCardInfo("Reaper of the Wilds", 10, Rarity.SPECIAL, mage.cards.r.ReaperOfTheWilds.class)); - cards.add(new SetCardInfo("Sultai Ascendancy", 9, Rarity.SPECIAL, mage.cards.s.SultaiAscendancy.class)); - cards.add(new SetCardInfo("Temple of Mystery", 6, Rarity.SPECIAL, mage.cards.t.TempleOfMystery.class)); - cards.add(new SetCardInfo("Whip of Erebos", 11, Rarity.SPECIAL, mage.cards.w.WhipOfErebos.class)); - } -} diff --git a/Mage.Sets/src/mage/sets/EighthEdition.java b/Mage.Sets/src/mage/sets/EighthEdition.java index 3d235376c5f..5419781c388 100644 --- a/Mage.Sets/src/mage/sets/EighthEdition.java +++ b/Mage.Sets/src/mage/sets/EighthEdition.java @@ -20,6 +20,10 @@ public final class EighthEdition extends ExpansionSet { this.numBoosterUncommon = 3; this.numBoosterRare = 1; this.ratioBoosterMythic = 0; + + // scryfall combines Eighth Edition and Eighth Edition Box sets in one, but xmage must split it + // reason: remove box's cards from booster? TODO: implement booster ignore settings for cards instead max card number + cards.add(new SetCardInfo("Abyssal Specter", 117, Rarity.UNCOMMON, mage.cards.a.AbyssalSpecter.class)); cards.add(new SetCardInfo("Air Elemental", 59, Rarity.UNCOMMON, mage.cards.a.AirElemental.class)); cards.add(new SetCardInfo("Aladdin's Ring", 291, Rarity.RARE, mage.cards.a.AladdinsRing.class)); diff --git a/Mage.Sets/src/mage/sets/EighthEditionBox.java b/Mage.Sets/src/mage/sets/EighthEditionBox.java index 84cf11a524d..1f6c51aa42d 100644 --- a/Mage.Sets/src/mage/sets/EighthEditionBox.java +++ b/Mage.Sets/src/mage/sets/EighthEditionBox.java @@ -13,11 +13,11 @@ public final class EighthEditionBox extends ExpansionSet { } private EighthEditionBox() { - super("EighthEditionBox", "8EB", ExpansionSet.buildDate(2003, 7, 28), SetType.CORE); + super("Eighth Edition Box", "8EB", ExpansionSet.buildDate(2003, 7, 28), SetType.CORE); this.hasBoosters = false; this.hasBasicLands = false; - // // http://www.magiclibrarities.net/540-rarities-eighth-edition-box-set-cards-english-cards-index.html + // http://www.magiclibrarities.net/540-rarities-eighth-edition-box-set-cards-english-cards-index.html cards.add(new SetCardInfo("Eager Cadet", 1, Rarity.COMMON, mage.cards.e.EagerCadet.class)); cards.add(new SetCardInfo("Vengeance", 2, Rarity.UNCOMMON, mage.cards.v.Vengeance.class)); cards.add(new SetCardInfo("Giant Octopus", 3, Rarity.COMMON, mage.cards.g.GiantOctopus.class)); diff --git a/Mage.Sets/src/mage/sets/NinthEdition.java b/Mage.Sets/src/mage/sets/NinthEdition.java index 93759bbb0f3..3d8882d91ac 100644 --- a/Mage.Sets/src/mage/sets/NinthEdition.java +++ b/Mage.Sets/src/mage/sets/NinthEdition.java @@ -21,6 +21,9 @@ public final class NinthEdition extends ExpansionSet { this.numBoosterRare = 1; this.ratioBoosterMythic = 0; + // scryfall combines Ninth Edition and Ninth Edition Box sets in one, but xmage must split it + // reason: remove box's cards from booster? TODO: implement booster ignore settings for cards instead max card number + cards.add(new SetCardInfo("Adarkar Wastes", 317, Rarity.RARE, mage.cards.a.AdarkarWastes.class)); cards.add(new SetCardInfo("Air Elemental", 58, Rarity.UNCOMMON, mage.cards.a.AirElemental.class)); cards.add(new SetCardInfo("Aladdin's Ring", 286, Rarity.RARE, mage.cards.a.AladdinsRing.class)); From 7599acf1c8b9f2d6d354366bc06aafe13cb597c5 Mon Sep 17 00:00:00 2001 From: Oleg Agafonov Date: Sat, 8 Aug 2020 11:00:07 +0400 Subject: [PATCH 171/182] Removed duplicated sets that was split into multiple (Champs, Game Day, Launch Party, Media Inserts, Super Series) --- .../java/mage/client/cards/DragCardGrid.java | 9 +- .../plugins/card/dl/sources/GathererSets.java | 8 +- .../dl/sources/ScryfallImageSupportCards.java | 15 +- .../dl/sources/WizardCardsImageSource.java | 5 +- .../src/main/resources/card-pictures-tok.txt | 16 +- .../src/mage/deck/OldSchool9394CFB.java | 23 +- .../src/mage/deck/OldSchool9394EC.java | 23 +- Mage.Sets/src/mage/sets/Champs.java | 37 --- Mage.Sets/src/mage/sets/GameDay.java | 87 ------- .../src/mage/sets/HistoricAnthology1.java | 4 +- Mage.Sets/src/mage/sets/LaunchParty.java | 68 ------ Mage.Sets/src/mage/sets/MagazineInserts.java | 52 ++--- Mage.Sets/src/mage/sets/MediaInserts.java | 214 ------------------ Mage.Sets/src/mage/sets/SuperSeries.java | 55 ----- .../src/main/java/mage/verify/MtgJson.java | 6 - .../mage/game/permanent/token/CatToken.java | 2 +- .../token/ElementalTokenWithHaste.java | 2 +- 17 files changed, 71 insertions(+), 555 deletions(-) delete mode 100644 Mage.Sets/src/mage/sets/Champs.java delete mode 100644 Mage.Sets/src/mage/sets/GameDay.java delete mode 100644 Mage.Sets/src/mage/sets/LaunchParty.java delete mode 100644 Mage.Sets/src/mage/sets/MediaInserts.java delete mode 100644 Mage.Sets/src/mage/sets/SuperSeries.java diff --git a/Mage.Client/src/main/java/mage/client/cards/DragCardGrid.java b/Mage.Client/src/main/java/mage/client/cards/DragCardGrid.java index 231a4feb56d..31ec55a1460 100644 --- a/Mage.Client/src/main/java/mage/client/cards/DragCardGrid.java +++ b/Mage.Client/src/main/java/mage/client/cards/DragCardGrid.java @@ -1507,7 +1507,7 @@ public class DragCardGrid extends JPanel implements DragCardSource, DragCardTarg // TODO: Why are these a HashMap? It can be a HashSet instead, as the value is never used in the code. Map pimpedSets = new HashMap<>(); Map pimpedCards = new HashMap<>(); - pimpedSets.put("CP", 1); + pimpedSets.put("PCMP", 1); pimpedSets.put("MPS", 1); pimpedSets.put("CP1", 1); pimpedSets.put("CP2", 1); @@ -1593,15 +1593,12 @@ public class DragCardGrid extends JPanel implements DragCardSource, DragCardTarg pimpedSets.put("PGTW", 1); // Gateway 2006 pimpedSets.put("PJAS", 1); // Junior APAC Series - pimpedSets.put("MGDC", 1); pimpedSets.put("EXP", 1); pimpedSets.put("PGPX", 1); - pimpedSets.put("GRC", 1); - pimpedSets.put("MBP", 1); - pimpedSets.put("MLP", 1); + pimpedSets.put("PMEI", 1); + pimpedSets.put("PREL", 1); pimpedSets.put("PLS", 1); pimpedSets.put("PPRE", 1); - pimpedSets.put("SUS", 1); String[] sets = pimpedSets.keySet().toArray(new String[pimpedSets.keySet().size()]); Boolean didModify = false; diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/GathererSets.java b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/GathererSets.java index 11aee196d4f..aa4427da800 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/GathererSets.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/GathererSets.java @@ -1,8 +1,5 @@ package org.mage.plugins.card.dl.sources; -import java.io.File; -import java.util.*; - import mage.cards.ExpansionSet; import mage.cards.Sets; import mage.client.constants.Constants; @@ -10,6 +7,9 @@ import mage.constants.Rarity; import org.apache.log4j.Logger; import org.mage.plugins.card.dl.DownloadJob; +import java.io.File; +import java.util.*; + import static org.mage.plugins.card.dl.DownloadJob.fromURL; import static org.mage.plugins.card.dl.DownloadJob.toFile; import static org.mage.plugins.card.utils.CardImageUtils.getImagesDir; @@ -63,7 +63,7 @@ public class GathererSets implements Iterable { "W16", "W17", // "PALP" -- Gatherer does not have the set Asia Pacific Land Program // "ATH" -- has cards from many sets, symbol does not exist on gatherer - // "CLASH", "CP", "DPA", "PELP", "PGPX", "GRC", "PGRU", "H17", "JR", "MBP", "MGDC", "MLP", "PPRE", "SUS", "SWS", "WMCQ", // need to fix + // "CP", "DPA", "PELP", "PGPX", "PGRU", "H17", "JR", "PPRE", "SWS", "WMCQ", // need to fix "H09", "PD2", "PD3", "UNH", "CM1", "V11", "A25", "UST", "IMA", "DD2", "EVG", "DDC", "DDE", "DDD", "8EB", "9EB", "CHR", "G18", "GVL", "S00", "S99", "UGL" // ok // current testing }; diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java index 4c51a110d04..e015de24b79 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java @@ -3,7 +3,10 @@ package org.mage.plugins.card.dl.sources; import com.google.common.collect.ImmutableMap; import org.tritonus.share.ArraySet; -import java.util.*; +import java.util.HashMap; +import java.util.Locale; +import java.util.Map; +import java.util.Set; /** @@ -12,8 +15,8 @@ import java.util.*; public class ScryfallImageSupportCards { private static final Map xmageSetsToScryfall = ImmutableMap.builder(). - put("MBP", "pmei"). - build(); + //put("xmage", "scryfall"). + build(); private static final Set supportedSets = new ArraySet() { @@ -156,6 +159,7 @@ public class ScryfallImageSupportCards { add("PG07"); // Gateway 2007 //add("PMPS07"); // Magic Premiere Shop 2007 add("P07"); // Magic Player Rewards 2007 + add("HHO"); // Happy Holidays add("G07"); // Judge Gift Cards 2007 add("F07"); // Friday Night Magic 2007 add("PLC"); // Planar Chaos @@ -466,10 +470,10 @@ public class ScryfallImageSupportCards { add("PMEI"); // Magazine Inserts add("SLU"); // Secret Lair: Ultimate Edition //add("SS3"); // Signature Spellbook: Chandra + add("HA3"); // Historic Anthology 3 // TODO: DuelsOfThePlaneswalkersPromos add("DPAP"); - add("GRC"); // // add("TD0"); // Commander Theme Decks // add("TD2"); // Duel Decks: Mirrodin Pure vs. New Phyrexia @@ -482,8 +486,6 @@ public class ScryfallImageSupportCards { add("IKO"); add("C20"); // - add("EURO"); - add("GPX"); add("MPS-AKH"); add("M21"); add("JMP"); @@ -563,7 +565,6 @@ public class ScryfallImageSupportCards { put("9EB/Goblin Raider", "https://api.scryfall.com/cards/9ed/S8"); put("9EB/Enormous Baloth", "https://api.scryfall.com/cards/9ed/S9"); put("9EB/Spined Wurm", "https://api.scryfall.com/cards/9ed/S10"); - } }; diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/WizardCardsImageSource.java b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/WizardCardsImageSource.java index 368b6e7f791..eb108334ab7 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/WizardCardsImageSource.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/WizardCardsImageSource.java @@ -339,7 +339,6 @@ public enum WizardCardsImageSource implements CardImageSource { setsAliases.put("FUT", "Future Sight"); setsAliases.put("GPT", "Guildpact"); setsAliases.put("PGPX", "Grand Prix"); - setsAliases.put("GRC", "WPN Gateway"); setsAliases.put("GTC", "Gatecrash"); setsAliases.put("H09", "Premium Deck Series: Slivers"); setsAliases.put("HML", "Homelands"); @@ -365,15 +364,13 @@ public enum WizardCardsImageSource implements CardImageSource { setsAliases.put("M13", "Magic 2013"); setsAliases.put("M14", "Magic 2014"); setsAliases.put("M15", "Magic 2015"); - setsAliases.put("MBP", "Media Inserts"); + setsAliases.put("PMEI", "Media Inserts"); setsAliases.put("MBS", "Mirrodin Besieged"); setsAliases.put("ME2", "Masters Edition II"); setsAliases.put("ME3", "Masters Edition III"); setsAliases.put("ME4", "Masters Edition IV"); setsAliases.put("MED", "Masters Edition"); -// setsAliases.put("MGDC", "Game Day"); setsAliases.put("MIR", "Mirage"); - setsAliases.put("MLP", "Launch Party"); setsAliases.put("MMA", "Modern Masters"); setsAliases.put("MM2", "Modern Masters 2015"); setsAliases.put("MM3", "Modern Masters 2017"); diff --git a/Mage.Client/src/main/resources/card-pictures-tok.txt b/Mage.Client/src/main/resources/card-pictures-tok.txt index 7e055342ceb..0ac253ec007 100644 --- a/Mage.Client/src/main/resources/card-pictures-tok.txt +++ b/Mage.Client/src/main/resources/card-pictures-tok.txt @@ -23,16 +23,12 @@ #|Generate|TOK:JR|Faerie Rogue|| #|Generate|TOK:JR|Soldier|| #|Generate|TOK:JR|Squirrel|| -#|Generate|TOK:MBP:Beast|| -#|Generate|TOK:MBP|Cat|| -#|Generate|TOK:MBP|Dragon|| -#|Generate|TOK:MBP|Elephant|| -#|Generate|TOK:MBP|Goblin|| -#|Generate|TOK:MBP|Zombie|| -#|Generate|TOK:MGDC|Centaur|| -#|Generate|TOK:MGDC|Knight|| -#|Generate|TOK:MGDC|Rhino|| -#|Generate|TOK:MGDC|Sliver|| +#|Generate|TOK:PMEI|Beast|| +#|Generate|TOK:PMEI|Cat|| +#|Generate|TOK:PMEI|Dragon|| +#|Generate|TOK:PMEI|Elephant|| +#|Generate|TOK:PMEI|Goblin|| +#|Generate|TOK:PMEI|Zombie|| #|Generate|TOK:MLP|Thopter|| #|Generate|TOK:PPRE|Angel|| #|Generate|TOK:PPRE|Avatar|| diff --git a/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/OldSchool9394CFB.java b/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/OldSchool9394CFB.java index 36dfa55fcec..a9f38181ac9 100644 --- a/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/OldSchool9394CFB.java +++ b/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/OldSchool9394CFB.java @@ -1,28 +1,24 @@ - package mage.deck; -import mage.cards.ExpansionSet; -import mage.cards.Sets; import mage.cards.decks.Constructed; -import mage.constants.SetType; /** * This class validates a deck for the Old School 93/94 format, specifically for * the Channel Fireball Rules. - * + *

* This was originally made to follow the deck construction rules found at the * Old School Mtg blog found at: * http://oldschool-mtg.blogspot.com/p/banrestriction.html - * + *

* There is no mana burn in this version of old school * * @author jmharmon */ public class OldSchool9394CFB extends Constructed { - + public OldSchool9394CFB() { super("Constructed - Old School 93/94 - Channel Fireball Rules"); - + // use the set instances to make sure that we get the correct set codes setCodes.add(mage.sets.LimitedEditionAlpha.getInstance().getCode()); setCodes.add(mage.sets.LimitedEditionBeta.getInstance().getCode()); @@ -32,8 +28,7 @@ public class OldSchool9394CFB extends Constructed { setCodes.add(mage.sets.Legends.getInstance().getCode()); setCodes.add(mage.sets.TheDark.getInstance().getCode()); setCodes.add(mage.sets.FallenEmpires.getInstance().getCode()); - setCodes.add(mage.sets.MediaInserts.getInstance().getCode()); - + // ante cards and conspiracies banned, with specifically mentioned ones called out. banned.add("Advantageous Proclamation"); banned.add("Amulet of Quoz"); @@ -57,8 +52,8 @@ public class OldSchool9394CFB extends Constructed { banned.add("Timmerian Fiends"); banned.add("Unexpected Potential"); banned.add("Worldknit"); - - //Let Media Inserts Arena and Sewers of Estark being only cards playable + + //Let Media Inserts Arena and Sewers of Estark being only cards playable banned.add("Acquire"); banned.add("Aeronaut Tinkerer"); banned.add("Ajani, Caller of the Pride"); @@ -241,7 +236,7 @@ public class OldSchool9394CFB extends Constructed { banned.add("Wash Out"); banned.add("Wildfire Eternal"); banned.add("Xathrid Necromancer"); - + restricted.add("Ancestral Recall"); restricted.add("Balance"); restricted.add("Black Lotus"); @@ -265,6 +260,6 @@ public class OldSchool9394CFB extends Constructed { restricted.add("Time Vault"); restricted.add("Time Walk"); restricted.add("Timetwister"); - restricted.add("Wheel of Fortune"); + restricted.add("Wheel of Fortune"); } } diff --git a/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/OldSchool9394EC.java b/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/OldSchool9394EC.java index b502c7d6788..49a5cf564a7 100644 --- a/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/OldSchool9394EC.java +++ b/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/OldSchool9394EC.java @@ -1,28 +1,24 @@ - package mage.deck; -import mage.cards.ExpansionSet; -import mage.cards.Sets; import mage.cards.decks.Constructed; -import mage.constants.SetType; /** * This class validates a deck for the Old School 93/94 format, specifically for * the EC Rules. - * + *

* This was originally made to follow the deck construction rules found at the * Old School Mtg blog found at: * http://oldschool-mtg.blogspot.com/p/banrestriction.html - * + *

* There is no mana burn in this version of old school * * @author jmharmon */ public class OldSchool9394EC extends Constructed { - + public OldSchool9394EC() { super("Constructed - Old School 93/94 - EC Rules"); - + // use the set instances to make sure that we get the correct set codes setCodes.add(mage.sets.LimitedEditionAlpha.getInstance().getCode()); setCodes.add(mage.sets.LimitedEditionBeta.getInstance().getCode()); @@ -32,8 +28,7 @@ public class OldSchool9394EC extends Constructed { setCodes.add(mage.sets.Legends.getInstance().getCode()); setCodes.add(mage.sets.TheDark.getInstance().getCode()); setCodes.add(mage.sets.FallenEmpires.getInstance().getCode()); - setCodes.add(mage.sets.MediaInserts.getInstance().getCode()); - + // ante cards and conspiracies banned, with specifically mentioned ones called out. banned.add("Advantageous Proclamation"); banned.add("Amulet of Quoz"); @@ -58,7 +53,7 @@ public class OldSchool9394EC extends Constructed { banned.add("Timmerian Fiends"); banned.add("Unexpected Potential"); banned.add("Worldknit"); - + //Let Media Inserts Arena and Sewers of Estark being only cards playable banned.add("Acquire"); banned.add("Aeronaut Tinkerer"); @@ -242,7 +237,7 @@ public class OldSchool9394EC extends Constructed { banned.add("Wash Out"); banned.add("Wildfire Eternal"); banned.add("Xathrid Necromancer"); - + restricted.add("Ancestral Recall"); restricted.add("Balance"); restricted.add("Black Lotus"); @@ -265,7 +260,7 @@ public class OldSchool9394EC extends Constructed { restricted.add("Time Vault"); restricted.add("Time Walk"); restricted.add("Timetwister"); - restricted.add("Wheel of Fortune"); + restricted.add("Wheel of Fortune"); } - + } diff --git a/Mage.Sets/src/mage/sets/Champs.java b/Mage.Sets/src/mage/sets/Champs.java deleted file mode 100644 index f748aa9a94c..00000000000 --- a/Mage.Sets/src/mage/sets/Champs.java +++ /dev/null @@ -1,37 +0,0 @@ - -package mage.sets; - -import mage.cards.ExpansionSet; -import mage.constants.Rarity; -import mage.constants.SetType; - -/** - * @author fireshoes - */ -public final class Champs extends ExpansionSet { - - private static final Champs instance = new Champs(); - - public static Champs getInstance() { - return instance; - } - - private Champs() { - super("Champs", "CP", ExpansionSet.buildDate(2006, 3, 18), SetType.PROMOTIONAL); - this.hasBoosters = false; - this.hasBasicLands = false; - - cards.add(new SetCardInfo("Blood Knight", 7, Rarity.SPECIAL, mage.cards.b.BloodKnight.class)); - cards.add(new SetCardInfo("Bramblewood Paragon", 11, Rarity.SPECIAL, mage.cards.b.BramblewoodParagon.class)); - cards.add(new SetCardInfo("Doran, the Siege Tower", 10, Rarity.SPECIAL, mage.cards.d.DoranTheSiegeTower.class)); - cards.add(new SetCardInfo("Electrolyze", 1, Rarity.SPECIAL, mage.cards.e.Electrolyze.class)); - cards.add(new SetCardInfo("Groundbreaker", 8, Rarity.SPECIAL, mage.cards.g.Groundbreaker.class)); - cards.add(new SetCardInfo("Imperious Perfect", 9, Rarity.SPECIAL, mage.cards.i.ImperiousPerfect.class)); - cards.add(new SetCardInfo("Mutavault", 12, Rarity.SPECIAL, mage.cards.m.Mutavault.class)); - cards.add(new SetCardInfo("Niv-Mizzet, the Firemind", 2, Rarity.SPECIAL, mage.cards.n.NivMizzetTheFiremind.class)); - cards.add(new SetCardInfo("Rakdos Guildmage", 3, Rarity.SPECIAL, mage.cards.r.RakdosGuildmage.class)); - cards.add(new SetCardInfo("Serra Avenger", 6, Rarity.SPECIAL, mage.cards.s.SerraAvenger.class)); - cards.add(new SetCardInfo("Urza's Factory", 5, Rarity.SPECIAL, mage.cards.u.UrzasFactory.class)); - cards.add(new SetCardInfo("Voidslime", 4, Rarity.SPECIAL, mage.cards.v.Voidslime.class)); - } -} diff --git a/Mage.Sets/src/mage/sets/GameDay.java b/Mage.Sets/src/mage/sets/GameDay.java deleted file mode 100644 index df57b04118e..00000000000 --- a/Mage.Sets/src/mage/sets/GameDay.java +++ /dev/null @@ -1,87 +0,0 @@ - -package mage.sets; - -import mage.cards.ExpansionSet; -import mage.constants.Rarity; -import mage.constants.SetType; - -/** - * - * @author fireshoes - */ -public final class GameDay extends ExpansionSet { - - private static final GameDay instance = new GameDay(); - - public static GameDay getInstance() { - return instance; - } - - private GameDay() { - super("Game Day", "MGDC", ExpansionSet.buildDate(2011, 6, 17), SetType.PROMOTIONAL); - this.hasBoosters = false; - this.hasBasicLands = false; - cards.add(new SetCardInfo("Abrade", 62, Rarity.UNCOMMON, mage.cards.a.Abrade.class)); - cards.add(new SetCardInfo("Adorned Pouncer", 61, Rarity.RARE, mage.cards.a.AdornedPouncer.class)); - cards.add(new SetCardInfo("Anguished Unmaking", 52, Rarity.RARE, mage.cards.a.AnguishedUnmaking.class)); - cards.add(new SetCardInfo("Black Sun's Zenith", 7, Rarity.RARE, mage.cards.b.BlackSunsZenith.class)); - cards.add(new SetCardInfo("Chief Engineer", 40, Rarity.RARE, mage.cards.c.ChiefEngineer.class)); - cards.add(new SetCardInfo("Conclave Naturalists", 45, Rarity.UNCOMMON, mage.cards.c.ConclaveNaturalists.class)); - cards.add(new SetCardInfo("Cryptborn Horror", 22, Rarity.RARE, mage.cards.c.CryptbornHorror.class)); - cards.add(new SetCardInfo("Cultivator of Blades", 56, Rarity.RARE, mage.cards.c.CultivatorOfBlades.class)); - cards.add(new SetCardInfo("Dictate of Kruphix", 35, Rarity.RARE, mage.cards.d.DictateOfKruphix.class)); - cards.add(new SetCardInfo("Diregraf Ghoul", 12, Rarity.UNCOMMON, mage.cards.d.DiregrafGhoul.class)); - cards.add(new SetCardInfo("Dryad Militant", 23, Rarity.UNCOMMON, mage.cards.d.DryadMilitant.class)); - cards.add(new SetCardInfo("Dungrove Elder", 11, Rarity.RARE, mage.cards.d.DungroveElder.class)); - cards.add(new SetCardInfo("Elite Inquisitor", 13, Rarity.RARE, mage.cards.e.EliteInquisitor.class)); - cards.add(new SetCardInfo("Essence Extraction", 55, Rarity.UNCOMMON, mage.cards.e.EssenceExtraction.class)); - cards.add(new SetCardInfo("Firemane Avenger", 24, Rarity.RARE, mage.cards.f.FiremaneAvenger.class)); - cards.add(new SetCardInfo("Glorybringer", 60, Rarity.RARE, mage.cards.g.Glorybringer.class)); - cards.add(new SetCardInfo("Goblin Diplomats", 29, Rarity.RARE, mage.cards.g.GoblinDiplomats.class)); - cards.add(new SetCardInfo("Hall of Triumph", 36, Rarity.RARE, mage.cards.h.HallOfTriumph.class)); - cards.add(new SetCardInfo("Heir of the Wilds", 37, Rarity.UNCOMMON, mage.cards.h.HeirOfTheWilds.class)); - cards.add(new SetCardInfo("Heron's Grace Champion", 54, Rarity.RARE, mage.cards.h.HeronsGraceChampion.class)); - cards.add(new SetCardInfo("Hive Stirrings", 28, Rarity.COMMON, mage.cards.h.HiveStirrings.class)); - cards.add(new SetCardInfo("Immolating Glare", 49, Rarity.UNCOMMON, mage.cards.i.ImmolatingGlare.class)); - cards.add(new SetCardInfo("Incorrigible Youths", 51, Rarity.UNCOMMON, mage.cards.i.IncorrigibleYouths.class)); - cards.add(new SetCardInfo("Jori En, Ruin Diver", 50, Rarity.RARE, mage.cards.j.JoriEnRuinDiver.class)); - cards.add(new SetCardInfo("Killing Wave", 19, Rarity.RARE, mage.cards.k.KillingWave.class)); - cards.add(new SetCardInfo("Kiora's Follower", 33, Rarity.UNCOMMON, mage.cards.k.KiorasFollower.class)); - cards.add(new SetCardInfo("Languish", 46, Rarity.RARE, mage.cards.l.Languish.class)); - cards.add(new SetCardInfo("Latch Seeker", 18, Rarity.UNCOMMON, mage.cards.l.LatchSeeker.class)); - cards.add(new SetCardInfo("Liliana's Specter", 2, Rarity.COMMON, mage.cards.l.LilianasSpecter.class)); - cards.add(new SetCardInfo("Magmaquake", 20, Rarity.RARE, mage.cards.m.Magmaquake.class)); - cards.add(new SetCardInfo("Mardu Shadowspear", 41, Rarity.UNCOMMON, mage.cards.m.MarduShadowspear.class)); - cards.add(new SetCardInfo("Melek, Izzet Paragon", 26, Rarity.RARE, mage.cards.m.MelekIzzetParagon.class)); - cards.add(new SetCardInfo("Memnite", 4, Rarity.UNCOMMON, mage.cards.m.Memnite.class)); - cards.add(new SetCardInfo("Mitotic Slime", 3, Rarity.RARE, mage.cards.m.MitoticSlime.class)); - cards.add(new SetCardInfo("Mwonvuli Beast Tracker", 21, Rarity.UNCOMMON, mage.cards.m.MwonvuliBeastTracker.class)); - cards.add(new SetCardInfo("Myr Superion", 8, Rarity.RARE, mage.cards.m.MyrSuperion.class)); - cards.add(new SetCardInfo("Nighthowler", 31, Rarity.RARE, mage.cards.n.Nighthowler.class)); - cards.add(new SetCardInfo("Pain Seer", 32, Rarity.RARE, mage.cards.p.PainSeer.class)); - cards.add(new SetCardInfo("Phalanx Leader", 30, Rarity.UNCOMMON, mage.cards.p.PhalanxLeader.class)); - cards.add(new SetCardInfo("Priest of Urabrask", 9, Rarity.UNCOMMON, mage.cards.p.PriestOfUrabrask.class)); - cards.add(new SetCardInfo("Pristine Talisman", 17, Rarity.COMMON, mage.cards.p.PristineTalisman.class)); - cards.add(new SetCardInfo("Radiant Flames", 48, Rarity.RARE, mage.cards.r.RadiantFlames.class)); - cards.add(new SetCardInfo("Reclamation Sage", 39, Rarity.UNCOMMON, mage.cards.r.ReclamationSage.class)); - cards.add(new SetCardInfo("Reya Dawnbringer", 1, Rarity.RARE, mage.cards.r.ReyaDawnbringer.class)); - cards.add(new SetCardInfo("Scaleguard Sentinels", 44, Rarity.UNCOMMON, mage.cards.s.ScaleguardSentinels.class)); - cards.add(new SetCardInfo("Squelching Leeches", 34, Rarity.UNCOMMON, mage.cards.s.SquelchingLeeches.class)); - cards.add(new SetCardInfo("Stasis Snare", 47, Rarity.UNCOMMON, mage.cards.s.StasisSnare.class)); - cards.add(new SetCardInfo("Stormblood Berserker", 10, Rarity.UNCOMMON, mage.cards.s.StormbloodBerserker.class)); - cards.add(new SetCardInfo("Strangleroot Geist", 15, Rarity.UNCOMMON, mage.cards.s.StranglerootGeist.class)); - cards.add(new SetCardInfo("Supplant Form", 42, Rarity.RARE, mage.cards.s.SupplantForm.class)); - cards.add(new SetCardInfo("Suture Priest", 16, Rarity.COMMON, mage.cards.s.SuturePriest.class)); - cards.add(new SetCardInfo("Tempered Steel", 5, Rarity.RARE, mage.cards.t.TemperedSteel.class)); - cards.add(new SetCardInfo("Thunderbreak Regent", 43, Rarity.RARE, mage.cards.t.ThunderbreakRegent.class)); - cards.add(new SetCardInfo("Treasure Mage", 6, Rarity.UNCOMMON, mage.cards.t.TreasureMage.class)); - cards.add(new SetCardInfo("Trophy Mage", 57, Rarity.UNCOMMON, mage.cards.t.TrophyMage.class)); - cards.add(new SetCardInfo("Trostani's Summoner", 27, Rarity.UNCOMMON, mage.cards.t.TrostanisSummoner.class)); - cards.add(new SetCardInfo("Trueheart Duelist", 59, Rarity.UNCOMMON, mage.cards.t.TrueheartDuelist.class)); - cards.add(new SetCardInfo("Unsubstantiate", 53, Rarity.UNCOMMON, mage.cards.u.Unsubstantiate.class)); - cards.add(new SetCardInfo("Utter End", 38, Rarity.RARE, mage.cards.u.UtterEnd.class)); - cards.add(new SetCardInfo("Yahenni's Expertise", 58, Rarity.RARE, mage.cards.y.YahennisExpertise.class)); - cards.add(new SetCardInfo("Zameck Guildmage", 25, Rarity.UNCOMMON, mage.cards.z.ZameckGuildmage.class)); - cards.add(new SetCardInfo("Zombie Apocalypse", 14, Rarity.RARE, mage.cards.z.ZombieApocalypse.class)); - } -} diff --git a/Mage.Sets/src/mage/sets/HistoricAnthology1.java b/Mage.Sets/src/mage/sets/HistoricAnthology1.java index 1dffb2f824f..00e75d31a96 100644 --- a/Mage.Sets/src/mage/sets/HistoricAnthology1.java +++ b/Mage.Sets/src/mage/sets/HistoricAnthology1.java @@ -6,6 +6,7 @@ import mage.constants.SetType; /** * https://scryfall.com/sets/ha1 + * * @author mikalinn777 */ public final class HistoricAnthology1 extends ExpansionSet { @@ -20,6 +21,7 @@ public final class HistoricAnthology1 extends ExpansionSet { super("Historic Anthology 1", "HA1", ExpansionSet.buildDate(2019, 11, 21), SetType.MAGIC_ONLINE); this.hasBoosters = false; this.hasBasicLands = false; + cards.add(new SetCardInfo("Burning Tree Emissary", 16, Rarity.UNCOMMON, mage.cards.b.BurningTreeEmissary.class)); cards.add(new SetCardInfo("Captain Sisay", 17, Rarity.RARE, mage.cards.c.CaptainSisay.class)); cards.add(new SetCardInfo("Cryptbreaker", 6, Rarity.RARE, mage.cards.c.Cryptbreaker.class)); @@ -40,5 +42,5 @@ public final class HistoricAnthology1 extends ExpansionSet { cards.add(new SetCardInfo("Soul Warden", 2, Rarity.COMMON, mage.cards.s.SoulWarden.class)); cards.add(new SetCardInfo("Tendrils of Corruption", 9, Rarity.COMMON, mage.cards.t.TendrilsOfCorruption.class)); cards.add(new SetCardInfo("Treasure Hunt", 4, Rarity.COMMON, mage.cards.t.TreasureHunt.class)); - } + } } diff --git a/Mage.Sets/src/mage/sets/LaunchParty.java b/Mage.Sets/src/mage/sets/LaunchParty.java deleted file mode 100644 index acf35454e16..00000000000 --- a/Mage.Sets/src/mage/sets/LaunchParty.java +++ /dev/null @@ -1,68 +0,0 @@ - -package mage.sets; - -import mage.cards.ExpansionSet; -import mage.constants.Rarity; -import mage.constants.SetType; - -/** - * - * @author fireshoes - */ -public final class LaunchParty extends ExpansionSet { - - private static final LaunchParty instance = new LaunchParty(); - - public static LaunchParty getInstance() { - return instance; - } - - private LaunchParty() { - super("Launch Party", "MLP", ExpansionSet.buildDate(2011, 6, 17), SetType.PROMOTIONAL); - this.hasBoosters = false; - this.hasBasicLands = false; - cards.add(new SetCardInfo("Ajani Vengeant", 4, Rarity.MYTHIC, mage.cards.a.AjaniVengeant.class)); - cards.add(new SetCardInfo("Ancient Hellkite", 11, Rarity.RARE, mage.cards.a.AncientHellkite.class)); - cards.add(new SetCardInfo("Angel of Deliverance", 35, Rarity.RARE, mage.cards.a.AngelOfDeliverance.class)); - cards.add(new SetCardInfo("Ant Queen", 7, Rarity.RARE, mage.cards.a.AntQueen.class)); - cards.add(new SetCardInfo("Bident of Thassa", 24, Rarity.RARE, mage.cards.b.BidentOfThassa.class)); - cards.add(new SetCardInfo("Bishop of Rebirth", 41, Rarity.RARE, mage.cards.b.BishopOfRebirth.class)); - cards.add(new SetCardInfo("Blight Herder", 32, Rarity.RARE, mage.cards.b.BlightHerder.class)); - cards.add(new SetCardInfo("Breaking // Entering", 22, Rarity.RARE, mage.cards.b.BreakingEntering.class)); - cards.add(new SetCardInfo("Colossal Whale", 23, Rarity.RARE, mage.cards.c.ColossalWhale.class)); - cards.add(new SetCardInfo("Deadbridge Goliath", 20, Rarity.RARE, mage.cards.d.DeadbridgeGoliath.class)); - cards.add(new SetCardInfo("Deathbringer Regent", 30, Rarity.RARE, mage.cards.d.DeathbringerRegent.class)); - cards.add(new SetCardInfo("Dictate of the Twin Gods", 26, Rarity.RARE, mage.cards.d.DictateOfTheTwinGods.class)); - cards.add(new SetCardInfo("Dragon Throne of Tarkir", 27, Rarity.RARE, mage.cards.d.DragonThroneOfTarkir.class)); - cards.add(new SetCardInfo("Earwig Squad", 1, Rarity.RARE, mage.cards.e.EarwigSquad.class)); - cards.add(new SetCardInfo("Endbringer", 34, Rarity.RARE, mage.cards.e.Endbringer.class)); - cards.add(new SetCardInfo("Figure of Destiny", 3, Rarity.RARE, mage.cards.f.FigureOfDestiny.class)); - cards.add(new SetCardInfo("Garruk's Horde", 15, Rarity.RARE, mage.cards.g.GarruksHorde.class)); - cards.add(new SetCardInfo("Identity Thief", 33, Rarity.RARE, mage.cards.i.IdentityThief.class)); - cards.add(new SetCardInfo("In Garruk's Wake", 28, Rarity.RARE, mage.cards.i.InGarruksWake.class)); - cards.add(new SetCardInfo("Joraga Warcaller", 9, Rarity.RARE, mage.cards.j.JoragaWarcaller.class)); - cards.add(new SetCardInfo("Knight of New Alara", 6, Rarity.RARE, mage.cards.k.KnightOfNewAlara.class)); - cards.add(new SetCardInfo("Lord of Shatterskull Pass", 10, Rarity.RARE, mage.cards.l.LordOfShatterskullPass.class)); - cards.add(new SetCardInfo("Ludevic's Abomination", 1064, Rarity.RARE, mage.cards.l.LudevicsAbomination.class)); - cards.add(new SetCardInfo("Ludevic's Test Subject", 16, Rarity.RARE, mage.cards.l.LudevicsTestSubject.class)); - cards.add(new SetCardInfo("Mizzium Meddler", 31, Rarity.RARE, mage.cards.m.MizziumMeddler.class)); - cards.add(new SetCardInfo("Mondronen Shaman", 17, Rarity.RARE, mage.cards.m.MondronenShaman.class)); - cards.add(new SetCardInfo("Obelisk of Alara", 5, Rarity.RARE, mage.cards.o.ObeliskOfAlara.class)); - cards.add(new SetCardInfo("Oracle's Vault", 39, Rarity.RARE, mage.cards.o.OraclesVault.class)); - cards.add(new SetCardInfo("Phyrexian Metamorph", 14, Rarity.RARE, mage.cards.p.PhyrexianMetamorph.class)); - cards.add(new SetCardInfo("Quicksmith Rebel", 38, Rarity.RARE, mage.cards.q.QuicksmithRebel.class)); - cards.add(new SetCardInfo("Ramunap Excavator", 40, Rarity.RARE, mage.cards.r.RamunapExcavator.class)); - cards.add(new SetCardInfo("Restoration Angel", 18, Rarity.RARE, mage.cards.r.RestorationAngel.class)); - cards.add(new SetCardInfo("Saheeli's Artistry", 37, Rarity.RARE, mage.cards.s.SaheelisArtistry.class)); - cards.add(new SetCardInfo("Sandsteppe Mastodon", 29, Rarity.RARE, mage.cards.s.SandsteppeMastodon.class)); - cards.add(new SetCardInfo("Skarrg Goliath", 21, Rarity.RARE, mage.cards.s.SkarrgGoliath.class)); - cards.add(new SetCardInfo("Staff of Nin", 19, Rarity.RARE, mage.cards.s.StaffOfNin.class)); - cards.add(new SetCardInfo("Steel Hellkite", 12, Rarity.RARE, mage.cards.s.SteelHellkite.class)); - cards.add(new SetCardInfo("Thopter Assembly", 13, Rarity.RARE, mage.cards.t.ThopterAssembly.class)); - cards.add(new SetCardInfo("Tovolar's Magehunter", 98, Rarity.RARE, mage.cards.t.TovolarsMagehunter.class)); - cards.add(new SetCardInfo("Tromokratis", 25, Rarity.RARE, mage.cards.t.Tromokratis.class)); - cards.add(new SetCardInfo("Valakut, the Molten Pinnacle", 8, Rarity.RARE, mage.cards.v.ValakutTheMoltenPinnacle.class)); - cards.add(new SetCardInfo("Vexing Shusher", 2, Rarity.RARE, mage.cards.v.VexingShusher.class)); - } - -} diff --git a/Mage.Sets/src/mage/sets/MagazineInserts.java b/Mage.Sets/src/mage/sets/MagazineInserts.java index 277dd699be2..64156daf9e4 100644 --- a/Mage.Sets/src/mage/sets/MagazineInserts.java +++ b/Mage.Sets/src/mage/sets/MagazineInserts.java @@ -20,39 +20,39 @@ public class MagazineInserts extends ExpansionSet { this.hasBoosters = false; this.hasBasicLands = false; - // Commented cards are non-English printings (most are Japanese, Jamuraan Lion has a German printing) + // some cards are non-English (most are Japanese, Jamuraan Lion has a German printing), but it's ok - scryfall can download it - //cards.add(new SetCardInfo("Archangel", 29, Rarity.RARE, mage.cards.a.Archangel.class)); - //cards.add(new SetCardInfo("Ascendant Evincar", 28, Rarity.RARE, mage.cards.a.AscendantEvincar.class)); + cards.add(new SetCardInfo("Archangel", 29, Rarity.RARE, mage.cards.a.Archangel.class)); + cards.add(new SetCardInfo("Ascendant Evincar", 28, Rarity.RARE, mage.cards.a.AscendantEvincar.class)); cards.add(new SetCardInfo("Blue Elemental Blast", 5, Rarity.COMMON, mage.cards.b.BlueElementalBlast.class)); - //cards.add(new SetCardInfo("Cast Down", 30, Rarity.UNCOMMON, mage.cards.c.CastDown.class)); - //cards.add(new SetCardInfo("Chandra's Outrage", 18, Rarity.COMMON, mage.cards.c.ChandrasOutrage.class)); - //cards.add(new SetCardInfo("Chandra's Spitfire", 19, Rarity.UNCOMMON, mage.cards.c.ChandrasSpitfire.class)); - //cards.add(new SetCardInfo("Cunning Sparkmage", 17, Rarity.UNCOMMON, mage.cards.c.CunningSparkmage.class)); - //cards.add(new SetCardInfo("Darksteel Juggernaut", 16, Rarity.RARE, mage.cards.d.DarksteelJuggernaut.class)); - //cards.add(new SetCardInfo("Daxos, Blessed by the Sun", 36, Rarity.UNCOMMON, mage.cards.d.DaxosBlessedByTheSun.class)); - //cards.add(new SetCardInfo("Diabolic Edict", 31, Rarity.RARE, mage.cards.d.DiabolicEdict.class)); - //cards.add(new SetCardInfo("Duress", 34, Rarity.RARE, mage.cards.d.Duress.class)); + cards.add(new SetCardInfo("Cast Down", 30, Rarity.UNCOMMON, mage.cards.c.CastDown.class)); + cards.add(new SetCardInfo("Chandra's Outrage", 18, Rarity.COMMON, mage.cards.c.ChandrasOutrage.class)); + cards.add(new SetCardInfo("Chandra's Spitfire", 19, Rarity.UNCOMMON, mage.cards.c.ChandrasSpitfire.class)); + cards.add(new SetCardInfo("Cunning Sparkmage", 17, Rarity.UNCOMMON, mage.cards.c.CunningSparkmage.class)); + cards.add(new SetCardInfo("Darksteel Juggernaut", 16, Rarity.RARE, mage.cards.d.DarksteelJuggernaut.class)); + cards.add(new SetCardInfo("Daxos, Blessed by the Sun", 36, Rarity.UNCOMMON, mage.cards.d.DaxosBlessedByTheSun.class)); + cards.add(new SetCardInfo("Diabolic Edict", 31, Rarity.RARE, mage.cards.d.DiabolicEdict.class)); + cards.add(new SetCardInfo("Duress", 34, Rarity.RARE, mage.cards.d.Duress.class)); cards.add(new SetCardInfo("Fireball", 4, Rarity.COMMON, mage.cards.f.Fireball.class)); - //cards.add(new SetCardInfo("Jamuraan Lion", "10*", Rarity.COMMON, mage.cards.j.JamuraanLion.class)); - //cards.add(new SetCardInfo("Kuldotha Phoenix", 20, Rarity.RARE, mage.cards.k.KuldothaPhoenix.class)); - //cards.add(new SetCardInfo("Lava Coil", 33, Rarity.UNCOMMON, mage.cards.l.LavaCoil.class)); + cards.add(new SetCardInfo("Jamuraan Lion", "10*", Rarity.COMMON, mage.cards.j.JamuraanLion.class)); + cards.add(new SetCardInfo("Kuldotha Phoenix", 20, Rarity.RARE, mage.cards.k.KuldothaPhoenix.class)); + cards.add(new SetCardInfo("Lava Coil", 33, Rarity.UNCOMMON, mage.cards.l.LavaCoil.class)); cards.add(new SetCardInfo("Lightning Hounds", 10, Rarity.COMMON, mage.cards.l.LightningHounds.class)); - //cards.add(new SetCardInfo("Parallax Dementia", 27, Rarity.COMMON, mage.cards.p.ParallaxDementia.class)); - //cards.add(new SetCardInfo("Phantasmal Dragon", 21, Rarity.UNCOMMON, mage.cards.p.PhantasmalDragon.class)); + cards.add(new SetCardInfo("Parallax Dementia", 27, Rarity.COMMON, mage.cards.p.ParallaxDementia.class)); + cards.add(new SetCardInfo("Phantasmal Dragon", 21, Rarity.UNCOMMON, mage.cards.p.PhantasmalDragon.class)); cards.add(new SetCardInfo("Phyrexian Rager", 14, Rarity.COMMON, mage.cards.p.PhyrexianRager.class)); - //cards.add(new SetCardInfo("Sandbar Crocodile", 22, Rarity.COMMON, mage.cards.s.SandbarCrocodile.class)); + cards.add(new SetCardInfo("Sandbar Crocodile", 22, Rarity.COMMON, mage.cards.s.SandbarCrocodile.class)); cards.add(new SetCardInfo("Scent of Cinder", 9, Rarity.COMMON, mage.cards.s.ScentOfCinder.class)); - //cards.add(new SetCardInfo("Shivan Dragon", 15, Rarity.RARE, mage.cards.s.ShivanDragon.class)); - //cards.add(new SetCardInfo("Shock", 32, Rarity.RARE, mage.cards.s.Shock.class)); - //cards.add(new SetCardInfo("Shrieking Drake", 24, Rarity.COMMON, mage.cards.s.ShriekingDrake.class)); + cards.add(new SetCardInfo("Shivan Dragon", 15, Rarity.RARE, mage.cards.s.ShivanDragon.class)); + cards.add(new SetCardInfo("Shock", 32, Rarity.RARE, mage.cards.s.Shock.class)); + cards.add(new SetCardInfo("Shrieking Drake", 24, Rarity.COMMON, mage.cards.s.ShriekingDrake.class)); cards.add(new SetCardInfo("Silver Drake", 13, Rarity.COMMON, mage.cards.s.SilverDrake.class)); cards.add(new SetCardInfo("Spined Wurm", 11, Rarity.COMMON, mage.cards.s.SpinedWurm.class)); - //cards.add(new SetCardInfo("Staggering Insight", 37, Rarity.RARE, mage.cards.s.StaggeringInsight.class)); - //cards.add(new SetCardInfo("Stream of Life", 25, Rarity.COMMON, mage.cards.s.StreamOfLife.class)); - //cards.add(new SetCardInfo("Thorn Elemental", 26, Rarity.RARE, mage.cards.t.ThornElemental.class)); - //cards.add(new SetCardInfo("Voltaic Key", 35, Rarity.RARE, mage.cards.v.VoltaicKey.class)); + cards.add(new SetCardInfo("Staggering Insight", 37, Rarity.RARE, mage.cards.s.StaggeringInsight.class)); + cards.add(new SetCardInfo("Stream of Life", 25, Rarity.COMMON, mage.cards.s.StreamOfLife.class)); + cards.add(new SetCardInfo("Thorn Elemental", 26, Rarity.RARE, mage.cards.t.ThornElemental.class)); + cards.add(new SetCardInfo("Voltaic Key", 35, Rarity.RARE, mage.cards.v.VoltaicKey.class)); cards.add(new SetCardInfo("Warmonger", 12, Rarity.UNCOMMON, mage.cards.w.Warmonger.class)); - //cards.add(new SetCardInfo("Zhalfirin Knight", 23, Rarity.COMMON, mage.cards.z.ZhalfirinKnight.class)); - } + cards.add(new SetCardInfo("Zhalfirin Knight", 23, Rarity.COMMON, mage.cards.z.ZhalfirinKnight.class)); + } } diff --git a/Mage.Sets/src/mage/sets/MediaInserts.java b/Mage.Sets/src/mage/sets/MediaInserts.java deleted file mode 100644 index 4fd1d0397ef..00000000000 --- a/Mage.Sets/src/mage/sets/MediaInserts.java +++ /dev/null @@ -1,214 +0,0 @@ - -package mage.sets; - -import mage.cards.ExpansionSet; -import mage.constants.Rarity; -import mage.constants.SetType; - -/** - * This looks like it is an aggregate set - * @deprecated - */ -public final class MediaInserts extends ExpansionSet { - - private static final MediaInserts instance = new MediaInserts(); - - public static MediaInserts getInstance() { - return instance; - } - - private MediaInserts() { - super("Media Inserts", "MBP", ExpansionSet.buildDate(1990, 1, 1), SetType.PROMOTIONAL); - this.hasBoosters = false; - this.hasBasicLands = false; - - cards.add(new SetCardInfo("Acquire", 83, Rarity.RARE, mage.cards.a.Acquire.class)); - cards.add(new SetCardInfo("Aeronaut Tinkerer", 118, Rarity.COMMON, mage.cards.a.AeronautTinkerer.class)); - cards.add(new SetCardInfo("Ajani, Caller of the Pride", 72, Rarity.MYTHIC, mage.cards.a.AjaniCallerOfThePride.class)); - cards.add(new SetCardInfo("Ajani Steadfast", 99, Rarity.MYTHIC, mage.cards.a.AjaniSteadfast.class)); - cards.add(new SetCardInfo("Alhammarret, High Arbiter", 124, Rarity.SPECIAL, mage.cards.a.AlhammarretHighArbiter.class)); - cards.add(new SetCardInfo("Angelic Skirmisher", 90, Rarity.RARE, mage.cards.a.AngelicSkirmisher.class)); - cards.add(new SetCardInfo("Angel of Glory's Rise", 59, Rarity.RARE, mage.cards.a.AngelOfGlorysRise.class)); - cards.add(new SetCardInfo("Ankle Shanker", 93, Rarity.RARE, mage.cards.a.AnkleShanker.class)); - cards.add(new SetCardInfo("Arashin Sovereign", 112, Rarity.SPECIAL, mage.cards.a.ArashinSovereign.class)); - cards.add(new SetCardInfo("Archfiend of Depravity", 109, Rarity.SPECIAL, mage.cards.a.ArchfiendOfDepravity.class)); - cards.add(new SetCardInfo("Archfiend of Ifnir", 165, Rarity.RARE, mage.cards.a.ArchfiendOfIfnir.class)); - cards.add(new SetCardInfo("Arena", 1, Rarity.SPECIAL, mage.cards.a.Arena.class)); - cards.add(new SetCardInfo("Arrest", 53, Rarity.COMMON, mage.cards.a.Arrest.class)); - cards.add(new SetCardInfo("Assembled Alphas", 160, Rarity.RARE, mage.cards.a.AssembledAlphas.class)); - cards.add(new SetCardInfo("Avalanche Tusker", 94, Rarity.RARE, mage.cards.a.AvalancheTusker.class)); - cards.add(new SetCardInfo("Barrage Tyrant", 139, Rarity.SPECIAL, mage.cards.b.BarrageTyrant.class)); - cards.add(new SetCardInfo("Birds of Paradise", 28, Rarity.RARE, mage.cards.b.BirdsOfParadise.class)); - cards.add(new SetCardInfo("Bloodthrone Vampire", 31, Rarity.COMMON, mage.cards.b.BloodthroneVampire.class)); - cards.add(new SetCardInfo("Blue Elemental Blast", 5, Rarity.COMMON, mage.cards.b.BlueElementalBlast.class)); - cards.add(new SetCardInfo("Boltwing Marauder", 115, Rarity.SPECIAL, mage.cards.b.BoltwingMarauder.class)); - cards.add(new SetCardInfo("Bonescythe Sliver", 68, Rarity.RARE, mage.cards.b.BonescytheSliver.class)); - cards.add(new SetCardInfo("Breath of Malfegor", 58, Rarity.COMMON, mage.cards.b.BreathOfMalfegor.class)); - cards.add(new SetCardInfo("Brion Stoutarm", 17, Rarity.RARE, mage.cards.b.BrionStoutarm.class)); - cards.add(new SetCardInfo("Broodmate Dragon", 19, Rarity.RARE, mage.cards.b.BroodmateDragon.class)); - cards.add(new SetCardInfo("Burning Sun's Avatar", 183, Rarity.RARE, mage.cards.b.BurningSunsAvatar.class)); - cards.add(new SetCardInfo("Canopy Vista", 167, Rarity.RARE, mage.cards.c.CanopyVista.class)); - cards.add(new SetCardInfo("Cathedral of War", 51, Rarity.RARE, mage.cards.c.CathedralOfWar.class)); - cards.add(new SetCardInfo("Celestial Colonnade", 23, Rarity.SPECIAL, mage.cards.c.CelestialColonnade.class)); - cards.add(new SetCardInfo("Chandra, Fire of Kaladesh", 997, Rarity.SPECIAL, mage.cards.c.ChandraFireOfKaladesh.class)); - cards.add(new SetCardInfo("Chandra, Flamecaller", 175, Rarity.MYTHIC, mage.cards.c.ChandraFlamecaller.class)); - cards.add(new SetCardInfo("Chandra, Pyromaster", 75, Rarity.MYTHIC, mage.cards.c.ChandraPyromaster.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Chandra, Pyromaster", 102, Rarity.MYTHIC, mage.cards.c.ChandraPyromaster.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Chandra, Roaring Flame", 997, Rarity.SPECIAL, mage.cards.c.ChandraRoaringFlame.class)); - cards.add(new SetCardInfo("Chandra, Torch of Defiance", 180, Rarity.MYTHIC, mage.cards.c.ChandraTorchOfDefiance.class)); - cards.add(new SetCardInfo("Chandra's Fury", 65, Rarity.COMMON, mage.cards.c.ChandrasFury.class)); - cards.add(new SetCardInfo("Chandra's Phoenix", 37, Rarity.RARE, mage.cards.c.ChandrasPhoenix.class)); - cards.add(new SetCardInfo("Cinder Glade", 168, Rarity.RARE, mage.cards.c.CinderGlade.class)); - cards.add(new SetCardInfo("Consume Spirit", 54, Rarity.UNCOMMON, mage.cards.c.ConsumeSpirit.class)); - cards.add(new SetCardInfo("Corrupt", 64, Rarity.UNCOMMON, mage.cards.c.Corrupt.class)); - cards.add(new SetCardInfo("Day of Judgment", 22, Rarity.RARE, mage.cards.d.DayOfJudgment.class)); - cards.add(new SetCardInfo("Deepfathom Skulker", 144, Rarity.RARE, mage.cards.d.DeepfathomSkulker.class)); - cards.add(new SetCardInfo("Defiant Bloodlord", 138, Rarity.SPECIAL, mage.cards.d.DefiantBloodlord.class)); - cards.add(new SetCardInfo("Devil's Play", 40, Rarity.RARE, mage.cards.d.DevilsPlay.class)); - cards.add(new SetCardInfo("Dragon Fodder", 119, Rarity.COMMON, mage.cards.d.DragonFodder.class)); - cards.add(new SetCardInfo("Dragonlord's Servant", 120, Rarity.SPECIAL, mage.cards.d.DragonlordsServant.class)); - cards.add(new SetCardInfo("Dragonscale General", 107, Rarity.SPECIAL, mage.cards.d.DragonscaleGeneral.class)); - cards.add(new SetCardInfo("Dread Defiler", 145, Rarity.RARE, mage.cards.d.DreadDefiler.class)); - cards.add(new SetCardInfo("Dreg Mangler", 55, Rarity.UNCOMMON, mage.cards.d.DregMangler.class)); - cards.add(new SetCardInfo("Drogskol Cavalry", 149, Rarity.RARE, mage.cards.d.DrogskolCavalry.class)); - cards.add(new SetCardInfo("Dromoka, the Eternal", 132, Rarity.SPECIAL, mage.cards.d.DromokaTheEternal.class)); - cards.add(new SetCardInfo("Drowner of Hope", 137, Rarity.SPECIAL, mage.cards.d.DrownerOfHope.class)); - cards.add(new SetCardInfo("Duress", 84, Rarity.COMMON, mage.cards.d.Duress.class)); - cards.add(new SetCardInfo("Dwynen, Gilt-Leaf Daen", 125, Rarity.SPECIAL, mage.cards.d.DwynenGiltLeafDaen.class)); - cards.add(new SetCardInfo("Eidolon of Blossoms", 85, Rarity.RARE, mage.cards.e.EidolonOfBlossoms.class)); - cards.add(new SetCardInfo("Electrolyze", 42, Rarity.UNCOMMON, mage.cards.e.Electrolyze.class)); - cards.add(new SetCardInfo("Elusive Tormentor", 154, Rarity.RARE, mage.cards.e.ElusiveTormentor.class)); - cards.add(new SetCardInfo("Emrakul, the Aeons Torn", 163, Rarity.MYTHIC, mage.cards.e.EmrakulTheAeonsTorn.class)); - cards.add(new SetCardInfo("Evolving Wilds", 121, Rarity.COMMON, mage.cards.e.EvolvingWilds.class)); - cards.add(new SetCardInfo("Faithless Looting", 39, Rarity.COMMON, mage.cards.f.FaithlessLooting.class)); - cards.add(new SetCardInfo("Fated Conflagration", 79, Rarity.RARE, mage.cards.f.FatedConflagration.class)); - cards.add(new SetCardInfo("Feast of Blood", 43, Rarity.UNCOMMON, mage.cards.f.FeastOfBlood.class)); - cards.add(new SetCardInfo("Fireball", 4, Rarity.COMMON, mage.cards.f.Fireball.class)); - cards.add(new SetCardInfo("Flameblade Angel", 152, Rarity.RARE, mage.cards.f.FlamebladeAngel.class)); - cards.add(new SetCardInfo("Flamerush Rider", 110, Rarity.SPECIAL, mage.cards.f.FlamerushRider.class)); - cards.add(new SetCardInfo("Foe-Razer Regent", 122, Rarity.SPECIAL, mage.cards.f.FoeRazerRegent.class)); - cards.add(new SetCardInfo("Frost Titan", 34, Rarity.MYTHIC, mage.cards.f.FrostTitan.class)); - cards.add(new SetCardInfo("Garruk, Apex Predator", 104, Rarity.MYTHIC, mage.cards.g.GarrukApexPredator.class)); - cards.add(new SetCardInfo("Garruk, Caller of Beasts", 76, Rarity.MYTHIC, mage.cards.g.GarrukCallerOfBeasts.class)); - cards.add(new SetCardInfo("Garruk Wildspeaker", 16, Rarity.RARE, mage.cards.g.GarrukWildspeaker.class)); - cards.add(new SetCardInfo("Gaze of Granite", 81, Rarity.RARE, mage.cards.g.GazeOfGranite.class)); - cards.add(new SetCardInfo("Genesis Hydra", 142, Rarity.SPECIAL, mage.cards.g.GenesisHydra.class)); - cards.add(new SetCardInfo("Gideon of the Trials", 177, Rarity.MYTHIC, mage.cards.g.GideonOfTheTrials.class)); - cards.add(new SetCardInfo("Gideon, Ally of Zendikar", 172, Rarity.MYTHIC, mage.cards.g.GideonAllyOfZendikar.class)); - cards.add(new SetCardInfo("Gideon, Battle-Forged", 994, Rarity.SPECIAL, mage.cards.g.GideonBattleForged.class)); - cards.add(new SetCardInfo("Gladehart Cavalry", 147, Rarity.RARE, mage.cards.g.GladehartCavalry.class)); - cards.add(new SetCardInfo("Goblin Dark-Dwellers", 148, Rarity.RARE, mage.cards.g.GoblinDarkDwellers.class)); - cards.add(new SetCardInfo("Goblin Rabblemaster", 98, Rarity.RARE, mage.cards.g.GoblinRabblemaster.class)); - cards.add(new SetCardInfo("Gravecrawler", 41, Rarity.RARE, mage.cards.g.Gravecrawler.class)); - cards.add(new SetCardInfo("Grave Titan", 35, Rarity.MYTHIC, mage.cards.g.GraveTitan.class)); - cards.add(new SetCardInfo("Guul Draz Assassin", 26, Rarity.RARE, mage.cards.g.GuulDrazAssassin.class)); - cards.add(new SetCardInfo("Hamletback Goliath", 71, Rarity.RARE, mage.cards.h.HamletbackGoliath.class)); - cards.add(new SetCardInfo("Harbinger of the Hunt", 116, Rarity.SPECIAL, mage.cards.h.HarbingerOfTheHunt.class)); - cards.add(new SetCardInfo("Hero of Goma Fada", 136, Rarity.SPECIAL, mage.cards.h.HeroOfGomaFada.class)); - cards.add(new SetCardInfo("High Tide", 80, Rarity.COMMON, mage.cards.h.HighTide.class)); - cards.add(new SetCardInfo("Hixus, Prison Warden", 126, Rarity.SPECIAL, mage.cards.h.HixusPrisonWarden.class)); - cards.add(new SetCardInfo("Honored Hierarch", 129, Rarity.SPECIAL, mage.cards.h.HonoredHierarch.class)); - cards.add(new SetCardInfo("Honor of the Pure", 20, Rarity.RARE, mage.cards.h.HonorOfThePure.class)); - cards.add(new SetCardInfo("Inferno Titan", 36, Rarity.MYTHIC, mage.cards.i.InfernoTitan.class)); - cards.add(new SetCardInfo("Insidious Mist", 154, Rarity.RARE, mage.cards.i.InsidiousMist.class)); - cards.add(new SetCardInfo("Ivorytusk Fortress", 95, Rarity.RARE, mage.cards.i.IvorytuskFortress.class)); - cards.add(new SetCardInfo("Jace Beleren", 15, Rarity.RARE, mage.cards.j.JaceBeleren.class)); - cards.add(new SetCardInfo("Jace, Memory Adept", 73, Rarity.MYTHIC, mage.cards.j.JaceMemoryAdept.class)); - cards.add(new SetCardInfo("Jace, Telepath Unbound", 995, Rarity.SPECIAL, mage.cards.j.JaceTelepathUnbound.class)); - cards.add(new SetCardInfo("Jace, the Living Guildpact", 100, Rarity.MYTHIC, mage.cards.j.JaceTheLivingGuildpact.class)); - cards.add(new SetCardInfo("Jace, Unraveler of Secrets", 173, Rarity.MYTHIC, mage.cards.j.JaceUnravelerOfSecrets.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Jace, Unraveler of Secrets", 178, Rarity.MYTHIC, mage.cards.j.JaceUnravelerOfSecrets.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Jace, Vryn's Prodigy", 995, Rarity.SPECIAL, mage.cards.j.JaceVrynsProdigy.class)); - cards.add(new SetCardInfo("Jaya Ballard, Task Mage", 18, Rarity.RARE, mage.cards.j.JayaBallardTaskMage.class)); - cards.add(new SetCardInfo("Karametra's Acolyte", 78, Rarity.UNCOMMON, mage.cards.k.KarametrasAcolyte.class)); - cards.add(new SetCardInfo("Knight Exemplar", 46, Rarity.RARE, mage.cards.k.KnightExemplar.class)); - cards.add(new SetCardInfo("Kor Skyfisher", 25, Rarity.COMMON, mage.cards.k.KorSkyfisher.class)); - cards.add(new SetCardInfo("Kothophed, Soul Hoarder", 127, Rarity.SPECIAL, mage.cards.k.KothophedSoulHoarder.class)); - cards.add(new SetCardInfo("Kytheon, Hero of Akros", 994, Rarity.SPECIAL, mage.cards.k.KytheonHeroOfAkros.class)); - cards.add(new SetCardInfo("Lightning Hounds", 10, Rarity.SPECIAL, mage.cards.l.LightningHounds.class)); - cards.add(new SetCardInfo("Liliana of the Dark Realms", 74, Rarity.MYTHIC, mage.cards.l.LilianaOfTheDarkRealms.class)); - cards.add(new SetCardInfo("Liliana, Death's Majesty", 179, Rarity.MYTHIC, mage.cards.l.LilianaDeathsMajesty.class)); - cards.add(new SetCardInfo("Liliana, Defiant Necromancer", 996, Rarity.SPECIAL, mage.cards.l.LilianaDefiantNecromancer.class)); - cards.add(new SetCardInfo("Liliana, the Last Hope", 174, Rarity.MYTHIC, mage.cards.l.LilianaTheLastHope.class)); - cards.add(new SetCardInfo("Liliana Vess", 30, Rarity.RARE, mage.cards.l.LilianaVess.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Liliana Vess", 101, Rarity.MYTHIC, mage.cards.l.LilianaVess.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Magister of Worth", 86, Rarity.SPECIAL, mage.cards.m.MagisterOfWorth.class)); - cards.add(new SetCardInfo("Markov Dreadknight", 151, Rarity.RARE, mage.cards.m.MarkovDreadknight.class)); - cards.add(new SetCardInfo("Memoricide", 29, Rarity.RARE, mage.cards.m.Memoricide.class)); - cards.add(new SetCardInfo("Merfolk Mesmerist", 45, Rarity.COMMON, mage.cards.m.MerfolkMesmerist.class)); - cards.add(new SetCardInfo("Mirran Crusader", 32, Rarity.RARE, mage.cards.m.MirranCrusader.class)); - cards.add(new SetCardInfo("Munda's Vanguard", 143, Rarity.RARE, mage.cards.m.MundasVanguard.class)); - cards.add(new SetCardInfo("Necromaster Dragon", 114, Rarity.SPECIAL, mage.cards.n.NecromasterDragon.class)); - cards.add(new SetCardInfo("Nephalia Moondrakes", 150, Rarity.RARE, mage.cards.n.NephaliaMoondrakes.class)); - cards.add(new SetCardInfo("Niblis of Frost", 158, Rarity.RARE, mage.cards.n.NiblisOfFrost.class)); - cards.add(new SetCardInfo("Nicol Bolas, God-Pharaoh", 181, Rarity.MYTHIC, mage.cards.n.NicolBolasGodPharaoh.class)); - cards.add(new SetCardInfo("Nightveil Specter", 61, Rarity.RARE, mage.cards.n.NightveilSpecter.class)); - cards.add(new SetCardInfo("Nissa Revane", 27, Rarity.MYTHIC, mage.cards.n.NissaRevane.class)); - cards.add(new SetCardInfo("Nissa, Sage Animist", 998, Rarity.SPECIAL, mage.cards.n.NissaSageAnimist.class)); - cards.add(new SetCardInfo("Nissa, Steward of Elements", 182, Rarity.MYTHIC, mage.cards.n.NissaStewardOfElements.class)); - cards.add(new SetCardInfo("Nissa, Vastwood Seer", 998, Rarity.SPECIAL, mage.cards.n.NissaVastwoodSeer.class)); - cards.add(new SetCardInfo("Nissa, Voice of Zendikar", 176, Rarity.MYTHIC, mage.cards.n.NissaVoiceOfZendikar.class)); - cards.add(new SetCardInfo("Nissa, Worldwaker", 103, Rarity.MYTHIC, mage.cards.n.NissaWorldwaker.class)); - cards.add(new SetCardInfo("Noosegraf Mob", 159, Rarity.RARE, mage.cards.n.NoosegrafMob.class)); - cards.add(new SetCardInfo("Ogre Arsonist", 63, Rarity.SPECIAL, mage.cards.o.OgreArsonist.class)); - cards.add(new SetCardInfo("Ogre Battledriver", 69, Rarity.RARE, mage.cards.o.OgreBattledriver.class)); - cards.add(new SetCardInfo("Ojutai's Command", 106, Rarity.SPECIAL, mage.cards.o.OjutaisCommand.class)); - cards.add(new SetCardInfo("Oran-Rief Hydra", 140, Rarity.SPECIAL, mage.cards.o.OranRiefHydra.class)); - cards.add(new SetCardInfo("Phyrexian Rager", 14, Rarity.COMMON, mage.cards.p.PhyrexianRager.class)); - cards.add(new SetCardInfo("Pia and Kiran Nalaar", 128, Rarity.SPECIAL, mage.cards.p.PiaAndKiranNalaar.class)); - cards.add(new SetCardInfo("Prairie Stream", 169, Rarity.RARE, mage.cards.p.PrairieStream.class)); - cards.add(new SetCardInfo("Primordial Hydra", 49, Rarity.MYTHIC, mage.cards.p.PrimordialHydra.class)); - cards.add(new SetCardInfo("Pristine Skywise", 113, Rarity.SPECIAL, mage.cards.p.PristineSkywise.class)); - cards.add(new SetCardInfo("Rakshasa Vizier", 96, Rarity.RARE, mage.cards.r.RakshasaVizier.class)); - cards.add(new SetCardInfo("Ratchet Bomb", 67, Rarity.RARE, mage.cards.r.RatchetBomb.class)); - cards.add(new SetCardInfo("Rattleclaw Mystic", 92, Rarity.RARE, mage.cards.r.RattleclawMystic.class)); - cards.add(new SetCardInfo("Ravenous Bloodseeker", 155, Rarity.UNCOMMON, mage.cards.r.RavenousBloodseeker.class)); - cards.add(new SetCardInfo("Relic Seeker", 123, Rarity.RARE, mage.cards.r.RelicSeeker.class)); - cards.add(new SetCardInfo("Render Silent", 66, Rarity.RARE, mage.cards.r.RenderSilent.class)); - cards.add(new SetCardInfo("Retaliator Griffin", 24, Rarity.RARE, mage.cards.r.RetaliatorGriffin.class)); - cards.add(new SetCardInfo("Ruinous Path", 135, Rarity.SPECIAL, mage.cards.r.RuinousPath.class)); - cards.add(new SetCardInfo("Sage-Eye Avengers", 108, Rarity.SPECIAL, mage.cards.s.SageEyeAvengers.class)); - cards.add(new SetCardInfo("Sage of the Inward Eye", 97, Rarity.RARE, mage.cards.s.SageOfTheInwardEye.class)); - cards.add(new SetCardInfo("Sanctifier of Souls", 157, Rarity.RARE, mage.cards.s.SanctifierOfSouls.class)); - cards.add(new SetCardInfo("Sandsteppe Citadel", 134, Rarity.SPECIAL, mage.cards.s.SandsteppeCitadel.class)); - cards.add(new SetCardInfo("Scavenging Ooze", 70, Rarity.RARE, mage.cards.s.ScavengingOoze.class)); - cards.add(new SetCardInfo("Scent of Cinder", 9, Rarity.SPECIAL, mage.cards.s.ScentOfCinder.class)); - cards.add(new SetCardInfo("Scrap Trawler", 164, Rarity.RARE, mage.cards.s.ScrapTrawler.class)); - cards.add(new SetCardInfo("Scythe Leopard", 141, Rarity.SPECIAL, mage.cards.s.ScytheLeopard.class)); - cards.add(new SetCardInfo("Seeker of the Way", 130, Rarity.SPECIAL, mage.cards.s.SeekerOfTheWay.class)); - cards.add(new SetCardInfo("Serra Avatar", 48, Rarity.MYTHIC, mage.cards.s.SerraAvatar.class)); - cards.add(new SetCardInfo("Shamanic Revelation", 105, Rarity.SPECIAL, mage.cards.s.ShamanicRevelation.class)); - cards.add(new SetCardInfo("Siege Rhino", 133, Rarity.SPECIAL, mage.cards.s.SiegeRhino.class)); - cards.add(new SetCardInfo("Silverblade Paladin", 44, Rarity.RARE, mage.cards.s.SilverbladePaladin.class)); - cards.add(new SetCardInfo("Silver Drake", 13, Rarity.SPECIAL, mage.cards.s.SilverDrake.class)); - cards.add(new SetCardInfo("Skyship Stalker", 162, Rarity.RARE, mage.cards.s.SkyshipStalker.class)); - cards.add(new SetCardInfo("Smoldering Marsh", 170, Rarity.RARE, mage.cards.s.SmolderingMarsh.class)); - cards.add(new SetCardInfo("Soul of Ravnica", 87, Rarity.MYTHIC, mage.cards.s.SoulOfRavnica.class)); - cards.add(new SetCardInfo("Soul of Zendikar", 88, Rarity.MYTHIC, mage.cards.s.SoulOfZendikar.class)); - cards.add(new SetCardInfo("Soul Swallower", 153, Rarity.RARE, mage.cards.s.SoulSwallower.class)); - cards.add(new SetCardInfo("Spined Wurm", 11, Rarity.SPECIAL, mage.cards.s.SpinedWurm.class)); - cards.add(new SetCardInfo("Standstill", 57, Rarity.UNCOMMON, mage.cards.s.Standstill.class)); - cards.add(new SetCardInfo("Stealer of Secrets", 89, Rarity.COMMON, mage.cards.s.StealerOfSecrets.class)); - cards.add(new SetCardInfo("Steward of Valeron", 21, Rarity.COMMON, mage.cards.s.StewardOfValeron.class)); - cards.add(new SetCardInfo("Sultai Charm", 117, Rarity.SPECIAL, mage.cards.s.SultaiCharm.class)); - cards.add(new SetCardInfo("Sunblast Angel", 47, Rarity.RARE, mage.cards.s.SunblastAngel.class)); - cards.add(new SetCardInfo("Sunken Hollow", 171, Rarity.RARE, mage.cards.s.SunkenHollow.class)); - cards.add(new SetCardInfo("Supreme Verdict", 56, Rarity.RARE, mage.cards.s.SupremeVerdict.class)); - cards.add(new SetCardInfo("Surgical Extraction", 33, Rarity.RARE, mage.cards.s.SurgicalExtraction.class)); - cards.add(new SetCardInfo("Sylvan Caryatid", 77, Rarity.RARE, mage.cards.s.SylvanCaryatid.class)); - cards.add(new SetCardInfo("Temur War Shaman", 111, Rarity.SPECIAL, mage.cards.t.TemurWarShaman.class)); - cards.add(new SetCardInfo("Terastodon", 52, Rarity.RARE, mage.cards.t.Terastodon.class)); - cards.add(new SetCardInfo("Thalia, Heretic Cathar", 156, Rarity.RARE, mage.cards.t.ThaliaHereticCathar.class)); - cards.add(new SetCardInfo("Treasure Hunt", 38, Rarity.COMMON, mage.cards.t.TreasureHunt.class)); - cards.add(new SetCardInfo("Turnabout", 60, Rarity.UNCOMMON, mage.cards.t.Turnabout.class)); - cards.add(new SetCardInfo("Tyrant of Valakut", 146, Rarity.RARE, mage.cards.t.TyrantOfValakut.class)); - cards.add(new SetCardInfo("Ulvenwald Observer", 161, Rarity.RARE, mage.cards.u.UlvenwaldObserver.class)); - cards.add(new SetCardInfo("Valorous Stance", 131, Rarity.SPECIAL, mage.cards.v.ValorousStance.class)); - cards.add(new SetCardInfo("Vampire Nocturnus", 50, Rarity.MYTHIC, mage.cards.v.VampireNocturnus.class)); - cards.add(new SetCardInfo("Voidmage Husher", 62, Rarity.SPECIAL, mage.cards.v.VoidmageHusher.class)); - cards.add(new SetCardInfo("Warmonger", 12, Rarity.SPECIAL, mage.cards.w.Warmonger.class)); - cards.add(new SetCardInfo("Wash Out", 82, Rarity.UNCOMMON, mage.cards.w.WashOut.class)); - cards.add(new SetCardInfo("Wildfire Eternal", 166, Rarity.RARE, mage.cards.w.WildfireEternal.class)); - cards.add(new SetCardInfo("Xathrid Necromancer", 91, Rarity.SPECIAL, mage.cards.x.XathridNecromancer.class)); - } -} \ No newline at end of file diff --git a/Mage.Sets/src/mage/sets/SuperSeries.java b/Mage.Sets/src/mage/sets/SuperSeries.java deleted file mode 100644 index c50c19245e2..00000000000 --- a/Mage.Sets/src/mage/sets/SuperSeries.java +++ /dev/null @@ -1,55 +0,0 @@ - -package mage.sets; - -import mage.cards.ExpansionSet; -import mage.constants.Rarity; -import mage.constants.SetType; - -/** - * @author fireshoes - */ -public final class SuperSeries extends ExpansionSet { - - private static final SuperSeries instance = new SuperSeries(); - - public static SuperSeries getInstance() { - return instance; - } - - private SuperSeries() { - super("Super Series", "SUS", ExpansionSet.buildDate(1996, 1, 1), SetType.PROMOTIONAL); - this.hasBoosters = false; - this.hasBasicLands = false; - - cards.add(new SetCardInfo("City of Brass", 6, Rarity.SPECIAL, mage.cards.c.CityOfBrass.class)); - cards.add(new SetCardInfo("Crusade", 4, Rarity.SPECIAL, mage.cards.c.Crusade.class)); - cards.add(new SetCardInfo("Elvish Champion", 17, Rarity.SPECIAL, mage.cards.e.ElvishChampion.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Elvish Champion", 26, Rarity.SPECIAL, mage.cards.e.ElvishChampion.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Elvish Champion", 32, Rarity.SPECIAL, mage.cards.e.ElvishChampion.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Elvish Lyrist", 5, Rarity.COMMON, mage.cards.e.ElvishLyrist.class)); - cards.add(new SetCardInfo("Giant Growth", 8, Rarity.COMMON, mage.cards.g.GiantGrowth.class)); - cards.add(new SetCardInfo("Glorious Anthem", 16, Rarity.SPECIAL, mage.cards.g.GloriousAnthem.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Glorious Anthem", 25, Rarity.SPECIAL, mage.cards.g.GloriousAnthem.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Glorious Anthem", 31, Rarity.SPECIAL, mage.cards.g.GloriousAnthem.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Lord of Atlantis", 3, Rarity.SPECIAL, mage.cards.l.LordOfAtlantis.class)); - cards.add(new SetCardInfo("Mad Auntie", 18, Rarity.SPECIAL, mage.cards.m.MadAuntie.class)); - cards.add(new SetCardInfo("Royal Assassin", 20, Rarity.SPECIAL, mage.cards.r.RoyalAssassin.class)); - cards.add(new SetCardInfo("Sakura-Tribe Elder", 12, Rarity.COMMON, mage.cards.s.SakuraTribeElder.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Sakura-Tribe Elder", 21, Rarity.COMMON, mage.cards.s.SakuraTribeElder.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Sakura-Tribe Elder", 27, Rarity.COMMON, mage.cards.s.SakuraTribeElder.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Serra Avatar", 2, Rarity.SPECIAL, mage.cards.s.SerraAvatar.class)); - cards.add(new SetCardInfo("Shard Phoenix", 13, Rarity.SPECIAL, mage.cards.s.ShardPhoenix.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Shard Phoenix", 22, Rarity.SPECIAL, mage.cards.s.ShardPhoenix.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Shard Phoenix", 28, Rarity.SPECIAL, mage.cards.s.ShardPhoenix.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Slith Firewalker", 19, Rarity.SPECIAL, mage.cards.s.SlithFirewalker.class)); - cards.add(new SetCardInfo("Soltari Priest", 14, Rarity.SPECIAL, mage.cards.s.SoltariPriest.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Soltari Priest", 23, Rarity.SPECIAL, mage.cards.s.SoltariPriest.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Soltari Priest", 29, Rarity.SPECIAL, mage.cards.s.SoltariPriest.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Thran Quarry", 1, Rarity.SPECIAL, mage.cards.t.ThranQuarry.class)); - cards.add(new SetCardInfo("Two-Headed Dragon", 9, Rarity.SPECIAL, mage.cards.t.TwoHeadedDragon.class)); - cards.add(new SetCardInfo("Volcanic Hammer", 7, Rarity.COMMON, mage.cards.v.VolcanicHammer.class)); - cards.add(new SetCardInfo("Whirling Dervish", 15, Rarity.COMMON, mage.cards.w.WhirlingDervish.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Whirling Dervish", 24, Rarity.COMMON, mage.cards.w.WhirlingDervish.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Whirling Dervish", 30, Rarity.COMMON, mage.cards.w.WhirlingDervish.class, NON_FULL_USE_VARIOUS)); - } -} diff --git a/Mage.Verify/src/main/java/mage/verify/MtgJson.java b/Mage.Verify/src/main/java/mage/verify/MtgJson.java index 364d7542010..6d2d4af063b 100644 --- a/Mage.Verify/src/main/java/mage/verify/MtgJson.java +++ b/Mage.Verify/src/main/java/mage/verify/MtgJson.java @@ -28,12 +28,8 @@ public final class MtgJson { // TODO: MtgJson now seems to use upper case set codes only. // Review the ones beginning with a lower case "p" and remove the redundant entries. static { - mtgJsonToXMageCodes.put("pSUS", "SUS"); mtgJsonToXMageCodes.put("pPRE", "PPRE"); // mtgJsonToXMageCodes.put("pMPR", "MPRP"); // TODO: The set was split into the individual sets - mtgJsonToXMageCodes.put("pMEI", "MBP"); - mtgJsonToXMageCodes.put("pGTW", "GRC"); // pGTW - Gateway = GRC (WPN + Gateway in one inner set) - mtgJsonToXMageCodes.put("pWPN", "GRC"); // pWPN - Wizards Play Network = GRC (WPN + Gateway in one inner set) mtgJsonToXMageCodes.put("pGRU", "PGRU"); mtgJsonToXMageCodes.put("pFNM", "FNMP"); mtgJsonToXMageCodes.put("pELP", "PELP"); @@ -47,8 +43,6 @@ public final class MtgJson { mtgJsonToXMageCodes.put("NMS", "NEM"); mtgJsonToXMageCodes.put("MPS_AKH", "MPS-AKH"); mtgJsonToXMageCodes.put("FRF_UGIN", "UGIN"); - mtgJsonToXMageCodes.put("pCMP", "CP"); - // revert search for (Map.Entry entry : mtgJsonToXMageCodes.entrySet()) { diff --git a/Mage/src/main/java/mage/game/permanent/token/CatToken.java b/Mage/src/main/java/mage/game/permanent/token/CatToken.java index 7848d6cff87..9611029dff1 100644 --- a/Mage/src/main/java/mage/game/permanent/token/CatToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/CatToken.java @@ -19,7 +19,7 @@ public final class CatToken extends TokenImpl { power = new MageInt(2); toughness = new MageInt(2); - availableImageSetCodes = Arrays.asList("MBP", "C14", "C15", "C17", "C18", "M13", "M14", "MBS", "SOM"); + availableImageSetCodes = Arrays.asList("PMEI", "C14", "C15", "C17", "C18", "M13", "M14", "MBS", "SOM"); } public CatToken(final CatToken token) { diff --git a/Mage/src/main/java/mage/game/permanent/token/ElementalTokenWithHaste.java b/Mage/src/main/java/mage/game/permanent/token/ElementalTokenWithHaste.java index b01be1d5489..a37a3ce7734 100644 --- a/Mage/src/main/java/mage/game/permanent/token/ElementalTokenWithHaste.java +++ b/Mage/src/main/java/mage/game/permanent/token/ElementalTokenWithHaste.java @@ -21,7 +21,7 @@ public final class ElementalTokenWithHaste extends TokenImpl { toughness = new MageInt(1); this.addAbility(HasteAbility.getInstance()); - availableImageSetCodes = Arrays.asList("C20", "MBP", "OGW", "SOK", "MRD"); + availableImageSetCodes = Arrays.asList("C20", "PMEI", "OGW", "SOK", "MRD"); } public ElementalTokenWithHaste(final ElementalTokenWithHaste token) { From 735588cc0d87150c954ae7e3712c4935d7c77e7b Mon Sep 17 00:00:00 2001 From: Oleg Agafonov Date: Sat, 8 Aug 2020 13:05:38 +0400 Subject: [PATCH 172/182] Sets refactor: * Duels of the Planeswalkers Promos set split to multiple sets (scryfall style); * Fixed Masterpiece Series sets name; --- .../java/mage/client/cards/DragCardGrid.java | 2 + .../plugins/card/dl/sources/GathererSets.java | 2 +- .../dl/sources/ScryfallImageSupportCards.java | 54 ++------ .../src/main/resources/card-pictures-tok.txt | 1 - ...Amonkhet.java => AmonkhetInvocations.java} | 11 +- .../src/mage/sets/BattleForZendikar.java | 2 +- .../DuelsOfThePlaneswalkers2009Promos.java | 27 ++++ .../DuelsOfThePlaneswalkers2010Promos.java | 28 ++++ .../DuelsOfThePlaneswalkers2011Promos.java | 29 ++++ .../DuelsOfThePlaneswalkers2012Promos.java | 29 ++++ .../DuelsOfThePlaneswalkers2013Promos.java | 29 ++++ .../DuelsOfThePlaneswalkers2014Promos.java | 28 ++++ .../sets/DuelsOfThePlaneswalkersPromos.java | 55 -------- .../src/mage/sets/HourOfDevastation.java | 2 +- ...eceSeries.java => KaladeshInventions.java} | 14 +- .../src/mage/sets/ZendikarExpeditions.java | 3 +- .../src/main/java/mage/verify/MtgJson.java | 1 - .../java/mage/verify/VerifyCardDataTest.java | 124 ++++++++++-------- Utils/mtg-sets-data.txt | 4 - 19 files changed, 268 insertions(+), 177 deletions(-) rename Mage.Sets/src/mage/sets/{MasterpieceSeriesAmonkhet.java => AmonkhetInvocations.java} (94%) create mode 100644 Mage.Sets/src/mage/sets/DuelsOfThePlaneswalkers2009Promos.java create mode 100644 Mage.Sets/src/mage/sets/DuelsOfThePlaneswalkers2010Promos.java create mode 100644 Mage.Sets/src/mage/sets/DuelsOfThePlaneswalkers2011Promos.java create mode 100644 Mage.Sets/src/mage/sets/DuelsOfThePlaneswalkers2012Promos.java create mode 100644 Mage.Sets/src/mage/sets/DuelsOfThePlaneswalkers2013Promos.java create mode 100644 Mage.Sets/src/mage/sets/DuelsOfThePlaneswalkers2014Promos.java delete mode 100644 Mage.Sets/src/mage/sets/DuelsOfThePlaneswalkersPromos.java rename Mage.Sets/src/mage/sets/{MasterpieceSeries.java => KaladeshInventions.java} (95%) diff --git a/Mage.Client/src/main/java/mage/client/cards/DragCardGrid.java b/Mage.Client/src/main/java/mage/client/cards/DragCardGrid.java index 31ec55a1460..7be83dd13b8 100644 --- a/Mage.Client/src/main/java/mage/client/cards/DragCardGrid.java +++ b/Mage.Client/src/main/java/mage/client/cards/DragCardGrid.java @@ -1509,6 +1509,8 @@ public class DragCardGrid extends JPanel implements DragCardSource, DragCardTarg Map pimpedCards = new HashMap<>(); pimpedSets.put("PCMP", 1); pimpedSets.put("MPS", 1); + pimpedSets.put("MP2", 1); + pimpedSets.put("EXP", 1); pimpedSets.put("CP1", 1); pimpedSets.put("CP2", 1); pimpedSets.put("CP3", 1); diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/GathererSets.java b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/GathererSets.java index aa4427da800..a7342e287f9 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/GathererSets.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/GathererSets.java @@ -63,7 +63,7 @@ public class GathererSets implements Iterable { "W16", "W17", // "PALP" -- Gatherer does not have the set Asia Pacific Land Program // "ATH" -- has cards from many sets, symbol does not exist on gatherer - // "CP", "DPA", "PELP", "PGPX", "PGRU", "H17", "JR", "PPRE", "SWS", "WMCQ", // need to fix + // "CP", "DPA", "PELP", "PGPX", "PGRU", "H17", "JR", "PPRE", "SWS", // need to fix "H09", "PD2", "PD3", "UNH", "CM1", "V11", "A25", "UST", "IMA", "DD2", "EVG", "DDC", "DDE", "DDD", "8EB", "9EB", "CHR", "G18", "GVL", "S00", "S99", "UGL" // ok // current testing }; diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java index e015de24b79..6d677e817a6 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java @@ -18,7 +18,6 @@ public class ScryfallImageSupportCards { //put("xmage", "scryfall"). build(); - private static final Set supportedSets = new ArraySet() { { // Sorted by release date, as listed on Scryfall @@ -57,7 +56,7 @@ public class ScryfallImageSupportCards { add("ITP"); // Introductory Two-Player Set add("VIS"); // Visions add("5ED"); // Fifth Edition - add("PVAN"); // Vanguard Series + //add("PVAN"); // Vanguard Series add("PPOD"); // Portal Demo Game add("POR"); // Portal add("WTH"); // Weatherlight @@ -105,7 +104,7 @@ public class ScryfallImageSupportCards { add("ODY"); // Odyssey add("DKM"); // Deckmasters add("PAL02"); // Arena League 2002 - add("PR2"); // Magic Player Rewards 2002 + //add("PR2"); // Magic Player Rewards 2002 add("G02"); // Judge Gift Cards 2002 add("F02"); // Friday Night Magic 2002 add("TOR"); // Torment @@ -113,7 +112,7 @@ public class ScryfallImageSupportCards { //add("PHJ"); // Hobby Japan Promos add("WC02"); // World Championship Decks 2002 add("ONS"); // Onslaught - add("PMOA"); // Magic Online Avatars + //add("PMOA"); // Magic Online Avatars add("PAL03"); // Arena League 2003 add("P03"); // Magic Player Rewards 2003 add("G03"); // Judge Gift Cards 2003 @@ -121,6 +120,7 @@ public class ScryfallImageSupportCards { add("LGN"); // Legions add("SCG"); // Scourge add("8ED"); // Eighth Edition + add("8EB"); // Eighth Edition Box add("WC03"); // World Championship Decks 2003 add("MRD"); // Mirrodin add("PAL04"); // Arena League 2004 @@ -140,6 +140,7 @@ public class ScryfallImageSupportCards { add("BOK"); // Betrayers of Kamigawa add("SOK"); // Saviors of Kamigawa add("9ED"); // Ninth Edition + add("9EB"); // Ninth Edition Box //add("PSAL"); // Salvat 2005 add("RAV"); // Ravnica: City of Guilds add("P2HG"); // Two-Headed Giant Tournament @@ -296,7 +297,7 @@ public class ScryfallImageSupportCards { add("J14"); // Judge Gift Cards 2014 add("F14"); // Friday Night Magic 2014 add("PBNG"); // Born of the Gods Promos - add("THP2"); // Born of the Gods Hero's Path + //add("THP2"); // Born of the Gods Hero's Path add("BNG"); // Born of the Gods add("DDM"); // Duel Decks: Jace vs. Vraska add("PJOU"); // Journey into Nyx Promos @@ -306,7 +307,7 @@ public class ScryfallImageSupportCards { add("CNS"); // Conspiracy add("VMA"); // Vintage Masters add("PS14"); // San Diego Comic-Con 2014 - add("PPC1"); // M15 Prerelease Challenge + //add("PPC1"); // M15 Prerelease Challenge add("PM15"); // Magic 2015 Promos add("M15"); // Magic 2015 add("CP1"); // Magic 2015 Clash Pack @@ -472,27 +473,16 @@ public class ScryfallImageSupportCards { //add("SS3"); // Signature Spellbook: Chandra add("HA3"); // Historic Anthology 3 - // TODO: DuelsOfThePlaneswalkersPromos - add("DPAP"); - // // add("TD0"); // Commander Theme Decks // add("TD2"); // Duel Decks: Mirrodin Pure vs. New Phyrexia // add("MD1"); // Modern Event Deck // add("DD3"); // Duel Decks Anthology // add("PZ1"); // Legendary Cube - // add("PZ2"); - add("WMCQ"); - add("MEDM"); - add("IKO"); - add("C20"); + add("IKO"); // Ikoria: Lair of Behemoths + add("C20"); // Commander 2020 Edition // - add("MPS-AKH"); - add("M21"); - add("JMP"); - - // - add("8EB"); // Eighth Edition Box - add("9EB"); // Ninth Edition Box + add("M21"); // Core Set 2021 + add("JMP"); // Jumpstart } }; @@ -525,28 +515,6 @@ public class ScryfallImageSupportCards { put("PAL99/Island/3+", "https://api.scryfall.com/cards/pal99/3†/"); put("PSOI/Tamiyo's Journal/265s+", "https://api.scryfall.com/cards/psoi/265s†/"); - // Duels of the Planeswalkers Promos -- xmage uses one set (DPAP), but scryfall store it by years - // 2009 - https://scryfall.com/sets/pdtp - put("DPAP/Garruk Wildspeaker", "https://api.scryfall.com/cards/pdtp/1/"); - // 2010 - https://scryfall.com/sets/pdp10 - put("DPAP/Liliana Vess", "https://api.scryfall.com/cards/pdp10/1/"); - put("DPAP/Nissa Revane", "https://api.scryfall.com/cards/pdp10/2/"); - // 2011 - https://scryfall.com/sets/pdp11 - put("DPAP/Frost Titan", "https://api.scryfall.com/cards/pdp11/1/"); - put("DPAP/Grave Titan", "https://api.scryfall.com/cards/pdp11/2/"); - put("DPAP/Inferno Titan", "https://api.scryfall.com/cards/pdp11/3/"); - // 2012 - https://scryfall.com/sets/pdp12 - put("DPAP/Primordial Hydra", "https://api.scryfall.com/cards/pdp12/1/"); - put("DPAP/Serra Avatar", "https://api.scryfall.com/cards/pdp12/2/"); - put("DPAP/Vampire Nocturnus", "https://api.scryfall.com/cards/pdp12/3/"); - // 2013 - https://scryfall.com/sets/pdp13 - put("DPAP/Bonescythe Sliver", "https://api.scryfall.com/cards/pdp13/1/"); - put("DPAP/Ogre Battledriver", "https://api.scryfall.com/cards/pdp13/2/"); - put("DPAP/Scavenging Ooze", "https://api.scryfall.com/cards/pdp13/3/"); - // 2014 - https://scryfall.com/sets/pdp14 - put("DPAP/Soul of Ravnica", "https://api.scryfall.com/cards/pdp14/1/"); - put("DPAP/Soul of Zendikar", "https://api.scryfall.com/cards/pdp14/2/"); - // 8th Edition box set and 9th Edition box set // scryfall stores it with one set, by xmage split into two -- 8ED and 8EB, 9ED and 9EB put("8EB/Eager Cadet", "https://api.scryfall.com/cards/8ed/S1"); diff --git a/Mage.Client/src/main/resources/card-pictures-tok.txt b/Mage.Client/src/main/resources/card-pictures-tok.txt index 0ac253ec007..05dc6dac50c 100644 --- a/Mage.Client/src/main/resources/card-pictures-tok.txt +++ b/Mage.Client/src/main/resources/card-pictures-tok.txt @@ -40,7 +40,6 @@ #|Generate|TOK:PPRE|Soldier|| #|Generate|TOK:PPRE|Wolf|| #|Generate|TOK:PPRE|Wurm|| -#|Generate|TOK:WMCQ|Angel|| # Emblems |Generate|EMBLEM!:BFZ|Emblem Gideon|||GideonAllyOfZendikarEmblem| diff --git a/Mage.Sets/src/mage/sets/MasterpieceSeriesAmonkhet.java b/Mage.Sets/src/mage/sets/AmonkhetInvocations.java similarity index 94% rename from Mage.Sets/src/mage/sets/MasterpieceSeriesAmonkhet.java rename to Mage.Sets/src/mage/sets/AmonkhetInvocations.java index 448fa0ffc43..2d7be3233e2 100644 --- a/Mage.Sets/src/mage/sets/MasterpieceSeriesAmonkhet.java +++ b/Mage.Sets/src/mage/sets/AmonkhetInvocations.java @@ -6,19 +6,20 @@ import mage.constants.Rarity; import mage.constants.SetType; /** + * https://scryfall.com/sets/mp2 * * @author fireshoes */ -public final class MasterpieceSeriesAmonkhet extends ExpansionSet { +public final class AmonkhetInvocations extends ExpansionSet { - private static final MasterpieceSeriesAmonkhet instance = new MasterpieceSeriesAmonkhet(); + private static final AmonkhetInvocations instance = new AmonkhetInvocations(); - public static MasterpieceSeriesAmonkhet getInstance() { + public static AmonkhetInvocations getInstance() { return instance; } - private MasterpieceSeriesAmonkhet() { - super("Masterpiece Series Amonkhet", "MP2", ExpansionSet.buildDate(2017, 4, 28), SetType.PROMOTIONAL); + private AmonkhetInvocations() { + super("Amonkhet Invocations", "MP2", ExpansionSet.buildDate(2017, 4, 28), SetType.PROMOTIONAL); this.blockName = "Masterpiece Series"; this.hasBoosters = false; this.hasBasicLands = false; diff --git a/Mage.Sets/src/mage/sets/BattleForZendikar.java b/Mage.Sets/src/mage/sets/BattleForZendikar.java index d12ac8e78b1..03aace3d548 100644 --- a/Mage.Sets/src/mage/sets/BattleForZendikar.java +++ b/Mage.Sets/src/mage/sets/BattleForZendikar.java @@ -343,7 +343,7 @@ public final class BattleForZendikar extends ExpansionSet { CardCriteria criteria = new CardCriteria(); criteria.setCodes("EXP"); criteria.minCardNumber(1); - criteria.maxCardNumber(25); + criteria.maxCardNumber(45); savedSpecialLand.addAll(CardRepository.instance.findCards(criteria)); } diff --git a/Mage.Sets/src/mage/sets/DuelsOfThePlaneswalkers2009Promos.java b/Mage.Sets/src/mage/sets/DuelsOfThePlaneswalkers2009Promos.java new file mode 100644 index 00000000000..59885dda6fc --- /dev/null +++ b/Mage.Sets/src/mage/sets/DuelsOfThePlaneswalkers2009Promos.java @@ -0,0 +1,27 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/pdtp + * + * @author JayDi85 + */ +public final class DuelsOfThePlaneswalkers2009Promos extends ExpansionSet { + + private static final DuelsOfThePlaneswalkers2009Promos instance = new DuelsOfThePlaneswalkers2009Promos(); + + public static DuelsOfThePlaneswalkers2009Promos getInstance() { + return instance; + } + + private DuelsOfThePlaneswalkers2009Promos() { + super("Duels of the Planeswalkers 2009 Promos", "PDTP", ExpansionSet.buildDate(2009, 1, 1), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Garruk Wildspeaker", 1, Rarity.MYTHIC, mage.cards.g.GarrukWildspeaker.class)); + } +} \ No newline at end of file diff --git a/Mage.Sets/src/mage/sets/DuelsOfThePlaneswalkers2010Promos.java b/Mage.Sets/src/mage/sets/DuelsOfThePlaneswalkers2010Promos.java new file mode 100644 index 00000000000..f6377caa69d --- /dev/null +++ b/Mage.Sets/src/mage/sets/DuelsOfThePlaneswalkers2010Promos.java @@ -0,0 +1,28 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/pdp10 + * + * @author JayDi85 + */ +public final class DuelsOfThePlaneswalkers2010Promos extends ExpansionSet { + + private static final DuelsOfThePlaneswalkers2010Promos instance = new DuelsOfThePlaneswalkers2010Promos(); + + public static DuelsOfThePlaneswalkers2010Promos getInstance() { + return instance; + } + + private DuelsOfThePlaneswalkers2010Promos() { + super("Duels of the Planeswalkers 2010 Promos", "PDP10", ExpansionSet.buildDate(2010, 1, 1), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Liliana Vess", 1, Rarity.MYTHIC, mage.cards.l.LilianaVess.class)); + cards.add(new SetCardInfo("Nissa Revane", 2, Rarity.MYTHIC, mage.cards.n.NissaRevane.class)); + } +} \ No newline at end of file diff --git a/Mage.Sets/src/mage/sets/DuelsOfThePlaneswalkers2011Promos.java b/Mage.Sets/src/mage/sets/DuelsOfThePlaneswalkers2011Promos.java new file mode 100644 index 00000000000..c940694edaf --- /dev/null +++ b/Mage.Sets/src/mage/sets/DuelsOfThePlaneswalkers2011Promos.java @@ -0,0 +1,29 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/pdp11 + * + * @author JayDi85 + */ +public final class DuelsOfThePlaneswalkers2011Promos extends ExpansionSet { + + private static final DuelsOfThePlaneswalkers2011Promos instance = new DuelsOfThePlaneswalkers2011Promos(); + + public static DuelsOfThePlaneswalkers2011Promos getInstance() { + return instance; + } + + private DuelsOfThePlaneswalkers2011Promos() { + super("Duels of the Planeswalkers 2011 Promos", "PDP11", ExpansionSet.buildDate(2011, 1, 1), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Frost Titan", 1, Rarity.MYTHIC, mage.cards.f.FrostTitan.class)); + cards.add(new SetCardInfo("Grave Titan", 2, Rarity.MYTHIC, mage.cards.g.GraveTitan.class)); + cards.add(new SetCardInfo("Inferno Titan", 3, Rarity.MYTHIC, mage.cards.i.InfernoTitan.class)); + } +} \ No newline at end of file diff --git a/Mage.Sets/src/mage/sets/DuelsOfThePlaneswalkers2012Promos.java b/Mage.Sets/src/mage/sets/DuelsOfThePlaneswalkers2012Promos.java new file mode 100644 index 00000000000..9d2e6a17486 --- /dev/null +++ b/Mage.Sets/src/mage/sets/DuelsOfThePlaneswalkers2012Promos.java @@ -0,0 +1,29 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/pdp12 + * + * @author JayDi85 + */ +public final class DuelsOfThePlaneswalkers2012Promos extends ExpansionSet { + + private static final DuelsOfThePlaneswalkers2012Promos instance = new DuelsOfThePlaneswalkers2012Promos(); + + public static DuelsOfThePlaneswalkers2012Promos getInstance() { + return instance; + } + + private DuelsOfThePlaneswalkers2012Promos() { + super("Duels of the Planeswalkers 2012 Promos", "PDP12", ExpansionSet.buildDate(2012, 1, 1), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Primordial Hydra", 1, Rarity.MYTHIC, mage.cards.p.PrimordialHydra.class)); + cards.add(new SetCardInfo("Serra Avatar", 2, Rarity.MYTHIC, mage.cards.s.SerraAvatar.class)); + cards.add(new SetCardInfo("Vampire Nocturnus", 3, Rarity.MYTHIC, mage.cards.v.VampireNocturnus.class)); + } +} \ No newline at end of file diff --git a/Mage.Sets/src/mage/sets/DuelsOfThePlaneswalkers2013Promos.java b/Mage.Sets/src/mage/sets/DuelsOfThePlaneswalkers2013Promos.java new file mode 100644 index 00000000000..36f01b73e10 --- /dev/null +++ b/Mage.Sets/src/mage/sets/DuelsOfThePlaneswalkers2013Promos.java @@ -0,0 +1,29 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/pdp13 + * + * @author JayDi85 + */ +public final class DuelsOfThePlaneswalkers2013Promos extends ExpansionSet { + + private static final DuelsOfThePlaneswalkers2013Promos instance = new DuelsOfThePlaneswalkers2013Promos(); + + public static DuelsOfThePlaneswalkers2013Promos getInstance() { + return instance; + } + + private DuelsOfThePlaneswalkers2013Promos() { + super("Duels of the Planeswalkers 2013 Promos", "PDP13", ExpansionSet.buildDate(2013, 1, 1), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Bonescythe Sliver", 10, Rarity.RARE, mage.cards.b.BonescytheSliver.class)); + cards.add(new SetCardInfo("Ogre Battledriver", 11, Rarity.RARE, mage.cards.o.OgreBattledriver.class)); + cards.add(new SetCardInfo("Scavenging Ooze", 12, Rarity.RARE, mage.cards.s.ScavengingOoze.class)); + } +} \ No newline at end of file diff --git a/Mage.Sets/src/mage/sets/DuelsOfThePlaneswalkers2014Promos.java b/Mage.Sets/src/mage/sets/DuelsOfThePlaneswalkers2014Promos.java new file mode 100644 index 00000000000..1e953d56af1 --- /dev/null +++ b/Mage.Sets/src/mage/sets/DuelsOfThePlaneswalkers2014Promos.java @@ -0,0 +1,28 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * https://scryfall.com/sets/pdp14 + * + * @author JayDi85 + */ +public final class DuelsOfThePlaneswalkers2014Promos extends ExpansionSet { + + private static final DuelsOfThePlaneswalkers2014Promos instance = new DuelsOfThePlaneswalkers2014Promos(); + + public static DuelsOfThePlaneswalkers2014Promos getInstance() { + return instance; + } + + private DuelsOfThePlaneswalkers2014Promos() { + super("Duels of the Planeswalkers 2014 Promos", "PDP14", ExpansionSet.buildDate(2014, 1, 1), SetType.PROMOTIONAL); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Soul of Ravnica", 1, Rarity.MYTHIC, mage.cards.s.SoulOfRavnica.class)); + cards.add(new SetCardInfo("Soul of Zendikar", 1, Rarity.MYTHIC, mage.cards.s.SoulOfZendikar.class)); + } +} \ No newline at end of file diff --git a/Mage.Sets/src/mage/sets/DuelsOfThePlaneswalkersPromos.java b/Mage.Sets/src/mage/sets/DuelsOfThePlaneswalkersPromos.java deleted file mode 100644 index 228d227f166..00000000000 --- a/Mage.Sets/src/mage/sets/DuelsOfThePlaneswalkersPromos.java +++ /dev/null @@ -1,55 +0,0 @@ - -package mage.sets; - -import mage.cards.ExpansionSet; -import mage.constants.Rarity; -import mage.constants.SetType; - -/** - * - * @author JayDi85 - */ -public final class DuelsOfThePlaneswalkersPromos extends ExpansionSet { - - private static final DuelsOfThePlaneswalkersPromos instance = new DuelsOfThePlaneswalkersPromos(); - - public static DuelsOfThePlaneswalkersPromos getInstance() { - return instance; - } - - private DuelsOfThePlaneswalkersPromos() { - super("Duels of the Planeswalkers Promos", "DPAP", ExpansionSet.buildDate(2010, 6, 4), SetType.PROMOTIONAL); - this.hasBoosters = false; - this.hasBasicLands = false; - - // all promos in one inner set (2009 - 2014) - // cards numbers must be unqiue - // use replacement list for scryfall download - - // 2009 - https://scryfall.com/sets/pdtp - cards.add(new SetCardInfo("Garruk Wildspeaker", 1, Rarity.MYTHIC, mage.cards.g.GarrukWildspeaker.class)); - - // 2010 - https://scryfall.com/sets/pdp10 - cards.add(new SetCardInfo("Liliana Vess", 2, Rarity.MYTHIC, mage.cards.l.LilianaVess.class)); - cards.add(new SetCardInfo("Nissa Revane", 3, Rarity.MYTHIC, mage.cards.n.NissaRevane.class)); - - // 2011 - https://scryfall.com/sets/pdp11 - cards.add(new SetCardInfo("Frost Titan", 4, Rarity.MYTHIC, mage.cards.f.FrostTitan.class)); - cards.add(new SetCardInfo("Grave Titan", 5, Rarity.MYTHIC, mage.cards.g.GraveTitan.class)); - cards.add(new SetCardInfo("Inferno Titan", 6, Rarity.MYTHIC, mage.cards.i.InfernoTitan.class)); - - // 2012 - https://scryfall.com/sets/pdp12 - cards.add(new SetCardInfo("Primordial Hydra", 7, Rarity.MYTHIC, mage.cards.p.PrimordialHydra.class)); - cards.add(new SetCardInfo("Serra Avatar", 8, Rarity.MYTHIC, mage.cards.s.SerraAvatar.class)); - cards.add(new SetCardInfo("Vampire Nocturnus", 9, Rarity.MYTHIC, mage.cards.v.VampireNocturnus.class)); - - // 2013 - https://scryfall.com/sets/pdp13 - cards.add(new SetCardInfo("Bonescythe Sliver", 10, Rarity.RARE, mage.cards.b.BonescytheSliver.class)); - cards.add(new SetCardInfo("Ogre Battledriver", 11, Rarity.RARE, mage.cards.o.OgreBattledriver.class)); - cards.add(new SetCardInfo("Scavenging Ooze", 12, Rarity.RARE, mage.cards.s.ScavengingOoze.class)); - - // 2014 - https://scryfall.com/sets/pdp14 - cards.add(new SetCardInfo("Soul of Ravnica", 13, Rarity.MYTHIC, mage.cards.s.SoulOfRavnica.class)); - cards.add(new SetCardInfo("Soul of Zendikar", 14, Rarity.MYTHIC, mage.cards.s.SoulOfZendikar.class)); - } -} \ No newline at end of file diff --git a/Mage.Sets/src/mage/sets/HourOfDevastation.java b/Mage.Sets/src/mage/sets/HourOfDevastation.java index e0ec55cc55d..2e6fdebbbfb 100644 --- a/Mage.Sets/src/mage/sets/HourOfDevastation.java +++ b/Mage.Sets/src/mage/sets/HourOfDevastation.java @@ -253,7 +253,7 @@ public final class HourOfDevastation extends ExpansionSet { public List getSpecialLand() { if (savedSpecialLand.isEmpty()) { CardCriteria criteria = new CardCriteria(); - criteria.setCodes("MPS-AKH"); + criteria.setCodes("MP2"); criteria.minCardNumber(31); criteria.maxCardNumber(54); savedSpecialLand.addAll(CardRepository.instance.findCards(criteria)); diff --git a/Mage.Sets/src/mage/sets/MasterpieceSeries.java b/Mage.Sets/src/mage/sets/KaladeshInventions.java similarity index 95% rename from Mage.Sets/src/mage/sets/MasterpieceSeries.java rename to Mage.Sets/src/mage/sets/KaladeshInventions.java index a338aff7875..e9081d98caf 100644 --- a/Mage.Sets/src/mage/sets/MasterpieceSeries.java +++ b/Mage.Sets/src/mage/sets/KaladeshInventions.java @@ -1,4 +1,3 @@ - package mage.sets; import mage.cards.CardGraphicInfo; @@ -8,23 +7,26 @@ import mage.constants.Rarity; import mage.constants.SetType; /** + * https://scryfall.com/sets/mps * * @author fireshoes */ -public final class MasterpieceSeries extends ExpansionSet { +public final class KaladeshInventions extends ExpansionSet { - private static final MasterpieceSeries instance = new MasterpieceSeries(); + private static final KaladeshInventions instance = new KaladeshInventions(); - public static MasterpieceSeries getInstance() { + public static KaladeshInventions getInstance() { return instance; } - private MasterpieceSeries() { - super("Masterpiece Series", "MPS", ExpansionSet.buildDate(2016, 9, 30), SetType.PROMOTIONAL); + private KaladeshInventions() { + super("Kaladesh Inventions", "MPS", ExpansionSet.buildDate(2016, 9, 30), SetType.PROMOTIONAL); this.blockName = "Masterpiece Series"; this.hasBoosters = false; this.hasBasicLands = false; + CardGraphicInfo cardGraphicInfo = new CardGraphicInfo(FrameStyle.KLD_INVENTION, false); + cards.add(new SetCardInfo("Aether Vial", 6, Rarity.MYTHIC, mage.cards.a.AetherVial.class, cardGraphicInfo)); cards.add(new SetCardInfo("Arcbound Ravager", 31, Rarity.MYTHIC, mage.cards.a.ArcboundRavager.class, cardGraphicInfo)); cards.add(new SetCardInfo("Black Vise", 32, Rarity.MYTHIC, mage.cards.b.BlackVise.class, cardGraphicInfo)); diff --git a/Mage.Sets/src/mage/sets/ZendikarExpeditions.java b/Mage.Sets/src/mage/sets/ZendikarExpeditions.java index e9557894686..dfea6c17dd2 100644 --- a/Mage.Sets/src/mage/sets/ZendikarExpeditions.java +++ b/Mage.Sets/src/mage/sets/ZendikarExpeditions.java @@ -1,4 +1,3 @@ - package mage.sets; import mage.cards.ExpansionSet; @@ -19,8 +18,10 @@ public final class ZendikarExpeditions extends ExpansionSet { private ZendikarExpeditions() { super("Zendikar Expeditions", "EXP", ExpansionSet.buildDate(2015, 10, 2), SetType.PROMOTIONAL); + this.blockName = "Masterpiece Series"; this.hasBoosters = false; this.hasBasicLands = false; + cards.add(new SetCardInfo("Ancient Tomb", 36, Rarity.MYTHIC, mage.cards.a.AncientTomb.class, FULL_ART_BFZ_VARIOUS)); cards.add(new SetCardInfo("Arid Mesa", 24, Rarity.MYTHIC, mage.cards.a.AridMesa.class, FULL_ART_BFZ_VARIOUS)); cards.add(new SetCardInfo("Blood Crypt", 8, Rarity.MYTHIC, mage.cards.b.BloodCrypt.class, FULL_ART_BFZ_VARIOUS)); diff --git a/Mage.Verify/src/main/java/mage/verify/MtgJson.java b/Mage.Verify/src/main/java/mage/verify/MtgJson.java index 6d2d4af063b..d3ab27b4907 100644 --- a/Mage.Verify/src/main/java/mage/verify/MtgJson.java +++ b/Mage.Verify/src/main/java/mage/verify/MtgJson.java @@ -41,7 +41,6 @@ public final class MtgJson { mtgJsonToXMageCodes.put("DD3_EVG", "EVG"); mtgJsonToXMageCodes.put("DD3_DVD", "DDC"); mtgJsonToXMageCodes.put("NMS", "NEM"); - mtgJsonToXMageCodes.put("MPS_AKH", "MPS-AKH"); mtgJsonToXMageCodes.put("FRF_UGIN", "UGIN"); // revert search diff --git a/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java b/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java index bcde89e5494..11dd028c455 100644 --- a/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java +++ b/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java @@ -89,7 +89,7 @@ public class VerifyCardDataTest { private static final String SKIP_LIST_NUMBER = "NUMBER"; private static final String SKIP_LIST_MISSING_ABILITIES = "MISSING_ABILITIES"; private static final String SKIP_LIST_DOUBLE_RARE = "DOUBLE_RARE"; - private static final String SKIP_LIST_INVALID_SETS = "INVALID_SETS"; + private static final String SKIP_LIST_UNSUPPORTED_SETS = "UNSUPPORTED_SETS"; private static final String SKIP_LIST_SCRYFALL_DOWNLOAD_SETS = "SCRYFALL_DOWNLOAD_SETS"; static { @@ -135,68 +135,76 @@ public class VerifyCardDataTest { // double rare cards skipListCreate(SKIP_LIST_DOUBLE_RARE); - // Non-English or empty sets: Token sets, Archenemy Schemes, Plane-Chase Planes, etc. - skipListCreate(SKIP_LIST_INVALID_SETS); + // Un-supported sets (mtgjson/scryfall contains that set but xmage don't implement it) + // Example: Non-English or empty sets: Token sets, Archenemy Schemes, Plane-Chase Planes, etc. + skipListCreate(SKIP_LIST_UNSUPPORTED_SETS); + // // Non-English-only sets should not be added. https://github.com/magefree/mage/pull/6190#issuecomment-582354790 - skipListAddName(SKIP_LIST_INVALID_SETS, "4BB"); // 4th Edition Foreign black border. - skipListAddName(SKIP_LIST_INVALID_SETS, "FBB"); // Foreign Black Border. Not on Scryfall, but other sources use this to distinguish non-English Revised cards - skipListAddName(SKIP_LIST_INVALID_SETS, "PHJ"); // Hobby Japan Promos - skipListAddName(SKIP_LIST_INVALID_SETS, "PJJT"); // Japan Junior Tournament - skipListAddName(SKIP_LIST_INVALID_SETS, "PRED"); // Redemption Program - skipListAddName(SKIP_LIST_INVALID_SETS, "PSAL"); // Salvat 2005 - skipListAddName(SKIP_LIST_INVALID_SETS, "PS11"); // Salvat 2011 - skipListAddName(SKIP_LIST_INVALID_SETS, "PMPS"); // Magic Premiere Shop 2005, Japanese Basic lands - skipListAddName(SKIP_LIST_INVALID_SETS, "PMPS06"); // Magic Premiere Shop 2006, Japanese Basic lands - skipListAddName(SKIP_LIST_INVALID_SETS, "PMPS07"); // Magic Premiere Shop 2007, Japanese Basic lands - skipListAddName(SKIP_LIST_INVALID_SETS, "PMPS08"); // Magic Premiere Shop 2008, Japanese Basic lands - skipListAddName(SKIP_LIST_INVALID_SETS, "PMPS09"); // Magic Premiere Shop 2009, Japanese Basic lands - skipListAddName(SKIP_LIST_INVALID_SETS, "PMPS10"); // Magic Premiere Shop 2010, Japanese Basic lands - skipListAddName(SKIP_LIST_INVALID_SETS, "PMPS11"); // Magic Premiere Shop 2011, Japanese Basic lands - skipListAddName(SKIP_LIST_INVALID_SETS, "REN"); // Renaissance - skipListAddName(SKIP_LIST_INVALID_SETS, "RIN"); // Rinascimento + skipListAddName(SKIP_LIST_UNSUPPORTED_SETS, "4BB"); // 4th Edition Foreign black border. + skipListAddName(SKIP_LIST_UNSUPPORTED_SETS, "FBB"); // Foreign Black Border. Not on Scryfall, but other sources use this to distinguish non-English Revised cards + skipListAddName(SKIP_LIST_UNSUPPORTED_SETS, "PHJ"); // Hobby Japan Promos + skipListAddName(SKIP_LIST_UNSUPPORTED_SETS, "PJJT"); // Japan Junior Tournament + skipListAddName(SKIP_LIST_UNSUPPORTED_SETS, "PRED"); // Redemption Program + skipListAddName(SKIP_LIST_UNSUPPORTED_SETS, "PSAL"); // Salvat 2005 + skipListAddName(SKIP_LIST_UNSUPPORTED_SETS, "PS11"); // Salvat 2011 + skipListAddName(SKIP_LIST_UNSUPPORTED_SETS, "PMPS"); // Magic Premiere Shop 2005, Japanese Basic lands + skipListAddName(SKIP_LIST_UNSUPPORTED_SETS, "PMPS06"); // Magic Premiere Shop 2006, Japanese Basic lands + skipListAddName(SKIP_LIST_UNSUPPORTED_SETS, "PMPS07"); // Magic Premiere Shop 2007, Japanese Basic lands + skipListAddName(SKIP_LIST_UNSUPPORTED_SETS, "PMPS08"); // Magic Premiere Shop 2008, Japanese Basic lands + skipListAddName(SKIP_LIST_UNSUPPORTED_SETS, "PMPS09"); // Magic Premiere Shop 2009, Japanese Basic lands + skipListAddName(SKIP_LIST_UNSUPPORTED_SETS, "PMPS10"); // Magic Premiere Shop 2010, Japanese Basic lands + skipListAddName(SKIP_LIST_UNSUPPORTED_SETS, "PMPS11"); // Magic Premiere Shop 2011, Japanese Basic lands + skipListAddName(SKIP_LIST_UNSUPPORTED_SETS, "REN"); // Renaissance + skipListAddName(SKIP_LIST_UNSUPPORTED_SETS, "RIN"); // Rinascimento + // // Archenemy Schemes - skipListAddName(SKIP_LIST_INVALID_SETS, "OARC"); // Archenemy Schemes - skipListAddName(SKIP_LIST_INVALID_SETS, "OE01"); // Archenemy: Nicol Bolas Schemes - skipListAddName(SKIP_LIST_INVALID_SETS, "PARC"); // Promotional Schemes + skipListAddName(SKIP_LIST_UNSUPPORTED_SETS, "OARC"); // Archenemy Schemes + skipListAddName(SKIP_LIST_UNSUPPORTED_SETS, "OE01"); // Archenemy: Nicol Bolas Schemes + skipListAddName(SKIP_LIST_UNSUPPORTED_SETS, "PARC"); // Promotional Schemes + // // Plane-chase Planes - skipListAddName(SKIP_LIST_INVALID_SETS, "OHOP"); // Planechase Planes - skipListAddName(SKIP_LIST_INVALID_SETS, "OPC2"); // Planechase 2012 Plane - skipListAddName(SKIP_LIST_INVALID_SETS, "OPCA"); // Planechase Anthology Planes - skipListAddName(SKIP_LIST_INVALID_SETS, "PHOP"); // Promotional Planes - // Token sets - skipListAddName(SKIP_LIST_INVALID_SETS, "L12"); // League Tokens 2012 - skipListAddName(SKIP_LIST_INVALID_SETS, "L13"); // League Tokens 2013 - skipListAddName(SKIP_LIST_INVALID_SETS, "L14"); // League Tokens 2014 - skipListAddName(SKIP_LIST_INVALID_SETS, "L15"); // League Tokens 2015 - skipListAddName(SKIP_LIST_INVALID_SETS, "L16"); // League Tokens 2016 - skipListAddName(SKIP_LIST_INVALID_SETS, "L17"); // League Tokens 2017 - skipListAddName(SKIP_LIST_INVALID_SETS, "PLNY"); // 2018 Lunar New Year - skipListAddName(SKIP_LIST_INVALID_SETS, "F18"); // Friday Night Magic 2018 - skipListAddName(SKIP_LIST_INVALID_SETS, "PR2"); // Magic Player Rewards 2002 + skipListAddName(SKIP_LIST_UNSUPPORTED_SETS, "OHOP"); // Planechase Planes + skipListAddName(SKIP_LIST_UNSUPPORTED_SETS, "OPC2"); // Planechase 2012 Plane + skipListAddName(SKIP_LIST_UNSUPPORTED_SETS, "OPCA"); // Planechase Anthology Planes + skipListAddName(SKIP_LIST_UNSUPPORTED_SETS, "PHOP"); // Promotional Planes + // + // Token sets TODO: implement tokens only sets + skipListAddName(SKIP_LIST_UNSUPPORTED_SETS, "L12"); // League Tokens 2012 + skipListAddName(SKIP_LIST_UNSUPPORTED_SETS, "L13"); // League Tokens 2013 + skipListAddName(SKIP_LIST_UNSUPPORTED_SETS, "L14"); // League Tokens 2014 + skipListAddName(SKIP_LIST_UNSUPPORTED_SETS, "L15"); // League Tokens 2015 + skipListAddName(SKIP_LIST_UNSUPPORTED_SETS, "L16"); // League Tokens 2016 + skipListAddName(SKIP_LIST_UNSUPPORTED_SETS, "L17"); // League Tokens 2017 + skipListAddName(SKIP_LIST_UNSUPPORTED_SETS, "PLNY"); // 2018 Lunar New Year + skipListAddName(SKIP_LIST_UNSUPPORTED_SETS, "F18"); // Friday Night Magic 2018 + skipListAddName(SKIP_LIST_UNSUPPORTED_SETS, "PR2"); // Magic Player Rewards 2002 + // // PvE sets containing non-traditional cards. These enable casual PvE battles against a "random AI"-driven opponent. - skipListAddName(SKIP_LIST_INVALID_SETS, "PPC1"); // M15 Prerelease Challenge - skipListAddName(SKIP_LIST_INVALID_SETS, "TBTH"); // Battle the Horde - skipListAddName(SKIP_LIST_INVALID_SETS, "TDAG"); // Defeat a God - skipListAddName(SKIP_LIST_INVALID_SETS, "TFTH"); // Face the Hydra - skipListAddName(SKIP_LIST_INVALID_SETS, "THP1"); // Theros Hero's Path - skipListAddName(SKIP_LIST_INVALID_SETS, "THP2"); // Born of the Gods Hero's Path - skipListAddName(SKIP_LIST_INVALID_SETS, "THP3"); // Journey into Nyx Hero's Path + skipListAddName(SKIP_LIST_UNSUPPORTED_SETS, "PPC1"); // M15 Prerelease Challenge + skipListAddName(SKIP_LIST_UNSUPPORTED_SETS, "TBTH"); // Battle the Horde + skipListAddName(SKIP_LIST_UNSUPPORTED_SETS, "TDAG"); // Defeat a God + skipListAddName(SKIP_LIST_UNSUPPORTED_SETS, "TFTH"); // Face the Hydra + skipListAddName(SKIP_LIST_UNSUPPORTED_SETS, "THP1"); // Theros Hero's Path + skipListAddName(SKIP_LIST_UNSUPPORTED_SETS, "THP2"); // Born of the Gods Hero's Path + skipListAddName(SKIP_LIST_UNSUPPORTED_SETS, "THP3"); // Journey into Nyx Hero's Path + // // Commander Oversized cards. - skipListAddName(SKIP_LIST_INVALID_SETS, "OCMD"); // Commander 2011 Oversized - skipListAddName(SKIP_LIST_INVALID_SETS, "OC13"); // Commander 2013 Oversized - skipListAddName(SKIP_LIST_INVALID_SETS, "OC14"); // Commander 2014 Oversized - skipListAddName(SKIP_LIST_INVALID_SETS, "OC15"); // Commander 2015 Oversized - skipListAddName(SKIP_LIST_INVALID_SETS, "OC16"); // Commander 2016 Oversized - skipListAddName(SKIP_LIST_INVALID_SETS, "OC17"); // Commander 2017 Oversized - skipListAddName(SKIP_LIST_INVALID_SETS, "OC18"); // Commander 2018 Oversized - skipListAddName(SKIP_LIST_INVALID_SETS, "OC19"); // Commander 2019 Oversized - skipListAddName(SKIP_LIST_INVALID_SETS, "OCM1"); // Commander's Arsenal Oversized + skipListAddName(SKIP_LIST_UNSUPPORTED_SETS, "OCMD"); // Commander 2011 Oversized + skipListAddName(SKIP_LIST_UNSUPPORTED_SETS, "OC13"); // Commander 2013 Oversized + skipListAddName(SKIP_LIST_UNSUPPORTED_SETS, "OC14"); // Commander 2014 Oversized + skipListAddName(SKIP_LIST_UNSUPPORTED_SETS, "OC15"); // Commander 2015 Oversized + skipListAddName(SKIP_LIST_UNSUPPORTED_SETS, "OC16"); // Commander 2016 Oversized + skipListAddName(SKIP_LIST_UNSUPPORTED_SETS, "OC17"); // Commander 2017 Oversized + skipListAddName(SKIP_LIST_UNSUPPORTED_SETS, "OC18"); // Commander 2018 Oversized + skipListAddName(SKIP_LIST_UNSUPPORTED_SETS, "OC19"); // Commander 2019 Oversized + skipListAddName(SKIP_LIST_UNSUPPORTED_SETS, "OCM1"); // Commander's Arsenal Oversized + // // Other - skipListAddName(SKIP_LIST_INVALID_SETS, "PCEL"); // Celebration Cards - skipListAddName(SKIP_LIST_INVALID_SETS, "PMOA"); // Magic Online Avatar - skipListAddName(SKIP_LIST_INVALID_SETS, "PVAN"); // Vanguard Series - skipListAddName(SKIP_LIST_INVALID_SETS, "AMH1"); // Modern Horizons Art Series - skipListAddName(SKIP_LIST_INVALID_SETS, "PTG"); // Ponies: The Galloping + skipListAddName(SKIP_LIST_UNSUPPORTED_SETS, "PCEL"); // Celebration Cards + skipListAddName(SKIP_LIST_UNSUPPORTED_SETS, "PMOA"); // Magic Online Avatar + skipListAddName(SKIP_LIST_UNSUPPORTED_SETS, "PVAN"); // Vanguard Series + skipListAddName(SKIP_LIST_UNSUPPORTED_SETS, "AMH1"); // Modern Horizons Art Series + skipListAddName(SKIP_LIST_UNSUPPORTED_SETS, "PTG"); // Ponies: The Galloping // scryfall download sets (missing from scryfall website) skipListCreate(SKIP_LIST_SCRYFALL_DOWNLOAD_SETS); @@ -396,7 +404,7 @@ public class VerifyCardDataTest { // replace codes for aliases String searchSet = MtgJson.mtgJsonToXMageCodes.getOrDefault(refSet.code, refSet.code); - if (skipListHaveName(SKIP_LIST_INVALID_SETS, searchSet)) + if (skipListHaveName(SKIP_LIST_UNSUPPORTED_SETS, searchSet)) continue; ExpansionSet mageSet = Sets.findSet(searchSet.toUpperCase(Locale.ENGLISH)); diff --git a/Utils/mtg-sets-data.txt b/Utils/mtg-sets-data.txt index f331a078192..92be3f28fcf 100644 --- a/Utils/mtg-sets-data.txt +++ b/Utils/mtg-sets-data.txt @@ -45,7 +45,6 @@ Commander|CMD| Conspiracy|CNS| Conspiracy: Take the Crown|CN2| Conflux|CON| -Champs|CP| Coldsnap|CSP| Duel Decks: Jace vs. Chandra|DD2| Duel Decks: Anthology, Divine vs. Demonic|DVD| @@ -88,7 +87,6 @@ European Land Program|EURO| Eventide|EVE| Duel Decks: Elves vs. Goblins|EVG| Duel Decks: Elves vs. Inventors|DDU| -Duels of the Planeswalkers Promos|DPAP| Pro Tour Promos|PPRO| Exodus|EXO| Zendikar Expeditions|EXP| @@ -155,7 +153,6 @@ Mercadian Masques|MMQ| Morningtide|MOR| Magic Player Rewards|MPRP| Masterpiece Series|MPS| -Masterpiece Series Amonkhet|MPS-AKH| Mirrodin|MRD| Nemesis|NEM| New Phyrexia|NPH| @@ -223,7 +220,6 @@ Vintage Masters|VMA| War of the Spark|WAR| Welcome Deck 2016|W16| Welcome Deck 2017|W17| -World Magic Cup Qualifier|WMCQ| Weatherlight|WTH| Worldwake|WWK| Ixalan|XLN| From 66a89943186ba2089251b8ffec63c6b4082ab338 Mon Sep 17 00:00:00 2001 From: Oleg Agafonov Date: Sat, 8 Aug 2020 14:02:28 +0400 Subject: [PATCH 173/182] Tests: added sets implementation statistics in test_checkMissingSets --- .../card/images/DownloadPicturesService.java | 14 +- .../DuelsOfThePlaneswalkers2014Promos.java | 2 +- .../java/mage/verify/VerifyCardDataTest.java | 240 ++++++++++-------- .../main/java/mage/cards/ExpansionSet.java | 13 +- 4 files changed, 150 insertions(+), 119 deletions(-) diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/images/DownloadPicturesService.java b/Mage.Client/src/main/java/org/mage/plugins/card/images/DownloadPicturesService.java index 92b84cf1faa..a268390dd9e 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/images/DownloadPicturesService.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/images/DownloadPicturesService.java @@ -256,19 +256,7 @@ public class DownloadPicturesService extends DefaultBoundedRangeModel implements } private String getSetNameWithYear(ExpansionSet exp) { - Calendar cal = Calendar.getInstance(); - cal.setTime(exp.getReleaseDate()); - String year = String.valueOf(cal.get(Calendar.YEAR)); - - return exp.getName() + " (" + exp.getCode() + ", " + year + ")"; - - /* - if (!exp.getName().contains(year)) { - return exp.getName() + " (" + year + ")"; - } else { - return exp.getName(); - } - */ + return exp.getName() + " (" + exp.getCode() + ", " + exp.getReleaseYear() + ")"; } private ExpansionSet findSetByNameWithYear(String name) { diff --git a/Mage.Sets/src/mage/sets/DuelsOfThePlaneswalkers2014Promos.java b/Mage.Sets/src/mage/sets/DuelsOfThePlaneswalkers2014Promos.java index 1e953d56af1..71f8989c926 100644 --- a/Mage.Sets/src/mage/sets/DuelsOfThePlaneswalkers2014Promos.java +++ b/Mage.Sets/src/mage/sets/DuelsOfThePlaneswalkers2014Promos.java @@ -23,6 +23,6 @@ public final class DuelsOfThePlaneswalkers2014Promos extends ExpansionSet { this.hasBasicLands = false; cards.add(new SetCardInfo("Soul of Ravnica", 1, Rarity.MYTHIC, mage.cards.s.SoulOfRavnica.class)); - cards.add(new SetCardInfo("Soul of Zendikar", 1, Rarity.MYTHIC, mage.cards.s.SoulOfZendikar.class)); + cards.add(new SetCardInfo("Soul of Zendikar", 2, Rarity.MYTHIC, mage.cards.s.SoulOfZendikar.class)); } } \ No newline at end of file diff --git a/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java b/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java index 11dd028c455..896246e28b5 100644 --- a/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java +++ b/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java @@ -58,28 +58,6 @@ public class VerifyCardDataTest { private static final HashMap> skipCheckLists = new HashMap<>(); private static final Set subtypesToIgnore = new HashSet<>(); - - private static void skipListCreate(String listName) { - skipCheckLists.put(listName, new LinkedHashSet<>()); - } - - private static void skipListAddName(String listName, String set, String cardName) { - skipCheckLists.get(listName).add(set + " - " + cardName); - } - - private static void skipListAddName(String listName, String set) { - skipCheckLists.get(listName).add(set); - } - - private static boolean skipListHaveName(String listName, String set, String cardName) { - return skipCheckLists.get(listName).contains(set + " - " + cardName) - || skipCheckLists.get(listName).contains(set); - } - - private static boolean skipListHaveName(String listName, String set) { - return skipCheckLists.get(listName).contains(set); - } - private static final String SKIP_LIST_PT = "PT"; private static final String SKIP_LIST_COLOR = "COLOR"; private static final String SKIP_LIST_COST = "COST"; @@ -91,6 +69,7 @@ public class VerifyCardDataTest { private static final String SKIP_LIST_DOUBLE_RARE = "DOUBLE_RARE"; private static final String SKIP_LIST_UNSUPPORTED_SETS = "UNSUPPORTED_SETS"; private static final String SKIP_LIST_SCRYFALL_DOWNLOAD_SETS = "SCRYFALL_DOWNLOAD_SETS"; + private static final Pattern SHORT_JAVA_STRING = Pattern.compile("(?<=\")[A-Z][a-z]+(?=\")"); static { // skip lists for checks (example: unstable cards with same name may have different stats) @@ -211,6 +190,37 @@ public class VerifyCardDataTest { skipListAddName(SKIP_LIST_SCRYFALL_DOWNLOAD_SETS, "SWS"); // Star Wars } + private final ArrayList outputMessages = new ArrayList<>(); + private int failed = 0; + + private static void skipListCreate(String listName) { + skipCheckLists.put(listName, new LinkedHashSet<>()); + } + + private static void skipListAddName(String listName, String set, String cardName) { + skipCheckLists.get(listName).add(set + " - " + cardName); + } + + private static void skipListAddName(String listName, String set) { + skipCheckLists.get(listName).add(set); + } + + private static boolean skipListHaveName(String listName, String set, String cardName) { + return skipCheckLists.get(listName).contains(set + " - " + cardName) + || skipCheckLists.get(listName).contains(set); + } + + private static boolean skipListHaveName(String listName, String set) { + return skipCheckLists.get(listName).contains(set); + } + + private static boolean eqSet(Collection a, Collection b) { + if (a == null || a.isEmpty()) { + return b == null || b.isEmpty(); + } + return b != null && a.size() == b.size() && a.containsAll(b); + } + private void warn(Card card, String message) { outputMessages.add("Warning: " + message + " for " + card.getExpansionSetCode() + " - " + card.getName() + " - " + card.getCardNumber()); } @@ -220,9 +230,6 @@ public class VerifyCardDataTest { outputMessages.add("Error: (" + category + ") " + message + " for " + card.getExpansionSetCode() + " - " + card.getName() + " - " + card.getCardNumber()); } - private int failed = 0; - private final ArrayList outputMessages = new ArrayList<>(); - @Test public void test_verifyCards() throws IOException { int cardIndex = 0; @@ -394,32 +401,71 @@ public class VerifyCardDataTest { @Test public void test_checkMissingSets() { - Collection errorsList = new ArrayList<>(); + // generate unimplemented sets list + Collection info = new ArrayList<>(); - int totalMissingSets = 0; - int totalMissingCards = 0; + int missingSets = 0; + int missingCards = 0; + int unsupportedSets = 0; + int unsupportedCards = 0; + int mtgCards = 0; + int mtgSets = 0; + int xmageCards = 0; + int xmageUnofficialSets = 0; + int xmageUnofficialCards = 0; Collection sets = Sets.getInstance().values(); + + // official sets for (Map.Entry refEntry : MtgJson.sets().entrySet()) { JsonSet refSet = refEntry.getValue(); + mtgCards += refSet.totalSetSize; // replace codes for aliases String searchSet = MtgJson.mtgJsonToXMageCodes.getOrDefault(refSet.code, refSet.code); - if (skipListHaveName(SKIP_LIST_UNSUPPORTED_SETS, searchSet)) + if (skipListHaveName(SKIP_LIST_UNSUPPORTED_SETS, searchSet)) { + unsupportedSets++; + unsupportedCards += refSet.totalSetSize; continue; + } ExpansionSet mageSet = Sets.findSet(searchSet.toUpperCase(Locale.ENGLISH)); if (mageSet == null) { - totalMissingSets = totalMissingSets + 1; - totalMissingCards = totalMissingCards + refSet.cards.size(); - errorsList.add("Warning: missing set " + refSet.code + " - " + refSet.name + " (cards: " + refSet.cards.size() + ")"); + missingSets = missingSets + 1; + missingCards = missingCards + refSet.cards.size(); + info.add("Warning: missing set " + refSet.code + " - " + refSet.name + " (cards: " + refSet.cards.size() + ", date: " + refSet.releaseDate + ")"); + continue; } + + mtgSets++; + xmageCards += mageSet.getSetCardInfo().size(); } - if (errorsList.size() > 0) { - errorsList.add("Warning: total missing sets: " + totalMissingSets + ", with missing cards: " + totalMissingCards); + if (info.size() > 0) { + info.add("Warning: total missing sets: " + missingSets + ", with missing cards: " + missingCards); } - // only warnings - printMessages(errorsList); + // unofficial sets info + for (ExpansionSet set : sets) { + if (MtgJson.sets().containsKey(set.getCode())) { + continue; + } + + // TODO: 8EB and 9EB uses workaround to split from main set, so it will be in unofficial list until booster cards improve + xmageUnofficialSets++; + xmageUnofficialCards += set.getSetCardInfo().size(); + info.add("Unofficial set: " + set.getCode() + " - " + set.getName() + ", cards: " + set.getSetCardInfo().size() + ", year: " + set.getReleaseYear()); + } + + printMessages(info); + System.out.println(); + System.out.println("Official sets implementation stats:"); + System.out.println("* MTG sets: " + MtgJson.sets().size() + ", cards: " + mtgCards); + System.out.println("* Implemented sets: " + mtgSets + ", cards: " + xmageCards); + System.out.println("* Unsupported sets: " + unsupportedSets + ", cards: " + unsupportedCards); + System.out.println("* TODO: " + (MtgJson.sets().size() - mtgSets - unsupportedSets) + ", cards: " + (mtgCards - xmageCards - unsupportedCards)); + System.out.println(); + System.out.println("Unofficial sets implementation stats:"); + System.out.println("* Implemented sets: " + xmageUnofficialSets + ", cards: " + xmageUnofficialCards); + System.out.println(); } @Test @@ -908,8 +954,6 @@ public class VerifyCardDataTest { } } - private static final Pattern SHORT_JAVA_STRING = Pattern.compile("(?<=\")[A-Z][a-z]+(?=\")"); - private Set findSourceTokens(Class c) throws IOException { if (!CHECK_SOURCE_TOKENS || BasicLand.class.isAssignableFrom(c)) { return null; @@ -1173,6 +1217,62 @@ public class VerifyCardDataTest { System.out.println(text); } + + /* + for(String rule : card.getRules()) { + rule = rule.replaceAll("(?i).+", ""); // Ignoring reminder text in italic + // TODO: add Equip {3} checks + // TODO: add Raid and other words checks + String[] sl = rule.split(":"); + if (sl.length == 2 && !sl[0].isEmpty()) { + String cardCost = sl[0] + .replace("{this}", card.getName()) + //.replace("", "") + //.replace("", "") + .replace("—", "—"); + String cardAbility = sl[1] + .trim() + .replace("{this}", card.getName()) + //.replace("", "") + //.replace("", "") + .replace("—", "—");; + + boolean found = false; + for (String refRule : refRules) { + refRule = refRule.replaceAll("(?i).+", ""); // Ignoring reminder text in italic + + // fix for ref mana: ref card have xxx instead {T}: Add {xxx}, example: W + if (refRule.length() == 1) { + refRule = "{T}: Add {" + refRule + "}"; + } + refRule = refRule + .trim() + //.replace("", "") + //.replace("", "") + .replace("—", "—"); + + // normal + if (refRule.startsWith(cardCost)) { + found = true; + break; + } + + // ref card have (xxx) instead xxx, example: ({T}: Add {G}.) + // ref card have (xxx) instead xxx, example: ({T}: Add {G}.) + // TODO: delete? + if (refRule.startsWith("(" + cardCost)) { + found = true; + break; + } + } + if (!found) { + fail(card, "abilities", "card ability have cost, but can't find in ref [" + cardCost + ": " + cardAbility + "]"); + } + } + + } + }*/ + private void checkWrongAbilitiesText(Card card, JsonCard ref, int cardIndex) { // checks missing or wrong text if (!card.getExpansionSetCode().equals(FULL_ABILITIES_CHECK_SET_CODE)) { @@ -1241,63 +1341,6 @@ public class VerifyCardDataTest { } } - - /* - for(String rule : card.getRules()) { - rule = rule.replaceAll("(?i).+", ""); // Ignoring reminder text in italic - // TODO: add Equip {3} checks - // TODO: add Raid and other words checks - String[] sl = rule.split(":"); - if (sl.length == 2 && !sl[0].isEmpty()) { - String cardCost = sl[0] - .replace("{this}", card.getName()) - //.replace("", "") - //.replace("", "") - .replace("—", "—"); - String cardAbility = sl[1] - .trim() - .replace("{this}", card.getName()) - //.replace("", "") - //.replace("", "") - .replace("—", "—");; - - boolean found = false; - for (String refRule : refRules) { - refRule = refRule.replaceAll("(?i).+", ""); // Ignoring reminder text in italic - - // fix for ref mana: ref card have xxx instead {T}: Add {xxx}, example: W - if (refRule.length() == 1) { - refRule = "{T}: Add {" + refRule + "}"; - } - refRule = refRule - .trim() - //.replace("", "") - //.replace("", "") - .replace("—", "—"); - - // normal - if (refRule.startsWith(cardCost)) { - found = true; - break; - } - - // ref card have (xxx) instead xxx, example: ({T}: Add {G}.) - // ref card have (xxx) instead xxx, example: ({T}: Add {G}.) - // TODO: delete? - if (refRule.startsWith("(" + cardCost)) { - found = true; - break; - } - } - if (!found) { - fail(card, "abilities", "card ability have cost, but can't find in ref [" + cardCost + ": " + cardAbility + "]"); - } - } - - } - }*/ - - private void checkTypes(Card card, JsonCard ref) { if (skipListHaveName(SKIP_LIST_TYPE, card.getExpansionSetCode(), card.getName())) { return; @@ -1313,13 +1356,6 @@ public class VerifyCardDataTest { } } - private static boolean eqSet(Collection a, Collection b) { - if (a == null || a.isEmpty()) { - return b == null || b.isEmpty(); - } - return b != null && a.size() == b.size() && a.containsAll(b); - } - private void checkPT(Card card, JsonCard ref) { if (skipListHaveName(SKIP_LIST_PT, card.getExpansionSetCode(), card.getName())) { return; diff --git a/Mage/src/main/java/mage/cards/ExpansionSet.java b/Mage/src/main/java/mage/cards/ExpansionSet.java index f1879539936..1f26c9a428a 100644 --- a/Mage/src/main/java/mage/cards/ExpansionSet.java +++ b/Mage/src/main/java/mage/cards/ExpansionSet.java @@ -1,8 +1,5 @@ package mage.cards; -import java.io.Serializable; -import java.util.*; -import java.util.stream.Collectors; import mage.ObjectColor; import mage.abilities.Ability; import mage.abilities.keyword.PartnerWithAbility; @@ -15,6 +12,10 @@ import mage.util.CardUtil; import mage.util.RandomUtil; import org.apache.log4j.Logger; +import java.io.Serializable; +import java.util.*; +import java.util.stream.Collectors; + /** * @author BetaSteward_at_googlemail.com */ @@ -135,6 +136,12 @@ public abstract class ExpansionSet implements Serializable { return releaseDate; } + public int getReleaseYear() { + Calendar cal = Calendar.getInstance(); + cal.setTime(this.getReleaseDate()); + return cal.get(Calendar.YEAR); + } + public ExpansionSet getParentSet() { return parentSet; } From 025ba9bb47b4731070a973a09d81327226d29502 Mon Sep 17 00:00:00 2001 From: Oleg Agafonov Date: Sat, 8 Aug 2020 18:53:00 +0400 Subject: [PATCH 174/182] Tests: added non-ascii symbols checks in card numbers and names; --- .../test/java/mage/verify/VerifyCardDataTest.java | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java b/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java index 896246e28b5..e4da05ec296 100644 --- a/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java +++ b/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java @@ -1,5 +1,6 @@ package mage.verify; +import com.google.common.base.CharMatcher; import mage.ObjectColor; import mage.abilities.Ability; import mage.abilities.effects.keyword.ScryEffect; @@ -683,17 +684,15 @@ public class VerifyCardDataTest { Collection sets = Sets.getInstance().values(); - // 1. wrong UsesVariousArt settings (set have duplicated card name without that setting -- e.g. cards will have same image) + // CHECK: wrong UsesVariousArt settings (set have duplicated card name without that setting -- e.g. cards will have same image) for (ExpansionSet set : sets) { - // double names Map doubleNames = new HashMap<>(); for (ExpansionSet.SetCardInfo card : set.getSetCardInfo()) { int count = doubleNames.getOrDefault(card.getName(), 0); doubleNames.put(card.getName(), count + 1); } - // check double names for (ExpansionSet.SetCardInfo card : set.getSetCardInfo()) { boolean cardHaveDoubleName = (doubleNames.getOrDefault(card.getName(), 0) > 1); boolean cardHaveVariousSetting = card.getGraphicInfo() != null && card.getGraphicInfo().getUsesVariousArt(); @@ -711,14 +710,19 @@ public class VerifyCardDataTest { cardInfo.getCardNumber(), cardInfo.getRarity(), cardInfo.getGraphicInfo())); Assert.assertNotNull(card); - // 2. all planeswalkers must be legendary + // CHECK: all planeswalkers must be legendary if (card.getCardType().contains(CardType.PLANESWALKER) && !card.getSuperType().contains(SuperType.LEGENDARY)) { errorsList.add("error, planeswalker must have legendary type: " + set.getCode() + " - " + set.getName() + " - " + card.getName() + " - " + card.getCardNumber()); } - // 3. check that getMana works without NPE errors (it uses getNetMana with empty game param for AI score calcs) + // CHECK: getMana must works without NPE errors (it uses getNetMana with empty game param for AI score calcs) // https://github.com/magefree/mage/issues/6300 card.getMana(); + + // CHECK: non ascii symbols in card numbers + if (!CharMatcher.ascii().matchesAllOf(card.getName()) || !CharMatcher.ascii().matchesAllOf(card.getCardNumber())) { + errorsList.add("error, card name or number contains non-ascii symbols: " + set.getCode() + " - " + set.getName() + " - " + card.getName() + " - " + card.getCardNumber()); + } } } From 712af3152a3b6890ff40ae0564e7003c5691142f Mon Sep 17 00:00:00 2001 From: Oleg Agafonov Date: Sat, 8 Aug 2020 18:55:10 +0400 Subject: [PATCH 175/182] Images download: * Fixed broken direct links download; * Fixed outdated card numbers in some sets; * Fixed all non-downloadable images from scryfall source; --- .../card/dl/sources/ScryfallImageSource.java | 15 ++- .../dl/sources/ScryfallImageSupportCards.java | 80 +++++++++++---- .../plugins/card/images/CardDownloadData.java | 3 +- .../mage/sets/ArenaNewPlayerExperience.java | 40 +++----- .../sets/ArenaNewPlayerExperienceExtras.java | 47 +++++++++ .../src/mage/sets/ColdsnapThemeDecks.java | 2 +- Mage.Sets/src/mage/sets/Deckmasters.java | 4 +- .../DuelsOfThePlaneswalkers2013Promos.java | 6 +- Mage.Sets/src/mage/sets/MTGArenaPromos.java | 94 +++++++++++------- .../src/mage/sets/MagicOnlinePromos.java | 4 +- .../src/mage/sets/MagicOnlineThemeDecks.java | 2 +- Mage.Sets/src/mage/sets/SummerMagic.java | 2 +- .../src/mage/sets/WarOfTheSparkPromos.java | 98 ++++++++++--------- .../mage/sets/WorldChampionshipDecks1997.java | 2 +- .../mage/sets/WorldChampionshipDecks1998.java | 42 ++++---- .../mage/sets/WorldChampionshipDecks2004.java | 14 +-- 16 files changed, 286 insertions(+), 169 deletions(-) create mode 100644 Mage.Sets/src/mage/sets/ArenaNewPlayerExperienceExtras.java diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSource.java b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSource.java index 968eff235e2..04d9659d5f7 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSource.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSource.java @@ -73,12 +73,17 @@ public enum ScryfallImageSource implements CardImageSource { // CARDS TRY - // direct links to images via hardcoded API path. Used for cards with non-ASCII collector numbers. + // direct links to images via hardcoded API path. Used for cards with non-ASCII collector numbers if (baseUrl == null) { - baseUrl = ScryfallImageSupportCards.findDirectDownloadLink(card.getSet(), card.getName(), card.getCollectorId()); - if (baseUrl != null) { - alternativeUrl = baseUrl + defaultCode + "?format=image"; - baseUrl += localizedCode + "?format=image"; + String apiUrl = ScryfallImageSupportCards.findDirectDownloadLink(card.getSet(), card.getName(), card.getCollectorId()); + if (apiUrl != null) { + baseUrl = apiUrl + localizedCode + "?format=image"; + alternativeUrl = apiUrl + defaultCode + "?format=image"; + + // workaround to use cards without english images (some promos or special cards) + if (Objects.equals(baseUrl, alternativeUrl) && baseUrl.endsWith("/en?format=image")) { + alternativeUrl = alternativeUrl.replace("/en?format=image", "/?format=image"); + } } } diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java index 6d677e817a6..1c25e6a4dde 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java @@ -500,39 +500,83 @@ public class ScryfallImageSupportCards { // set/card_name/card_number // set/card_name/card_number - // Cards with non-ASCII collector numbers + // Cards with non-ASCII collector numbers must use direct download (cause xmage uses different card number) + // J14 put("J14/Plains/1*", "https://api.scryfall.com/cards/j14/1★/"); put("J14/Island/2*", "https://api.scryfall.com/cards/j14/2★/"); put("J14/Swamp/3*", "https://api.scryfall.com/cards/j14/3★/"); put("J14/Mountain/4*", "https://api.scryfall.com/cards/j14/4★/"); put("J14/Forest/5*", "https://api.scryfall.com/cards/j14/5★/"); + // PLS put("PLS/Tahngarth, Talruum Hero/74*", "https://api.scryfall.com/cards/pls/74★/"); put("PLS/Ertai, the Corrupted/107*", "https://api.scryfall.com/cards/pls/107★/"); put("PLS/Skyship Weatherlight/133*", "https://api.scryfall.com/cards/pls/133★/"); + // PROE put("PROE/Emrakul, the Aeons Torn/*4", "https://api.scryfall.com/cards/proe/★4/"); put("PROE/Lord of Shatterskull Pass/*156", "https://api.scryfall.com/cards/proe/★156/"); - + // PAL99 put("PAL99/Island/3+", "https://api.scryfall.com/cards/pal99/3†/"); + // PSOI put("PSOI/Tamiyo's Journal/265s+", "https://api.scryfall.com/cards/psoi/265s†/"); + // DKM + put("DKM/Icy Manipulator/36s", "https://api.scryfall.com/cards/dkm/36★/"); + put("DKM/Incinerate/14s", "https://api.scryfall.com/cards/dkm/14★/"); + // PWAR + put("PWAR/Ajani, the Greathearted/184s*", "https://api.scryfall.com/cards/pwar/184s★/"); + put("PWAR/Angrath, Captain of Chaos/227s*", "https://api.scryfall.com/cards/pwar/227s★/"); + put("PWAR/Arlinn, Voice of the Pack/150s*", "https://api.scryfall.com/cards/pwar/150s★/"); + put("PWAR/Ashiok, Dream Render/228s*", "https://api.scryfall.com/cards/pwar/228s★/"); + put("PWAR/Chandra, Fire Artisan/119s*", "https://api.scryfall.com/cards/pwar/119s★/"); + put("PWAR/Davriel, Rogue Shadowmage/83s*", "https://api.scryfall.com/cards/pwar/83s★/"); + put("PWAR/Domri, Anarch of Bolas/191s*", "https://api.scryfall.com/cards/pwar/191s★/"); + put("PWAR/Dovin, Hand of Control/229s*", "https://api.scryfall.com/cards/pwar/229s★/"); + put("PWAR/Gideon Blackblade/13s*", "https://api.scryfall.com/cards/pwar/13s★/"); + put("PWAR/Huatli, the Sun's Heart/230s*", "https://api.scryfall.com/cards/pwar/230s★/"); + put("PWAR/Jace, Wielder of Mysteries/54s*", "https://api.scryfall.com/cards/pwar/54s★/"); + put("PWAR/Jaya, Venerated Firemage/135s*", "https://api.scryfall.com/cards/pwar/135s★/"); + put("PWAR/Jiang Yanggu, Wildcrafter/164s*", "https://api.scryfall.com/cards/pwar/164s★/"); + put("PWAR/Karn, the Great Creator/1s*", "https://api.scryfall.com/cards/pwar/1s★/"); + put("PWAR/Kasmina, Enigmatic Mentor/56s*", "https://api.scryfall.com/cards/pwar/56s★/"); + put("PWAR/Kaya, Bane of the Dead/231s*", "https://api.scryfall.com/cards/pwar/231s★/"); + put("PWAR/Kiora, Behemoth Beckoner/232s*", "https://api.scryfall.com/cards/pwar/232s★/"); + put("PWAR/Liliana, Dreadhorde General/97s*", "https://api.scryfall.com/cards/pwar/97s★/"); + put("PWAR/Nahiri, Storm of Stone/233s*", "https://api.scryfall.com/cards/pwar/233s★/"); + put("PWAR/Narset, Parter of Veils/61s*", "https://api.scryfall.com/cards/pwar/61s★/"); + put("PWAR/Nicol Bolas, Dragon-God/207s*", "https://api.scryfall.com/cards/pwar/207s★/"); + put("PWAR/Nissa, Who Shakes the World/169s*", "https://api.scryfall.com/cards/pwar/169s★/"); + put("PWAR/Ob Nixilis, the Hate-Twisted/100s*", "https://api.scryfall.com/cards/pwar/100s★/"); + put("PWAR/Ral, Storm Conduit/211s*", "https://api.scryfall.com/cards/pwar/211s★/"); + put("PWAR/Saheeli, Sublime Artificer/234s*", "https://api.scryfall.com/cards/pwar/234s★/"); + put("PWAR/Samut, Tyrant Smasher/235s*", "https://api.scryfall.com/cards/pwar/235s★/"); + put("PWAR/Sarkhan the Masterless/143s*", "https://api.scryfall.com/cards/pwar/143s★/"); + put("PWAR/Sorin, Vengeful Bloodlord/217s*", "https://api.scryfall.com/cards/pwar/217s★/"); + put("PWAR/Tamiyo, Collector of Tales/220s*", "https://api.scryfall.com/cards/pwar/220s★/"); + put("PWAR/Teferi, Time Raveler/221s*", "https://api.scryfall.com/cards/pwar/221s★/"); + put("PWAR/Teyo, the Shieldmage/32s*", "https://api.scryfall.com/cards/pwar/32s★/"); + put("PWAR/The Wanderer/37s*", "https://api.scryfall.com/cards/pwar/37s★/"); + put("PWAR/Tibalt, Rakish Instigator/146s*", "https://api.scryfall.com/cards/pwar/146s★/"); + put("PWAR/Ugin, the Ineffable/2s*", "https://api.scryfall.com/cards/pwar/2s★/"); + put("PWAR/Vivien, Champion of the Wilds/180s*", "https://api.scryfall.com/cards/pwar/180s★/"); + put("PWAR/Vraska, Swarm's Eminence/236s*", "https://api.scryfall.com/cards/pwar/236s★/"); // 8th Edition box set and 9th Edition box set // scryfall stores it with one set, by xmage split into two -- 8ED and 8EB, 9ED and 9EB - put("8EB/Eager Cadet", "https://api.scryfall.com/cards/8ed/S1"); - put("8EB/Vengeance", "https://api.scryfall.com/cards/8ed/S2"); - put("8EB/Giant Octopus", "https://api.scryfall.com/cards/8ed/S3"); - put("8EB/Sea Eagle", "https://api.scryfall.com/cards/8ed/S4"); - put("8EB/Vizzerdrix", "https://api.scryfall.com/cards/8ed/S5"); - put("8EB/Enormous Baloth", "https://api.scryfall.com/cards/8ed/S6"); - put("8EB/Silverback Ape", "https://api.scryfall.com/cards/8ed/S7"); - put("9EB/Eager Cadet", "https://api.scryfall.com/cards/9ed/S1"); - put("9EB/Vengeance", "https://api.scryfall.com/cards/9ed/S3"); - put("9EB/Coral Eel", "https://api.scryfall.com/cards/9ed/S3"); - put("9EB/Giant Octopus", "https://api.scryfall.com/cards/9ed/S4"); - put("9EB/Index", "https://api.scryfall.com/cards/9ed/S5"); - put("9EB/Vizzerdrix", "https://api.scryfall.com/cards/9ed/S7"); - put("9EB/Goblin Raider", "https://api.scryfall.com/cards/9ed/S8"); - put("9EB/Enormous Baloth", "https://api.scryfall.com/cards/9ed/S9"); - put("9EB/Spined Wurm", "https://api.scryfall.com/cards/9ed/S10"); + put("8EB/Eager Cadet", "https://api.scryfall.com/cards/8ed/S1/"); + put("8EB/Vengeance", "https://api.scryfall.com/cards/8ed/S2/"); + put("8EB/Giant Octopus", "https://api.scryfall.com/cards/8ed/S3/"); + put("8EB/Sea Eagle", "https://api.scryfall.com/cards/8ed/S4/"); + put("8EB/Vizzerdrix", "https://api.scryfall.com/cards/8ed/S5/"); + put("8EB/Enormous Baloth", "https://api.scryfall.com/cards/8ed/S6/"); + put("8EB/Silverback Ape", "https://api.scryfall.com/cards/8ed/S7/"); + put("9EB/Eager Cadet", "https://api.scryfall.com/cards/9ed/S1/"); + put("9EB/Vengeance", "https://api.scryfall.com/cards/9ed/S3/"); + put("9EB/Coral Eel", "https://api.scryfall.com/cards/9ed/S3/"); + put("9EB/Giant Octopus", "https://api.scryfall.com/cards/9ed/S4/"); + put("9EB/Index", "https://api.scryfall.com/cards/9ed/S5/"); + put("9EB/Vizzerdrix", "https://api.scryfall.com/cards/9ed/S7/"); + put("9EB/Goblin Raider", "https://api.scryfall.com/cards/9ed/S8/"); + put("9EB/Enormous Baloth", "https://api.scryfall.com/cards/9ed/S9/"); + put("9EB/Spined Wurm", "https://api.scryfall.com/cards/9ed/S10/"); } }; diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/images/CardDownloadData.java b/Mage.Client/src/main/java/org/mage/plugins/card/images/CardDownloadData.java index 6913d5223f3..5d7c6eaa32b 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/images/CardDownloadData.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/images/CardDownloadData.java @@ -134,7 +134,8 @@ public class CardDownloadData { public String getCollectorIdAsFileName() { // return file names compatible card number (e.g. replace special symbols) return collectorId - .replace("*", "star"); + .replace("*", "star") + .replace("★", "star"); } public String getCollectorIdPostfix() { diff --git a/Mage.Sets/src/mage/sets/ArenaNewPlayerExperience.java b/Mage.Sets/src/mage/sets/ArenaNewPlayerExperience.java index aaad1327f93..2a3492ea815 100644 --- a/Mage.Sets/src/mage/sets/ArenaNewPlayerExperience.java +++ b/Mage.Sets/src/mage/sets/ArenaNewPlayerExperience.java @@ -16,48 +16,40 @@ public final class ArenaNewPlayerExperience extends ExpansionSet { } private ArenaNewPlayerExperience() { - super("Arena New Player Experience", "ANA", ExpansionSet.buildDate(2018, 7, 29), SetType.MAGIC_ONLINE); + super("Arena New Player Experience", "ANA", ExpansionSet.buildDate(2018, 7, 14), SetType.MAGIC_ONLINE); this.hasBoosters = false; this.hasBasicLands = false; - cards.add(new SetCardInfo("Altar's Reap", 24, Rarity.COMMON, mage.cards.a.AltarsReap.class)); - cards.add(new SetCardInfo("Ambition's Cost", 25, Rarity.UNCOMMON, mage.cards.a.AmbitionsCost.class)); cards.add(new SetCardInfo("Angelic Reward", 1, Rarity.UNCOMMON, mage.cards.a.AngelicReward.class)); - cards.add(new SetCardInfo("Blinding Radiance", 2, Rarity.UNCOMMON, mage.cards.b.BlindingRadiance.class)); - cards.add(new SetCardInfo("Chaos Maw", 36, Rarity.RARE, mage.cards.c.ChaosMaw.class)); cards.add(new SetCardInfo("Confront the Assault", 3, Rarity.UNCOMMON, mage.cards.c.ConfrontTheAssault.class)); - cards.add(new SetCardInfo("Cruel Cut", 26, Rarity.COMMON, mage.cards.c.CruelCut.class)); - cards.add(new SetCardInfo("Divination", 14, Rarity.COMMON, mage.cards.d.Divination.class)); - cards.add(new SetCardInfo("Doublecast", 37, Rarity.UNCOMMON, mage.cards.d.Doublecast.class)); cards.add(new SetCardInfo("Feral Roar", 46, Rarity.COMMON, mage.cards.f.FeralRoar.class)); - cards.add(new SetCardInfo("Goblin Bruiser", 39, Rarity.UNCOMMON, mage.cards.g.GoblinBruiser.class)); - cards.add(new SetCardInfo("Goblin Gang Leader", 40, Rarity.UNCOMMON, mage.cards.g.GoblinGangLeader.class)); - cards.add(new SetCardInfo("Goblin Grenade", 41, Rarity.UNCOMMON, mage.cards.g.GoblinGrenade.class)); + cards.add(new SetCardInfo("Forest", 55, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", 60, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", 65, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Inspiring Commander", 5, Rarity.RARE, mage.cards.i.InspiringCommander.class)); + cards.add(new SetCardInfo("Island", 52, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", 57, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", 62, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Knight's Pledge", 6, Rarity.COMMON, mage.cards.k.KnightsPledge.class)); - cards.add(new SetCardInfo("Loxodon Line Breaker", 7, Rarity.COMMON, mage.cards.l.LoxodonLineBreaker.class)); - cards.add(new SetCardInfo("Miasmic Mummy", 29, Rarity.COMMON, mage.cards.m.MiasmicMummy.class)); - cards.add(new SetCardInfo("Nimble Pilferer", 31, Rarity.COMMON, mage.cards.n.NimblePilferer.class)); - cards.add(new SetCardInfo("Ogre Painbringer", 42, Rarity.RARE, mage.cards.o.OgrePainbringer.class)); - cards.add(new SetCardInfo("Overflowing Insight", 16, Rarity.MYTHIC, mage.cards.o.OverflowingInsight.class)); + cards.add(new SetCardInfo("Mountain", 54, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", 59, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", 64, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", 51, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", 56, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", 61, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Raging Goblin", 43, Rarity.COMMON, mage.cards.r.RagingGoblin.class)); - cards.add(new SetCardInfo("Renegade Demon", 33, Rarity.COMMON, mage.cards.r.RenegadeDemon.class)); cards.add(new SetCardInfo("Rise from the Grave", 34, Rarity.UNCOMMON, mage.cards.r.RiseFromTheGrave.class)); cards.add(new SetCardInfo("River's Favor", 17, Rarity.COMMON, mage.cards.r.RiversFavor.class)); - cards.add(new SetCardInfo("Rumbling Baloth", 47, Rarity.COMMON, mage.cards.r.RumblingBaloth.class)); cards.add(new SetCardInfo("Sanctuary Cat", 8, Rarity.COMMON, mage.cards.s.SanctuaryCat.class)); - cards.add(new SetCardInfo("Seismic Rupture", 44, Rarity.UNCOMMON, mage.cards.s.SeismicRupture.class)); cards.add(new SetCardInfo("Serra Angel", 9, Rarity.UNCOMMON, mage.cards.s.SerraAngel.class)); cards.add(new SetCardInfo("Shorecomber Crab", 18, Rarity.COMMON, mage.cards.s.ShorecomberCrab.class)); cards.add(new SetCardInfo("Shrine Keeper", 10, Rarity.COMMON, mage.cards.s.ShrineKeeper.class)); - cards.add(new SetCardInfo("Soulhunter Rakshasa", 35, Rarity.RARE, mage.cards.s.SoulhunterRakshasa.class)); cards.add(new SetCardInfo("Spiritual Guardian", 11, Rarity.COMMON, mage.cards.s.SpiritualGuardian.class)); + cards.add(new SetCardInfo("Swamp", 53, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", 58, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", 63, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Tactical Advantage", 12, Rarity.COMMON, mage.cards.t.TacticalAdvantage.class)); - cards.add(new SetCardInfo("Take Vengeance", 13, Rarity.COMMON, mage.cards.t.TakeVengeance.class)); - cards.add(new SetCardInfo("Titanic Pelagosaur", 19, Rarity.UNCOMMON, mage.cards.t.TitanicPelagosaur.class)); cards.add(new SetCardInfo("Treetop Warden", 48, Rarity.COMMON, mage.cards.t.TreetopWarden.class)); - cards.add(new SetCardInfo("Volcanic Dragon", 45, Rarity.UNCOMMON, mage.cards.v.VolcanicDragon.class)); - cards.add(new SetCardInfo("Waterknot", 22, Rarity.COMMON, mage.cards.w.Waterknot.class)); cards.add(new SetCardInfo("Zephyr Gull", 23, Rarity.COMMON, mage.cards.z.ZephyrGull.class)); } } \ No newline at end of file diff --git a/Mage.Sets/src/mage/sets/ArenaNewPlayerExperienceExtras.java b/Mage.Sets/src/mage/sets/ArenaNewPlayerExperienceExtras.java new file mode 100644 index 00000000000..c61eaca6747 --- /dev/null +++ b/Mage.Sets/src/mage/sets/ArenaNewPlayerExperienceExtras.java @@ -0,0 +1,47 @@ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * @author JayDi85 + */ +public final class ArenaNewPlayerExperienceExtras extends ExpansionSet { + + private static final ArenaNewPlayerExperienceExtras instance = new ArenaNewPlayerExperienceExtras(); + + public static ArenaNewPlayerExperienceExtras getInstance() { + return instance; + } + + private ArenaNewPlayerExperienceExtras() { + super("Arena New Player Experience Extras", "XANA", ExpansionSet.buildDate(2018, 7, 14), SetType.MAGIC_ONLINE); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Altar's Reap", 24, Rarity.COMMON, mage.cards.a.AltarsReap.class)); + cards.add(new SetCardInfo("Ambition's Cost", 25, Rarity.UNCOMMON, mage.cards.a.AmbitionsCost.class)); + cards.add(new SetCardInfo("Blinding Radiance", 2, Rarity.UNCOMMON, mage.cards.b.BlindingRadiance.class)); + cards.add(new SetCardInfo("Chaos Maw", 36, Rarity.RARE, mage.cards.c.ChaosMaw.class)); + cards.add(new SetCardInfo("Cruel Cut", 26, Rarity.COMMON, mage.cards.c.CruelCut.class)); + cards.add(new SetCardInfo("Divination", 14, Rarity.COMMON, mage.cards.d.Divination.class)); + cards.add(new SetCardInfo("Doublecast", 37, Rarity.UNCOMMON, mage.cards.d.Doublecast.class)); + cards.add(new SetCardInfo("Goblin Bruiser", 39, Rarity.UNCOMMON, mage.cards.g.GoblinBruiser.class)); + cards.add(new SetCardInfo("Goblin Gang Leader", 40, Rarity.UNCOMMON, mage.cards.g.GoblinGangLeader.class)); + cards.add(new SetCardInfo("Goblin Grenade", 41, Rarity.UNCOMMON, mage.cards.g.GoblinGrenade.class)); + cards.add(new SetCardInfo("Loxodon Line Breaker", 7, Rarity.COMMON, mage.cards.l.LoxodonLineBreaker.class)); + cards.add(new SetCardInfo("Miasmic Mummy", 29, Rarity.COMMON, mage.cards.m.MiasmicMummy.class)); + cards.add(new SetCardInfo("Nimble Pilferer", 31, Rarity.COMMON, mage.cards.n.NimblePilferer.class)); + cards.add(new SetCardInfo("Ogre Painbringer", 42, Rarity.RARE, mage.cards.o.OgrePainbringer.class)); + cards.add(new SetCardInfo("Overflowing Insight", 16, Rarity.MYTHIC, mage.cards.o.OverflowingInsight.class)); + cards.add(new SetCardInfo("Renegade Demon", 33, Rarity.COMMON, mage.cards.r.RenegadeDemon.class)); + cards.add(new SetCardInfo("Rumbling Baloth", 47, Rarity.COMMON, mage.cards.r.RumblingBaloth.class)); + cards.add(new SetCardInfo("Seismic Rupture", 44, Rarity.UNCOMMON, mage.cards.s.SeismicRupture.class)); + cards.add(new SetCardInfo("Soulhunter Rakshasa", 35, Rarity.RARE, mage.cards.s.SoulhunterRakshasa.class)); + cards.add(new SetCardInfo("Take Vengeance", 13, Rarity.COMMON, mage.cards.t.TakeVengeance.class)); + cards.add(new SetCardInfo("Titanic Pelagosaur", 19, Rarity.UNCOMMON, mage.cards.t.TitanicPelagosaur.class)); + cards.add(new SetCardInfo("Volcanic Dragon", 45, Rarity.UNCOMMON, mage.cards.v.VolcanicDragon.class)); + cards.add(new SetCardInfo("Waterknot", 22, Rarity.COMMON, mage.cards.w.Waterknot.class)); + } +} \ No newline at end of file diff --git a/Mage.Sets/src/mage/sets/ColdsnapThemeDecks.java b/Mage.Sets/src/mage/sets/ColdsnapThemeDecks.java index d9676c78d57..2878cb519a4 100644 --- a/Mage.Sets/src/mage/sets/ColdsnapThemeDecks.java +++ b/Mage.Sets/src/mage/sets/ColdsnapThemeDecks.java @@ -54,7 +54,7 @@ public class ColdsnapThemeDecks extends ExpansionSet { cards.add(new SetCardInfo("Kjeldoran Home Guard", 8, Rarity.UNCOMMON, mage.cards.k.KjeldoranHomeGuard.class)); cards.add(new SetCardInfo("Kjeldoran Pride", "9b", Rarity.COMMON, mage.cards.k.KjeldoranPride.class)); cards.add(new SetCardInfo("Lat-Nam's Legacy", "30b", Rarity.COMMON, mage.cards.l.LatNamsLegacy.class)); - cards.add(new SetCardInfo("Legions of Lim-Dûl", 142, Rarity.COMMON, mage.cards.l.LegionsOfLimDul.class)); + cards.add(new SetCardInfo("Legions of Lim-Dul", 142, Rarity.COMMON, mage.cards.l.LegionsOfLimDul.class)); cards.add(new SetCardInfo("Mistfolk", 84, Rarity.COMMON, mage.cards.m.Mistfolk.class)); cards.add(new SetCardInfo("Mountain", 378, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Mountain", 379, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); diff --git a/Mage.Sets/src/mage/sets/Deckmasters.java b/Mage.Sets/src/mage/sets/Deckmasters.java index de39a48faa1..aa1193a9545 100644 --- a/Mage.Sets/src/mage/sets/Deckmasters.java +++ b/Mage.Sets/src/mage/sets/Deckmasters.java @@ -52,8 +52,8 @@ public class Deckmasters extends ExpansionSet { // Card not implemented // cards.add(new SetCardInfo("Lava Burst", 16, Rarity.COMMON, mage.cards.l.LavaBurst.class)); cards.add(new SetCardInfo("Lhurgoyf", 29, Rarity.RARE, mage.cards.l.Lhurgoyf.class)); - cards.add(new SetCardInfo("Lim-Dûl's High Guard", "6a", Rarity.COMMON, mage.cards.l.LimDulsHighGuard.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Lim-Dûl's High Guard", "6b", Rarity.COMMON, mage.cards.l.LimDulsHighGuard.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Lim-Dul's High Guard", "6a", Rarity.COMMON, mage.cards.l.LimDulsHighGuard.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Lim-Dul's High Guard", "6b", Rarity.COMMON, mage.cards.l.LimDulsHighGuard.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Mountain", 45, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Mountain", 46, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Mountain", 47, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); diff --git a/Mage.Sets/src/mage/sets/DuelsOfThePlaneswalkers2013Promos.java b/Mage.Sets/src/mage/sets/DuelsOfThePlaneswalkers2013Promos.java index 36f01b73e10..e438e8603aa 100644 --- a/Mage.Sets/src/mage/sets/DuelsOfThePlaneswalkers2013Promos.java +++ b/Mage.Sets/src/mage/sets/DuelsOfThePlaneswalkers2013Promos.java @@ -22,8 +22,8 @@ public final class DuelsOfThePlaneswalkers2013Promos extends ExpansionSet { this.hasBoosters = false; this.hasBasicLands = false; - cards.add(new SetCardInfo("Bonescythe Sliver", 10, Rarity.RARE, mage.cards.b.BonescytheSliver.class)); - cards.add(new SetCardInfo("Ogre Battledriver", 11, Rarity.RARE, mage.cards.o.OgreBattledriver.class)); - cards.add(new SetCardInfo("Scavenging Ooze", 12, Rarity.RARE, mage.cards.s.ScavengingOoze.class)); + cards.add(new SetCardInfo("Bonescythe Sliver", 1, Rarity.RARE, mage.cards.b.BonescytheSliver.class)); + cards.add(new SetCardInfo("Ogre Battledriver", 2, Rarity.RARE, mage.cards.o.OgreBattledriver.class)); + cards.add(new SetCardInfo("Scavenging Ooze", 3, Rarity.RARE, mage.cards.s.ScavengingOoze.class)); } } \ No newline at end of file diff --git a/Mage.Sets/src/mage/sets/MTGArenaPromos.java b/Mage.Sets/src/mage/sets/MTGArenaPromos.java index 38c19da3331..8a3c8f7a1b1 100644 --- a/Mage.Sets/src/mage/sets/MTGArenaPromos.java +++ b/Mage.Sets/src/mage/sets/MTGArenaPromos.java @@ -20,40 +20,62 @@ public class MTGArenaPromos extends ExpansionSet { this.hasBoosters = false; this.hasBasicLands = true; - cards.add(new SetCardInfo("Duress", "ALT-4", Rarity.COMMON, mage.cards.d.Duress.class)); - cards.add(new SetCardInfo("Firemind's Research", "ALT-7", Rarity.RARE, mage.cards.f.FiremindsResearch.class)); - cards.add(new SetCardInfo("Forest", "AKH-105", Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Forest", "BFZ-105", Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Forest", "MIR-105", Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Forest", "ROE-105", Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Forest", "RTR-105", Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Ghalta, Primal Hunger", "ALT-5", Rarity.RARE, mage.cards.g.GhaltaPrimalHunger.class)); - cards.add(new SetCardInfo("Island", "AKH-102", Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Island", "BFZ-102", Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Island", "MIR-102", Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Island", "ROE-102", Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Island", "RTR-102", Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Llanowar Elves", "ALT-6", Rarity.COMMON, mage.cards.l.LlanowarElves.class)); - cards.add(new SetCardInfo("Mountain", "AKH-104", Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Mountain", "BFZ-104", Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Mountain", "MIR-104", Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Mountain", "ROE-104", Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Mountain", "RTR-104", Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Plains", "AKH-101", Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Plains", "BFZ-101", Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Plains", "MIR-101", Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Plains", "ROE-101", Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Plains", "RTR-101", Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Ral, Izzet Viceroy", "ALT-1", Rarity.MYTHIC, mage.cards.r.RalIzzetViceroy.class)); - cards.add(new SetCardInfo("Rhys the Redeemed", "BRAWL-201", Rarity.RARE, mage.cards.r.RhysTheRedeemed.class)); - cards.add(new SetCardInfo("Swamp", "AKH-103", Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Swamp", "BFZ-103", Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Swamp", "MIR-103", Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Swamp", "ROE-103", Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Swamp", "RTR-103", Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Talrand, Sky Summoner", "BRAWL-202", Rarity.RARE, mage.cards.t.TalrandSkySummoner.class)); - cards.add(new SetCardInfo("Teferi, Hero of Dominaria", "ALT-2", Rarity.MYTHIC, mage.cards.t.TeferiHeroOfDominaria.class)); - cards.add(new SetCardInfo("The Gitrog Monster", "BRAWL-203", Rarity.MYTHIC, mage.cards.t.TheGitrogMonster.class)); - cards.add(new SetCardInfo("Vraska, Golgari Queen", "ALT-3", Rarity.MYTHIC, mage.cards.v.VraskaGolgariQueen.class)); - } + cards.add(new SetCardInfo("Bladewing the Risen", 104, Rarity.RARE, mage.cards.b.BladewingTheRisen.class)); + cards.add(new SetCardInfo("Duress", 6, Rarity.COMMON, mage.cards.d.Duress.class)); + cards.add(new SetCardInfo("Firemind's Research", 5, Rarity.RARE, mage.cards.f.FiremindsResearch.class)); + cards.add(new SetCardInfo("Forest", 205, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", 210, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", 215, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", 220, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", 225, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", 230, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", 235, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", 240, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", 245, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Ghalta, Primal Hunger", 7, Rarity.RARE, mage.cards.g.GhaltaPrimalHunger.class)); + cards.add(new SetCardInfo("Hanna, Ship's Navigator", 105, Rarity.RARE, mage.cards.h.HannaShipsNavigator.class)); + cards.add(new SetCardInfo("Island", 202, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", 207, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", 212, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", 217, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", 222, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", 227, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", 232, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", 237, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", 242, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Llanowar Elves", 4, Rarity.COMMON, mage.cards.l.LlanowarElves.class)); + cards.add(new SetCardInfo("Mountain", 204, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", 209, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", 214, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", 219, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", 224, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", 229, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", 234, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", 239, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", 244, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", 201, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", 206, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", 211, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", 216, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", 221, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", 226, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", 231, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", 236, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", 241, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Ral, Izzet Viceroy", 1, Rarity.MYTHIC, mage.cards.r.RalIzzetViceroy.class)); + cards.add(new SetCardInfo("Rhys the Redeemed", 101, Rarity.RARE, mage.cards.r.RhysTheRedeemed.class)); + cards.add(new SetCardInfo("Swamp", 203, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", 208, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", 213, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", 218, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", 223, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", 228, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", 233, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", 238, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", 243, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Talrand, Sky Summoner", 102, Rarity.RARE, mage.cards.t.TalrandSkySummoner.class)); + cards.add(new SetCardInfo("Teferi, Hero of Dominaria", 2, Rarity.MYTHIC, mage.cards.t.TeferiHeroOfDominaria.class)); + cards.add(new SetCardInfo("The Gitrog Monster", 103, Rarity.MYTHIC, mage.cards.t.TheGitrogMonster.class)); + cards.add(new SetCardInfo("Vraska, Golgari Queen", 3, Rarity.MYTHIC, mage.cards.v.VraskaGolgariQueen.class)); + } } diff --git a/Mage.Sets/src/mage/sets/MagicOnlinePromos.java b/Mage.Sets/src/mage/sets/MagicOnlinePromos.java index db7e93e7574..ff171299cf2 100644 --- a/Mage.Sets/src/mage/sets/MagicOnlinePromos.java +++ b/Mage.Sets/src/mage/sets/MagicOnlinePromos.java @@ -544,7 +544,7 @@ public class MagicOnlinePromos extends ExpansionSet { cards.add(new SetCardInfo("Icatian Javelineers", 59639, Rarity.COMMON, mage.cards.i.IcatianJavelineers.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Icy Manipulator", 35042, Rarity.UNCOMMON, mage.cards.i.IcyManipulator.class)); cards.add(new SetCardInfo("Identity Thief", 61559, Rarity.RARE, mage.cards.i.IdentityThief.class)); - cards.add(new SetCardInfo("Ifh-Bíff Efreet", 213, Rarity.RARE, mage.cards.i.IfhBiffEfreet.class)); + cards.add(new SetCardInfo("Ifh-Biff Efreet", 213, Rarity.RARE, mage.cards.i.IfhBiffEfreet.class)); cards.add(new SetCardInfo("Immolating Glare", 59669, Rarity.UNCOMMON, mage.cards.i.ImmolatingGlare.class)); cards.add(new SetCardInfo("Imperious Perfect", 31409, Rarity.UNCOMMON, mage.cards.i.ImperiousPerfect.class)); cards.add(new SetCardInfo("Impulse", 36006, Rarity.COMMON, mage.cards.i.Impulse.class)); @@ -598,7 +598,7 @@ public class MagicOnlinePromos extends ExpansionSet { cards.add(new SetCardInfo("Karakas", 43592, Rarity.UNCOMMON, mage.cards.k.Karakas.class)); cards.add(new SetCardInfo("Karametra's Acolyte", 50118, Rarity.UNCOMMON, mage.cards.k.KarametrasAcolyte.class)); cards.add(new SetCardInfo("Karn, Silver Golem", 36106, Rarity.RARE, mage.cards.k.KarnSilverGolem.class)); - cards.add(new SetCardInfo("Khabál Ghoul", 215, Rarity.UNCOMMON, mage.cards.k.KhabalGhoul.class)); + cards.add(new SetCardInfo("Khabal Ghoul", 215, Rarity.UNCOMMON, mage.cards.k.KhabalGhoul.class)); cards.add(new SetCardInfo("Killing Wave", 44319, Rarity.RARE, mage.cards.k.KillingWave.class)); cards.add(new SetCardInfo("Kiora's Follower", 51926, Rarity.UNCOMMON, mage.cards.k.KiorasFollower.class)); cards.add(new SetCardInfo("Kiora, the Crashing Wave", 59651, Rarity.MYTHIC, mage.cards.k.KioraTheCrashingWave.class)); diff --git a/Mage.Sets/src/mage/sets/MagicOnlineThemeDecks.java b/Mage.Sets/src/mage/sets/MagicOnlineThemeDecks.java index 82a03fbe53d..00c4c49229e 100644 --- a/Mage.Sets/src/mage/sets/MagicOnlineThemeDecks.java +++ b/Mage.Sets/src/mage/sets/MagicOnlineThemeDecks.java @@ -107,7 +107,7 @@ public class MagicOnlineThemeDecks extends ExpansionSet { cards.add(new SetCardInfo("Jund Panorama", "A131", Rarity.COMMON, mage.cards.j.JundPanorama.class)); cards.add(new SetCardInfo("Jungle Barrier", "A99", Rarity.UNCOMMON, mage.cards.j.JungleBarrier.class)); cards.add(new SetCardInfo("Jungle Lion", "A76", Rarity.COMMON, mage.cards.j.JungleLion.class)); - cards.add(new SetCardInfo("Jötun Grunt", "B5", Rarity.UNCOMMON, mage.cards.j.JotunGrunt.class)); + cards.add(new SetCardInfo("Jotun Grunt", "B5", Rarity.UNCOMMON, mage.cards.j.JotunGrunt.class)); cards.add(new SetCardInfo("Kami of Ancient Law", "A9", Rarity.COMMON, mage.cards.k.KamiOfAncientLaw.class)); cards.add(new SetCardInfo("Karakas", "B32", Rarity.RARE, mage.cards.k.Karakas.class)); cards.add(new SetCardInfo("Keldon Marauders", "B19", Rarity.COMMON, mage.cards.k.KeldonMarauders.class)); diff --git a/Mage.Sets/src/mage/sets/SummerMagic.java b/Mage.Sets/src/mage/sets/SummerMagic.java index 192e50d94c9..ec6e0d56991 100644 --- a/Mage.Sets/src/mage/sets/SummerMagic.java +++ b/Mage.Sets/src/mage/sets/SummerMagic.java @@ -102,7 +102,7 @@ public class SummerMagic extends ExpansionSet { cards.add(new SetCardInfo("Earthbind", 147, Rarity.COMMON, mage.cards.e.Earthbind.class)); cards.add(new SetCardInfo("Earthquake", 148, Rarity.RARE, mage.cards.e.Earthquake.class)); cards.add(new SetCardInfo("Ebony Horse", 247, Rarity.RARE, mage.cards.e.EbonyHorse.class)); - cards.add(new SetCardInfo("El-Hajjâj", 108, Rarity.RARE, mage.cards.e.ElHajjaj.class)); + cards.add(new SetCardInfo("El-Hajjaj", 108, Rarity.RARE, mage.cards.e.ElHajjaj.class)); cards.add(new SetCardInfo("Elvish Archers", 193, Rarity.RARE, mage.cards.e.ElvishArchers.class)); cards.add(new SetCardInfo("Energy Flux", 57, Rarity.UNCOMMON, mage.cards.e.EnergyFlux.class)); cards.add(new SetCardInfo("Erg Raiders", 109, Rarity.COMMON, mage.cards.e.ErgRaiders.class)); diff --git a/Mage.Sets/src/mage/sets/WarOfTheSparkPromos.java b/Mage.Sets/src/mage/sets/WarOfTheSparkPromos.java index d776f057c0e..4800fe6de4f 100644 --- a/Mage.Sets/src/mage/sets/WarOfTheSparkPromos.java +++ b/Mage.Sets/src/mage/sets/WarOfTheSparkPromos.java @@ -20,37 +20,39 @@ public class WarOfTheSparkPromos extends ExpansionSet { this.hasBoosters = false; this.hasBasicLands = false; - // Commented cards are Japanese-only printings with a special artwork. cards.add(new SetCardInfo("Ajani, the Greathearted", "184p", Rarity.RARE, mage.cards.a.AjaniTheGreathearted.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Ajani, the Greathearted", "184s", Rarity.RARE, mage.cards.a.AjaniTheGreathearted.class, NON_FULL_USE_VARIOUS)); - //cards.add(new SetCardInfo("Ajani, the Greathearted", "184s★", Rarity.RARE, mage.cards.a.AjaniTheGreathearted.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Ajani, the Greathearted", "184s*", Rarity.RARE, mage.cards.a.AjaniTheGreathearted.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Angrath, Captain of Chaos", "227s", Rarity.UNCOMMON, mage.cards.a.AngrathCaptainOfChaos.class, NON_FULL_USE_VARIOUS)); - //cards.add(new SetCardInfo("Angrath, Captain of Chaos", "227s★", Rarity.UNCOMMON, mage.cards.a.AngrathCaptainOfChaos.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Angrath, Captain of Chaos", "227s*", Rarity.UNCOMMON, mage.cards.a.AngrathCaptainOfChaos.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Arlinn, Voice of the Pack", "150s", Rarity.UNCOMMON, mage.cards.a.ArlinnVoiceOfThePack.class, NON_FULL_USE_VARIOUS)); - //cards.add(new SetCardInfo("Arlinn, Voice of the Pack", "150s★", Rarity.UNCOMMON, mage.cards.a.ArlinnVoiceOfThePack.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Arlinn, Voice of the Pack", "150s*", Rarity.UNCOMMON, mage.cards.a.ArlinnVoiceOfThePack.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Ashiok, Dream Render", "228s", Rarity.UNCOMMON, mage.cards.a.AshiokDreamRender.class, NON_FULL_USE_VARIOUS)); - //cards.add(new SetCardInfo("Ashiok, Dream Render", "228s★", Rarity.UNCOMMON, mage.cards.a.AshiokDreamRender.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Ashiok, Dream Render", "228s*", Rarity.UNCOMMON, mage.cards.a.AshiokDreamRender.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Augur of Bolas", 41, Rarity.UNCOMMON, mage.cards.a.AugurOfBolas.class)); cards.add(new SetCardInfo("Awakening of Vitu-Ghazi", "152s", Rarity.RARE, mage.cards.a.AwakeningOfVituGhazi.class)); cards.add(new SetCardInfo("Bioessence Hydra", "186s", Rarity.RARE, mage.cards.b.BioessenceHydra.class)); - cards.add(new SetCardInfo("Blast Zone", "244s", Rarity.RARE, mage.cards.b.BlastZone.class)); - cards.add(new SetCardInfo("Bolas's Citadel", 79, Rarity.RARE, mage.cards.b.BolassCitadel.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Blast Zone", "244p", Rarity.RARE, mage.cards.b.BlastZone.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Blast Zone", "244s", Rarity.RARE, mage.cards.b.BlastZone.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Bolas's Citadel", "79p", Rarity.RARE, mage.cards.b.BolassCitadel.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Bolas's Citadel", "79s", Rarity.RARE, mage.cards.b.BolassCitadel.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Bolas's Citadel", 79, Rarity.RARE, mage.cards.b.BolassCitadel.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Casualties of War", "187s", Rarity.RARE, mage.cards.c.CasualtiesOfWar.class)); cards.add(new SetCardInfo("Chandra, Fire Artisan", "119p", Rarity.RARE, mage.cards.c.ChandraFireArtisan.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Chandra, Fire Artisan", "119s", Rarity.RARE, mage.cards.c.ChandraFireArtisan.class, NON_FULL_USE_VARIOUS)); - //cards.add(new SetCardInfo("Chandra, Fire Artisan", "119s★", Rarity.RARE, mage.cards.c.ChandraFireArtisan.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Chandra, Fire Artisan", "119s*", Rarity.RARE, mage.cards.c.ChandraFireArtisan.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Command the Dreadhorde", "82s", Rarity.RARE, mage.cards.c.CommandTheDreadhorde.class)); cards.add(new SetCardInfo("Commence the Endgame", "45p", Rarity.RARE, mage.cards.c.CommenceTheEndgame.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Commence the Endgame", "45s", Rarity.RARE, mage.cards.c.CommenceTheEndgame.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Davriel, Rogue Shadowmage", "83s", Rarity.UNCOMMON, mage.cards.d.DavrielRogueShadowmage.class, NON_FULL_USE_VARIOUS)); - //cards.add(new SetCardInfo("Davriel, Rogue Shadowmage", "83s★", Rarity.UNCOMMON, mage.cards.d.DavrielRogueShadowmage.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Davriel, Rogue Shadowmage", "83s*", Rarity.UNCOMMON, mage.cards.d.DavrielRogueShadowmage.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Deliver Unto Evil", "85s", Rarity.RARE, mage.cards.d.DeliverUntoEvil.class)); + cards.add(new SetCardInfo("Domri, Anarch of Bolas", "191p", Rarity.RARE, mage.cards.d.DomriAnarchOfBolas.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Domri, Anarch of Bolas", "191s", Rarity.RARE, mage.cards.d.DomriAnarchOfBolas.class, NON_FULL_USE_VARIOUS)); - //cards.add(new SetCardInfo("Domri, Anarch of Bolas", "191s★", Rarity.RARE, mage.cards.d.DomriAnarchOfBolas.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Domri, Anarch of Bolas", "191s*", Rarity.RARE, mage.cards.d.DomriAnarchOfBolas.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Dovin's Veto", 193, Rarity.UNCOMMON, mage.cards.d.DovinsVeto.class)); cards.add(new SetCardInfo("Dovin, Hand of Control", "229s", Rarity.UNCOMMON, mage.cards.d.DovinHandOfControl.class, NON_FULL_USE_VARIOUS)); - //cards.add(new SetCardInfo("Dovin, Hand of Control", "229s★", Rarity.UNCOMMON, mage.cards.d.DovinHandOfControl.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Dovin, Hand of Control", "229s*", Rarity.UNCOMMON, mage.cards.d.DovinHandOfControl.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Dreadhorde Arcanist", "125p", Rarity.RARE, mage.cards.d.DreadhordeArcanist.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Dreadhorde Arcanist", "125s", Rarity.RARE, mage.cards.d.DreadhordeArcanist.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Dreadhorde Butcher", "194p", Rarity.RARE, mage.cards.d.DreadhordeButcher.class, NON_FULL_USE_VARIOUS)); @@ -61,7 +63,8 @@ public class WarOfTheSparkPromos extends ExpansionSet { cards.add(new SetCardInfo("Enter the God-Eternals", "196s", Rarity.RARE, mage.cards.e.EnterTheGodEternals.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Fblthp, the Lost", "50p", Rarity.RARE, mage.cards.f.FblthpTheLost.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Fblthp, the Lost", "50s", Rarity.RARE, mage.cards.f.FblthpTheLost.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Feather, the Redeemed", "197s", Rarity.RARE, mage.cards.f.FeatherTheRedeemed.class)); + cards.add(new SetCardInfo("Feather, the Redeemed", "197p", Rarity.RARE, mage.cards.f.FeatherTheRedeemed.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Feather, the Redeemed", "197s", Rarity.RARE, mage.cards.f.FeatherTheRedeemed.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Finale of Devastation", "160p", Rarity.MYTHIC, mage.cards.f.FinaleOfDevastation.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Finale of Devastation", "160s", Rarity.MYTHIC, mage.cards.f.FinaleOfDevastation.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Finale of Eternity", "91p", Rarity.MYTHIC, mage.cards.f.FinaleOfEternity.class, NON_FULL_USE_VARIOUS)); @@ -72,38 +75,40 @@ public class WarOfTheSparkPromos extends ExpansionSet { cards.add(new SetCardInfo("Finale of Revelation", "51s", Rarity.MYTHIC, mage.cards.f.FinaleOfRevelation.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Gideon Blackblade", "13p", Rarity.MYTHIC, mage.cards.g.GideonBlackblade.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Gideon Blackblade", "13s", Rarity.MYTHIC, mage.cards.g.GideonBlackblade.class, NON_FULL_USE_VARIOUS)); - //cards.add(new SetCardInfo("Gideon Blackblade", "13s★", Rarity.MYTHIC, mage.cards.g.GideonBlackblade.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Gideon Blackblade", "13s*", Rarity.MYTHIC, mage.cards.g.GideonBlackblade.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("God-Eternal Bontu", "92s", Rarity.MYTHIC, mage.cards.g.GodEternalBontu.class)); cards.add(new SetCardInfo("God-Eternal Kefnet", "53s", Rarity.MYTHIC, mage.cards.g.GodEternalKefnet.class)); cards.add(new SetCardInfo("God-Eternal Oketra", "16s", Rarity.MYTHIC, mage.cards.g.GodEternalOketra.class)); cards.add(new SetCardInfo("God-Eternal Rhonas", "163s", Rarity.MYTHIC, mage.cards.g.GodEternalRhonas.class)); cards.add(new SetCardInfo("Huatli, the Sun's Heart", "230s", Rarity.UNCOMMON, mage.cards.h.HuatliTheSunsHeart.class, NON_FULL_USE_VARIOUS)); - //cards.add(new SetCardInfo("Huatli, the Sun's Heart", "230s★", Rarity.UNCOMMON, mage.cards.h.HuatliTheSunsHeart.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Huatli, the Sun's Heart", "230s*", Rarity.UNCOMMON, mage.cards.h.HuatliTheSunsHeart.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Ignite the Beacon", "18s", Rarity.RARE, mage.cards.i.IgniteTheBeacon.class)); cards.add(new SetCardInfo("Ilharg, the Raze-Boar", "133s", Rarity.MYTHIC, mage.cards.i.IlhargTheRazeBoar.class)); cards.add(new SetCardInfo("Jace, Wielder of Mysteries", "54p", Rarity.RARE, mage.cards.j.JaceWielderOfMysteries.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Jace, Wielder of Mysteries", "54s", Rarity.RARE, mage.cards.j.JaceWielderOfMysteries.class, NON_FULL_USE_VARIOUS)); - //cards.add(new SetCardInfo("Jace, Wielder of Mysteries", "54s★", Rarity.RARE, mage.cards.j.JaceWielderOfMysteries.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Jace, Wielder of Mysteries", "54s*", Rarity.RARE, mage.cards.j.JaceWielderOfMysteries.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Jaya, Venerated Firemage", "135s", Rarity.UNCOMMON, mage.cards.j.JayaVeneratedFiremage.class, NON_FULL_USE_VARIOUS)); - //cards.add(new SetCardInfo("Jaya, Venerated Firemage", "135s★", Rarity.UNCOMMON, mage.cards.j.JayaVeneratedFiremage.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Jaya, Venerated Firemage", "135s*", Rarity.UNCOMMON, mage.cards.j.JayaVeneratedFiremage.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Jiang Yanggu, Wildcrafter", "164s", Rarity.UNCOMMON, mage.cards.j.JiangYangguWildcrafter.class, NON_FULL_USE_VARIOUS)); - //cards.add(new SetCardInfo("Jiang Yanggu, Wildcrafter", "164s★", Rarity.UNCOMMON, mage.cards.j.JiangYangguWildcrafter.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Karn's Bastion", 248, Rarity.RARE, mage.cards.k.KarnsBastion.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Jiang Yanggu, Wildcrafter", "164s*", Rarity.UNCOMMON, mage.cards.j.JiangYangguWildcrafter.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Karn's Bastion", "248p", Rarity.RARE, mage.cards.k.KarnsBastion.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Karn's Bastion", "248s", Rarity.RARE, mage.cards.k.KarnsBastion.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Karn's Bastion", 248, Rarity.RARE, mage.cards.k.KarnsBastion.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Karn, the Great Creator", "1p", Rarity.RARE, mage.cards.k.KarnTheGreatCreator.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Karn, the Great Creator", "1s", Rarity.RARE, mage.cards.k.KarnTheGreatCreator.class, NON_FULL_USE_VARIOUS)); - //cards.add(new SetCardInfo("Karn, the Great Creator", "1s★", Rarity.RARE, mage.cards.k.KarnTheGreatCreator.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Karn, the Great Creator", "1s*", Rarity.RARE, mage.cards.k.KarnTheGreatCreator.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Kasmina, Enigmatic Mentor", "56s", Rarity.UNCOMMON, mage.cards.k.KasminaEnigmaticMentor.class, NON_FULL_USE_VARIOUS)); - //cards.add(new SetCardInfo("Kasmina, Enigmatic Mentor", "56s★", Rarity.UNCOMMON, mage.cards.k.KasminaEnigmaticMentor.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Kasmina, Enigmatic Mentor", "56s*", Rarity.UNCOMMON, mage.cards.k.KasminaEnigmaticMentor.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Kaya, Bane of the Dead", "231s", Rarity.UNCOMMON, mage.cards.k.KayaBaneOfTheDead.class, NON_FULL_USE_VARIOUS)); - //cards.add(new SetCardInfo("Kaya, Bane of the Dead", "231s★", Rarity.UNCOMMON, mage.cards.k.KayaBaneOfTheDead.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Kaya, Bane of the Dead", "231s*", Rarity.UNCOMMON, mage.cards.k.KayaBaneOfTheDead.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Kiora, Behemoth Beckoner", "232s", Rarity.UNCOMMON, mage.cards.k.KioraBehemothBeckoner.class, NON_FULL_USE_VARIOUS)); - //cards.add(new SetCardInfo("Kiora, Behemoth Beckoner", "232s★", Rarity.UNCOMMON, mage.cards.k.KioraBehemothBeckoner.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Kiora, Behemoth Beckoner", "232s*", Rarity.UNCOMMON, mage.cards.k.KioraBehemothBeckoner.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Krenko, Tin Street Kingpin", "137p", Rarity.RARE, mage.cards.k.KrenkoTinStreetKingpin.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Krenko, Tin Street Kingpin", "137s", Rarity.RARE, mage.cards.k.KrenkoTinStreetKingpin.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Liliana's Triumph", 98, Rarity.UNCOMMON, mage.cards.l.LilianasTriumph.class)); + cards.add(new SetCardInfo("Liliana, Dreadhorde General", "97p", Rarity.MYTHIC, mage.cards.l.LilianaDreadhordeGeneral.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Liliana, Dreadhorde General", "97s", Rarity.MYTHIC, mage.cards.l.LilianaDreadhordeGeneral.class, NON_FULL_USE_VARIOUS)); - //cards.add(new SetCardInfo("Liliana, Dreadhorde General", "97s★", Rarity.MYTHIC, mage.cards.l.LilianaDreadhordeGeneral.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Liliana, Dreadhorde General", "97s*", Rarity.MYTHIC, mage.cards.l.LilianaDreadhordeGeneral.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Living Twister", "203p", Rarity.RARE, mage.cards.l.LivingTwister.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Living Twister", "203s", Rarity.RARE, mage.cards.l.LivingTwister.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Massacre Girl", "99s", Rarity.RARE, mage.cards.m.MassacreGirl.class)); @@ -112,81 +117,82 @@ public class WarOfTheSparkPromos extends ExpansionSet { cards.add(new SetCardInfo("Mobilized District", "249p", Rarity.RARE, mage.cards.m.MobilizedDistrict.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Mobilized District", "249s", Rarity.RARE, mage.cards.m.MobilizedDistrict.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Nahiri, Storm of Stone", "233s", Rarity.UNCOMMON, mage.cards.n.NahiriStormOfStone.class, NON_FULL_USE_VARIOUS)); - //cards.add(new SetCardInfo("Nahiri, Storm of Stone", "233s★", Rarity.UNCOMMON, mage.cards.n.NahiriStormOfStone.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Narset's Reversal", "62s", Rarity.RARE, mage.cards.n.NarsetsReversal.class)); + cards.add(new SetCardInfo("Nahiri, Storm of Stone", "233s*", Rarity.UNCOMMON, mage.cards.n.NahiriStormOfStone.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Narset's Reversal", "62p", Rarity.RARE, mage.cards.n.NarsetsReversal.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Narset's Reversal", "62s", Rarity.RARE, mage.cards.n.NarsetsReversal.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Narset, Parter of Veils", "61s", Rarity.UNCOMMON, mage.cards.n.NarsetParterOfVeils.class, NON_FULL_USE_VARIOUS)); - //cards.add(new SetCardInfo("Narset, Parter of Veils", "61s★", Rarity.UNCOMMON, mage.cards.n.NarsetParterOfVeils.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Narset, Parter of Veils", "61s*", Rarity.UNCOMMON, mage.cards.n.NarsetParterOfVeils.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Neheb, Dreadhorde Champion", "140s", Rarity.RARE, mage.cards.n.NehebDreadhordeChampion.class)); cards.add(new SetCardInfo("Nicol Bolas, Dragon-God", "207p", Rarity.MYTHIC, mage.cards.n.NicolBolasDragonGod.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Nicol Bolas, Dragon-God", "207s", Rarity.MYTHIC, mage.cards.n.NicolBolasDragonGod.class, NON_FULL_USE_VARIOUS)); - //cards.add(new SetCardInfo("Nicol Bolas, Dragon-God", "207s★", Rarity.MYTHIC, mage.cards.n.NicolBolasDragonGod.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Nicol Bolas, Dragon-God", "207s*", Rarity.MYTHIC, mage.cards.n.NicolBolasDragonGod.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Nissa, Who Shakes the World", "169p", Rarity.RARE, mage.cards.n.NissaWhoShakesTheWorld.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Nissa, Who Shakes the World", "169s", Rarity.RARE, mage.cards.n.NissaWhoShakesTheWorld.class, NON_FULL_USE_VARIOUS)); - //cards.add(new SetCardInfo("Nissa, Who Shakes the World", "169s★", Rarity.RARE, mage.cards.n.NissaWhoShakesTheWorld.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Nissa, Who Shakes the World", "169s*", Rarity.RARE, mage.cards.n.NissaWhoShakesTheWorld.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Niv-Mizzet Reborn", "208s", Rarity.MYTHIC, mage.cards.n.NivMizzetReborn.class)); cards.add(new SetCardInfo("Oath of Kaya", "209p", Rarity.RARE, mage.cards.o.OathOfKaya.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Oath of Kaya", "209s", Rarity.RARE, mage.cards.o.OathOfKaya.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Ob Nixilis, the Hate-Twisted", "100s", Rarity.UNCOMMON, mage.cards.o.ObNixilisTheHateTwisted.class, NON_FULL_USE_VARIOUS)); - //cards.add(new SetCardInfo("Ob Nixilis, the Hate-Twisted", "100s★", Rarity.UNCOMMON, mage.cards.o.ObNixilisTheHateTwisted.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Ob Nixilis, the Hate-Twisted", "100s*", Rarity.UNCOMMON, mage.cards.o.ObNixilisTheHateTwisted.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Paradise Druid", 171, Rarity.UNCOMMON, mage.cards.p.ParadiseDruid.class)); cards.add(new SetCardInfo("Parhelion II", "24s", Rarity.RARE, mage.cards.p.ParhelionII.class)); cards.add(new SetCardInfo("Planewide Celebration", "172s", Rarity.RARE, mage.cards.p.PlanewideCelebration.class)); cards.add(new SetCardInfo("Ral, Storm Conduit", "211p", Rarity.RARE, mage.cards.r.RalStormConduit.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Ral, Storm Conduit", "211s", Rarity.RARE, mage.cards.r.RalStormConduit.class, NON_FULL_USE_VARIOUS)); - //cards.add(new SetCardInfo("Ral, Storm Conduit", "211s★", Rarity.RARE, mage.cards.r.RalStormConduit.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Ral, Storm Conduit", "211s*", Rarity.RARE, mage.cards.r.RalStormConduit.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Ravnica at War", "28s", Rarity.RARE, mage.cards.r.RavnicaAtWar.class)); cards.add(new SetCardInfo("Roalesk, Apex Hybrid", "213s", Rarity.MYTHIC, mage.cards.r.RoaleskApexHybrid.class)); cards.add(new SetCardInfo("Role Reversal", "214s", Rarity.RARE, mage.cards.r.RoleReversal.class)); cards.add(new SetCardInfo("Saheeli, Sublime Artificer", "234s", Rarity.UNCOMMON, mage.cards.s.SaheeliSublimeArtificer.class, NON_FULL_USE_VARIOUS)); - //cards.add(new SetCardInfo("Saheeli, Sublime Artificer", "234s★", Rarity.UNCOMMON, mage.cards.s.SaheeliSublimeArtificer.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Saheeli, Sublime Artificer", "234s*", Rarity.UNCOMMON, mage.cards.s.SaheeliSublimeArtificer.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Samut, Tyrant Smasher", "235s", Rarity.UNCOMMON, mage.cards.s.SamutTyrantSmasher.class, NON_FULL_USE_VARIOUS)); - //cards.add(new SetCardInfo("Samut, Tyrant Smasher", "235s★", Rarity.UNCOMMON, mage.cards.s.SamutTyrantSmasher.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Samut, Tyrant Smasher", "235s*", Rarity.UNCOMMON, mage.cards.s.SamutTyrantSmasher.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Sarkhan the Masterless", "143s", Rarity.RARE, mage.cards.s.SarkhanTheMasterless.class, NON_FULL_USE_VARIOUS)); - //cards.add(new SetCardInfo("Sarkhan the Masterless", "143s★", Rarity.RARE, mage.cards.s.SarkhanTheMasterless.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Silent Submersible", "66p", Rarity.RARE, mage.cards.s.SilentSubmersible.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Silent Submersible", "66s", Rarity.RARE, mage.cards.s.SilentSubmersible.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Sarkhan the Masterless", "143s*", Rarity.RARE, mage.cards.s.SarkhanTheMasterless.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Silent Submersible", "66s", Rarity.RARE, mage.cards.s.SilentSubmersible.class)); cards.add(new SetCardInfo("Single Combat", "30s", Rarity.RARE, mage.cards.s.SingleCombat.class)); cards.add(new SetCardInfo("Solar Blaze", "216p", Rarity.RARE, mage.cards.s.SolarBlaze.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Solar Blaze", "216s", Rarity.RARE, mage.cards.s.SolarBlaze.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Sorin, Vengeful Bloodlord", "217p", Rarity.RARE, mage.cards.s.SorinVengefulBloodlord.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Sorin, Vengeful Bloodlord", "217s", Rarity.RARE, mage.cards.s.SorinVengefulBloodlord.class, NON_FULL_USE_VARIOUS)); - //cards.add(new SetCardInfo("Sorin, Vengeful Bloodlord", "217s★", Rarity.RARE, mage.cards.s.SorinVengefulBloodlord.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Sorin, Vengeful Bloodlord", "217s*", Rarity.RARE, mage.cards.s.SorinVengefulBloodlord.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Soul Diviner", "218p", Rarity.RARE, mage.cards.s.SoulDiviner.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Soul Diviner", "218s", Rarity.RARE, mage.cards.s.SoulDiviner.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Spark Double", "68p", Rarity.RARE, mage.cards.s.SparkDouble.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Spark Double", "68s", Rarity.RARE, mage.cards.s.SparkDouble.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Storrev, Devkarin Lich", "219p", Rarity.RARE, mage.cards.s.StorrevDevkarinLich.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Storrev, Devkarin Lich", "219s", Rarity.RARE, mage.cards.s.StorrevDevkarinLich.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Tamiyo, Collector of Tales", "220p", Rarity.RARE, mage.cards.t.TamiyoCollectorOfTales.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Tamiyo, Collector of Tales", "220s", Rarity.RARE, mage.cards.t.TamiyoCollectorOfTales.class, NON_FULL_USE_VARIOUS)); - //cards.add(new SetCardInfo("Tamiyo, Collector of Tales", "220s★", Rarity.RARE, mage.cards.t.TamiyoCollectorOfTales.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Tamiyo, Collector of Tales", "220s*", Rarity.RARE, mage.cards.t.TamiyoCollectorOfTales.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Teferi, Time Raveler", "221p", Rarity.RARE, mage.cards.t.TeferiTimeRaveler.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Teferi, Time Raveler", "221s", Rarity.RARE, mage.cards.t.TeferiTimeRaveler.class, NON_FULL_USE_VARIOUS)); - //cards.add(new SetCardInfo("Teferi, Time Raveler", "221s★", Rarity.RARE, mage.cards.t.TeferiTimeRaveler.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Teferi, Time Raveler", "221s*", Rarity.RARE, mage.cards.t.TeferiTimeRaveler.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Teyo, the Shieldmage", "32s", Rarity.UNCOMMON, mage.cards.t.TeyoTheShieldmage.class, NON_FULL_USE_VARIOUS)); - //cards.add(new SetCardInfo("Teyo, the Shieldmage", "32s★", Rarity.UNCOMMON, mage.cards.t.TeyoTheShieldmage.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Teyo, the Shieldmage", "32s*", Rarity.UNCOMMON, mage.cards.t.TeyoTheShieldmage.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("The Elderspell", "89p", Rarity.RARE, mage.cards.t.TheElderspell.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("The Elderspell", "89s", Rarity.RARE, mage.cards.t.TheElderspell.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("The Wanderer", "37s", Rarity.UNCOMMON, mage.cards.t.TheWanderer.class, NON_FULL_USE_VARIOUS)); - //cards.add(new SetCardInfo("The Wanderer", "37s★", Rarity.UNCOMMON, mage.cards.t.TheWanderer.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("The Wanderer", "37s*", Rarity.UNCOMMON, mage.cards.t.TheWanderer.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Tibalt, Rakish Instigator", "146s", Rarity.UNCOMMON, mage.cards.t.TibaltRakishInstigator.class, NON_FULL_USE_VARIOUS)); - //cards.add(new SetCardInfo("Tibalt, Rakish Instigator", "146s★", Rarity.UNCOMMON, mage.cards.t.TibaltRakishInstigator.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Time Wipe", 223, Rarity.RARE, mage.cards.t.TimeWipe.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Tibalt, Rakish Instigator", "146s*", Rarity.UNCOMMON, mage.cards.t.TibaltRakishInstigator.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Time Wipe", "223p", Rarity.RARE, mage.cards.t.TimeWipe.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Time Wipe", "223s", Rarity.RARE, mage.cards.t.TimeWipe.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Time Wipe", 223, Rarity.RARE, mage.cards.t.TimeWipe.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Tolsimir, Friend to Wolves", "224p", Rarity.RARE, mage.cards.t.TolsimirFriendToWolves.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Tolsimir, Friend to Wolves", "224s", Rarity.RARE, mage.cards.t.TolsimirFriendToWolves.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Tomik, Distinguished Advokist", "34p", Rarity.RARE, mage.cards.t.TomikDistinguishedAdvokist.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Tomik, Distinguished Advokist", "34s", Rarity.RARE, mage.cards.t.TomikDistinguishedAdvokist.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Ugin, the Ineffable", "2p", Rarity.RARE, mage.cards.u.UginTheIneffable.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Ugin, the Ineffable", "2s", Rarity.RARE, mage.cards.u.UginTheIneffable.class, NON_FULL_USE_VARIOUS)); - //cards.add(new SetCardInfo("Ugin, the Ineffable", "2s★", Rarity.RARE, mage.cards.u.UginTheIneffable.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Ugin, the Ineffable", "2s*", Rarity.RARE, mage.cards.u.UginTheIneffable.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Vivien's Arkbow", "181s", Rarity.RARE, mage.cards.v.ViviensArkbow.class)); cards.add(new SetCardInfo("Vivien, Champion of the Wilds", "180p", Rarity.RARE, mage.cards.v.VivienChampionOfTheWilds.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Vivien, Champion of the Wilds", "180s", Rarity.RARE, mage.cards.v.VivienChampionOfTheWilds.class, NON_FULL_USE_VARIOUS)); - //cards.add(new SetCardInfo("Vivien, Champion of the Wilds", "180s★", Rarity.RARE, mage.cards.v.VivienChampionOfTheWilds.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Vivien, Champion of the Wilds", "180s*", Rarity.RARE, mage.cards.v.VivienChampionOfTheWilds.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Vraska, Swarm's Eminence", "236s", Rarity.UNCOMMON, mage.cards.v.VraskaSwarmsEminence.class, NON_FULL_USE_VARIOUS)); - //cards.add(new SetCardInfo("Vraska, Swarm's Eminence", "236s★", Rarity.UNCOMMON, mage.cards.v.VraskaSwarmsEminence.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Vraska, Swarm's Eminence", "236s*", Rarity.UNCOMMON, mage.cards.v.VraskaSwarmsEminence.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Widespread Brutality", "226p", Rarity.RARE, mage.cards.w.WidespreadBrutality.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Widespread Brutality", "226s", Rarity.RARE, mage.cards.w.WidespreadBrutality.class, NON_FULL_USE_VARIOUS)); - } + } } diff --git a/Mage.Sets/src/mage/sets/WorldChampionshipDecks1997.java b/Mage.Sets/src/mage/sets/WorldChampionshipDecks1997.java index 1a83c8799cd..741ae62a98d 100644 --- a/Mage.Sets/src/mage/sets/WorldChampionshipDecks1997.java +++ b/Mage.Sets/src/mage/sets/WorldChampionshipDecks1997.java @@ -62,7 +62,7 @@ public class WorldChampionshipDecks1997 extends ExpansionSet { cards.add(new SetCardInfo("Frenetic Efreet", "jk264", Rarity.RARE, mage.cards.f.FreneticEfreet.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Fyndhorn Elves", "sg244", Rarity.COMMON, mage.cards.f.FyndhornElves.class)); cards.add(new SetCardInfo("Gemstone Mine", "js164", Rarity.UNCOMMON, mage.cards.g.GemstoneMine.class)); - cards.add(new SetCardInfo("Ghazbán Ogre", "sg298", Rarity.COMMON, mage.cards.g.GhazbanOgre.class)); + cards.add(new SetCardInfo("Ghazban Ogre", "sg298", Rarity.COMMON, mage.cards.g.GhazbanOgre.class)); cards.add(new SetCardInfo("Giant Growth", "sg299", Rarity.COMMON, mage.cards.g.GiantGrowth.class)); cards.add(new SetCardInfo("Hammer of Bogardan", "jk181", Rarity.RARE, mage.cards.h.HammerOfBogardan.class)); cards.add(new SetCardInfo("Harvest Wurm", "sg130", Rarity.COMMON, mage.cards.h.HarvestWurm.class)); diff --git a/Mage.Sets/src/mage/sets/WorldChampionshipDecks1998.java b/Mage.Sets/src/mage/sets/WorldChampionshipDecks1998.java index 071fd53926a..cd8507352e9 100644 --- a/Mage.Sets/src/mage/sets/WorldChampionshipDecks1998.java +++ b/Mage.Sets/src/mage/sets/WorldChampionshipDecks1998.java @@ -21,9 +21,9 @@ public class WorldChampionshipDecks1998 extends ExpansionSet { this.hasBasicLands = true; cards.add(new SetCardInfo("Abeyance", "bh1sb", Rarity.RARE, mage.cards.a.Abeyance.class)); - cards.add(new SetCardInfo("Armageddon", "bh7sba", Rarity.RARE, mage.cards.a.Armageddon.class)); - cards.add(new SetCardInfo("Aura of Silence", "bh7sbb", Rarity.UNCOMMON, mage.cards.a.AuraOfSilence.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Armageddon", "bh7asb", Rarity.RARE, mage.cards.a.Armageddon.class)); cards.add(new SetCardInfo("Aura of Silence", "bh7b", Rarity.UNCOMMON, mage.cards.a.AuraOfSilence.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Aura of Silence", "bh7bsb", Rarity.UNCOMMON, mage.cards.a.AuraOfSilence.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Ball Lightning", "br210", Rarity.RARE, mage.cards.b.BallLightning.class)); cards.add(new SetCardInfo("Birds of Paradise", "bs280", Rarity.RARE, mage.cards.b.BirdsOfParadise.class)); cards.add(new SetCardInfo("Boil", "bs165sb", Rarity.UNCOMMON, mage.cards.b.Boil.class)); @@ -33,10 +33,10 @@ public class WorldChampionshipDecks1998 extends ExpansionSet { cards.add(new SetCardInfo("City of Brass", "bs112a", Rarity.RARE, mage.cards.c.CityOfBrass.class)); cards.add(new SetCardInfo("Cloudchaser Eagle", "bs15", Rarity.COMMON, mage.cards.c.CloudchaserEagle.class)); cards.add(new SetCardInfo("Counterspell", "rb57", Rarity.COMMON, mage.cards.c.Counterspell.class)); - cards.add(new SetCardInfo("Cursed Scroll", "br281", Rarity.RARE, mage.cards.c.CursedScroll.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Cursed Scroll", "bh281sb", Rarity.RARE, mage.cards.c.CursedScroll.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Disenchant", "bh16sb", Rarity.COMMON, mage.cards.d.Disenchant.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Cursed Scroll", "br281", Rarity.RARE, mage.cards.c.CursedScroll.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Disenchant", "bh16", Rarity.COMMON, mage.cards.d.Disenchant.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Disenchant", "bh16sb", Rarity.COMMON, mage.cards.d.Disenchant.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Dismiss", "rb58a", Rarity.UNCOMMON, mage.cards.d.Dismiss.class)); cards.add(new SetCardInfo("Dissipate", "rb61", Rarity.UNCOMMON, mage.cards.d.Dissipate.class)); cards.add(new SetCardInfo("Dread of Night", "bs130sb", Rarity.UNCOMMON, mage.cards.d.DreadOfNight.class)); @@ -46,14 +46,14 @@ public class WorldChampionshipDecks1998 extends ExpansionSet { cards.add(new SetCardInfo("Empyrial Armor", "bh13", Rarity.COMMON, mage.cards.e.EmpyrialArmor.class)); cards.add(new SetCardInfo("Final Fortune", "br174sb", Rarity.RARE, mage.cards.f.FinalFortune.class)); cards.add(new SetCardInfo("Fireblast", "br79", Rarity.COMMON, mage.cards.f.Fireblast.class)); - cards.add(new SetCardInfo("Firestorm", "bs101", Rarity.RARE, mage.cards.f.Firestorm.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Firestorm", "br101sb", Rarity.RARE, mage.cards.f.Firestorm.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Firestorm", "bs101", Rarity.RARE, mage.cards.f.Firestorm.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Forbid", "rb35", Rarity.UNCOMMON, mage.cards.f.Forbid.class)); cards.add(new SetCardInfo("Force Spike", "rb58b", Rarity.COMMON, mage.cards.f.ForceSpike.class)); - cards.add(new SetCardInfo("Forest", "bs350", Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Forest", "bs349", Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Forest", "bs348", Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Forest", "bs347", Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", "bs348", Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", "bs349", Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", "bs350", Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Gemstone Mine", "bs164", Rarity.UNCOMMON, mage.cards.g.GemstoneMine.class)); cards.add(new SetCardInfo("Goblin Vandal", "br105", Rarity.COMMON, mage.cards.g.GoblinVandal.class)); cards.add(new SetCardInfo("Grindstone", "rb290sb", Rarity.RARE, mage.cards.g.Grindstone.class)); @@ -63,34 +63,34 @@ public class WorldChampionshipDecks1998 extends ExpansionSet { cards.add(new SetCardInfo("Impulse", "rb34", Rarity.COMMON, mage.cards.i.Impulse.class)); cards.add(new SetCardInfo("Incinerate", "br184", Rarity.COMMON, mage.cards.i.Incinerate.class)); cards.add(new SetCardInfo("Ironclaw Orcs", "br245", Rarity.COMMON, mage.cards.i.IronclawOrcs.class)); - cards.add(new SetCardInfo("Island", "rb338", Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Island", "rb337", Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Island", "rb336", Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Island", "rb335", Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", "rb336", Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", "rb337", Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", "rb338", Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Jackal Pup", "br183", Rarity.UNCOMMON, mage.cards.j.JackalPup.class)); - cards.add(new SetCardInfo("Karplusan Forest", "bs356sb", Rarity.RARE, mage.cards.k.KarplusanForest.class)); + cards.add(new SetCardInfo("Karplusan Forest", "bs356", Rarity.RARE, mage.cards.k.KarplusanForest.class)); cards.add(new SetCardInfo("Lobotomy", "bs267", Rarity.UNCOMMON, mage.cards.l.Lobotomy.class)); cards.add(new SetCardInfo("Man-o'-War", "bs37", Rarity.COMMON, mage.cards.m.ManOWar.class)); cards.add(new SetCardInfo("Mana Leak", "rb36", Rarity.COMMON, mage.cards.m.ManaLeak.class)); cards.add(new SetCardInfo("Memory Lapse", "rb32", Rarity.COMMON, mage.cards.m.MemoryLapse.class)); cards.add(new SetCardInfo("Mogg Fanatic", "br190", Rarity.COMMON, mage.cards.m.MoggFanatic.class)); cards.add(new SetCardInfo("Mogg Flunkies", "br92", Rarity.COMMON, mage.cards.m.MoggFlunkies.class)); - cards.add(new SetCardInfo("Mountain", "br346", Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Mountain", "br345", Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Mountain", "br344", Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Mountain", "br343", Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", "br344", Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", "br345", Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", "br346", Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Nekrataal", "bs66", Rarity.UNCOMMON, mage.cards.n.Nekrataal.class)); cards.add(new SetCardInfo("Nevinyrral's Disk", "rb391", Rarity.RARE, mage.cards.n.NevinyrralsDisk.class)); cards.add(new SetCardInfo("Nomads en-Kor", "bh9", Rarity.COMMON, mage.cards.n.NomadsEnKor.class)); cards.add(new SetCardInfo("Orcish Settlers", "bs112b", Rarity.UNCOMMON, mage.cards.o.OrcishSettlers.class)); cards.add(new SetCardInfo("Paladin en-Vec", "bh12", Rarity.RARE, mage.cards.p.PaladinEnVec.class)); cards.add(new SetCardInfo("Phyrexian Furnace", "bs155sb", Rarity.UNCOMMON, mage.cards.p.PhyrexianFurnace.class)); - cards.add(new SetCardInfo("Plains", "bh334", Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Plains", "bh333", Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Plains", "bh332", Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Plains", "bh331", Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Pyroblast", "bs213sb", Rarity.COMMON, mage.cards.p.Pyroblast.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", "bh332", Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", "bh333", Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", "bh334", Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Pyroblast", "br213sb", Rarity.COMMON, mage.cards.p.Pyroblast.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Pyroblast", "bs213sb", Rarity.COMMON, mage.cards.p.Pyroblast.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Quicksand", "rb166", Rarity.UNCOMMON, mage.cards.q.Quicksand.class)); cards.add(new SetCardInfo("Rainbow Efreet", "rb41", Rarity.RARE, mage.cards.r.RainbowEfreet.class)); cards.add(new SetCardInfo("Recurring Nightmare", "bs72", Rarity.RARE, mage.cards.r.RecurringNightmare.class)); @@ -123,9 +123,9 @@ public class WorldChampionshipDecks1998 extends ExpansionSet { cards.add(new SetCardInfo("Wall of Blossoms", "bs125", Rarity.UNCOMMON, mage.cards.w.WallOfBlossoms.class)); cards.add(new SetCardInfo("Wall of Roots", "bs253", Rarity.COMMON, mage.cards.w.WallOfRoots.class)); cards.add(new SetCardInfo("Warrior en-Kor", "bh23b", Rarity.UNCOMMON, mage.cards.w.WarriorEnKor.class)); - cards.add(new SetCardInfo("Wasteland", "rb330sb", Rarity.UNCOMMON, mage.cards.w.Wasteland.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Wasteland", "br330", Rarity.UNCOMMON, mage.cards.w.Wasteland.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Wasteland", "rb330sb", Rarity.UNCOMMON, mage.cards.w.Wasteland.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Whispers of the Muse", "rb103", Rarity.UNCOMMON, mage.cards.w.WhispersOfTheMuse.class)); cards.add(new SetCardInfo("White Knight", "bh68", Rarity.UNCOMMON, mage.cards.w.WhiteKnight.class)); - } + } } diff --git a/Mage.Sets/src/mage/sets/WorldChampionshipDecks2004.java b/Mage.Sets/src/mage/sets/WorldChampionshipDecks2004.java index 160c9a8905b..27cbc3c4e29 100644 --- a/Mage.Sets/src/mage/sets/WorldChampionshipDecks2004.java +++ b/Mage.Sets/src/mage/sets/WorldChampionshipDecks2004.java @@ -51,7 +51,7 @@ public class WorldChampionshipDecks2004 extends ExpansionSet { cards.add(new SetCardInfo("Forest", "jn348", Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Forest", "jn350", Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Frogmite", "ap172", Rarity.COMMON, mage.cards.f.Frogmite.class)); - cards.add(new SetCardInfo("Furnace Dragon", "ap62sbb", Rarity.RARE, mage.cards.f.FurnaceDragon.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Furnace Dragon", "ap62sb", Rarity.RARE, mage.cards.f.FurnaceDragon.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Furnace Dragon", "mb62sb", Rarity.RARE, mage.cards.f.FurnaceDragon.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Glimmervoid", "ap281", Rarity.RARE, mage.cards.g.Glimmervoid.class)); cards.add(new SetCardInfo("Goblin Charbelcher", "mb176", Rarity.RARE, mage.cards.g.GoblinCharbelcher.class)); @@ -66,7 +66,7 @@ public class WorldChampionshipDecks2004 extends ExpansionSet { cards.add(new SetCardInfo("Myr Incubator", "mb212", Rarity.RARE, mage.cards.m.MyrIncubator.class)); cards.add(new SetCardInfo("Ornithopter", "ap224", Rarity.UNCOMMON, mage.cards.o.Ornithopter.class)); cards.add(new SetCardInfo("Oxidize", "jn79sb", Rarity.COMMON, mage.cards.o.Oxidize.class)); - cards.add(new SetCardInfo("Pacifism", "gn33", Rarity.COMMON, mage.cards.p.Pacifism.class)); + cards.add(new SetCardInfo("Pacifism", "gn33sb", Rarity.COMMON, mage.cards.p.Pacifism.class)); cards.add(new SetCardInfo("Pentad Prism", "mb143", Rarity.COMMON, mage.cards.p.PentadPrism.class)); cards.add(new SetCardInfo("Plains", "gn331", Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Plains", "gn332", Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); @@ -82,13 +82,13 @@ public class WorldChampionshipDecks2004 extends ExpansionSet { cards.add(new SetCardInfo("Relic Barrier", "gn147sb", Rarity.UNCOMMON, mage.cards.r.RelicBarrier.class)); cards.add(new SetCardInfo("Renewed Faith", "jn50", Rarity.COMMON, mage.cards.r.RenewedFaith.class)); cards.add(new SetCardInfo("Rewind", "gn96", Rarity.UNCOMMON, mage.cards.r.Rewind.class)); - cards.add(new SetCardInfo("Rude Awakening", "jn92", Rarity.RARE, mage.cards.r.RudeAwakening.class)); + cards.add(new SetCardInfo("Rude Awakening", "jn92sb", Rarity.RARE, mage.cards.r.RudeAwakening.class)); cards.add(new SetCardInfo("Scrabbling Claws", "gn237sb", Rarity.UNCOMMON, mage.cards.s.ScrabblingClaws.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Scrabbling Claws", "jn237", Rarity.UNCOMMON, mage.cards.s.ScrabblingClaws.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Scrabbling Claws", "jn237sb", Rarity.UNCOMMON, mage.cards.s.ScrabblingClaws.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Seat of the Synod", "ap283", Rarity.COMMON, mage.cards.s.SeatOfTheSynod.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Seat of the Synod", "mb283", Rarity.COMMON, mage.cards.s.SeatOfTheSynod.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Secluded Steppe", "jn324", Rarity.COMMON, mage.cards.s.SecludedSteppe.class)); - cards.add(new SetCardInfo("Seething Song", "ap104sbb", Rarity.COMMON, mage.cards.s.SeethingSong.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Seething Song", "ap104sb", Rarity.COMMON, mage.cards.s.SeethingSong.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Seething Song", "mb104sb", Rarity.COMMON, mage.cards.s.SeethingSong.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Serum Visions", "ap36sb", Rarity.COMMON, mage.cards.s.SerumVisions.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Serum Visions", "mb36", Rarity.COMMON, mage.cards.s.SerumVisions.class, NON_FULL_USE_VARIOUS)); @@ -98,7 +98,7 @@ public class WorldChampionshipDecks2004 extends ExpansionSet { cards.add(new SetCardInfo("Talisman of Dominance", "mb253", Rarity.UNCOMMON, mage.cards.t.TalismanOfDominance.class)); cards.add(new SetCardInfo("Talisman of Progress", "mb256", Rarity.UNCOMMON, mage.cards.t.TalismanOfProgress.class)); cards.add(new SetCardInfo("Temple of the False God", "gn143", Rarity.UNCOMMON, mage.cards.t.TempleOfTheFalseGod.class)); - cards.add(new SetCardInfo("Thirst for Knowledge", "gn53", Rarity.COMMON, mage.cards.t.ThirstForKnowledge.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Thirst for Knowledge", "gn53", Rarity.UNCOMMON, mage.cards.t.ThirstForKnowledge.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Thirst for Knowledge", "mb53", Rarity.UNCOMMON, mage.cards.t.ThirstForKnowledge.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Thoughtcast", "ap54", Rarity.COMMON, mage.cards.t.Thoughtcast.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Thoughtcast", "mb54", Rarity.COMMON, mage.cards.t.Thoughtcast.class, NON_FULL_USE_VARIOUS)); @@ -113,5 +113,5 @@ public class WorldChampionshipDecks2004 extends ExpansionSet { cards.add(new SetCardInfo("Wing Shards", "jn25", Rarity.UNCOMMON, mage.cards.w.WingShards.class)); cards.add(new SetCardInfo("Wrath of God", "gn58", Rarity.RARE, mage.cards.w.WrathOfGod.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Wrath of God", "jn58", Rarity.RARE, mage.cards.w.WrathOfGod.class, NON_FULL_USE_VARIOUS)); - } + } } From 9652d83aec353822e1af36de687b24062716f31a Mon Sep 17 00:00:00 2001 From: Oleg Agafonov Date: Sat, 8 Aug 2020 19:08:38 +0400 Subject: [PATCH 176/182] Fixed tests --- .../plugins/card/dl/sources/ScryfallImageSupportCards.java | 1 + Mage.Sets/src/mage/sets/ArenaNewPlayerExperience.java | 2 +- .../src/test/java/mage/verify/VerifyCardDataTest.java | 7 ++++--- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java index 1c25e6a4dde..862af1ce0c9 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java @@ -414,6 +414,7 @@ public class ScryfallImageSupportCards { add("PSS3"); // M19 Standard Showdown add("M19"); // Core Set 2019 add("ANA"); // Arena New Player Experience + add("XANA"); // Arena New Player Experience Extras add("PS18"); // San Diego Comic-Con 2018 //add("HTR17"); // Heroes of the Realm 2017 add("C18"); // Commander 2018 diff --git a/Mage.Sets/src/mage/sets/ArenaNewPlayerExperience.java b/Mage.Sets/src/mage/sets/ArenaNewPlayerExperience.java index 2a3492ea815..62405f0367d 100644 --- a/Mage.Sets/src/mage/sets/ArenaNewPlayerExperience.java +++ b/Mage.Sets/src/mage/sets/ArenaNewPlayerExperience.java @@ -18,7 +18,7 @@ public final class ArenaNewPlayerExperience extends ExpansionSet { private ArenaNewPlayerExperience() { super("Arena New Player Experience", "ANA", ExpansionSet.buildDate(2018, 7, 14), SetType.MAGIC_ONLINE); this.hasBoosters = false; - this.hasBasicLands = false; + this.hasBasicLands = true; cards.add(new SetCardInfo("Angelic Reward", 1, Rarity.UNCOMMON, mage.cards.a.AngelicReward.class)); cards.add(new SetCardInfo("Confront the Assault", 3, Rarity.UNCOMMON, mage.cards.c.ConfrontTheAssault.class)); diff --git a/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java b/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java index e4da05ec296..bb5daf3a0a4 100644 --- a/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java +++ b/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java @@ -391,10 +391,11 @@ public class VerifyCardDataTest { } } - // unique cards stats - errorsList.add("Total unique cards: " + classesIndex.size() + ", total non unique cards (reprints): " + totalCards); - printMessages(errorsList); + + // unique cards stats + System.out.println("Total unique cards: " + classesIndex.size() + ", total non unique cards (reprints): " + totalCards); + if (errorsList.size() > 0) { Assert.fail("DB has wrong card classes, found errors: " + errorsList.size()); } From c5d7a3e9f96fc03ba1740f0a36f144c0b06dafd5 Mon Sep 17 00:00:00 2001 From: Oleg Agafonov Date: Sat, 8 Aug 2020 21:27:20 +0400 Subject: [PATCH 177/182] * GUI: added auto-fix for deck files on usage (if deck contains wrong card numbers then it will be fixed and saved automaticity); --- .../mage/client/components/LegalityLabel.java | 2 +- .../client/deckeditor/DeckEditorPanel.java | 26 ++- .../mage/client/dialog/JoinTableDialog.java | 73 +++---- .../mage/client/dialog/NewTableDialog.java | 2 +- .../client/dialog/NewTournamentDialog.java | 12 +- .../java/mage/client/game/PlayAreaPanel.java | 8 +- .../java/mage/client/game/PlayerPanelExt.java | 22 ++- .../mage/client/table/TablePlayerPanel.java | 5 +- .../java/mage/client/table/TablesPanel.java | 98 ++++----- .../decks/importer/TxtDeckImporterTest.java | 2 +- .../base/impl/CardTestPlayerAPIImpl.java | 2 +- .../java/mage/verify/VerifyCardDataTest.java | 5 +- .../cards/decks/importer/CodDeckImporter.java | 111 ++++++----- .../cards/decks/importer/DckDeckImporter.java | 36 +++- .../cards/decks/importer/DecDeckImporter.java | 10 +- .../cards/decks/importer/DeckImporter.java | 187 ++++++++++-------- .../cards/decks/importer/DekDeckImporter.java | 12 +- .../decks/importer/DraftLogImporter.java | 7 +- .../decks/importer/JsonDeckImporter.java | 20 +- .../cards/decks/importer/MWSDeckImporter.java | 12 +- .../cards/decks/importer/MtgaImporter.java | 16 +- .../cards/decks/importer/O8dDeckImporter.java | 107 +++++----- .../decks/importer/PlainTextDeckImporter.java | 70 +++++-- .../cards/decks/importer/TxtDeckImporter.java | 2 +- .../decks/importer/CodDeckImportTest.java | 57 +++--- .../decks/importer/DecDeckImportTest.java | 81 ++++---- .../decks/importer/DraftLogImporterTest.java | 4 +- .../decks/importer/MtgaImporterTest.java | 6 +- .../decks/importer/MtgjsonDeckImportTest.java | 91 +++++---- .../decks/importer/MwsDeckImportTest.java | 82 ++++---- .../decks/importer/O8dDeckImportTest.java | 43 ++-- 31 files changed, 644 insertions(+), 567 deletions(-) diff --git a/Mage.Client/src/main/java/mage/client/components/LegalityLabel.java b/Mage.Client/src/main/java/mage/client/components/LegalityLabel.java index 9d0a70b4bbd..2998015766b 100644 --- a/Mage.Client/src/main/java/mage/client/components/LegalityLabel.java +++ b/Mage.Client/src/main/java/mage/client/components/LegalityLabel.java @@ -187,7 +187,7 @@ public class LegalityLabel extends JLabel { } try { StringBuilder errorMessages = new StringBuilder(); - Deck deck = Deck.load(DeckImporter.importDeckFromFile(deckFile.getAbsolutePath(), errorMessages), true, true); + Deck deck = Deck.load(DeckImporter.importDeckFromFile(deckFile.getAbsolutePath(), errorMessages, false), true, true); errorMessage = errorMessages.toString(); validateDeck(deck); } catch (Exception ex) { diff --git a/Mage.Client/src/main/java/mage/client/deckeditor/DeckEditorPanel.java b/Mage.Client/src/main/java/mage/client/deckeditor/DeckEditorPanel.java index be08f0511ba..887c193764d 100644 --- a/Mage.Client/src/main/java/mage/client/deckeditor/DeckEditorPanel.java +++ b/Mage.Client/src/main/java/mage/client/deckeditor/DeckEditorPanel.java @@ -187,11 +187,9 @@ public class DeckEditorPanel extends javax.swing.JPanel { case SIDEBOARDING: this.btnSubmit.setVisible(true); this.btnSubmitTimer.setVisible(true); - if (mode == DeckEditorMode.SIDEBOARDING) { - this.deckArea.setOrientation(/*limitedBuildingOrientation = */false); - } else /*(if (mode == LIMITED_BUILDING)*/ { - this.deckArea.setOrientation(/*limitedBuildingOrientation = */true); - } + /*(if (mode == LIMITED_BUILDING)*/ + /*limitedBuildingOrientation = */ + this.deckArea.setOrientation(/*limitedBuildingOrientation = */mode != DeckEditorMode.SIDEBOARDING); this.cardSelector.setVisible(false); this.btnExit.setVisible(false); this.btnImport.setVisible(false); @@ -479,14 +477,14 @@ public class DeckEditorPanel extends javax.swing.JPanel { @Override protected boolean handleFilesDrop(boolean move, List files) { - loadDeck(files.get(0).getAbsolutePath()); + loadDeck(files.get(0).getAbsolutePath(), true); return true; } @Override protected boolean handlePlainTextDrop(boolean move, String text) { String tmpFile = DeckUtil.writeTextToTempFile(text); - loadDeck(tmpFile); + loadDeck(tmpFile, false); return true; } })); @@ -679,7 +677,7 @@ public class DeckEditorPanel extends javax.swing.JPanel { StringBuilder errorMessages = new StringBuilder(); Deck newDeck = null; - newDeck = Deck.load(importer.importDeck(file.getPath(), errorMessages)); + newDeck = Deck.load(importer.importDeck(file.getPath(), errorMessages, true)); // file will be auto-fixed and saved on simple errors processAndShowImportErrors(errorMessages); if (newDeck != null) { @@ -711,7 +709,7 @@ public class DeckEditorPanel extends javax.swing.JPanel { dialog.showDialog(); if (!dialog.getTmpPath().isEmpty()) { - loadDeck(dialog.getTmpPath()); + loadDeck(dialog.getTmpPath(), false); } } @@ -725,7 +723,7 @@ public class DeckEditorPanel extends javax.swing.JPanel { MageFrame.getDesktop().setCursor(new Cursor(Cursor.WAIT_CURSOR)); try { - deckToAppend = Deck.load(DeckImporter.importDeckFromFile(dialog.getTmpPath(), errorMessages), true, true); + deckToAppend = Deck.load(DeckImporter.importDeckFromFile(dialog.getTmpPath(), errorMessages, false), true, true); processAndShowImportErrors(errorMessages); if (deckToAppend != null) { @@ -819,11 +817,11 @@ public class DeckEditorPanel extends javax.swing.JPanel { } } - private boolean loadDeck(String file) { + private boolean loadDeck(String file, boolean saveAutoFixedFile) { MageFrame.getDesktop().setCursor(new Cursor(Cursor.WAIT_CURSOR)); try { StringBuilder errorMessages = new StringBuilder(); - Deck newDeck = Deck.load(DeckImporter.importDeckFromFile(file, errorMessages), true, true); + Deck newDeck = Deck.load(DeckImporter.importDeckFromFile(file, errorMessages, saveAutoFixedFile), true, true); processAndShowImportErrors(errorMessages); if (newDeck != null) { @@ -1343,7 +1341,7 @@ public class DeckEditorPanel extends javax.swing.JPanel { Deck newDeck = null; StringBuilder errorMessages = new StringBuilder(); - newDeck = Deck.load(DeckImporter.importDeckFromFile(file.getPath(), errorMessages), true, true); + newDeck = Deck.load(DeckImporter.importDeckFromFile(file.getPath(), errorMessages, true), true, true); processAndShowImportErrors(errorMessages); if (newDeck != null) { @@ -1394,7 +1392,7 @@ public class DeckEditorPanel extends javax.swing.JPanel { try { MageFrame.getDesktop().setCursor(new Cursor(Cursor.WAIT_CURSOR)); String path = DeckGenerator.generateDeck(); - deck = Deck.load(DeckImporter.importDeckFromFile(path), true, true); + deck = Deck.load(DeckImporter.importDeckFromFile(path, false), true, true); } catch (GameException ex) { JOptionPane.showMessageDialog(MageFrame.getDesktop(), ex.getMessage(), "Error loading generated deck", JOptionPane.ERROR_MESSAGE); } catch (DeckGeneratorException ex) { diff --git a/Mage.Client/src/main/java/mage/client/dialog/JoinTableDialog.java b/Mage.Client/src/main/java/mage/client/dialog/JoinTableDialog.java index 5d4e19e7642..f95da5a77f7 100644 --- a/Mage.Client/src/main/java/mage/client/dialog/JoinTableDialog.java +++ b/Mage.Client/src/main/java/mage/client/dialog/JoinTableDialog.java @@ -1,4 +1,3 @@ - package mage.client.dialog; import mage.cards.decks.importer.DeckImporter; @@ -12,7 +11,6 @@ import javax.swing.*; import java.util.UUID; /** - * * @author BetaSteward_at_googlemail.com */ public class JoinTableDialog extends MageDialog { @@ -24,7 +22,9 @@ public class JoinTableDialog extends MageDialog { private boolean joined = false; private boolean isTournament; - /** Creates new form JoinTableDialog */ + /** + * Creates new form JoinTableDialog + */ public JoinTableDialog() { initComponents(); newPlayerPanel.showLevel(false); @@ -43,7 +43,8 @@ public class JoinTableDialog extends MageDialog { } - /** This method is called from within the constructor to + /** + * This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. @@ -73,37 +74,37 @@ public class JoinTableDialog extends MageDialog { javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( - layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() - .addGap(0, 0, Short.MAX_VALUE) - .addComponent(btnOK) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(btnCancel)) - .addComponent(newPlayerPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 414, Short.MAX_VALUE) - .addGroup(layout.createSequentialGroup() - .addComponent(lblPassword) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(txtPassword, javax.swing.GroupLayout.PREFERRED_SIZE, 120, javax.swing.GroupLayout.PREFERRED_SIZE) - .addGap(0, 0, Short.MAX_VALUE))) - .addContainerGap()) + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() + .addGap(0, 0, Short.MAX_VALUE) + .addComponent(btnOK) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(btnCancel)) + .addComponent(newPlayerPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 414, Short.MAX_VALUE) + .addGroup(layout.createSequentialGroup() + .addComponent(lblPassword) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(txtPassword, javax.swing.GroupLayout.PREFERRED_SIZE, 120, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(0, 0, Short.MAX_VALUE))) + .addContainerGap()) ); layout.setVerticalGroup( - layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() - .addContainerGap() - .addComponent(newPlayerPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(lblPassword) - .addComponent(txtPassword, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(btnCancel) - .addComponent(btnOK)) - .addContainerGap()) + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() + .addContainerGap() + .addComponent(newPlayerPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(lblPassword) + .addComponent(txtPassword, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(btnCancel) + .addComponent(btnOK)) + .addContainerGap()) ); pack(); @@ -119,11 +120,11 @@ public class JoinTableDialog extends MageDialog { try { PreferencesDialog.saveValue(PreferencesDialog.KEY_NEW_TABLE_PASSWORD_JOIN, txtPassword.getText()); if (isTournament) { - joined = session.joinTournamentTable(roomId, tableId, this.newPlayerPanel.getPlayerName(), PlayerType.HUMAN, 1, DeckImporter.importDeckFromFile(this.newPlayerPanel.getDeckFile()), this.txtPassword.getText()); + joined = session.joinTournamentTable(roomId, tableId, this.newPlayerPanel.getPlayerName(), PlayerType.HUMAN, 1, DeckImporter.importDeckFromFile(this.newPlayerPanel.getDeckFile(), true), this.txtPassword.getText()); } else { - joined = session.joinTable(roomId, tableId, this.newPlayerPanel.getPlayerName(), PlayerType.HUMAN, 1, DeckImporter.importDeckFromFile(this.newPlayerPanel.getDeckFile()), this.txtPassword.getText()); + joined = session.joinTable(roomId, tableId, this.newPlayerPanel.getPlayerName(), PlayerType.HUMAN, 1, DeckImporter.importDeckFromFile(this.newPlayerPanel.getDeckFile(), true), this.txtPassword.getText()); } - + } catch (Exception ex) { handleError(ex); } diff --git a/Mage.Client/src/main/java/mage/client/dialog/NewTableDialog.java b/Mage.Client/src/main/java/mage/client/dialog/NewTableDialog.java index a905c849265..0e063c2f5a8 100644 --- a/Mage.Client/src/main/java/mage/client/dialog/NewTableDialog.java +++ b/Mage.Client/src/main/java/mage/client/dialog/NewTableDialog.java @@ -525,7 +525,7 @@ public class NewTableDialog extends MageDialog { table.getTableId(), this.player1Panel.getPlayerName(), PlayerType.HUMAN, 1, - DeckImporter.importDeckFromFile(this.player1Panel.getDeckFile()), + DeckImporter.importDeckFromFile(this.player1Panel.getDeckFile(), true), this.txtPassword.getText())) { for (TablePlayerPanel player : players) { if (player.getPlayerType() != PlayerType.HUMAN) { diff --git a/Mage.Client/src/main/java/mage/client/dialog/NewTournamentDialog.java b/Mage.Client/src/main/java/mage/client/dialog/NewTournamentDialog.java index 2e4b980870a..496a8a30516 100644 --- a/Mage.Client/src/main/java/mage/client/dialog/NewTournamentDialog.java +++ b/Mage.Client/src/main/java/mage/client/dialog/NewTournamentDialog.java @@ -687,11 +687,11 @@ public class NewTournamentDialog extends MageDialog { table.getTableId(), this.player1Panel.getPlayerName(), PlayerType.HUMAN, 1, - DeckImporter.importDeckFromFile(this.player1Panel.getDeckFile()), + DeckImporter.importDeckFromFile(this.player1Panel.getDeckFile(), true), tOptions.getPassword())) { for (TournamentPlayerPanel player : players) { if (player.getPlayerType().getSelectedItem() != PlayerType.HUMAN) { - if (!player.joinTournamentTable(roomId, table.getTableId(), DeckImporter.importDeckFromFile(this.player1Panel.getDeckFile()))) { + if (!player.joinTournamentTable(roomId, table.getTableId(), DeckImporter.importDeckFromFile(this.player1Panel.getDeckFile(), true))) { // error message must be send by sever SessionHandler.removeTable(roomId, table.getTableId()); table = null; @@ -743,11 +743,7 @@ public class NewTournamentDialog extends MageDialog { private void spnNumSeatsStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_spnNumSeatsStateChanged int numSeats = (Integer) this.spnNumSeats.getValue(); - if (numSeats > 2) { - this.spnNumPlayers.setEnabled(false); - } else { - this.spnNumPlayers.setEnabled(true); - } + this.spnNumPlayers.setEnabled(numSeats <= 2); updateNumSeats(); }//GEN-LAST:event_spnNumSeatsStateChanged @@ -1209,7 +1205,7 @@ public class NewTournamentDialog extends MageDialog { if (!(cubeFromDeckFilename.isEmpty())) { Deck cubeFromDeck = new Deck(); try { - cubeFromDeck = Deck.load(DeckImporter.importDeckFromFile(cubeFromDeckFilename), true, true); + cubeFromDeck = Deck.load(DeckImporter.importDeckFromFile(cubeFromDeckFilename, true), true, true); } catch (GameException e1) { JOptionPane.showMessageDialog(MageFrame.getDesktop(), e1.getMessage(), "Error loading deck", JOptionPane.ERROR_MESSAGE); } diff --git a/Mage.Client/src/main/java/mage/client/game/PlayAreaPanel.java b/Mage.Client/src/main/java/mage/client/game/PlayAreaPanel.java index 1f04a72fd2a..f7c2c2b35fe 100644 --- a/Mage.Client/src/main/java/mage/client/game/PlayAreaPanel.java +++ b/Mage.Client/src/main/java/mage/client/game/PlayAreaPanel.java @@ -498,11 +498,7 @@ public class PlayAreaPanel extends javax.swing.JPanel { this.battlefieldPanel.init(gameId, bigCard); this.gameId = gameId; this.playerId = player.getPlayerId(); - if (SessionHandler.isTestMode()) { - this.btnCheat.setVisible(true); - } else { - this.btnCheat.setVisible(false); - } + this.btnCheat.setVisible(SessionHandler.isTestMode()); } public final void update(GameView game, PlayerView player, Set possibleTargets) { @@ -561,7 +557,7 @@ public class PlayAreaPanel extends javax.swing.JPanel { } private void btnCheatActionPerformed(java.awt.event.ActionEvent evt) { - SessionHandler.cheat(gameId, playerId, DeckImporter.importDeckFromFile("cheat.dck")); + SessionHandler.cheat(gameId, playerId, DeckImporter.importDeckFromFile("cheat.dck", false)); } public boolean isSmallMode() { diff --git a/Mage.Client/src/main/java/mage/client/game/PlayerPanelExt.java b/Mage.Client/src/main/java/mage/client/game/PlayerPanelExt.java index f66394ce708..2ba6bc104dc 100644 --- a/Mage.Client/src/main/java/mage/client/game/PlayerPanelExt.java +++ b/Mage.Client/src/main/java/mage/client/game/PlayerPanelExt.java @@ -1,13 +1,5 @@ package mage.client.game; -import java.awt.*; -import java.awt.image.BufferedImage; -import java.util.*; -import javax.swing.*; -import javax.swing.GroupLayout.Alignment; -import javax.swing.LayoutStyle.ComponentPlacement; -import javax.swing.border.Border; -import javax.swing.border.LineBorder; import mage.cards.decks.importer.DckDeckImporter; import mage.client.MageFrame; import mage.client.SessionHandler; @@ -24,7 +16,6 @@ import mage.client.util.gui.countryBox.CountryUtil; import mage.components.ImagePanel; import mage.components.ImagePanelStyle; import mage.constants.CardType; -import static mage.constants.Constants.*; import mage.constants.ManaType; import mage.counters.Counter; import mage.counters.CounterType; @@ -33,6 +24,17 @@ import mage.utils.timer.PriorityTimer; import mage.view.*; import org.mage.card.arcane.ManaSymbols; +import javax.swing.*; +import javax.swing.GroupLayout.Alignment; +import javax.swing.LayoutStyle.ComponentPlacement; +import javax.swing.border.Border; +import javax.swing.border.LineBorder; +import java.awt.*; +import java.awt.image.BufferedImage; +import java.util.*; + +import static mage.constants.Constants.*; + /** * Enhanced player pane. * @@ -935,7 +937,7 @@ public class PlayerPanelExt extends javax.swing.JPanel { private void btnCheatActionPerformed(java.awt.event.ActionEvent evt) { DckDeckImporter deckImporter = new DckDeckImporter(); - SessionHandler.cheat(gameId, playerId, deckImporter.importDeck("cheat.dck")); + SessionHandler.cheat(gameId, playerId, deckImporter.importDeck("cheat.dck", false)); } public PlayerView getPlayer() { diff --git a/Mage.Client/src/main/java/mage/client/table/TablePlayerPanel.java b/Mage.Client/src/main/java/mage/client/table/TablePlayerPanel.java index 3a7a6dd8f38..f962b067987 100644 --- a/Mage.Client/src/main/java/mage/client/table/TablePlayerPanel.java +++ b/Mage.Client/src/main/java/mage/client/table/TablePlayerPanel.java @@ -53,7 +53,7 @@ public class TablePlayerPanel extends javax.swing.JPanel { public boolean joinTable(UUID roomId, UUID tableId) throws IOException, ClassNotFoundException { if (this.cbPlayerType.getSelectedItem() != PlayerType.HUMAN) { - return SessionHandler.joinTable(roomId, tableId, this.newPlayerPanel.getPlayerName(), (PlayerType) this.cbPlayerType.getSelectedItem(), this.newPlayerPanel.getLevel(), DeckImporter.importDeckFromFile(this.newPlayerPanel.getDeckFile()), ""); + return SessionHandler.joinTable(roomId, tableId, this.newPlayerPanel.getPlayerName(), (PlayerType) this.cbPlayerType.getSelectedItem(), this.newPlayerPanel.getLevel(), DeckImporter.importDeckFromFile(this.newPlayerPanel.getDeckFile(), true), ""); } return true; } @@ -127,8 +127,7 @@ public class TablePlayerPanel extends javax.swing.JPanel { if (getPlayerType() != PlayerType.HUMAN) { this.newPlayerPanel.setVisible(true); this.newPlayerPanel.setPlayerName(ClientDefaultSettings.computerName + " " + this.lblPlayerNum.getText().charAt(this.lblPlayerNum.getText().length() - 1)); - } - else { + } else { this.newPlayerPanel.setVisible(false); } this.revalidate(); diff --git a/Mage.Client/src/main/java/mage/client/table/TablesPanel.java b/Mage.Client/src/main/java/mage/client/table/TablesPanel.java index c8af0daf782..66ef466a1eb 100644 --- a/Mage.Client/src/main/java/mage/client/table/TablesPanel.java +++ b/Mage.Client/src/main/java/mage/client/table/TablesPanel.java @@ -95,7 +95,7 @@ public class TablesPanel extends javax.swing.JPanel { final JToggleButton[] filterButtons; // time formater - private PrettyTime timeFormater = new PrettyTime(Locale.ENGLISH); + private final PrettyTime timeFormater = new PrettyTime(Locale.ENGLISH); // time ago renderer TableCellRenderer timeAgoCellRenderer = new DefaultTableCellRenderer() { @@ -127,7 +127,7 @@ public class TablesPanel extends javax.swing.JPanel { // datetime render TableCellRenderer datetimeCellRenderer = new DefaultTableCellRenderer() { - DateFormat datetimeFormater = new SimpleDateFormat("HH:mm:ss"); + final DateFormat datetimeFormater = new SimpleDateFormat("HH:mm:ss"); @Override public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { @@ -147,8 +147,8 @@ public class TablesPanel extends javax.swing.JPanel { TableCellRenderer skillCellRenderer = new DefaultTableCellRenderer() { // base panel to render - private JPanel renderPanel = new JPanel(); - private ImageIcon skillIcon = new ImageIcon(this.getClass().getResource("/info/yellow_star_16.png")); + private final JPanel renderPanel = new JPanel(); + private final ImageIcon skillIcon = new ImageIcon(this.getClass().getResource("/info/yellow_star_16.png")); @Override public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { @@ -181,7 +181,7 @@ public class TablesPanel extends javax.swing.JPanel { // seats render TableCellRenderer seatsCellRenderer = new DefaultTableCellRenderer() { - JLabel greenLabel = new JLabel(); + final JLabel greenLabel = new JLabel(); @Override public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { @@ -1469,48 +1469,48 @@ public class TablesPanel extends javax.swing.JPanel { javax.swing.GroupLayout jPanelTopLayout = new javax.swing.GroupLayout(jPanelTop); jPanelTop.setLayout(jPanelTopLayout); jPanelTopLayout.setHorizontalGroup( - jPanelTopLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(jPanelTopLayout.createSequentialGroup() - .addContainerGap() - .addComponent(btnNewTable) - .addGap(6, 6, 6) - .addComponent(btnNewTournament) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(jPanelTopLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) - .addComponent(filterBar1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(filterBar2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(jPanelTopLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(jPanelTopLayout.createSequentialGroup() - .addComponent(btnQuickStartDuel) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(btnQuickStartMCTS)) - .addComponent(btnQuickStartCommander)) - .addContainerGap(540, Short.MAX_VALUE)) + jPanelTopLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jPanelTopLayout.createSequentialGroup() + .addContainerGap() + .addComponent(btnNewTable) + .addGap(6, 6, 6) + .addComponent(btnNewTournament) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(jPanelTopLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) + .addComponent(filterBar1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(filterBar2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(jPanelTopLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jPanelTopLayout.createSequentialGroup() + .addComponent(btnQuickStartDuel) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(btnQuickStartMCTS)) + .addComponent(btnQuickStartCommander)) + .addContainerGap(540, Short.MAX_VALUE)) ); jPanelTopLayout.setVerticalGroup( - jPanelTopLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(jPanelTopLayout.createSequentialGroup() - .addContainerGap() - .addGroup(jPanelTopLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(jPanelTopLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(btnNewTable) - .addComponent(btnNewTournament)) - .addGroup(jPanelTopLayout.createSequentialGroup() - .addGroup(jPanelTopLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(filterBar1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addGroup(jPanelTopLayout.createSequentialGroup() + jPanelTopLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jPanelTopLayout.createSequentialGroup() + .addContainerGap() .addGroup(jPanelTopLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(btnQuickStartDuel) - .addComponent(btnQuickStartMCTS)) - .addGap(0, 0, Short.MAX_VALUE))) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(jPanelTopLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(filterBar2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addGroup(jPanelTopLayout.createSequentialGroup() - .addComponent(btnQuickStartCommander) - .addGap(0, 0, Short.MAX_VALUE))))) - .addContainerGap()) + .addGroup(jPanelTopLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(btnNewTable) + .addComponent(btnNewTournament)) + .addGroup(jPanelTopLayout.createSequentialGroup() + .addGroup(jPanelTopLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(filterBar1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addGroup(jPanelTopLayout.createSequentialGroup() + .addGroup(jPanelTopLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(btnQuickStartDuel) + .addComponent(btnQuickStartMCTS)) + .addGap(0, 0, Short.MAX_VALUE))) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(jPanelTopLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(filterBar2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addGroup(jPanelTopLayout.createSequentialGroup() + .addComponent(btnQuickStartCommander) + .addGap(0, 0, Short.MAX_VALUE))))) + .addContainerGap()) ); gridBagConstraints = new java.awt.GridBagConstraints(); @@ -1547,12 +1547,12 @@ public class TablesPanel extends javax.swing.JPanel { javax.swing.GroupLayout jPanelTablesLayout = new javax.swing.GroupLayout(jPanelTables); jPanelTables.setLayout(jPanelTablesLayout); jPanelTablesLayout.setHorizontalGroup( - jPanelTablesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(jSplitPaneTables, javax.swing.GroupLayout.DEFAULT_SIZE, 23, Short.MAX_VALUE) + jPanelTablesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(jSplitPaneTables, javax.swing.GroupLayout.DEFAULT_SIZE, 23, Short.MAX_VALUE) ); jPanelTablesLayout.setVerticalGroup( - jPanelTablesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(jSplitPaneTables, javax.swing.GroupLayout.DEFAULT_SIZE, 672, Short.MAX_VALUE) + jPanelTablesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(jSplitPaneTables, javax.swing.GroupLayout.DEFAULT_SIZE, 672, Short.MAX_VALUE) ); jSplitPane1.setLeftComponent(jPanelTables); @@ -1627,7 +1627,7 @@ public class TablesPanel extends javax.swing.JPanel { + "5 Mountain" + System.lineSeparator() + "5 Plains"); } - DeckCardLists testDeck = DeckImporter.importDeckFromFile(testDeckFile); + DeckCardLists testDeck = DeckImporter.importDeckFromFile(testDeckFile, false); PlayerType aiType = useMonteCarloAI ? PlayerType.COMPUTER_MONTE_CARLO : PlayerType.COMPUTER_MAD; MatchOptions options = new MatchOptions(gameName, gameType, false, 2); diff --git a/Mage.Tests/src/test/java/org/mage/test/decks/importer/TxtDeckImporterTest.java b/Mage.Tests/src/test/java/org/mage/test/decks/importer/TxtDeckImporterTest.java index c4b1dbd4685..50180ee3d34 100644 --- a/Mage.Tests/src/test/java/org/mage/test/decks/importer/TxtDeckImporterTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/decks/importer/TxtDeckImporterTest.java @@ -35,7 +35,7 @@ public class TxtDeckImporterTest { Assert.assertEquals("Deck does not contain 3 cards, found " + deck.getCards().size(), 3, deck.getCards().size()); Assert.assertEquals("Sideboard does not contain 2 cards, found " + deck.getSideboard().size(), 2, deck.getSideboard().size()); - DeckCardLists imported = importer.importDeck("JustLands.txt"); + DeckCardLists imported = importer.importDeck("JustLands.txt", false); Assert.assertEquals("Imported deck does not contain 3 cards, found " + imported.getCards().size(), 3, imported.getCards().size()); Assert.assertEquals("Imported sideboard does not contain 2 cards, found " + imported.getSideboard().size(), 2, imported.getSideboard().size()); diff --git a/Mage.Tests/src/test/java/org/mage/test/serverside/base/impl/CardTestPlayerAPIImpl.java b/Mage.Tests/src/test/java/org/mage/test/serverside/base/impl/CardTestPlayerAPIImpl.java index 506afe2b164..8eb95b20894 100644 --- a/Mage.Tests/src/test/java/org/mage/test/serverside/base/impl/CardTestPlayerAPIImpl.java +++ b/Mage.Tests/src/test/java/org/mage/test/serverside/base/impl/CardTestPlayerAPIImpl.java @@ -248,7 +248,7 @@ public abstract class CardTestPlayerAPIImpl extends MageTestPlayerBase implement if (loadedDeckCardLists.containsKey(deckName)) { list = loadedDeckCardLists.get(deckName); } else { - list = DeckImporter.importDeckFromFile(deckName); + list = DeckImporter.importDeckFromFile(deckName, true); loadedDeckCardLists.put(deckName, list); } Deck deck = Deck.load(list, false, false); diff --git a/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java b/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java index bb5daf3a0a4..d26452fb594 100644 --- a/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java +++ b/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java @@ -53,6 +53,7 @@ public class VerifyCardDataTest { private static final Logger logger = Logger.getLogger(VerifyCardDataTest.class); private static final String FULL_ABILITIES_CHECK_SET_CODE = "THB"; // check all abilities and output cards with wrong abilities texts; + private static final boolean AUTO_FIX_SAMPLE_DECKS = false; // debug only: fix sample decks if it contains errors like wrong card numbers // right now this is very noisy, and not useful enough to make any assertions on private static final boolean CHECK_SOURCE_TOKENS = false; @@ -471,7 +472,7 @@ public class VerifyCardDataTest { } @Test - @Ignore // TODO: enable and fix broken decks after promo sets merge https://github.com/magefree/mage/pull/6190 + //@Ignore // TODO: enable and fix broken decks after promo sets merge https://github.com/magefree/mage/pull/6190 public void test_checkSampleDecks() { Collection errorsList = new ArrayList<>(); @@ -497,7 +498,7 @@ public class VerifyCardDataTest { for (Path deckFile : filesList) { String deckName = deckFile.toString().replace(rootPath, ""); StringBuilder deckErrors = new StringBuilder(); - DeckCardLists deckCards = DeckImporter.importDeckFromFile(deckFile.toString(), deckErrors); + DeckCardLists deckCards = DeckImporter.importDeckFromFile(deckFile.toString(), deckErrors, AUTO_FIX_SAMPLE_DECKS); if (!deckErrors.toString().isEmpty()) { errorsList.add("Error: sample deck contains errors " + deckName); diff --git a/Mage/src/main/java/mage/cards/decks/importer/CodDeckImporter.java b/Mage/src/main/java/mage/cards/decks/importer/CodDeckImporter.java index a79a6beeb5b..e518e5ea79b 100644 --- a/Mage/src/main/java/mage/cards/decks/importer/CodDeckImporter.java +++ b/Mage/src/main/java/mage/cards/decks/importer/CodDeckImporter.java @@ -1,5 +1,11 @@ package mage.cards.decks.importer; +import mage.cards.decks.DeckCardInfo; +import mage.cards.decks.DeckCardLists; +import mage.cards.repository.CardInfo; +import org.w3c.dom.Document; +import org.w3c.dom.Node; + import java.util.Collections; import java.util.List; import java.util.Optional; @@ -7,68 +13,67 @@ import java.util.function.Function; import java.util.stream.Collectors; import java.util.stream.Stream; -import org.w3c.dom.Document; -import org.w3c.dom.Node; - -import mage.cards.decks.DeckCardInfo; -import mage.cards.decks.DeckCardLists; -import mage.cards.repository.CardInfo; - public class CodDeckImporter extends XmlDeckImporter { - @Override - public DeckCardLists importDeck(String filename, StringBuilder errorMessages) { - try { - Document doc = getXmlDocument(filename); - DeckCardLists decklist = new DeckCardLists(); + /** + * @param filename + * @param errorMessages + * @param saveAutoFixedFile do not supported for current format + * @return + */ + @Override + public DeckCardLists importDeck(String filename, StringBuilder errorMessages, boolean saveAutoFixedFile) { + try { + Document doc = getXmlDocument(filename); + DeckCardLists decklist = new DeckCardLists(); - List mainCards = getNodes(doc, "/cockatrice_deck/zone[@name='main']/card"); - decklist.setCards(mainCards.stream() - .flatMap(toDeckCardInfo(getCardLookup(), errorMessages)) - .collect(Collectors.toList())); + List mainCards = getNodes(doc, "/cockatrice_deck/zone[@name='main']/card"); + decklist.setCards(mainCards.stream() + .flatMap(toDeckCardInfo(getCardLookup(), errorMessages)) + .collect(Collectors.toList())); - List sideboardCards = getNodes(doc, "/cockatrice_deck/zone[@name='side']/card"); - decklist.setSideboard(sideboardCards.stream() - .flatMap(toDeckCardInfo(getCardLookup(), errorMessages)) - .collect(Collectors.toList())); + List sideboardCards = getNodes(doc, "/cockatrice_deck/zone[@name='side']/card"); + decklist.setSideboard(sideboardCards.stream() + .flatMap(toDeckCardInfo(getCardLookup(), errorMessages)) + .collect(Collectors.toList())); - getNodes(doc, "/cockatrice_deck/deckname") - .forEach(n -> decklist.setName(n.getTextContent().trim())); + getNodes(doc, "/cockatrice_deck/deckname") + .forEach(n -> decklist.setName(n.getTextContent().trim())); - return decklist; - } catch (Exception e) { - logger.error("Error loading deck", e); - errorMessages.append("There was an error loading the deck."); - return new DeckCardLists(); + return decklist; + } catch (Exception e) { + logger.error("Error loading deck", e); + errorMessages.append("There was an error loading the deck."); + return new DeckCardLists(); + } } - } - private static int getQuantityFromNode(Node node) { - Node numberNode = node.getAttributes().getNamedItem("number"); - if (numberNode == null) { - return 1; + private static int getQuantityFromNode(Node node) { + Node numberNode = node.getAttributes().getNamedItem("number"); + if (numberNode == null) { + return 1; + } + try { + return Math.min(100, Math.max(1, Integer.parseInt(numberNode.getNodeValue()))); + } catch (NumberFormatException e) { + return 1; + } } - try { - return Math.min(100, Math.max(1, Integer.parseInt(numberNode.getNodeValue()))); - } catch (NumberFormatException e) { - return 1; - } - } - private static Function> toDeckCardInfo(CardLookup lookup, StringBuilder errors) { - return node -> { - String name = node.getAttributes().getNamedItem("name").getNodeValue().trim(); - Optional cardInfo = lookup.lookupCardInfo(name); - if (cardInfo.isPresent()) { - CardInfo info = cardInfo.get(); - return Collections.nCopies( - getQuantityFromNode(node), - new DeckCardInfo(info.getName(), info.getCardNumber(), info.getSetCode())).stream(); - } else { - errors.append("Could not find card: '").append(name).append("'\n"); - return Stream.empty(); - } - }; - } + private static Function> toDeckCardInfo(CardLookup lookup, StringBuilder errors) { + return node -> { + String name = node.getAttributes().getNamedItem("name").getNodeValue().trim(); + Optional cardInfo = lookup.lookupCardInfo(name); + if (cardInfo.isPresent()) { + CardInfo info = cardInfo.get(); + return Collections.nCopies( + getQuantityFromNode(node), + new DeckCardInfo(info.getName(), info.getCardNumber(), info.getSetCode())).stream(); + } else { + errors.append("Could not find card: '").append(name).append("'\n"); + return Stream.empty(); + } + }; + } } diff --git a/Mage/src/main/java/mage/cards/decks/importer/DckDeckImporter.java b/Mage/src/main/java/mage/cards/decks/importer/DckDeckImporter.java index f7d874f0410..e5ed8a29f21 100644 --- a/Mage/src/main/java/mage/cards/decks/importer/DckDeckImporter.java +++ b/Mage/src/main/java/mage/cards/decks/importer/DckDeckImporter.java @@ -7,11 +7,15 @@ import mage.cards.repository.CardInfo; import mage.cards.repository.CardRepository; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; /** + * Original xmage's deck format (uses by deck editor) + * * @author North */ public class DckDeckImporter extends PlainTextDeckImporter { @@ -24,13 +28,23 @@ public class DckDeckImporter extends PlainTextDeckImporter { private static final Pattern layoutStackEntryPattern = Pattern.compile("\\[(\\w+[^:]*\\w*):(\\w+\\w*)]"); // test cases: [JR:64ab],[JR:64],[MPSAK1321:43],[MPSAKH:9],[MPS123-AKH:32],[MPS-13AKH:30],[MPS-AKH:49],[MPS-AKH:11], [PUMA:U16] + private final Map possibleFixes = new HashMap<>(); // possible fixes for card codes and numbers [code:123] -> [code:456] + @Override - protected void readLine(String line, DeckCardLists deckList) { + protected void readLine(String line, DeckCardLists deckList, FixedInfo fixedInfo) { if (line.isEmpty() || line.startsWith("#")) { return; } + // AUTO-FIX apply (if card number was fixed before then it can be replaced in layout or other lines too) + for (Map.Entry fix : this.possibleFixes.entrySet()) { + if (line.contains(fix.getKey())) { + line = line.replace(fix.getKey(), fix.getValue()); + } + } + fixedInfo.setFixedLine(line); + Matcher m = pattern.matcher(line); if (m.matches()) { boolean sideboard = false; @@ -46,12 +60,20 @@ public class DckDeckImporter extends PlainTextDeckImporter { setCode = setCode == null ? "" : setCode.trim(); cardName = cardName == null ? "" : cardName.trim(); - // search priority: set/code -> name + // text for auto-fix + String originalText = ""; + if (!setCode.isEmpty() && !cardNum.isEmpty()) { + // [ISD:144] + originalText = "[" + setCode + ":" + cardNum + "]"; + } + String fixedText = originalText; + + // search priority: set/number -> name // with bulletproof on card number or name changes DeckCardInfo deckCardInfo = null; - // search by number + // search by set/number CardInfo foundedCard = CardRepository.instance.findCard(setCode, cardNum); boolean wasOutdated = false; if ((foundedCard != null) && !foundedCard.getName().equals(cardName)) { @@ -63,7 +85,7 @@ public class DckDeckImporter extends PlainTextDeckImporter { // search by name if (foundedCard == null) { if (!wasOutdated) { - sbMessage.append("Line ").append(lineCount).append(": ").append("can't find card by number, will try ro replace: ").append(line).append('\n'); + sbMessage.append("Line ").append(lineCount).append(": ").append("can't find card by number, will try to replace: ").append(line).append('\n'); } if (!cardName.equals("")) { @@ -74,6 +96,12 @@ public class DckDeckImporter extends PlainTextDeckImporter { sbMessage.append("Line ").append(lineCount).append(": ") .append("replaced to [").append(foundedCard.getSetCode()).append(":").append(foundedCard.getCardNumberAsInt()).append("] ") .append(foundedCard.getName()).append('\n'); + + // AUTO-FIX POSSIBLE (apply and save it for another lines like layout) + // [ISD:144] + fixedText = "[" + foundedCard.getSetCode() + ":" + foundedCard.getCardNumber() + "]"; + fixedInfo.setFixedLine(fixedInfo.getOriginalLine().replace(originalText, fixedText)); + this.possibleFixes.put(originalText, fixedText); } else { sbMessage.append("Line ").append(lineCount).append(": ").append("ERROR, can't find card [").append(cardName).append("]").append('\n'); } diff --git a/Mage/src/main/java/mage/cards/decks/importer/DecDeckImporter.java b/Mage/src/main/java/mage/cards/decks/importer/DecDeckImporter.java index 5ab07af1de4..d39befaf380 100644 --- a/Mage/src/main/java/mage/cards/decks/importer/DecDeckImporter.java +++ b/Mage/src/main/java/mage/cards/decks/importer/DecDeckImporter.java @@ -1,21 +1,19 @@ - package mage.cards.decks.importer; -import java.util.Optional; - import mage.cards.decks.DeckCardInfo; import mage.cards.decks.DeckCardLists; import mage.cards.repository.CardInfo; -import mage.cards.repository.CardRepository; + +import java.util.Optional; /** - * * @author BetaSteward_at_googlemail.com */ public class DecDeckImporter extends PlainTextDeckImporter { @Override - protected void readLine(String line, DeckCardLists deckList) { + protected void readLine(String line, DeckCardLists deckList, FixedInfo fixedInfo) { + if (line.isEmpty() || line.startsWith("//")) { return; } diff --git a/Mage/src/main/java/mage/cards/decks/importer/DeckImporter.java b/Mage/src/main/java/mage/cards/decks/importer/DeckImporter.java index cabf599b23d..26785c1909b 100644 --- a/Mage/src/main/java/mage/cards/decks/importer/DeckImporter.java +++ b/Mage/src/main/java/mage/cards/decks/importer/DeckImporter.java @@ -1,95 +1,122 @@ package mage.cards.decks.importer; +import mage.cards.decks.DeckCardLists; import org.apache.log4j.Logger; + import java.io.File; import java.util.Locale; -import java.util.Optional; import java.util.Scanner; - -import mage.cards.decks.DeckCardLists; -import mage.cards.repository.CardInfo; -import mage.cards.repository.CardRepository; - public abstract class DeckImporter { - protected static final Logger logger = Logger.getLogger(DeckImporter.class); + public class FixedInfo { + private final String originalLine; + private String fixedLine; + private Boolean canFix = true; // set false if deck have critical error and can't be auto-fixed - private static final String[] SIDEBOARD_MARKS = new String[]{"//sideboard", "sb: "}; - - public static DeckImporter getDeckImporter(String file) { - if (file == null) { - return null; - } if (file.toLowerCase(Locale.ENGLISH).endsWith("dec")) { - return new DecDeckImporter(); - } else if (file.toLowerCase(Locale.ENGLISH).endsWith("mwdeck")) { - return new MWSDeckImporter(); - } else if (file.toLowerCase(Locale.ENGLISH).endsWith("txt")) { - return new TxtDeckImporter(haveSideboardSection(file)); - } else if (file.toLowerCase(Locale.ENGLISH).endsWith("dck")) { - return new DckDeckImporter(); - } else if (file.toLowerCase(Locale.ENGLISH).endsWith("dek")) { - return new DekDeckImporter(); - } else if (file.toLowerCase(Locale.ENGLISH).endsWith("cod")) { - return new CodDeckImporter(); - } else if (file.toLowerCase(Locale.ENGLISH).endsWith("o8d")) { - return new O8dDeckImporter(); - } else if (file.toLowerCase(Locale.ENGLISH).endsWith("json")) { - return new MtgjsonDeckImporter(); - } else if (file.toLowerCase(Locale.ENGLISH).endsWith("draft")) { - return new DraftLogImporter(); - } else if (file.toLowerCase(Locale.ENGLISH).endsWith("mtga")) { - return new MtgaImporter(); - } else { - return null; - } - } - - public static DeckCardLists importDeckFromFile(String file) { - return importDeckFromFile(file, new StringBuilder()); - } - - public static DeckCardLists importDeckFromFile(String file, StringBuilder errorMessages) { - DeckImporter deckImporter = getDeckImporter(file); - if (deckImporter != null) { - return deckImporter.importDeck(file, errorMessages); - } else { - return new DeckCardLists(); - } - } - - public abstract DeckCardLists importDeck(String file, StringBuilder errorMessages); - - public DeckCardLists importDeck(String file) { - return importDeck(file, new StringBuilder()); - } - - public CardLookup getCardLookup() { - return CardLookup.instance; - } - - private static boolean haveSideboardSection(String file) { - // search for sideboard section: - // or //sideboard - // or SB: 1 card name -- special deckstats.net - - File f = new File(file); - try (Scanner scanner = new Scanner(f)) { - while (scanner.hasNextLine()) { - String line = scanner.nextLine().trim().toLowerCase(Locale.ENGLISH); - - for (String mark : SIDEBOARD_MARKS) { - if (line.startsWith(mark)) { - return true; - } + FixedInfo(String originalLine) { + this.originalLine = originalLine; + this.fixedLine = originalLine; + } + + public String getOriginalLine() { + return originalLine; + } + + public Boolean getCanFix() { + return canFix; + } + + public void setCanFix(Boolean canFix) { + this.canFix = canFix; + } + + public String getFixedLine() { + return fixedLine; + } + + public void setFixedLine(String fixedLine) { + this.fixedLine = fixedLine; } - } - } catch (Exception e) { - // ignore error, deckimporter will process it } - // not found - return false; - } + protected static final Logger logger = Logger.getLogger(DeckImporter.class); + private static final String[] SIDEBOARD_MARKS = new String[]{"//sideboard", "sb: "}; + + public static DeckImporter getDeckImporter(String file) { + if (file == null) { + return null; + } + if (file.toLowerCase(Locale.ENGLISH).endsWith("dec")) { + return new DecDeckImporter(); + } else if (file.toLowerCase(Locale.ENGLISH).endsWith("mwdeck")) { + return new MWSDeckImporter(); + } else if (file.toLowerCase(Locale.ENGLISH).endsWith("txt")) { + return new TxtDeckImporter(haveSideboardSection(file)); + } else if (file.toLowerCase(Locale.ENGLISH).endsWith("dck")) { + return new DckDeckImporter(); + } else if (file.toLowerCase(Locale.ENGLISH).endsWith("dek")) { + return new DekDeckImporter(); + } else if (file.toLowerCase(Locale.ENGLISH).endsWith("cod")) { + return new CodDeckImporter(); + } else if (file.toLowerCase(Locale.ENGLISH).endsWith("o8d")) { + return new O8dDeckImporter(); + } else if (file.toLowerCase(Locale.ENGLISH).endsWith("json")) { + return new MtgjsonDeckImporter(); + } else if (file.toLowerCase(Locale.ENGLISH).endsWith("draft")) { + return new DraftLogImporter(); + } else if (file.toLowerCase(Locale.ENGLISH).endsWith("mtga")) { + return new MtgaImporter(); + } else { + return null; + } + } + + public static DeckCardLists importDeckFromFile(String file, boolean saveAutoFixedFile) { + return importDeckFromFile(file, new StringBuilder(), saveAutoFixedFile); + } + + public static DeckCardLists importDeckFromFile(String file, StringBuilder errorMessages, boolean saveAutoFixedFile) { + DeckImporter deckImporter = getDeckImporter(file); + if (deckImporter != null) { + return deckImporter.importDeck(file, errorMessages, saveAutoFixedFile); + } else { + return new DeckCardLists(); + } + } + + public abstract DeckCardLists importDeck(String file, StringBuilder errorMessages, boolean saveAutoFixedFile); + + public DeckCardLists importDeck(String file, boolean saveAutoFixedFile) { + return importDeck(file, new StringBuilder(), saveAutoFixedFile); + } + + public CardLookup getCardLookup() { + return CardLookup.instance; + } + + private static boolean haveSideboardSection(String file) { + // search for sideboard section: + // or //sideboard + // or SB: 1 card name -- special deckstats.net + + File f = new File(file); + try (Scanner scanner = new Scanner(f)) { + while (scanner.hasNextLine()) { + String line = scanner.nextLine().trim().toLowerCase(Locale.ENGLISH); + + for (String mark : SIDEBOARD_MARKS) { + if (line.startsWith(mark)) { + return true; + } + } + } + } catch (Exception e) { + // ignore error, deckimporter will process it + } + + // not found + return false; + } } diff --git a/Mage/src/main/java/mage/cards/decks/importer/DekDeckImporter.java b/Mage/src/main/java/mage/cards/decks/importer/DekDeckImporter.java index 2672ff9d3ef..2bb529ce896 100644 --- a/Mage/src/main/java/mage/cards/decks/importer/DekDeckImporter.java +++ b/Mage/src/main/java/mage/cards/decks/importer/DekDeckImporter.java @@ -11,7 +11,7 @@ import mage.cards.repository.CardRepository; public class DekDeckImporter extends PlainTextDeckImporter { @Override - protected void readLine(String line, DeckCardLists deckList) { + protected void readLine(String line, DeckCardLists deckList, FixedInfo fixedInfo) { if (line.isEmpty() || line.startsWith("#") || !line.contains(" (.+)$"); + private static final Pattern SET_PATTERN = Pattern.compile("------ (\\p{Alnum}+) ------$"); + private static final Pattern PICK_PATTERN = Pattern.compile("--> (.+)$"); private String currentSet = null; @Override - protected void readLine(String line, DeckCardLists deckList) { + protected void readLine(String line, DeckCardLists deckList, FixedInfo fixedInfo) { + Matcher setMatcher = SET_PATTERN.matcher(line); if (setMatcher.matches()) { currentSet = setMatcher.group(1); diff --git a/Mage/src/main/java/mage/cards/decks/importer/JsonDeckImporter.java b/Mage/src/main/java/mage/cards/decks/importer/JsonDeckImporter.java index c754fd04e09..dd1179d69f1 100644 --- a/Mage/src/main/java/mage/cards/decks/importer/JsonDeckImporter.java +++ b/Mage/src/main/java/mage/cards/decks/importer/JsonDeckImporter.java @@ -1,14 +1,12 @@ package mage.cards.decks.importer; -import java.io.File; -import java.io.FileReader; - -import org.json.simple.JSONArray; +import mage.cards.decks.DeckCardLists; import org.json.simple.JSONObject; import org.json.simple.parser.JSONParser; import org.json.simple.parser.ParseException; -import mage.cards.decks.DeckCardLists; +import java.io.File; +import java.io.FileReader; /** * @author github: timhae @@ -18,12 +16,12 @@ public abstract class JsonDeckImporter extends DeckImporter { protected StringBuilder sbMessage = new StringBuilder(); /** - * - * @param file file to import - * @param errorMessages you can setup output messages to showup to user + * @param file file to import + * @param errorMessages you can setup output messages to showup to user + * @param saveAutoFixedFile do not supported for that format * @return decks list */ - public DeckCardLists importDeck(String file, StringBuilder errorMessages) { + public DeckCardLists importDeck(String file, StringBuilder errorMessages, boolean saveAutoFixedFile) { File f = new File(file); DeckCardLists deckList = new DeckCardLists(); if (!f.exists()) { @@ -62,8 +60,8 @@ public abstract class JsonDeckImporter extends DeckImporter { } @Override - public DeckCardLists importDeck(String file) { - return importDeck(file, null); + public DeckCardLists importDeck(String file, boolean saveAutoFixedFile) { + return importDeck(file, null, saveAutoFixedFile); } protected abstract void readJson(JSONObject line, DeckCardLists decklist); diff --git a/Mage/src/main/java/mage/cards/decks/importer/MWSDeckImporter.java b/Mage/src/main/java/mage/cards/decks/importer/MWSDeckImporter.java index 7c23d28c60b..9d34750afbe 100644 --- a/Mage/src/main/java/mage/cards/decks/importer/MWSDeckImporter.java +++ b/Mage/src/main/java/mage/cards/decks/importer/MWSDeckImporter.java @@ -1,23 +1,21 @@ - package mage.cards.decks.importer; -import java.util.List; - import mage.cards.decks.DeckCardInfo; import mage.cards.decks.DeckCardLists; import mage.cards.repository.CardCriteria; import mage.cards.repository.CardInfo; -import mage.cards.repository.CardRepository; import mage.util.RandomUtil; +import java.util.List; + /** - * * @author BetaSteward_at_googlemail.com */ public class MWSDeckImporter extends PlainTextDeckImporter { @Override - protected void readLine(String line, DeckCardLists deckList) { + protected void readLine(String line, DeckCardLists deckList, FixedInfo fixedInfo) { + if (line.isEmpty() || line.startsWith("//")) { return; } @@ -47,7 +45,7 @@ public class MWSDeckImporter extends PlainTextDeckImporter { if (!cards.isEmpty()) { cardInfo = cards.get(RandomUtil.nextInt(cards.size())); } - } + } if (cardInfo == null) { cardInfo = getCardLookup().lookupCardInfo(lineName).orElse(null); } diff --git a/Mage/src/main/java/mage/cards/decks/importer/MtgaImporter.java b/Mage/src/main/java/mage/cards/decks/importer/MtgaImporter.java index 4949690873e..2606456e895 100644 --- a/Mage/src/main/java/mage/cards/decks/importer/MtgaImporter.java +++ b/Mage/src/main/java/mage/cards/decks/importer/MtgaImporter.java @@ -4,7 +4,6 @@ import com.google.common.collect.ImmutableMap; import mage.cards.decks.CardNameUtil; import mage.cards.decks.DeckCardInfo; import mage.cards.decks.DeckCardLists; -import mage.cards.repository.CardCriteria; import mage.cards.repository.CardInfo; import java.util.Collections; @@ -21,18 +20,19 @@ public class MtgaImporter extends PlainTextDeckImporter { private static final Map SET_REMAPPING = ImmutableMap.of("DAR", "DOM"); private static final Pattern MTGA_PATTERN = Pattern.compile( "(\\p{Digit}+)" + - "\\p{javaWhitespace}+" + - "(" + CARD_NAME_PATTERN.pattern() + ")" + - "\\p{javaWhitespace}+" + - "\\((\\p{Alnum}+)\\)" + - "\\p{javaWhitespace}+" + - "(\\p{Digit}+)"); + "\\p{javaWhitespace}+" + + "(" + CARD_NAME_PATTERN.pattern() + ")" + + "\\p{javaWhitespace}+" + + "\\((\\p{Alnum}+)\\)" + + "\\p{javaWhitespace}+" + + "(\\p{Digit}+)"); private final CardLookup lookup = getCardLookup(); private boolean sideboard = false; @Override - protected void readLine(String line, DeckCardLists deckList) { + protected void readLine(String line, DeckCardLists deckList, FixedInfo fixedInfo) { + if (line.trim().equals("")) { sideboard = true; return; diff --git a/Mage/src/main/java/mage/cards/decks/importer/O8dDeckImporter.java b/Mage/src/main/java/mage/cards/decks/importer/O8dDeckImporter.java index cefc64e9616..3426f57c6f8 100644 --- a/Mage/src/main/java/mage/cards/decks/importer/O8dDeckImporter.java +++ b/Mage/src/main/java/mage/cards/decks/importer/O8dDeckImporter.java @@ -1,5 +1,11 @@ package mage.cards.decks.importer; +import mage.cards.decks.DeckCardInfo; +import mage.cards.decks.DeckCardLists; +import mage.cards.repository.CardInfo; +import org.w3c.dom.Document; +import org.w3c.dom.Node; + import java.util.Collections; import java.util.List; import java.util.Optional; @@ -7,65 +13,64 @@ import java.util.function.Function; import java.util.stream.Collectors; import java.util.stream.Stream; -import org.w3c.dom.Document; -import org.w3c.dom.Node; - -import mage.cards.decks.DeckCardInfo; -import mage.cards.decks.DeckCardLists; -import mage.cards.repository.CardInfo; - public class O8dDeckImporter extends XmlDeckImporter { - @Override - public DeckCardLists importDeck(String filename, StringBuilder errorMessages) { - try { - Document doc = getXmlDocument(filename); - DeckCardLists decklist = new DeckCardLists(); + /** + * @param filename + * @param errorMessages + * @param saveAutoFixedFile do not supported for current format + * @return + */ + @Override + public DeckCardLists importDeck(String filename, StringBuilder errorMessages, boolean saveAutoFixedFile) { + try { + Document doc = getXmlDocument(filename); + DeckCardLists decklist = new DeckCardLists(); - List mainCards = getNodes(doc, "/deck/section[@name='Main']/card"); - decklist.setCards(mainCards.stream() - .flatMap(toDeckCardInfo(getCardLookup(), errorMessages)) - .collect(Collectors.toList())); + List mainCards = getNodes(doc, "/deck/section[@name='Main']/card"); + decklist.setCards(mainCards.stream() + .flatMap(toDeckCardInfo(getCardLookup(), errorMessages)) + .collect(Collectors.toList())); - List sideboardCards = getNodes(doc, "/deck/section[@name='Sideboard']/card"); - decklist.setSideboard(sideboardCards.stream() - .flatMap(toDeckCardInfo(getCardLookup(), errorMessages)) - .collect(Collectors.toList())); + List sideboardCards = getNodes(doc, "/deck/section[@name='Sideboard']/card"); + decklist.setSideboard(sideboardCards.stream() + .flatMap(toDeckCardInfo(getCardLookup(), errorMessages)) + .collect(Collectors.toList())); - return decklist; - } catch (Exception e) { - logger.error("Error loading deck", e); - errorMessages.append("There was an error loading the deck."); - return new DeckCardLists(); + return decklist; + } catch (Exception e) { + logger.error("Error loading deck", e); + errorMessages.append("There was an error loading the deck."); + return new DeckCardLists(); + } } - } - private static int getQuantityFromNode(Node node) { - Node numberNode = node.getAttributes().getNamedItem("qty"); - if (numberNode == null) { - return 1; + private static int getQuantityFromNode(Node node) { + Node numberNode = node.getAttributes().getNamedItem("qty"); + if (numberNode == null) { + return 1; + } + try { + return Math.min(100, Math.max(1, Integer.parseInt(numberNode.getNodeValue()))); + } catch (NumberFormatException e) { + return 1; + } } - try { - return Math.min(100, Math.max(1, Integer.parseInt(numberNode.getNodeValue()))); - } catch (NumberFormatException e) { - return 1; - } - } - private static Function> toDeckCardInfo(CardLookup lookup, StringBuilder errors) { - return node -> { - String name = node.getTextContent(); - Optional cardInfo = lookup.lookupCardInfo(name); - if (cardInfo.isPresent()) { - CardInfo info = cardInfo.get(); - return Collections.nCopies( - getQuantityFromNode(node), - new DeckCardInfo(info.getName(), info.getCardNumber(), info.getSetCode())).stream(); - } else { - errors.append("Could not find card: '").append(name).append("'\n"); - return Stream.empty(); - } - }; - } + private static Function> toDeckCardInfo(CardLookup lookup, StringBuilder errors) { + return node -> { + String name = node.getTextContent(); + Optional cardInfo = lookup.lookupCardInfo(name); + if (cardInfo.isPresent()) { + CardInfo info = cardInfo.get(); + return Collections.nCopies( + getQuantityFromNode(node), + new DeckCardInfo(info.getName(), info.getCardNumber(), info.getSetCode())).stream(); + } else { + errors.append("Could not find card: '").append(name).append("'\n"); + return Stream.empty(); + } + }; + } } diff --git a/Mage/src/main/java/mage/cards/decks/importer/PlainTextDeckImporter.java b/Mage/src/main/java/mage/cards/decks/importer/PlainTextDeckImporter.java index 14683d66ab8..748e1970f16 100644 --- a/Mage/src/main/java/mage/cards/decks/importer/PlainTextDeckImporter.java +++ b/Mage/src/main/java/mage/cards/decks/importer/PlainTextDeckImporter.java @@ -1,14 +1,15 @@ - - package mage.cards.decks.importer; -import java.io.File; -import java.util.Scanner; - import mage.cards.decks.DeckCardLists; +import java.io.File; +import java.io.FileOutputStream; +import java.io.PrintWriter; +import java.util.ArrayList; +import java.util.List; +import java.util.Scanner; + /** - * * @author BetaSteward_at_googlemail.com */ public abstract class PlainTextDeckImporter extends DeckImporter { @@ -18,13 +19,17 @@ public abstract class PlainTextDeckImporter extends DeckImporter { /** + * Import deck from text file * - * @param file file to import - * @param errorMessages you can setup output messages to showup to user (set null for fatal exception on messages.count > 0) + * @param file file to import + * @param errorMessages you can setup output messages to showup to user (set null for fatal exception on messages.count > 0) + * @param saveAutoFixedFile save fixed deck file (if any fixes applied) * @return decks list */ - public DeckCardLists importDeck(String file, StringBuilder errorMessages) { + public DeckCardLists importDeck(String file, StringBuilder errorMessages, boolean saveAutoFixedFile) { File f = new File(file); + List originalFile = new ArrayList<>(); + List fixedFile = new ArrayList<>(); DeckCardLists deckList = new DeckCardLists(); if (!f.exists()) { logger.warn("Deckfile " + file + " not found."); @@ -35,17 +40,29 @@ public abstract class PlainTextDeckImporter extends DeckImporter { sbMessage.setLength(0); try { try (Scanner scanner = new Scanner(f)) { + Boolean canFix = true; while (scanner.hasNextLine()) { String line = scanner.nextLine().trim(); + FixedInfo fixedInfo = new FixedInfo(line); lineCount++; - readLine(line, deckList); + readLine(line, deckList, fixedInfo); + + originalFile.add(line); + fixedFile.add(fixedInfo.getFixedLine()); + canFix = canFix && fixedInfo.getCanFix(); + } + + // auto-fix + if (saveAutoFixedFile && canFix && !originalFile.equals(fixedFile)) { + logger.warn("WARNING, deck file contains errors, try to apply auto-fix and save: " + f.getAbsolutePath()); + saveFixedDeckFile(fixedFile, f); } if (sbMessage.length() > 0) { - if(errorMessages != null) { + if (errorMessages != null) { // normal output for user errorMessages.append(sbMessage); - }else{ + } else { // fatal error logger.fatal(sbMessage); } @@ -59,11 +76,30 @@ public abstract class PlainTextDeckImporter extends DeckImporter { return deckList; } - - @Override - public DeckCardLists importDeck(String file) { - return importDeck(file, null); + private void saveFixedDeckFile(List fixedfile, File file) { + try (FileOutputStream stream = new FileOutputStream(file)) { + PrintWriter out = new PrintWriter(stream); + for (String line : fixedfile) { + out.println(line); + } + out.close(); + } catch (Exception e) { + logger.error("Can't save fixed deck file: " + file.getAbsolutePath() + ", reason: " + e.getMessage()); + } } - protected abstract void readLine(String line, DeckCardLists deckList); + + @Override + public DeckCardLists importDeck(String file, boolean saveAutoFixedFile) { + return importDeck(file, null, saveAutoFixedFile); + } + + /** + * Read one text line from file and convert it to card + * + * @param line original text line + * @param deckList deck list for new card + * @param fixedInfo fixed info that contains fixed line (if converter can auto-fix deck file, e.g. replace one card to another) + */ + protected abstract void readLine(String line, DeckCardLists deckList, FixedInfo fixedInfo); } diff --git a/Mage/src/main/java/mage/cards/decks/importer/TxtDeckImporter.java b/Mage/src/main/java/mage/cards/decks/importer/TxtDeckImporter.java index 831b09f3649..002c7711a84 100644 --- a/Mage/src/main/java/mage/cards/decks/importer/TxtDeckImporter.java +++ b/Mage/src/main/java/mage/cards/decks/importer/TxtDeckImporter.java @@ -31,7 +31,7 @@ public class TxtDeckImporter extends PlainTextDeckImporter { } @Override - protected void readLine(String line, DeckCardLists deckList) { + protected void readLine(String line, DeckCardLists deckList, FixedInfo fixedInfo) { line = line.trim(); diff --git a/Mage/src/test/java/mage/cards/decks/importer/CodDeckImportTest.java b/Mage/src/test/java/mage/cards/decks/importer/CodDeckImportTest.java index 9dd94dfdb88..c6ccb497143 100644 --- a/Mage/src/test/java/mage/cards/decks/importer/CodDeckImportTest.java +++ b/Mage/src/test/java/mage/cards/decks/importer/CodDeckImportTest.java @@ -1,40 +1,39 @@ package mage.cards.decks.importer; +import mage.cards.decks.DeckCardLists; +import org.junit.Test; + import static org.junit.Assert.assertEquals; -import org.junit.Test; - -import mage.cards.decks.DeckCardLists; - public class CodDeckImportTest { - private static final FakeCardLookup LOOKUP = new FakeCardLookup(false) - .addCard("Forest") - .addCard("Razorverge Thicket") - .addCard("Avacyn's Pilgrim") - .addCard("War Priest of Thune"); + private static final FakeCardLookup LOOKUP = new FakeCardLookup(false) + .addCard("Forest") + .addCard("Razorverge Thicket") + .addCard("Avacyn's Pilgrim") + .addCard("War Priest of Thune"); - @Test - public void testImport() { - CodDeckImporter importer = new CodDeckImporter() { - @Override - public CardLookup getCardLookup() { - return LOOKUP; - } - }; - StringBuilder errors = new StringBuilder(); - DeckCardLists deck = importer.importDeck( - "src/test/java/mage/cards/decks/importer/samples/testdeck.cod", errors); - assertEquals("Deck Name", deck.getName()); + @Test + public void testImport() { + CodDeckImporter importer = new CodDeckImporter() { + @Override + public CardLookup getCardLookup() { + return LOOKUP; + } + }; + StringBuilder errors = new StringBuilder(); + DeckCardLists deck = importer.importDeck( + "src/test/java/mage/cards/decks/importer/samples/testdeck.cod", errors, false); + assertEquals("Deck Name", deck.getName()); - TestDeckChecker.checker() - .addMain("Forest", 12) - .addMain("Razorverge Thicket", 100) - .addMain("Avacyn's Pilgrim", 1) - .addSide("War Priest of Thune", 3) - .verify(deck, 113, 3); + TestDeckChecker.checker() + .addMain("Forest", 12) + .addMain("Razorverge Thicket", 100) + .addMain("Avacyn's Pilgrim", 1) + .addSide("War Priest of Thune", 3) + .verify(deck, 113, 3); - assertEquals("Could not find card: '@#$NOT A REAL CARD NAME@#$'\n", errors.toString()); - } + assertEquals("Could not find card: '@#$NOT A REAL CARD NAME@#$'\n", errors.toString()); + } } diff --git a/Mage/src/test/java/mage/cards/decks/importer/DecDeckImportTest.java b/Mage/src/test/java/mage/cards/decks/importer/DecDeckImportTest.java index 65803c884b4..1c7078d6ef0 100644 --- a/Mage/src/test/java/mage/cards/decks/importer/DecDeckImportTest.java +++ b/Mage/src/test/java/mage/cards/decks/importer/DecDeckImportTest.java @@ -1,52 +1,51 @@ package mage.cards.decks.importer; +import mage.cards.decks.DeckCardLists; +import org.junit.Test; + import static org.junit.Assert.assertEquals; -import org.junit.Test; - -import mage.cards.decks.DeckCardLists; - public class DecDeckImportTest { - private static final FakeCardLookup LOOKUP = new FakeCardLookup(); + private static final FakeCardLookup LOOKUP = new FakeCardLookup(); - @Test - public void testImport() { - StringBuilder errors = new StringBuilder(); - DecDeckImporter importer = new DecDeckImporter() { - @Override - public CardLookup getCardLookup() { - return LOOKUP; - } - }; - DeckCardLists deck = importer.importDeck( - "src/test/java/mage/cards/decks/importer/samples/testdeck.dec", errors); + @Test + public void testImport() { + StringBuilder errors = new StringBuilder(); + DecDeckImporter importer = new DecDeckImporter() { + @Override + public CardLookup getCardLookup() { + return LOOKUP; + } + }; + DeckCardLists deck = importer.importDeck( + "src/test/java/mage/cards/decks/importer/samples/testdeck.dec", errors, false); - TestDeckChecker.checker() - .addMain("Masticore", 4) - .addMain("Metalworker", 4) - .addMain("Phyrexian Colossus", 1) - .addMain("Crumbling Sanctuary", 1) - .addMain("Grim Monolith", 4) - .addMain("Mishra's Helix", 1) - .addMain("Phyrexian Processor", 4) - .addMain("Tangle Wire", 4) - .addMain("Thran Dynamo", 4) - .addMain("Voltaic Key", 4) - .addMain("Tinker", 4) - .addMain("Brainstorm", 4) - .addMain("Crystal Vein", 4) - .addMain("Island", 9) - .addMain("Rishadan Port", 4) - .addMain("Saprazzan Skerry", 4) - .addSide("Annul", 4) - .addSide("Chill", 4) - .addSide("Miscalculation", 4) - .addSide("Mishra's Helix", 1) - .addSide("Rising Waters", 2) - .verify(deck, 60, 15); + TestDeckChecker.checker() + .addMain("Masticore", 4) + .addMain("Metalworker", 4) + .addMain("Phyrexian Colossus", 1) + .addMain("Crumbling Sanctuary", 1) + .addMain("Grim Monolith", 4) + .addMain("Mishra's Helix", 1) + .addMain("Phyrexian Processor", 4) + .addMain("Tangle Wire", 4) + .addMain("Thran Dynamo", 4) + .addMain("Voltaic Key", 4) + .addMain("Tinker", 4) + .addMain("Brainstorm", 4) + .addMain("Crystal Vein", 4) + .addMain("Island", 9) + .addMain("Rishadan Port", 4) + .addMain("Saprazzan Skerry", 4) + .addSide("Annul", 4) + .addSide("Chill", 4) + .addSide("Miscalculation", 4) + .addSide("Mishra's Helix", 1) + .addSide("Rising Waters", 2) + .verify(deck, 60, 15); - assertEquals("", errors.toString()); - } + assertEquals("", errors.toString()); + } } diff --git a/Mage/src/test/java/mage/cards/decks/importer/DraftLogImporterTest.java b/Mage/src/test/java/mage/cards/decks/importer/DraftLogImporterTest.java index 7c64308dd40..80a2ea9309e 100644 --- a/Mage/src/test/java/mage/cards/decks/importer/DraftLogImporterTest.java +++ b/Mage/src/test/java/mage/cards/decks/importer/DraftLogImporterTest.java @@ -3,7 +3,7 @@ package mage.cards.decks.importer; import mage.cards.decks.DeckCardLists; import org.junit.Test; -import static org.junit.Assert.*; +import static org.junit.Assert.assertEquals; public class DraftLogImporterTest { @@ -19,7 +19,7 @@ public class DraftLogImporterTest { } }; DeckCardLists deck = importer.importDeck( - "src/test/java/mage/cards/decks/importer/samples/testdeck.draft", errors); + "src/test/java/mage/cards/decks/importer/samples/testdeck.draft", errors, false); TestDeckChecker.checker() .addMain("Raging Ravine", 1) diff --git a/Mage/src/test/java/mage/cards/decks/importer/MtgaImporterTest.java b/Mage/src/test/java/mage/cards/decks/importer/MtgaImporterTest.java index 2db8dea4047..f4d186ac5c3 100644 --- a/Mage/src/test/java/mage/cards/decks/importer/MtgaImporterTest.java +++ b/Mage/src/test/java/mage/cards/decks/importer/MtgaImporterTest.java @@ -3,9 +3,7 @@ package mage.cards.decks.importer; import mage.cards.decks.DeckCardLists; import org.junit.Test; -import java.io.File; - -import static org.junit.Assert.*; +import static org.junit.Assert.assertEquals; public class MtgaImporterTest { @@ -21,7 +19,7 @@ public class MtgaImporterTest { }; StringBuilder errors = new StringBuilder(); DeckCardLists deck = importer.importDeck( - "src/test/java/mage/cards/decks/importer/samples/testdeck.mtga", errors); + "src/test/java/mage/cards/decks/importer/samples/testdeck.mtga", errors, false); TestDeckChecker.checker() .addMain("Niv-Mizzet Reborn", 1) diff --git a/Mage/src/test/java/mage/cards/decks/importer/MtgjsonDeckImportTest.java b/Mage/src/test/java/mage/cards/decks/importer/MtgjsonDeckImportTest.java index 1395f4bf16d..77f8834c622 100644 --- a/Mage/src/test/java/mage/cards/decks/importer/MtgjsonDeckImportTest.java +++ b/Mage/src/test/java/mage/cards/decks/importer/MtgjsonDeckImportTest.java @@ -1,57 +1,56 @@ package mage.cards.decks.importer; +import mage.cards.decks.DeckCardLists; +import org.junit.Test; + import static org.junit.Assert.assertEquals; -import org.junit.Test; - -import mage.cards.decks.DeckCardLists; - public class MtgjsonDeckImportTest { - private static final FakeCardLookup LOOKUP = new FakeCardLookup(); + private static final FakeCardLookup LOOKUP = new FakeCardLookup(); - @Test - public void testImport() { - StringBuilder errors = new StringBuilder(); - MtgjsonDeckImporter importer = new MtgjsonDeckImporter() { - @Override - public CardLookup getCardLookup() { - return LOOKUP; - } - }; - DeckCardLists deck = importer.importDeck( - "src/test/java/mage/cards/decks/importer/samples/testdeck.json", errors); - assertEquals("Arcane Tempo", deck.getName()); + @Test + public void testImport() { + StringBuilder errors = new StringBuilder(); + MtgjsonDeckImporter importer = new MtgjsonDeckImporter() { + @Override + public CardLookup getCardLookup() { + return LOOKUP; + } + }; + DeckCardLists deck = importer.importDeck( + "src/test/java/mage/cards/decks/importer/samples/testdeck.json", errors, false); + assertEquals("Arcane Tempo", deck.getName()); - TestDeckChecker.checker() - .addMain("Goblin Electromancer", 4) - .addMain("Crackling Drake", 4) - .addMain("Murmuring Mystic", 2) - .addMain("Arclight Phoenix", 1) - .addMain("Niv-Mizzet, Parun", 2) - .addMain("Chart a Course", 4) - .addMain("Lava Coil", 4) - .addMain("Beacon Bolt", 1) - .addMain("Opt", 4) - .addMain("Radical Idea", 4) - .addMain("Shock", 4) - .addMain("Dive Down", 2) - .addMain("Blink of an Eye", 1) - .addMain("The Mirari Conjecture", 1) - .addMain("Sulfur Falls", 3) - .addMain("Izzet Guildgate", 4) - .addMain("Island", 8) - .addMain("Mountain", 7) - .addSide("The Mirari Conjecture", 1) - .addSide("Beacon Bolt", 1) - .addSide("Negate", 3) - .addSide("Entrancing Melody", 3) - .addSide("Fiery Cannonade", 3) - .addSide("Shivan Fire", 2) - .addSide("Disdainful Stroke", 2) - .verify(deck, 60, 15); + TestDeckChecker.checker() + .addMain("Goblin Electromancer", 4) + .addMain("Crackling Drake", 4) + .addMain("Murmuring Mystic", 2) + .addMain("Arclight Phoenix", 1) + .addMain("Niv-Mizzet, Parun", 2) + .addMain("Chart a Course", 4) + .addMain("Lava Coil", 4) + .addMain("Beacon Bolt", 1) + .addMain("Opt", 4) + .addMain("Radical Idea", 4) + .addMain("Shock", 4) + .addMain("Dive Down", 2) + .addMain("Blink of an Eye", 1) + .addMain("The Mirari Conjecture", 1) + .addMain("Sulfur Falls", 3) + .addMain("Izzet Guildgate", 4) + .addMain("Island", 8) + .addMain("Mountain", 7) + .addSide("The Mirari Conjecture", 1) + .addSide("Beacon Bolt", 1) + .addSide("Negate", 3) + .addSide("Entrancing Melody", 3) + .addSide("Fiery Cannonade", 3) + .addSide("Shivan Fire", 2) + .addSide("Disdainful Stroke", 2) + .verify(deck, 60, 15); - assertEquals("", errors.toString()); - } + assertEquals("", errors.toString()); + } } diff --git a/Mage/src/test/java/mage/cards/decks/importer/MwsDeckImportTest.java b/Mage/src/test/java/mage/cards/decks/importer/MwsDeckImportTest.java index cf364d81080..ef2b1a96bae 100644 --- a/Mage/src/test/java/mage/cards/decks/importer/MwsDeckImportTest.java +++ b/Mage/src/test/java/mage/cards/decks/importer/MwsDeckImportTest.java @@ -1,57 +1,51 @@ package mage.cards.decks.importer; +import mage.cards.decks.DeckCardLists; +import org.junit.Test; + import static org.junit.Assert.assertEquals; -import java.util.Collections; -import java.util.List; - -import org.junit.Test; - -import mage.cards.decks.DeckCardLists; -import mage.cards.repository.CardCriteria; -import mage.cards.repository.CardInfo; - public class MwsDeckImportTest { - private static final FakeCardLookup LOOKUP = new FakeCardLookup(); + private static final FakeCardLookup LOOKUP = new FakeCardLookup(); - @Test - public void testImport() { - MWSDeckImporter importer = new MWSDeckImporter() { - @Override - public CardLookup getCardLookup() { - return LOOKUP; - } - }; - StringBuilder errors = new StringBuilder(); - DeckCardLists deck = importer.importDeck( - "src/test/java/mage/cards/decks/importer/samples/testdeck.mwDeck", errors); + @Test + public void testImport() { + MWSDeckImporter importer = new MWSDeckImporter() { + @Override + public CardLookup getCardLookup() { + return LOOKUP; + } + }; + StringBuilder errors = new StringBuilder(); + DeckCardLists deck = importer.importDeck( + "src/test/java/mage/cards/decks/importer/samples/testdeck.mwDeck", errors, false); - TestDeckChecker.checker() - .addMain("Mutavault", 4) - .addMain("Plains", 18) - .addMain("Daring Skyjek", 2) - .addMain("Azorius Arrester", 4) - .addMain("Banisher Priest", 4) - .addMain("Boros Elite", 4) - .addMain("Dryad Militant", 4) - .addMain("Imposing Sovereign", 4) - .addMain("Precinct Captain", 4) - .addMain("Soldier of the Pantheon", 4) - .addMain("Spear of Heliod", 3) - .addMain("Rootborn Defenses", 1) - .addMain("Brave the Elements", 4) + TestDeckChecker.checker() + .addMain("Mutavault", 4) + .addMain("Plains", 18) + .addMain("Daring Skyjek", 2) + .addMain("Azorius Arrester", 4) + .addMain("Banisher Priest", 4) + .addMain("Boros Elite", 4) + .addMain("Dryad Militant", 4) + .addMain("Imposing Sovereign", 4) + .addMain("Precinct Captain", 4) + .addMain("Soldier of the Pantheon", 4) + .addMain("Spear of Heliod", 3) + .addMain("Rootborn Defenses", 1) + .addMain("Brave the Elements", 4) - .addSide("Wear/Tear", 1) - .addSide("Glare of Heresy", 2) - .addSide("Fiendslayer Paladin", 3) - .addSide("Riot Control", 3) - .addSide("Ajani, Caller of the Pride", 3) - .addSide("Rootborn Defenses", 3) + .addSide("Wear/Tear", 1) + .addSide("Glare of Heresy", 2) + .addSide("Fiendslayer Paladin", 3) + .addSide("Riot Control", 3) + .addSide("Ajani, Caller of the Pride", 3) + .addSide("Rootborn Defenses", 3) - .verify(deck, 60, 15); + .verify(deck, 60, 15); - assertEquals("", errors.toString()); - } + assertEquals("", errors.toString()); + } } diff --git a/Mage/src/test/java/mage/cards/decks/importer/O8dDeckImportTest.java b/Mage/src/test/java/mage/cards/decks/importer/O8dDeckImportTest.java index 4eade3abd73..be230c36bac 100644 --- a/Mage/src/test/java/mage/cards/decks/importer/O8dDeckImportTest.java +++ b/Mage/src/test/java/mage/cards/decks/importer/O8dDeckImportTest.java @@ -1,33 +1,32 @@ package mage.cards.decks.importer; +import mage.cards.decks.DeckCardLists; +import org.junit.Test; + import static org.junit.Assert.assertEquals; -import org.junit.Test; - -import mage.cards.decks.DeckCardLists; - public class O8dDeckImportTest { - private static final FakeCardLookup LOOKUP = new FakeCardLookup(); + private static final FakeCardLookup LOOKUP = new FakeCardLookup(); - @Test - public void testImport() { - O8dDeckImporter importer = new O8dDeckImporter() { - @Override - public CardLookup getCardLookup() { - return LOOKUP; - } - }; - StringBuilder errors = new StringBuilder(); - DeckCardLists deck = importer.importDeck( - "src/test/java/mage/cards/decks/importer/samples/testdeck.o8d", errors); + @Test + public void testImport() { + O8dDeckImporter importer = new O8dDeckImporter() { + @Override + public CardLookup getCardLookup() { + return LOOKUP; + } + }; + StringBuilder errors = new StringBuilder(); + DeckCardLists deck = importer.importDeck( + "src/test/java/mage/cards/decks/importer/samples/testdeck.o8d", errors, false); - TestDeckChecker.checker() - .addMain("Forest", 1) - .addSide("Island", 2) - .verify(deck, 1, 2); + TestDeckChecker.checker() + .addMain("Forest", 1) + .addSide("Island", 2) + .verify(deck, 1, 2); - assertEquals("", errors.toString()); - } + assertEquals("", errors.toString()); + } } From ad6797d3c0d642e7143adadb07f332417a8ce127 Mon Sep 17 00:00:00 2001 From: Oleg Agafonov Date: Sat, 8 Aug 2020 23:12:06 +0400 Subject: [PATCH 178/182] GUI: added more error checks while import/load deck file; --- .../java/mage/verify/VerifyCardDataTest.java | 14 ++++-- .../cards/decks/importer/DckDeckImporter.java | 44 ++++++++++++------- .../decks/importer/PlainTextDeckImporter.java | 4 ++ .../mage/cards/repository/CardRepository.java | 19 ++++++-- 4 files changed, 58 insertions(+), 23 deletions(-) diff --git a/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java b/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java index d26452fb594..62ceb0979d6 100644 --- a/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java +++ b/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java @@ -71,6 +71,7 @@ public class VerifyCardDataTest { private static final String SKIP_LIST_DOUBLE_RARE = "DOUBLE_RARE"; private static final String SKIP_LIST_UNSUPPORTED_SETS = "UNSUPPORTED_SETS"; private static final String SKIP_LIST_SCRYFALL_DOWNLOAD_SETS = "SCRYFALL_DOWNLOAD_SETS"; + private static final String SKIP_LIST_SAMPLE_DECKS = "SAMPLE_DECKS"; private static final Pattern SHORT_JAVA_STRING = Pattern.compile("(?<=\")[A-Z][a-z]+(?=\")"); static { @@ -190,6 +191,10 @@ public class VerifyCardDataTest { // scryfall download sets (missing from scryfall website) skipListCreate(SKIP_LIST_SCRYFALL_DOWNLOAD_SETS); skipListAddName(SKIP_LIST_SCRYFALL_DOWNLOAD_SETS, "SWS"); // Star Wars + + // sample decks checking - some decks can contains unimplemented cards, so ignore it + skipListCreate(SKIP_LIST_SAMPLE_DECKS); + skipListAddName(SKIP_LIST_SAMPLE_DECKS, "\\Commander\\Commander 2019\\Merciless Rage.dck"); // TODO: delete after Aeon Engine implemented } private final ArrayList outputMessages = new ArrayList<>(); @@ -472,7 +477,6 @@ public class VerifyCardDataTest { } @Test - //@Ignore // TODO: enable and fix broken decks after promo sets merge https://github.com/magefree/mage/pull/6190 public void test_checkSampleDecks() { Collection errorsList = new ArrayList<>(); @@ -496,7 +500,11 @@ public class VerifyCardDataTest { // try to open deck files int totalErrorFiles = 0; for (Path deckFile : filesList) { - String deckName = deckFile.toString().replace(rootPath, ""); + String deckName = "\\" + deckFile.toString().replace(rootPath, ""); + if (skipListHaveName(SKIP_LIST_SAMPLE_DECKS, deckName)) { + continue; + } + StringBuilder deckErrors = new StringBuilder(); DeckCardLists deckCards = DeckImporter.importDeckFromFile(deckFile.toString(), deckErrors, AUTO_FIX_SAMPLE_DECKS); @@ -508,7 +516,7 @@ public class VerifyCardDataTest { } if ((deckCards.getCards().size() + deckCards.getSideboard().size()) < 10) { - errorsList.add("Error: sample deck contains too little cards " + deckName); + errorsList.add("Error: sample deck contains too little cards (" + deckCards.getSideboard().size() + ") " + deckName); totalErrorFiles++; continue; } diff --git a/Mage/src/main/java/mage/cards/decks/importer/DckDeckImporter.java b/Mage/src/main/java/mage/cards/decks/importer/DckDeckImporter.java index e5ed8a29f21..834aaf0ef8b 100644 --- a/Mage/src/main/java/mage/cards/decks/importer/DckDeckImporter.java +++ b/Mage/src/main/java/mage/cards/decks/importer/DckDeckImporter.java @@ -7,7 +7,7 @@ import mage.cards.repository.CardInfo; import mage.cards.repository.CardRepository; import java.util.ArrayList; -import java.util.HashMap; +import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.regex.Matcher; @@ -28,7 +28,9 @@ public class DckDeckImporter extends PlainTextDeckImporter { private static final Pattern layoutStackEntryPattern = Pattern.compile("\\[(\\w+[^:]*\\w*):(\\w+\\w*)]"); // test cases: [JR:64ab],[JR:64],[MPSAK1321:43],[MPSAKH:9],[MPS123-AKH:32],[MPS-13AKH:30],[MPS-AKH:49],[MPS-AKH:11], [PUMA:U16] - private final Map possibleFixes = new HashMap<>(); // possible fixes for card codes and numbers [code:123] -> [code:456] + // possible fixes for card numbers: [code:123] -> [code:456] + // possible fixes for card numbers with name: [code:123] card1 -> [code:456] card2 + private final Map possibleFixes = new LinkedHashMap<>(); @Override protected void readLine(String line, DeckCardLists deckList, FixedInfo fixedInfo) { @@ -60,13 +62,14 @@ public class DckDeckImporter extends PlainTextDeckImporter { setCode = setCode == null ? "" : setCode.trim(); cardName = cardName == null ? "" : cardName.trim(); - // text for auto-fix - String originalText = ""; + // text for auto-fix (don't work on extra spaces between numbers and name -- it's ok) + String originalNumbers = ""; + String originalNumbersWithName = ""; if (!setCode.isEmpty() && !cardNum.isEmpty()) { - // [ISD:144] - originalText = "[" + setCode + ":" + cardNum + "]"; + // [ISD:144] card_name + originalNumbers = "[" + setCode + ":" + cardNum + "]"; + originalNumbersWithName = originalNumbers + " " + cardName; } - String fixedText = originalText; // search priority: set/number -> name // with bulletproof on card number or name changes @@ -74,7 +77,7 @@ public class DckDeckImporter extends PlainTextDeckImporter { DeckCardInfo deckCardInfo = null; // search by set/number - CardInfo foundedCard = CardRepository.instance.findCard(setCode, cardNum); + CardInfo foundedCard = CardRepository.instance.findCard(setCode, cardNum, true); boolean wasOutdated = false; if ((foundedCard != null) && !foundedCard.getName().equals(cardName)) { sbMessage.append("Line ").append(lineCount).append(": ").append("found outdated card number or name, will try to replace: ").append(line).append('\n'); @@ -93,15 +96,24 @@ public class DckDeckImporter extends PlainTextDeckImporter { } if (foundedCard != null) { - sbMessage.append("Line ").append(lineCount).append(": ") - .append("replaced to [").append(foundedCard.getSetCode()).append(":").append(foundedCard.getCardNumberAsInt()).append("] ") - .append(foundedCard.getName()).append('\n'); + if (foundedCard.isNightCard()) { + sbMessage.append("Line ").append(lineCount).append(": ").append("ERROR, you can't use night card in deck [").append(foundedCard.getName()).append("]").append('\n'); + } else { + sbMessage.append("Line ").append(lineCount).append(": ") + .append("replaced to [").append(foundedCard.getSetCode()).append(":").append(foundedCard.getCardNumberAsInt()).append("] ") + .append(foundedCard.getName()).append('\n'); - // AUTO-FIX POSSIBLE (apply and save it for another lines like layout) - // [ISD:144] - fixedText = "[" + foundedCard.getSetCode() + ":" + foundedCard.getCardNumber() + "]"; - fixedInfo.setFixedLine(fixedInfo.getOriginalLine().replace(originalText, fixedText)); - this.possibleFixes.put(originalText, fixedText); + // AUTO-FIX POSSIBLE (apply and save it for another lines like layout) + // [ISD:144] card + String fixNumbers = "[" + foundedCard.getSetCode() + ":" + foundedCard.getCardNumber() + "]"; + String fixNumbersWithName = fixNumbers + " " + foundedCard.getName(); + this.possibleFixes.put(originalNumbersWithName, fixNumbersWithName); // name fix must goes first + this.possibleFixes.put(originalNumbers, fixNumbers); + String fixedLine = fixedInfo.getOriginalLine() + .replace(originalNumbersWithName, fixNumbersWithName) + .replace(originalNumbers, fixNumbers); + fixedInfo.setFixedLine(fixedLine); + } } else { sbMessage.append("Line ").append(lineCount).append(": ").append("ERROR, can't find card [").append(cardName).append("]").append('\n'); } diff --git a/Mage/src/main/java/mage/cards/decks/importer/PlainTextDeckImporter.java b/Mage/src/main/java/mage/cards/decks/importer/PlainTextDeckImporter.java index 748e1970f16..c6b9600d17c 100644 --- a/Mage/src/main/java/mage/cards/decks/importer/PlainTextDeckImporter.java +++ b/Mage/src/main/java/mage/cards/decks/importer/PlainTextDeckImporter.java @@ -58,6 +58,10 @@ public abstract class PlainTextDeckImporter extends DeckImporter { saveFixedDeckFile(fixedFile, f); } + if (deckList.getCards().isEmpty() && deckList.getSideboard().isEmpty()) { + sbMessage.append("ERROR, unknown deck format, can't find any cards").append("\n"); + } + if (sbMessage.length() > 0) { if (errorMessages != null) { // normal output for user diff --git a/Mage/src/main/java/mage/cards/repository/CardRepository.java b/Mage/src/main/java/mage/cards/repository/CardRepository.java index 96fe7d248b0..f92a1b20e88 100644 --- a/Mage/src/main/java/mage/cards/repository/CardRepository.java +++ b/Mage/src/main/java/mage/cards/repository/CardRepository.java @@ -39,7 +39,7 @@ public enum CardRepository { private static final long CARD_CONTENT_VERSION = 231; private Dao cardDao; private Set classNames; - private RepositoryEventSource eventSource = new RepositoryEventSource(); + private final RepositoryEventSource eventSource = new RepositoryEventSource(); CardRepository() { File file = new File("db"); @@ -335,11 +335,22 @@ public enum CardRepository { } public CardInfo findCard(String setCode, String cardNumber) { + return findCard(setCode, cardNumber, true); + } + + public CardInfo findCard(String setCode, String cardNumber, boolean ignoreNightCards) { try { QueryBuilder queryBuilder = cardDao.queryBuilder(); - queryBuilder.limit(1L).where().eq("setCode", new SelectArg(setCode)) - .and().eq("cardNumber", new SelectArg(cardNumber)) - .and().eq("nightCard", new SelectArg(false)); + if (ignoreNightCards) { + queryBuilder.limit(1L).where() + .eq("setCode", new SelectArg(setCode)) + .and().eq("cardNumber", new SelectArg(cardNumber)) + .and().eq("nightCard", new SelectArg(false)); + } else { + queryBuilder.limit(1L).where() + .eq("setCode", new SelectArg(setCode)) + .and().eq("cardNumber", new SelectArg(cardNumber)); + } List result = cardDao.query(queryBuilder.prepare()); if (!result.isEmpty()) { return result.get(0); From 6a897fa8f85ef867e3d9e26e7fb0d7a728a0002c Mon Sep 17 00:00:00 2001 From: Oleg Agafonov Date: Sat, 8 Aug 2020 23:13:30 +0400 Subject: [PATCH 179/182] * Other: fixed sample decks to actual card numbers, fixed broken sample decks; --- ...e World Championship Deck Brian Selden.dck | 16 +- .../Tim Sussino's Pyromancer Ascension.dck | 2 +- ... Graefensteiner's Pyromancer Ascension.dck | 2 +- .../2011/Starter Decks/[ZEN] Kor Armory.dck | 8 +- .../Starter Decks/[ZEN] The Adventurers.dck | 16 +- .../Hexproof Enchantress.dck | 39 ++-- .../Shouta Yasooka's Blue-Black Control.dck | 51 +++-- ...trick Chapin's Grixis Control Standard.dck | 2 +- .../Budget - Jacob's Mono-Black Zombies.dck | 6 +- .../2012/ISD-DKA-AVR/Turbo Poison.dck | 2 +- .../2012/Starter Decks/[DKA] Grave Power.dck | 2 +- .../sample-decks/2012/T2/[T2] Avignon.dck | 2 +- .../sample-decks/2012/T2/[T2] Kangasu.dck | 2 +- .../2012/T2/[T2] Samite Healer.dck | 2 +- .../sample-decks/2012/T2/[T2] dhouse.dck | 4 +- .../sample-decks/2012/T2/[T2] puddingtime.dck | 4 +- .../sample-decks/2012/T2/[T2] sknbny.dck | 4 +- .../2013/Legacy/Tim Wilson's Nic Fit.dck | 4 +- .../DailyMTG/Krond - Clothes in a Bag.dck | 4 +- .../Jonathan Riddell's Melira Pod.dck | 2 +- .../Josh Inoa's UWR Splinter Twin.dck | 2 +- .../Louis Kaplan's Kiki-Jiki Pod.dck | 2 +- .../Noah Whinston's Splinter Twin.dck | 2 +- .../Steven Locke's Domain Zoo.dck | 6 +- .../2013/Modern/Gamma_Frog's Raka Tempo.dck | 12 +- .../Brandon Remley's KikiPod 3rd Place.dck | 8 +- .../David Daniel's KikiPod 1st Place.dck | 10 +- .../Donald Richter 2nd Place (GWB).dck | 4 +- .../Joseph Cardoza's Meerfolk 4th Place.dck | 4 +- .../2013/Modern/Zoizaite's Splinter Twin.dck | 2 +- .../2013/Modern/_Blaze777_'s RG Tron.dck | 2 +- .../2013/Modern/____czery's Kiki-Jiki Pod.dck | 12 +- .../2013/Modern/max115's Spirit Jund.dck | 12 +- .../2013/Modern/optimus's Tribal Zoo.dck | 8 +- .../Darryl Hoard's Bottoms Up.dck | 2 +- .../Douglas Scheinberg's Seance Combo.dck | 1 - .../Disciple of Innistrad's Angelic Post.dck | 2 +- .../Emmanuel Ramirez's Reanimator.dck | 1 - .../Frederic Mercier's Esper Control.dck | 1 - .../Jeremy Dezani's Jund Midrange.dck | 1 - .../Anthony Loman's Reanimator.dck | 4 +- .../Derek Reda's Esper Deathblade.dck | 8 +- .../Eric De Luca's Sultai Delver.dck | 2 +- .../Eric Markowicz's Jeskai Delver.dck | 6 +- .../JD Nir's Ad Nauseam.dck | 4 +- .../John Gatza's Lands.dck | 12 +- .../John Grudzina's Jeskai Delver.dck | 4 +- .../Jon Goss's Esper Deathblade.dck | 4 +- .../Louis Fata's Death and Taxes.dck | 4 +- .../Marc Bertolin's Temur Delver.dck | 4 +- .../Michael Monks's Pox.dck | 4 +- .../Mike Midiri's Elves.dck | 6 +- .../Nate Sturm's Punishing Maverick.dck | 10 +- .../Nicholas DiJohn's Miracles.dck | 6 +- .../Pat Fehling's Deathblade.dck | 4 +- .../Ralph Betesh's Temur Delver.dck | 6 +- .../Reid Duke's Miracles.dck | 6 +- .../Rodrigo Togores's Ad Nauseam Tendrils.dck | 4 +- .../Stephen Harvey's Reanimator.dck | 4 +- .../Wang Zixi's Deathblade.dck | 2 +- .../Xin Sui's Shardless Sultai.dck | 2 +- .../Zach Dobbin's Helmerator.dck | 4 +- .../Zack Mullin's Miracles.dck | 4 +- .../Javier Dominguez's BUG Delver.dck | 20 +- .../Jean-Mary Accart's Imperial Painter.dck | 12 +- ...Manuel Fernandez Castello's BUG Delver.dck | 12 +- .../GP Paris/Loic Le Briand's Reanimator.dck | 10 +- .../GP Paris/Maxime Gilles' UWr Miracles.dck | 12 +- ...aulo Vitor Damo da Rosa's UWr Miracles.dck | 8 +- .../Philipp Schonegger's Miracles.dck | 11 +- .../GP Paris/Stefan Bottcher's Deathblade.dck | 17 +- .../James Cady – UWR Splinter Twin.dck | 1 - .../Ajani Nakano’s Infinite Ajani.dck | 1 - .../Colin Reilly’s Quadruple Strike.dck | 1 - .../Devon Straub’s The One-ders.dck | 1 - .../Gavin Verhey’s Nyxchantress.dck | 1 - .../Mahdi Fozi’s UR One-shot combo.dck | 1 - .../2015/Legacy/Manaless Dredge Example 1.dck | 6 +- .../2015/Legacy/Manaless Dredge Example 2.dck | 4 +- .../2015/Legacy/Manaless Dredge Example 3.dck | 4 +- .../release/sample-decks/AI/FastRedHaste.dck | 10 +- .../release/sample-decks/AI/Poison.dck | 10 +- .../sample-decks/AI/Zombi & Skeleton.dck | 10 +- .../Commander 2015/Call the Spirits (WB).dck | 4 +- .../Commander 2017/VampiricBloodlust.dck | 2 +- .../Commander 2018/Subjective Reality.dck | 178 +++++++++--------- .../sample-decks/Commander/Tasigur BGU.dck | 16 +- .../Commander/Zurgo Helmsmasher RWB.dck | 4 +- ...lins Deck Wins TDtB ST Apr 2011.mwDeck.dck | 16 +- .../Mardu Control TDtB ST Dec 2014.mwDeck.dck | 4 +- .../Saint WW TDtB ST Jan 2012.mwDeck.dck | 4 +- .../Duel Decks/Blessed vs. Cursed/Blessed.dck | 12 +- .../Duel Decks/Blessed vs. Cursed/Cursed.dck | 10 +- ...ionship 2004 (San Francisco) ST 9-5-04.dck | 2 +- ...ionship 2004 (San Francisco) ST 9-5-04.dck | 2 +- ...ionship 2004 (San Francisco) ST 9-5-04.dck | 2 +- ...ionship 2004 (San Francisco) ST 9-5-04.dck | 2 +- ...hampionship 2007 (New York) ST 12-6-07.dck | 2 +- ...d Championship 2006 (Paris) ST 12-3-06.dck | 2 +- .../GB Elves 34 PT Hollywood ST 5-25-08.dck | 2 +- .../Heartbeat 58 PT Honolulu ST 3-5-06.dck | 2 +- .../Izzetron 58 PT Honolulu ST 3-5-06.dck | 12 +- ...o Red Aggro 58 PT San Diego ST 2-21-10.dck | 2 +- .../Owling Mine 34 PT Honolulu ST 3-5-06.dck | 6 +- ...hampionship 2007 (New York) ST 12-6-07.dck | 2 +- ...hampionship 2007 (New York) ST 12-6-07.dck | 2 +- ...t Control Pro Tour SOI 2016 Jon Finkel.dck | 2 +- ...w Mana Ramp 58 PT Hollywood ST 5-25-08.dck | 4 +- ...Championship 2000 (Brussels) ST 8-6-00.dck | 10 +- 109 files changed, 411 insertions(+), 429 deletions(-) diff --git a/Mage.Client/release/sample-decks/1998/1998 Cali-Nightmare World Championship Deck Brian Selden.dck b/Mage.Client/release/sample-decks/1998/1998 Cali-Nightmare World Championship Deck Brian Selden.dck index eca9cfad61e..08d5f738602 100644 --- a/Mage.Client/release/sample-decks/1998/1998 Cali-Nightmare World Championship Deck Brian Selden.dck +++ b/Mage.Client/release/sample-decks/1998/1998 Cali-Nightmare World Championship Deck Brian Selden.dck @@ -1,28 +1,28 @@ -1 [TMP:227] Cloudchaser Eagle +1 [TMP:15] Cloudchaser Eagle 1 [EXO:76] Thrull Surgeon -2 [TMP:328] Reflecting Pool -1 [MIR:44] Spirit of the Night +2 [TMP:322] Reflecting Pool +1 [MIR:146] Spirit of the Night 1 [TMP:98] Tradewind Rider 2 [VIS:167] Undiscovered Paradise 2 [7ED:350] Underground River 4 [EXO:129] Survival of the Fittest 2 [WTH:101] Firestorm 2 [9ED:149] Nekrataal -1 [STH:137] Volrath's Stronghold +1 [STH:143] Volrath's Stronghold 2 [7ED:336] Karplusan Forest 3 [5ED:413] City of Brass -4 [STH:75] Wall of Blossoms +4 [STH:125] Wall of Blossoms 1 [M11:239] Swamp 4 [M11:165] Birds of Paradise 1 [TSB:119] Gemstone Mine 1 [VIS:37] Man-o'-War -2 [STH:68] Spike Feeder +2 [STH:118] Spike Feeder 1 [EXO:128] Spike Weaver 1 [9ED:278] Verdant Force -2 [TMP:298] Scroll Rack +2 [TMP:308] Scroll Rack 4 [EXO:72] Recurring Nightmare 2 [TSB:89] Wall of Roots 2 [INV:255] Lobotomy 8 [M10:247] Forest 1 [WTH:112] Orcish Settlers -2 [VIS:73] Uktabi Orangutan +2 [VIS:123] Uktabi Orangutan diff --git a/Mage.Client/release/sample-decks/2011/Ala-M10-Zen/Tim Sussino's Pyromancer Ascension.dck b/Mage.Client/release/sample-decks/2011/Ala-M10-Zen/Tim Sussino's Pyromancer Ascension.dck index 71b4baf87c3..4d4d0ebb4ac 100644 --- a/Mage.Client/release/sample-decks/2011/Ala-M10-Zen/Tim Sussino's Pyromancer Ascension.dck +++ b/Mage.Client/release/sample-decks/2011/Ala-M10-Zen/Tim Sussino's Pyromancer Ascension.dck @@ -12,4 +12,4 @@ 4 [ZEN:119] Burst Lightning 4 [TMP:97] Time Warp 2 [M11:47] Call to Mind -7 [ZEN:264] Mountain +7 [ZEN:242a] Mountain diff --git a/Mage.Client/release/sample-decks/2011/Ala-M10-Zen/Tobias Graefensteiner's Pyromancer Ascension.dck b/Mage.Client/release/sample-decks/2011/Ala-M10-Zen/Tobias Graefensteiner's Pyromancer Ascension.dck index 780c3c20788..aa6d1472a58 100644 --- a/Mage.Client/release/sample-decks/2011/Ala-M10-Zen/Tobias Graefensteiner's Pyromancer Ascension.dck +++ b/Mage.Client/release/sample-decks/2011/Ala-M10-Zen/Tobias Graefensteiner's Pyromancer Ascension.dck @@ -12,4 +12,4 @@ 3 [TMP:97] Time Warp 3 [M11:54] Foresee 2 [M11:47] Call to Mind -5 [ZEN:264] Mountain +5 [ZEN:242a] Mountain diff --git a/Mage.Client/release/sample-decks/2011/Starter Decks/[ZEN] Kor Armory.dck b/Mage.Client/release/sample-decks/2011/Starter Decks/[ZEN] Kor Armory.dck index 762f24cc802..5e73f6f9d2f 100644 --- a/Mage.Client/release/sample-decks/2011/Starter Decks/[ZEN] Kor Armory.dck +++ b/Mage.Client/release/sample-decks/2011/Starter Decks/[ZEN] Kor Armory.dck @@ -25,7 +25,7 @@ AUTHOR:WotC 2 [ZEN:231] Plains 2 [ZEN:232] Plains 2 [ZEN:233] Plains -2 [ZEN:250] Plains -2 [ZEN:251] Plains -2 [ZEN:252] Plains -2 [ZEN:253] Plains \ No newline at end of file +2 [ZEN:230a] Plains +2 [ZEN:230a] Plains +2 [ZEN:230a] Plains +2 [ZEN:230a] Plains diff --git a/Mage.Client/release/sample-decks/2011/Starter Decks/[ZEN] The Adventurers.dck b/Mage.Client/release/sample-decks/2011/Starter Decks/[ZEN] The Adventurers.dck index 0ec81a0d06d..d7387f444c1 100644 --- a/Mage.Client/release/sample-decks/2011/Starter Decks/[ZEN] The Adventurers.dck +++ b/Mage.Client/release/sample-decks/2011/Starter Decks/[ZEN] The Adventurers.dck @@ -30,11 +30,11 @@ AUTHOR:WotC 1 [ZEN:247] Forest 1 [ZEN:248] Forest 1 [ZEN:249] Forest -1 [ZEN:262] Mountain -1 [ZEN:263] Mountain -1 [ZEN:264] Mountain -1 [ZEN:265] Mountain -1 [ZEN:266] Forest -1 [ZEN:267] Forest -1 [ZEN:268] Forest -1 [ZEN:269] Forest \ No newline at end of file +1 [ZEN:242a] Mountain +1 [ZEN:242a] Mountain +1 [ZEN:242a] Mountain +1 [ZEN:242a] Mountain +1 [ZEN:246a] Forest +1 [ZEN:246a] Forest +1 [ZEN:246a] Forest +1 [ZEN:246a] Forest diff --git a/Mage.Client/release/sample-decks/2011/Unsorted (submitted by Iran)/Hexproof Enchantress.dck b/Mage.Client/release/sample-decks/2011/Unsorted (submitted by Iran)/Hexproof Enchantress.dck index a2af5ec3141..b3b2b6344c8 100644 --- a/Mage.Client/release/sample-decks/2011/Unsorted (submitted by Iran)/Hexproof Enchantress.dck +++ b/Mage.Client/release/sample-decks/2011/Unsorted (submitted by Iran)/Hexproof Enchantress.dck @@ -1,21 +1,18 @@ -Hexproof Enchantress -[general] -constructed -[main] -3 Island -5 Plains -4 Invisible Stalker -4 Mentor of the Meek -4 Mesa Enchantress -4 Mirran Crusader -3 Angelic Destiny -4 Bonds of Faith -4 Nevermore -4 Oblivion Ring -3 Ghost Quarter -4 Glacial Fortress -2 Moorland Haunt -4 Seachrome Coast -4 Geist of Saint Traft -4 Gitaxian Probe -[sideboard] +3 [M21:263] Island +5 [M21:260] Plains +4 [ISD:60] Invisible Stalker +4 [M19:27] Mentor of the Meek +4 [M12:25] Mesa Enchantress +4 [MBS:14] Mirran Crusader +3 [M12:3] Angelic Destiny +4 [ISD:5] Bonds of Faith +4 [ISD:25] Nevermore +4 [M13:22] Oblivion Ring +3 [ISD:240] Ghost Quarter +4 [XLN:255] Glacial Fortress +2 [ISD:244] Moorland Haunt +4 [SOM:229] Seachrome Coast +4 [ISD:213] Geist of Saint Traft +4 [NPH:35] Gitaxian Probe +LAYOUT MAIN:(1,5)(EDH_POWER_LEVEL,false,73)|([M21:263],[M21:263],[M21:263],[M21:260],[M21:260],[M21:260],[M21:260],[M21:260],[M12:3],[M12:3],[M12:3],[ISD:5],[ISD:5],[ISD:5],[ISD:5],[NPH:35],[NPH:35],[NPH:35],[NPH:35])([ISD:25],[ISD:25],[ISD:25],[ISD:25])([ISD:244],[ISD:244],[ISD:213],[ISD:213],[ISD:213],[ISD:213])([ISD:60],[ISD:60],[ISD:60],[ISD:60],[M12:25],[M12:25],[M12:25],[M12:25],[MBS:14],[MBS:14],[MBS:14],[MBS:14],[M13:22],[M13:22],[M13:22],[M13:22],[ISD:240],[ISD:240],[ISD:240])([M19:27],[M19:27],[M19:27],[M19:27],[XLN:255],[XLN:255],[XLN:255],[XLN:255],[SOM:229],[SOM:229],[SOM:229],[SOM:229]) +LAYOUT SIDEBOARD:(0,0)(EDH_POWER_LEVEL,false,50)| diff --git a/Mage.Client/release/sample-decks/2011/Unsorted (submitted by Iran)/Shouta Yasooka's Blue-Black Control.dck b/Mage.Client/release/sample-decks/2011/Unsorted (submitted by Iran)/Shouta Yasooka's Blue-Black Control.dck index a3c9e2a8851..c3e4d2ed6d3 100644 --- a/Mage.Client/release/sample-decks/2011/Unsorted (submitted by Iran)/Shouta Yasooka's Blue-Black Control.dck +++ b/Mage.Client/release/sample-decks/2011/Unsorted (submitted by Iran)/Shouta Yasooka's Blue-Black Control.dck @@ -1,27 +1,24 @@ -[metadata] -Name=Shouta Yasooka's Blue-Black Control -Deck Type=Constructed -[main] -1 Black Sun's Zenith|MBS -1 Consume the Meek|ROE -4 Creeping Tar Pit|WWK -4 Darkslick Shores|SOM -2 Despise|NPH -2 Disfigure|ZEN -2 Doom Blade|M12 -4 Drowned Catacomb|M12 -4 Everflowing Chalice|WWK -2 Inkmoth Nexus|MBS -3 Inquisition of Kozilek|ROE -4 Island|ZEN -2 Jace Beleren|M11 -2 Jace, the Mind Sculptor|WWK -2 Mana Leak|STH -4 Preordain|M11 -3 Swamp|ZEN -3 Tectonic Edge|WWK -3 Tezzeret, Agent of Bolas|MBS -4 Torpor Orb|NPH -3 Tumble Magnet|SOM -1 Wurmcoil Engine|SOM -[sideboard] +1 [MBS:39] Black Sun's Zenith +1 [ROE:100] Consume the Meek +4 [WWK:134] Creeping Tar Pit +4 [SOM:226] Darkslick Shores +2 [KTK:69] Despise +2 [M20:95] Disfigure +2 [M14:96] Doom Blade +4 [XLN:253] Drowned Catacomb +4 [WWK:123] Everflowing Chalice +2 [MBS:145] Inkmoth Nexus +3 [ROE:115] Inquisition of Kozilek +4 [M21:263] Island +2 [M11:58] Jace Beleren +2 [WWK:31] Jace, the Mind Sculptor +2 [M12:63] Mana Leak +4 [M11:70] Preordain +3 [M21:266] Swamp +3 [WWK:145] Tectonic Edge +3 [MBS:97] Tezzeret, Agent of Bolas +4 [NPH:162] Torpor Orb +3 [SOM:218] Tumble Magnet +1 [SOM:223] Wurmcoil Engine +LAYOUT MAIN:(1,6)(EDH_POWER_LEVEL,false,73)|([KTK:69],[KTK:69],[M20:95],[M20:95],[M21:263],[M21:263],[M21:263],[M21:263],[M21:266],[M21:266],[M21:266],[NPH:162],[NPH:162],[NPH:162],[NPH:162])([M14:96],[M14:96],[SOM:218],[SOM:218],[SOM:218])([M11:70],[M11:70],[M11:70],[M11:70])([WWK:134],[WWK:134],[WWK:134],[WWK:134],[WWK:145],[WWK:145],[WWK:145],[MBS:97],[MBS:97],[MBS:97])([MBS:39],[ROE:100],[SOM:226],[SOM:226],[SOM:226],[SOM:226],[XLN:253],[XLN:253],[XLN:253],[XLN:253],[WWK:123],[WWK:123],[WWK:123],[WWK:123],[MBS:145],[MBS:145],[ROE:115],[ROE:115],[ROE:115],[M11:58],[M11:58],[M12:63],[M12:63],[SOM:223])([WWK:31],[WWK:31]) +LAYOUT SIDEBOARD:(0,0)(EDH_POWER_LEVEL,false,50)| diff --git a/Mage.Client/release/sample-decks/2011/World Championship 2011/Patrick Chapin's Grixis Control Standard.dck b/Mage.Client/release/sample-decks/2011/World Championship 2011/Patrick Chapin's Grixis Control Standard.dck index c2b31c0c0a5..be83c0f36e3 100644 --- a/Mage.Client/release/sample-decks/2011/World Championship 2011/Patrick Chapin's Grixis Control Standard.dck +++ b/Mage.Client/release/sample-decks/2011/World Championship 2011/Patrick Chapin's Grixis Control Standard.dck @@ -6,7 +6,7 @@ 4 [ISD:55] Forbidden Alchemy 1 [MBS:43] Go for the Throat 5 [ISD:261] Mountain -1 [ISD:247] Shimmering Grotto +1 [ISD:246] Shimmering Grotto 1 [M12:147] Inferno Titan 1 [SOM:225] Copperline Gorge 2 [M12:226] Drowned Catacomb diff --git a/Mage.Client/release/sample-decks/2012/ISD-DKA-AVR/Budget - Jacob's Mono-Black Zombies.dck b/Mage.Client/release/sample-decks/2012/ISD-DKA-AVR/Budget - Jacob's Mono-Black Zombies.dck index 30d90a8a251..d831f4807b8 100644 --- a/Mage.Client/release/sample-decks/2012/ISD-DKA-AVR/Budget - Jacob's Mono-Black Zombies.dck +++ b/Mage.Client/release/sample-decks/2012/ISD-DKA-AVR/Budget - Jacob's Mono-Black Zombies.dck @@ -1,7 +1,7 @@ 3 [DKA:76] Tragic Slip 1 [AVR:104] Gloom Surgeon -1 [ZEN:259] Swamp -1 [ZEN:258] Swamp +1 [ZEN:238a] Swamp +1 [ZEN:238a] Swamp 1 [NPH:170] Swamp 1 [MBS:123] Pierce Strider 1 [SOM:192] Perilous Myr @@ -17,7 +17,7 @@ 1 [USG:340] Swamp 1 [SOM:241] Swamp 3 [DKA:54] Black Cat -1 [ZEN:260] Swamp +1 [ZEN:238a] Swamp 4 [NPH:104] Birthing Pod 1 [SOM:238] Swamp 1 [SOM:239] Swamp diff --git a/Mage.Client/release/sample-decks/2012/ISD-DKA-AVR/Turbo Poison.dck b/Mage.Client/release/sample-decks/2012/ISD-DKA-AVR/Turbo Poison.dck index 627583151c2..ab76ab16e1d 100644 --- a/Mage.Client/release/sample-decks/2012/ISD-DKA-AVR/Turbo Poison.dck +++ b/Mage.Client/release/sample-decks/2012/ISD-DKA-AVR/Turbo Poison.dck @@ -2,7 +2,7 @@ 1 [ISD:262] Forest 4 [MBS:145] Inkmoth Nexus 2 [DKA:27] Artful Dodge -1 [PGRU:1] Forest +1 [PGRU:5] Forest 4 [SOM:166] Ichorclaw Myr 3 [NPH:2] Apostle's Blessing 1 [INV:335] Island diff --git a/Mage.Client/release/sample-decks/2012/Starter Decks/[DKA] Grave Power.dck b/Mage.Client/release/sample-decks/2012/Starter Decks/[DKA] Grave Power.dck index 59a3f9de0cd..c5f623c897e 100644 --- a/Mage.Client/release/sample-decks/2012/Starter Decks/[DKA] Grave Power.dck +++ b/Mage.Client/release/sample-decks/2012/Starter Decks/[DKA] Grave Power.dck @@ -8,7 +8,7 @@ NAME:[DKA] Grave Power 2 [ISD:69] Moon Heron 1 [M12:167] Brindle Boar 3 [ISD:43] Armored Skaab -2 [STH:60] Mulch +2 [STH:110] Mulch 1 [M13:159] Acidic Slime 2 [M12:48] Chasm Drake 1 [ISD:205] Splinterfright diff --git a/Mage.Client/release/sample-decks/2012/T2/[T2] Avignon.dck b/Mage.Client/release/sample-decks/2012/T2/[T2] Avignon.dck index 8936f251ff6..60d22011606 100644 --- a/Mage.Client/release/sample-decks/2012/T2/[T2] Avignon.dck +++ b/Mage.Client/release/sample-decks/2012/T2/[T2] Avignon.dck @@ -31,7 +31,7 @@ NAME:[T2] Avignon SB: 1 [ISD:74] Sensory Deprivation SB: 1 [WWK:26] Dispel SB: 3 [RTR:173] Izzet Staticaster -SB: 1 [MPR:38] Negate +SB: 1 [M20:69] Negate SB: 2 [RTR:201] Supreme Verdict SB: 2 [RTR:18] Rest in Peace SB: 2 [ISD:213] Geist of Saint Traft diff --git a/Mage.Client/release/sample-decks/2012/T2/[T2] Kangasu.dck b/Mage.Client/release/sample-decks/2012/T2/[T2] Kangasu.dck index 1916899e0ff..82b35e5e176 100644 --- a/Mage.Client/release/sample-decks/2012/T2/[T2] Kangasu.dck +++ b/Mage.Client/release/sample-decks/2012/T2/[T2] Kangasu.dck @@ -10,7 +10,7 @@ NAME:[T2] Kangasu 4 [ISD:122] Unburial Rites 3 [RTR:148] Centaur Healer 1 [AVR:106] Griselbrand -3 [STH:60] Mulch +3 [STH:110] Mulch 1 [M13:159] Acidic Slime 1 [AVR:229] Slayers' Stronghold 1 [ISD:196] Mulch diff --git a/Mage.Client/release/sample-decks/2012/T2/[T2] Samite Healer.dck b/Mage.Client/release/sample-decks/2012/T2/[T2] Samite Healer.dck index 71c04467d9a..e052145c99e 100644 --- a/Mage.Client/release/sample-decks/2012/T2/[T2] Samite Healer.dck +++ b/Mage.Client/release/sample-decks/2012/T2/[T2] Samite Healer.dck @@ -10,7 +10,7 @@ NAME:[T2] Samite Healer 4 [M13:193] Thragtusk 2 [M13:228] Rootbound Crag 4 [ISD:122] Unburial Rites -2 [STH:60] Mulch +2 [STH:110] Mulch 2 [ISD:196] Mulch 2 [M11:227] Rootbound Crag 1 [RAV:284] Temple Garden diff --git a/Mage.Client/release/sample-decks/2012/T2/[T2] dhouse.dck b/Mage.Client/release/sample-decks/2012/T2/[T2] dhouse.dck index d3bb9377b61..3174d9819a5 100644 --- a/Mage.Client/release/sample-decks/2012/T2/[T2] dhouse.dck +++ b/Mage.Client/release/sample-decks/2012/T2/[T2] dhouse.dck @@ -12,10 +12,10 @@ NAME:[T2] dhouse 2 [AVR:32] Restoration Angel 2 [M12:229] Sunpetal Grove 1 [MMQ:348] Forest -1 [4ED:177] Forest +1 [4ED:376] Forest 4 [M13:193] Thragtusk 4 [ISD:122] Unburial Rites -2 [STH:60] Mulch +2 [STH:110] Mulch 2 [ISD:196] Mulch 1 [10E:375] Swamp 3 [RAV:284] Temple Garden diff --git a/Mage.Client/release/sample-decks/2012/T2/[T2] puddingtime.dck b/Mage.Client/release/sample-decks/2012/T2/[T2] puddingtime.dck index c3b6d9898fb..6676109bfe9 100644 --- a/Mage.Client/release/sample-decks/2012/T2/[T2] puddingtime.dck +++ b/Mage.Client/release/sample-decks/2012/T2/[T2] puddingtime.dck @@ -2,7 +2,7 @@ NAME:[T2] puddingtime 4 [ISD:170] Avacyn's Pilgrim 1 [6ED:347] Forest 3 [ULG:110] Rancor -1 [4ED:188] Plains +1 [4ED:364] Plains 2 [ISD:239] Gavony Township 1 [MMQ:350] Forest 3 [AVR:206] Wolfir Silverheart @@ -17,7 +17,7 @@ NAME:[T2] puddingtime 3 [M13:193] Thragtusk 3 [AVR:36] Silverblade Paladin 1 [RAV:303] Forest -1 [ZEN:252] Plains +1 [ZEN:230a] Plains 1 [9ED:349] Forest 1 [M11:248] Forest 1 [WWK:95] Arbor Elf diff --git a/Mage.Client/release/sample-decks/2012/T2/[T2] sknbny.dck b/Mage.Client/release/sample-decks/2012/T2/[T2] sknbny.dck index 5a9bfa8e759..bbd2f754cfa 100644 --- a/Mage.Client/release/sample-decks/2012/T2/[T2] sknbny.dck +++ b/Mage.Client/release/sample-decks/2012/T2/[T2] sknbny.dck @@ -3,7 +3,7 @@ NAME:[T2] sknbny 3 [ISD:249] Woodland Cemetery 1 [ULG:110] Rancor 2 [ISD:239] Gavony Township -1 [5ED:436] Plains +1 [5ED:430] Plains 1 [M11:228] Sunpetal Grove 1 [RTR:1] Angel of Serenity 4 [RTR:178] Loxodon Smiter @@ -17,7 +17,7 @@ NAME:[T2] sknbny 3 [M13:193] Thragtusk 2 [RTR:208] Vraska the Unseen 1 [RTR:141] Abrupt Decay -1 [ZEN:266] Forest +1 [ZEN:246a] Forest 3 [AVR:36] Silverblade Paladin 2 [RAV:284] Temple Garden 3 [RTR:194] Selesnya Charm diff --git a/Mage.Client/release/sample-decks/2013/Legacy/Tim Wilson's Nic Fit.dck b/Mage.Client/release/sample-decks/2013/Legacy/Tim Wilson's Nic Fit.dck index 560689f930d..2ed9875dce9 100644 --- a/Mage.Client/release/sample-decks/2013/Legacy/Tim Wilson's Nic Fit.dck +++ b/Mage.Client/release/sample-decks/2013/Legacy/Tim Wilson's Nic Fit.dck @@ -1,7 +1,7 @@ NAME:Tim Wilson's Nic Fit 1 [MBS:92] Thrun, the Last Troll 4 [CMD:131] Punishing Fire -1 [3ED:302] Taiga +1 [3ED:287] Taiga 4 [ZEN:229] Verdant Catacombs 2 [RTR:265] Mountain 1 [M12:188] Primeval Titan @@ -29,7 +29,7 @@ NAME:Tim Wilson's Nic Fit 4 [MBS:81] Green Sun's Zenith SB: 2 [LRW:145] Thoughtseize SB: 3 [USG:240] Carpet of Flowers -SB: 3 [4ED:236] Red Elemental Blast +SB: 3 [4ED:218] Red Elemental Blast SB: 2 [ZEN:57] Mindbreak Trap SB: 2 [RTR:197] Slaughter Games SB: 3 [NPH:74] Surgical Extraction diff --git a/Mage.Client/release/sample-decks/2013/Modern/DailyMTG/Krond - Clothes in a Bag.dck b/Mage.Client/release/sample-decks/2013/Modern/DailyMTG/Krond - Clothes in a Bag.dck index 5e5d8f8e1ed..278aea78dde 100644 --- a/Mage.Client/release/sample-decks/2013/Modern/DailyMTG/Krond - Clothes in a Bag.dck +++ b/Mage.Client/release/sample-decks/2013/Modern/DailyMTG/Krond - Clothes in a Bag.dck @@ -22,10 +22,10 @@ NAME:Krond — Clothes in a Bag 2 [ARB:75] Qasali Pridemage 1 [UDS:143] Yavimaya Hollow 3 [PC2:99] Krond the Dawn-Clad -1 [TMP:218] Auratog +1 [TMP:6] Auratog 3 [AVR:194] Somberwald Sage 6 [AVR:230] Plains 1 [INV:229] Armadillo Cloak 1 [LRW:248] Gaddock Teeg -1 [NMS:18] Seal of Cleansing +1 [NEM:18] Seal of Cleansing 1 [DIS:7] Celestial Ancient diff --git a/Mage.Client/release/sample-decks/2013/Modern/GP Kansas City/Jonathan Riddell's Melira Pod.dck b/Mage.Client/release/sample-decks/2013/Modern/GP Kansas City/Jonathan Riddell's Melira Pod.dck index 64d377f7f6a..07828c69fed 100644 --- a/Mage.Client/release/sample-decks/2013/Modern/GP Kansas City/Jonathan Riddell's Melira Pod.dck +++ b/Mage.Client/release/sample-decks/2013/Modern/GP Kansas City/Jonathan Riddell's Melira Pod.dck @@ -20,7 +20,7 @@ NAME:Jonathan Riddell's Melira Pod 1 [GPT:124] Orzhov Pontiff 1 [ARB:75] Qasali Pridemage 3 [RAV:156] Chord of Calling -1 [MIR:151] Wall of Roots +1 [MIR:253] Wall of Roots 1 [ZEN:219] Marsh Flats 1 [NPH:159] Spellskite 1 [CMD:152] Eternal Witness diff --git a/Mage.Client/release/sample-decks/2013/Modern/GP Kansas City/Josh Inoa's UWR Splinter Twin.dck b/Mage.Client/release/sample-decks/2013/Modern/GP Kansas City/Josh Inoa's UWR Splinter Twin.dck index 65a5c678bc5..97ad4d8889e 100644 --- a/Mage.Client/release/sample-decks/2013/Modern/GP Kansas City/Josh Inoa's UWR Splinter Twin.dck +++ b/Mage.Client/release/sample-decks/2013/Modern/GP Kansas City/Josh Inoa's UWR Splinter Twin.dck @@ -13,7 +13,7 @@ NAME:Josh Inoa's UWR Splinter Twin 2 [AVR:233] Island 1 [NPH:159] Spellskite 3 [RAV:63] Remand -4 [4ED:226] Lightning Bolt +4 [4ED:208] Lightning Bolt 2 [CHK:175] Kiki-Jiki, Mirror Breaker 1 [AVR:230] Plains 2 [DIS:174] Hallowed Fountain diff --git a/Mage.Client/release/sample-decks/2013/Modern/GP Kansas City/Louis Kaplan's Kiki-Jiki Pod.dck b/Mage.Client/release/sample-decks/2013/Modern/GP Kansas City/Louis Kaplan's Kiki-Jiki Pod.dck index c4cd756d581..444f7099474 100644 --- a/Mage.Client/release/sample-decks/2013/Modern/GP Kansas City/Louis Kaplan's Kiki-Jiki Pod.dck +++ b/Mage.Client/release/sample-decks/2013/Modern/GP Kansas City/Louis Kaplan's Kiki-Jiki Pod.dck @@ -24,7 +24,7 @@ NAME:Louis Kaplan's Kiki-Jiki Pod 1 [GTC:247] Stomping Ground 1 [GTC:245] Sacred Foundry 3 [RAV:156] Chord of Calling -4 [MIR:151] Wall of Roots +4 [MIR:253] Wall of Roots 1 [NPH:159] Spellskite 1 [CMD:152] Eternal Witness 2 [SHM:271] Fire-Lit Thicket diff --git a/Mage.Client/release/sample-decks/2013/Modern/GP Kansas City/Noah Whinston's Splinter Twin.dck b/Mage.Client/release/sample-decks/2013/Modern/GP Kansas City/Noah Whinston's Splinter Twin.dck index 93ed447ed1c..57aeeb128b4 100644 --- a/Mage.Client/release/sample-decks/2013/Modern/GP Kansas City/Noah Whinston's Splinter Twin.dck +++ b/Mage.Client/release/sample-decks/2013/Modern/GP Kansas City/Noah Whinston's Splinter Twin.dck @@ -11,7 +11,7 @@ NAME:Noah Whinston's Splinter Twin 3 [NPH:159] Spellskite 4 [5DN:36] Serum Visions 4 [RAV:63] Remand -3 [4ED:226] Lightning Bolt +3 [4ED:208] Lightning Bolt 2 [CHK:175] Kiki-Jiki, Mirror Breaker 3 [GPT:164] Steam Vents 4 [ZEN:223] Scalding Tarn diff --git a/Mage.Client/release/sample-decks/2013/Modern/GP Kansas City/Steven Locke's Domain Zoo.dck b/Mage.Client/release/sample-decks/2013/Modern/GP Kansas City/Steven Locke's Domain Zoo.dck index f76f181e9af..09dfbb537f7 100644 --- a/Mage.Client/release/sample-decks/2013/Modern/GP Kansas City/Steven Locke's Domain Zoo.dck +++ b/Mage.Client/release/sample-decks/2013/Modern/GP Kansas City/Steven Locke's Domain Zoo.dck @@ -13,19 +13,19 @@ NAME:Steven Locke's Domain Zoo 1 [ZEN:219] Marsh Flats 1 [RAV:284] Temple Garden 4 [FUT:153] Tarmogoyf -4 [4ED:226] Lightning Bolt +4 [4ED:208] Lightning Bolt 4 [GTC:119] Experiment One 1 [AVR:230] Plains 1 [DIS:174] Hallowed Fountain 1 [GPT:164] Steam Vents 2 [ZEN:223] Scalding Tarn -4 [ARN:49] Kird Ape +4 [ARN:40] Kird Ape 2 [CMD:25] Path to Exile 4 [WWK:13] Loam Lion 2 [ZEN:229] Verdant Catacombs SB: 4 [LRW:145] Thoughtseize SB: 1 [GTC:167] Ghor-Clan Rampager -SB: 1 [ATQ:93] Shatterstorm +SB: 1 [ATQ:28] Shatterstorm SB: 2 [ISD:36] Stony Silence SB: 2 [MMA:190] Kitchen Finks SB: 1 [DDF:1] Elspeth, Knight-Errant diff --git a/Mage.Client/release/sample-decks/2013/Modern/Gamma_Frog's Raka Tempo.dck b/Mage.Client/release/sample-decks/2013/Modern/Gamma_Frog's Raka Tempo.dck index 0477a50df94..5953730fd7a 100644 --- a/Mage.Client/release/sample-decks/2013/Modern/Gamma_Frog's Raka Tempo.dck +++ b/Mage.Client/release/sample-decks/2013/Modern/Gamma_Frog's Raka Tempo.dck @@ -7,15 +7,15 @@ NAME:Gamma_Frog's Raka Tempo 1 [DIS:174] Hallowed Fountain 3 [ISD:213] Geist of Saint Traft 4 [ISD:78] Snapcaster Mage -1 [4ED:226] Lightning Bolt -1 [MPR:40] Lightning Bolt +1 [4ED:208] Lightning Bolt +1 [M11:149] Lightning Bolt 1 [RTR:172] Izzet Charm 1 [RTR:247] Steam Vents 1 [GPT:164] Steam Vents -2 [3ED:161] Lightning Bolt -1 [MPR:8] Mana Leak +2 [3ED:162] Lightning Bolt +1 [M12:63] Mana Leak 1 [STH:36] Mana Leak -2 [MPR:16] Lightning Helix +2 [RAV:213] Lightning Helix 2 [M11:62] Mana Leak 4 [ZEN:223] Scalding Tarn 1 [ZEN:242] Mountain @@ -39,4 +39,4 @@ SB: 3 [MRD:101] Molten Rain SB: 1 [M12:40] Timely Reinforcements SB: 1 [M12:11] Celestial Purge SB: 1 [M10:7] Celestial Purge -SB: 1 [ATQ:93] Shatterstorm +SB: 1 [ATQ:28] Shatterstorm diff --git a/Mage.Client/release/sample-decks/2013/Modern/New Mexico - Albuquerque/Brandon Remley's KikiPod 3rd Place.dck b/Mage.Client/release/sample-decks/2013/Modern/New Mexico - Albuquerque/Brandon Remley's KikiPod 3rd Place.dck index a5aa56acae1..fda88f02850 100644 --- a/Mage.Client/release/sample-decks/2013/Modern/New Mexico - Albuquerque/Brandon Remley's KikiPod 3rd Place.dck +++ b/Mage.Client/release/sample-decks/2013/Modern/New Mexico - Albuquerque/Brandon Remley's KikiPod 3rd Place.dck @@ -9,7 +9,7 @@ NAME:Brandon Remley 3rd Place 1 [SHM:192] Murderous Redcap 4 [CON:87] Noble Hierarch 3 [AVR:32] Restoration Angel -1 [5ED:142] Birds of Paradise +1 [5ED:280] Birds of Paradise 1 [RTR:247] Steam Vents 1 [M12:72] Phantasmal Image 1 [MMQ:348] Forest @@ -24,9 +24,9 @@ NAME:Brandon Remley 3rd Place 1 [GTC:247] Stomping Ground 2 [CHK:175] Kiki-Jiki, Mirror Breaker 1 [10E:252] Birds of Paradise -1 [2ED:95] Birds of Paradise +1 [2ED:187] Birds of Paradise 1 [TSP:240] Harmonic Sliver -1 [MIR:151] Wall of Roots +1 [MIR:253] Wall of Roots 1 [SOM:230] Plains 1 [DIS:172] Breeding Pool 3 [TSB:89] Wall of Roots @@ -48,4 +48,4 @@ SB: 1 [M12:128] Combust SB: 1 [M10:65] Negate SB: 1 [AVR:210] Sigarda, Host of Herons SB: 1 [ISD:127] Ancient Grudge -SB: 1 [ATQ:93] Shatterstorm +SB: 1 [ATQ:28] Shatterstorm diff --git a/Mage.Client/release/sample-decks/2013/Modern/New Mexico - Albuquerque/David Daniel's KikiPod 1st Place.dck b/Mage.Client/release/sample-decks/2013/Modern/New Mexico - Albuquerque/David Daniel's KikiPod 1st Place.dck index dc60ade68ca..541be46efac 100644 --- a/Mage.Client/release/sample-decks/2013/Modern/New Mexico - Albuquerque/David Daniel's KikiPod 1st Place.dck +++ b/Mage.Client/release/sample-decks/2013/Modern/New Mexico - Albuquerque/David Daniel's KikiPod 1st Place.dck @@ -6,13 +6,13 @@ NAME:David Daniel (1st place) 1 [DIS:174] Hallowed Fountain 1 [NPH:33] Deceiver Exarch 3 [RAV:156] Chord of Calling -2 [4ED:118] Birds of Paradise +2 [4ED:234] Birds of Paradise 2 [SHM:271] Fire-Lit Thicket 1 [SHM:192] Murderous Redcap 4 [CON:87] Noble Hierarch 3 [AVR:32] Restoration Angel 1 [RTR:247] Steam Vents -1 [3ED:94] Birds of Paradise +1 [3ED:187] Birds of Paradise 1 [M12:72] Phantasmal Image 1 [ARB:75] Qasali Pridemage 4 [NPH:104] Birthing Pod @@ -25,13 +25,13 @@ NAME:David Daniel (1st place) 1 [RAV:280] Sacred Foundry 1 [GTC:247] Stomping Ground 3 [CHK:175] Kiki-Jiki, Mirror Breaker -1 [2ED:95] Birds of Paradise +1 [2ED:187] Birds of Paradise 1 [TSP:240] Harmonic Sliver -2 [MIR:151] Wall of Roots +2 [MIR:253] Wall of Roots 2 [TSB:89] Wall of Roots 1 [RTR:248] Temple Garden 1 [INV:334] Plains -1 [4ED:183] Mountain +1 [4ED:373] Mountain 3 [ZEN:220] Misty Rainforest 3 [ZEN:211] Arid Mesa 1 [AVR:166] Zealous Conscripts diff --git a/Mage.Client/release/sample-decks/2013/Modern/New Mexico - Albuquerque/Donald Richter 2nd Place (GWB).dck b/Mage.Client/release/sample-decks/2013/Modern/New Mexico - Albuquerque/Donald Richter 2nd Place (GWB).dck index 3f9cdc75ea5..58e8cf41c5b 100644 --- a/Mage.Client/release/sample-decks/2013/Modern/New Mexico - Albuquerque/Donald Richter 2nd Place (GWB).dck +++ b/Mage.Client/release/sample-decks/2013/Modern/New Mexico - Albuquerque/Donald Richter 2nd Place (GWB).dck @@ -1,6 +1,6 @@ NAME:Donald Richter 2nd Place 3 [TSP:204] Might of Old Krosa -1 [LEG:250] Pendelhaven +1 [LEG:305] Pendelhaven 3 [ULG:110] Rancor 4 [WWK:104] Groundswell 2 [RTR:141] Abrupt Decay @@ -14,7 +14,7 @@ NAME:Donald Richter 2nd Place 4 [NPH:29] Blighted Agent 1 [7ED:335] Island 4 [SOM:75] Plague Stinger -1 [ZEN:268] Forest +1 [ZEN:246a] Forest 4 [ZEN:220] Misty Rainforest 1 [SOM:241] Swamp 4 [ZEN:193] Vines of Vastwood diff --git a/Mage.Client/release/sample-decks/2013/Modern/New Mexico - Albuquerque/Joseph Cardoza's Meerfolk 4th Place.dck b/Mage.Client/release/sample-decks/2013/Modern/New Mexico - Albuquerque/Joseph Cardoza's Meerfolk 4th Place.dck index 40657d41e0f..f979f3350c2 100644 --- a/Mage.Client/release/sample-decks/2013/Modern/New Mexico - Albuquerque/Joseph Cardoza's Meerfolk 4th Place.dck +++ b/Mage.Client/release/sample-decks/2013/Modern/New Mexico - Albuquerque/Joseph Cardoza's Meerfolk 4th Place.dck @@ -6,7 +6,7 @@ NAME:Joseph Cardoza 4th Place 1 [4ED:82] Lord of Atlantis 4 [LRW:74] Merrow Reejerey 1 [7ED:333] Island -1 [ICE:336] Island +1 [ICE:368] Island 2 [2ED:63] Lord of Atlantis 2 [M10:62] Merfolk Sovereign 4 [M12:72] Phantasmal Image @@ -17,7 +17,7 @@ NAME:Joseph Cardoza 4th Place 4 [EVE:31] Wake Thrasher 1 [6ED:79] Lord of Atlantis 1 [MRD:291] Island -1 [ZEN:256] Island +1 [ZEN:234a] Island 1 [9ED:335] Island 4 [M13:59] Master of the Pearl Trident 1 [MMQ:336] Island diff --git a/Mage.Client/release/sample-decks/2013/Modern/Zoizaite's Splinter Twin.dck b/Mage.Client/release/sample-decks/2013/Modern/Zoizaite's Splinter Twin.dck index 1032bafc5b4..67bb897c5cf 100644 --- a/Mage.Client/release/sample-decks/2013/Modern/Zoizaite's Splinter Twin.dck +++ b/Mage.Client/release/sample-decks/2013/Modern/Zoizaite's Splinter Twin.dck @@ -20,7 +20,7 @@ NAME:Zoizaite's Splinter Twin 2 [CHK:175] Kiki-Jiki, Mirror Breaker 1 [M13:234] Island 3 [LRW:78] Pestermite -1 [4ED:178] Island +1 [4ED:367] Island 3 [RAV:63] Remand 4 [ZEN:220] Misty Rainforest 1 [ZEN:211] Arid Mesa diff --git a/Mage.Client/release/sample-decks/2013/Modern/_Blaze777_'s RG Tron.dck b/Mage.Client/release/sample-decks/2013/Modern/_Blaze777_'s RG Tron.dck index 7ff7723638d..21fb9dc8a8c 100644 --- a/Mage.Client/release/sample-decks/2013/Modern/_Blaze777_'s RG Tron.dck +++ b/Mage.Client/release/sample-decks/2013/Modern/_Blaze777_'s RG Tron.dck @@ -18,7 +18,7 @@ NAME:_Blaze777_'s RG Tron 2 [SOM:176] Mindslaver 4 [NPH:1] Karn Liberated 1 [10E:380] Forest -1 [ATQ:75] Urza's Mine +1 [ATQ:83a] Urza's Mine 4 [FUT:176] Grove of the Burnwillows 4 [ROE:174] Ancient Stirrings 3 [MRD:222] Oblivion Stone diff --git a/Mage.Client/release/sample-decks/2013/Modern/____czery's Kiki-Jiki Pod.dck b/Mage.Client/release/sample-decks/2013/Modern/____czery's Kiki-Jiki Pod.dck index 97fa7ba447d..cb6847fa5af 100644 --- a/Mage.Client/release/sample-decks/2013/Modern/____czery's Kiki-Jiki Pod.dck +++ b/Mage.Client/release/sample-decks/2013/Modern/____czery's Kiki-Jiki Pod.dck @@ -6,17 +6,17 @@ NAME:____czery's Kiki-Jiki Pod 1 [DIS:174] Hallowed Fountain 3 [ISD:213] Geist of Saint Traft 4 [ISD:78] Snapcaster Mage -1 [4ED:226] Lightning Bolt +1 [4ED:208] Lightning Bolt 1 [M11:149] Lightning Bolt 1 [RTR:172] Izzet Charm 1 [RTR:247] Steam Vents 1 [GPT:164] Steam Vents 1 [M12:145] Grim Lavamancer -1 [3ED:161] Lightning Bolt -1 [LEB:163] Lightning Bolt -1 [MPR:8] Mana Leak +1 [3ED:162] Lightning Bolt +1 [LEB:162] Lightning Bolt +1 [M12:63] Mana Leak 1 [STH:36] Mana Leak -2 [MPR:16] Lightning Helix +2 [RAV:213] Lightning Helix 1 [M11:62] Mana Leak 4 [ZEN:223] Scalding Tarn 1 [M12:63] Mana Leak @@ -36,7 +36,7 @@ SB: 1 [MOR:55] Vendilion Clique SB: 2 [NPH:159] Spellskite SB: 2 [ISD:36] Stony Silence SB: 2 [ALA:218] Relic of Progenitus -SB: 1 [MPR:45] Celestial Purge +SB: 1 [M12:11] Celestial Purge SB: 1 [HOP:124] Relic of Progenitus SB: 3 [MRD:101] Molten Rain SB: 1 [M12:40] Timely Reinforcements diff --git a/Mage.Client/release/sample-decks/2013/Modern/max115's Spirit Jund.dck b/Mage.Client/release/sample-decks/2013/Modern/max115's Spirit Jund.dck index a511520d580..4c903662c39 100644 --- a/Mage.Client/release/sample-decks/2013/Modern/max115's Spirit Jund.dck +++ b/Mage.Client/release/sample-decks/2013/Modern/max115's Spirit Jund.dck @@ -1,7 +1,7 @@ NAME:max115's Spirit Jund 3 [ISD:105] Liliana of the Veil -2 [4ED:226] Lightning Bolt -1 [MPR:40] Lightning Bolt +2 [4ED:208] Lightning Bolt +1 [M11:149] Lightning Bolt 1 [ISD:215] Olivia Voldaren 4 [ZEN:229] Verdant Catacombs 1 [ARB:92] Maelstrom Pulse @@ -12,8 +12,8 @@ NAME:max115's Spirit Jund 1 [9ED:341] Swamp 2 [PLS:128] Terminate 1 [SHM:229] Kitchen Finks -1 [MPR:39] Terminate -1 [ZEN:266] Forest +1 [ARB:46] Terminate +1 [ZEN:246a] Forest 3 [ROE:115] Inquisition of Kozilek 4 [RTR:213] Deathrite Shaman 4 [FUT:153] Tarmogoyf @@ -23,7 +23,7 @@ NAME:max115's Spirit Jund 2 [ULG:143] Treetop Village 4 [ZEN:219] Marsh Flats 1 [GTC:247] Stomping Ground -1 [LEA:162] Lightning Bolt +1 [LEA:161] Lightning Bolt 2 [LRW:145] Thoughtseize 4 [RAV:81] Dark Confidant 1 [RTR:243] Overgrown Tomb @@ -37,5 +37,5 @@ SB: 2 [RTR:141] Abrupt Decay SB: 1 [ISD:105] Liliana of the Veil SB: 2 [RTR:197] Slaughter Games SB: 1 [SHM:229] Kitchen Finks -SB: 1 [ATQ:93] Shatterstorm +SB: 1 [ATQ:28] Shatterstorm SB: 1 [ISD:127] Ancient Grudge diff --git a/Mage.Client/release/sample-decks/2013/Modern/optimus's Tribal Zoo.dck b/Mage.Client/release/sample-decks/2013/Modern/optimus's Tribal Zoo.dck index 91609a486c4..143ed7e2cb2 100644 --- a/Mage.Client/release/sample-decks/2013/Modern/optimus's Tribal Zoo.dck +++ b/Mage.Client/release/sample-decks/2013/Modern/optimus's Tribal Zoo.dck @@ -8,10 +8,10 @@ NAME:optimus's Tribal Zoo 4 [ISD:213] Geist of Saint Traft 3 [ISD:78] Snapcaster Mage 3 [INV:176] Tribal Flames -1 [MPR:40] Lightning Bolt +1 [M11:149] Lightning Bolt 1 [RTR:247] Steam Vents -1 [LEB:163] Lightning Bolt -1 [MPR:16] Lightning Helix +1 [LEB:162] Lightning Bolt +1 [RAV:213] Lightning Helix 4 [ZEN:223] Scalding Tarn 1 [GTC:240] Breeding Pool 4 [RTR:213] Deathrite Shaman @@ -23,7 +23,7 @@ NAME:optimus's Tribal Zoo 4 [ZEN:36] Steppe Lynx 2 [GTC:148] Boros Charm 4 [ZEN:220] Misty Rainforest -1 [MIR:295] Forest +1 [MIR:347] Forest 4 [ZEN:211] Arid Mesa 1 [RTR:238] Blood Crypt 1 [RTR:252] Plains diff --git a/Mage.Client/release/sample-decks/2013/Standard/DailyMTG ReConstructed/Darryl Hoard's Bottoms Up.dck b/Mage.Client/release/sample-decks/2013/Standard/DailyMTG ReConstructed/Darryl Hoard's Bottoms Up.dck index e7f15b40841..9e86cbc24da 100644 --- a/Mage.Client/release/sample-decks/2013/Standard/DailyMTG ReConstructed/Darryl Hoard's Bottoms Up.dck +++ b/Mage.Client/release/sample-decks/2013/Standard/DailyMTG ReConstructed/Darryl Hoard's Bottoms Up.dck @@ -9,7 +9,7 @@ NAME:Darryl Hoard's Bottoms Up 4 [M14:246] Forest 4 [M13:2] Ajani's Sunstriker 2 [M14:1] Ajani, Caller of the Pride -4 [DKA:146] Chalice of Death +4 [DKA:146] Chalice of Life 4 [M14:209] Elixir of Immortality 4 [M13:229] Sunpetal Grove 3 [M14:26] Path of Bravery diff --git a/Mage.Client/release/sample-decks/2013/Standard/DailyMTG Reconstructed - Sliving the good Life/Douglas Scheinberg's Seance Combo.dck b/Mage.Client/release/sample-decks/2013/Standard/DailyMTG Reconstructed - Sliving the good Life/Douglas Scheinberg's Seance Combo.dck index a11ea95c633..0cc56d539a8 100644 --- a/Mage.Client/release/sample-decks/2013/Standard/DailyMTG Reconstructed - Sliving the good Life/Douglas Scheinberg's Seance Combo.dck +++ b/Mage.Client/release/sample-decks/2013/Standard/DailyMTG Reconstructed - Sliving the good Life/Douglas Scheinberg's Seance Combo.dck @@ -1,4 +1,3 @@ -NAME:Douglas Scheinberg's Séance Combo 1 [AVR:42] Alchemist's Apprentice 4 [RTR:1] Angel of Serenity 1 [ISD:68] Mirror-Mad Phantasm diff --git a/Mage.Client/release/sample-decks/2013/Standard/DailyMTG with M14/Disciple of Innistrad's Angelic Post.dck b/Mage.Client/release/sample-decks/2013/Standard/DailyMTG with M14/Disciple of Innistrad's Angelic Post.dck index 1fea3178ec4..8fab4e2bbd8 100644 --- a/Mage.Client/release/sample-decks/2013/Standard/DailyMTG with M14/Disciple of Innistrad's Angelic Post.dck +++ b/Mage.Client/release/sample-decks/2013/Standard/DailyMTG with M14/Disciple of Innistrad's Angelic Post.dck @@ -13,7 +13,7 @@ NAME:Disciple of Innistrad's Angelic Post 1 [AVR:94] Demonic Rising 3 [AVR:220] Scroll of Avacyn 2 [M14:215] Ratchet Bomb -1 [DKA:146] Chalice of Death +1 [DKA:146] Chalice of Life 2 [AVR:230] Plains 1 [DKA:158] Vault of the Archangel 4 [AVR:38] Terminus diff --git a/Mage.Client/release/sample-decks/2013/Standard/GP Guadalajara (May 26)/Emmanuel Ramirez's Reanimator.dck b/Mage.Client/release/sample-decks/2013/Standard/GP Guadalajara (May 26)/Emmanuel Ramirez's Reanimator.dck index c8bf400e7de..196813996fd 100644 --- a/Mage.Client/release/sample-decks/2013/Standard/GP Guadalajara (May 26)/Emmanuel Ramirez's Reanimator.dck +++ b/Mage.Client/release/sample-decks/2013/Standard/GP Guadalajara (May 26)/Emmanuel Ramirez's Reanimator.dck @@ -1,4 +1,3 @@ -NAME:Emmanuel Ramírez's Reanimator 4 [ISD:170] Avacyn's Pilgrim 2 [ISD:249] Woodland Cemetery 3 [M13:159] Acidic Slime diff --git a/Mage.Client/release/sample-decks/2013/Standard/GP Quebec City/Frederic Mercier's Esper Control.dck b/Mage.Client/release/sample-decks/2013/Standard/GP Quebec City/Frederic Mercier's Esper Control.dck index 70622a3155f..5f12d980745 100644 --- a/Mage.Client/release/sample-decks/2013/Standard/GP Quebec City/Frederic Mercier's Esper Control.dck +++ b/Mage.Client/release/sample-decks/2013/Standard/GP Quebec City/Frederic Mercier's Esper Control.dck @@ -1,4 +1,3 @@ -NAME:Frédéric Mercier's Esper Control 2 [M13:26] Planar Cleansing 1 [RTR:250] Plains 4 [M13:225] Glacial Fortress diff --git a/Mage.Client/release/sample-decks/2013/Standard/GP Verona/Jeremy Dezani's Jund Midrange.dck b/Mage.Client/release/sample-decks/2013/Standard/GP Verona/Jeremy Dezani's Jund Midrange.dck index e5e32ee185a..280f8d1860c 100644 --- a/Mage.Client/release/sample-decks/2013/Standard/GP Verona/Jeremy Dezani's Jund Midrange.dck +++ b/Mage.Client/release/sample-decks/2013/Standard/GP Verona/Jeremy Dezani's Jund Midrange.dck @@ -1,4 +1,3 @@ -NAME:Jérémy Dezani's Jund Midrange 4 [M13:170] Farseek 3 [AVR:129] Bonfire of the Damned 1 [DKA:76] Tragic Slip diff --git a/Mage.Client/release/sample-decks/2014/Legacy/Championship Philadelpia/Anthony Loman's Reanimator.dck b/Mage.Client/release/sample-decks/2014/Legacy/Championship Philadelpia/Anthony Loman's Reanimator.dck index 2e290b74ee7..3ff18ad5802 100644 --- a/Mage.Client/release/sample-decks/2014/Legacy/Championship Philadelpia/Anthony Loman's Reanimator.dck +++ b/Mage.Client/release/sample-decks/2014/Legacy/Championship Philadelpia/Anthony Loman's Reanimator.dck @@ -21,8 +21,8 @@ NAME:Anthony Loman's Reanimator 1 [CNS:102] Misdirection 1 [KTK:258] Swamp 4 [VMA:136] Reanimate -4 [TMP:284] Lotus Petal -SB: 1 [NMS:58] Massacre +4 [TMP:294] Lotus Petal +SB: 1 [NEM:58] Massacre SB: 1 [RTR:231] Pithing Needle SB: 3 [M14:97] Duress SB: 1 [EXO:143] City of Traitors diff --git a/Mage.Client/release/sample-decks/2014/Legacy/Championship Philadelpia/Derek Reda's Esper Deathblade.dck b/Mage.Client/release/sample-decks/2014/Legacy/Championship Philadelpia/Derek Reda's Esper Deathblade.dck index 0c708187ff4..110e61d085a 100644 --- a/Mage.Client/release/sample-decks/2014/Legacy/Championship Philadelpia/Derek Reda's Esper Deathblade.dck +++ b/Mage.Client/release/sample-decks/2014/Legacy/Championship Philadelpia/Derek Reda's Esper Deathblade.dck @@ -1,5 +1,5 @@ NAME:Derek Reda's Esper Deathblade -2 [TMP:340] Wasteland +2 [TMP:330] Wasteland 3 [C13:63] True-Name Nemesis 4 [KTK:239] Polluted Delta 1 [NPH:130] Batterskull @@ -12,7 +12,7 @@ NAME:Derek Reda's Esper Deathblade 4 [VMA:69] Force of Will 3 [ZEN:219] Marsh Flats 1 [VMA:321] Tropical Island -1 [LEG:248] Karakas +1 [LEG:303] Karakas 3 [VMA:322] Tundra 3 [VMA:323] Underground Sea 4 [RTR:213] Deathrite Shaman @@ -23,12 +23,12 @@ NAME:Derek Reda's Esper Deathblade 3 [M12:73] Ponder 1 [ISD:105] Liliana of the Veil SB: 1 [ZEN:67] Spell Pierce -SB: 1 [TMP:340] Wasteland +SB: 1 [TMP:330] Wasteland SB: 2 [VMA:68] Flusterstorm SB: 1 [NPH:74] Surgical Extraction SB: 1 [RTR:231] Pithing Needle SB: 1 [VMA:321] Tropical Island -SB: 1 [LEG:248] Karakas +SB: 1 [LEG:303] Karakas SB: 1 [MMA:204] Engineered Explosives SB: 1 [ZEN:87] Disfigure SB: 1 [VMA:313] Scrubland diff --git a/Mage.Client/release/sample-decks/2014/Legacy/Championship Philadelpia/Eric De Luca's Sultai Delver.dck b/Mage.Client/release/sample-decks/2014/Legacy/Championship Philadelpia/Eric De Luca's Sultai Delver.dck index 412374508ed..5f8b9fe5121 100644 --- a/Mage.Client/release/sample-decks/2014/Legacy/Championship Philadelpia/Eric De Luca's Sultai Delver.dck +++ b/Mage.Client/release/sample-decks/2014/Legacy/Championship Philadelpia/Eric De Luca's Sultai Delver.dck @@ -1,5 +1,5 @@ NAME:Eric De Luca's Sultai Delver -4 [TMP:340] Wasteland +4 [TMP:330] Wasteland 2 [C13:63] True-Name Nemesis 1 [MMA:180] Maelstrom Pulse 4 [ZEN:220] Misty Rainforest diff --git a/Mage.Client/release/sample-decks/2014/Legacy/Championship Philadelpia/Eric Markowicz's Jeskai Delver.dck b/Mage.Client/release/sample-decks/2014/Legacy/Championship Philadelpia/Eric Markowicz's Jeskai Delver.dck index d0f3ec711ed..c9fb1b29656 100644 --- a/Mage.Client/release/sample-decks/2014/Legacy/Championship Philadelpia/Eric Markowicz's Jeskai Delver.dck +++ b/Mage.Client/release/sample-decks/2014/Legacy/Championship Philadelpia/Eric Markowicz's Jeskai Delver.dck @@ -1,10 +1,10 @@ NAME:Eric Markowicz's Jeskai Delver -4 [TMP:340] Wasteland +4 [TMP:330] Wasteland 3 [C13:63] True-Name Nemesis 4 [M11:149] Lightning Bolt 4 [ZEN:220] Misty Rainforest 1 [NPH:130] Batterskull -2 [4ED:236] Red Elemental Blast +2 [4ED:218] Red Elemental Blast 1 [BOK:163] Umezawa's Jitte 2 [RTR:241] Hallowed Fountain 2 [KTK:59] Treasure Cruise @@ -23,7 +23,7 @@ NAME:Eric Markowicz's Jeskai Delver 3 [M12:73] Ponder 1 [MMA:64] Spell Snare SB: 1 [MBS:138] Sword of Feast and Famine -SB: 2 [NMS:48] Submerge +SB: 2 [NEM:48] Submerge SB: 2 [ARB:8] Meddling Mage SB: 2 [DGM:135] Wear // Tear SB: 3 [ROE:146] Forked Bolt diff --git a/Mage.Client/release/sample-decks/2014/Legacy/Championship Philadelpia/JD Nir's Ad Nauseam.dck b/Mage.Client/release/sample-decks/2014/Legacy/Championship Philadelpia/JD Nir's Ad Nauseam.dck index 18b88670650..46f3a4a0c6d 100644 --- a/Mage.Client/release/sample-decks/2014/Legacy/Championship Philadelpia/JD Nir's Ad Nauseam.dck +++ b/Mage.Client/release/sample-decks/2014/Legacy/Championship Philadelpia/JD Nir's Ad Nauseam.dck @@ -4,7 +4,7 @@ NAME:JD Nir's Ad Nauseam 4 [KTK:239] Polluted Delta 1 [CNS:114] Ill-Gotten Gains 1 [KTK:258] Swamp -4 [TMP:284] Lotus Petal +4 [TMP:294] Lotus Petal 4 [JUD:62] Cabal Therapy 4 [DIS:46] Infernal Tutor 1 [KTK:254] Island @@ -24,7 +24,7 @@ NAME:JD Nir's Ad Nauseam 4 [M12:73] Ponder SB: 2 [CHK:268] Sensei's Divining Top SB: 2 [VMA:68] Flusterstorm -SB: 1 [NMS:58] Massacre +SB: 1 [NEM:58] Massacre SB: 4 [RTR:141] Abrupt Decay SB: 3 [ONS:73] Chain of Vapor SB: 3 [SCG:135] Xantid Swarm diff --git a/Mage.Client/release/sample-decks/2014/Legacy/Championship Philadelpia/John Gatza's Lands.dck b/Mage.Client/release/sample-decks/2014/Legacy/Championship Philadelpia/John Gatza's Lands.dck index 50d9adc3723..b9f8b032e79 100644 --- a/Mage.Client/release/sample-decks/2014/Legacy/Championship Philadelpia/John Gatza's Lands.dck +++ b/Mage.Client/release/sample-decks/2014/Legacy/Championship Philadelpia/John Gatza's Lands.dck @@ -1,12 +1,12 @@ NAME:John Gatza's Lands -4 [TMP:340] Wasteland +4 [TMP:330] Wasteland 4 [CNS:164] Exploration 4 [MMQ:324] Rishadan Port -1 [ICE:331] Glacial Chasm +1 [ICE:353] Glacial Chasm 3 [CMD:131] Punishing Fire 4 [GTC:248] Thespian's Stage 2 [KTK:248] Windswept Heath -4 [STH:132] Mox Diamond +4 [STH:138] Mox Diamond 1 [KTK:249] Wooded Foothills 1 [FUT:177] Horizon Canopy 4 [FUT:176] Grove of the Burnwillows @@ -15,12 +15,12 @@ NAME:John Gatza's Lands 4 [MMA:153] Life from the Loam 1 [C13:278] Bojuka Bog 2 [VMA:317] Taiga -1 [LEG:248] Karakas +1 [LEG:303] Karakas 1 [ISD:240] Ghost Quarter -3 [DRK:114] Maze of Ith +3 [DRK:117] Maze of Ith 2 [CSP:145] Dark Depths 2 [VMA:320] Tranquil Thicket -1 [LEG:252] The Tabernacle at Pendrell Vale +1 [LEG:307] The Tabernacle at Pendrell Vale 4 [ULG:98] Crop Rotation 4 [VMA:162] Gamble SB: 1 [LRW:262] Thorn of Amethyst diff --git a/Mage.Client/release/sample-decks/2014/Legacy/Championship Philadelpia/John Grudzina's Jeskai Delver.dck b/Mage.Client/release/sample-decks/2014/Legacy/Championship Philadelpia/John Grudzina's Jeskai Delver.dck index 792393d69e4..21331a1a499 100644 --- a/Mage.Client/release/sample-decks/2014/Legacy/Championship Philadelpia/John Grudzina's Jeskai Delver.dck +++ b/Mage.Client/release/sample-decks/2014/Legacy/Championship Philadelpia/John Grudzina's Jeskai Delver.dck @@ -1,5 +1,5 @@ NAME:John Grudzina's Jeskai Delver -4 [TMP:340] Wasteland +4 [TMP:330] Wasteland 2 [C13:63] True-Name Nemesis 4 [M11:149] Lightning Bolt 4 [KTK:239] Polluted Delta @@ -25,6 +25,6 @@ SB: 1 [MMA:14] Ethersworn Canonist SB: 1 [MBS:138] Sword of Feast and Famine SB: 1 [VMA:74] Jace, the Mind Sculptor SB: 3 [ARB:8] Meddling Mage -SB: 3 [4ED:236] Red Elemental Blast +SB: 3 [4ED:218] Red Elemental Blast SB: 1 [DGM:135] Wear // Tear SB: 2 [RTR:18] Rest in Peace diff --git a/Mage.Client/release/sample-decks/2014/Legacy/Championship Philadelpia/Jon Goss's Esper Deathblade.dck b/Mage.Client/release/sample-decks/2014/Legacy/Championship Philadelpia/Jon Goss's Esper Deathblade.dck index 23c7c0a1c36..f7e3502345d 100644 --- a/Mage.Client/release/sample-decks/2014/Legacy/Championship Philadelpia/Jon Goss's Esper Deathblade.dck +++ b/Mage.Client/release/sample-decks/2014/Legacy/Championship Philadelpia/Jon Goss's Esper Deathblade.dck @@ -5,7 +5,7 @@ NAME:Jon Goss's Esper Deathblade 2 [ZEN:67] Spell Pierce 4 [VMA:58] Brainstorm 1 [VMA:321] Tropical Island -1 [LEG:248] Karakas +1 [LEG:303] Karakas 2 [VMA:322] Tundra 1 [ZEN:87] Disfigure 3 [VMA:323] Underground Sea @@ -14,7 +14,7 @@ NAME:Jon Goss's Esper Deathblade 4 [WWK:20] Stoneforge Mystic 3 [M12:73] Ponder 1 [ISD:105] Liliana of the Veil -2 [TMP:340] Wasteland +2 [TMP:330] Wasteland 3 [C13:63] True-Name Nemesis 4 [KTK:239] Polluted Delta 1 [NPH:130] Batterskull diff --git a/Mage.Client/release/sample-decks/2014/Legacy/Championship Philadelpia/Louis Fata's Death and Taxes.dck b/Mage.Client/release/sample-decks/2014/Legacy/Championship Philadelpia/Louis Fata's Death and Taxes.dck index 570258125fe..88f644ce998 100644 --- a/Mage.Client/release/sample-decks/2014/Legacy/Championship Philadelpia/Louis Fata's Death and Taxes.dck +++ b/Mage.Client/release/sample-decks/2014/Legacy/Championship Philadelpia/Louis Fata's Death and Taxes.dck @@ -1,6 +1,6 @@ NAME:Louis Fata's Death and Taxes 4 [C13:13] Flickerwisp -4 [TMP:340] Wasteland +4 [TMP:330] Wasteland 4 [MMQ:324] Rishadan Port 2 [BNG:5] Brimaz, King of Oreskos 2 [BNG:27] Spirit of the Labyrinth @@ -11,7 +11,7 @@ NAME:Louis Fata's Death and Taxes 4 [MMA:197] Aether Vial 3 [M15:225] Phyrexian Revoker 10 [KTK:250] Plains -3 [LEG:248] Karakas +3 [LEG:303] Karakas 1 [MMA:216] Sword of Fire and Ice 4 [VMA:51] Swords to Plowshares 4 [WWK:20] Stoneforge Mystic diff --git a/Mage.Client/release/sample-decks/2014/Legacy/Championship Philadelpia/Marc Bertolin's Temur Delver.dck b/Mage.Client/release/sample-decks/2014/Legacy/Championship Philadelpia/Marc Bertolin's Temur Delver.dck index 755927deb49..5567fddbbc2 100644 --- a/Mage.Client/release/sample-decks/2014/Legacy/Championship Philadelpia/Marc Bertolin's Temur Delver.dck +++ b/Mage.Client/release/sample-decks/2014/Legacy/Championship Philadelpia/Marc Bertolin's Temur Delver.dck @@ -1,5 +1,5 @@ NAME:Marc Bertolin's Temur Delver -4 [TMP:340] Wasteland +4 [TMP:330] Wasteland 4 [M11:149] Lightning Bolt 2 [KTK:249] Wooded Foothills 2 [ROE:146] Forked Bolt @@ -22,6 +22,6 @@ SB: 3 [VMA:68] Flusterstorm SB: 3 [NPH:74] Surgical Extraction SB: 3 [C13:153] Krosan Grip SB: 1 [5ED:262] Pyroblast -SB: 2 [4ED:236] Red Elemental Blast +SB: 2 [4ED:218] Red Elemental Blast SB: 1 [MMA:70] Vendilion Clique SB: 2 [BOK:163] Umezawa's Jitte diff --git a/Mage.Client/release/sample-decks/2014/Legacy/Championship Philadelpia/Michael Monks's Pox.dck b/Mage.Client/release/sample-decks/2014/Legacy/Championship Philadelpia/Michael Monks's Pox.dck index 25106084ad1..323b0ecd26c 100644 --- a/Mage.Client/release/sample-decks/2014/Legacy/Championship Philadelpia/Michael Monks's Pox.dck +++ b/Mage.Client/release/sample-decks/2014/Legacy/Championship Philadelpia/Michael Monks's Pox.dck @@ -1,5 +1,5 @@ NAME:Michael Monks's Pox -3 [TMP:340] Wasteland +3 [TMP:330] Wasteland 3 [CMD:131] Punishing Fire 3 [M11:149] Lightning Bolt 1 [MMA:180] Maelstrom Pulse @@ -25,7 +25,7 @@ NAME:Michael Monks's Pox SB: 1 [RTR:231] Pithing Needle SB: 2 [NPH:74] Surgical Extraction SB: 2 [DKA:149] Grafdigger's Cage -SB: 1 [LEG:5] Chains of Mephistopheles +SB: 1 [LEG:91] Chains of Mephistopheles SB: 2 [5ED:262] Pyroblast SB: 2 [M14:97] Duress SB: 1 [BOK:163] Umezawa's Jitte diff --git a/Mage.Client/release/sample-decks/2014/Legacy/Championship Philadelpia/Mike Midiri's Elves.dck b/Mage.Client/release/sample-decks/2014/Legacy/Championship Philadelpia/Mike Midiri's Elves.dck index fb2f478132a..63de5d6bde7 100644 --- a/Mage.Client/release/sample-decks/2014/Legacy/Championship Philadelpia/Mike Midiri's Elves.dck +++ b/Mage.Client/release/sample-decks/2014/Legacy/Championship Philadelpia/Mike Midiri's Elves.dck @@ -17,13 +17,13 @@ NAME:Mike Midiri's Elves 4 [USG:321] Gaea's Cradle 1 [SOM:119] Ezuri, Renegade Leader 4 [EVE:71] Nettle Sentinel -3 [POR:101] Natural Order +3 [POR:175] Natural Order 2 [VMA:293] Bayou -4 [VIS:67] Quirion Ranger +4 [VIS:117] Quirion Ranger SB: 1 [RTR:231] Pithing Needle SB: 1 [VMA:278] Null Rod SB: 1 [MMA:182] Progenitus -SB: 1 [POR:101] Natural Order +SB: 1 [POR:175] Natural Order SB: 3 [RTR:141] Abrupt Decay SB: 3 [THS:107] Thoughtseize SB: 1 [M14:195] Scavenging Ooze diff --git a/Mage.Client/release/sample-decks/2014/Legacy/Championship Philadelpia/Nate Sturm's Punishing Maverick.dck b/Mage.Client/release/sample-decks/2014/Legacy/Championship Philadelpia/Nate Sturm's Punishing Maverick.dck index 79c9406c7a6..80fb9f6063a 100644 --- a/Mage.Client/release/sample-decks/2014/Legacy/Championship Philadelpia/Nate Sturm's Punishing Maverick.dck +++ b/Mage.Client/release/sample-decks/2014/Legacy/Championship Philadelpia/Nate Sturm's Punishing Maverick.dck @@ -11,12 +11,12 @@ NAME:Nate Sturm's Punishing Maverick 1 [KTK:266] Forest 1 [FUT:174] Dryad Arbor 4 [MMA:178] Knight of the Reliquary -1 [LEG:248] Karakas -1 [DRK:114] Maze of Ith +1 [LEG:303] Karakas +1 [DRK:117] Maze of Ith 1 [LRW:248] Gaddock Teeg 4 [VMA:51] Swords to Plowshares 3 [WWK:20] Stoneforge Mystic -3 [TMP:340] Wasteland +3 [TMP:330] Wasteland 1 [NPH:130] Batterskull 1 [M14:195] Scavenging Ooze 1 [M12:165] Birds of Paradise @@ -34,8 +34,8 @@ SB: 1 [MMA:216] Sword of Fire and Ice SB: 1 [VMA:235] Sylvan Library SB: 1 [VMA:20] Council's Judgment SB: 1 [LRW:248] Gaddock Teeg -SB: 2 [4ED:236] Red Elemental Blast +SB: 2 [4ED:218] Red Elemental Blast SB: 1 [MBS:92] Thrun, the Last Troll -SB: 1 [LEG:252] The Tabernacle at Pendrell Vale +SB: 1 [LEG:307] The Tabernacle at Pendrell Vale SB: 1 [M14:195] Scavenging Ooze SB: 1 [MMA:153] Life from the Loam diff --git a/Mage.Client/release/sample-decks/2014/Legacy/Championship Philadelpia/Nicholas DiJohn's Miracles.dck b/Mage.Client/release/sample-decks/2014/Legacy/Championship Philadelpia/Nicholas DiJohn's Miracles.dck index cb882bdacf4..ab4355fcf68 100644 --- a/Mage.Client/release/sample-decks/2014/Legacy/Championship Philadelpia/Nicholas DiJohn's Miracles.dck +++ b/Mage.Client/release/sample-decks/2014/Legacy/Championship Philadelpia/Nicholas DiJohn's Miracles.dck @@ -2,7 +2,7 @@ NAME:Nicholas DiJohn's Miracles 4 [CHK:268] Sensei's Divining Top 2 [AVR:20] Entreat the Angels 4 [CSP:31] Counterbalance -1 [4ED:236] Red Elemental Blast +1 [4ED:218] Red Elemental Blast 2 [ZEN:211] Arid Mesa 4 [KTK:233] Flooded Strand 1 [ZEN:67] Spell Pierce @@ -13,7 +13,7 @@ NAME:Nicholas DiJohn's Miracles 4 [ZEN:223] Scalding Tarn 3 [VMA:322] Tundra 2 [KTK:250] Plains -1 [LEG:248] Karakas +1 [LEG:303] Karakas 2 [VMA:64] Counterspell 1 [VMA:20] Council's Judgment 1 [VMA:324] Volcanic Island @@ -25,7 +25,7 @@ NAME:Nicholas DiJohn's Miracles SB: 1 [6ED:19] Enlightened Tutor SB: 1 [FUT:46] Venser, Shaper Savant SB: 2 [5ED:262] Pyroblast -SB: 1 [4ED:236] Red Elemental Blast +SB: 1 [4ED:218] Red Elemental Blast SB: 1 [RTR:201] Supreme Verdict SB: 2 [VMA:68] Flusterstorm SB: 1 [RTR:231] Pithing Needle diff --git a/Mage.Client/release/sample-decks/2014/Legacy/Championship Philadelpia/Pat Fehling's Deathblade.dck b/Mage.Client/release/sample-decks/2014/Legacy/Championship Philadelpia/Pat Fehling's Deathblade.dck index fe3866c5e72..4b4f37076a8 100644 --- a/Mage.Client/release/sample-decks/2014/Legacy/Championship Philadelpia/Pat Fehling's Deathblade.dck +++ b/Mage.Client/release/sample-decks/2014/Legacy/Championship Philadelpia/Pat Fehling's Deathblade.dck @@ -2,7 +2,7 @@ NAME:Pat Fehling's Deathblade 1 [BOK:163] Umezawa's Jitte 4 [VMA:58] Brainstorm 3 [VMA:322] Tundra -1 [LEG:248] Karakas +1 [LEG:303] Karakas 4 [VMA:323] Underground Sea 2 [NPH:35] Gitaxian Probe 4 [VMA:51] Swords to Plowshares @@ -11,7 +11,7 @@ NAME:Pat Fehling's Deathblade 2 [MMA:70] Vendilion Clique 4 [M12:73] Ponder 1 [ISD:105] Liliana of the Veil -3 [TMP:340] Wasteland +3 [TMP:330] Wasteland 2 [C13:63] True-Name Nemesis 3 [KTK:239] Polluted Delta 1 [NPH:130] Batterskull diff --git a/Mage.Client/release/sample-decks/2014/Legacy/Championship Philadelpia/Ralph Betesh's Temur Delver.dck b/Mage.Client/release/sample-decks/2014/Legacy/Championship Philadelpia/Ralph Betesh's Temur Delver.dck index d066595051b..aee92511acd 100644 --- a/Mage.Client/release/sample-decks/2014/Legacy/Championship Philadelpia/Ralph Betesh's Temur Delver.dck +++ b/Mage.Client/release/sample-decks/2014/Legacy/Championship Philadelpia/Ralph Betesh's Temur Delver.dck @@ -1,5 +1,5 @@ NAME:Ralph Betesh's Temur Delver -4 [TMP:340] Wasteland +4 [TMP:330] Wasteland 4 [M11:149] Lightning Bolt 2 [KTK:239] Polluted Delta 1 [KTK:249] Wooded Foothills @@ -23,8 +23,8 @@ SB: 1 [VMA:68] Flusterstorm SB: 2 [DKA:149] Grafdigger's Cage SB: 2 [5ED:262] Pyroblast SB: 1 [VMA:235] Sylvan Library -SB: 2 [NMS:48] Submerge -SB: 1 [4ED:236] Red Elemental Blast +SB: 2 [NEM:48] Submerge +SB: 1 [4ED:218] Red Elemental Blast SB: 1 [MMA:70] Vendilion Clique SB: 2 [C13:118] Rough // Tumble SB: 1 [ISD:127] Ancient Grudge diff --git a/Mage.Client/release/sample-decks/2014/Legacy/Championship Philadelpia/Reid Duke's Miracles.dck b/Mage.Client/release/sample-decks/2014/Legacy/Championship Philadelpia/Reid Duke's Miracles.dck index b59cd604e29..3387637a960 100644 --- a/Mage.Client/release/sample-decks/2014/Legacy/Championship Philadelpia/Reid Duke's Miracles.dck +++ b/Mage.Client/release/sample-decks/2014/Legacy/Championship Philadelpia/Reid Duke's Miracles.dck @@ -2,7 +2,7 @@ NAME:Reid Duke's Miracles 4 [CHK:268] Sensei's Divining Top 2 [AVR:20] Entreat the Angels 3 [CSP:31] Counterbalance -2 [4ED:236] Red Elemental Blast +2 [4ED:218] Red Elemental Blast 2 [ZEN:211] Arid Mesa 2 [KTK:36] Dig Through Time 4 [KTK:233] Flooded Strand @@ -14,7 +14,7 @@ NAME:Reid Duke's Miracles 4 [ZEN:223] Scalding Tarn 2 [KTK:250] Plains 3 [VMA:322] Tundra -1 [LEG:248] Karakas +1 [LEG:303] Karakas 1 [VMA:324] Volcanic Island 2 [VMA:64] Counterspell 2 [VMA:20] Council's Judgment @@ -32,4 +32,4 @@ SB: 1 [M11:7] Baneslayer Angel SB: 2 [MMA:70] Vendilion Clique SB: 1 [RTR:18] Rest in Peace SB: 1 [4ED:63] Blue Elemental Blast -SB: 1 [WTH:138] Peacekeeper +SB: 1 [WTH:22] Peacekeeper diff --git a/Mage.Client/release/sample-decks/2014/Legacy/Championship Philadelpia/Rodrigo Togores's Ad Nauseam Tendrils.dck b/Mage.Client/release/sample-decks/2014/Legacy/Championship Philadelpia/Rodrigo Togores's Ad Nauseam Tendrils.dck index 66040096666..348736cb36b 100644 --- a/Mage.Client/release/sample-decks/2014/Legacy/Championship Philadelpia/Rodrigo Togores's Ad Nauseam Tendrils.dck +++ b/Mage.Client/release/sample-decks/2014/Legacy/Championship Philadelpia/Rodrigo Togores's Ad Nauseam Tendrils.dck @@ -4,7 +4,7 @@ NAME:Rodrigo Togores's Ad Nauseam Tendrils 4 [KTK:239] Polluted Delta 4 [ZEN:220] Misty Rainforest 1 [KTK:258] Swamp -4 [TMP:284] Lotus Petal +4 [TMP:294] Lotus Petal 3 [JUD:62] Cabal Therapy 4 [DIS:46] Infernal Tutor 4 [VMA:106] Cabal Ritual @@ -23,7 +23,7 @@ NAME:Rodrigo Togores's Ad Nauseam Tendrils 4 [M12:73] Ponder 1 [VMA:293] Bayou SB: 2 [VMA:68] Flusterstorm -SB: 2 [NMS:58] Massacre +SB: 2 [NEM:58] Massacre SB: 1 [VMA:142] Tendrils of Agony SB: 2 [USG:240] Carpet of Flowers SB: 3 [RTR:141] Abrupt Decay diff --git a/Mage.Client/release/sample-decks/2014/Legacy/Championship Philadelpia/Stephen Harvey's Reanimator.dck b/Mage.Client/release/sample-decks/2014/Legacy/Championship Philadelpia/Stephen Harvey's Reanimator.dck index c8b2916f085..8fa2525d4c3 100644 --- a/Mage.Client/release/sample-decks/2014/Legacy/Championship Philadelpia/Stephen Harvey's Reanimator.dck +++ b/Mage.Client/release/sample-decks/2014/Legacy/Championship Philadelpia/Stephen Harvey's Reanimator.dck @@ -3,7 +3,7 @@ NAME:Stephen Harvey's Reanimator 4 [KTK:239] Polluted Delta 2 [THS:107] Thoughtseize 1 [KTK:258] Swamp -4 [TMP:284] Lotus Petal +4 [TMP:294] Lotus Petal 3 [DD2:23] Daze 2 [KTK:233] Flooded Strand 1 [DIS:34] Tidespout Tyrant @@ -26,7 +26,7 @@ SB: 2 [USG:96] Show and Tell SB: 2 [RTR:231] Pithing Needle SB: 1 [MMA:204] Engineered Explosives SB: 1 [THS:187] Ashen Rider -SB: 2 [NMS:58] Massacre +SB: 2 [NEM:58] Massacre SB: 1 [ODY:124] Coffin Purge SB: 1 [M12:98] Grave Titan SB: 1 [CON:30] Inkwell Leviathan diff --git a/Mage.Client/release/sample-decks/2014/Legacy/Championship Philadelpia/Wang Zixi's Deathblade.dck b/Mage.Client/release/sample-decks/2014/Legacy/Championship Philadelpia/Wang Zixi's Deathblade.dck index c67d9213c5a..0b508c09305 100644 --- a/Mage.Client/release/sample-decks/2014/Legacy/Championship Philadelpia/Wang Zixi's Deathblade.dck +++ b/Mage.Client/release/sample-decks/2014/Legacy/Championship Philadelpia/Wang Zixi's Deathblade.dck @@ -12,7 +12,7 @@ NAME:Wang Zixi's Deathblade 4 [WWK:20] Stoneforge Mystic 1 [MMA:70] Vendilion Clique 2 [ISD:105] Liliana of the Veil -2 [TMP:340] Wasteland +2 [TMP:330] Wasteland 3 [C13:63] True-Name Nemesis 1 [WWK:134] Creeping Tar Pit 4 [KTK:239] Polluted Delta diff --git a/Mage.Client/release/sample-decks/2014/Legacy/Championship Philadelpia/Xin Sui's Shardless Sultai.dck b/Mage.Client/release/sample-decks/2014/Legacy/Championship Philadelpia/Xin Sui's Shardless Sultai.dck index cb0bcb578f9..f57b93cfae8 100644 --- a/Mage.Client/release/sample-decks/2014/Legacy/Championship Philadelpia/Xin Sui's Shardless Sultai.dck +++ b/Mage.Client/release/sample-decks/2014/Legacy/Championship Philadelpia/Xin Sui's Shardless Sultai.dck @@ -1,5 +1,5 @@ NAME:Xin Sui's Shardless Sultai -2 [TMP:340] Wasteland +2 [TMP:330] Wasteland 1 [C13:96] Toxic Deluge 2 [WWK:134] Creeping Tar Pit 4 [KTK:239] Polluted Delta diff --git a/Mage.Client/release/sample-decks/2014/Legacy/Championship Philadelpia/Zach Dobbin's Helmerator.dck b/Mage.Client/release/sample-decks/2014/Legacy/Championship Philadelpia/Zach Dobbin's Helmerator.dck index e9333811187..62bb5cda8bc 100644 --- a/Mage.Client/release/sample-decks/2014/Legacy/Championship Philadelpia/Zach Dobbin's Helmerator.dck +++ b/Mage.Client/release/sample-decks/2014/Legacy/Championship Philadelpia/Zach Dobbin's Helmerator.dck @@ -9,7 +9,7 @@ NAME:Zach Dobbin's Helmerator 1 [M15:248] Urborg, Tomb of Yawgmoth 4 [VMA:323] Underground Sea 1 [MMA:219] Academy Ruins -3 [ATQ:58] Transmute Artifact +3 [ATQ:14] Transmute Artifact 4 [VMA:243] Baleful Strix 4 [MBS:97] Tezzeret, Agent of Bolas 1 [CSP:153] Snow-Covered Swamp @@ -17,7 +17,7 @@ NAME:Zach Dobbin's Helmerator 4 [KTK:239] Polluted Delta 4 [CMD:246] Dimir Signet 1 [FUT:165] Sword of the Meek -1 [ALL:163] Helm of Obedience +1 [ALL:121] Helm of Obedience 4 [VMA:69] Force of Will 2 [DDF:39] Tezzeret the Seeker 4 [MMA:203] Chalice of the Void diff --git a/Mage.Client/release/sample-decks/2014/Legacy/Championship Philadelpia/Zack Mullin's Miracles.dck b/Mage.Client/release/sample-decks/2014/Legacy/Championship Philadelpia/Zack Mullin's Miracles.dck index 5cf9d0c0c16..2a22686dcf9 100644 --- a/Mage.Client/release/sample-decks/2014/Legacy/Championship Philadelpia/Zack Mullin's Miracles.dck +++ b/Mage.Client/release/sample-decks/2014/Legacy/Championship Philadelpia/Zack Mullin's Miracles.dck @@ -3,13 +3,13 @@ NAME:Zack Mullin's Miracles 1 [SHM:277] Mystic Gate 2 [AVR:20] Entreat the Angels 1 [ZEN:220] Misty Rainforest -2 [4ED:236] Red Elemental Blast +2 [4ED:218] Red Elemental Blast 1 [ISD:78] Snapcaster Mage 4 [VMA:58] Brainstorm 1 [KTK:262] Mountain 4 [ZEN:223] Scalding Tarn 2 [VMA:322] Tundra -2 [LEG:248] Karakas +2 [LEG:303] Karakas 1 [VMA:324] Volcanic Island 3 [VMA:74] Jace, the Mind Sculptor 3 [VMA:51] Swords to Plowshares diff --git a/Mage.Client/release/sample-decks/2014/Legacy/GP Paris/Javier Dominguez's BUG Delver.dck b/Mage.Client/release/sample-decks/2014/Legacy/GP Paris/Javier Dominguez's BUG Delver.dck index ae31fee5484..a08cc9a49fb 100644 --- a/Mage.Client/release/sample-decks/2014/Legacy/GP Paris/Javier Dominguez's BUG Delver.dck +++ b/Mage.Client/release/sample-decks/2014/Legacy/GP Paris/Javier Dominguez's BUG Delver.dck @@ -4,30 +4,30 @@ NAME:Javier Dominguez's BUG Delver 4 [MMA:166] Tarmogoyf 1 [ZEN:220] Misty Rainforest 4 [ISD:51] Delver of Secrets -3 [ALL:42] Force of Will +3 [ALL:28] Force of Will 3 [M12:73] Ponder 2 [MMA:75] Dark Confidant 4 [CMD:40] Brainstorm -4 [TMP:340] Wasteland -4 [NMS:30] Daze +4 [TMP:330] Wasteland +4 [NEM:30] Daze 2 [THS:107] Thoughtseize 4 [ONS:321] Polluted Delta -3 [FEM:12] Hymn to Tourach +3 [FEM:38a] Hymn to Tourach 2 [3ED:283] Bayou -4 [3ED:305] Underground Sea +4 [3ED:290] Underground Sea 4 [RTR:141] Abrupt Decay -1 [3ED:303] Tropical Island +1 [3ED:288] Tropical Island 4 [ZEN:229] Verdant Catacombs SB: 1 [WTH:154] Null Rod SB: 1 [DKA:149] Grafdigger's Cage SB: 1 [7ED:133] Engineered Plague SB: 1 [NPH:57] Dismember SB: 1 [WWK:31] Jace, the Mind Sculptor -SB: 1 [ALL:42] Force of Will +SB: 1 [ALL:28] Force of Will SB: 2 [ZEN:87] Disfigure SB: 1 [ZEN:67] Spell Pierce SB: 2 [RTR:164] Golgari Charm SB: 1 [MMA:70] Vendilion Clique -SB: 1 [5ED:191] Sylvan Library -SB: 1 [FEM:12] Hymn to Tourach -SB: 1 [TMP:22] Diabolic Edict +SB: 1 [5ED:329] Sylvan Library +SB: 1 [FEM:38a] Hymn to Tourach +SB: 1 [TMP:128] Diabolic Edict diff --git a/Mage.Client/release/sample-decks/2014/Legacy/GP Paris/Jean-Mary Accart's Imperial Painter.dck b/Mage.Client/release/sample-decks/2014/Legacy/GP Paris/Jean-Mary Accart's Imperial Painter.dck index 1e774243c14..65d12a204df 100644 --- a/Mage.Client/release/sample-decks/2014/Legacy/GP Paris/Jean-Mary Accart's Imperial Painter.dck +++ b/Mage.Client/release/sample-decks/2014/Legacy/GP Paris/Jean-Mary Accart's Imperial Painter.dck @@ -1,7 +1,7 @@ NAME:Jean-Mary Accart's Imperial Painter 1 [FUT:101] Magus of the Moon 4 [5ED:262] Pyroblast -4 [TMP:305] Ancient Tomb +4 [TMP:315] Ancient Tomb 3 [PLC:122] Simian Spirit Guide 1 [HOP:133] Great Furnace 3 [CHK:268] Sensei's Divining Top @@ -12,18 +12,18 @@ NAME:Jean-Mary Accart's Imperial Painter 4 [MMA:106] Blood Moon 2 [6ED:19] Enlightened Tutor 3 [ULG:80] Goblin Welder -2 [4ED:236] Red Elemental Blast +2 [4ED:218] Red Elemental Blast 4 [C13:349] Mountain 2 [ONS:330] Wooded Foothills 4 [SHM:257] Painter's Servant -2 [3ED:296] Plateau -4 [TMP:280] Grindstone +2 [3ED:284] Plateau +4 [TMP:290] Grindstone 2 [8ED:300] Ensnaring Bridge -2 [TMP:284] Lotus Petal +2 [TMP:294] Lotus Petal 1 [TSP:166] Jaya Ballard, Task Mage SB: 1 [LRW:262] Thorn of Amethyst SB: 4 [ODY:193] Firebolt -SB: 1 [4ED:236] Red Elemental Blast +SB: 1 [4ED:218] Red Elemental Blast SB: 1 [M14:215] Ratchet Bomb SB: 2 [M13:219] Tormod's Crypt SB: 1 [DST:154] Trinisphere diff --git a/Mage.Client/release/sample-decks/2014/Legacy/GP Paris/Jose Manuel Fernandez Castello's BUG Delver.dck b/Mage.Client/release/sample-decks/2014/Legacy/GP Paris/Jose Manuel Fernandez Castello's BUG Delver.dck index 69bf225fff1..e12db2b7fca 100644 --- a/Mage.Client/release/sample-decks/2014/Legacy/GP Paris/Jose Manuel Fernandez Castello's BUG Delver.dck +++ b/Mage.Client/release/sample-decks/2014/Legacy/GP Paris/Jose Manuel Fernandez Castello's BUG Delver.dck @@ -4,18 +4,18 @@ NAME:Jose Manuel Fernandez Castello's BUG Delver 4 [ZEN:220] Misty Rainforest 3 [C13:63] True-Name Nemesis 4 [ISD:51] Delver of Secrets -4 [ALL:42] Force of Will +4 [ALL:28] Force of Will 4 [M12:73] Ponder 4 [CMD:40] Brainstorm -4 [TMP:340] Wasteland +4 [TMP:330] Wasteland 1 [NPH:57] Dismember -4 [NMS:30] Daze +4 [NEM:30] Daze 4 [ONS:321] Polluted Delta -4 [FEM:12] Hymn to Tourach +4 [FEM:38a] Hymn to Tourach 1 [3ED:283] Bayou -4 [3ED:305] Underground Sea +4 [3ED:290] Underground Sea 4 [RTR:141] Abrupt Decay -2 [3ED:303] Tropical Island +2 [3ED:288] Tropical Island 1 [ZEN:229] Verdant Catacombs SB: 1 [C13:249] Nihil Spellbomb SB: 1 [7ED:133] Engineered Plague diff --git a/Mage.Client/release/sample-decks/2014/Legacy/GP Paris/Loic Le Briand's Reanimator.dck b/Mage.Client/release/sample-decks/2014/Legacy/GP Paris/Loic Le Briand's Reanimator.dck index 5f727435f3a..0c6a88d4156 100644 --- a/Mage.Client/release/sample-decks/2014/Legacy/GP Paris/Loic Le Briand's Reanimator.dck +++ b/Mage.Client/release/sample-decks/2014/Legacy/GP Paris/Loic Le Briand's Reanimator.dck @@ -6,21 +6,21 @@ NAME:Loic Le Briand's Reanimator 1 [C13:345] Swamp 1 [ONS:313] Bloodstained Mire 4 [ODY:132] Entomb -4 [ALL:42] Force of Will +4 [ALL:28] Force of Will 1 [THS:187] Ashen Rider 2 [M12:73] Ponder 1 [NPH:9] Elesh Norn, Grand Cenobite 4 [ODY:70] Careful Study 4 [CMD:40] Brainstorm 4 [USG:134] Exhume -3 [NMS:30] Daze +3 [NEM:30] Daze 4 [AVR:106] Griselbrand 3 [THS:107] Thoughtseize 2 [USG:96] Show and Tell 4 [ONS:321] Polluted Delta -4 [TMP:45] Reanimate -4 [3ED:305] Underground Sea -4 [TMP:284] Lotus Petal +4 [TMP:151] Reanimate +4 [3ED:290] Underground Sea +4 [TMP:294] Lotus Petal 1 [ZEN:229] Verdant Catacombs SB: 3 [RTR:231] Pithing Needle SB: 1 [ALA:166] Empyrial Archangel diff --git a/Mage.Client/release/sample-decks/2014/Legacy/GP Paris/Maxime Gilles' UWr Miracles.dck b/Mage.Client/release/sample-decks/2014/Legacy/GP Paris/Maxime Gilles' UWr Miracles.dck index 621a53bef5d..ff0ecd838e9 100644 --- a/Mage.Client/release/sample-decks/2014/Legacy/GP Paris/Maxime Gilles' UWr Miracles.dck +++ b/Mage.Client/release/sample-decks/2014/Legacy/GP Paris/Maxime Gilles' UWr Miracles.dck @@ -6,28 +6,28 @@ NAME:Maxime Gilles' UWr Miracles 3 [AVR:20] Entreat the Angels 3 [WWK:31] Jace, the Mind Sculptor 2 [ISD:78] Snapcaster Mage -4 [ALL:42] Force of Will +4 [ALL:28] Force of Will 3 [ZEN:211] Arid Mesa 1 [RTR:201] Supreme Verdict 2 [M12:73] Ponder 2 [MMA:70] Vendilion Clique 4 [CMD:40] Brainstorm -1 [LEG:248] Karakas -1 [4ED:236] Red Elemental Blast +1 [LEG:303] Karakas +1 [4ED:218] Red Elemental Blast 2 [7ED:67] Counterspell 3 [CSP:31] Counterbalance 3 [AVR:38] Terminus 3 [ZEN:223] Scalding Tarn 2 [C13:337] Plains -2 [3ED:306] Volcanic Island -3 [3ED:304] Tundra +2 [3ED:291] Volcanic Island +3 [3ED:289] Tundra 3 [DDF:22] Swords to Plowshares SB: 1 [RTR:231] Pithing Needle SB: 2 [CMD:46] Flusterstorm SB: 2 [RTR:18] Rest in Peace SB: 1 [DGM:135] Wear // Tear SB: 1 [DKA:149] Grafdigger's Cage -SB: 1 [4ED:236] Red Elemental Blast +SB: 1 [4ED:218] Red Elemental Blast SB: 1 [MMA:204] Engineered Explosives SB: 1 [C13:349] Mountain SB: 1 [AVR:38] Terminus diff --git a/Mage.Client/release/sample-decks/2014/Legacy/GP Paris/Paulo Vitor Damo da Rosa's UWr Miracles.dck b/Mage.Client/release/sample-decks/2014/Legacy/GP Paris/Paulo Vitor Damo da Rosa's UWr Miracles.dck index 9ee3354ff37..64a33d500dd 100644 --- a/Mage.Client/release/sample-decks/2014/Legacy/GP Paris/Paulo Vitor Damo da Rosa's UWr Miracles.dck +++ b/Mage.Client/release/sample-decks/2014/Legacy/GP Paris/Paulo Vitor Damo da Rosa's UWr Miracles.dck @@ -5,13 +5,13 @@ NAME:Paulo Vitor Damo da Rosa's UWr Miracles 2 [AVR:20] Entreat the Angels 4 [WWK:31] Jace, the Mind Sculptor 2 [ISD:78] Snapcaster Mage -4 [ALL:42] Force of Will +4 [ALL:28] Force of Will 2 [ZEN:211] Arid Mesa 2 [M12:73] Ponder 1 [MMA:64] Spell Snare 2 [MMA:70] Vendilion Clique 4 [CMD:40] Brainstorm -1 [LEG:248] Karakas +1 [LEG:303] Karakas 2 [7ED:67] Counterspell 2 [CSP:31] Counterbalance 4 [AVR:38] Terminus @@ -19,8 +19,8 @@ NAME:Paulo Vitor Damo da Rosa's UWr Miracles 1 [SHM:277] Mystic Gate 1 [ZEN:67] Spell Pierce 2 [C13:337] Plains -2 [3ED:306] Volcanic Island -2 [3ED:304] Tundra +2 [3ED:291] Volcanic Island +2 [3ED:289] Tundra 4 [DDF:22] Swords to Plowshares SB: 1 [DGM:135] Wear // Tear SB: 3 [5ED:262] Pyroblast diff --git a/Mage.Client/release/sample-decks/2014/Legacy/GP Paris/Philipp Schonegger's Miracles.dck b/Mage.Client/release/sample-decks/2014/Legacy/GP Paris/Philipp Schonegger's Miracles.dck index 791dfa7183a..ab61c724f07 100644 --- a/Mage.Client/release/sample-decks/2014/Legacy/GP Paris/Philipp Schonegger's Miracles.dck +++ b/Mage.Client/release/sample-decks/2014/Legacy/GP Paris/Philipp Schonegger's Miracles.dck @@ -1,29 +1,28 @@ -NAME:Philipp Schönegger's Miracles 4 [C13:341] Island 4 [CHK:268] Sensei's Divining Top 4 [ONS:316] Flooded Strand 2 [AVR:20] Entreat the Angels 3 [WWK:31] Jace, the Mind Sculptor 3 [ISD:78] Snapcaster Mage -4 [ALL:42] Force of Will +4 [ALL:28] Force of Will 2 [ZEN:211] Arid Mesa 2 [M12:73] Ponder 1 [MMA:70] Vendilion Clique 4 [CMD:40] Brainstorm -1 [LEG:248] Karakas +1 [LEG:303] Karakas 2 [7ED:67] Counterspell 3 [CSP:31] Counterbalance 4 [AVR:38] Terminus 4 [ZEN:223] Scalding Tarn 2 [ZEN:67] Spell Pierce 2 [C13:337] Plains -2 [3ED:306] Volcanic Island -3 [3ED:304] Tundra +2 [3ED:291] Volcanic Island +3 [3ED:289] Tundra 4 [DDF:22] Swords to Plowshares SB: 1 [5ED:262] Pyroblast SB: 1 [AVR:20] Entreat the Angels SB: 3 [CMD:46] Flusterstorm -SB: 2 [4ED:236] Red Elemental Blast +SB: 2 [4ED:218] Red Elemental Blast SB: 1 [TSB:6] Disenchant SB: 2 [MMA:204] Engineered Explosives SB: 1 [7ED:67] Counterspell diff --git a/Mage.Client/release/sample-decks/2014/Legacy/GP Paris/Stefan Bottcher's Deathblade.dck b/Mage.Client/release/sample-decks/2014/Legacy/GP Paris/Stefan Bottcher's Deathblade.dck index 668d8ad15d7..49b9038bf7e 100644 --- a/Mage.Client/release/sample-decks/2014/Legacy/GP Paris/Stefan Bottcher's Deathblade.dck +++ b/Mage.Client/release/sample-decks/2014/Legacy/GP Paris/Stefan Bottcher's Deathblade.dck @@ -1,4 +1,3 @@ -NAME:Stefan Böttcher's Deathblade 1 [WWK:134] Creeping Tar Pit 4 [RTR:213] Deathrite Shaman 1 [AVR:20] Entreat the Angels @@ -13,18 +12,18 @@ NAME:Stefan B 2 [THS:107] Thoughtseize 1 [MMA:204] Engineered Explosives 1 [BOK:163] Umezawa's Jitte -1 [3ED:298] Scrubland +1 [3ED:286] Scrubland 1 [C13:337] Plains -3 [3ED:305] Underground Sea -3 [3ED:304] Tundra +3 [3ED:290] Underground Sea +3 [3ED:289] Tundra 4 [DDF:22] Swords to Plowshares -1 [3ED:303] Tropical Island +1 [3ED:288] Tropical Island 1 [C13:341] Island 3 [ONS:316] Flooded Strand 1 [C13:345] Swamp 1 [ZEN:219] Marsh Flats -2 [TMP:340] Wasteland -1 [LEG:248] Karakas +2 [TMP:330] Wasteland +1 [LEG:303] Karakas 1 [MMA:219] Academy Ruins 1 [7ED:67] Counterspell 3 [ONS:321] Polluted Delta @@ -32,11 +31,11 @@ NAME:Stefan B 3 [WWK:20] Stoneforge Mystic SB: 1 [ISD:105] Liliana of the Veil SB: 1 [RTR:155] Detention Sphere -SB: 3 [ALL:42] Force of Will +SB: 3 [ALL:28] Force of Will SB: 1 [RTR:201] Supreme Verdict SB: 3 [M11:21] Leyline of Sanctity SB: 1 [MBS:138] Sword of Feast and Famine SB: 2 [NPH:74] Surgical Extraction SB: 1 [THS:65] Swan Song SB: 1 [MMA:213] Relic of Progenitus -SB: 1 [NMS:111] Reverent Silence +SB: 1 [NEM:111] Reverent Silence diff --git a/Mage.Client/release/sample-decks/2014/Modern/GP Richmond/James Cady – UWR Splinter Twin.dck b/Mage.Client/release/sample-decks/2014/Modern/GP Richmond/James Cady – UWR Splinter Twin.dck index 2ed4d9216ef..5cc7d6b19e3 100644 --- a/Mage.Client/release/sample-decks/2014/Modern/GP Richmond/James Cady – UWR Splinter Twin.dck +++ b/Mage.Client/release/sample-decks/2014/Modern/GP Richmond/James Cady – UWR Splinter Twin.dck @@ -1,4 +1,3 @@ -NAME:James Cady – UWR Splinter Twin 2 [M12:145] Grim Lavamancer 4 [WWK:133] Celestial Colonnade 2 [C13:341] Island diff --git a/Mage.Client/release/sample-decks/2014/Standard/DailyMTG ReConstructed Enchantress to Meet You/Ajani Nakano’s Infinite Ajani.dck b/Mage.Client/release/sample-decks/2014/Standard/DailyMTG ReConstructed Enchantress to Meet You/Ajani Nakano’s Infinite Ajani.dck index 1a7e4bc85af..fa0910bc4d8 100644 --- a/Mage.Client/release/sample-decks/2014/Standard/DailyMTG ReConstructed Enchantress to Meet You/Ajani Nakano’s Infinite Ajani.dck +++ b/Mage.Client/release/sample-decks/2014/Standard/DailyMTG ReConstructed Enchantress to Meet You/Ajani Nakano’s Infinite Ajani.dck @@ -1,4 +1,3 @@ -NAME:Ajani Nakano’s Infinite Ajani 2 [RTR:243] Overgrown Tomb 2 [RTR:120] Deadbridge Goliath 2 [RTR:248] Temple Garden diff --git a/Mage.Client/release/sample-decks/2014/Standard/DailyMTG ReConstructed Enchantress to Meet You/Colin Reilly’s Quadruple Strike.dck b/Mage.Client/release/sample-decks/2014/Standard/DailyMTG ReConstructed Enchantress to Meet You/Colin Reilly’s Quadruple Strike.dck index e1a65418981..7b03635ad5f 100644 --- a/Mage.Client/release/sample-decks/2014/Standard/DailyMTG ReConstructed Enchantress to Meet You/Colin Reilly’s Quadruple Strike.dck +++ b/Mage.Client/release/sample-decks/2014/Standard/DailyMTG ReConstructed Enchantress to Meet You/Colin Reilly’s Quadruple Strike.dck @@ -1,4 +1,3 @@ -NAME:Colin Reilly’s Quadruple Strike 4 [M14:10] Brave the Elements 4 [C13:179] Boros Charm 4 [GTC:245] Sacred Foundry diff --git a/Mage.Client/release/sample-decks/2014/Standard/DailyMTG ReConstructed Enchantress to Meet You/Devon Straub’s The One-ders.dck b/Mage.Client/release/sample-decks/2014/Standard/DailyMTG ReConstructed Enchantress to Meet You/Devon Straub’s The One-ders.dck index 756170c84b7..96e106757b3 100644 --- a/Mage.Client/release/sample-decks/2014/Standard/DailyMTG ReConstructed Enchantress to Meet You/Devon Straub’s The One-ders.dck +++ b/Mage.Client/release/sample-decks/2014/Standard/DailyMTG ReConstructed Enchantress to Meet You/Devon Straub’s The One-ders.dck @@ -1,4 +1,3 @@ -NAME:Devon Straub’s The One-ders 4 [RTR:214] Dryad Militant 2 [RTR:82] Ultimate Price 2 [THS:33] Spear of Heliod diff --git a/Mage.Client/release/sample-decks/2014/Standard/DailyMTG ReConstructed Enchantress to Meet You/Gavin Verhey’s Nyxchantress.dck b/Mage.Client/release/sample-decks/2014/Standard/DailyMTG ReConstructed Enchantress to Meet You/Gavin Verhey’s Nyxchantress.dck index f25692c8cef..6ebf60ba71a 100644 --- a/Mage.Client/release/sample-decks/2014/Standard/DailyMTG ReConstructed Enchantress to Meet You/Gavin Verhey’s Nyxchantress.dck +++ b/Mage.Client/release/sample-decks/2014/Standard/DailyMTG ReConstructed Enchantress to Meet You/Gavin Verhey’s Nyxchantress.dck @@ -1,4 +1,3 @@ -NAME:Gavin Verhey’s Nyxchantress 4 [RTR:24] Sphere of Safety 4 [RTR:248] Temple Garden 4 [BNG:165] Temple of Plenty diff --git a/Mage.Client/release/sample-decks/2014/Standard/DailyMTG ReConstructed Enchantress to Meet You/Mahdi Fozi’s UR One-shot combo.dck b/Mage.Client/release/sample-decks/2014/Standard/DailyMTG ReConstructed Enchantress to Meet You/Mahdi Fozi’s UR One-shot combo.dck index 25428994acb..b63f9f49543 100644 --- a/Mage.Client/release/sample-decks/2014/Standard/DailyMTG ReConstructed Enchantress to Meet You/Mahdi Fozi’s UR One-shot combo.dck +++ b/Mage.Client/release/sample-decks/2014/Standard/DailyMTG ReConstructed Enchantress to Meet You/Mahdi Fozi’s UR One-shot combo.dck @@ -1,4 +1,3 @@ -NAME:Mahdi Fozi’s UR One-shot combo 2 [THS:205] Steam Augury 4 [JOU:164] Temple of Epiphany 4 [RTR:247] Steam Vents diff --git a/Mage.Client/release/sample-decks/2015/Legacy/Manaless Dredge Example 1.dck b/Mage.Client/release/sample-decks/2015/Legacy/Manaless Dredge Example 1.dck index 3d9867fc18c..42dcb2f33f2 100644 --- a/Mage.Client/release/sample-decks/2015/Legacy/Manaless Dredge Example 1.dck +++ b/Mage.Client/release/sample-decks/2015/Legacy/Manaless Dredge Example 1.dck @@ -4,7 +4,7 @@ 4 [FUT:54] Narcomoeba 4 [TSP:104] Dread Return 4 [PLC:77] Phantasmagorian -3 [ALL:4] Contagion +3 [ALL:45] Contagion 4 [FUT:174] Dryad Arbor 4 [JUD:62] Cabal Therapy 4 [TOR:65] Ichorid @@ -12,11 +12,11 @@ 4 [RAV:107] Stinkweed Imp 2 [DKA:89] Flayer of the Hatebound 4 [FUT:81] Bridge from Below -4 [5ED:45] Nether Shadow +4 [5ED:183] Nether Shadow 4 [FUT:90] Street Wraith 1 [BOK:82] Sickening Shoal SB: 3 [NPH:118] Noxious Revival -SB: 4 [NMS:111] Reverent Silence +SB: 4 [NEM:111] Reverent Silence SB: 2 [ZEN:229] Verdant Catacombs SB: 3 [WWK:108] Nature's Claim SB: 1 [DTK:262] Forest diff --git a/Mage.Client/release/sample-decks/2015/Legacy/Manaless Dredge Example 2.dck b/Mage.Client/release/sample-decks/2015/Legacy/Manaless Dredge Example 2.dck index 063ff8504c4..7d08dfd4b45 100644 --- a/Mage.Client/release/sample-decks/2015/Legacy/Manaless Dredge Example 2.dck +++ b/Mage.Client/release/sample-decks/2015/Legacy/Manaless Dredge Example 2.dck @@ -13,10 +13,10 @@ 1 [DKA:89] Flayer of the Hatebound 4 [FUT:81] Bridge from Below 4 [FUT:90] Street Wraith -3 [5ED:45] Nether Shadow +3 [5ED:183] Nether Shadow 4 [BOK:82] Sickening Shoal SB: 4 [ZEN:57] Mindbreak Trap SB: 1 [GPT:101] Angel of Despair SB: 4 [M11:21] Leyline of Sanctity SB: 4 [NPH:35] Gitaxian Probe -SB: 2 [ALL:4] Contagion +SB: 2 [ALL:45] Contagion diff --git a/Mage.Client/release/sample-decks/2015/Legacy/Manaless Dredge Example 3.dck b/Mage.Client/release/sample-decks/2015/Legacy/Manaless Dredge Example 3.dck index 453814a54b7..a515fff6b18 100644 --- a/Mage.Client/release/sample-decks/2015/Legacy/Manaless Dredge Example 3.dck +++ b/Mage.Client/release/sample-decks/2015/Legacy/Manaless Dredge Example 3.dck @@ -12,11 +12,11 @@ 4 [RAV:107] Stinkweed Imp 1 [DKA:89] Flayer of the Hatebound 4 [FUT:81] Bridge from Below -4 [5ED:45] Nether Shadow +4 [5ED:183] Nether Shadow 4 [FUT:90] Street Wraith SB: 1 [NPH:6] Chancellor of the Annex SB: 1 [THS:187] Ashen Rider SB: 4 [M15:237] Tormod's Crypt SB: 4 [MMQ:168] Unmask -SB: 1 [ALL:4] Contagion +SB: 1 [ALL:45] Contagion SB: 4 [BOK:82] Sickening Shoal diff --git a/Mage.Client/release/sample-decks/AI/FastRedHaste.dck b/Mage.Client/release/sample-decks/AI/FastRedHaste.dck index 971dbf13e31..94361d193bc 100644 --- a/Mage.Client/release/sample-decks/AI/FastRedHaste.dck +++ b/Mage.Client/release/sample-decks/AI/FastRedHaste.dck @@ -7,7 +7,7 @@ NAME:FastRedHaste 1 [C16:16] Charging Cinderhorn 1 [M13:200] Akroma's Memorial 1 [RAV:193] Boros Swiftblade -1 [3ED:296] Plateau +1 [3ED:284] Plateau 1 [EMN:149] Weaver of Lightning 1 [BNG:108] Satyr Firedancer 1 [WTH:93] Cinder Giant @@ -16,7 +16,7 @@ NAME:FastRedHaste 1 [BFZ:150] Outnumber 1 [M14:139] Flames of the Firebrand 1 [INV:11] Crimson Acolyte -1 [LEG:247] Hammerheim +1 [LEG:302] Hammerheim 1 [KLD:246] Inspiring Vantage 1 [DGM:107] Tajic, Blade of the Legion 1 [GTC:97] Legion Loyalist @@ -32,7 +32,7 @@ NAME:FastRedHaste 1 [ISD:4] Avacynian Priest 1 [ODY:200] Lava Blister 1 [EVE:139] Figure of Destiny -1 [LEG:175] Clergy of the Holy Nimbus +1 [LEG:6] Clergy of the Holy Nimbus 1 [LEG:133] Beasts of Bogardan 1 [DTK:151] Roast 1 [ME4:113] Fire Imp @@ -55,7 +55,7 @@ NAME:FastRedHaste 1 [HOU:92] Firebrand Archer 1 [AVR:141] Hound of Griselbrand 1 [ONS:189] Blistering Firecat -1 [VIS:125] Zhalfirin Crusader +1 [VIS:25] Zhalfirin Crusader 1 [RAV:243] Boros Recruit 1 [ROE:15] Caravan Escort 1 [C14:40] Volcanic Offering @@ -73,5 +73,5 @@ NAME:FastRedHaste 1 [DTK:134] Draconic Roar 1 [2ED:245] Gauntlet of Might 1 [ONS:199] Dwarven Blastminer -LAYOUT MAIN:(1,8)(CARD_TYPE,false,50)|([KLD:236])([M13:200],[RAV:255],[2ED:245])([BNG:108])([M15:35],[C16:16],[EMN:149],[KLD:130],[TSB:72],[ISD:23],[ISD:4],[LEG:133],[ZEN:127],[HOU:104],[HOU:103],[AVR:141],[ONS:189],[RAV:243],[ROE:15],[SOI:190],[KTK:118],[MMQ:53],[ONS:199],[DKA:93],[WTH:93],[DGM:56],[INV:11],[DGM:107],[GTC:97],[USG:11],[AKH:21],[M12:133],[LEG:175],[ME4:113],[M11:129],[OGW:105],[M13:148],[M10:34],[HOU:92],[VIS:125],[EVE:139],[KTK:11],[DIS:10],[RAV:193],[GTC:215])([SOI:28])([ZEN:119],[CHK:40],[C14:40],[M11:149],[DTK:134],[8ED:200],[ZEN:142],[WWK:90],[TSP:180],[BFZ:150],[HOU:20],[FUT:115],[RAV:213],[DKA:84])([DOM:262],[DOM:250],[DOM:250],[DOM:250],[DOM:250],[KLD:246],[OGW:175],[DOM:262],[DOM:262],[DOM:262],[DOM:262],[DOM:250],[LEG:247],[DOM:262],[DOM:262],[DOM:262],[DOM:262],[DOM:250],[DOM:250],[DOM:262],[DOM:262],[3ED:296],[DOM:250],[DOM:262],[DOM:262],[DOM:262],[DOM:262],[DOM:250],[DOM:250],[DOM:250],[DOM:250],[DOM:262])([ODY:193],[XLN:145],[DTK:151],[ODY:193],[ORI:143],[ODY:200],[C15:28],[M14:139]) +LAYOUT MAIN:(1,8)(CARD_TYPE,false,50)|([KLD:236])([M13:200],[RAV:255],[2ED:245])([BNG:108])([M15:35],[C16:16],[EMN:149],[KLD:130],[TSB:72],[ISD:23],[ISD:4],[LEG:133],[ZEN:127],[HOU:104],[HOU:103],[AVR:141],[ONS:189],[RAV:243],[ROE:15],[SOI:190],[KTK:118],[MMQ:53],[ONS:199],[DKA:93],[WTH:93],[DGM:56],[INV:11],[DGM:107],[GTC:97],[USG:11],[AKH:21],[M12:133],[LEG:6],[ME4:113],[M11:129],[OGW:105],[M13:148],[M10:34],[HOU:92],[VIS:25],[EVE:139],[KTK:11],[DIS:10],[RAV:193],[GTC:215])([SOI:28])([ZEN:119],[CHK:40],[C14:40],[M11:149],[DTK:134],[8ED:200],[ZEN:142],[WWK:90],[TSP:180],[BFZ:150],[HOU:20],[FUT:115],[RAV:213],[DKA:84])([DOM:262],[DOM:250],[DOM:250],[DOM:250],[DOM:250],[KLD:246],[OGW:175],[DOM:262],[DOM:262],[DOM:262],[DOM:262],[DOM:250],[LEG:302],[DOM:262],[DOM:262],[DOM:262],[DOM:262],[DOM:250],[DOM:250],[DOM:262],[DOM:262],[3ED:284],[DOM:250],[DOM:262],[DOM:262],[DOM:262],[DOM:262],[DOM:250],[DOM:250],[DOM:250],[DOM:250],[DOM:262])([ODY:193],[XLN:145],[DTK:151],[ODY:193],[ORI:143],[ODY:200],[C15:28],[M14:139]) LAYOUT SIDEBOARD:(0,0)(CMC,true,50)| diff --git a/Mage.Client/release/sample-decks/AI/Poison.dck b/Mage.Client/release/sample-decks/AI/Poison.dck index ef2dcb38b8e..aec84cce2fe 100644 --- a/Mage.Client/release/sample-decks/AI/Poison.dck +++ b/Mage.Client/release/sample-decks/AI/Poison.dck @@ -3,13 +3,13 @@ 1 [FUT:171] Llanowar Reborn 1 [KLD:243] Blooming Marsh 1 [ALA:225] Jund Panorama -1 [MIR:12] Crypt Cobra +1 [MIR:114] Crypt Cobra 1 [ZEN:221] Oran-Rief, the Vastwood -1 [STH:132] Mox Diamond +1 [STH:138] Mox Diamond 1 [M15:194] Reclamation Sage NAME:Poison 1 [M13:168] Elvish Archdruid -1 [STH:137] Volrath's Stronghold +1 [STH:143] Volrath's Stronghold 1 [FUT:174] Dryad Arbor 1 [M15:101] Indulgent Tormentor 1 [DKA:125] Scorned Villager @@ -62,7 +62,7 @@ NAME:Poison 1 [CMA:186] Meren of Clan Nel Toth 1 [SHM:273] Leechridden Swamp 1 [NPH:72] Reaper of Sheoldred -1 [MIR:136] Sabertooth Cobra +1 [MIR:238] Sabertooth Cobra 1 [RTR:243] Overgrown Tomb 1 [AER:106] Druid of the Cowl 1 [AKH:237] Throne of the God-Pharaoh @@ -94,5 +94,5 @@ NAME:Poison 1 [BFZ:240] Mortuary Mire 1 [SOM:223] Wurmcoil Engine 1 [AKH:187] Sixth Sense -LAYOUT MAIN:(1,11)(CARD_TYPE,false,50)|([SOM:170],[MBS:121],[MBS:125],[SOM:166],[SOM:185],[SOM:223])([THS:153])([MOR:145])([RTR:229],[BFZ:225],[SOM:140],[M14:207],[STH:132],[RAV:262],[AKH:237],[MRD:270])([JOU:154],[BNG:68])([FUT:174])([RAV:231],[M15:194],[M14:168],[M15:101],[DKA:125],[ORI:101],[ORI:100],[EMN:159],[M12:195],[NPH:119],[DGM:26],[SOI:203],[SOI:202],[LRW:250],[SOM:66],[NPH:72],[NPH:111],[AER:106],[DTK:123],[EVE:79],[EVE:124],[RTR:198],[AER:117],[EMN:175],[THS:91],[AVR:107],[THS:201],[ALA:71],[MIR:12],[MOR:140],[GTC:123],[CHK:236],[SOM:79],[MBS:94],[C13:84],[M13:118],[MBS:96],[MBS:90],[CMA:186],[M13:168],[CHK:238],[ODY:282],[MIR:136],[DTK:204],[BFZ:170],[BNG:122],[MBS:77],[BOK:136],[KTK:152],[M12:81],[LRW:219],[APC:109])([VMA:250],[AKH:187])([MBS:57])([KLD:243],[ZEN:221],[DOM:266],[DOM:266],[DOM:258],[DOM:258],[USG:321],[LRW:268],[RTR:243],[OGW:172],[OGW:171],[FUT:171],[DOM:266],[DOM:266],[DOM:266],[DOM:266],[DOM:266],[DOM:258],[WWK:140],[FRF:169],[MBS:145],[BFZ:240],[ALA:225],[DOM:258],[DOM:266],[STH:137],[SHM:273],[DOM:258],[DOM:258],[CON:144],[DOM:266],[RAV:283])([M15:183],[AER:70]) +LAYOUT MAIN:(1,11)(CARD_TYPE,false,50)|([SOM:170],[MBS:121],[MBS:125],[SOM:166],[SOM:185],[SOM:223])([THS:153])([MOR:145])([RTR:229],[BFZ:225],[SOM:140],[M14:207],[STH:138],[RAV:262],[AKH:237],[MRD:270])([JOU:154],[BNG:68])([FUT:174])([RAV:231],[M15:194],[M14:168],[M15:101],[DKA:125],[ORI:101],[ORI:100],[EMN:159],[M12:195],[NPH:119],[DGM:26],[SOI:203],[SOI:202],[LRW:250],[SOM:66],[NPH:72],[NPH:111],[AER:106],[DTK:123],[EVE:79],[EVE:124],[RTR:198],[AER:117],[EMN:175],[THS:91],[AVR:107],[THS:201],[ALA:71],[MIR:114],[MOR:140],[GTC:123],[CHK:236],[SOM:79],[MBS:94],[C13:84],[M13:118],[MBS:96],[MBS:90],[CMA:186],[M13:168],[CHK:238],[ODY:282],[MIR:238],[DTK:204],[BFZ:170],[BNG:122],[MBS:77],[BOK:136],[KTK:152],[M12:81],[LRW:219],[APC:109])([VMA:250],[AKH:187])([MBS:57])([KLD:243],[ZEN:221],[DOM:266],[DOM:266],[DOM:258],[DOM:258],[USG:321],[LRW:268],[RTR:243],[OGW:172],[OGW:171],[FUT:171],[DOM:266],[DOM:266],[DOM:266],[DOM:266],[DOM:266],[DOM:258],[WWK:140],[FRF:169],[MBS:145],[BFZ:240],[ALA:225],[DOM:258],[DOM:266],[STH:143],[SHM:273],[DOM:258],[DOM:258],[CON:144],[DOM:266],[RAV:283])([M15:183],[AER:70]) LAYOUT SIDEBOARD:(0,0)(CMC,true,50)| diff --git a/Mage.Client/release/sample-decks/AI/Zombi & Skeleton.dck b/Mage.Client/release/sample-decks/AI/Zombi & Skeleton.dck index a5c0c8c1e15..e9fe8430d1f 100644 --- a/Mage.Client/release/sample-decks/AI/Zombi & Skeleton.dck +++ b/Mage.Client/release/sample-decks/AI/Zombi & Skeleton.dck @@ -1,4 +1,4 @@ -NAME:Zombi & Skeleton +NAME:Zombi & Skeleton 1 [FUT:171] Llanowar Reborn 1 [LGN:77] Noxious Ghoul 1 [M12:116] Vengeful Pharaoh @@ -35,7 +35,7 @@ NAME:Zombi & Skeleton 1 [DOM:241] Isolated Chapel 1 [AER:109] Heroic Intervention 2 [DOM:248] Woodland Cemetery -1 [MIR:296] Grasslands +1 [MIR:327] Grasslands 1 [SOI:216] Loam Dryad 1 [SOM:63] Fume Spitter 1 [SOI:212] Inexorable Blob @@ -64,8 +64,8 @@ NAME:Zombi & Skeleton 1 [ALA:221] Bant Panorama 1 [CHK:122] Kokusho, the Evening Star 1 [AKH:6] Binding Mummy -1 [MIR:11] Choking Sands -1 [3ED:298] Scrubland +1 [MIR:113] Choking Sands +1 [3ED:286] Scrubland 1 [WTH:152] Mana Web 4 [DOM:266] Forest 1 [PLC:145] Essence Warden @@ -114,5 +114,5 @@ NAME:Zombi & Skeleton 1 [AKH:104] Plague Belcher 1 [MRD:278] Ancient Den 1 [DTK:172] Ainok Survivalist -LAYOUT MAIN:(1,7)(CARD_TYPE,false,50)|([MRD:278],[MRD:285])([LRW:265],[4ED:299],[AER:173],[WTH:152],[3ED:274])([EVE:119],[LGN:77],[M12:116],[SHM:229],[M14:103],[THS:89],[DKA:70],[RTR:174],[RAV:238],[10E:155],[MBS:50],[CMD:227],[RTR:158],[DKA:63],[RTR:213],[DKA:64],[LGN:80],[7ED:166],[AKH:91],[SCG:62],[KTK:73],[TSB:52],[AKH:99],[SOI:216],[SOM:63],[SOI:212],[AKH:81],[M14:195],[CSP:71],[CMD:98],[M15:121],[M15:111],[6ED:162],[ISD:170],[SOI:107],[ALA:70],[NPH:68],[SOM:78],[SOK:69],[CHK:122],[AKH:6],[EVE:117],[ONS:164],[MBS:96],[E01:36],[M12:81],[AKH:208],[DTK:116],[PLC:145],[ODY:282],[EMN:89],[BFZ:210],[M13:92],[CMA:66],[GTC:182],[APC:109],[M12:86],[NPH:25],[AKH:104],[DTK:172])([ZEN:108],[ROE:207],[EMN:90])([C16:21],[MMQ:129],[TSP:135],[APC:86],[TOR:51],[AER:109],[TSP:206],[OGW:26],[ROE:131],[ISD:124],[PLC:127],[DGM:132])([M11:229],[DOM:258],[DOM:258],[DOM:258],[BFZ:234],[DOM:266],[AKH:247],[SHM:279],[DOM:266],[KTK:248],[FUT:171],[DOM:258],[MIR:296],[DOM:266],[JUD:141],[ONS:312],[HOU:171],[DOM:250],[DOM:258],[GTC:242],[ONS:324],[ONS:326],[ONS:327],[3ED:283],[SHM:273],[DOM:258],[ALA:221],[DOM:241],[DOM:258],[DOM:248],[DOM:248],[3ED:298],[EVE:180],[DOM:266],[SHM:281],[DKA:158])([JUD:72],[ISD:26],[TOR:57],[MIR:11],[TOR:78],[JOU:120],[DKA:80]) +LAYOUT MAIN:(1,7)(CARD_TYPE,false,50)|([MRD:278],[MRD:285])([LRW:265],[4ED:299],[AER:173],[WTH:152],[3ED:274])([EVE:119],[LGN:77],[M12:116],[SHM:229],[M14:103],[THS:89],[DKA:70],[RTR:174],[RAV:238],[10E:155],[MBS:50],[CMD:227],[RTR:158],[DKA:63],[RTR:213],[DKA:64],[LGN:80],[7ED:166],[AKH:91],[SCG:62],[KTK:73],[TSB:52],[AKH:99],[SOI:216],[SOM:63],[SOI:212],[AKH:81],[M14:195],[CSP:71],[CMD:98],[M15:121],[M15:111],[6ED:162],[ISD:170],[SOI:107],[ALA:70],[NPH:68],[SOM:78],[SOK:69],[CHK:122],[AKH:6],[EVE:117],[ONS:164],[MBS:96],[E01:36],[M12:81],[AKH:208],[DTK:116],[PLC:145],[ODY:282],[EMN:89],[BFZ:210],[M13:92],[CMA:66],[GTC:182],[APC:109],[M12:86],[NPH:25],[AKH:104],[DTK:172])([ZEN:108],[ROE:207],[EMN:90])([C16:21],[MMQ:129],[TSP:135],[APC:86],[TOR:51],[AER:109],[TSP:206],[OGW:26],[ROE:131],[ISD:124],[PLC:127],[DGM:132])([M11:229],[DOM:258],[DOM:258],[DOM:258],[BFZ:234],[DOM:266],[AKH:247],[SHM:279],[DOM:266],[KTK:248],[FUT:171],[DOM:258],[MIR:327],[DOM:266],[JUD:141],[ONS:312],[HOU:171],[DOM:250],[DOM:258],[GTC:242],[ONS:324],[ONS:326],[ONS:327],[3ED:283],[SHM:273],[DOM:258],[ALA:221],[DOM:241],[DOM:258],[DOM:248],[DOM:248],[3ED:286],[EVE:180],[DOM:266],[SHM:281],[DKA:158])([JUD:72],[ISD:26],[TOR:57],[MIR:113],[TOR:78],[JOU:120],[DKA:80]) LAYOUT SIDEBOARD:(0,0)(CMC,true,50)| diff --git a/Mage.Client/release/sample-decks/Commander/Commander 2015/Call the Spirits (WB).dck b/Mage.Client/release/sample-decks/Commander/Commander 2015/Call the Spirits (WB).dck index c00e539a8e2..7652893bcbd 100644 --- a/Mage.Client/release/sample-decks/Commander/Commander 2015/Call the Spirits (WB).dck +++ b/Mage.Client/release/sample-decks/Commander/Commander 2015/Call the Spirits (WB).dck @@ -46,8 +46,8 @@ 1 [C15:268] Sol Ring 1 [C15:301] Reliquary Tower 1 [C15:57] Ajani's Chosen -1 [C15:302] Scoured Barrens -1 [C15:303] Secluded Steppe +1 [C15:303] Scoured Barrens +1 [C15:304] Secluded Steppe 1 [C15:229] Necromancer's Covenant 1 [C15:22] Thief of Blood 1 [C15:66] Dawn to Dusk diff --git a/Mage.Client/release/sample-decks/Commander/Commander 2017/VampiricBloodlust.dck b/Mage.Client/release/sample-decks/Commander/Commander 2017/VampiricBloodlust.dck index 3944360bfb0..2726ac5a909 100644 --- a/Mage.Client/release/sample-decks/Commander/Commander 2017/VampiricBloodlust.dck +++ b/Mage.Client/release/sample-decks/Commander/Commander 2017/VampiricBloodlust.dck @@ -1,6 +1,6 @@ 1 [C17:100] Blood Tribute 1 [C17:101] Bloodhusk Ritualist -1 [C17:102] Bloodlord of Vaasgoth +1 [M12:82] Bloodlord of Vaasgoth 1 [C17:103] Butcher of Malakir 1 [C17:104] Captivating Vampire 1 [C17:105] Consuming Vapors diff --git a/Mage.Client/release/sample-decks/Commander/Commander 2018/Subjective Reality.dck b/Mage.Client/release/sample-decks/Commander/Commander 2018/Subjective Reality.dck index 49462f68623..b24a237a89f 100644 --- a/Mage.Client/release/sample-decks/Commander/Commander 2018/Subjective Reality.dck +++ b/Mage.Client/release/sample-decks/Commander/Commander 2018/Subjective Reality.dck @@ -1,93 +1,93 @@ -1 [C18:102] Sigiled Starfish -1 [C18:103] Sphinx of Jwar Isle -1 [C18:104] Sphinx of Uthuun -1 [C18:105] Telling Time -1 [C18:109] Treasure Hunt -1 [C18:113] Army of the Damned -1 [C18:115] Phyrexian Delver -1 [C18:12] Primordial Mist -1 [C18:15] Entreat the Dead -1 [C18:168] Aethermage's Touch -1 [C18:16] Loyal Subordinate -1 [C18:176] Duskmantle Seer -1 [C18:178] Enigma Sphinx -1 [C18:179] Esper Charm -1 [C18:17] Night Incarnate -1 [C18:183] High Priest of Penance -1 [C18:186] Mortify -1 [C18:18] Skull Storm -1 [C18:191] Silent-Blade Oni -1 [C18:193] Utter End -1 [C18:196] Azorius Signet -1 [C18:19] Sower of Discord -1 [C18:1] Boreas Charger -1 [C18:200] Commander's Sphere -1 [C18:201] Crystal Ball -1 [C18:203] Dimir Signet -1 [C18:210] Mind Stone -1 [C18:213] Orzhov Signet -1 [C18:214] Pilgrim's Eye -1 [C18:220] Seer's Lantern -1 [C18:222] Sol Ring -1 [C18:232] Arcane Sanctum -1 [C18:233] Azorius Chancery -1 [C18:234] Azorius Guildgate -1 [C18:235] Barren Moor -1 [C18:240] Command Tower -1 [C18:242] Dimir Aqueduct -1 [C18:243] Dimir Guildgate -1 [C18:244] Dismal Backwater -1 [C18:247] Forsaken Sanctuary -1 [C18:253] Halimar Depths -1 [C18:260] Jwar Isle Refuge -1 [C18:264] Lonely Sandbar -1 [C18:265] Meandering River -1 [C18:266] Mortuary Mire -1 [C18:270] New Benalia -1 [C18:271] Orzhov Basilica -1 [C18:272] Orzhov Guildgate -1 [C18:276] Scoured Barrens -1 [C18:279] Secluded Steppe -1 [C18:280] Sejiri Refuge -1 [C18:283] Submerged Boneyard -1 [C18:48] Varina, Lich Queen -1 [C18:4] Loyal Unicorn -1 [C18:56] Geode Golem -1 [C18:58] Forge of Heroes -1 [C18:59] Isolated Watchtower -1 [C18:5] Magus of the Balance -1 [C18:60] Adarkar Valkyrie -1 [C18:62] Akroma's Vengeance -1 [C18:63] Banishing Stroke -1 [C18:65] Crib Swap -1 [C18:67] Entreat the Angels -1 [C18:68] Lightform -1 [C18:71] Return to Dust -1 [C18:73] Serra Avatar -1 [C18:77] Terminus -1 [C18:82] Brainstorm -1 [C18:83] Cloudform -1 [C18:84] Conundrum Sphinx -1 [C18:85] Devastation Tide -1 [C18:87] Djinn of Wishes -1 [C18:88] Dream Cache -1 [C18:93] Jeskai Infiltrator -1 [C18:94] Mulldrifter -1 [C18:95] Ninja of the Deep Hours -1 [C18:96] Ponder -1 [C18:97] Portent -1 [C18:98] Predict -1 [C18:298] Island -1 [C18:299] Swamp -1 [C18:300] Swamp -1 [C18:301] Swamp -1 [C18:006] Aminatou's Augury +1 [C18:102] Sigiled Starfish +1 [C18:103] Sphinx of Jwar Isle +1 [C18:104] Sphinx of Uthuun +1 [C18:105] Telling Time +1 [C18:109] Treasure Hunt +1 [C18:113] Army of the Damned +1 [C18:115] Phyrexian Delver +1 [C18:12] Primordial Mist +1 [C18:15] Entreat the Dead +1 [C18:168] Aethermage's Touch +1 [C18:16] Loyal Subordinate +1 [C18:176] Duskmantle Seer +1 [C18:178] Enigma Sphinx +1 [C18:179] Esper Charm +1 [C18:17] Night Incarnate +1 [C18:183] High Priest of Penance +1 [C18:186] Mortify +1 [C18:18] Skull Storm +1 [C18:191] Silent-Blade Oni +1 [C18:193] Utter End +1 [C18:196] Azorius Signet +1 [C18:19] Sower of Discord +1 [C18:1] Boreas Charger +1 [C18:200] Commander's Sphere +1 [C18:201] Crystal Ball +1 [C18:203] Dimir Signet +1 [C18:210] Mind Stone +1 [C18:213] Orzhov Signet +1 [C18:214] Pilgrim's Eye +1 [C18:220] Seer's Lantern +1 [C18:222] Sol Ring +1 [C18:232] Arcane Sanctum +1 [C18:233] Azorius Chancery +1 [C18:234] Azorius Guildgate +1 [C18:235] Barren Moor +1 [C18:240] Command Tower +1 [C18:242] Dimir Aqueduct +1 [C18:243] Dimir Guildgate +1 [C18:244] Dismal Backwater +1 [C18:247] Forsaken Sanctuary +1 [C18:253] Halimar Depths +1 [C18:260] Jwar Isle Refuge +1 [C18:264] Lonely Sandbar +1 [C18:265] Meandering River +1 [C18:266] Mortuary Mire +1 [C18:270] New Benalia +1 [C18:271] Orzhov Basilica +1 [C18:272] Orzhov Guildgate +1 [C18:276] Scoured Barrens +1 [C18:279] Secluded Steppe +1 [C18:280] Sejiri Refuge +1 [C18:283] Submerged Boneyard +1 [C18:48] Varina, Lich Queen +1 [C18:4] Loyal Unicorn +1 [C18:56] Geode Golem +1 [C18:58] Forge of Heroes +1 [C18:59] Isolated Watchtower +1 [C18:5] Magus of the Balance +1 [C18:60] Adarkar Valkyrie +1 [C18:62] Akroma's Vengeance +1 [C18:63] Banishing Stroke +1 [C18:65] Crib Swap +1 [C18:67] Entreat the Angels +1 [C18:68] Lightform +1 [C18:71] Return to Dust +1 [C18:73] Serra Avatar +1 [C18:77] Terminus +1 [C18:82] Brainstorm +1 [C18:83] Cloudform +1 [C18:84] Conundrum Sphinx +1 [C18:85] Devastation Tide +1 [C18:87] Djinn of Wishes +1 [C18:88] Dream Cache +1 [C18:93] Jeskai Infiltrator +1 [C18:94] Mulldrifter +1 [C18:95] Ninja of the Deep Hours +1 [C18:96] Ponder +1 [C18:97] Portent +1 [C18:98] Predict +1 [C18:298] Island +1 [C18:299] Swamp +1 [C18:300] Swamp +1 [C18:301] Swamp +1 [C18:6] Aminatou's Augury 1 [C18:288] Tranquil Cove 1 [C18:51] Yennett, Cryptic Sovereign 1 [C18:52] Yuriko, the Tiger's Shadow -2 [C18:296] Island -2 [C18:297] Island -2 [C18:295] Plains -3 [C18:293] Plains -3 [C18:294] Plains +2 [C18:296] Island +2 [C18:297] Island +2 [C18:295] Plains +3 [C18:293] Plains +3 [C18:294] Plains SB: 1 [C18:37] Aminatou, the Fateshifter diff --git a/Mage.Client/release/sample-decks/Commander/Tasigur BGU.dck b/Mage.Client/release/sample-decks/Commander/Tasigur BGU.dck index 6ccbf8fa47c..76402867465 100644 --- a/Mage.Client/release/sample-decks/Commander/Tasigur BGU.dck +++ b/Mage.Client/release/sample-decks/Commander/Tasigur BGU.dck @@ -1,11 +1,11 @@ 1 [MMQ:316] Dust Bowl 1 [MBS:43] Go for the Throat -1 [ALL:42] Force of Will +1 [ALL:28] Force of Will 1 [ZEN:220] Misty Rainforest 1 [10E:361] Treetop Village 1 [10E:362] Underground River 1 [ROE:115] Inquisition of Kozilek -1 [STH:137] Volrath's Stronghold +1 [STH:143] Volrath's Stronghold 1 [PLC:85] Damnation 1 [FUT:173] Tolaria West 1 [ISD:78] Snapcaster Mage @@ -23,14 +23,14 @@ 1 [GTC:240] Breeding Pool 1 [DTK:262] Forest 1 [ISD:105] Liliana of the Veil -1 [TMP:340] Wasteland +1 [TMP:330] Wasteland 1 [JUD:46] Mental Note 1 [ULG:36] Miscalculation 2 [CSP:152] Snow-Covered Island 1 [RAV:63] Remand 1 [LRW:56] Cryptic Command 1 [3ED:283] Bayou -1 [5ED:191] Sylvan Library +1 [5ED:329] Sylvan Library 1 [CMD:269] Command Tower 1 [EXO:35] Forbid 1 [DDO:36] Aetherize @@ -41,7 +41,7 @@ 1 [ARB:92] Maelstrom Pulse 1 [KTK:81] Murderous Cut 1 [TSP:48] Ancestral Vision -1 [TMP:22] Diabolic Edict +1 [TMP:128] Diabolic Edict 1 [10E:319] Crucible of Worlds 1 [M12:63] Mana Leak 1 [FUT:52] Logic Knot @@ -65,13 +65,13 @@ 1 [RTR:243] Overgrown Tomb 1 [7ED:76] Force Spike 1 [TMP:70] Intuition -1 [3ED:305] Underground Sea +1 [3ED:290] Underground Sea 1 [M15:248] Urborg, Tomb of Yawgmoth 1 [AVR:226] Cavern of Souls 1 [ISD:241] Hinterland Harbor 1 [DKA:52] Thought Scour -1 [3ED:303] Tropical Island -1 [3ED:13] Demonic Tutor +1 [3ED:288] Tropical Island +1 [3ED:105] Demonic Tutor 1 [ISD:249] Woodland Cemetery 1 [M12:73] Ponder 1 [DTK:65] Negate diff --git a/Mage.Client/release/sample-decks/Commander/Zurgo Helmsmasher RWB.dck b/Mage.Client/release/sample-decks/Commander/Zurgo Helmsmasher RWB.dck index 2e5fce7b615..550937ff3e1 100644 --- a/Mage.Client/release/sample-decks/Commander/Zurgo Helmsmasher RWB.dck +++ b/Mage.Client/release/sample-decks/Commander/Zurgo Helmsmasher RWB.dck @@ -34,7 +34,7 @@ 1 [M14:1] Ajani, Caller of the Pride 1 [M12:109] Sorin Markov 1 [M12:147] Inferno Titan -1 [ICE:278] Swords to Plowshares +1 [ICE:54] Swords to Plowshares 1 [CMD:269] Command Tower 1 [M12:222] Worldslayer 1 [M15:133] Burning Anger @@ -66,7 +66,7 @@ 1 [ZEN:203] Grappling Hook 1 [ORI:244] Battlefield Forge 1 [ORI:245] Caves of Koilos -1 [3ED:13] Demonic Tutor +1 [3ED:105] Demonic Tutor 1 [GTC:143] Aurelia, the Warleader 1 [AVR:36] Silverblade Paladin 1 [THS:85] Erebos, God of the Dead diff --git a/Mage.Client/release/sample-decks/Decks to Beat/Goblins Deck Wins TDtB ST Apr 2011.mwDeck.dck b/Mage.Client/release/sample-decks/Decks to Beat/Goblins Deck Wins TDtB ST Apr 2011.mwDeck.dck index 4920e10c15b..69eca0313b6 100644 --- a/Mage.Client/release/sample-decks/Decks to Beat/Goblins Deck Wins TDtB ST Apr 2011.mwDeck.dck +++ b/Mage.Client/release/sample-decks/Decks to Beat/Goblins Deck Wins TDtB ST Apr 2011.mwDeck.dck @@ -1,4 +1,4 @@ -1 [POR:214] Mountain +1 [POR:208] Mountain 4 [MBS:64] Goblin Wardriver 1 [WWK:145] Tectonic Edge 3 [M10:139] Goblin Chieftain @@ -13,12 +13,12 @@ 3 [P10:8] Burst Lightning 1 [ZEN:226] Teetering Peaks 1 [SOM:81] Arc Trail -1 [4ED:343] Mountain +1 [4ED:373] Mountain 2 [MM2:127] Spikeshot Elder -1 [LEA:283] Mountain +1 [LEA:292] Mountain 1 [MMQ:345] Mountain 1 [RAV:300] Mountain -2 [PGPX:6] Goblin Guide +2 [PGPX:2012a] Goblin Guide 4 [M11:135] Ember Hauler 2 [JGP:1] Lightning Bolt 1 [M10:146] Lightning Bolt @@ -26,15 +26,15 @@ 1 [M12:242] Mountain 2 [ROE:166] Staggershock 1 [C14:313] Tectonic Edge -1 [MIR:301] Mountain +1 [MIR:343] Mountain 1 [DDL:77] Mountain -2 [GRC:48] Staggershock +2 [ROE:166] Staggershock 1 [ZEN:119] Burst Lightning -1 [DD3B:60] Mountain +1 [M21:269] Mountain 3 [F11:9] Teetering Peaks 2 [SOM:104] Spikeshot Elder 1 [HOP:163] Mountain -1 [LEB:163] Lightning Bolt +1 [LEB:162] Lightning Bolt 1 [SOM:243] Mountain SB: 2 [M12:151] Manic Vandal SB: 2 [M13:141] Mark of Mutiny diff --git a/Mage.Client/release/sample-decks/Decks to Beat/Mardu Control TDtB ST Dec 2014.mwDeck.dck b/Mage.Client/release/sample-decks/Decks to Beat/Mardu Control TDtB ST Dec 2014.mwDeck.dck index 9e2509af1e5..a3c80aa2ffb 100644 --- a/Mage.Client/release/sample-decks/Decks to Beat/Mardu Control TDtB ST Dec 2014.mwDeck.dck +++ b/Mage.Client/release/sample-decks/Decks to Beat/Mardu Control TDtB ST Dec 2014.mwDeck.dck @@ -2,7 +2,7 @@ 1 [THS:127] Lightning Strike 1 [7ED:339] Mountain 1 [INV:343] Mountain -1 [ZEN:263] Mountain +1 [ZEN:242a] Mountain 1 [APC:140] Caves of Koilos 3 [KTK:22] Seeker of the Way 1 [THS:227] Temple of Silence @@ -15,7 +15,7 @@ 1 [DDL:22] Magma Jet 3 [THS:4] Chained to the Rocks 1 [10E:348] Battlefield Forge -1 [PO2:157] Mountain +1 [M21:269] Mountain 1 [SOM:238] Swamp 1 [DDO:1] Elspeth, Sun's Champion 1 [G09:6] Bloodstained Mire diff --git a/Mage.Client/release/sample-decks/Decks to Beat/Saint WW TDtB ST Jan 2012.mwDeck.dck b/Mage.Client/release/sample-decks/Decks to Beat/Saint WW TDtB ST Jan 2012.mwDeck.dck index 8cab13eec2c..2ad5f0146ba 100644 --- a/Mage.Client/release/sample-decks/Decks to Beat/Saint WW TDtB ST Jan 2012.mwDeck.dck +++ b/Mage.Client/release/sample-decks/Decks to Beat/Saint WW TDtB ST Jan 2012.mwDeck.dck @@ -1,11 +1,11 @@ -1 [WMCQ:2] Geist of Saint Traft +1 [ISD:213] Geist of Saint Traft 2 [M12:18] Gideon's Lawkeeper 1 [M12:19] Grand Abolisher 3 [C13:11] Fiend Hunter 1 [ALA:20] Oblivion Ring 3 [C14:74] Grand Abolisher 2 [M10:16] Honor of the Pure -1 [POR:216] Plains +1 [POR:196] Plains 1 [M10:233] Plains 1 [M13:225] Glacial Fortress 4 [PMBS:8] Hero of Bladehold diff --git a/Mage.Client/release/sample-decks/Duel Decks/Blessed vs. Cursed/Blessed.dck b/Mage.Client/release/sample-decks/Duel Decks/Blessed vs. Cursed/Blessed.dck index 49a6033d4f4..6bfd063f8d9 100644 --- a/Mage.Client/release/sample-decks/Duel Decks/Blessed vs. Cursed/Blessed.dck +++ b/Mage.Client/release/sample-decks/Duel Decks/Blessed vs. Cursed/Blessed.dck @@ -15,7 +15,7 @@ 1 [DDQ:16] Moorland Inquisitor 2 [DDQ:17] Rebuke 1 [DDQ:7] Doomed Traveler -4 [DDQ:35] Plains +4 [DDQ:38] Plains 1 [DDQ:32] Sharpened Pitchfork 1 [DDQ:6] Dearly Departed 1 [DDQ:14] Increasing Devotion @@ -24,16 +24,16 @@ 1 [DDQ:15] Momentary Blink 2 [DDQ:12] Gather the Townsfolk 1 [DDQ:4] Champion of the Parish -3 [DDQ:38] Island +3 [DDQ:35] Island 1 [DDQ:3] Cathedral Sanctifier 1 [DDQ:13] Goldnight Redeemer -2 [DDQ:39] Island -4 [DDQ:36] Plains +2 [DDQ:35] Island +4 [DDQ:38] Plains 1 [DDQ:10] Emancipation Angel 1 [DDQ:2] Bonds of Faith -4 [DDQ:37] Plains +4 [DDQ:38] Plains 1 [DDQ:11] Fiend Hunter 1 [DDQ:1] Geist of Saint Traft -2 [DDQ:40] Island +2 [DDQ:35] Island 1 [DDQ:31] Butcher's Cleaver 1 [DDQ:30] Tower Geist diff --git a/Mage.Client/release/sample-decks/Duel Decks/Blessed vs. Cursed/Cursed.dck b/Mage.Client/release/sample-decks/Duel Decks/Blessed vs. Cursed/Cursed.dck index 235b0f5df52..0b27c573857 100644 --- a/Mage.Client/release/sample-decks/Duel Decks/Blessed vs. Cursed/Cursed.dck +++ b/Mage.Client/release/sample-decks/Duel Decks/Blessed vs. Cursed/Cursed.dck @@ -15,19 +15,19 @@ 1 [DDQ:63] Sever the Bloodline 1 [DDQ:61] Human Frailty 2 [DDQ:62] Moan of the Unhallowed -3 [DDQ:38] Island -1 [DDQ:41] Mindbreaker Demon -3 [DDQ:39] Island +3 [DDQ:35] Island +1 [DDQ:41] Mindwrack Demon +3 [DDQ:35] Island 1 [DDQ:42] Compelling Deterrence 1 [DDQ:60] Harvester of Souls -2 [DDQ:40] Island +2 [DDQ:35] Island 1 [DDQ:46] Relentless Skaabs 1 [DDQ:45] Makeshift Mauler 1 [DDQ:44] Havengul Runebinder 1 [DDQ:69] Cobbled Wings 1 [DDQ:43] Forbidden Alchemy 2 [DDQ:68] Diregraf Captain -1 [SOI:997] Tooth Collector +1 [SOI:140] Tooth Collector 1 [DDQ:67] Victim of Night 2 [DDQ:49] Stitched Drake 1 [DDQ:66] Unbreathing Horde diff --git a/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Affinity(1) 58 World Championship 2004 (San Francisco) ST 9-5-04.dck b/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Affinity(1) 58 World Championship 2004 (San Francisco) ST 9-5-04.dck index 1c66dfd5051..49a215c6dc3 100644 --- a/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Affinity(1) 58 World Championship 2004 (San Francisco) ST 9-5-04.dck +++ b/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Affinity(1) 58 World Championship 2004 (San Francisco) ST 9-5-04.dck @@ -1,4 +1,4 @@ -1 [ATQ:88] Atog +1 [ATQ:23] Atog 2 [MRD:283] Seat of the Synod 3 [MMA:198] Arcbound Ravager 1 [HOP:136] Seat of the Synod diff --git a/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Affinity(2) 58 World Championship 2004 (San Francisco) ST 9-5-04.dck b/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Affinity(2) 58 World Championship 2004 (San Francisco) ST 9-5-04.dck index b30601649dc..dd921c42c2a 100644 --- a/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Affinity(2) 58 World Championship 2004 (San Francisco) ST 9-5-04.dck +++ b/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Affinity(2) 58 World Championship 2004 (San Francisco) ST 9-5-04.dck @@ -12,7 +12,7 @@ 2 [7ED:327] City of Brass 1 [MRD:172] Frogmite 2 [INV:299] Chromatic Sphere -2 [PGPX:3] Chrome Mox +2 [PGPX:2009] Chrome Mox 1 [MRD:151] Chromatic Sphere 1 [MRD:152] Chrome Mox 1 [5DN:113] Cranial Plating diff --git a/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Astral Slide 1 World Championship 2004 (San Francisco) ST 9-5-04.dck b/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Astral Slide 1 World Championship 2004 (San Francisco) ST 9-5-04.dck index 93ed4bf38c7..53c1fc29913 100644 --- a/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Astral Slide 1 World Championship 2004 (San Francisco) ST 9-5-04.dck +++ b/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Astral Slide 1 World Championship 2004 (San Francisco) ST 9-5-04.dck @@ -20,7 +20,7 @@ SB: 2 [DST:79] Oxidize SB: 1 [5DN:92] Rude Awakening SB: 2 [UDS:117] Plow Under SB: 2 [P05:4] Oxidize -SB: 2 [5ED:296] Circle of Protection: Red +SB: 2 [5ED:20] Circle of Protection: Red SB: 1 [MMA:160] Rude Awakening SB: 1 [9ED:11] Circle of Protection: Red SB: 1 [8ED:272] Plow Under diff --git a/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Astral Slide 58 World Championship 2004 (San Francisco) ST 9-5-04.dck b/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Astral Slide 58 World Championship 2004 (San Francisco) ST 9-5-04.dck index 365480e9428..336207beba2 100644 --- a/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Astral Slide 58 World Championship 2004 (San Francisco) ST 9-5-04.dck +++ b/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Astral Slide 58 World Championship 2004 (San Francisco) ST 9-5-04.dck @@ -23,7 +23,7 @@ SB: 1 [DST:79] Oxidize SB: 2 [UDS:117] Plow Under SB: 2 [P05:4] Oxidize -SB: 1 [LEG:237] Relic Barrier +SB: 1 [LEG:292] Relic Barrier SB: 2 [5DN:147] Relic Barrier SB: 2 [SCG:23] Silver Knight SB: 2 [DST:146] Sundering Titan diff --git a/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Doran Rock 1 World Championship 2007 (New York) ST 12-6-07.dck b/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Doran Rock 1 World Championship 2007 (New York) ST 12-6-07.dck index 2d885c39fed..87c8fdbaa8f 100644 --- a/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Doran Rock 1 World Championship 2007 (New York) ST 12-6-07.dck +++ b/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Doran Rock 1 World Championship 2007 (New York) ST 12-6-07.dck @@ -23,7 +23,7 @@ 4 [LRW:268] Gilt-Leaf Palace SB: 2 [C14:247] Loxodon Warhammer SB: 2 [LRW:250] Nath of the Gilt-Leaf -SB: 1 [HML:135] Serrated Arrows +SB: 1 [HML:110] Serrated Arrows SB: 2 [TSB:48] Stupor SB: 1 [TSB:114] Serrated Arrows SB: 3 [FUT:136] Riftsweeper diff --git a/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Dragonstorm 1 World Championship 2006 (Paris) ST 12-3-06.dck b/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Dragonstorm 1 World Championship 2006 (Paris) ST 12-3-06.dck index 002549392a0..6cc07964d07 100644 --- a/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Dragonstorm 1 World Championship 2006 (Paris) ST 12-3-06.dck +++ b/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Dragonstorm 1 World Championship 2006 (Paris) ST 12-3-06.dck @@ -12,7 +12,7 @@ 4 [RTR:247] Steam Vents 1 [TSP:270] Calciform Pools 4 [C14:173] Bogardan Hellkite -1 [PO2:46] Sleight of Hand +1 [9ED:99] Sleight of Hand 2 [TSB:60] Dragonstorm 2 [9ED:99] Sleight of Hand 8 [UNH:137] Island diff --git a/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/GB Elves 34 PT Hollywood ST 5-25-08.dck b/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/GB Elves 34 PT Hollywood ST 5-25-08.dck index 6865f55ee9f..626fac68971 100644 --- a/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/GB Elves 34 PT Hollywood ST 5-25-08.dck +++ b/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/GB Elves 34 PT Hollywood ST 5-25-08.dck @@ -1,4 +1,4 @@ -1 [LEG:250] Pendelhaven +1 [LEG:305] Pendelhaven 3 [UNH:140] Forest 4 [CMD:157] Garruk Wildspeaker 4 [10E:361] Treetop Village diff --git a/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Heartbeat 58 PT Honolulu ST 3-5-06.dck b/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Heartbeat 58 PT Honolulu ST 3-5-06.dck index c012292208f..be2ec741c79 100644 --- a/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Heartbeat 58 PT Honolulu ST 3-5-06.dck +++ b/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Heartbeat 58 PT Honolulu ST 3-5-06.dck @@ -12,7 +12,7 @@ 4 [CNS:177] Sakura-Tribe Elder 1 [UNH:139] Mountain 1 [C14:102] Compulsive Research -2 [MIR:111] Early Harvest +2 [MIR:213] Early Harvest 1 [10E:70] Boomerang 1 [DDJ:31] Invoke the Firemind 10 [UNH:137] Island diff --git a/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Izzetron 58 PT Honolulu ST 3-5-06.dck b/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Izzetron 58 PT Honolulu ST 3-5-06.dck index 0ffe78a74ab..078b6b7bc79 100644 --- a/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Izzetron 58 PT Honolulu ST 3-5-06.dck +++ b/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Izzetron 58 PT Honolulu ST 3-5-06.dck @@ -11,22 +11,22 @@ 2 [8ED:330] Urza's Tower 1 [10E:190] Blaze 4 [RAV:63] Remand -1 [ATQ:75] Urza's Mine +1 [ATQ:83a] Urza's Mine 2 [M11:154] Pyroclasm 2 [10E:114] Telling Time -2 [ME4:258] Urza's Power Plant -1 [ME4:257] Urza's Mine +2 [ME4:258a] Urza's Power Plant +1 [ME4:257a] Urza's Mine 4 [CHK:74] Meloku the Clouded Mirror 1 [10E:116] Tidings -1 [ME4:259] Urza's Tower +1 [ME4:259a] Urza's Tower 4 [CHK:72] Keiga, the Tide Star 1 [DDJ:31] Invoke the Firemind -2 [5ED:448] Urza's Power Plant +2 [5ED:428] Urza's Power Plant 1 [8ED:328] Urza's Mine 4 [M12:63] Mana Leak SB: 4 [GPT:143] Giant Solifuge SB: 1 [GPT:32] Repeal -SB: 1 [CHK:185] Ryusei, The Falling Star +SB: 1 [CHK:185] Ryusei, the Falling Star SB: 1 [DDN:72] Repeal SB: 2 [ONS:63] Annex SB: 2 [M11:154] Pyroclasm diff --git a/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Mono Red Aggro 58 PT San Diego ST 2-21-10.dck b/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Mono Red Aggro 58 PT San Diego ST 2-21-10.dck index 3121ad3ad36..b60bffedd3d 100644 --- a/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Mono Red Aggro 58 PT San Diego ST 2-21-10.dck +++ b/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Mono Red Aggro 58 PT San Diego ST 2-21-10.dck @@ -4,7 +4,7 @@ 4 [M11:149] Lightning Bolt 4 [ZEN:211] Arid Mesa 4 [ALA:103] Hell's Thunder -1 [GRC:25] Hellspark Elemental +1 [CON:65] Hellspark Elemental 13 [UNH:139] Mountain 3 [CMD:121] Earthquake 1 [CON:65] Hellspark Elemental diff --git a/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Owling Mine 34 PT Honolulu ST 3-5-06.dck b/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Owling Mine 34 PT Honolulu ST 3-5-06.dck index 8e3c8f2cdd4..daae67cbef6 100644 --- a/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Owling Mine 34 PT Honolulu ST 3-5-06.dck +++ b/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Owling Mine 34 PT Honolulu ST 3-5-06.dck @@ -5,7 +5,7 @@ 4 [RTR:247] Steam Vents 2 [PTK:42] Exhaustion 2 [UNH:139] Mountain -1 [POR:42] Balance of Power +1 [POR:41] Balance of Power 2 [SOK:162] Mikokoro, Center of the Sea 4 [SOK:154] Ebony Owl Netsuke 4 [RAV:63] Remand @@ -15,9 +15,9 @@ 4 [10E:241] Sudden Impact 1 [USG:74] Exhaustion 4 [M15:246] Shivan Reef -1 [PO2:46] Sleight of Hand +1 [9ED:99] Sleight of Hand SB: 4 [BOK:56] Threads of Disloyalty -SB: 1 [DRK:57] Blood Moon +SB: 1 [DRK:58] Blood Moon SB: 1 [9ED:176] Blood Moon SB: 3 [M12:63] Mana Leak SB: 2 [CHK:74] Meloku the Clouded Mirror diff --git a/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Rock(1) 58 World Championship 2007 (New York) ST 12-6-07.dck b/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Rock(1) 58 World Championship 2007 (New York) ST 12-6-07.dck index d238b630ef7..526b44cadc1 100644 --- a/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Rock(1) 58 World Championship 2007 (New York) ST 12-6-07.dck +++ b/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Rock(1) 58 World Championship 2007 (New York) ST 12-6-07.dck @@ -1,6 +1,6 @@ 1 [C14:247] Loxodon Warhammer 2 [M12:165] Birds of Paradise -1 [LEG:250] Pendelhaven +1 [LEG:305] Pendelhaven 2 [CSP:153] Snow-Covered Swamp 1 [ME2:243] Snow-Covered Swamp 3 [M15:103] Liliana Vess diff --git a/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Rock(2) 58 World Championship 2007 (New York) ST 12-6-07.dck b/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Rock(2) 58 World Championship 2007 (New York) ST 12-6-07.dck index f43c1aeb5d2..621e6fc143d 100644 --- a/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Rock(2) 58 World Championship 2007 (New York) ST 12-6-07.dck +++ b/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Rock(2) 58 World Championship 2007 (New York) ST 12-6-07.dck @@ -2,7 +2,7 @@ 1 [LRW:250] Nath of the Gilt-Leaf 4 [M12:165] Birds of Paradise 3 [UNH:138] Swamp -1 [LEG:250] Pendelhaven +1 [LEG:305] Pendelhaven 1 [FUT:91] Tombstalker 1 [LRW:128] Nameless Inversion 4 [FUT:153] Tarmogoyf diff --git a/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Seasons Past Control Pro Tour SOI 2016 Jon Finkel.dck b/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Seasons Past Control Pro Tour SOI 2016 Jon Finkel.dck index c28131c9926..d4017a10189 100644 --- a/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Seasons Past Control Pro Tour SOI 2016 Jon Finkel.dck +++ b/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Seasons Past Control Pro Tour SOI 2016 Jon Finkel.dck @@ -3,7 +3,7 @@ NAME:Seasons Past Control Pro Tour SOI 2016 Jon Finkel 4 [ORI:105] Languish 4 [SOM:65] Grasp of Darkness 2 [OGW:86] Kalitas, Traitor of Ghet -5 [ZEN:266] Forest +5 [ZEN:246a] Forest 2 [APC:141] Llanowar Wastes 3 [DDO:58] Evolving Wilds 1 [BFZ:180] Nissa's Renewal diff --git a/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Snow Mana Ramp 58 PT Hollywood ST 5-25-08.dck b/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Snow Mana Ramp 58 PT Hollywood ST 5-25-08.dck index 0c28c89a22b..e226b631906 100644 --- a/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Snow Mana Ramp 58 PT Hollywood ST 5-25-08.dck +++ b/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Snow Mana Ramp 58 PT Hollywood ST 5-25-08.dck @@ -6,13 +6,13 @@ 2 [FUT:144] Edge of Autumn 4 [SHM:229] Kitchen Finks 2 [F08:7] Wall of Roots -1 [MIR:151] Wall of Roots +1 [MIR:253] Wall of Roots 3 [CSP:148] Mouth of Ronom 2 [CSP:147] Highland Weald 1 [SHM:252] Grim Poppet 1 [ARC:73] Wall of Roots 4 [FUT:176] Grove of the Burnwillows -3 [ICE:347] Snow-Covered Forest +3 [ICE:383] Snow-Covered Forest 2 [CSP:155] Snow-Covered Forest 4 [CMD:199] Firespout 4 [MOR:116] Chameleon Colossus diff --git a/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Trinity 34 World Championship 2000 (Brussels) ST 8-6-00.dck b/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Trinity 34 World Championship 2000 (Brussels) ST 8-6-00.dck index 2dee183825a..da131819d1d 100644 --- a/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Trinity 34 World Championship 2000 (Brussels) ST 8-6-00.dck +++ b/Mage.Client/release/sample-decks/Top8 PT and Worlds decks (Standard)/Trinity 34 World Championship 2000 (Brussels) ST 8-6-00.dck @@ -2,9 +2,9 @@ 2 [8ED:272] Plow Under 1 [UDS:118] Rofellos, Llanowar Emissary 4 [M12:165] Birds of Paradise -4 [NMS:119] Skyshroud Poacher +4 [NEM:119] Skyshroud Poacher 2 [UDS:117] Plow Under -4 [NMS:139] Tangle Wire +4 [NEM:139] Tangle Wire 1 [UDS:134] Masticore 2 [G04:5] Deranged Hermit 4 [C14:210] Priest of Titania @@ -22,6 +22,6 @@ SB: 4 [UDS:140] Thran Foundry SB: 2 [BOK:146] Splinter SB: 1 [DDE:29] Phyrexian Processor SB: 1 [UNH:140] Forest -SB: 2 [VIS:73] Uktabi Orangutan -SB: 1 [MIR:153] Worldly Tutor -SB: 2 [NMS:111] Reverent Silence +SB: 2 [VIS:123] Uktabi Orangutan +SB: 1 [MIR:255] Worldly Tutor +SB: 2 [NEM:111] Reverent Silence From 3a1b7415091a8dff231dab6eb37d54c2533a9f11 Mon Sep 17 00:00:00 2001 From: Oleg Agafonov Date: Sat, 8 Aug 2020 23:38:47 +0400 Subject: [PATCH 180/182] Fixed test --- .../src/test/java/mage/verify/VerifyCardDataTest.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java b/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java index 62ceb0979d6..e9b3550a4fa 100644 --- a/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java +++ b/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java @@ -193,8 +193,9 @@ public class VerifyCardDataTest { skipListAddName(SKIP_LIST_SCRYFALL_DOWNLOAD_SETS, "SWS"); // Star Wars // sample decks checking - some decks can contains unimplemented cards, so ignore it + // for linux/windows build system use paths constructor skipListCreate(SKIP_LIST_SAMPLE_DECKS); - skipListAddName(SKIP_LIST_SAMPLE_DECKS, "\\Commander\\Commander 2019\\Merciless Rage.dck"); // TODO: delete after Aeon Engine implemented + skipListAddName(SKIP_LIST_SAMPLE_DECKS, Paths.get("\\Commander\\Commander 2019\\Merciless Rage.dck").toString()); // TODO: delete after Aeon Engine implemented } private final ArrayList outputMessages = new ArrayList<>(); @@ -481,7 +482,7 @@ public class VerifyCardDataTest { Collection errorsList = new ArrayList<>(); // collect all files - final String rootPath = "..\\Mage.Client\\release\\sample-decks\\"; + final String rootPath = Paths.get("..\\Mage.Client\\release\\sample-decks").toString(); Collection filesList = new ArrayList<>(); try { Files.walkFileTree(Paths.get(rootPath), new SimpleFileVisitor() { @@ -495,12 +496,12 @@ public class VerifyCardDataTest { e.printStackTrace(); errorsList.add("Error: sample deck - can't get folder content - " + e.getMessage()); } - Assert.assertTrue("Sample decks: can't find any deck files", filesList.size() > 0); + Assert.assertTrue("Sample decks: can't find any deck files in " + rootPath, filesList.size() > 0); // try to open deck files int totalErrorFiles = 0; for (Path deckFile : filesList) { - String deckName = "\\" + deckFile.toString().replace(rootPath, ""); + String deckName = deckFile.toString().replace(rootPath, ""); if (skipListHaveName(SKIP_LIST_SAMPLE_DECKS, deckName)) { continue; } From 8b2bc064cd8a9a68d32d5c7cf95e023a1ef306a2 Mon Sep 17 00:00:00 2001 From: Oleg Agafonov Date: Mon, 10 Aug 2020 18:24:21 +0400 Subject: [PATCH 181/182] Fixed test and sample decks --- ...Abzan Midrange TDtB ST Dec 2014.mwDeck.dck | 4 ++-- ...Abzan Midrange TDtB ST Nov 2014.mwDeck.dck | 4 ++-- .../Mardu Control TDtB ST Dec 2014.mwDeck.dck | 6 +++--- .../Saint WW TDtB ST Jan 2012.mwDeck.dck | 2 +- Mage.Tests/RB Aggro.dck | 10 ++++----- .../src/main/java/mage/verify/MtgJson.java | 3 ++- .../java/mage/verify/VerifyCardDataTest.java | 21 +++++++++++++------ 7 files changed, 30 insertions(+), 20 deletions(-) diff --git a/Mage.Client/release/sample-decks/Decks to Beat/Abzan Midrange TDtB ST Dec 2014.mwDeck.dck b/Mage.Client/release/sample-decks/Decks to Beat/Abzan Midrange TDtB ST Dec 2014.mwDeck.dck index 96a807222e0..72f23e2a974 100644 --- a/Mage.Client/release/sample-decks/Decks to Beat/Abzan Midrange TDtB ST Dec 2014.mwDeck.dck +++ b/Mage.Client/release/sample-decks/Decks to Beat/Abzan Midrange TDtB ST Dec 2014.mwDeck.dck @@ -24,7 +24,7 @@ 2 [M15:198] Satyr Wayfinder 2 [THS:155] Commune with the Gods 2 [THS:180] Sylvan Caryatid -1 [MBP:77] Sylvan Caryatid +1 [THS:180] Sylvan Caryatid 2 [THS:110] Whip of Erebos 1 [F14:2] Elvish Mystic 3 [KTK:81] Murderous Cut @@ -41,4 +41,4 @@ SB: 2 [KTK:8] End Hostilities SB: 1 [JOU:66] Doomwake Giant SB: 1 [C14:213] Reclamation Sage SB: 1 [THS:101] Read the Bones -SB: 1 [MBP:103] Nissa, Worldwaker +SB: 1 [M15:187] Nissa, Worldwaker diff --git a/Mage.Client/release/sample-decks/Decks to Beat/Abzan Midrange TDtB ST Nov 2014.mwDeck.dck b/Mage.Client/release/sample-decks/Decks to Beat/Abzan Midrange TDtB ST Nov 2014.mwDeck.dck index 552b2020dbe..f4aca6a7d7f 100644 --- a/Mage.Client/release/sample-decks/Decks to Beat/Abzan Midrange TDtB ST Nov 2014.mwDeck.dck +++ b/Mage.Client/release/sample-decks/Decks to Beat/Abzan Midrange TDtB ST Nov 2014.mwDeck.dck @@ -27,7 +27,7 @@ 2 [9ED:322] Llanowar Wastes 4 [THS:180] Sylvan Caryatid 1 [ARC:150] Forest -SB: 1 [MBP:101] Liliana Vess +SB: 1 [M15:103] Liliana Vess SB: 2 [M15:169] Back to Nature SB: 1 [F14:8] Bile Blight SB: 2 [BNG:61] Bile Blight @@ -35,5 +35,5 @@ SB: 1 [C14:158] Read the Bones SB: 1 [M15:187] Nissa, Worldwaker SB: 1 [KTK:8] End Hostilities SB: 2 [KTK:163] Anafenza, the Foremost -SB: 1 [MBP:103] Nissa, Worldwaker +SB: 1 [M15:187] Nissa, Worldwaker SB: 3 [BNG:65] Drown in Sorrow diff --git a/Mage.Client/release/sample-decks/Decks to Beat/Mardu Control TDtB ST Dec 2014.mwDeck.dck b/Mage.Client/release/sample-decks/Decks to Beat/Mardu Control TDtB ST Dec 2014.mwDeck.dck index a3c80aa2ffb..ad66ba7cd98 100644 --- a/Mage.Client/release/sample-decks/Decks to Beat/Mardu Control TDtB ST Dec 2014.mwDeck.dck +++ b/Mage.Client/release/sample-decks/Decks to Beat/Mardu Control TDtB ST Dec 2014.mwDeck.dck @@ -19,7 +19,7 @@ 1 [SOM:238] Swamp 1 [DDO:1] Elspeth, Sun's Champion 1 [G09:6] Bloodstained Mire -2 [MBP:98] Goblin Rabblemaster +2 [M15:145] Goblin Rabblemaster 1 [KTK:31] Wingmate Roc 2 [KTK:97] Arc Lightning 1 [9ED:320] Caves of Koilos @@ -35,14 +35,14 @@ 1 [TPR:262] Mountain SB: 1 [ULG:7] Erase SB: 1 [THS:15] Glare of Heresy -SB: 1 [MBP:75] Chandra, Pyromaster +SB: 1 [M15:134] Chandra, Pyromaster SB: 2 [THS:112] Anger of the Gods SB: 1 [THS:101] Read the Bones SB: 1 [KTK:104] Burn Away SB: 1 [THS:107] Thoughtseize SB: 1 [C14:158] Read the Bones SB: 1 [KTK:186] Mardu Charm -SB: 1 [MGDC:38] Utter End +SB: 1 [KTK:210] Utter End SB: 1 [KTK:9] Erase SB: 2 [KTK:8] End Hostilities SB: 1 [THS:9] Elspeth, Sun's Champion diff --git a/Mage.Client/release/sample-decks/Decks to Beat/Saint WW TDtB ST Jan 2012.mwDeck.dck b/Mage.Client/release/sample-decks/Decks to Beat/Saint WW TDtB ST Jan 2012.mwDeck.dck index 2ad5f0146ba..32c468e7606 100644 --- a/Mage.Client/release/sample-decks/Decks to Beat/Saint WW TDtB ST Jan 2012.mwDeck.dck +++ b/Mage.Client/release/sample-decks/Decks to Beat/Saint WW TDtB ST Jan 2012.mwDeck.dck @@ -19,7 +19,7 @@ 1 [ALA:230] Plains 2 [M10:226] Glacial Fortress 1 [M12:227] Glacial Fortress -2 [MBP:32] Mirran Crusader +2 [MBS:14] Mirran Crusader 3 [M12:3] Angelic Destiny 1 [LRW:34] Oblivion Ring 1 [ZEN:232] Plains diff --git a/Mage.Tests/RB Aggro.dck b/Mage.Tests/RB Aggro.dck index ab9cb014d87..36ad5af29b3 100644 --- a/Mage.Tests/RB Aggro.dck +++ b/Mage.Tests/RB Aggro.dck @@ -2,12 +2,12 @@ NAME:RB Aggro 1 [SOM:242] Mountain 1 [INV:344] Mountain 1 [INV:345] Mountain -1 [ZEN:263] Mountain +1 [ZEN:242a] Mountain 1 [SHM:294] Mountain -1 [ZEN:264] Mountain +1 [ZEN:242a] Mountain 1 [SHM:295] Mountain 1 [SHM:296] Mountain -1 [ZEN:262] Mountain +1 [ZEN:242a] Mountain 1 [ISD:261] Mountain 1 [ISD:260] Mountain 1 [AVR:240] Mountain @@ -19,7 +19,7 @@ NAME:RB Aggro 1 [M10:245] Mountain 1 [M10:242] Mountain 1 [M10:243] Mountain -1 [PGRU:3] Mountain +1 [PGRU:4] Mountain 1 [MRD:299] Mountain 1 [SOM:245] Mountain 1 [SOM:244] Mountain @@ -67,5 +67,5 @@ NAME:RB Aggro 1 [TSP:295] Mountain 1 [TSP:294] Mountain 1 [ISD:259] Mountain -LAYOUT MAIN:(2,1)(CMC,true,5)|()([PGRU:3],[SHM:296],[AVR:240],[SHM:295],[SHM:294],[TSP:295],[TSP:294],[10E:379],[SOM:245],[ZEN:262],[ZEN:245],[10E:378],[SOM:244],[SOM:243],[ZEN:244],[SOM:242],[ZEN:243],[ZEN:242],[ALA:243],[ALA:242],[M12:245],[CHK:299],[M12:243],[M12:244],[CHK:300],[CHK:301],[M12:242],[CHK:302],[10E:376],[M11:243],[M11:242],[M11:245],[M11:244],[MBS:152],[ALA:244],[ALA:245],[ZEN:263],[ZEN:264],[RAV:301],[RAV:300],[RAV:299],[USG:345],[USG:346],[M10:242],[RAV:302],[USG:343],[USG:344],[ISD:259],[ROE:244],[ISD:261],[ISD:260],[ROE:241],[ROE:242],[ROE:243],[MRD:301],[MRD:300],[MRD:299],[M10:244],[M10:243],[M10:245],[LRW:294],[TMP:343],[LRW:295],[LRW:296],[LRW:297],[TMP:343],[MRD:302],[TMP:343],[TMP:343],[INV:345],[INV:344]) +LAYOUT MAIN:(2,1)(CMC,true,5)|()([PGRU:4],[SHM:296],[AVR:240],[SHM:295],[SHM:294],[TSP:295],[TSP:294],[10E:379],[SOM:245],[ZEN:242a],[ZEN:245],[10E:378],[SOM:244],[SOM:243],[ZEN:244],[SOM:242],[ZEN:243],[ZEN:242],[ALA:243],[ALA:242],[M12:245],[CHK:299],[M12:243],[M12:244],[CHK:300],[CHK:301],[M12:242],[CHK:302],[10E:376],[M11:243],[M11:242],[M11:245],[M11:244],[MBS:152],[ALA:244],[ALA:245],[ZEN:242a],[ZEN:242a],[RAV:301],[RAV:300],[RAV:299],[USG:345],[USG:346],[M10:242],[RAV:302],[USG:343],[USG:344],[ISD:259],[ROE:244],[ISD:261],[ISD:260],[ROE:241],[ROE:242],[ROE:243],[MRD:301],[MRD:300],[MRD:299],[M10:244],[M10:243],[M10:245],[LRW:294],[TMP:343],[LRW:295],[LRW:296],[LRW:297],[TMP:343],[MRD:302],[TMP:343],[TMP:343],[INV:345],[INV:344]) LAYOUT SIDEBOARD:(0,0)(COLOR_IDENTITY,true,5)| diff --git a/Mage.Verify/src/main/java/mage/verify/MtgJson.java b/Mage.Verify/src/main/java/mage/verify/MtgJson.java index d3ab27b4907..705564689bb 100644 --- a/Mage.Verify/src/main/java/mage/verify/MtgJson.java +++ b/Mage.Verify/src/main/java/mage/verify/MtgJson.java @@ -115,11 +115,12 @@ public final class MtgJson { if (stream == null) { File file = new File(filename); if (!file.exists()) { + System.out.println("Downloading " + filename + " to " + file.getAbsolutePath()); URLConnection connection = new URL("https://mtgjson.com/files/" + filename).openConnection(); connection.setRequestProperty("user-agent", "xmage"); InputStream download = connection.getInputStream(); Files.copy(download, file.toPath(), StandardCopyOption.REPLACE_EXISTING); - System.out.println("Downloaded " + filename + " to " + file.getAbsolutePath()); + System.out.println("Downloading DONE"); } else { System.out.println("Using " + filename + " from " + file.getAbsolutePath()); } diff --git a/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java b/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java index e9b3550a4fa..cbe19b2bb1a 100644 --- a/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java +++ b/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java @@ -193,9 +193,10 @@ public class VerifyCardDataTest { skipListAddName(SKIP_LIST_SCRYFALL_DOWNLOAD_SETS, "SWS"); // Star Wars // sample decks checking - some decks can contains unimplemented cards, so ignore it + // file name must be related to sample-decks folder // for linux/windows build system use paths constructor skipListCreate(SKIP_LIST_SAMPLE_DECKS); - skipListAddName(SKIP_LIST_SAMPLE_DECKS, Paths.get("\\Commander\\Commander 2019\\Merciless Rage.dck").toString()); // TODO: delete after Aeon Engine implemented + skipListAddName(SKIP_LIST_SAMPLE_DECKS, Paths.get("Commander", "Commander 2019", "Merciless Rage.dck").toString()); // TODO: delete after Aeon Engine implemented } private final ArrayList outputMessages = new ArrayList<>(); @@ -481,11 +482,19 @@ public class VerifyCardDataTest { public void test_checkSampleDecks() { Collection errorsList = new ArrayList<>(); - // collect all files - final String rootPath = Paths.get("..\\Mage.Client\\release\\sample-decks").toString(); + // workaround to run verify test from IDE or from maven's project root folder + Path rootPath = Paths.get("Mage.Client", "release", "sample-decks"); + if (!Files.exists(rootPath)) { + rootPath = Paths.get("..", "Mage.Client", "release", "sample-decks"); + } + if (!Files.exists(rootPath)) { + Assert.fail("Sample decks: unknown root folder " + rootPath.toAbsolutePath().toString()); + } + + // collect all files in all root's folders Collection filesList = new ArrayList<>(); try { - Files.walkFileTree(Paths.get(rootPath), new SimpleFileVisitor() { + Files.walkFileTree(rootPath, new SimpleFileVisitor() { @Override public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { filesList.add(file); @@ -496,12 +505,12 @@ public class VerifyCardDataTest { e.printStackTrace(); errorsList.add("Error: sample deck - can't get folder content - " + e.getMessage()); } - Assert.assertTrue("Sample decks: can't find any deck files in " + rootPath, filesList.size() > 0); + Assert.assertTrue("Sample decks: can't find any deck files in " + rootPath.toAbsolutePath().toString(), filesList.size() > 0); // try to open deck files int totalErrorFiles = 0; for (Path deckFile : filesList) { - String deckName = deckFile.toString().replace(rootPath, ""); + String deckName = rootPath.relativize(deckFile).toString(); if (skipListHaveName(SKIP_LIST_SAMPLE_DECKS, deckName)) { continue; } From 994dea99b36ab07553b3b39d65ad4f265cca038b Mon Sep 17 00:00:00 2001 From: Oleg Agafonov Date: Mon, 10 Aug 2020 18:36:15 +0400 Subject: [PATCH 182/182] Images: enable images download for Double Masters --- .../mage/plugins/card/dl/sources/ScryfallImageSupportCards.java | 1 + 1 file changed, 1 insertion(+) diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java index 862af1ce0c9..2b9c5e24855 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java @@ -484,6 +484,7 @@ public class ScryfallImageSupportCards { // add("M21"); // Core Set 2021 add("JMP"); // Jumpstart + add("2XM"); // Double Masters } };