diff --git a/forge-core/src/main/java/forge/StaticData.java b/forge-core/src/main/java/forge/StaticData.java index 0d988fd859f..d61cdc28594 100644 --- a/forge-core/src/main/java/forge/StaticData.java +++ b/forge-core/src/main/java/forge/StaticData.java @@ -37,6 +37,7 @@ public class StaticData { private final String blockDataFolder; private final CardDb commonCards; + private final CardDb commonCardsforDeckEditor; private final CardDb variantCards; private final CardDb customCards; private final TokenDb allTokens; @@ -108,11 +109,14 @@ public class StaticData { commonCards = new CardDb(regularCards, editions); variantCards = new CardDb(variantsCards, editions); customCards = new CardDb(customizedCards, customEditions); + commonCardsforDeckEditor = new CardDb(regularCards, editions); //must initialize after establish field values for the sake of card image logic - commonCards.initialize(false, false, enableUnknownCards, loadNonLegalCards); - variantCards.initialize(false, false, enableUnknownCards, loadNonLegalCards); - customCards.initialize(false, false, enableUnknownCards, loadNonLegalCards); + commonCards.initialize(false, false, enableUnknownCards, loadNonLegalCards, false); + variantCards.initialize(false, false, enableUnknownCards, loadNonLegalCards, false); + customCards.initialize(false, false, enableUnknownCards, loadNonLegalCards, false); + //cannot filter commonCards unless we don't allow to put duplicate parts on database, commonCardsforDeckEditor is strictly for Deck Editor use + commonCardsforDeckEditor.initialize(false, false, enableUnknownCards, loadNonLegalCards, true); } { @@ -129,8 +133,10 @@ public class StaticData { { if (customCards.getAllCards().size() > 0) { Collection paperCards = customCards.getAllCards(); - for(PaperCard p: paperCards) + for(PaperCard p: paperCards) { commonCards.addCard(p); + commonCardsforDeckEditor.addCard(p, true); + } } } } @@ -239,7 +245,13 @@ public class StaticData { } public CardDb getCommonCards() { - return commonCards; + return getCommonCards(true); + } + + public CardDb getCommonCards(boolean includeBackSides) { + if (includeBackSides) + return commonCards; + return commonCardsforDeckEditor; } public CardDb getCustomCards() { diff --git a/forge-core/src/main/java/forge/card/CardDb.java b/forge-core/src/main/java/forge/card/CardDb.java index 68c274749bf..214e55cfb39 100644 --- a/forge-core/src/main/java/forge/card/CardDb.java +++ b/forge-core/src/main/java/forge/card/CardDb.java @@ -156,6 +156,9 @@ public final class CardDb implements ICardDatabase, IDeckGenPool { } private void addSetCard(CardEdition e, CardInSet cis, CardRules cr) { + addSetCard(e, cis, cr, false); + } + private void addSetCard(CardEdition e, CardInSet cis, CardRules cr, boolean noSplitTypesNames) { int artIdx = 1; String key = e.getCode() + "/" + cis.name; if (artIds.containsKey(key)) { @@ -163,7 +166,7 @@ public final class CardDb implements ICardDatabase, IDeckGenPool { } artIds.put(key, artIdx); - addCard(new PaperCard(cr, e.getCode(), cis.rarity, artIdx)); + addCard(new PaperCard(cr, e.getCode(), cis.rarity, artIdx), noSplitTypesNames); } public void loadCard(String cardName, CardRules cr) { @@ -182,7 +185,7 @@ public final class CardDb implements ICardDatabase, IDeckGenPool { reIndex(); } - public void initialize(boolean logMissingPerEdition, boolean logMissingSummary, boolean enableUnknownCards, boolean loadNonLegalCards) { + public void initialize(boolean logMissingPerEdition, boolean logMissingSummary, boolean enableUnknownCards, boolean loadNonLegalCards, boolean noSplitTypesNames) { Set allMissingCards = new LinkedHashSet<>(); List missingCards = new ArrayList<>(); CardEdition upcomingSet = null; @@ -210,7 +213,7 @@ public final class CardDb implements ICardDatabase, IDeckGenPool { } if (cr != null) { - addSetCard(e, cis, cr); + addSetCard(e, cis, cr, noSplitTypesNames); } else { missingCards.add(cis.name); @@ -255,8 +258,13 @@ public final class CardDb implements ICardDatabase, IDeckGenPool { } public void addCard(PaperCard paperCard) { + addCard(paperCard, false); + } + public void addCard(PaperCard paperCard, boolean noSplitTypesNames) { allCardsByName.put(paperCard.getName(), paperCard); + if (noSplitTypesNames) { return; } + if (paperCard.getRules().getSplitType() == CardSplitType.None) { return; } if (paperCard.getRules().getOtherPart() != null) { diff --git a/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/CEditorCommander.java b/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/CEditorCommander.java index 90d78a5baf9..018fdf910cf 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/CEditorCommander.java +++ b/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/CEditorCommander.java @@ -82,7 +82,7 @@ public final class CEditorCommander extends CDeckEditor { allSections.add(DeckSection.Sideboard); allSections.add(DeckSection.Commander); - CardDb commonCards = FModel.getMagicDb().getCommonCards(); + CardDb commonCards = FModel.getMagicDb().getCommonCards(false); if (gameType == GameType.Brawl){ GameFormat format = FModel.getFormats().get("Brawl"); Predicate commanderFilter = CardRulesPredicates.Presets.CAN_BE_BRAWL_COMMANDER; diff --git a/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/CEditorConstructed.java b/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/CEditorConstructed.java index c3e1f21f0fb..968c0529fe1 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/CEditorConstructed.java +++ b/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/CEditorConstructed.java @@ -93,7 +93,7 @@ public final class CEditorConstructed extends CDeckEditor { allSections.add(DeckSection.Planes); allSections.add(DeckSection.Conspiracy); - normalPool = ItemPool.createFrom(FModel.getMagicDb().getCommonCards().getAllCards(), PaperCard.class); + normalPool = ItemPool.createFrom(FModel.getMagicDb().getCommonCards(false).getAllCards(), PaperCard.class); avatarPool = ItemPool.createFrom(FModel.getMagicDb().getVariantCards().getAllCards(Predicates.compose(CardRulesPredicates.Presets.IS_VANGUARD, PaperCard.FN_GET_RULES)), PaperCard.class); planePool = ItemPool.createFrom(FModel.getMagicDb().getVariantCards().getAllCards(Predicates.compose(CardRulesPredicates.Presets.IS_PLANE_OR_PHENOMENON, PaperCard.FN_GET_RULES)), PaperCard.class); schemePool = ItemPool.createFrom(FModel.getMagicDb().getVariantCards().getAllCards(Predicates.compose(CardRulesPredicates.Presets.IS_SCHEME, PaperCard.FN_GET_RULES)), PaperCard.class); @@ -104,8 +104,8 @@ public final class CEditorConstructed extends CDeckEditor { allSections.add(DeckSection.Commander); commanderFilter = CardRulesPredicates.Presets.CAN_BE_COMMANDER; - commanderPool = ItemPool.createFrom(FModel.getMagicDb().getCommonCards().getAllCards(Predicates.compose(commanderFilter, PaperCard.FN_GET_RULES)), PaperCard.class); - normalPool = ItemPool.createFrom(FModel.getMagicDb().getCommonCards().getAllCards(), PaperCard.class); + commanderPool = ItemPool.createFrom(FModel.getMagicDb().getCommonCards(false).getAllCards(Predicates.compose(commanderFilter, PaperCard.FN_GET_RULES)), PaperCard.class); + normalPool = ItemPool.createFrom(FModel.getMagicDb().getCommonCards(false).getAllCards(), PaperCard.class); wantUnique = true; break; @@ -113,8 +113,8 @@ public final class CEditorConstructed extends CDeckEditor { allSections.add(DeckSection.Commander); commanderFilter = CardRulesPredicates.Presets.CAN_BE_TINY_LEADERS_COMMANDER; - commanderPool = ItemPool.createFrom(FModel.getMagicDb().getCommonCards().getAllCards(Predicates.compose(commanderFilter, PaperCard.FN_GET_RULES)), PaperCard.class); - normalPool = ItemPool.createFrom(FModel.getMagicDb().getCommonCards().getAllCards(), PaperCard.class); + commanderPool = ItemPool.createFrom(FModel.getMagicDb().getCommonCards(false).getAllCards(Predicates.compose(commanderFilter, PaperCard.FN_GET_RULES)), PaperCard.class); + normalPool = ItemPool.createFrom(FModel.getMagicDb().getCommonCards(false).getAllCards(), PaperCard.class); wantUnique = true; break; @@ -122,8 +122,8 @@ public final class CEditorConstructed extends CDeckEditor { allSections.add(DeckSection.Commander); commanderFilter = Predicates.or(CardRulesPredicates.Presets.CAN_BE_OATHBREAKER, CardRulesPredicates.Presets.CAN_BE_SIGNATURE_SPELL); - commanderPool = ItemPool.createFrom(FModel.getMagicDb().getCommonCards().getAllCards(Predicates.compose(commanderFilter, PaperCard.FN_GET_RULES)), PaperCard.class); - normalPool = ItemPool.createFrom(FModel.getMagicDb().getCommonCards().getAllCards(), PaperCard.class); + commanderPool = ItemPool.createFrom(FModel.getMagicDb().getCommonCards(false).getAllCards(Predicates.compose(commanderFilter, PaperCard.FN_GET_RULES)), PaperCard.class); + normalPool = ItemPool.createFrom(FModel.getMagicDb().getCommonCards(false).getAllCards(), PaperCard.class); wantUnique = true; break; @@ -131,7 +131,7 @@ public final class CEditorConstructed extends CDeckEditor { allSections.add(DeckSection.Commander); commanderFilter = CardRulesPredicates.Presets.CAN_BE_BRAWL_COMMANDER; - commanderPool = ItemPool.createFrom(FModel.getMagicDb().getCommonCards().getAllCards(Predicates.and( + commanderPool = ItemPool.createFrom(FModel.getMagicDb().getCommonCards(false).getAllCards(Predicates.and( FModel.getFormats().get("Brawl").getFilterPrinted(), Predicates.compose(commanderFilter, PaperCard.FN_GET_RULES))), PaperCard.class); normalPool = ItemPool.createFrom(FModel.getFormats().get("Brawl").getAllCards(), PaperCard.class); diff --git a/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/CEditorQuestCardShop.java b/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/CEditorQuestCardShop.java index 0b0864b07c9..7a2dcccae62 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/CEditorQuestCardShop.java +++ b/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/CEditorQuestCardShop.java @@ -80,7 +80,7 @@ public final class CEditorQuestCardShop extends ACEditorBase cardsForSale; private final ItemPool fullCatalogCards = - ItemPool.createFrom(FModel.getMagicDb().getCommonCards().getAllCards(), InventoryItem.class); + ItemPool.createFrom(FModel.getMagicDb().getCommonCards(false).getAllCards(), InventoryItem.class); private boolean showingFullCatalog = false; private DragCell allDecksParent = null; private DragCell deckGenParent = null; diff --git a/forge-gui-desktop/src/main/java/forge/screens/workshop/views/VWorkshopCatalog.java b/forge-gui-desktop/src/main/java/forge/screens/workshop/views/VWorkshopCatalog.java index c5fd1866f14..a946a1b6d17 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/workshop/views/VWorkshopCatalog.java +++ b/forge-gui-desktop/src/main/java/forge/screens/workshop/views/VWorkshopCatalog.java @@ -41,7 +41,7 @@ public enum VWorkshopCatalog implements IVDoc { VWorkshopCatalog() { this.cardManager = new CardManager(cDetailPicture, true, false); this.cardManager.setCaption(localizer.getMessage("lblCatalog")); - final Iterable allCards = Iterables.concat(FModel.getMagicDb().getCommonCards(), FModel.getMagicDb().getVariantCards()); + final Iterable allCards = Iterables.concat(FModel.getMagicDb().getCommonCards(false), FModel.getMagicDb().getVariantCards()); this.cardManager.setPool(ItemPool.createFrom(allCards, PaperCard.class), true); this.cardManagerContainer.setItemManager(this.cardManager); diff --git a/forge-gui-desktop/src/main/java/forge/toolbox/special/CardZoomer.java b/forge-gui-desktop/src/main/java/forge/toolbox/special/CardZoomer.java index 44e5c9f06ca..09e5c02a435 100644 --- a/forge-gui-desktop/src/main/java/forge/toolbox/special/CardZoomer.java +++ b/forge-gui-desktop/src/main/java/forge/toolbox/special/CardZoomer.java @@ -316,10 +316,12 @@ public enum CardZoomer { * Can simply rotate current card image in situ to get same effect. */ private void toggleFlipCard() { - isInAltState = !isInAltState; - thisCard = thisCard.getCard().getState(isInAltState); - imagePanel.setRotation(thisCard.getCard().isFlipCard() && isInAltState ? 180 : 0); - setImage(); + try { //prevent NPE trying to view card without alternate + isInAltState = !isInAltState; + thisCard = thisCard.getCard().getState(isInAltState); + imagePanel.setRotation(thisCard.getCard().isFlipCard() && isInAltState ? 180 : 0); + setImage(); + } catch (Exception e){} } /** diff --git a/forge-gui-mobile/src/forge/deck/FDeckEditor.java b/forge-gui-mobile/src/forge/deck/FDeckEditor.java index 38c7cb5d320..6d1f0b32a29 100644 --- a/forge-gui-mobile/src/forge/deck/FDeckEditor.java +++ b/forge-gui-mobile/src/forge/deck/FDeckEditor.java @@ -1156,10 +1156,10 @@ public class FDeckEditor extends TabPageScreen { // fall through to below default: if (cardManager.getWantUnique()) { - cardManager.setPool(editorType.applyCardFilter(ItemPool.createFrom(FModel.getMagicDb().getCommonCards().getUniqueCards(), PaperCard.class), additionalFilter), true); + cardManager.setPool(editorType.applyCardFilter(ItemPool.createFrom(FModel.getMagicDb().getCommonCards(false).getUniqueCards(), PaperCard.class), additionalFilter), true); } else { - cardManager.setPool(editorType.applyCardFilter(ItemPool.createFrom(FModel.getMagicDb().getCommonCards().getAllCards(), PaperCard.class), additionalFilter), true); + cardManager.setPool(editorType.applyCardFilter(ItemPool.createFrom(FModel.getMagicDb().getCommonCards(false).getAllCards(), PaperCard.class), additionalFilter), true); } break; } @@ -1243,7 +1243,7 @@ public class FDeckEditor extends TabPageScreen { } //if card has more than one art option, add item to change user's preferred art - final List artOptions = FModel.getMagicDb().getCommonCards().getAllCards(card.getName()); + final List artOptions = FModel.getMagicDb().getCommonCards(false).getAllCards(card.getName()); if (artOptions != null && artOptions.size() > 1) { menu.addItem(new FMenuItem(localizer.getMessage("lblChangePreferredArt"), Forge.hdbuttons ? FSkinImage.HDPREFERENCE : FSkinImage.SETTINGS, new FEventHandler() { @Override