From 7cf2c7e383de77f7158d20206b9fbc27f90ed483 Mon Sep 17 00:00:00 2001 From: Agetian Date: Tue, 20 Dec 2016 17:04:22 +0000 Subject: [PATCH] - Enforce deck construction limits in the deck editor by unique card name instead of by unique PaperCard. --- .../deckeditor/controllers/ACEditorBase.java | 22 ++++++++++++++----- 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/ACEditorBase.java b/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/ACEditorBase.java index 9b56c017782..b4c45e3a5a2 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/ACEditorBase.java +++ b/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/ACEditorBase.java @@ -17,6 +17,8 @@ */ package forge.screens.deckeditor.controllers; +import com.google.common.base.Predicate; +import com.google.common.collect.Iterables; import java.awt.Toolkit; import java.awt.event.InputEvent; import java.awt.event.KeyEvent; @@ -31,6 +33,7 @@ import javax.swing.SwingUtilities; import forge.UiCommand; import forge.assets.FSkinProp; +import forge.deck.CardPool; import forge.deck.Deck; import forge.deck.DeckBase; import forge.deck.DeckSection; @@ -56,6 +59,7 @@ import forge.screens.match.controllers.CDetailPicture; import forge.toolbox.ContextMenuBuilder; import forge.toolbox.FLabel; import forge.toolbox.FSkin; +import forge.util.Aggregates; import forge.util.ItemPool; import forge.view.FView; @@ -196,7 +200,11 @@ public abstract class ACEditorBase controller = getDeckController(); final Deck deck = controller != null && controller.getModel() instanceof Deck ? (Deck)controller.getModel() : null; + final CardPool allCards = deck.getAllCardsInASinglePool(deck.has(DeckSection.Commander)); + Iterable> cardsByName = Aggregates.groupSumBy(allCards, PaperCard.FN_GET_NAME); + for (final Entry itemEntry : itemsToAdd) { + final TItem item = itemEntry.getKey(); final PaperCard card = item instanceof PaperCard ? (PaperCard)item : null; int qty = itemEntry.getValue(); @@ -208,12 +216,14 @@ public abstract class ACEditorBase cardAmountInfo = Iterables.find(cardsByName, new Predicate>() { + @Override + public boolean apply(Entry t) { + return t.getKey().equals(card.getName()); + } + }, null); + if (cardAmountInfo != null) { + max -= cardAmountInfo.getValue(); } } if (qty > max) {