diff --git a/Mage.Client/src/main/java/mage/client/deckeditor/CardSelector.java b/Mage.Client/src/main/java/mage/client/deckeditor/CardSelector.java index 5fb9a1402b5..d1d5529157e 100644 --- a/Mage.Client/src/main/java/mage/client/deckeditor/CardSelector.java +++ b/Mage.Client/src/main/java/mage/client/deckeditor/CardSelector.java @@ -709,11 +709,15 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene }//GEN-LAST:event_btnClearActionPerformed private void btnBoosterActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnBoosterActionPerformed - List booster = ((ExpansionSet)this.cbExpansionSet.getSelectedItem()).createBooster(); - for (Card card: booster) { - cards.add(card); + if (cbExpansionSet.getSelectedItem() instanceof ExpansionSet) { + List booster = ((ExpansionSet)this.cbExpansionSet.getSelectedItem()).createBooster(); + for (Card card: booster) { + cards.add(card); + } + filterCards(); + } else { + JOptionPane.showMessageDialog(null, "It's not possible to generate booster for not Expansion Set but all cards\nChoose Expandsion Set firest."); } - filterCards(); }//GEN-LAST:event_btnBoosterActionPerformed private void cbSortByActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cbSortByActionPerformed diff --git a/Mage/src/mage/cards/ExpansionSet.java b/Mage/src/mage/cards/ExpansionSet.java index 7f7e42e2484..3f9ccf68284 100644 --- a/Mage/src/mage/cards/ExpansionSet.java +++ b/Mage/src/mage/cards/ExpansionSet.java @@ -41,6 +41,7 @@ import java.net.URL; import java.net.URLClassLoader; import java.net.URLDecoder; import java.util.*; +import java.util.concurrent.ThreadPoolExecutor; import java.util.jar.JarEntry; import java.util.jar.JarInputStream; import org.apache.log4j.Logger; @@ -332,12 +333,36 @@ public abstract class ExpansionSet implements Serializable { protected void addToBooster(List booster, ExpansionSet set, Rarity rarity) { Card card = set.getRandom(rarity); if (card != null) { + boolean duplicate = true; + int retryCount = 5; + while (duplicate && retryCount > 0) { + if (!rarity.equals(Rarity.LAND)) { + // check for duplicates + if (hasCardByName(booster, card.getName())) { + card = set.getRandom(rarity); + } else { + duplicate = false; // no such card yet + } + } else { + duplicate = false; + } + retryCount--; + } Card newCard = card.copy(); newCard.assignNewId(); booster.add(newCard); } } + protected boolean hasCardByName(List booster, String name) { + for (Card card : booster) { + if (card.getName().equals(name)) { + return true; + } + } + return false; + } + protected Card getRandom(Rarity rarity) { if (!rarities.containsKey(rarity)) return null;