mirror of
https://github.com/correl/mage.git
synced 2024-11-25 03:00:11 +00:00
suppert mtgjson v4
This commit is contained in:
parent
2e17cb334e
commit
d9b25cbac1
10 changed files with 136 additions and 21 deletions
8
Mage.Verify/src/main/java/mage/verify/Booster.java
Normal file
8
Mage.Verify/src/main/java/mage/verify/Booster.java
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
package mage.verify;
|
||||||
|
|
||||||
|
public class Booster {
|
||||||
|
|
||||||
|
public Booster(String mythic){
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
12
Mage.Verify/src/main/java/mage/verify/ForeignData.java
Normal file
12
Mage.Verify/src/main/java/mage/verify/ForeignData.java
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
package mage.verify;
|
||||||
|
|
||||||
|
public class ForeignData {
|
||||||
|
|
||||||
|
|
||||||
|
public String language;
|
||||||
|
public String name;
|
||||||
|
public String type;
|
||||||
|
public String text;
|
||||||
|
public String flavorText;
|
||||||
|
public String multiverseId;
|
||||||
|
}
|
|
@ -3,10 +3,23 @@ package mage.verify;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
class JsonCard {
|
class JsonCard {
|
||||||
|
public String uuid;
|
||||||
|
public String convertedManaCost;
|
||||||
|
public List<ForeignData> foreignData;
|
||||||
|
public boolean isReserved;
|
||||||
|
public String side;
|
||||||
|
public Legality legalities;
|
||||||
|
public List<String> printings;
|
||||||
|
public List<Ruling> rulings;
|
||||||
|
public List<String> colorIndicator;
|
||||||
public String layout;
|
public String layout;
|
||||||
public String name;
|
public String name;
|
||||||
public List<String> names; // flip cards
|
public List<String> names; // flip cards
|
||||||
public String manaCost;
|
public String manaCost;
|
||||||
|
public boolean hasFoil;
|
||||||
|
public boolean hasNonFoil;
|
||||||
|
public String multiverseId;
|
||||||
|
public String frameVersion;
|
||||||
public int cmc;
|
public int cmc;
|
||||||
public List<String> colors;
|
public List<String> colors;
|
||||||
public List<String> colorIdentity;
|
public List<String> colorIdentity;
|
||||||
|
@ -22,6 +35,10 @@ class JsonCard {
|
||||||
public boolean starter; // only available in boxed sets and not in boosters
|
public boolean starter; // only available in boxed sets and not in boosters
|
||||||
public int hand; // vanguard
|
public int hand; // vanguard
|
||||||
public int life; // vanguard
|
public int life; // vanguard
|
||||||
|
public String originalText;
|
||||||
|
public String originalType;
|
||||||
|
public String flavorText;
|
||||||
|
public boolean isOnlineOnly;
|
||||||
|
|
||||||
// only available in AllSets.json
|
// only available in AllSets.json
|
||||||
public String artist;
|
public String artist;
|
||||||
|
@ -37,4 +54,6 @@ class JsonCard {
|
||||||
public String border;
|
public String border;
|
||||||
public String watermark;
|
public String watermark;
|
||||||
public boolean timeshifted;
|
public boolean timeshifted;
|
||||||
|
public String borderColor;
|
||||||
|
public boolean isOversized;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
package mage.verify;
|
package mage.verify;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
@ -21,4 +23,14 @@ class JsonSet {
|
||||||
public String mkm_id;
|
public String mkm_id;
|
||||||
public String mkm_name;
|
public String mkm_name;
|
||||||
public Map<String, String> translations;
|
public Map<String, String> translations;
|
||||||
|
public int baseSetSize;
|
||||||
|
@JsonIgnore
|
||||||
|
public List<Booster> boosterV3;
|
||||||
|
public String borderColor;
|
||||||
|
public Meta meta;
|
||||||
|
public String mtgoCode;
|
||||||
|
public List<Token> tokens;
|
||||||
|
public int totalSetSize;
|
||||||
|
public boolean isOnlineOnly;
|
||||||
|
public boolean isFoilOnly;
|
||||||
}
|
}
|
||||||
|
|
19
Mage.Verify/src/main/java/mage/verify/Legality.java
Normal file
19
Mage.Verify/src/main/java/mage/verify/Legality.java
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
package mage.verify;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||||
|
|
||||||
|
public class Legality {
|
||||||
|
@JsonProperty("1v1")
|
||||||
|
public String oneVersusOne;
|
||||||
|
public String commander;
|
||||||
|
public String duel;
|
||||||
|
public String legacy;
|
||||||
|
public String penny;
|
||||||
|
public String vintage;
|
||||||
|
public String frontier;
|
||||||
|
public String modern;
|
||||||
|
public String pauper;
|
||||||
|
public String brawl;
|
||||||
|
public String future;
|
||||||
|
public String standard;
|
||||||
|
}
|
6
Mage.Verify/src/main/java/mage/verify/Meta.java
Normal file
6
Mage.Verify/src/main/java/mage/verify/Meta.java
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
package mage.verify;
|
||||||
|
|
||||||
|
public class Meta {
|
||||||
|
public String date;
|
||||||
|
public String version;
|
||||||
|
}
|
|
@ -12,8 +12,7 @@ import java.net.URL;
|
||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
import java.nio.file.StandardCopyOption;
|
import java.nio.file.StandardCopyOption;
|
||||||
import java.text.Normalizer;
|
import java.text.Normalizer;
|
||||||
import java.util.HashMap;
|
import java.util.*;
|
||||||
import java.util.Map;
|
|
||||||
import java.util.zip.ZipInputStream;
|
import java.util.zip.ZipInputStream;
|
||||||
|
|
||||||
public final class MtgJson {
|
public final class MtgJson {
|
||||||
|
@ -61,6 +60,16 @@ public final class MtgJson {
|
||||||
static {
|
static {
|
||||||
try {
|
try {
|
||||||
cards = loadAllCards();
|
cards = loadAllCards();
|
||||||
|
List<String> oldKeys = new ArrayList<>();
|
||||||
|
Map<String, JsonCard> newKeys = new HashMap<>();
|
||||||
|
for (String key : cards.keySet()) {
|
||||||
|
if (key.contains("(")) {
|
||||||
|
newKeys.put(key.replaceAll("\\(.*\\)", "").trim(), cards.get(key));
|
||||||
|
oldKeys.add(key);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
cards.putAll(newKeys);
|
||||||
|
cards.keySet().removeAll(oldKeys);
|
||||||
addAliases(cards);
|
addAliases(cards);
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
throw new RuntimeException(e);
|
throw new RuntimeException(e);
|
||||||
|
@ -95,7 +104,7 @@ public final class MtgJson {
|
||||||
if (stream == null) {
|
if (stream == null) {
|
||||||
File file = new File(filename);
|
File file = new File(filename);
|
||||||
if (!file.exists()) {
|
if (!file.exists()) {
|
||||||
InputStream download = new URL("http://mtgjson.com/json/" + filename).openStream();
|
InputStream download = new URL("http://mtgjson.com/v4/json/" + filename).openStream();
|
||||||
Files.copy(download, file.toPath(), StandardCopyOption.REPLACE_EXISTING);
|
Files.copy(download, file.toPath(), StandardCopyOption.REPLACE_EXISTING);
|
||||||
System.out.println("Downloaded " + filename + " to " + file.getAbsolutePath());
|
System.out.println("Downloaded " + filename + " to " + file.getAbsolutePath());
|
||||||
} else {
|
} else {
|
||||||
|
@ -133,6 +142,7 @@ public final class MtgJson {
|
||||||
name = name.replace("'", "\""); // for Kongming, "Sleeping Dragon" & Pang Tong, "Young Phoenix"
|
name = name.replace("'", "\""); // for Kongming, "Sleeping Dragon" & Pang Tong, "Young Phoenix"
|
||||||
ref = reference.get(name);
|
ref = reference.get(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
return ref;
|
return ref;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
6
Mage.Verify/src/main/java/mage/verify/Ruling.java
Normal file
6
Mage.Verify/src/main/java/mage/verify/Ruling.java
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
package mage.verify;
|
||||||
|
|
||||||
|
public class Ruling {
|
||||||
|
public String text;
|
||||||
|
public String date;
|
||||||
|
}
|
19
Mage.Verify/src/main/java/mage/verify/Token.java
Normal file
19
Mage.Verify/src/main/java/mage/verify/Token.java
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
package mage.verify;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class Token {
|
||||||
|
public String artist;
|
||||||
|
public String borderColor;
|
||||||
|
public List<String> colorIdentity;
|
||||||
|
public List<String> colors;
|
||||||
|
public String name;
|
||||||
|
public String number;
|
||||||
|
public String power;
|
||||||
|
public String toughness;
|
||||||
|
public List<String> reverseRelated;
|
||||||
|
public String text;
|
||||||
|
public String type;
|
||||||
|
public String uuid;
|
||||||
|
public String watermark;
|
||||||
|
}
|
|
@ -1,14 +1,13 @@
|
||||||
package mage.verify;
|
package mage.verify;
|
||||||
|
|
||||||
import mage.ObjectColor;
|
import mage.ObjectColor;
|
||||||
import mage.abilities.Ability;
|
import mage.abilities.keyword.DevoidAbility;
|
||||||
import mage.abilities.keyword.MultikickerAbility;
|
import mage.abilities.keyword.MultikickerAbility;
|
||||||
import mage.cards.*;
|
import mage.cards.*;
|
||||||
import mage.cards.basiclands.BasicLand;
|
import mage.cards.basiclands.BasicLand;
|
||||||
import mage.cards.repository.CardRepository;
|
|
||||||
import mage.cards.repository.CardScanner;
|
|
||||||
import mage.constants.CardType;
|
import mage.constants.CardType;
|
||||||
import mage.constants.Rarity;
|
import mage.constants.Rarity;
|
||||||
|
import mage.constants.SubType;
|
||||||
import mage.constants.SuperType;
|
import mage.constants.SuperType;
|
||||||
import mage.game.permanent.token.Token;
|
import mage.game.permanent.token.Token;
|
||||||
import mage.game.permanent.token.TokenImpl;
|
import mage.game.permanent.token.TokenImpl;
|
||||||
|
@ -232,7 +231,7 @@ public class VerifyCardDataTest {
|
||||||
// replace codes for aliases
|
// replace codes for aliases
|
||||||
String searchSet = MtgJson.mtgJsonToXMageCodes.getOrDefault(refSet.code, refSet.code);
|
String searchSet = MtgJson.mtgJsonToXMageCodes.getOrDefault(refSet.code, refSet.code);
|
||||||
|
|
||||||
ExpansionSet mageSet = Sets.findSet(searchSet);
|
ExpansionSet mageSet = Sets.findSet(searchSet.toUpperCase());
|
||||||
if (mageSet == null) {
|
if (mageSet == null) {
|
||||||
totalMissingSets = totalMissingSets + 1;
|
totalMissingSets = totalMissingSets + 1;
|
||||||
totalMissingCards = totalMissingCards + refSet.cards.size();
|
totalMissingCards = totalMissingCards + refSet.cards.size();
|
||||||
|
@ -383,7 +382,7 @@ public class VerifyCardDataTest {
|
||||||
// check
|
// check
|
||||||
for (ExpansionSet.SetCardInfo card : set.getSetCardInfo()) {
|
for (ExpansionSet.SetCardInfo card : set.getSetCardInfo()) {
|
||||||
boolean cardHaveDoubleName = (doubleNames.getOrDefault(card.getName(), 0) > 1);
|
boolean cardHaveDoubleName = (doubleNames.getOrDefault(card.getName(), 0) > 1);
|
||||||
boolean cardHaveVariousSetting = card.getGraphicInfo() == null ? false : card.getGraphicInfo().getUsesVariousArt();
|
boolean cardHaveVariousSetting = card.getGraphicInfo() != null && card.getGraphicInfo().getUsesVariousArt();
|
||||||
|
|
||||||
if (cardHaveDoubleName && !cardHaveVariousSetting) {
|
if (cardHaveDoubleName && !cardHaveVariousSetting) {
|
||||||
errorsList.add("error, founded double card names, but UsesVariousArt is not true: " + set.getCode() + " - " + set.getName() + " - " + card.getName() + " - " + card.getCardNumber());
|
errorsList.add("error, founded double card names, but UsesVariousArt is not true: " + set.getCode() + " - " + set.getName() + " - " + card.getName() + " - " + card.getCardNumber());
|
||||||
|
@ -569,17 +568,22 @@ public class VerifyCardDataTest {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Collection<String> expected = ref.colors;
|
Set<String> expected = new HashSet<>();
|
||||||
ObjectColor color = card.getColor(null);
|
if (ref.colors != null) {
|
||||||
if (expected == null) {
|
expected.addAll(ref.colors);
|
||||||
expected = Collections.emptyList();
|
|
||||||
}
|
}
|
||||||
|
if(card.isFlipCard()){
|
||||||
|
expected.addAll(ref.colorIdentity);
|
||||||
|
}
|
||||||
|
|
||||||
|
ObjectColor color = card.getColor(null);
|
||||||
|
|
||||||
if (expected.size() != color.getColorCount()
|
if (expected.size() != color.getColorCount()
|
||||||
|| (color.isBlack() && !expected.contains("Black"))
|
|| (color.isBlack() && !expected.contains("B"))
|
||||||
|| (color.isBlue() && !expected.contains("Blue"))
|
|| (color.isBlue() && !expected.contains("U"))
|
||||||
|| (color.isGreen() && !expected.contains("Green"))
|
|| (color.isGreen() && !expected.contains("G"))
|
||||||
|| (color.isRed() && !expected.contains("Red"))
|
|| (color.isRed() && !expected.contains("R"))
|
||||||
|| (color.isWhite() && !expected.contains("White"))) {
|
|| (color.isWhite() && !expected.contains("W"))) {
|
||||||
fail(card, "colors", color + " != " + expected);
|
fail(card, "colors", color + " != " + expected);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -601,7 +605,7 @@ public class VerifyCardDataTest {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!eqSet(card.getSubtype(null).stream().map(p -> p.toString()).collect(Collectors.toSet()), expected)) {
|
if (!eqSet(card.getSubtype(null).stream().map(SubType::toString).collect(Collectors.toSet()), expected)) {
|
||||||
fail(card, "subtypes", card.getSubtype(null) + " != " + expected);
|
fail(card, "subtypes", card.getSubtype(null) + " != " + expected);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -628,11 +632,11 @@ public class VerifyCardDataTest {
|
||||||
}
|
}
|
||||||
|
|
||||||
// special check: kicker ability must be in rules
|
// special check: kicker ability must be in rules
|
||||||
if (card.getAbilities().containsClass(MultikickerAbility.class) && !card.getRules().stream().anyMatch(rule -> rule.contains("Multikicker"))) {
|
if (card.getAbilities().containsClass(MultikickerAbility.class) && card.getRules().stream().noneMatch(rule -> rule.contains("Multikicker"))) {
|
||||||
fail(card, "abilities", "card have Multikicker ability, but missing it in rules text");
|
fail(card, "abilities", "card have Multikicker ability, but missing it in rules text");
|
||||||
}
|
}
|
||||||
|
|
||||||
// spells have only 1 abilities
|
// spells have only 1 ability
|
||||||
if (card.isSorcery() || card.isInstant()) {
|
if (card.isSorcery() || card.isInstant()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -697,7 +701,7 @@ public class VerifyCardDataTest {
|
||||||
|
|
||||||
String expected = ref.manaCost;
|
String expected = ref.manaCost;
|
||||||
String cost = join(card.getManaCost().getSymbols());
|
String cost = join(card.getManaCost().getSymbols());
|
||||||
if (cost != null && cost.isEmpty()) {
|
if (cost.isEmpty()) {
|
||||||
cost = null;
|
cost = null;
|
||||||
}
|
}
|
||||||
if (cost != null) {
|
if (cost != null) {
|
||||||
|
|
Loading…
Reference in a new issue