From 735588cc0d87150c954ae7e3712c4935d7c77e7b Mon Sep 17 00:00:00 2001 From: Oleg Agafonov Date: Sat, 8 Aug 2020 13:05:38 +0400 Subject: [PATCH] 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 31ec55a146..7be83dd13b 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 aa4427da80..a7342e287f 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 e015de24b7..6d677e817a 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 0ac253ec00..05dc6dac50 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 448fa0ffc4..2d7be3233e 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 d12ac8e78b..03aace3d54 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 0000000000..59885dda6f --- /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 0000000000..f6377caa69 --- /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 0000000000..c940694eda --- /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 0000000000..9d2e6a1748 --- /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 0000000000..36f01b73e1 --- /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 0000000000..1e953d56af --- /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 228d227f16..0000000000 --- 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 e0ec55cc55..2e6fdebbbf 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 a338aff787..e9081d98ca 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 e955789468..dfea6c17dd 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 6d2d4af063..d3ab27b490 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 bcde89e549..11dd028c45 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 f331a07819..92be3f28fc 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|