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 463005b8d5e..fa6dc551c34 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 @@ -250,7 +250,9 @@ public enum ScryfallImageSource implements CardImageSource { String localizedCode = languageAliases.getOrDefault(preferredLanguage, defaultCode); // loc example: https://api.scryfall.com/cards/xln/121/ru?format=image - // TODO: do not use API at all? It's can help with scryfall request limits (1 request instead 2) + // WARNING, some cards haven't direct images and uses random GUID: + // As example: Raging Ravine - https://scryfall.com/card/uma/249/raging-ravine + // https://img.scryfall.com/cards/large/front/5/4/54f41726-e0bb-4154-a2db-4b68b50f5032.jpg String baseUrl = null; String alternativeUrl = null; @@ -272,12 +274,19 @@ public enum ScryfallImageSource implements CardImageSource { } } - // special card number like "103a" already compatible + // special card number like "103a" and "U123" already compatible if (baseUrl == null && card.isCollectorIdWithStr()) { - baseUrl = "https://img.scryfall.com/cards/large/" + localizedCode + "/" + formatSetName(card.getSet()) + "/" - + card.getCollectorId() + ".jpg"; - alternativeUrl = "https://img.scryfall.com/cards/large/" + defaultCode + "/" + formatSetName(card.getSet()) + "/" - + card.getCollectorId() + ".jpg"; + // WARNING, after 2018 it's not compatible and some new sets have GUID files instead card numbers + // TODO: replace card number links to API calls (need test with lands, alternative images and double faces), replace not working images by direct links + if (card.getCollectorId().startsWith("U")) { + // fix for Ultimate Box Topper (PUMA) -- need to use API + // ignored and go to API call at the end + } else { + baseUrl = "https://img.scryfall.com/cards/large/" + localizedCode + "/" + formatSetName(card.getSet()) + "/" + + card.getCollectorId() + ".jpg"; + alternativeUrl = "https://img.scryfall.com/cards/large/" + defaultCode + "/" + formatSetName(card.getSet()) + "/" + + card.getCollectorId() + ".jpg"; + } } // double faced cards do not supports by API (need direct link for img) diff --git a/Mage/src/main/java/mage/util/CardUtil.java b/Mage/src/main/java/mage/util/CardUtil.java index ac9a02f558f..53da40ceef7 100644 --- a/Mage/src/main/java/mage/util/CardUtil.java +++ b/Mage/src/main/java/mage/util/CardUtil.java @@ -362,7 +362,7 @@ public final class CardUtil { /** * Parse card number as int (support base [123] and alternative numbers - * [123b]). + * [123b], [U123]). * * @param cardNumber origin card number * @return int @@ -373,10 +373,15 @@ public final class CardUtil { throw new IllegalArgumentException("Card number is empty."); } - if (Character.isDigit(cardNumber.charAt(cardNumber.length() - 1))) { - return Integer.parseInt(cardNumber); - } else { + if (!Character.isDigit(cardNumber.charAt(0))) { + // U123 + return Integer.parseInt(cardNumber.substring(1, cardNumber.length())); + } else if (!Character.isDigit(cardNumber.charAt(cardNumber.length() - 1))) { + // 123b return Integer.parseInt(cardNumber.substring(0, cardNumber.length() - 1)); + } else { + // 123 + return Integer.parseInt(cardNumber); } }