diff --git a/forge-core/src/main/java/forge/card/CardDb.java b/forge-core/src/main/java/forge/card/CardDb.java index bc0fa33cf07..d429b352b26 100644 --- a/forge-core/src/main/java/forge/card/CardDb.java +++ b/forge-core/src/main/java/forge/card/CardDb.java @@ -32,6 +32,7 @@ import java.util.Set; import java.util.TreeMap; import forge.StaticData; + import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.tuple.Pair; @@ -56,9 +57,6 @@ public final class CardDb implements ICardDatabase, IDeckGenPool { public final static String foilSuffix = "+"; public final static char NameSetSeparator = '|'; - // 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); @@ -70,7 +68,6 @@ 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 { @@ -260,7 +257,6 @@ public final class CardDb implements ICardDatabase, IDeckGenPool { public void addCard(PaperCard paperCard) { allCardsByName.put(paperCard.getName(), paperCard); - allCardsByNameNoAlt.put(paperCard.getName(), paperCard); if (paperCard.getRules().getSplitType() == CardSplitType.None) { return; } @@ -276,13 +272,9 @@ 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) { @@ -571,7 +563,14 @@ public final class CardDb implements ICardDatabase, IDeckGenPool { } public Collection getUniqueCardsNoAlt() { - return uniqueCardsByNameNoAlt.values(); + return Maps.filterEntries(this.uniqueCardsByName, new Predicate>() { + @Override + public boolean apply(Entry e) { + if (e == null) + return false; + return e.getKey().equals(e.getValue().getName()); + } + }).values(); } public PaperCard getUniqueByName(final String name) { @@ -592,7 +591,12 @@ public final class CardDb implements ICardDatabase, IDeckGenPool { } public Collection getAllCardsNoAlt() { - return roAllCardsNoAlt; + return Multimaps.filterEntries(allCardsByName, new Predicate>() { + @Override + public boolean apply(Entry entry) { + return entry.getKey().equals(entry.getValue().getName()); + } + }).values(); } public Collection getAllNonPromoCards() { @@ -623,7 +627,12 @@ public final class CardDb implements ICardDatabase, IDeckGenPool { } public List getAllCardsNoAlt(String cardName) { - return allCardsByNameNoAlt.get(getName(cardName)); + return Lists.newArrayList(Multimaps.filterEntries(allCardsByName, new Predicate>() { + @Override + public boolean apply(Entry entry) { + return entry.getKey().equals(entry.getValue().getName()); + } + }).get(getName(cardName))); } /** Returns a modifiable list of cards matching the given predicate */ @@ -634,7 +643,7 @@ public final class CardDb implements ICardDatabase, IDeckGenPool { /** Returns a modifiable list of cards matching the given predicate */ public List getAllCardsNoAlt(Predicate predicate) { - return Lists.newArrayList(Iterables.filter(this.roAllCardsNoAlt, predicate)); + return Lists.newArrayList(Iterables.filter(getAllCardsNoAlt(), predicate)); } // Do I want a foiled version of these cards?