diff --git a/forge-core/src/main/java/forge/card/CardDb.java b/forge-core/src/main/java/forge/card/CardDb.java index 2cc99f773f6..189439f7c33 100644 --- a/forge-core/src/main/java/forge/card/CardDb.java +++ b/forge-core/src/main/java/forge/card/CardDb.java @@ -97,7 +97,7 @@ public final class CardDb implements ICardDatabase { isFoil = true; } - int artIndex = artPos > 0 ? Integer.parseInt(nameParts[artPos]) : -1; + int artIndex = artPos > 0 ? Integer.parseInt(nameParts[artPos])-1 : -1; String setName = setPos > 0 ? nameParts[setPos] : null; if( "???".equals(setName) ) setName = null; @@ -173,15 +173,18 @@ public final class CardDb implements ICardDatabase { @Override public PaperCard getCard(final String cardName, String setName) { CardRequest request = CardRequest.fromString(cardName); - request.edition = setName; + if(setName != null) + request.edition = setName; return tryGetCard(request); } @Override public PaperCard getCard(final String cardName, String setName, int artIndex) { CardRequest request = CardRequest.fromString(cardName); - request.edition = setName; - request.artIndex = artIndex; + if(setName != null) + request.edition = setName; + if(artIndex >= 0) + request.artIndex = artIndex; return tryGetCard(request); } @@ -191,10 +194,17 @@ public final class CardDb implements ICardDatabase { PaperCard result = null; + String reqEdition = request.edition; + if(reqEdition != null && !editions.contains(reqEdition)) { + CardEdition edition = editions.get(reqEdition); + if( edition != null ) + reqEdition = edition.getCode(); + } + if ( request.artIndex < 0 ) { // this stands for 'random art' List candidates = new ArrayList(9); // 9 cards with same name per set is a maximum of what has been printed (Arnchenemy) for( PaperCard pc : cards ) { - if( pc.getEdition().equalsIgnoreCase(request.edition) || request.edition == null ) + if( pc.getEdition().equalsIgnoreCase(reqEdition) || reqEdition == null ) candidates.add(pc); } @@ -203,7 +213,7 @@ public final class CardDb implements ICardDatabase { result = Aggregates.random(candidates); } else { for( PaperCard pc : cards ) { - if( pc.getEdition().equalsIgnoreCase(request.edition) && request.artIndex == pc.getArtIndex() ) { + if( pc.getEdition().equalsIgnoreCase(reqEdition) && request.artIndex == pc.getArtIndex() ) { result = pc; break; } diff --git a/forge-core/src/main/java/forge/card/CardEdition.java b/forge-core/src/main/java/forge/card/CardEdition.java index d1cc7b9587d..1070bc068ed 100644 --- a/forge-core/src/main/java/forge/card/CardEdition.java +++ b/forge-core/src/main/java/forge/card/CardEdition.java @@ -347,6 +347,7 @@ public final class CardEdition implements Comparable { // immutable } + public Iterable getOrderedEditions() { List res = Lists.newArrayList(this); Collections.sort(res); diff --git a/forge-core/src/main/java/forge/deck/CardPool.java b/forge-core/src/main/java/forge/deck/CardPool.java index 0d221f8c24b..8c9d2a268be 100644 --- a/forge-core/src/main/java/forge/deck/CardPool.java +++ b/forge-core/src/main/java/forge/deck/CardPool.java @@ -55,12 +55,12 @@ public class CardPool extends ItemPool { this.add(cardName, setCode, -1, amount); } + // NOTE: ART indices are "1" -based public void add(final String cardName, final String setCode, final int artIndex, final int amount) { - boolean isCommonCard = true; PaperCard cp = StaticData.instance().getCommonCards().getCard(cardName, setCode, artIndex); - if ( cp == null ) { - cp = StaticData.instance().getVariantCards().getCard(cardName, setCode, artIndex); - isCommonCard = false; + boolean isCommonCard = cp != null; + if ( !isCommonCard ) { + cp = StaticData.instance().getVariantCards().getCard(cardName, setCode); } int artCount = isCommonCard @@ -73,7 +73,7 @@ public class CardPool extends ItemPool { } else { // random art index specified, make sure we get different groups of cards with different art int[] artGroups = MyRandom.splitIntoRandomGroups(amount, artCount); - for (int i = 0; i < artGroups.length; i++) { + for (int i = 1; i <= artGroups.length; i++) { PaperCard cp_random = isCommonCard ? StaticData.instance().getCommonCards().getCard(cardName, setCode, i) : StaticData.instance().getVariantCards().getCard(cardName, setCode, i); this.add(cp_random, artGroups[i]); } diff --git a/forge-gui/src/main/java/forge/gui/deckeditor/controllers/CEditorDraftingProcess.java b/forge-gui/src/main/java/forge/gui/deckeditor/controllers/CEditorDraftingProcess.java index 405bc7c8ee3..d95faf5cd0c 100644 --- a/forge-gui/src/main/java/forge/gui/deckeditor/controllers/CEditorDraftingProcess.java +++ b/forge-gui/src/main/java/forge/gui/deckeditor/controllers/CEditorDraftingProcess.java @@ -162,11 +162,11 @@ public class CEditorDraftingProcess extends ACEditorBase { final int numArt = Singletons.getMagicDb().getCommonCards().getArtCount(landName, landSet); if (Singletons.getModel().getPreferences().getPrefBoolean(FPref.UI_RANDOM_ART_IN_POOLS)) { - for (int i = 0; i < numArt; i++) { + for (int i = 1; i <= numArt; i++) { deck.get(DeckSection.Sideboard).add(landName, landSet, i, numArt > 1 ? landsCount : 30); } } else { - deck.get(DeckSection.Sideboard).add(landName, landSet, numArt > 1 ? MyRandom.getRandom().nextInt(numArt) : 0, 30); + deck.get(DeckSection.Sideboard).add(landName, landSet, 30); } } diff --git a/forge-gui/src/main/java/forge/gui/home/sanctioned/CSubmenuSealed.java b/forge-gui/src/main/java/forge/gui/home/sanctioned/CSubmenuSealed.java index 840707db252..0c95a05d8b5 100644 --- a/forge-gui/src/main/java/forge/gui/home/sanctioned/CSubmenuSealed.java +++ b/forge-gui/src/main/java/forge/gui/home/sanctioned/CSubmenuSealed.java @@ -178,11 +178,11 @@ public enum CSubmenuSealed implements ICDoc { final int numArt = Singletons.getMagicDb().getCommonCards().getArtCount(element, sd.getLandSetCode()); if (Singletons.getModel().getPreferences().getPrefBoolean(FPref.UI_RANDOM_ART_IN_POOLS)) { - for (int i = 0; i < numArt; i++) { + for (int i = 1; i <= numArt; i++) { deck.get(DeckSection.Sideboard).add(element, sd.getLandSetCode(), i, numArt > 1 ? landsCount : 30); } } else { - deck.get(DeckSection.Sideboard).add(element, sd.getLandSetCode(), numArt > 1 ? MyRandom.getRandom().nextInt(numArt) : 0, 30); + deck.get(DeckSection.Sideboard).add(element, sd.getLandSetCode(), 30); } }