diff --git a/forge-core/src/main/java/forge/deck/DeckFormat.java b/forge-core/src/main/java/forge/deck/DeckFormat.java index 31c7cbec4e1..d2c88264a1e 100644 --- a/forge-core/src/main/java/forge/deck/DeckFormat.java +++ b/forge-core/src/main/java/forge/deck/DeckFormat.java @@ -28,10 +28,12 @@ import org.apache.commons.lang3.Range; import org.apache.commons.lang3.tuple.ImmutablePair; import com.google.common.base.Predicate; +import com.google.common.base.Predicates; import com.google.common.collect.ImmutableSet; import forge.StaticData; import forge.card.CardRules; +import forge.card.CardRulesPredicates; import forge.card.CardType; import forge.card.ICardFace; import forge.deck.generation.DeckGenPool; @@ -383,13 +385,11 @@ public enum DeckFormat { }; } - public Predicate isLegalCardForCommanderPredicate(PaperCard commander) { - final byte cmdCI = commander.getRules().getColorIdentity().getColor(); - return new Predicate() { - @Override - public boolean apply(PaperCard card) { - return card.getRules().getColorIdentity().hasNoColorsExcept(cmdCI); - } - }; + public Predicate isLegalCardForCommanderPredicate(List commanders) { + byte cmdCI = 0; + for (final PaperCard p : commanders) { + cmdCI |= p.getRules().getColorIdentity().getColor(); + } + return Predicates.compose(CardRulesPredicates.hasColorIdentity(cmdCI), PaperCard.FN_GET_RULES); } } diff --git a/forge-gui-mobile/src/forge/deck/FDeckEditor.java b/forge-gui-mobile/src/forge/deck/FDeckEditor.java index c26e0f9641c..72c4ac74395 100644 --- a/forge-gui-mobile/src/forge/deck/FDeckEditor.java +++ b/forge-gui-mobile/src/forge/deck/FDeckEditor.java @@ -40,6 +40,7 @@ import forge.toolbox.FEvent.FEventHandler; import forge.toolbox.FEvent.FEventType; import forge.util.Callback; import forge.util.ItemPool; +import forge.util.Lang; import forge.util.Utils; import forge.util.storage.IStorage; @@ -523,8 +524,8 @@ public class FDeckEditor extends TabPageScreen { protected void save(final Callback callback) { if (StringUtils.isEmpty(deck.getName())) { - PaperCard commander = deck.getCommander(); - String initialInput = commander == null ? "" : commander.getName(); //use commander name as default deck name + List commanders = deck.getCommanders(); //use commander name as default deck name + String initialInput = Lang.joinHomogenous(commanders); FOptionPane.showInputDialog("Enter name for new deck", initialInput, new Callback() { @Override public void run(String result) { @@ -915,15 +916,15 @@ public class FDeckEditor extends TabPageScreen { break; case Commander: case TinyLeaders: - final PaperCard commander = parentScreen.getDeck().getCommander(); - if (commander == null) { + final List commanders = parentScreen.getDeck().getCommanders(); + if (commanders.isEmpty()) { //if no commander set for deck, only show valid commanders additionalFilter = DeckFormat.Commander.isLegalCommanderPredicate(); cardManager.setCaption("Commanders"); } else { //if a commander has been set, only show cards that match its color identity - additionalFilter = DeckFormat.Commander.isLegalCardForCommanderPredicate(commander); + additionalFilter = DeckFormat.Commander.isLegalCardForCommanderPredicate(commanders); cardManager.setCaption("Cards"); } //fall through to below @@ -951,7 +952,7 @@ public class FDeckEditor extends TabPageScreen { } private boolean needsCommander() { - return parentScreen.getCommanderPage() != null && parentScreen.getDeck().getCommander() == null; + return parentScreen.getCommanderPage() != null && parentScreen.getDeck().getCommanders().isEmpty(); } private void setCommander(PaperCard card) { diff --git a/forge-gui/src/main/java/forge/planarconquest/ConquestRegion.java b/forge-gui/src/main/java/forge/planarconquest/ConquestRegion.java index 1fe410a3a3a..343aca1dd06 100644 --- a/forge-gui/src/main/java/forge/planarconquest/ConquestRegion.java +++ b/forge-gui/src/main/java/forge/planarconquest/ConquestRegion.java @@ -10,6 +10,7 @@ import com.google.common.base.Predicates; import forge.GuiBase; import forge.assets.ISkinImage; +import forge.card.CardRulesPredicates; import forge.card.ColorSet; import forge.deck.generation.DeckGenPool; import forge.item.PaperCard; @@ -112,13 +113,7 @@ public class ConquestRegion { break; case "colors": colorSet = ColorSet.fromNames(value.toCharArray()); - final int colorMask = colorSet.getColor(); - pred = new Predicate() { - @Override - public boolean apply(PaperCard pc) { - return pc.getRules().getColorIdentity().hasNoColorsExcept(colorMask); - } - }; + pred = Predicates.compose(CardRulesPredicates.hasColorIdentity(colorSet.getColor()), PaperCard.FN_GET_RULES); break; case "sets": final String[] sets = value.split(","); diff --git a/forge-gui/src/main/java/forge/planarconquest/ConquestUtil.java b/forge-gui/src/main/java/forge/planarconquest/ConquestUtil.java index a8b926232af..5772267719d 100644 --- a/forge-gui/src/main/java/forge/planarconquest/ConquestUtil.java +++ b/forge-gui/src/main/java/forge/planarconquest/ConquestUtil.java @@ -8,7 +8,9 @@ import java.util.List; import java.util.Map.Entry; import com.google.common.base.Predicate; +import com.google.common.base.Predicates; import com.google.common.collect.Iterables; +import com.google.common.collect.Lists; import forge.assets.FSkinProp; import forge.assets.IHasSkinProp; @@ -129,13 +131,9 @@ public class ConquestUtil { //remove any cards that aren't allowed in deck due to color identity if (colorIdentity != MagicColor.ALL_COLORS) { - List invalidCards = new ArrayList(); - for (PaperCard pc : availableCards) { - if (!pc.getRules().getColorIdentity().hasNoColorsExcept(colorIdentity)) { - invalidCards.add(pc); - } - } - availableCards.removeAll(invalidCards); + Predicate pred = DeckFormat.Commander.isLegalCardForCommanderPredicate(deck.getCommanders()); + + availableCards.retainAll(Lists.newArrayList(Iterables.filter(availableCards, pred))); } //create pool from available cards