From 8b7ae19508d49c4ffd57254adf7eb8255f7250d8 Mon Sep 17 00:00:00 2001 From: leriomaggio Date: Fri, 28 May 2021 15:37:44 +0000 Subject: [PATCH] FIX and Impros to CardEdition, CardInSet and Reader - Reader has a new updated regexp to deal with non-numerical collectorNumbers - CardInSet have been now made sortable based on CollectorNumber. To do so, collectorNumbers are transformed accordingly to allow for natural ordering (as expected) instead of lexicographic order. - CardEdition now return cards (CardInSet) as sorted, to allow for correct artIndex matching when creating corresponding `PaperCard` instances. Moreover, `compareTo` of card edition has been improved to also take into account set name (in cases of same release date). --- forge-core/src/main/java/forge/card/CardEdition.java | 12 ++++++++---- forge-core/src/main/java/forge/item/PaperCard.java | 2 ++ 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/forge-core/src/main/java/forge/card/CardEdition.java b/forge-core/src/main/java/forge/card/CardEdition.java index 81329c740f9..c5879a88b3e 100644 --- a/forge-core/src/main/java/forge/card/CardEdition.java +++ b/forge-core/src/main/java/forge/card/CardEdition.java @@ -250,6 +250,7 @@ public final class CardEdition implements Comparable { // immutable private String[] chaosDraftThemes = new String[0]; private final ListMultimap cardMap; + private final List cardsInSet; private final Map tokenNormalized; // custom print sheets that will be loaded lazily private final Map> customPrintSheetsToParse; @@ -259,13 +260,18 @@ public final class CardEdition implements Comparable { // immutable private CardEdition(ListMultimap cardMap, Map tokens, Map> customPrintSheetsToParse) { this.cardMap = cardMap; + this.cardsInSet = new ArrayList<>(cardMap.values()); + Collections.sort(cardsInSet); this.tokenNormalized = tokens; this.customPrintSheetsToParse = customPrintSheetsToParse; } private CardEdition(CardInSet[] cards, Map tokens) { + List cardsList = Arrays.asList(cards); this.cardMap = ArrayListMultimap.create(); - this.cardMap.replaceValues("cards", Arrays.asList(cards)); + this.cardMap.replaceValues("cards", cardsList); + this.cardsInSet = new ArrayList<>(cardsList); + Collections.sort(cardsInSet); this.tokenNormalized = tokens; this.customPrintSheetsToParse = new HashMap<>(); } @@ -331,8 +337,6 @@ public final class CardEdition implements Comparable { // immutable public List getCards() { return cardMap.get("cards"); } public List getAllCardsInSet() { - ArrayList cardsInSet = Lists.newArrayList(cardMap.values()); - Collections.sort(cardsInSet); return cardsInSet; } @@ -389,7 +393,7 @@ public final class CardEdition implements Comparable { // immutable } public boolean isLargeSet() { - return getAllCardsInSet().size() > 200 && !smallSetOverride; + return this.cardsInSet.size() > 200 && !smallSetOverride; } public int getCntBoosterPictures() { diff --git a/forge-core/src/main/java/forge/item/PaperCard.java b/forge-core/src/main/java/forge/item/PaperCard.java index 16e5d0ea8cb..7879089856c 100644 --- a/forge-core/src/main/java/forge/item/PaperCard.java +++ b/forge-core/src/main/java/forge/item/PaperCard.java @@ -308,6 +308,8 @@ public final class PaperCard implements Comparable, InventoryItemFro private String retrieveCollectorNumber() { CardEdition.Collection editions = StaticData.instance().getEditions(); CardEdition edition = editions.get(this.edition); + if (edition == null) // don't bother continuing - non-existing card! + return NO_COLLECTOR_NUMBER; int artIndexCount = 0; String collectorNumberInEdition = ""; for (CardEdition.CardInSet card : edition.getAllCardsInSet()) {