From 1bdc54556ae8fa6faf2edadd45ec135a6be07f38 Mon Sep 17 00:00:00 2001 From: Simown Date: Thu, 3 Sep 2015 21:30:15 +0100 Subject: [PATCH] Fixed a bug in random deck generation where generating a deck from a set with too few cards caused an exception. Minor formatting fixes. --- .../client/deck/generator/DeckGeneratorPool.java | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/Mage.Client/src/main/java/mage/client/deck/generator/DeckGeneratorPool.java b/Mage.Client/src/main/java/mage/client/deck/generator/DeckGeneratorPool.java index d45838990ee..3e92fef086e 100644 --- a/Mage.Client/src/main/java/mage/client/deck/generator/DeckGeneratorPool.java +++ b/Mage.Client/src/main/java/mage/client/deck/generator/DeckGeneratorPool.java @@ -385,6 +385,12 @@ public class DeckGeneratorPool if(spellSize < nonLandSize) { int spellsNeeded = nonLandSize-spellSize; + + // If we haven't got enough spells in reserve to fulfil the amount we need, we can't continue. + if(reserveSpells.size() < spellsNeeded) { + throw new IllegalStateException("Not enough cards found to generate deck. Please try again"); + } + List spellsToAdd = new ArrayList<>(spellsNeeded); // Initial reservoir @@ -401,7 +407,6 @@ public class DeckGeneratorPool // Add randomly selected spells needed deckCards.addAll(spellsToAdd); } - // More spells than needed else if(spellSize > (deckSize - landCount)) { @@ -410,8 +415,11 @@ public class DeckGeneratorPool deckCards.remove(random.nextInt(deckCards.size())); } } - if(deckCards.size() != nonLandSize) + + // Not strictly necessary as we check when adding cards, but worth double checking anyway. + if(deckCards.size() != nonLandSize) { throw new IllegalStateException("Not enough cards found to generate deck. Please try again"); + } // Return the fixed amount return deckCards;