diff --git a/forge-game/src/main/java/forge/game/card/Card.java b/forge-game/src/main/java/forge/game/card/Card.java index de5f7abad38..bf01e3cbe5d 100644 --- a/forge-game/src/main/java/forge/game/card/Card.java +++ b/forge-game/src/main/java/forge/game/card/Card.java @@ -124,8 +124,6 @@ public class Card extends GameEntity implements Comparable { private final CardChangedWords changedTextTypes = new CardChangedWords(); /** List of the keywords that have been added by text changes. */ private final List keywordsGrantedByTextChanges = Lists.newArrayList(); - - private final Map> cachedKeywords = Maps.newEnumMap(CardStateName.class); /** Original values of SVars changed by text changes. */ private Map originalSVars = Maps.newHashMap(); @@ -3365,41 +3363,10 @@ public class Card extends GameEntity implements Comparable { return getUnhiddenKeywords(currentState); } public final Collection getUnhiddenKeywords(CardState state) { - CardStateName name = null; - for (Entry entry : states.entrySet()) { - if (entry.getValue().equals(state)) { - name = entry.getKey(); - break; - } - } - if (name == null) { - return Lists.newArrayList(); - } - - if (!cachedKeywords.containsKey(name)) { - updateKeywordsCache(state); - } - return cachedKeywords.get(name); + return state.getCachedKeywords(); } public final void updateKeywordsCache(final CardState state) { - CardStateName name = null; - for (Entry entry : states.entrySet()) { - if (entry.getValue().equals(state)) { - name = entry.getKey(); - break; - } - } - if (name == null) { - return; - } - - if (cachedKeywords.containsKey(name)) { - cachedKeywords.get(name).clear(); - } else { - cachedKeywords.put(name, Lists.newArrayList()); - } - KeywordCollection keywords = new KeywordCollection(); //final List keywords = Lists.newArrayList(); @@ -3422,7 +3389,8 @@ public class Card extends GameEntity implements Comparable { keywords.insertAll(ck.getKeywords()); } } - cachedKeywords.get(name).addAll(keywords.getValues()); + + state.setCachedKeywords(keywords.getValues()); } private void visitUnhiddenKeywords(CardState state, Visitor visitor) { if (changedCardKeywords.isEmpty()) { diff --git a/forge-game/src/main/java/forge/game/card/CardState.java b/forge-game/src/main/java/forge/game/card/CardState.java index 4a814734900..963380f20dc 100644 --- a/forge-game/src/main/java/forge/game/card/CardState.java +++ b/forge-game/src/main/java/forge/game/card/CardState.java @@ -58,6 +58,8 @@ public class CardState extends GameObject { private String imageKey = ""; private Map sVars = Maps.newTreeMap(); + private List cachedKeywords = Lists.newArrayList(); + private CardRarity rarity = CardRarity.Unknown; private String setCode = CardEdition.UNKNOWN.getCode(); @@ -150,6 +152,15 @@ public class CardState extends GameObject { view.updateToughness(this); } + public final Collection getCachedKeywords() { + return cachedKeywords; + } + + public final void setCachedKeywords(final Collection col) { + cachedKeywords.clear(); + cachedKeywords.addAll(col); + } + public final Collection getIntrinsicKeywords() { return intrinsicKeywords.getValues(); }