From 29eb441963ffc61f17f8a9fb0ac73d0fff746702 Mon Sep 17 00:00:00 2001 From: Agetian Date: Mon, 28 Sep 2015 09:38:40 +0000 Subject: [PATCH] - Constructed deck editor will now suggest a set for basic lands based on the contents of the deck (namely, it'll choose a random set with basic lands from the ones included in the deck). Only if no such set can be found or if the deck is empty the editor will default to ZEN. --- .../controllers/CEditorConstructed.java | 24 ++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) 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 718a35e04f9..99de837ddd9 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 @@ -19,8 +19,10 @@ package forge.screens.deckeditor.controllers; import com.google.common.base.Predicates; import com.google.common.base.Supplier; +import forge.StaticData; import forge.UiCommand; +import forge.card.CardEdition; import forge.card.CardRulesPredicates; import forge.deck.CardPool; import forge.deck.Deck; @@ -34,11 +36,14 @@ import forge.properties.ForgePreferences.FPref; import forge.screens.deckeditor.AddBasicLandsDialog; import forge.screens.deckeditor.SEditorIO; import forge.screens.match.controllers.CDetailPicture; +import forge.util.Aggregates; import forge.util.ItemPool; import java.util.ArrayList; +import java.util.HashSet; import java.util.List; import java.util.Map.Entry; +import java.util.Set; /** * Child controller for constructed deck editor UI. @@ -335,7 +340,24 @@ public final class CEditorConstructed extends ACEditorBase { Deck deck = editor.getDeckController().getModel(); if (deck == null) { return; } - AddBasicLandsDialog dialog = new AddBasicLandsDialog(deck, null, restrictedCatalog); + List landCodes = new ArrayList<>(); + Set availableEditions = new HashSet<>(); + + for (PaperCard c : deck.getAllCardsInASinglePool().toFlatList()) { + availableEditions.add(c.getEdition()); + } + + for (String edCode : availableEditions) { + CardEdition ed = FModel.getMagicDb().getEditions().get(edCode); + // Sets with only 2 types of lands (e.g. duel decks) are handled by Predicated.hasBasicLands + if (CardEdition.Predicates.hasBasicLands.apply(ed)) { + landCodes.add(edCode); + } + } + + CardEdition defaultLandSet = FModel.getMagicDb().getEditions().get(landCodes.isEmpty() ? "ZEN" : Aggregates.random(landCodes)); + + AddBasicLandsDialog dialog = new AddBasicLandsDialog(deck, defaultLandSet, restrictedCatalog); CardPool landsToAdd = dialog.show(); if (landsToAdd != null) { editor.onAddItems(landsToAdd, false);