From bf00d79e2324cd1c06416f69fd72948e755634f0 Mon Sep 17 00:00:00 2001 From: Anthony Calosa Date: Mon, 29 Mar 2021 11:19:26 +0800 Subject: [PATCH 1/6] refactor carddb for Deck Editor/Workshop Catalog --- .../src/main/java/forge/StaticData.java | 19 +++--------- .../src/main/java/forge/card/CardDb.java | 31 ++++++++++++------- .../controllers/CEditorCommander.java | 8 ++--- .../controllers/CEditorConstructed.java | 16 +++++----- .../controllers/CEditorQuestCardShop.java | 2 +- .../workshop/views/VWorkshopCatalog.java | 2 +- .../src/forge/deck/FDeckEditor.java | 6 ++-- 7 files changed, 41 insertions(+), 43 deletions(-) diff --git a/forge-core/src/main/java/forge/StaticData.java b/forge-core/src/main/java/forge/StaticData.java index d61cdc28594..2ec2f0c8d1a 100644 --- a/forge-core/src/main/java/forge/StaticData.java +++ b/forge-core/src/main/java/forge/StaticData.java @@ -37,7 +37,6 @@ 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; @@ -109,14 +108,11 @@ 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, 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); + commonCards.initialize(false, false, enableUnknownCards, loadNonLegalCards); + variantCards.initialize(false, false, enableUnknownCards, loadNonLegalCards); + customCards.initialize(false, false, enableUnknownCards, loadNonLegalCards); } { @@ -135,7 +131,6 @@ public class StaticData { Collection paperCards = customCards.getAllCards(); for(PaperCard p: paperCards) { commonCards.addCard(p); - commonCardsforDeckEditor.addCard(p, true); } } } @@ -245,13 +240,7 @@ public class StaticData { } public CardDb getCommonCards() { - return getCommonCards(true); - } - - public CardDb getCommonCards(boolean includeBackSides) { - if (includeBackSides) - return commonCards; - return commonCardsforDeckEditor; + return commonCards; } 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 214e55cfb39..e7d7e3184f0 100644 --- a/forge-core/src/main/java/forge/card/CardDb.java +++ b/forge-core/src/main/java/forge/card/CardDb.java @@ -58,6 +58,8 @@ public final class CardDb implements ICardDatabase, IDeckGenPool { // need this to obtain cardReference by name+set+artindex private final ListMultimap allCardsByName = Multimaps.newListMultimap(new TreeMap<>(String.CASE_INSENSITIVE_ORDER), CollectionSuppliers.arrayLists()); + // for deck editor only + private final ListMultimap allCardsByNameNoAlt = Multimaps.newListMultimap(new TreeMap<>(String.CASE_INSENSITIVE_ORDER), CollectionSuppliers.arrayLists()); private final Map uniqueCardsByName = Maps.newTreeMap(String.CASE_INSENSITIVE_ORDER); private final Map rulesByName; private final Map facesByName = Maps.newTreeMap(String.CASE_INSENSITIVE_ORDER); @@ -67,6 +69,7 @@ public final class CardDb implements ICardDatabase, IDeckGenPool { private final Map artIds = new HashMap<>(); private final Collection roAllCards = Collections.unmodifiableCollection(allCardsByName.values()); + private final Collection roAllCardsNoAlt = Collections.unmodifiableCollection(allCardsByNameNoAlt.values()); private final CardEdition.Collection editions; public enum SetPreference { @@ -156,9 +159,6 @@ 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)) { @@ -166,7 +166,7 @@ public final class CardDb implements ICardDatabase, IDeckGenPool { } artIds.put(key, artIdx); - addCard(new PaperCard(cr, e.getCode(), cis.rarity, artIdx), noSplitTypesNames); + addCard(new PaperCard(cr, e.getCode(), cis.rarity, artIdx)); } public void loadCard(String cardName, CardRules cr) { @@ -185,7 +185,7 @@ public final class CardDb implements ICardDatabase, IDeckGenPool { reIndex(); } - public void initialize(boolean logMissingPerEdition, boolean logMissingSummary, boolean enableUnknownCards, boolean loadNonLegalCards, boolean noSplitTypesNames) { + public void initialize(boolean logMissingPerEdition, boolean logMissingSummary, boolean enableUnknownCards, boolean loadNonLegalCards) { Set allMissingCards = new LinkedHashSet<>(); List missingCards = new ArrayList<>(); CardEdition upcomingSet = null; @@ -213,7 +213,7 @@ public final class CardDb implements ICardDatabase, IDeckGenPool { } if (cr != null) { - addSetCard(e, cis, cr, noSplitTypesNames); + addSetCard(e, cis, cr); } else { missingCards.add(cis.name); @@ -258,12 +258,8 @@ 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; } + allCardsByNameNoAlt.put(paperCard.getName(), paperCard); if (paperCard.getRules().getSplitType() == CardSplitType.None) { return; } @@ -586,6 +582,10 @@ public final class CardDb implements ICardDatabase, IDeckGenPool { return roAllCards; } + public Collection getAllCardsNoAlt() { + return roAllCardsNoAlt; + } + public Collection getAllNonPromoCards() { return Lists.newArrayList(Iterables.filter(this.roAllCards, new Predicate() { @Override @@ -613,12 +613,21 @@ public final class CardDb implements ICardDatabase, IDeckGenPool { return allCardsByName.get(getName(cardName)); } + public List getAllCardsNoAlt(String cardName) { + return allCardsByNameNoAlt.get(getName(cardName)); + } + /** Returns a modifiable list of cards matching the given predicate */ @Override public List getAllCards(Predicate predicate) { return Lists.newArrayList(Iterables.filter(this.roAllCards, predicate)); } + /** Returns a modifiable list of cards matching the given predicate */ + public List getAllCardsNoAlt(Predicate predicate) { + return Lists.newArrayList(Iterables.filter(this.roAllCardsNoAlt, predicate)); + } + // Do I want a foiled version of these cards? @Override public List getAllCardsFromEdition(CardEdition edition) { 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 018fdf910cf..97bfcbff430 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,11 +82,11 @@ public final class CEditorCommander extends CDeckEditor { allSections.add(DeckSection.Sideboard); allSections.add(DeckSection.Commander); - CardDb commonCards = FModel.getMagicDb().getCommonCards(false); + CardDb commonCards = FModel.getMagicDb().getCommonCards(); if (gameType == GameType.Brawl){ GameFormat format = FModel.getFormats().get("Brawl"); Predicate commanderFilter = CardRulesPredicates.Presets.CAN_BE_BRAWL_COMMANDER; - commanderPool = ItemPool.createFrom(commonCards.getAllCards(Predicates.and( + commanderPool = ItemPool.createFrom(commonCards.getAllCardsNoAlt(Predicates.and( format.getFilterPrinted(), Predicates.compose(commanderFilter, PaperCard.FN_GET_RULES))), PaperCard.class); normalPool = ItemPool.createFrom(format.getAllCards(), PaperCard.class); } @@ -94,8 +94,8 @@ public final class CEditorCommander extends CDeckEditor { Predicate commanderFilter = gameType == GameType.Oathbreaker ? Predicates.or(CardRulesPredicates.Presets.CAN_BE_OATHBREAKER, CardRulesPredicates.Presets.CAN_BE_SIGNATURE_SPELL) : CardRulesPredicates.Presets.CAN_BE_COMMANDER; - commanderPool = ItemPool.createFrom(commonCards.getAllCards(Predicates.compose(commanderFilter, PaperCard.FN_GET_RULES)),PaperCard.class); - normalPool = ItemPool.createFrom(commonCards.getAllCards(), PaperCard.class); + commanderPool = ItemPool.createFrom(commonCards.getAllCardsNoAlt(Predicates.compose(commanderFilter, PaperCard.FN_GET_RULES)),PaperCard.class); + normalPool = ItemPool.createFrom(commonCards.getAllCardsNoAlt(), PaperCard.class); } CardManager catalogManager = new CardManager(getCDetailPicture(), true, false); 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 968c0529fe1..686aa15e3c4 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(false).getAllCards(), PaperCard.class); + normalPool = ItemPool.createFrom(FModel.getMagicDb().getCommonCards().getAllCardsNoAlt(), 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(false).getAllCards(Predicates.compose(commanderFilter, PaperCard.FN_GET_RULES)), PaperCard.class); - normalPool = ItemPool.createFrom(FModel.getMagicDb().getCommonCards(false).getAllCards(), PaperCard.class); + commanderPool = ItemPool.createFrom(FModel.getMagicDb().getCommonCards().getAllCardsNoAlt(Predicates.compose(commanderFilter, PaperCard.FN_GET_RULES)), PaperCard.class); + normalPool = ItemPool.createFrom(FModel.getMagicDb().getCommonCards().getAllCardsNoAlt(), 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(false).getAllCards(Predicates.compose(commanderFilter, PaperCard.FN_GET_RULES)), PaperCard.class); - normalPool = ItemPool.createFrom(FModel.getMagicDb().getCommonCards(false).getAllCards(), PaperCard.class); + commanderPool = ItemPool.createFrom(FModel.getMagicDb().getCommonCards().getAllCardsNoAlt(Predicates.compose(commanderFilter, PaperCard.FN_GET_RULES)), PaperCard.class); + normalPool = ItemPool.createFrom(FModel.getMagicDb().getCommonCards().getAllCardsNoAlt(), 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(false).getAllCards(Predicates.compose(commanderFilter, PaperCard.FN_GET_RULES)), PaperCard.class); - normalPool = ItemPool.createFrom(FModel.getMagicDb().getCommonCards(false).getAllCards(), PaperCard.class); + commanderPool = ItemPool.createFrom(FModel.getMagicDb().getCommonCards().getAllCardsNoAlt(Predicates.compose(commanderFilter, PaperCard.FN_GET_RULES)), PaperCard.class); + normalPool = ItemPool.createFrom(FModel.getMagicDb().getCommonCards().getAllCardsNoAlt(), 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(false).getAllCards(Predicates.and( + commanderPool = ItemPool.createFrom(FModel.getMagicDb().getCommonCards().getAllCardsNoAlt(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 7a2dcccae62..1b1c9573c4d 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(false).getAllCards(), InventoryItem.class); + ItemPool.createFrom(FModel.getMagicDb().getCommonCards().getAllCardsNoAlt(), 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 a946a1b6d17..a5d6e7d136c 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(false), FModel.getMagicDb().getVariantCards()); + final Iterable allCards = Iterables.concat(FModel.getMagicDb().getCommonCards().getAllCardsNoAlt(), FModel.getMagicDb().getVariantCards().getAllCards()); this.cardManager.setPool(ItemPool.createFrom(allCards, PaperCard.class), true); this.cardManagerContainer.setItemManager(this.cardManager); diff --git a/forge-gui-mobile/src/forge/deck/FDeckEditor.java b/forge-gui-mobile/src/forge/deck/FDeckEditor.java index 6d1f0b32a29..b9ceaeced9e 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(false).getUniqueCards(), PaperCard.class), additionalFilter), true); + cardManager.setPool(editorType.applyCardFilter(ItemPool.createFrom(FModel.getMagicDb().getCommonCards().getUniqueCards(), PaperCard.class), additionalFilter), true); } else { - cardManager.setPool(editorType.applyCardFilter(ItemPool.createFrom(FModel.getMagicDb().getCommonCards(false).getAllCards(), PaperCard.class), additionalFilter), true); + cardManager.setPool(editorType.applyCardFilter(ItemPool.createFrom(FModel.getMagicDb().getCommonCards().getAllCardsNoAlt(), 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(false).getAllCards(card.getName()); + final List artOptions = FModel.getMagicDb().getCommonCards().getAllCardsNoAlt(card.getName()); if (artOptions != null && artOptions.size() > 1) { menu.addItem(new FMenuItem(localizer.getMessage("lblChangePreferredArt"), Forge.hdbuttons ? FSkinImage.HDPREFERENCE : FSkinImage.SETTINGS, new FEventHandler() { @Override From d554a7ee97f4c3bb4e0e7dfb90a2fd34ae77f889 Mon Sep 17 00:00:00 2001 From: Anthony Calosa Date: Mon, 29 Mar 2021 13:35:20 +0800 Subject: [PATCH 2/6] add getUniqueCardsNoAlt for mobile --- forge-core/src/main/java/forge/card/CardDb.java | 13 +++++++++++-- forge-gui-mobile/src/forge/deck/FDeckEditor.java | 2 +- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/forge-core/src/main/java/forge/card/CardDb.java b/forge-core/src/main/java/forge/card/CardDb.java index e7d7e3184f0..bc0fa33cf07 100644 --- a/forge-core/src/main/java/forge/card/CardDb.java +++ b/forge-core/src/main/java/forge/card/CardDb.java @@ -56,10 +56,11 @@ public final class CardDb implements ICardDatabase, IDeckGenPool { public final static String foilSuffix = "+"; public final static char NameSetSeparator = '|'; - // need this to obtain cardReference by name+set+artindex - private final ListMultimap allCardsByName = Multimaps.newListMultimap(new TreeMap<>(String.CASE_INSENSITIVE_ORDER), CollectionSuppliers.arrayLists()); // for deck editor only private final ListMultimap allCardsByNameNoAlt = Multimaps.newListMultimap(new TreeMap<>(String.CASE_INSENSITIVE_ORDER), CollectionSuppliers.arrayLists()); + private final Map uniqueCardsByNameNoAlt = Maps.newTreeMap(String.CASE_INSENSITIVE_ORDER); + // need this to obtain cardReference by name+set+artindex + private final ListMultimap allCardsByName = Multimaps.newListMultimap(new TreeMap<>(String.CASE_INSENSITIVE_ORDER), CollectionSuppliers.arrayLists()); private final Map uniqueCardsByName = Maps.newTreeMap(String.CASE_INSENSITIVE_ORDER); private final Map rulesByName; private final Map facesByName = Maps.newTreeMap(String.CASE_INSENSITIVE_ORDER); @@ -275,9 +276,13 @@ public final class CardDb implements ICardDatabase, IDeckGenPool { private void reIndex() { uniqueCardsByName.clear(); + uniqueCardsByNameNoAlt.clear(); for (Entry> kv : allCardsByName.asMap().entrySet()) { uniqueCardsByName.put(kv.getKey(), getFirstWithImage(kv.getValue())); } + for (Entry> kv : allCardsByNameNoAlt.asMap().entrySet()) { + uniqueCardsByNameNoAlt.put(kv.getKey(), getFirstWithImage(kv.getValue())); + } } private static PaperCard getFirstWithImage(final Collection cards) { @@ -565,6 +570,10 @@ public final class CardDb implements ICardDatabase, IDeckGenPool { return uniqueCardsByName.values(); } + public Collection getUniqueCardsNoAlt() { + return uniqueCardsByNameNoAlt.values(); + } + public PaperCard getUniqueByName(final String name) { return uniqueCardsByName.get(getName(name)); } diff --git a/forge-gui-mobile/src/forge/deck/FDeckEditor.java b/forge-gui-mobile/src/forge/deck/FDeckEditor.java index b9ceaeced9e..a63bc7a4d00 100644 --- a/forge-gui-mobile/src/forge/deck/FDeckEditor.java +++ b/forge-gui-mobile/src/forge/deck/FDeckEditor.java @@ -1156,7 +1156,7 @@ 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().getUniqueCardsNoAlt(), PaperCard.class), additionalFilter), true); } else { cardManager.setPool(editorType.applyCardFilter(ItemPool.createFrom(FModel.getMagicDb().getCommonCards().getAllCardsNoAlt(), PaperCard.class), additionalFilter), true); From 0b61ddaff710e15abf157bf6f33eb91eed9104eb Mon Sep 17 00:00:00 2001 From: Anthony Calosa Date: Mon, 29 Mar 2021 15:23:03 +0800 Subject: [PATCH 3/6] fix advance filter for adventure and flip --- .../java/forge/itemmanager/AdvancedSearch.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/forge-gui/src/main/java/forge/itemmanager/AdvancedSearch.java b/forge-gui/src/main/java/forge/itemmanager/AdvancedSearch.java index 21a3f3cdef1..db95bfaf6ab 100644 --- a/forge-gui/src/main/java/forge/itemmanager/AdvancedSearch.java +++ b/forge-gui/src/main/java/forge/itemmanager/AdvancedSearch.java @@ -17,9 +17,11 @@ import com.google.common.base.Predicate; import com.google.common.base.Predicates; import com.google.common.collect.ImmutableList; +import com.google.common.collect.Iterables; import forge.card.CardEdition; import forge.card.CardRarity; import forge.card.CardRules; +import forge.card.CardSplitType; import forge.card.CardType; import forge.card.CardType.CoreType; import forge.card.CardType.Supertype; @@ -183,6 +185,19 @@ public class AdvancedSearch { } @Override protected Set getItemValues(PaperCard input) { + CardSplitType cardSplitType = input.getRules().getSplitType(); + //allow deck editor to find Adventure and Flip + if (cardSplitType == CardSplitType.Adventure || cardSplitType == CardSplitType.Flip) { + if (input.getRules().getOtherPart() != null) { + Set subtypes = new HashSet<>(); + for (String subs : input.getRules().getOtherPart().getType().getSubtypes()) { + subtypes.add(subs); + }for (String subs : input.getRules().getMainPart().getType().getSubtypes()) { + subtypes.add(subs); + } + return subtypes; + } + } return (Set)input.getRules().getType().getSubtypes(); } }), From 7459cd65d93860558af7f941d0eb6644541e82d3 Mon Sep 17 00:00:00 2001 From: Anthony Calosa Date: Mon, 29 Mar 2021 15:23:57 +0800 Subject: [PATCH 4/6] unused variable --- forge-gui/src/main/java/forge/itemmanager/AdvancedSearch.java | 1 - 1 file changed, 1 deletion(-) diff --git a/forge-gui/src/main/java/forge/itemmanager/AdvancedSearch.java b/forge-gui/src/main/java/forge/itemmanager/AdvancedSearch.java index db95bfaf6ab..ae4c2ec70dc 100644 --- a/forge-gui/src/main/java/forge/itemmanager/AdvancedSearch.java +++ b/forge-gui/src/main/java/forge/itemmanager/AdvancedSearch.java @@ -17,7 +17,6 @@ import com.google.common.base.Predicate; import com.google.common.base.Predicates; import com.google.common.collect.ImmutableList; -import com.google.common.collect.Iterables; import forge.card.CardEdition; import forge.card.CardRarity; import forge.card.CardRules; From cffd99b68d6d1283d218dcd3bca3feb0a6a98952 Mon Sep 17 00:00:00 2001 From: Anthony Calosa Date: Mon, 29 Mar 2021 18:30:09 +0800 Subject: [PATCH 5/6] update advance filter --- .../java/forge/itemmanager/AdvancedSearch.java | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/forge-gui/src/main/java/forge/itemmanager/AdvancedSearch.java b/forge-gui/src/main/java/forge/itemmanager/AdvancedSearch.java index ae4c2ec70dc..442971bcdf5 100644 --- a/forge-gui/src/main/java/forge/itemmanager/AdvancedSearch.java +++ b/forge-gui/src/main/java/forge/itemmanager/AdvancedSearch.java @@ -61,6 +61,13 @@ public class AdvancedSearch { Set names = new HashSet<>(); names.add(input.getName()); names.add(CardTranslation.getTranslatedName(input.getName())); + CardSplitType cardSplitType = input.getRules().getSplitType(); + if (cardSplitType != CardSplitType.None && cardSplitType != CardSplitType.Split) { + if (input.getRules().getOtherPart() != null) { + names.add(input.getRules().getOtherPart().getName()); + names.add(CardTranslation.getTranslatedName(input.getRules().getOtherPart().getName())); + } + } return names; } }), @@ -185,14 +192,15 @@ public class AdvancedSearch { @Override protected Set getItemValues(PaperCard input) { CardSplitType cardSplitType = input.getRules().getSplitType(); - //allow deck editor to find Adventure and Flip - if (cardSplitType == CardSplitType.Adventure || cardSplitType == CardSplitType.Flip) { + if (cardSplitType != CardSplitType.None && cardSplitType != CardSplitType.Split) { if (input.getRules().getOtherPart() != null) { Set subtypes = new HashSet<>(); for (String subs : input.getRules().getOtherPart().getType().getSubtypes()) { - subtypes.add(subs); + if (!subtypes.contains(subs)) + subtypes.add(subs); }for (String subs : input.getRules().getMainPart().getType().getSubtypes()) { - subtypes.add(subs); + if (!subtypes.contains(subs)) + subtypes.add(subs); } return subtypes; } From fc6237cd2953416f982eba6ce28be75c006ea34a Mon Sep 17 00:00:00 2001 From: Anthony Calosa Date: Mon, 29 Mar 2021 21:26:14 +0800 Subject: [PATCH 6/6] update advance filter support alternate parts limited to card names, keywords, rules text, types and subtypes --- .../forge/itemmanager/AdvancedSearch.java | 46 +++++++++++++++++-- 1 file changed, 41 insertions(+), 5 deletions(-) diff --git a/forge-gui/src/main/java/forge/itemmanager/AdvancedSearch.java b/forge-gui/src/main/java/forge/itemmanager/AdvancedSearch.java index 442971bcdf5..805970bca18 100644 --- a/forge-gui/src/main/java/forge/itemmanager/AdvancedSearch.java +++ b/forge-gui/src/main/java/forge/itemmanager/AdvancedSearch.java @@ -81,6 +81,13 @@ public class AdvancedSearch { Set names = new HashSet<>(); names.add(input.getRules().getOracleText()); names.add(CardTranslation.getTranslatedOracle(input.getName())); + CardSplitType cardSplitType = input.getRules().getSplitType(); + if (cardSplitType != CardSplitType.None && cardSplitType != CardSplitType.Split) { + if (input.getRules().getOtherPart() != null) { + names.add(input.getRules().getOtherPart().getOracleText()); + names.add(CardTranslation.getTranslatedOracle(input.getRules().getOtherPart().getName())); + } + } return names; } }), @@ -91,6 +98,18 @@ public class AdvancedSearch { } @Override protected Set getItemValues(PaperCard input) { + CardSplitType cardSplitType = input.getRules().getSplitType(); + if (cardSplitType != CardSplitType.None && cardSplitType != CardSplitType.Split) { + Set keywords = new HashSet<>(); + if (input.getRules().getOtherPart() != null) { + PaperCard otherPart = FModel.getMagicDb().getCommonCards().getCard(input.getRules().getOtherPart().getName()); + if (otherPart != null) { + keywords.addAll(Keyword.getKeywordSet(otherPart)); + keywords.addAll(Keyword.getKeywordSet(input)); + } + } + return keywords; + } return Keyword.getKeywordSet(input); } }), @@ -175,6 +194,24 @@ public class AdvancedSearch { protected Set getItemValues(PaperCard input) { final CardType type = input.getRules().getType(); final Set types = new HashSet<>(); + CardSplitType cardSplitType = input.getRules().getSplitType(); + if (cardSplitType != CardSplitType.None && cardSplitType != CardSplitType.Split) { + if (input.getRules().getOtherPart() != null) { + for (Supertype supertype : input.getRules().getOtherPart().getType().getSupertypes()) { + types.add(supertype.name()); + } + for (CoreType coreType : input.getRules().getOtherPart().getType().getCoreTypes()) { + types.add(coreType.name()); + } + for (Supertype supertype : input.getRules().getMainPart().getType().getSupertypes()) { + types.add(supertype.name()); + } + for (CoreType coreType : input.getRules().getMainPart().getType().getCoreTypes()) { + types.add(coreType.name()); + } + return types; + } + } for (Supertype t : type.getSupertypes()) { types.add(t.name()); } @@ -196,11 +233,10 @@ public class AdvancedSearch { if (input.getRules().getOtherPart() != null) { Set subtypes = new HashSet<>(); for (String subs : input.getRules().getOtherPart().getType().getSubtypes()) { - if (!subtypes.contains(subs)) - subtypes.add(subs); - }for (String subs : input.getRules().getMainPart().getType().getSubtypes()) { - if (!subtypes.contains(subs)) - subtypes.add(subs); + subtypes.add(subs); + } + for (String subs : input.getRules().getMainPart().getType().getSubtypes()) { + subtypes.add(subs); } return subtypes; }