diff --git a/src/main/java/forge/deck/Deck.java b/src/main/java/forge/deck/Deck.java index d8106f41d03..81ada88a247 100644 --- a/src/main/java/forge/deck/Deck.java +++ b/src/main/java/forge/deck/Deck.java @@ -38,6 +38,7 @@ import forge.deck.io.DeckSerializer; import forge.gui.deckeditor.tables.TableSorter; import forge.item.CardPrinted; import forge.item.ItemPoolView; +import forge.game.GameType; import forge.game.limited.ReadDraftRankings; import forge.util.FileSection; import forge.util.FileUtil; @@ -316,6 +317,18 @@ public class Deck extends DeckBase implements Serializable { return (20.0 / (best + (2 * value))); } + public boolean meetsGameTypeRequirements(GameType type) { + int deckSize = main.countAll(); + int deckDistinct = main.countDistinct(); + Integer max = type.getDeckMaximum(); + + if (deckSize < type.getDeckMinimum() || (max != null && deckSize > max) || + (type.isSingleton() && deckDistinct != deckSize)) { + return false; + } + + return true; + } public static final Function FN_NAME_SELECTOR = new Function() { @Override diff --git a/src/main/java/forge/game/GameNew.java b/src/main/java/forge/game/GameNew.java index 17bde73e024..c3b6f3c806d 100644 --- a/src/main/java/forge/game/GameNew.java +++ b/src/main/java/forge/game/GameNew.java @@ -414,5 +414,5 @@ public class GameNew { "Play or Draw?", JOptionPane.INFORMATION_MESSAGE); computerStartsGame(); - } + } } \ No newline at end of file diff --git a/src/main/java/forge/game/GameType.java b/src/main/java/forge/game/GameType.java index 19af0461244..dcfa614ffef 100644 --- a/src/main/java/forge/game/GameType.java +++ b/src/main/java/forge/game/GameType.java @@ -23,19 +23,22 @@ package forge.game; public enum GameType { /** The Constructed. */ - Constructed(false), + Constructed(false, 60), /** The Sealed. */ - Sealed(true), + Sealed(true, 40), /** The Draft. */ - Draft(true), + Draft(true, 40), /** The Commander. */ - Commander(false), + Commander(false, 100, 100, true), /** The Quest. */ - Quest(true), + Quest(true, 40), /** */ - Gauntlet(true); + Gauntlet(true, 40); private final boolean bLimited; + private final int deckMinimum; + private final Integer deckMaximum; + private final boolean singleton; /** * Checks if is limited. @@ -45,15 +48,35 @@ public enum GameType { public final boolean isLimited() { return this.bLimited; } + + public final int getDeckMinimum() { + return this.deckMinimum; + } + + public final Integer getDeckMaximum() { + return this.deckMaximum; + } + + public final boolean isSingleton() { + return this.singleton; + } + GameType(final boolean isLimited, int min) { + this(isLimited, min, null, false); + } + + /** * Instantiates a new game type. * * @param isLimited * the is limited */ - GameType(final boolean isLimited) { + GameType(final boolean isLimited, int min, Integer max, boolean singleton) { this.bLimited = isLimited; + this.deckMinimum = min; + this.deckMaximum = max; + this.singleton = singleton; } /** diff --git a/src/main/java/forge/gui/home/quest/SSubmenuQuestUtil.java b/src/main/java/forge/gui/home/quest/SSubmenuQuestUtil.java index fc6c41151bf..72ff004569d 100644 --- a/src/main/java/forge/gui/home/quest/SSubmenuQuestUtil.java +++ b/src/main/java/forge/gui/home/quest/SSubmenuQuestUtil.java @@ -4,6 +4,7 @@ import java.io.File; import java.util.List; import javax.swing.ImageIcon; +import javax.swing.JOptionPane; import javax.swing.SwingUtilities; import javax.swing.SwingWorker; @@ -222,6 +223,14 @@ public class SSubmenuQuestUtil { final QuestController qData = Singletons.getModel().getQuest(); final QuestEvent event = selectedOpponent.getEvent(); + Deck deck = SSubmenuQuestUtil.getCurrentDeck(); + if (!deck.meetsGameTypeRequirements(GameType.Quest)) { + String msg = "Chosen Deck doesn't meet the requirements (Minimum 40 cards). Please edit or choose a different deck."; + JOptionPane.showMessageDialog(null, msg); + System.out.println(msg); + return; + } + SwingUtilities.invokeLater(new Runnable() { @Override public void run() {