diff --git a/Mage.Client/src/main/java/mage/client/deck/generator/DeckGenerator.java b/Mage.Client/src/main/java/mage/client/deck/generator/DeckGenerator.java index 67429dd5e8c..cb63a4d543a 100644 --- a/Mage.Client/src/main/java/mage/client/deck/generator/DeckGenerator.java +++ b/Mage.Client/src/main/java/mage/client/deck/generator/DeckGenerator.java @@ -54,6 +54,14 @@ import mage.util.TournamentUtil; */ public class DeckGenerator { + public static class DeckGeneratorException extends RuntimeException { + + public DeckGeneratorException(String message) { + super(message); + } + + } + private static final int MAX_TRIES = 8196; private static DeckGeneratorDialog genDialog; private static DeckGeneratorPool genPool; @@ -82,6 +90,9 @@ public class DeckGenerator { String format = genDialog.getSelectedFormat(); List setsToUse = ConstructedFormats.getSetsByFormat(format); + if (setsToUse == null) { + throw new DeckGeneratorException("Deck sets aren't initialized; please connect to a server to update the database."); + } if (setsToUse.isEmpty()) { // Default to using all sets setsToUse = ExpansionRepository.instance.getSetCodes(); diff --git a/Mage.Client/src/main/java/mage/client/dialog/ConnectDialog.java b/Mage.Client/src/main/java/mage/client/dialog/ConnectDialog.java index 9a59abd1730..6436e0172bd 100644 --- a/Mage.Client/src/main/java/mage/client/dialog/ConnectDialog.java +++ b/Mage.Client/src/main/java/mage/client/dialog/ConnectDialog.java @@ -66,6 +66,7 @@ import static mage.client.dialog.PreferencesDialog.KEY_CONNECT_FLAG; import mage.client.preference.MagePreferences; import mage.client.util.Config; import mage.client.util.gui.countryBox.CountryItemEditor; +import mage.client.util.sets.ConstructedFormats; import mage.remote.Connection; import org.apache.log4j.Logger; @@ -442,6 +443,7 @@ public class ConnectDialog extends MageDialog { private void connected() { this.saveSettings(); this.hideDialog(); + ConstructedFormats.ensureLists(); } private void keyTyped(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_keyTyped diff --git a/Mage.Client/src/main/java/mage/client/util/sets/ConstructedFormats.java b/Mage.Client/src/main/java/mage/client/util/sets/ConstructedFormats.java index 81bc28210b6..f76efc4af01 100644 --- a/Mage.Client/src/main/java/mage/client/util/sets/ConstructedFormats.java +++ b/Mage.Client/src/main/java/mage/client/util/sets/ConstructedFormats.java @@ -50,6 +50,12 @@ public class ConstructedFormats { } + public static void ensureLists() { + if (getSetsByFormat(ConstructedFormats.STANDARD) == null) { + buildLists(); + } + } + private static void buildLists() { GregorianCalendar cutoff; // month is zero based so January = 0 @@ -60,6 +66,7 @@ public class ConstructedFormats { cutoff = new GregorianCalendar(calendar.get(Calendar.YEAR) - 2, Calendar.SEPTEMBER, 1); } final Map expansionInfo = new HashMap<>(); + formats.clear(); // prevent NPE on sorting if this is not the first try for (ExpansionInfo set : ExpansionRepository.instance.getAll()) { expansionInfo.put(set.getName(), set); formats.add(set.getName()); @@ -207,10 +214,11 @@ public class ConstructedFormats { } }); - - formats.add(0, MODERN); - formats.add(0, EXTENDED); - formats.add(0, STANDARD); + if (!formats.isEmpty()) { + formats.add(0, MODERN); + formats.add(0, EXTENDED); + formats.add(0, STANDARD); + } formats.add(0, ALL); }