diff --git a/forge-core/src/main/java/forge/card/CardDb.java b/forge-core/src/main/java/forge/card/CardDb.java index 2a615dcecff..403c1569441 100644 --- a/forge-core/src/main/java/forge/card/CardDb.java +++ b/forge-core/src/main/java/forge/card/CardDb.java @@ -445,6 +445,12 @@ public void loadCard(String cardName, String setCode, CardRules cr) { return; } } + // addSetCard appends unconditionally, so skip if this card's printing from this set + // is already loaded (presence in other sets isn't enough — loadCard also adds new-set printings) + CardEdition guardEd = editions.get(setCode); + if (guardEd != null && !guardEd.equals(CardEdition.UNKNOWN) && hasPrintingInSet(cr, guardEd)) { + return; + } boolean reIndexNecessary = false; CardEdition ed = editions.get(setCode); if (ed == null || ed.equals(CardEdition.UNKNOWN)) { @@ -462,6 +468,18 @@ public void loadCard(String cardName, String setCode, CardRules cr) { } } + /** True if a printing of this card from edition is already loaded (no side effects, unlike getCardFromSet). */ + private boolean hasPrintingInSet(CardRules cr, CardEdition edition) { + String code1 = edition.getCode(), code2 = edition.getCode2(); + for (PaperCard pc : getAllCards(cr)) { + String ed = pc.getEdition(); + if (ed.equalsIgnoreCase(code1) || ed.equalsIgnoreCase(code2)) { + return true; + } + } + return false; + } + public void initialize(boolean logMissingPerEdition, boolean logMissingSummary, boolean enableUnknownCards) { Set allMissingCards = new LinkedHashSet<>(); List missingCards = new ArrayList<>();