forked from External/mage
Add land dialog is now also shown during free deck building. Added a set selection drop down box to select the set the lands are used from.
This commit is contained in:
parent
1456e0172c
commit
3b9cb1dc6e
4 changed files with 161 additions and 95 deletions
|
|
@ -31,6 +31,9 @@ import java.util.HashSet;
|
|||
import java.util.List;
|
||||
import java.util.Random;
|
||||
import java.util.Set;
|
||||
import java.util.SortedSet;
|
||||
import java.util.TreeSet;
|
||||
import javax.swing.DefaultComboBoxModel;
|
||||
import javax.swing.JLayeredPane;
|
||||
import mage.Mana;
|
||||
import mage.cards.Card;
|
||||
|
|
@ -41,6 +44,7 @@ import mage.cards.repository.CardRepository;
|
|||
import mage.cards.repository.ExpansionInfo;
|
||||
import mage.cards.repository.ExpansionRepository;
|
||||
import mage.client.MageFrame;
|
||||
import mage.client.constants.Constants.DeckEditorMode;
|
||||
import mage.constants.Rarity;
|
||||
|
||||
/**
|
||||
|
|
@ -60,45 +64,49 @@ public class AddLandDialog extends MageDialog {
|
|||
this.setModal(true);
|
||||
}
|
||||
|
||||
public void showDialog(Deck deck) {
|
||||
public void showDialog(Deck deck, DeckEditorMode mode) {
|
||||
this.deck = deck;
|
||||
|
||||
// decide from which sets basic lands are taken from
|
||||
for (String setCode :deck.getExpansionSetCodes()) {
|
||||
ExpansionInfo expansionInfo = ExpansionRepository.instance.getSetByCode(setCode);
|
||||
if (expansionInfo != null && expansionInfo.hasBasicLands()) {
|
||||
this.setCodesland.add(expansionInfo.getCode());
|
||||
}
|
||||
}
|
||||
|
||||
// if sets have no basic land, take land from block
|
||||
if (this.setCodesland.isEmpty()) {
|
||||
SortedSet<String> landSets = new TreeSet<>();
|
||||
if (!mode.equals(DeckEditorMode.FREE_BUILDING)) {
|
||||
// decide from which sets basic lands are taken from
|
||||
for (String setCode :deck.getExpansionSetCodes()) {
|
||||
ExpansionInfo expansionInfo = ExpansionRepository.instance.getSetByCode(setCode);
|
||||
if (expansionInfo != null) {
|
||||
List<ExpansionInfo> blockSets = ExpansionRepository.instance.getSetsFromBlock(expansionInfo.getBlockName());
|
||||
for (ExpansionInfo blockSet: blockSets) {
|
||||
if (blockSet.hasBasicLands()) {
|
||||
this.setCodesland.add(blockSet.getCode());
|
||||
if (expansionInfo != null && expansionInfo.hasBasicLands()) {
|
||||
this.setCodesland.add(expansionInfo.getCode());
|
||||
landSets.add(expansionInfo.getName());
|
||||
}
|
||||
}
|
||||
|
||||
// if sets have no basic land, take land from block
|
||||
if (this.setCodesland.isEmpty()) {
|
||||
for (String setCode :deck.getExpansionSetCodes()) {
|
||||
ExpansionInfo expansionInfo = ExpansionRepository.instance.getSetByCode(setCode);
|
||||
if (expansionInfo != null) {
|
||||
List<ExpansionInfo> blockSets = ExpansionRepository.instance.getSetsFromBlock(expansionInfo.getBlockName());
|
||||
for (ExpansionInfo blockSet: blockSets) {
|
||||
if (blockSet.hasBasicLands()) {
|
||||
this.setCodesland.add(blockSet.getCode());
|
||||
landSets.add(blockSet.getName());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// if still no set with lands found, take one by random
|
||||
}
|
||||
// if still no set with lands found, add list of all available
|
||||
if (this.setCodesland.isEmpty()) {
|
||||
// if sets have no basic lands and also it has no parent or parent has no lands get last set with lands
|
||||
// select a set with basic lands by random
|
||||
Random generator = new Random();
|
||||
List<ExpansionInfo> basicLandSets = ExpansionRepository.instance.getSetsWithBasicLandsByReleaseDate();
|
||||
if (basicLandSets.size() > 0) {
|
||||
this.setCodesland.add(basicLandSets.get(generator.nextInt(basicLandSets.size())).getCode());
|
||||
for (ExpansionInfo expansionInfo: basicLandSets) {
|
||||
landSets.add(expansionInfo.getName());
|
||||
}
|
||||
}
|
||||
|
||||
if (this.setCodesland.isEmpty()) {
|
||||
}
|
||||
if (landSets.isEmpty()) {
|
||||
throw new IllegalArgumentException("No set with basic land was found");
|
||||
}
|
||||
if(landSets.size() > 1) {
|
||||
landSets.add("<Random lands>");
|
||||
}
|
||||
cbLandSet.setModel(new DefaultComboBoxModel(landSets.toArray()));
|
||||
|
||||
MageFrame.getDesktop().add(this, JLayeredPane.PALETTE_LAYER);
|
||||
this.setVisible(true);
|
||||
|
|
@ -106,14 +114,22 @@ public class AddLandDialog extends MageDialog {
|
|||
|
||||
private void addLands(String landName, int number) {
|
||||
Random random = new Random();
|
||||
String landSetName = (String) cbLandSet.getSelectedItem();
|
||||
|
||||
CardCriteria criteria = new CardCriteria();
|
||||
if (!setCodesland.isEmpty()) {
|
||||
if (landSetName.equals("<Random lands>")) {
|
||||
criteria.setCodes(setCodesland.toArray(new String[setCodesland.size()]));
|
||||
}
|
||||
} else {
|
||||
ExpansionInfo expansionInfo = ExpansionRepository.instance.getSetByName(landSetName);
|
||||
if (expansionInfo == null) {
|
||||
throw new IllegalArgumentException("Code of Set " + landSetName + " not found");
|
||||
}
|
||||
criteria.setCodes(expansionInfo.getCode());
|
||||
}
|
||||
criteria.rarities(Rarity.LAND).name(landName);
|
||||
List<CardInfo> cards = CardRepository.instance.findCards(criteria);
|
||||
if (cards.isEmpty()) {
|
||||
return;
|
||||
throw new IllegalArgumentException("No basic lands found in Set: " + landSetName);
|
||||
}
|
||||
|
||||
for (int i = 0; i < number; i++) {
|
||||
|
|
@ -132,16 +148,18 @@ public class AddLandDialog extends MageDialog {
|
|||
private void initComponents() {
|
||||
|
||||
jButton2 = new javax.swing.JButton();
|
||||
lblLandSet = new javax.swing.JLabel();
|
||||
cbLandSet = new javax.swing.JComboBox();
|
||||
lblForest = new javax.swing.JLabel();
|
||||
spnForest = new javax.swing.JSpinner();
|
||||
spnIsland = new javax.swing.JSpinner();
|
||||
lblIsland = new javax.swing.JLabel();
|
||||
spnIsland = new javax.swing.JSpinner();
|
||||
lblMountain = new javax.swing.JLabel();
|
||||
spnMountain = new javax.swing.JSpinner();
|
||||
lblPains = new javax.swing.JLabel();
|
||||
spnPlains = new javax.swing.JSpinner();
|
||||
spnMountain = new javax.swing.JSpinner();
|
||||
lblMountain = new javax.swing.JLabel();
|
||||
spnSwamp = new javax.swing.JSpinner();
|
||||
lblSwamp = new javax.swing.JLabel();
|
||||
spnSwamp = new javax.swing.JSpinner();
|
||||
btnAdd = new javax.swing.JButton();
|
||||
btnCancel = new javax.swing.JButton();
|
||||
btnAutoAdd = new javax.swing.JButton();
|
||||
|
|
@ -150,26 +168,30 @@ public class AddLandDialog extends MageDialog {
|
|||
|
||||
setTitle("Add Land");
|
||||
|
||||
lblLandSet.setText("Set");
|
||||
|
||||
cbLandSet.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));
|
||||
|
||||
lblForest.setText("Forest");
|
||||
|
||||
spnForest.setModel(new javax.swing.SpinnerNumberModel(Integer.valueOf(0), Integer.valueOf(0), null, Integer.valueOf(1)));
|
||||
|
||||
lblIsland.setText("Island");
|
||||
|
||||
spnIsland.setModel(new javax.swing.SpinnerNumberModel(Integer.valueOf(0), Integer.valueOf(0), null, Integer.valueOf(1)));
|
||||
|
||||
lblIsland.setText("Island");
|
||||
lblMountain.setText("Mountain");
|
||||
|
||||
spnMountain.setModel(new javax.swing.SpinnerNumberModel(Integer.valueOf(0), Integer.valueOf(0), null, Integer.valueOf(1)));
|
||||
|
||||
lblPains.setText("Plains");
|
||||
|
||||
spnPlains.setModel(new javax.swing.SpinnerNumberModel(Integer.valueOf(0), Integer.valueOf(0), null, Integer.valueOf(1)));
|
||||
|
||||
spnMountain.setModel(new javax.swing.SpinnerNumberModel(Integer.valueOf(0), Integer.valueOf(0), null, Integer.valueOf(1)));
|
||||
|
||||
lblMountain.setText("Mountain");
|
||||
lblSwamp.setText("Swamp");
|
||||
|
||||
spnSwamp.setModel(new javax.swing.SpinnerNumberModel(Integer.valueOf(0), Integer.valueOf(0), null, Integer.valueOf(1)));
|
||||
|
||||
lblSwamp.setText("Swamp");
|
||||
|
||||
btnAdd.setText("Add");
|
||||
btnAdd.addActionListener(new java.awt.event.ActionListener() {
|
||||
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
||||
|
|
@ -197,40 +219,50 @@ public class AddLandDialog extends MageDialog {
|
|||
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
.addGroup(layout.createSequentialGroup()
|
||||
.addContainerGap()
|
||||
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
|
||||
.addGroup(layout.createSequentialGroup()
|
||||
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
|
||||
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
|
||||
.addGroup(layout.createSequentialGroup()
|
||||
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
.addComponent(lblIsland)
|
||||
.addComponent(lblMountain)
|
||||
.addComponent(lblForest))
|
||||
.addComponent(lblForest)
|
||||
.addComponent(lblLandSet))
|
||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
|
||||
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
|
||||
.addComponent(spnMountain, javax.swing.GroupLayout.DEFAULT_SIZE, 85, Short.MAX_VALUE)
|
||||
.addComponent(spnIsland)
|
||||
.addComponent(spnForest)))
|
||||
.addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
|
||||
.addComponent(lblPains)
|
||||
.addGap(21, 21, 21)
|
||||
.addComponent(spnPlains))
|
||||
.addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
|
||||
.addComponent(lblSwamp)
|
||||
.addGap(14, 14, 14)
|
||||
.addComponent(spnSwamp)))
|
||||
.addGap(114, 114, 114))
|
||||
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
|
||||
.addComponent(spnMountain, javax.swing.GroupLayout.DEFAULT_SIZE, 85, Short.MAX_VALUE)
|
||||
.addComponent(spnIsland)
|
||||
.addComponent(spnForest))
|
||||
.addComponent(cbLandSet, javax.swing.GroupLayout.PREFERRED_SIZE, 207, javax.swing.GroupLayout.PREFERRED_SIZE)))
|
||||
.addGroup(layout.createSequentialGroup()
|
||||
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
|
||||
.addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
|
||||
.addComponent(lblSwamp)
|
||||
.addGap(14, 14, 14)
|
||||
.addComponent(spnSwamp))
|
||||
.addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
|
||||
.addComponent(lblPains)
|
||||
.addGap(21, 21, 21)
|
||||
.addComponent(spnPlains)))
|
||||
.addGap(122, 122, 122)))
|
||||
.addContainerGap())
|
||||
.addGroup(layout.createSequentialGroup()
|
||||
.addComponent(btnCancel)
|
||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
|
||||
.addComponent(btnAutoAdd)
|
||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
|
||||
.addComponent(btnAdd)
|
||||
.addGap(0, 40, Short.MAX_VALUE))))
|
||||
.addGap(0, 0, Short.MAX_VALUE))))
|
||||
);
|
||||
layout.setVerticalGroup(
|
||||
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
.addGroup(layout.createSequentialGroup()
|
||||
.addContainerGap()
|
||||
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
|
||||
.addComponent(cbLandSet, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||
.addComponent(lblLandSet))
|
||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
|
||||
.addComponent(lblForest)
|
||||
.addComponent(spnForest, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
|
||||
|
|
@ -250,7 +282,7 @@ public class AddLandDialog extends MageDialog {
|
|||
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
|
||||
.addComponent(lblSwamp)
|
||||
.addComponent(spnSwamp, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
|
||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 38, Short.MAX_VALUE)
|
||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
|
||||
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
|
||||
.addComponent(btnAdd)
|
||||
.addComponent(btnCancel)
|
||||
|
|
@ -322,9 +354,11 @@ public class AddLandDialog extends MageDialog {
|
|||
private javax.swing.JButton btnAdd;
|
||||
private javax.swing.JButton btnAutoAdd;
|
||||
private javax.swing.JButton btnCancel;
|
||||
private javax.swing.JComboBox cbLandSet;
|
||||
private javax.swing.JButton jButton2;
|
||||
private javax.swing.JLabel lblForest;
|
||||
private javax.swing.JLabel lblIsland;
|
||||
private javax.swing.JLabel lblLandSet;
|
||||
private javax.swing.JLabel lblMountain;
|
||||
private javax.swing.JLabel lblPains;
|
||||
private javax.swing.JLabel lblSwamp;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue