Added cubes for Sealed and Daft Tournaments. Added a simple Swiss like tournament format.

This commit is contained in:
LevelX2 2014-01-10 19:58:55 +01:00
parent e3d543fa76
commit e490d6af61
44 changed files with 3119 additions and 246 deletions

View file

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" ?>
<Form version="1.3" maxVersion="1.7" type="org.netbeans.modules.form.forminfo.JInternalFrameFormInfo">
<Form version="1.5" maxVersion="1.7" type="org.netbeans.modules.form.forminfo.JInternalFrameFormInfo">
<Properties>
<Property name="title" type="java.lang.String" value="New Tournament"/>
</Properties>
@ -22,18 +22,17 @@
<Layout>
<DimensionLayout dim="0">
<Group type="103" groupAlignment="0" attributes="0">
<Group type="102" alignment="1" attributes="0">
<Group type="102" attributes="0">
<EmptySpace max="-2" attributes="0"/>
<Group type="103" groupAlignment="0" attributes="0">
<Group type="102" attributes="0">
<Component id="jLabel2" min="-2" max="-2" attributes="0"/>
<EmptySpace max="-2" attributes="0"/>
<Component id="spnNumPlayers" min="-2" pref="45" max="-2" attributes="0"/>
<EmptySpace max="-2" attributes="0"/>
<Component id="spnNumPlayers" min="-2" pref="46" max="-2" attributes="0"/>
<EmptySpace min="-2" pref="28" max="-2" attributes="0"/>
<Component id="pnlDraftOptions" min="-2" max="-2" attributes="0"/>
<EmptySpace max="32767" attributes="0"/>
<Component id="cbAllowSpectators" min="-2" max="-2" attributes="0"/>
<EmptySpace min="-2" pref="9" max="-2" attributes="0"/>
</Group>
<Component id="jPanel1" alignment="0" max="32767" attributes="0"/>
<Component id="pnlPacks" alignment="1" max="32767" attributes="0"/>
@ -43,8 +42,6 @@
<EmptySpace max="-2" attributes="0"/>
<Component id="btnCancel" min="-2" max="-2" attributes="0"/>
</Group>
<Group type="102" attributes="0">
<Group type="103" groupAlignment="0" attributes="0">
<Group type="102" alignment="0" attributes="0">
<Group type="103" groupAlignment="1" max="-2" attributes="0">
<Group type="102" alignment="0" attributes="0">
@ -57,34 +54,43 @@
<Component id="cbTimeLimit" max="32767" attributes="1"/>
</Group>
<Group type="102" alignment="0" attributes="0">
<Component id="jLabel1" min="-2" max="-2" attributes="0"/>
<Group type="103" groupAlignment="1" attributes="0">
<Component id="lblTournamentType" min="-2" max="-2" attributes="0"/>
<Component id="lblDraftCube" min="-2" max="-2" attributes="0"/>
</Group>
<EmptySpace max="-2" attributes="0"/>
<Group type="103" groupAlignment="0" attributes="0">
<Component id="cbDraftCube" min="-2" pref="295" max="-2" attributes="0"/>
<Component id="cbTournamentType" min="-2" pref="295" max="-2" attributes="0"/>
</Group>
</Group>
</Group>
<EmptySpace max="-2" attributes="0"/>
<Group type="103" groupAlignment="0" attributes="0">
<Group type="102" attributes="0">
<Component id="lblConstructionTime" min="-2" pref="141" max="-2" attributes="0"/>
<EmptySpace type="unrelated" max="-2" attributes="0"/>
<Component id="lblConstructionTime" max="32767" attributes="0"/>
<EmptySpace max="-2" attributes="0"/>
<Component id="spnConstructTime" min="-2" pref="50" max="-2" attributes="0"/>
</Group>
<Group type="102" alignment="0" attributes="0">
<Group type="102" attributes="0">
<Component id="lblFreeMulligans" min="-2" max="-2" attributes="0"/>
<EmptySpace max="-2" attributes="0"/>
<Component id="spnFreeMulligans" min="-2" pref="41" max="-2" attributes="0"/>
<EmptySpace max="-2" attributes="0"/>
<EmptySpace type="separate" max="-2" attributes="0"/>
<Component id="lblNumWins" min="-2" max="-2" attributes="0"/>
<EmptySpace max="-2" attributes="0"/>
<EmptySpace max="32767" attributes="0"/>
<Component id="spnNumWins" min="-2" pref="50" max="-2" attributes="0"/>
</Group>
</Group>
</Group>
<Component id="jLabel5" alignment="0" min="-2" max="-2" attributes="0"/>
</Group>
<Group type="102" alignment="1" attributes="0">
<EmptySpace min="0" pref="0" max="32767" attributes="0"/>
<Component id="lblNumRounds" min="-2" max="-2" attributes="0"/>
<EmptySpace max="-2" attributes="0"/>
<Component id="spnNumRounds" min="-2" pref="50" max="-2" attributes="0"/>
</Group>
</Group>
</Group>
<Component id="lblPacks" alignment="0" min="-2" max="-2" attributes="0"/>
</Group>
<EmptySpace max="-2" attributes="0"/>
</Group>
</Group>
@ -92,7 +98,7 @@
<DimensionLayout dim="1">
<Group type="103" groupAlignment="0" attributes="0">
<Group type="102" attributes="0">
<EmptySpace max="-2" attributes="0"/>
<EmptySpace min="-2" max="-2" attributes="0"/>
<Group type="103" groupAlignment="3" attributes="0">
<Component id="txtName" alignment="3" min="-2" max="-2" attributes="0"/>
<Component id="lblName" alignment="3" min="-2" max="-2" attributes="0"/>
@ -103,7 +109,7 @@
</Group>
<EmptySpace min="-2" max="-2" attributes="0"/>
<Group type="103" groupAlignment="3" attributes="0">
<Component id="jLabel1" alignment="3" min="-2" max="-2" attributes="0"/>
<Component id="lblTournamentType" alignment="3" min="-2" max="-2" attributes="0"/>
<Component id="cbTournamentType" alignment="3" min="-2" max="-2" attributes="0"/>
<Component id="lblFreeMulligans" alignment="3" min="-2" max="-2" attributes="0"/>
<Component id="spnFreeMulligans" alignment="3" min="-2" max="-2" attributes="0"/>
@ -111,37 +117,31 @@
<Component id="spnNumWins" alignment="3" min="-2" max="-2" attributes="0"/>
</Group>
<EmptySpace min="-2" max="-2" attributes="0"/>
<Component id="jLabel5" min="-2" max="-2" attributes="0"/>
<EmptySpace min="-2" max="-2" attributes="0"/>
<Component id="pnlPacks" pref="69" max="32767" attributes="0"/>
<EmptySpace min="-2" pref="11" max="-2" attributes="0"/>
<Group type="103" groupAlignment="0" attributes="0">
<Group type="102" attributes="0">
<Group type="103" groupAlignment="0" attributes="0">
<Group type="102" attributes="0">
<Component id="jLabel2" min="-2" max="-2" attributes="0"/>
<EmptySpace pref="21" max="32767" attributes="0"/>
<Group type="103" groupAlignment="3" attributes="0">
<Component id="cbDraftCube" alignment="3" min="-2" max="-2" attributes="0"/>
<Component id="lblDraftCube" alignment="3" min="-2" max="-2" attributes="0"/>
<Component id="spnNumRounds" alignment="3" min="-2" max="-2" attributes="0"/>
<Component id="lblNumRounds" alignment="3" min="-2" max="-2" attributes="0"/>
</Group>
<Group type="102" attributes="0">
<Group type="103" groupAlignment="1" attributes="0">
<Component id="spnNumPlayers" pref="25" max="32767" attributes="1"/>
<Component id="pnlDraftOptions" max="32767" attributes="1"/>
</Group>
<EmptySpace min="-2" pref="14" max="-2" attributes="0"/>
</Group>
</Group>
<Component id="jPanel1" min="-2" max="-2" attributes="0"/>
<EmptySpace max="-2" attributes="0"/>
<Component id="lblPacks" min="-2" max="-2" attributes="0"/>
<EmptySpace min="-2" max="-2" attributes="0"/>
<Component id="pnlPacks" pref="89" max="32767" attributes="0"/>
<EmptySpace min="-2" max="-2" attributes="0"/>
<Group type="103" groupAlignment="1" max="-2" attributes="0">
<Component id="cbAllowSpectators" alignment="1" max="32767" attributes="0"/>
<Component id="jLabel2" alignment="1" max="32767" attributes="0"/>
<Component id="spnNumPlayers" alignment="1" max="32767" attributes="1"/>
<Component id="pnlDraftOptions" alignment="1" pref="0" max="32767" attributes="1"/>
</Group>
<EmptySpace min="-2" max="-2" attributes="0"/>
<Component id="jPanel1" min="-2" max="-2" attributes="0"/>
<EmptySpace min="-2" max="-2" attributes="0"/>
<Group type="103" groupAlignment="3" attributes="0">
<Component id="btnOk" alignment="3" min="-2" max="-2" attributes="0"/>
<Component id="btnCancel" alignment="3" min="-2" max="-2" attributes="0"/>
</Group>
</Group>
<Group type="102" attributes="0">
<Component id="cbAllowSpectators" min="-2" max="-2" attributes="0"/>
<EmptySpace min="0" pref="0" max="32767" attributes="0"/>
</Group>
</Group>
<EmptySpace max="-2" attributes="0"/>
</Group>
</Group>
</DimensionLayout>
@ -158,6 +158,9 @@
<Properties>
<Property name="text" type="java.lang.String" value="Time Limit:"/>
</Properties>
<BindingProperties>
<BindingProperty name="labelFor" source="cbTimeLimit" target="lbTimeLimit" targetPath="labelFor" updateStrategy="0" immediately="false"/>
</BindingProperties>
</Component>
<Component class="javax.swing.JComboBox" name="cbTimeLimit">
</Component>
@ -168,7 +171,7 @@
</Component>
<Component class="javax.swing.JSpinner" name="spnConstructTime">
</Component>
<Component class="javax.swing.JLabel" name="jLabel1">
<Component class="javax.swing.JLabel" name="lblTournamentType">
<Properties>
<Property name="text" type="java.lang.String" value="Tournament Type:"/>
</Properties>
@ -205,6 +208,44 @@
<EventHandler event="stateChanged" listener="javax.swing.event.ChangeListener" parameters="javax.swing.event.ChangeEvent" handler="spnNumWinsnumPlayersChanged"/>
</Events>
</Component>
<Component class="javax.swing.JLabel" name="lblDraftCube">
<Properties>
<Property name="text" type="java.lang.String" value="Draft Cube"/>
</Properties>
</Component>
<Component class="javax.swing.JComboBox" name="cbDraftCube">
<Properties>
<Property name="model" type="javax.swing.ComboBoxModel" editor="org.netbeans.modules.form.editors2.ComboBoxModelEditor">
<StringArray count="4">
<StringItem index="0" value="Item 1"/>
<StringItem index="1" value="Item 2"/>
<StringItem index="2" value="Item 3"/>
<StringItem index="3" value="Item 4"/>
</StringArray>
</Property>
</Properties>
<Events>
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="cbDraftCubeActionPerformed"/>
</Events>
</Component>
<Component class="javax.swing.JLabel" name="lblNumRounds">
<Properties>
<Property name="text" type="java.lang.String" value="Number of Swiss Rounds:"/>
</Properties>
</Component>
<Component class="javax.swing.JSpinner" name="spnNumRounds">
<Events>
<EventHandler event="stateChanged" listener="javax.swing.event.ChangeListener" parameters="javax.swing.event.ChangeEvent" handler="spnNumRoundsnumPlayersChanged"/>
</Events>
</Component>
<Component class="javax.swing.JLabel" name="lblPacks">
<Properties>
<Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
<Font name="Tahoma" size="11" style="1"/>
</Property>
<Property name="text" type="java.lang.String" value="Packs"/>
</Properties>
</Component>
<Container class="javax.swing.JPanel" name="pnlPacks">
<Layout class="org.netbeans.modules.form.compat2.layouts.DesignGridLayout">
@ -229,21 +270,23 @@
<DimensionLayout dim="0">
<Group type="103" groupAlignment="0" attributes="0">
<Group type="102" alignment="0" attributes="0">
<EmptySpace max="-2" attributes="0"/>
<Component id="jLabel6" min="-2" max="-2" attributes="0"/>
<Component id="jLabel6" min="-2" pref="49" max="-2" attributes="0"/>
<EmptySpace max="-2" attributes="0"/>
<Component id="cbDraftTiming" min="-2" pref="107" max="-2" attributes="0"/>
<EmptySpace max="32767" attributes="0"/>
<EmptySpace pref="19" max="32767" attributes="0"/>
</Group>
</Group>
</DimensionLayout>
<DimensionLayout dim="1">
<Group type="103" groupAlignment="0" attributes="0">
<Group type="102" alignment="0" attributes="0">
<Component id="jLabel6" min="-2" max="-2" attributes="0"/>
<EmptySpace min="0" pref="0" max="32767" attributes="0"/>
<Group type="102" attributes="0">
<EmptySpace min="-2" pref="3" max="-2" attributes="0"/>
<Group type="103" groupAlignment="3" attributes="0">
<Component id="jLabel6" alignment="3" min="-2" pref="22" max="-2" attributes="0"/>
<Component id="cbDraftTiming" alignment="3" min="-2" max="-2" attributes="1"/>
</Group>
<EmptySpace max="-2" attributes="0"/>
</Group>
<Component id="cbDraftTiming" alignment="0" max="32767" attributes="1"/>
</Group>
</DimensionLayout>
</Layout>
@ -264,6 +307,9 @@
</StringArray>
</Property>
</Properties>
<Events>
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="cbDraftTimingActionPerformed"/>
</Events>
</Component>
</SubComponents>
</Container>
@ -272,22 +318,6 @@
<Property name="text" type="java.lang.String" value="Allow spectators"/>
</Properties>
</Component>
<Component class="javax.swing.JButton" name="btnOk">
<Properties>
<Property name="text" type="java.lang.String" value="OK"/>
</Properties>
<Events>
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="btnOkActionPerformed"/>
</Events>
</Component>
<Component class="javax.swing.JButton" name="btnCancel">
<Properties>
<Property name="text" type="java.lang.String" value="Cancel"/>
</Properties>
<Events>
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="btnCancelActionPerformed"/>
</Events>
</Component>
<Container class="javax.swing.JPanel" name="jPanel1">
<Layout>
@ -349,13 +379,21 @@
</Container>
</SubComponents>
</Container>
<Component class="javax.swing.JLabel" name="jLabel5">
<Component class="javax.swing.JButton" name="btnOk">
<Properties>
<Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
<Font name="Tahoma" size="11" style="1"/>
</Property>
<Property name="text" type="java.lang.String" value="Packs"/>
<Property name="text" type="java.lang.String" value="OK"/>
</Properties>
<Events>
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="btnOkActionPerformed"/>
</Events>
</Component>
<Component class="javax.swing.JButton" name="btnCancel">
<Properties>
<Property name="text" type="java.lang.String" value="Cancel"/>
</Properties>
<Events>
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="btnCancelActionPerformed"/>
</Events>
</Component>
</SubComponents>
</Form>

View file

@ -81,6 +81,7 @@ public class NewTournamentDialog extends MageDialog {
this.spnNumWins.setModel(new SpinnerNumberModel(2, 1, 5, 1));
this.spnFreeMulligans.setModel(new SpinnerNumberModel(0, 0, 5, 1));
this.spnConstructTime.setModel(new SpinnerNumberModel(10, 10, 30, 5));
this.spnNumRounds.setModel(new SpinnerNumberModel(2, 2, 10, 1));
}
public void showDialog(UUID roomId) {
@ -89,6 +90,7 @@ public class NewTournamentDialog extends MageDialog {
this.txtPlayer1Name.setText(session.getUserName());
cbTournamentType.setModel(new DefaultComboBoxModel(session.getTournamentTypes().toArray()));
cbTimeLimit.setModel(new DefaultComboBoxModel(MatchTimeLimit.values()));
cbDraftCube.setModel(new DefaultComboBoxModel(session.getDraftCubes()));
cbDraftTiming.setModel(new DefaultComboBoxModel(DraftOptions.TimingOption.values()));
cbAllowSpectators.setSelected(true);
@ -107,6 +109,7 @@ public class NewTournamentDialog extends MageDialog {
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
bindingGroup = new org.jdesktop.beansbinding.BindingGroup();
lblName = new javax.swing.JLabel();
txtName = new javax.swing.JTextField();
@ -114,12 +117,17 @@ public class NewTournamentDialog extends MageDialog {
cbTimeLimit = new javax.swing.JComboBox();
lblConstructionTime = new javax.swing.JLabel();
spnConstructTime = new javax.swing.JSpinner();
jLabel1 = new javax.swing.JLabel();
lblTournamentType = new javax.swing.JLabel();
cbTournamentType = new javax.swing.JComboBox();
lblFreeMulligans = new javax.swing.JLabel();
spnFreeMulligans = new javax.swing.JSpinner();
lblNumWins = new javax.swing.JLabel();
spnNumWins = new javax.swing.JSpinner();
lblDraftCube = new javax.swing.JLabel();
cbDraftCube = new javax.swing.JComboBox();
lblNumRounds = new javax.swing.JLabel();
spnNumRounds = new javax.swing.JSpinner();
lblPacks = new javax.swing.JLabel();
pnlPacks = new javax.swing.JPanel();
jLabel2 = new javax.swing.JLabel();
spnNumPlayers = new javax.swing.JSpinner();
@ -127,14 +135,13 @@ public class NewTournamentDialog extends MageDialog {
jLabel6 = new javax.swing.JLabel();
cbDraftTiming = new javax.swing.JComboBox();
cbAllowSpectators = new javax.swing.JCheckBox();
btnOk = new javax.swing.JButton();
btnCancel = new javax.swing.JButton();
jPanel1 = new javax.swing.JPanel();
jLabel3 = new javax.swing.JLabel();
jLabel4 = new javax.swing.JLabel();
txtPlayer1Name = new javax.swing.JTextField();
pnlOtherPlayers = new javax.swing.JPanel();
jLabel5 = new javax.swing.JLabel();
btnOk = new javax.swing.JButton();
btnCancel = new javax.swing.JButton();
setTitle("New Tournament");
@ -142,9 +149,12 @@ public class NewTournamentDialog extends MageDialog {
lbTimeLimit.setText("Time Limit:");
org.jdesktop.beansbinding.Binding binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, cbTimeLimit, org.jdesktop.beansbinding.ObjectProperty.create(), lbTimeLimit, org.jdesktop.beansbinding.BeanProperty.create("labelFor"));
bindingGroup.addBinding(binding);
lblConstructionTime.setText("Construction Time (Minutes):");
jLabel1.setText("Tournament Type:");
lblTournamentType.setText("Tournament Type:");
cbTournamentType.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));
cbTournamentType.addActionListener(new java.awt.event.ActionListener() {
@ -163,6 +173,26 @@ public class NewTournamentDialog extends MageDialog {
}
});
lblDraftCube.setText("Draft Cube");
cbDraftCube.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));
cbDraftCube.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
cbDraftCubeActionPerformed(evt);
}
});
lblNumRounds.setText("Number of Swiss Rounds:");
spnNumRounds.addChangeListener(new javax.swing.event.ChangeListener() {
public void stateChanged(javax.swing.event.ChangeEvent evt) {
spnNumRoundsnumPlayersChanged(evt);
}
});
lblPacks.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N
lblPacks.setText("Packs");
pnlPacks.setLayout(new java.awt.GridLayout(0, 1, 2, 0));
jLabel2.setText("Players:");
@ -176,42 +206,34 @@ public class NewTournamentDialog extends MageDialog {
jLabel6.setText("Timing:");
cbDraftTiming.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));
cbDraftTiming.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
cbDraftTimingActionPerformed(evt);
}
});
javax.swing.GroupLayout pnlDraftOptionsLayout = new javax.swing.GroupLayout(pnlDraftOptions);
pnlDraftOptions.setLayout(pnlDraftOptionsLayout);
pnlDraftOptionsLayout.setHorizontalGroup(
pnlDraftOptionsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(pnlDraftOptionsLayout.createSequentialGroup()
.addContainerGap()
.addComponent(jLabel6)
.addComponent(jLabel6, javax.swing.GroupLayout.PREFERRED_SIZE, 49, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(cbDraftTiming, javax.swing.GroupLayout.PREFERRED_SIZE, 107, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addContainerGap(19, Short.MAX_VALUE))
);
pnlDraftOptionsLayout.setVerticalGroup(
pnlDraftOptionsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(pnlDraftOptionsLayout.createSequentialGroup()
.addComponent(jLabel6)
.addGap(0, 0, Short.MAX_VALUE))
.addComponent(cbDraftTiming)
.addGap(3, 3, 3)
.addGroup(pnlDraftOptionsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel6, javax.swing.GroupLayout.PREFERRED_SIZE, 22, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(cbDraftTiming, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addContainerGap())
);
cbAllowSpectators.setText("Allow spectators");
btnOk.setText("OK");
btnOk.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnOkActionPerformed(evt);
}
});
btnCancel.setText("Cancel");
btnCancel.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnCancelActionPerformed(evt);
}
});
jLabel3.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N
jLabel3.setText("Player 1 (You)");
@ -246,25 +268,35 @@ public class NewTournamentDialog extends MageDialog {
.addComponent(pnlOtherPlayers, javax.swing.GroupLayout.DEFAULT_SIZE, 91, Short.MAX_VALUE))
);
jLabel5.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N
jLabel5.setText("Packs");
btnOk.setText("OK");
btnOk.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnOkActionPerformed(evt);
}
});
btnCancel.setText("Cancel");
btnCancel.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnCancelActionPerformed(evt);
}
});
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(jLabel2)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(spnNumPlayers, javax.swing.GroupLayout.PREFERRED_SIZE, 45, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(spnNumPlayers, javax.swing.GroupLayout.PREFERRED_SIZE, 46, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(28, 28, 28)
.addComponent(pnlDraftOptions, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(cbAllowSpectators)
.addGap(9, 9, 9))
.addComponent(cbAllowSpectators))
.addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(pnlPacks, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
@ -272,8 +304,6 @@ public class NewTournamentDialog extends MageDialog {
.addComponent(btnOk)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(btnCancel))
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
.addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
@ -285,25 +315,33 @@ public class NewTournamentDialog extends MageDialog {
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(cbTimeLimit, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
.addComponent(jLabel1)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(lblTournamentType)
.addComponent(lblDraftCube))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(cbTournamentType, javax.swing.GroupLayout.PREFERRED_SIZE, 295, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(cbDraftCube, javax.swing.GroupLayout.PREFERRED_SIZE, 295, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(cbTournamentType, javax.swing.GroupLayout.PREFERRED_SIZE, 295, javax.swing.GroupLayout.PREFERRED_SIZE))))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(lblConstructionTime, javax.swing.GroupLayout.PREFERRED_SIZE, 141, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(lblConstructionTime, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(spnConstructTime, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(layout.createSequentialGroup()
.addComponent(lblFreeMulligans)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(spnFreeMulligans, javax.swing.GroupLayout.PREFERRED_SIZE, 41, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGap(18, 18, 18)
.addComponent(lblNumWins)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(spnNumWins, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addGap(0, 0, Short.MAX_VALUE)
.addComponent(lblNumRounds)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(spnNumWins, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE))))
.addComponent(jLabel5))
.addGap(0, 0, Short.MAX_VALUE)))
.addComponent(spnNumRounds, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE))))
.addComponent(lblPacks))
.addContainerGap())
);
layout.setVerticalGroup(
@ -319,38 +357,39 @@ public class NewTournamentDialog extends MageDialog {
.addComponent(spnConstructTime, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel1)
.addComponent(lblTournamentType)
.addComponent(cbTournamentType, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(lblFreeMulligans)
.addComponent(spnFreeMulligans, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(lblNumWins)
.addComponent(spnNumWins, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jLabel5)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(cbDraftCube, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(lblDraftCube)
.addComponent(spnNumRounds, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(lblNumRounds))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(lblPacks)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(pnlPacks, javax.swing.GroupLayout.DEFAULT_SIZE, 89, Short.MAX_VALUE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
.addComponent(cbAllowSpectators, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jLabel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(spnNumPlayers)
.addComponent(pnlDraftOptions, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(pnlPacks, javax.swing.GroupLayout.DEFAULT_SIZE, 67, Short.MAX_VALUE)
.addGap(11, 11, 11)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(jLabel2)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 21, Short.MAX_VALUE))
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(spnNumPlayers, javax.swing.GroupLayout.DEFAULT_SIZE, 23, Short.MAX_VALUE)
.addComponent(pnlDraftOptions, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addGap(14, 14, 14)))
.addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(btnOk)
.addComponent(btnCancel)))
.addGroup(layout.createSequentialGroup()
.addComponent(cbAllowSpectators)
.addGap(0, 0, Short.MAX_VALUE))))
.addComponent(btnCancel))
.addContainerGap())
);
bindingGroup.bind();
pack();
}// </editor-fold>//GEN-END:initComponents
@ -367,6 +406,9 @@ public class NewTournamentDialog extends MageDialog {
for (TournamentPlayerPanel player: players) {
tOptions.getPlayerTypes().add((String) player.getPlayerType().getSelectedItem());
}
if (!tournamentType.isElimination()) {
tOptions.setNumberRounds((Integer)spnNumRounds.getValue());
}
if (tournamentType.isDraft()) {
DraftOptions options = new DraftOptions();
options.setDraftType("");
@ -378,10 +420,14 @@ public class NewTournamentDialog extends MageDialog {
tOptions.setLimitedOptions(new LimitedOptions());
}
tOptions.getLimitedOptions().setConstructionTime((Integer)this.spnConstructTime.getValue() * 60);
if (tournamentType.isCubeBooster()) {
tOptions.getLimitedOptions().setDraftCubeName(this.cbDraftCube.getSelectedItem().toString());
} else {
for (JComboBox pack: packs) {
tOptions.getLimitedOptions().getSetCodes().add(((ExpansionInfo) pack.getSelectedItem()).getCode());
}
}
}
tOptions.getMatchOptions().setMatchTimeLimit((MatchTimeLimit) this.cbTimeLimit.getSelectedItem());
tOptions.getMatchOptions().setDeckType("Limited");
tOptions.getMatchOptions().setWinsNeeded((Integer)this.spnNumWins.getValue());
@ -431,25 +477,64 @@ public class NewTournamentDialog extends MageDialog {
// TODO add your handling code here:
}//GEN-LAST:event_spnNumWinsnumPlayersChanged
private void cbDraftCubeActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cbDraftCubeActionPerformed
// TODO add your handling code here:
}//GEN-LAST:event_cbDraftCubeActionPerformed
private void cbDraftTimingActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cbDraftTimingActionPerformed
// TODO add your handling code here:
}//GEN-LAST:event_cbDraftTimingActionPerformed
private void spnNumRoundsnumPlayersChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_spnNumRoundsnumPlayersChanged
// TODO add your handling code here:
}//GEN-LAST:event_spnNumRoundsnumPlayersChanged
private void setTournamentOptions(int numbPlayers) {
TournamentTypeView tournamentType = (TournamentTypeView) cbTournamentType.getSelectedItem();
activatePanelElements(tournamentType);
if (numbPlayers < tournamentType.getMinPlayers() || numbPlayers > tournamentType.getMaxPlayers()) {
numbPlayers = tournamentType.getMinPlayers();
createPlayers(numbPlayers - 1);
}
this.spnNumPlayers.setModel(new SpinnerNumberModel(numbPlayers, tournamentType.getMinPlayers(), tournamentType.getMaxPlayers(), 1));
this.spnNumPlayers.setEnabled(tournamentType.getMinPlayers() != tournamentType.getMaxPlayers());
if (tournamentType.isLimited()) {
this.pnlPacks.setVisible(true);
createPacks(tournamentType.getNumBoosters());
}
else {
this.pnlPacks.setVisible(false);
}
this.pnlDraftOptions.setVisible(tournamentType.isDraft());
}
/**
* Sets elements of the panel to visible or not visible
*
* @param tournamentType
*/
private void activatePanelElements(TournamentTypeView tournamentType) {
this.pnlDraftOptions.setVisible(tournamentType.isDraft());
this.lblNumRounds.setVisible(!tournamentType.isElimination());
this.spnNumRounds.setVisible(!tournamentType.isElimination());
if (tournamentType.isLimited()) {
if (tournamentType.isCubeBooster()) {
this.lblDraftCube.setVisible(true);
this.cbDraftCube.setVisible(true);
this.lblPacks.setVisible(false);
this.pnlPacks.setVisible(false);
} else {
this.lblDraftCube.setVisible(false);
this.cbDraftCube.setVisible(false);
this.lblPacks.setVisible(true);
this.pnlPacks.setVisible(true);
}
} else {
// construced
this.lblDraftCube.setVisible(false);
this.cbDraftCube.setVisible(false);
this.pnlPacks.setVisible(true);
}
}
private void createPacks(int numPacks) {
while (packs.size() > numPacks) {
pnlPacks.remove(packs.get(packs.size() - 1));
@ -561,13 +646,18 @@ public class NewTournamentDialog extends MageDialog {
this.spnFreeMulligans.setValue(Integer.parseInt(PreferencesDialog.getCachedValue(PreferencesDialog.KEY_NEW_TOURNAMENT_NUMBER_OF_FREE_MULLIGANS, "0")));
this.spnNumWins.setValue(Integer.parseInt(PreferencesDialog.getCachedValue(PreferencesDialog.KEY_NEW_TOURNAMENT_NUMBER_OF_WINS, "2")));
if (cbTournamentType.getSelectedItem().toString().equals("Sealed Elimination")) {
TournamentTypeView tournamentType = (TournamentTypeView) cbTournamentType.getSelectedItem();
activatePanelElements(tournamentType);
if (tournamentType.isLimited()) {
if (!tournamentType.isDraft()) {
numPlayers = Integer.parseInt(PreferencesDialog.getCachedValue(PreferencesDialog.KEY_NEW_TOURNAMENT_PLAYERS_SEALED, "2"));
setTournamentOptions(numPlayers);
loadBoosterPacks(PreferencesDialog.getCachedValue(PreferencesDialog.KEY_NEW_TOURNAMENT_PACKS_SEALED, ""));
}
if (cbTournamentType.getSelectedItem().toString().equals("Elimination Booster Draft")) {
if (tournamentType.isDraft()) {
numPlayers = Integer.parseInt(PreferencesDialog.getCachedValue(PreferencesDialog.KEY_NEW_TOURNAMENT_PLAYERS_DRAFT, "4"));
setTournamentOptions(numPlayers);
loadBoosterPacks(PreferencesDialog.getCachedValue(PreferencesDialog.KEY_NEW_TOURNAMENT_PACKS_DRAFT, ""));
@ -580,6 +670,7 @@ public class NewTournamentDialog extends MageDialog {
}
}
}
}
this.cbAllowSpectators.setSelected(PreferencesDialog.getCachedValue(PreferencesDialog.KEY_NEW_TOURNAMENT_ALLOW_SPECTATORS, "Yes").equals("Yes"));
}
@ -644,30 +735,35 @@ public class NewTournamentDialog extends MageDialog {
private javax.swing.JButton btnCancel;
private javax.swing.JButton btnOk;
private javax.swing.JCheckBox cbAllowSpectators;
private javax.swing.JComboBox cbDraftCube;
private javax.swing.JComboBox cbDraftTiming;
private javax.swing.JComboBox cbTimeLimit;
private javax.swing.JComboBox cbTournamentType;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JLabel jLabel4;
private javax.swing.JLabel jLabel5;
private javax.swing.JLabel jLabel6;
private javax.swing.JPanel jPanel1;
private javax.swing.JLabel lbTimeLimit;
private javax.swing.JLabel lblConstructionTime;
private javax.swing.JLabel lblDraftCube;
private javax.swing.JLabel lblFreeMulligans;
private javax.swing.JLabel lblName;
private javax.swing.JLabel lblNumRounds;
private javax.swing.JLabel lblNumWins;
private javax.swing.JLabel lblPacks;
private javax.swing.JLabel lblTournamentType;
private javax.swing.JPanel pnlDraftOptions;
private javax.swing.JPanel pnlOtherPlayers;
private javax.swing.JPanel pnlPacks;
private javax.swing.JSpinner spnConstructTime;
private javax.swing.JSpinner spnFreeMulligans;
private javax.swing.JSpinner spnNumPlayers;
private javax.swing.JSpinner spnNumRounds;
private javax.swing.JSpinner spnNumWins;
private javax.swing.JTextField txtName;
private javax.swing.JTextField txtPlayer1Name;
private org.jdesktop.beansbinding.BindingGroup bindingGroup;
// End of variables declaration//GEN-END:variables
}

View file

@ -44,14 +44,16 @@ public class ServerState implements Serializable {
private List<TournamentTypeView> tournamentTypes;
private String[] playerTypes;
private String[] deckTypes;
private String[] draftCubes;
private boolean testMode;
private MageVersion version;
public ServerState(List<GameTypeView> gameTypes, List<TournamentTypeView> tournamentTypes, String[] playerTypes, String[] deckTypes, boolean testMode, MageVersion version) {
public ServerState(List<GameTypeView> gameTypes, List<TournamentTypeView> tournamentTypes, String[] playerTypes, String[] deckTypes, String[] draftCubes, boolean testMode, MageVersion version) {
this.gameTypes = gameTypes;
this.tournamentTypes = tournamentTypes;
this.playerTypes = playerTypes;
this.deckTypes = deckTypes;
this.draftCubes = draftCubes;
this.testMode = testMode;
this.version = version;
}
@ -72,6 +74,10 @@ public class ServerState implements Serializable {
return deckTypes;
}
public String[] getDraftCubes() {
return draftCubes;
}
public boolean isTestMode() {
return testMode;
}

View file

@ -339,6 +339,12 @@ public class SessionImpl implements Session {
return serverState.getDeckTypes();
}
@Override
public String[] getDraftCubes() {
return serverState.getDraftCubes();
}
@Override
public List<TournamentTypeView> getTournamentTypes() {
return serverState.getTournamentTypes();

View file

@ -43,5 +43,7 @@ public interface GameTypes {
String[] getDeckTypes();
String[] getDraftCubes();
List<TournamentTypeView> getTournamentTypes();
}

View file

@ -46,9 +46,15 @@ public class DraftView implements Serializable {
private int cardNum;
public DraftView(Draft draft) {
if (draft.getDraftCube() != null) {
for (int i = 0; i < draft.getNumberBoosters(); i++) {
sets.add(draft.getDraftCube().getName());
}
} else {
for (ExpansionSet set: draft.getSets()) {
sets.add(set.getName());
}
}
this.boosterNum = draft.getBoosterNum();
this.cardNum = draft.getCardNum();
}

View file

@ -86,7 +86,10 @@ public class MatchView implements Serializable {
this.matchId = table.getTournament().getId();
this.matchName = table.getName();
this.gameType = table.getGameType();
this.deckType = new StringBuilder(table.getDeckType()).append(" ").append(table.getTournament().getSetsFormatedShort()).toString();
if (table.getTournament().getOptions().getNumberRounds() > 0) {
this.gameType = new StringBuilder(this.gameType).append(" ").append(table.getTournament().getOptions().getNumberRounds()).append(" Rounds").toString();
}
this.deckType = new StringBuilder(table.getDeckType()).append(" ").append(table.getTournament().getBoosterInfo()).toString();
StringBuilder sb1 = new StringBuilder();
for (TournamentPlayer tPlayer : table.getTournament().getPlayers()) {

View file

@ -109,6 +109,9 @@ public class TableView implements Serializable {
} else {
this.wins = table.getTournament().getOptions().getMatchOptions().getWinsNeeded();
if (table.getTournament().getOptions().getNumberRounds() > 0) {
this.gameType = new StringBuilder(this.gameType).append(" ").append(table.getTournament().getOptions().getNumberRounds()).append(" Rounds").toString();
}
this.freeMulligans = table.getTournament().getOptions().getMatchOptions().getFreeMulligans();
StringBuilder sb1 = new StringBuilder();
for (TournamentPlayer tp: table.getTournament().getPlayers()) {
@ -129,7 +132,7 @@ public class TableView implements Serializable {
default:
}
this.additionalInfo = sb.toString();
this.deckType = new StringBuilder(table.getDeckType()).append(" ").append(table.getTournament().getSetsFormatedShort()).toString();
this.deckType = new StringBuilder(table.getDeckType()).append(" ").append(table.getTournament().getBoosterInfo()).toString();
}
}

View file

@ -44,6 +44,9 @@ public class TournamentTypeView implements Serializable {
private int numBoosters;
private boolean draft;
private boolean limited;
private boolean cubeBooster;
private boolean elimination;
public TournamentTypeView(TournamentType tournamentType) {
this.name = tournamentType.getName();
@ -52,6 +55,8 @@ public class TournamentTypeView implements Serializable {
this.numBoosters = tournamentType.getNumBoosters();
this.draft = tournamentType.isDraft();
this.limited = tournamentType.isLimited();
this.cubeBooster = tournamentType.isCubeBooster();
this.elimination = tournamentType.isElimination();
}
@Override
@ -82,4 +87,13 @@ public class TournamentTypeView implements Serializable {
public boolean isLimited() {
return limited;
}
public boolean isCubeBooster() {
return cubeBooster;
}
public boolean isElimination() {
return elimination;
}
}

View file

@ -0,0 +1,50 @@
/*
* Copyright 2011 BetaSteward_at_googlemail.com. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are
* permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* The views and conclusions contained in the software and documentation are those of the
* authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com.
*/
package mage.tournament;
import mage.game.tournament.TournamentType;
/**
*
* @author LevelX2
*/
public class BoosterDraftEliminationCubeTournamentType extends TournamentType<BoosterDraftEliminationCubeTournamentType> {
public BoosterDraftEliminationCubeTournamentType() {
this.name = "Booster Draft Elimination (Cube)";
this.maxPlayers = 16;
this.minPlayers = 4;
this.numBoosters = 3;
this.draft = true;
this.limited = true;
this.cubeBooster = true;
this.elimination = true;
}
}

View file

@ -37,12 +37,14 @@ import mage.game.tournament.TournamentType;
public class BoosterDraftEliminationTournamentType extends TournamentType<BoosterDraftEliminationTournamentType> {
public BoosterDraftEliminationTournamentType() {
this.name = "Elimination Booster Draft";
this.name = "Booster Draft Elimination";
this.maxPlayers = 16;
this.minPlayers = 4;
this.numBoosters = 3;
this.draft = true;
this.limited = true;
this.cubeBooster = false;
this.elimination = true;
}
}

View file

@ -0,0 +1,50 @@
/*
* Copyright 2011 BetaSteward_at_googlemail.com. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are
* permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* The views and conclusions contained in the software and documentation are those of the
* authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com.
*/
package mage.tournament;
import mage.game.tournament.TournamentType;
/**
*
* @author LevelX2
*/
public class BoosterDraftSwissCubeTournamentType extends TournamentType<BoosterDraftSwissCubeTournamentType> {
public BoosterDraftSwissCubeTournamentType() {
this.name = "Booster Draft Swiss (Cube)";
this.maxPlayers = 16;
this.minPlayers = 4;
this.numBoosters = 3;
this.draft = true;
this.limited = true;
this.cubeBooster = true;
this.elimination = false;
}
}

View file

@ -0,0 +1,92 @@
/*
* Copyright 2011 BetaSteward_at_googlemail.com. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are
* permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* The views and conclusions contained in the software and documentation are those of the
* authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com.
*/
package mage.tournament;
import mage.constants.TournamentPlayerState;
import mage.game.draft.BoosterDraft;
import mage.game.draft.Draft;
import mage.game.draft.DraftOptions;
import mage.game.events.TableEvent;
import mage.game.tournament.TournamentOptions;
import mage.game.tournament.TournamentPlayer;
import mage.game.tournament.TournamentSwiss;
/**
*
* @author BetaSteward_at_googlemail.com
*/
public class BoosterDraftSwissTournament extends TournamentSwiss {
protected enum TournamentStep {
START, DRAFT, CONSTRUCT, COMPETE, WINNERS
}
protected BoosterDraftSwissTournament.TournamentStep currentStep;
public BoosterDraftSwissTournament(TournamentOptions options) {
super(options);
currentStep = BoosterDraftSwissTournament.TournamentStep.START;
}
protected void draft() {
Draft draft = new BoosterDraft((DraftOptions) options.getLimitedOptions(), getSets());
for (TournamentPlayer player: players.values()) {
draft.addPlayer(player.getPlayer());
player.setState(TournamentPlayerState.DRAFTING);
}
tableEventSource.fireTableEvent(TableEvent.EventType.START_DRAFT, null, draft);
}
@Override
public void nextStep() {
switch (currentStep) {
case START:
currentStep = BoosterDraftSwissTournament.TournamentStep.DRAFT;
draft();
break;
case DRAFT:
currentStep = BoosterDraftSwissTournament.TournamentStep.CONSTRUCT;
construct();
break;
case CONSTRUCT:
currentStep = BoosterDraftSwissTournament.TournamentStep.COMPETE;
runTournament();
break;
case COMPETE:
currentStep = BoosterDraftSwissTournament.TournamentStep.WINNERS;
winners();
end();
break;
}
}
}

View file

@ -0,0 +1,50 @@
/*
* Copyright 2011 BetaSteward_at_googlemail.com. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are
* permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* The views and conclusions contained in the software and documentation are those of the
* authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com.
*/
package mage.tournament;
import mage.game.tournament.TournamentType;
/**
*
* @author LevelX2
*/
public class BoosterDraftSwissTournamentType extends TournamentType<BoosterDraftSwissTournamentType> {
public BoosterDraftSwissTournamentType() {
this.name = "Booster Draft Swiss";
this.maxPlayers = 16;
this.minPlayers = 4;
this.numBoosters = 3;
this.draft = true;
this.limited = true;
this.cubeBooster = false;
this.elimination = false;
}
}

View file

@ -0,0 +1,404 @@
/*
* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are
* permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* The views and conclusions contained in the software and documentation are those of the
* authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com.
*/
package mage.tournament.cubes;
import mage.game.draft.DraftCube;
/**
*
* @author LevelX2
*/
public class CubeTutor360Pauper extends DraftCube {
public CubeTutor360Pauper() {
super("Cube Tutor 360 Pauper");
cubeCards.add(new CardIdentity("Doomed Traveler",""));
cubeCards.add(new CardIdentity("Gideon's Lawkeeper",""));
cubeCards.add(new CardIdentity("Goldmeadow Harrier",""));
cubeCards.add(new CardIdentity("Icatian Javelineers",""));
cubeCards.add(new CardIdentity("Steppe Lynx",""));
cubeCards.add(new CardIdentity("Blade of the Sixth Pride",""));
cubeCards.add(new CardIdentity("Daring Skyjek",""));
cubeCards.add(new CardIdentity("Knight of Cliffhaven",""));
cubeCards.add(new CardIdentity("Kor Skyfisher",""));
cubeCards.add(new CardIdentity("Leonin Skyhunter",""));
cubeCards.add(new CardIdentity("Lone Missionary",""));
cubeCards.add(new CardIdentity("Loyal Cathar",""));
cubeCards.add(new CardIdentity("Soltari Trooper",""));
cubeCards.add(new CardIdentity("Stormfront Pegasus",""));
cubeCards.add(new CardIdentity("Syndic of Tithes",""));
cubeCards.add(new CardIdentity("Whitemane Lion",""));
cubeCards.add(new CardIdentity("Youthful Knight",""));
cubeCards.add(new CardIdentity("Apex Hawks",""));
cubeCards.add(new CardIdentity("Attended Knight",""));
cubeCards.add(new CardIdentity("Aven Riftwatcher",""));
cubeCards.add(new CardIdentity("Ballynock Cohort",""));
cubeCards.add(new CardIdentity("Benalish Knight",""));
cubeCards.add(new CardIdentity("Kor Hookmaster",""));
cubeCards.add(new CardIdentity("Kor Sanctifiers",""));
cubeCards.add(new CardIdentity("Master of Diversion",""));
cubeCards.add(new CardIdentity("Coalition Honor Guard",""));
cubeCards.add(new CardIdentity("Guardian of the Guildpact",""));
cubeCards.add(new CardIdentity("Seraph of Dawn",""));
cubeCards.add(new CardIdentity("Plover Knights",""));
cubeCards.add(new CardIdentity("Totem-Guide Hartebeest",""));
cubeCards.add(new CardIdentity("Porcelain Legionnaire",""));
cubeCards.add(new CardIdentity("Cloudshift",""));
cubeCards.add(new CardIdentity("Mana Tithe",""));
cubeCards.add(new CardIdentity("Apostle's Blessing",""));
cubeCards.add(new CardIdentity("Feeling of Dread",""));
cubeCards.add(new CardIdentity("Momentary Blink",""));
cubeCards.add(new CardIdentity("Raise the Alarm",""));
cubeCards.add(new CardIdentity("Shelter",""));
cubeCards.add(new CardIdentity("Test of Faith",""));
cubeCards.add(new CardIdentity("Blinding Beam",""));
cubeCards.add(new CardIdentity("Prismatic Strands",""));
cubeCards.add(new CardIdentity("Sunlance",""));
cubeCards.add(new CardIdentity("Gather the Townsfolk",""));
cubeCards.add(new CardIdentity("Cenn's Enlistment",""));
cubeCards.add(new CardIdentity("Hyena Umbra",""));
cubeCards.add(new CardIdentity("Bonds of Faith",""));
cubeCards.add(new CardIdentity("Journey to Nowhere",""));
cubeCards.add(new CardIdentity("Pacifism",""));
cubeCards.add(new CardIdentity("Temporal Isolation",""));
cubeCards.add(new CardIdentity("Arrest",""));
cubeCards.add(new CardIdentity("Cage of Hands",""));
cubeCards.add(new CardIdentity("Oblivion Ring",""));
cubeCards.add(new CardIdentity("Faith's Fetters",""));
cubeCards.add(new CardIdentity("Cloudfin Raptor",""));
cubeCards.add(new CardIdentity("Delver of Secrets",""));
cubeCards.add(new CardIdentity("Wingcrafter",""));
cubeCards.add(new CardIdentity("Frilled Oculus",""));
cubeCards.add(new CardIdentity("Halimar Wavewatch",""));
cubeCards.add(new CardIdentity("Looter il-Kor",""));
cubeCards.add(new CardIdentity("Merfolk Looter",""));
cubeCards.add(new CardIdentity("Thought Courier",""));
cubeCards.add(new CardIdentity("Waterfront Bouncer",""));
cubeCards.add(new CardIdentity("Aether Adept",""));
cubeCards.add(new CardIdentity("Calcite Snapper",""));
cubeCards.add(new CardIdentity("Man-o'-War",""));
cubeCards.add(new CardIdentity("Pestermite",""));
cubeCards.add(new CardIdentity("Sea Gate Oracle",""));
cubeCards.add(new CardIdentity("Shaper Parasite",""));
cubeCards.add(new CardIdentity("Stealer of Secrets",""));
cubeCards.add(new CardIdentity("Stitched Drake",""));
cubeCards.add(new CardIdentity("Stormbound Geist",""));
cubeCards.add(new CardIdentity("Archaeomancer",""));
cubeCards.add(new CardIdentity("Makeshift Mauler",""));
cubeCards.add(new CardIdentity("Mist Raven",""));
cubeCards.add(new CardIdentity("Ninja of the Deep Hours",""));
cubeCards.add(new CardIdentity("Shimmering Glasskite",""));
cubeCards.add(new CardIdentity("Gryff Vanguard",""));
cubeCards.add(new CardIdentity("Mnemonic Wall",""));
cubeCards.add(new CardIdentity("Mulldrifter",""));
cubeCards.add(new CardIdentity("Aethersnipe",""));
cubeCards.add(new CardIdentity("Errant Ephemeron",""));
cubeCards.add(new CardIdentity("Spined Thopter",""));
cubeCards.add(new CardIdentity("Brainstorm",""));
cubeCards.add(new CardIdentity("Force Spike",""));
cubeCards.add(new CardIdentity("Boomerang",""));
cubeCards.add(new CardIdentity("Counterspell",""));
cubeCards.add(new CardIdentity("Daze",""));
cubeCards.add(new CardIdentity("Into the Roil",""));
cubeCards.add(new CardIdentity("Jilt",""));
cubeCards.add(new CardIdentity("Mana Leak",""));
cubeCards.add(new CardIdentity("Miscalculation",""));
cubeCards.add(new CardIdentity("Remove Soul",""));
cubeCards.add(new CardIdentity("Think Twice",""));
cubeCards.add(new CardIdentity("Withdraw",""));
cubeCards.add(new CardIdentity("Capsize",""));
cubeCards.add(new CardIdentity("Exclude",""));
cubeCards.add(new CardIdentity("Forbidden Alchemy",""));
cubeCards.add(new CardIdentity("Repulse",""));
cubeCards.add(new CardIdentity("Rushing River",""));
cubeCards.add(new CardIdentity("Ray of Command",""));
cubeCards.add(new CardIdentity("Condescend",""));
cubeCards.add(new CardIdentity("Ponder",""));
cubeCards.add(new CardIdentity("Preordain",""));
cubeCards.add(new CardIdentity("Silent Departure",""));
cubeCards.add(new CardIdentity("Hands of Binding",""));
cubeCards.add(new CardIdentity("Compulsive Research",""));
cubeCards.add(new CardIdentity("Probe",""));
cubeCards.add(new CardIdentity("Deep Analysis",""));
cubeCards.add(new CardIdentity("Foresee",""));
cubeCards.add(new CardIdentity("Narcolepsy",""));
cubeCards.add(new CardIdentity("Claustrophobia",""));
cubeCards.add(new CardIdentity("Carnophage",""));
cubeCards.add(new CardIdentity("Fume Spitter",""));
cubeCards.add(new CardIdentity("Typhoid Rats",""));
cubeCards.add(new CardIdentity("Vampire Lacerator",""));
cubeCards.add(new CardIdentity("Basilica Screecher",""));
cubeCards.add(new CardIdentity("Blind Creeper",""));
cubeCards.add(new CardIdentity("Dauthi Horror",""));
cubeCards.add(new CardIdentity("Dauthi Slayer",""));
cubeCards.add(new CardIdentity("Nezumi Cutthroat",""));
cubeCards.add(new CardIdentity("Vampire Interloper",""));
cubeCards.add(new CardIdentity("Wretched Anurid",""));
cubeCards.add(new CardIdentity("Blind Zealot",""));
cubeCards.add(new CardIdentity("Chittering Rats",""));
cubeCards.add(new CardIdentity("Crypt Rats",""));
cubeCards.add(new CardIdentity("Dauthi Marauder",""));
cubeCards.add(new CardIdentity("Dead Reveler",""));
cubeCards.add(new CardIdentity("Liliana's Specter",""));
cubeCards.add(new CardIdentity("Phyrexian Rager",""));
cubeCards.add(new CardIdentity("Soulcage Fiend",""));
cubeCards.add(new CardIdentity("Driver of the Dead",""));
cubeCards.add(new CardIdentity("Faceless Butcher",""));
cubeCards.add(new CardIdentity("Gravedigger",""));
cubeCards.add(new CardIdentity("Mortis Dogs",""));
cubeCards.add(new CardIdentity("Okiba-Gang Shinobi",""));
cubeCards.add(new CardIdentity("Warren Pilferers",""));
cubeCards.add(new CardIdentity("Twisted Abomination",""));
cubeCards.add(new CardIdentity("Vault Skirge",""));
cubeCards.add(new CardIdentity("Pith Driller",""));
cubeCards.add(new CardIdentity("Disfigure",""));
cubeCards.add(new CardIdentity("Tragic Slip",""));
cubeCards.add(new CardIdentity("Undying Evil",""));
cubeCards.add(new CardIdentity("Vendetta",""));
cubeCards.add(new CardIdentity("Devour Flesh",""));
cubeCards.add(new CardIdentity("Diabolic Edict",""));
cubeCards.add(new CardIdentity("Doom Blade",""));
cubeCards.add(new CardIdentity("Grim Harvest",""));
cubeCards.add(new CardIdentity("Last Gasp",""));
cubeCards.add(new CardIdentity("Nameless Inversion",""));
cubeCards.add(new CardIdentity("Terror",""));
cubeCards.add(new CardIdentity("Rend Flesh",""));
cubeCards.add(new CardIdentity("Snuff Out",""));
cubeCards.add(new CardIdentity("Death Denied",""));
cubeCards.add(new CardIdentity("Duress",""));
cubeCards.add(new CardIdentity("Unearth",""));
cubeCards.add(new CardIdentity("Disturbed Burial",""));
cubeCards.add(new CardIdentity("Hymn to Tourach",""));
cubeCards.add(new CardIdentity("Sign in Blood",""));
cubeCards.add(new CardIdentity("Ashes to Ashes",""));
cubeCards.add(new CardIdentity("Crippling Fatigue",""));
cubeCards.add(new CardIdentity("Read the Bones",""));
cubeCards.add(new CardIdentity("Evincar's Justice",""));
cubeCards.add(new CardIdentity("Dead Weight",""));
cubeCards.add(new CardIdentity("Stab Wound",""));
cubeCards.add(new CardIdentity("Pestilence",""));
cubeCards.add(new CardIdentity("Goblin Bushwhacker",""));
cubeCards.add(new CardIdentity("Mogg Fanatic",""));
cubeCards.add(new CardIdentity("Ashmouth Hound",""));
cubeCards.add(new CardIdentity("Fireslinger",""));
cubeCards.add(new CardIdentity("Gore-House Chainwalker",""));
cubeCards.add(new CardIdentity("Keldon Marauders",""));
cubeCards.add(new CardIdentity("Mogg Flunkies",""));
cubeCards.add(new CardIdentity("Mogg War Marshal",""));
cubeCards.add(new CardIdentity("Plated Geopede",""));
cubeCards.add(new CardIdentity("Skirk Marauder",""));
cubeCards.add(new CardIdentity("Sparksmith",""));
cubeCards.add(new CardIdentity("Torch Fiend",""));
cubeCards.add(new CardIdentity("Blood Ogre",""));
cubeCards.add(new CardIdentity("Fervent Cathar",""));
cubeCards.add(new CardIdentity("Ghitu Slinger",""));
cubeCards.add(new CardIdentity("Hanweir Lancer",""));
cubeCards.add(new CardIdentity("Splatter Thug",""));
cubeCards.add(new CardIdentity("Vulshok Sorcerer",""));
cubeCards.add(new CardIdentity("Gorehorn Minotaurs",""));
cubeCards.add(new CardIdentity("Rubblebelt Maaka",""));
cubeCards.add(new CardIdentity("Gathan Raiders",""));
cubeCards.add(new CardIdentity("Slash Panther",""));
cubeCards.add(new CardIdentity("Brute Force",""));
cubeCards.add(new CardIdentity("Burst Lightning",""));
cubeCards.add(new CardIdentity("Lightning Bolt",""));
cubeCards.add(new CardIdentity("Incinerate",""));
cubeCards.add(new CardIdentity("Lash Out",""));
cubeCards.add(new CardIdentity("Searing Blaze",""));
cubeCards.add(new CardIdentity("Searing Spear",""));
cubeCards.add(new CardIdentity("Barbed Lightning",""));
cubeCards.add(new CardIdentity("Brimstone Volley",""));
cubeCards.add(new CardIdentity("Staggershock",""));
cubeCards.add(new CardIdentity("Fireblast",""));
cubeCards.add(new CardIdentity("Chain Lightning",""));
cubeCards.add(new CardIdentity("Faithless Looting",""));
cubeCards.add(new CardIdentity("Firebolt",""));
cubeCards.add(new CardIdentity("Flame Slash",""));
cubeCards.add(new CardIdentity("Reckless Charge",""));
cubeCards.add(new CardIdentity("Krenko's Command",""));
cubeCards.add(new CardIdentity("Volcanic Hammer",""));
cubeCards.add(new CardIdentity("Act of Treason",""));
cubeCards.add(new CardIdentity("Arc Lightning",""));
cubeCards.add(new CardIdentity("Rift Bolt",""));
cubeCards.add(new CardIdentity("Traitorous Instinct",""));
cubeCards.add(new CardIdentity("Pyrotechnics",""));
cubeCards.add(new CardIdentity("Fireball",""));
cubeCards.add(new CardIdentity("Rolling Thunder",""));
cubeCards.add(new CardIdentity("Madcap Skills",""));
cubeCards.add(new CardIdentity("Arbor Elf",""));
cubeCards.add(new CardIdentity("Basking Rootwalla",""));
cubeCards.add(new CardIdentity("Fyndhorn Elves",""));
cubeCards.add(new CardIdentity("Llanowar Elves",""));
cubeCards.add(new CardIdentity("Wild Nacatl",""));
cubeCards.add(new CardIdentity("Young Wolf",""));
cubeCards.add(new CardIdentity("Ambush Viper",""));
cubeCards.add(new CardIdentity("Darkthicket Wolf",""));
cubeCards.add(new CardIdentity("Dawntreader Elk",""));
cubeCards.add(new CardIdentity("Garruk's Companion",""));
cubeCards.add(new CardIdentity("Mire Boa",""));
cubeCards.add(new CardIdentity("River Boa",""));
cubeCards.add(new CardIdentity("Sakura-Tribe Elder",""));
cubeCards.add(new CardIdentity("Silhana Ledgewalker",""));
cubeCards.add(new CardIdentity("Thornweald Archer",""));
cubeCards.add(new CardIdentity("Viridian Emissary",""));
cubeCards.add(new CardIdentity("Wall of Roots",""));
cubeCards.add(new CardIdentity("Wild Mongrel",""));
cubeCards.add(new CardIdentity("Citanul Woodreaders",""));
cubeCards.add(new CardIdentity("Crocanura",""));
cubeCards.add(new CardIdentity("Simian Grunts",""));
cubeCards.add(new CardIdentity("Slaughterhorn",""));
cubeCards.add(new CardIdentity("Trusted Forcemage",""));
cubeCards.add(new CardIdentity("Yavimaya Elder",""));
cubeCards.add(new CardIdentity("Blastoderm",""));
cubeCards.add(new CardIdentity("Imperiosaur",""));
cubeCards.add(new CardIdentity("Mold Shambler",""));
cubeCards.add(new CardIdentity("Nantuko Vigilante",""));
cubeCards.add(new CardIdentity("Penumbra Spider",""));
cubeCards.add(new CardIdentity("Primal Huntbeast",""));
cubeCards.add(new CardIdentity("Wickerbough Elder",""));
cubeCards.add(new CardIdentity("Nessian Asp",""));
cubeCards.add(new CardIdentity("Sentinel Spider",""));
cubeCards.add(new CardIdentity("Krosan Tusker",""));
cubeCards.add(new CardIdentity("Maul Splicer",""));
cubeCards.add(new CardIdentity("Walker of the Grove",""));
cubeCards.add(new CardIdentity("Thundering Tanadon",""));
cubeCards.add(new CardIdentity("Giant Growth",""));
cubeCards.add(new CardIdentity("Groundswell",""));
cubeCards.add(new CardIdentity("Vines of Vastwood",""));
cubeCards.add(new CardIdentity("Sprout Swarm",""));
cubeCards.add(new CardIdentity("Crushing Vines",""));
cubeCards.add(new CardIdentity("Harrow",""));
cubeCards.add(new CardIdentity("Elephant Ambush",""));
cubeCards.add(new CardIdentity("Prey Upon",""));
cubeCards.add(new CardIdentity("Edge of Autumn",""));
cubeCards.add(new CardIdentity("Rampant Growth",""));
cubeCards.add(new CardIdentity("Travel Preparations",""));
cubeCards.add(new CardIdentity("Cultivate",""));
cubeCards.add(new CardIdentity("Kodama's Reach",""));
cubeCards.add(new CardIdentity("Rancor",""));
cubeCards.add(new CardIdentity("Arachnus Web",""));
cubeCards.add(new CardIdentity("Moldervine Cloak",""));
cubeCards.add(new CardIdentity("Deputy of Acquittals",""));
cubeCards.add(new CardIdentity("Curse of Chains",""));
cubeCards.add(new CardIdentity("Agony Warp",""));
cubeCards.add(new CardIdentity("Recoil",""));
cubeCards.add(new CardIdentity("Soul Manipulation",""));
cubeCards.add(new CardIdentity("Rakdos Shred-Freak",""));
cubeCards.add(new CardIdentity("Terminate",""));
cubeCards.add(new CardIdentity("Auger Spree",""));
cubeCards.add(new CardIdentity("Wrecking Ball",""));
cubeCards.add(new CardIdentity("Blightning",""));
cubeCards.add(new CardIdentity("Zhur-Taa Swine",""));
cubeCards.add(new CardIdentity("Pit Fight",""));
cubeCards.add(new CardIdentity("Branching Bolt",""));
cubeCards.add(new CardIdentity("Qasali Pridemage",""));
cubeCards.add(new CardIdentity("Centaur Healer",""));
cubeCards.add(new CardIdentity("Armadillo Cloak",""));
cubeCards.add(new CardIdentity("Tithe Drinker",""));
cubeCards.add(new CardIdentity("Kingpin's Pet",""));
cubeCards.add(new CardIdentity("Blind Hunter",""));
cubeCards.add(new CardIdentity("Unmake",""));
cubeCards.add(new CardIdentity("Pillory of the Sleepless",""));
cubeCards.add(new CardIdentity("Putrid Leech",""));
cubeCards.add(new CardIdentity("Rendclaw Trow",""));
cubeCards.add(new CardIdentity("Sluiceway Scorpion",""));
cubeCards.add(new CardIdentity("Grisly Salvage",""));
cubeCards.add(new CardIdentity("Consume Strength",""));
cubeCards.add(new CardIdentity("Shambleshark",""));
cubeCards.add(new CardIdentity("Beetleform Mage",""));
cubeCards.add(new CardIdentity("Assault Zeppelid",""));
cubeCards.add(new CardIdentity("Snakeform",""));
cubeCards.add(new CardIdentity("Frostburn Weird",""));
cubeCards.add(new CardIdentity("Goblin Electromancer",""));
cubeCards.add(new CardIdentity("Izzet Chronarch",""));
cubeCards.add(new CardIdentity("Goblin Legionnaire",""));
cubeCards.add(new CardIdentity("Wojek Halberdiers",""));
cubeCards.add(new CardIdentity("Skyknight Legionnaire",""));
cubeCards.add(new CardIdentity("Viashino Firstblade",""));
cubeCards.add(new CardIdentity("Martial Glory",""));
cubeCards.add(new CardIdentity("Ulamog's Crusher",""));
cubeCards.add(new CardIdentity("Perilous Myr",""));
cubeCards.add(new CardIdentity("Pilgrim's Eye",""));
cubeCards.add(new CardIdentity("Adventuring Gear",""));
cubeCards.add(new CardIdentity("Blazing Torch",""));
cubeCards.add(new CardIdentity("Bonesplitter",""));
cubeCards.add(new CardIdentity("Flayer Husk",""));
cubeCards.add(new CardIdentity("Leonin Bola",""));
cubeCards.add(new CardIdentity("Leonin Scimitar",""));
cubeCards.add(new CardIdentity("Sylvok Lifestaff",""));
cubeCards.add(new CardIdentity("Viridian Longbow",""));
cubeCards.add(new CardIdentity("Wayfarer's Bauble",""));
cubeCards.add(new CardIdentity("Armillary Sphere",""));
cubeCards.add(new CardIdentity("Azorius Signet",""));
cubeCards.add(new CardIdentity("Dimir Signet",""));
cubeCards.add(new CardIdentity("Izzet Signet",""));
cubeCards.add(new CardIdentity("Mind Stone",""));
cubeCards.add(new CardIdentity("Orzhov Signet",""));
cubeCards.add(new CardIdentity("Prismatic Lens",""));
cubeCards.add(new CardIdentity("Prophetic Prism",""));
cubeCards.add(new CardIdentity("Vulshok Morningstar",""));
cubeCards.add(new CardIdentity("Pristine Talisman",""));
cubeCards.add(new CardIdentity("Strider Harness",""));
cubeCards.add(new CardIdentity("Tumble Magnet",""));
cubeCards.add(new CardIdentity("Whispersilk Cloak",""));
cubeCards.add(new CardIdentity("Serrated Arrows",""));
cubeCards.add(new CardIdentity("Azorius Chancery",""));
cubeCards.add(new CardIdentity("Azorius Guildgate",""));
cubeCards.add(new CardIdentity("Boros Garrison",""));
cubeCards.add(new CardIdentity("Boros Guildgate",""));
cubeCards.add(new CardIdentity("Desert",""));
cubeCards.add(new CardIdentity("Dimir Aqueduct",""));
cubeCards.add(new CardIdentity("Dimir Guildgate",""));
cubeCards.add(new CardIdentity("Evolving Wilds",""));
cubeCards.add(new CardIdentity("Golgari Guildgate",""));
cubeCards.add(new CardIdentity("Golgari Rot Farm",""));
cubeCards.add(new CardIdentity("Gruul Guildgate",""));
cubeCards.add(new CardIdentity("Gruul Turf",""));
cubeCards.add(new CardIdentity("Halimar Depths",""));
cubeCards.add(new CardIdentity("Haunted Fengraf",""));
cubeCards.add(new CardIdentity("Izzet Boilerworks",""));
cubeCards.add(new CardIdentity("Izzet Guildgate",""));
cubeCards.add(new CardIdentity("Khalni Garden",""));
cubeCards.add(new CardIdentity("Orzhov Basilica",""));
cubeCards.add(new CardIdentity("Orzhov Guildgate",""));
cubeCards.add(new CardIdentity("Quicksand",""));
cubeCards.add(new CardIdentity("Rakdos Carnarium",""));
cubeCards.add(new CardIdentity("Rakdos Guildgate",""));
cubeCards.add(new CardIdentity("Rupture Spire",""));
cubeCards.add(new CardIdentity("Selesnya Guildgate",""));
cubeCards.add(new CardIdentity("Selesnya Sanctuary",""));
cubeCards.add(new CardIdentity("Simic Growth Chamber",""));
cubeCards.add(new CardIdentity("Simic Guildgate",""));
cubeCards.add(new CardIdentity("Teetering Peaks",""));
cubeCards.add(new CardIdentity("Terramorphic Expanse",""));
cubeCards.add(new CardIdentity("Transguild Promenade",""));
}
}

View file

@ -0,0 +1,763 @@
/*
* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are
* permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* The views and conclusions contained in the software and documentation are those of the
* authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com.
*/
package mage.tournament.cubes;
import mage.game.draft.DraftCube;
/**
*
* @author LevelX2
*/
public class CubeTutor720 extends DraftCube {
public CubeTutor720() {
super("Cube Tutor 720");
cubeCards.add(new CardIdentity("Elite Vanguard",""));
cubeCards.add(new CardIdentity("Gideon's Lawkeeper",""));
cubeCards.add(new CardIdentity("Isamaru, Hound of Konda",""));
cubeCards.add(new CardIdentity("Loam Lion",""));
cubeCards.add(new CardIdentity("Mother of Runes",""));
cubeCards.add(new CardIdentity("Savannah Lions",""));
cubeCards.add(new CardIdentity("Soldier of the Pantheon",""));
cubeCards.add(new CardIdentity("Steppe Lynx",""));
cubeCards.add(new CardIdentity("Student of Warfare",""));
cubeCards.add(new CardIdentity("Weathered Wayfarer",""));
cubeCards.add(new CardIdentity("Accorder Paladin",""));
cubeCards.add(new CardIdentity("Cloistered Youth",""));
cubeCards.add(new CardIdentity("Eight-and-a-Half-Tails",""));
cubeCards.add(new CardIdentity("Imposing Sovereign",""));
cubeCards.add(new CardIdentity("Knight of Glory",""));
cubeCards.add(new CardIdentity("Knight of Meadowgrain",""));
cubeCards.add(new CardIdentity("Kor Skyfisher",""));
cubeCards.add(new CardIdentity("Leonin Relic-Warder",""));
cubeCards.add(new CardIdentity("Lone Missionary",""));
cubeCards.add(new CardIdentity("Precinct Captain",""));
cubeCards.add(new CardIdentity("Soltari Monk",""));
cubeCards.add(new CardIdentity("Soltari Priest",""));
cubeCards.add(new CardIdentity("Soltari Trooper",""));
cubeCards.add(new CardIdentity("Stoneforge Mystic",""));
cubeCards.add(new CardIdentity("Thalia, Guardian of Thraben",""));
cubeCards.add(new CardIdentity("Wall of Omens",""));
cubeCards.add(new CardIdentity("Banisher Priest",""));
cubeCards.add(new CardIdentity("Blade Splicer",""));
cubeCards.add(new CardIdentity("Fiend Hunter",""));
cubeCards.add(new CardIdentity("Flickerwisp",""));
cubeCards.add(new CardIdentity("Frontline Medic",""));
cubeCards.add(new CardIdentity("Kor Sanctifiers",""));
cubeCards.add(new CardIdentity("Mentor of the Meek",""));
cubeCards.add(new CardIdentity("Mirran Crusader",""));
cubeCards.add(new CardIdentity("Mirror Entity",""));
cubeCards.add(new CardIdentity("Silverblade Paladin",""));
cubeCards.add(new CardIdentity("Soltari Champion",""));
cubeCards.add(new CardIdentity("Stonecloaker",""));
cubeCards.add(new CardIdentity("Emeria Angel",""));
cubeCards.add(new CardIdentity("Hero of Bladehold",""));
cubeCards.add(new CardIdentity("Ranger of Eos",""));
cubeCards.add(new CardIdentity("Restoration Angel",""));
cubeCards.add(new CardIdentity("Sublime Archangel",""));
cubeCards.add(new CardIdentity("Baneslayer Angel",""));
cubeCards.add(new CardIdentity("Cloudgoat Ranger",""));
cubeCards.add(new CardIdentity("Geist-Honored Monk",""));
cubeCards.add(new CardIdentity("Karmic Guide",""));
cubeCards.add(new CardIdentity("Reveillark",""));
cubeCards.add(new CardIdentity("Exalted Angel",""));
cubeCards.add(new CardIdentity("Mikaeus, the Lunarch",""));
cubeCards.add(new CardIdentity("Sun Titan",""));
cubeCards.add(new CardIdentity("Yosei, the Morning Star",""));
cubeCards.add(new CardIdentity("Angel of Serenity",""));
cubeCards.add(new CardIdentity("Elesh Norn, Grand Cenobite",""));
cubeCards.add(new CardIdentity("Eternal Dragon",""));
cubeCards.add(new CardIdentity("Akroma, Angel of Wrath",""));
cubeCards.add(new CardIdentity("Ajani, Caller of the Pride",""));
cubeCards.add(new CardIdentity("Ajani Goldmane",""));
cubeCards.add(new CardIdentity("Elspeth, Knight-Errant",""));
cubeCards.add(new CardIdentity("Elspeth Tirel",""));
cubeCards.add(new CardIdentity("Gideon Jura",""));
cubeCards.add(new CardIdentity("Elspeth, Sun's Champion",""));
cubeCards.add(new CardIdentity("Porcelain Legionnaire",""));
cubeCards.add(new CardIdentity("Condemn",""));
cubeCards.add(new CardIdentity("Enlightened Tutor",""));
cubeCards.add(new CardIdentity("Mana Tithe",""));
cubeCards.add(new CardIdentity("Path to Exile",""));
cubeCards.add(new CardIdentity("Swords to Plowshares",""));
cubeCards.add(new CardIdentity("Disenchant",""));
cubeCards.add(new CardIdentity("Momentary Blink",""));
cubeCards.add(new CardIdentity("Balance",""));
cubeCards.add(new CardIdentity("Lingering Souls",""));
cubeCards.add(new CardIdentity("Spectral Procession",""));
cubeCards.add(new CardIdentity("Armageddon",""));
cubeCards.add(new CardIdentity("Day of Judgment",""));
cubeCards.add(new CardIdentity("Wrath of God",""));
cubeCards.add(new CardIdentity("Akroma's Vengeance",""));
cubeCards.add(new CardIdentity("Catastrophe",""));
cubeCards.add(new CardIdentity("Terminus",""));
cubeCards.add(new CardIdentity("Martial Coup",""));
cubeCards.add(new CardIdentity("Entreat the Angels",""));
cubeCards.add(new CardIdentity("Decree of Justice",""));
cubeCards.add(new CardIdentity("Land Tax",""));
cubeCards.add(new CardIdentity("Honor of the Pure",""));
cubeCards.add(new CardIdentity("Journey to Nowhere",""));
cubeCards.add(new CardIdentity("Pacifism",""));
cubeCards.add(new CardIdentity("Seal of Cleansing",""));
cubeCards.add(new CardIdentity("Glorious Anthem",""));
cubeCards.add(new CardIdentity("Oblivion Ring",""));
cubeCards.add(new CardIdentity("Angelic Destiny",""));
cubeCards.add(new CardIdentity("Faith's Fetters",""));
cubeCards.add(new CardIdentity("Parallax Wave",""));
cubeCards.add(new CardIdentity("Spear of Heliod",""));
cubeCards.add(new CardIdentity("Delver of Secrets",""));
cubeCards.add(new CardIdentity("Enclave Cryptologist",""));
cubeCards.add(new CardIdentity("Augur of Bolas",""));
cubeCards.add(new CardIdentity("Gilded Drake",""));
cubeCards.add(new CardIdentity("Looter il-Kor",""));
cubeCards.add(new CardIdentity("Merfolk Looter",""));
cubeCards.add(new CardIdentity("Phantasmal Image",""));
cubeCards.add(new CardIdentity("Snapcaster Mage",""));
cubeCards.add(new CardIdentity("Waterfront Bouncer",""));
cubeCards.add(new CardIdentity("Willbender",""));
cubeCards.add(new CardIdentity("Aether Adept",""));
cubeCards.add(new CardIdentity("Kira, Great Glass-Spinner",""));
cubeCards.add(new CardIdentity("Man-o'-War",""));
cubeCards.add(new CardIdentity("Pestermite",""));
cubeCards.add(new CardIdentity("Sea Gate Oracle",""));
cubeCards.add(new CardIdentity("Serendib Efreet",""));
cubeCards.add(new CardIdentity("Trinket Mage",""));
cubeCards.add(new CardIdentity("Vendilion Clique",""));
cubeCards.add(new CardIdentity("Clone",""));
cubeCards.add(new CardIdentity("Dungeon Geists",""));
cubeCards.add(new CardIdentity("Glen Elendra Archmage",""));
cubeCards.add(new CardIdentity("Ninja of the Deep Hours",""));
cubeCards.add(new CardIdentity("Sower of Temptation",""));
cubeCards.add(new CardIdentity("Talrand, Sky Summoner",""));
cubeCards.add(new CardIdentity("Venser, Shaper Savant",""));
cubeCards.add(new CardIdentity("Meloku the Clouded Mirror",""));
cubeCards.add(new CardIdentity("Mulldrifter",""));
cubeCards.add(new CardIdentity("Riftwing Cloudskate",""));
cubeCards.add(new CardIdentity("Teferi, Mage of Zhalfir",""));
cubeCards.add(new CardIdentity("Aetherling",""));
cubeCards.add(new CardIdentity("Consecrated Sphinx",""));
cubeCards.add(new CardIdentity("Frost Titan",""));
cubeCards.add(new CardIdentity("Keiga, the Tide Star",""));
cubeCards.add(new CardIdentity("Sphinx of Jwar Isle",""));
cubeCards.add(new CardIdentity("Jace Beleren",""));
cubeCards.add(new CardIdentity("Jace, Architect of Thought",""));
cubeCards.add(new CardIdentity("Jace, the Mind Sculptor",""));
cubeCards.add(new CardIdentity("Tamiyo, the Moon Sage",""));
cubeCards.add(new CardIdentity("Tezzeret the Seeker",""));
cubeCards.add(new CardIdentity("Phyrexian Metamorph",""));
cubeCards.add(new CardIdentity("Inkwell Leviathan",""));
cubeCards.add(new CardIdentity("Ancestral Recall",""));
cubeCards.add(new CardIdentity("Brainstorm",""));
cubeCards.add(new CardIdentity("Force Spike",""));
cubeCards.add(new CardIdentity("Mystical Tutor",""));
cubeCards.add(new CardIdentity("Spell Pierce",""));
cubeCards.add(new CardIdentity("Arcane Denial",""));
cubeCards.add(new CardIdentity("Counterspell",""));
cubeCards.add(new CardIdentity("Cyclonic Rift",""));
cubeCards.add(new CardIdentity("Daze",""));
cubeCards.add(new CardIdentity("Impulse",""));
cubeCards.add(new CardIdentity("Into the Roil",""));
cubeCards.add(new CardIdentity("Mana Drain",""));
cubeCards.add(new CardIdentity("Mana Leak",""));
cubeCards.add(new CardIdentity("Memory Lapse",""));
cubeCards.add(new CardIdentity("Miscalculation",""));
cubeCards.add(new CardIdentity("Negate",""));
cubeCards.add(new CardIdentity("Remand",""));
cubeCards.add(new CardIdentity("Capsize",""));
cubeCards.add(new CardIdentity("Dissipate",""));
cubeCards.add(new CardIdentity("Forbid",""));
cubeCards.add(new CardIdentity("Forbidden Alchemy",""));
cubeCards.add(new CardIdentity("Frantic Search",""));
cubeCards.add(new CardIdentity("Psionic Blast",""));
cubeCards.add(new CardIdentity("Thirst for Knowledge",""));
cubeCards.add(new CardIdentity("Cryptic Command",""));
cubeCards.add(new CardIdentity("Fact or Fiction",""));
cubeCards.add(new CardIdentity("Gifts Ungiven",""));
cubeCards.add(new CardIdentity("Force of Will",""));
cubeCards.add(new CardIdentity("Pact of Negation",""));
cubeCards.add(new CardIdentity("Condescend",""));
cubeCards.add(new CardIdentity("Repeal",""));
cubeCards.add(new CardIdentity("Ancestral Vision",""));
cubeCards.add(new CardIdentity("Ponder",""));
cubeCards.add(new CardIdentity("Preordain",""));
cubeCards.add(new CardIdentity("Time Walk",""));
cubeCards.add(new CardIdentity("Compulsive Research",""));
cubeCards.add(new CardIdentity("Show and Tell",""));
cubeCards.add(new CardIdentity("Tinker",""));
cubeCards.add(new CardIdentity("Deep Analysis",""));
cubeCards.add(new CardIdentity("Bribery",""));
cubeCards.add(new CardIdentity("Time Warp",""));
cubeCards.add(new CardIdentity("Time Spiral",""));
cubeCards.add(new CardIdentity("Upheaval",""));
cubeCards.add(new CardIdentity("Control Magic",""));
cubeCards.add(new CardIdentity("Opposition",""));
cubeCards.add(new CardIdentity("Treachery",""));
cubeCards.add(new CardIdentity("Thassa, God of the Sea",""));
cubeCards.add(new CardIdentity("Carnophage",""));
cubeCards.add(new CardIdentity("Carrion Feeder",""));
cubeCards.add(new CardIdentity("Diregraf Ghoul",""));
cubeCards.add(new CardIdentity("Gravecrawler",""));
cubeCards.add(new CardIdentity("Tormented Hero",""));
cubeCards.add(new CardIdentity("Vampire Lacerator",""));
cubeCards.add(new CardIdentity("Blood Artist",""));
cubeCards.add(new CardIdentity("Blood Scrivener",""));
cubeCards.add(new CardIdentity("Bloodghast",""));
cubeCards.add(new CardIdentity("Dark Confidant",""));
cubeCards.add(new CardIdentity("Dauthi Horror",""));
cubeCards.add(new CardIdentity("Gatekeeper of Malakir",""));
cubeCards.add(new CardIdentity("Knight of Infamy",""));
cubeCards.add(new CardIdentity("Nantuko Shade",""));
cubeCards.add(new CardIdentity("Nezumi Graverobber",""));
cubeCards.add(new CardIdentity("Oona's Prowler",""));
cubeCards.add(new CardIdentity("Pack Rat",""));
cubeCards.add(new CardIdentity("Reassembling Skeleton",""));
cubeCards.add(new CardIdentity("Vampire Hexmage",""));
cubeCards.add(new CardIdentity("Bone Shredder",""));
cubeCards.add(new CardIdentity("Fleshbag Marauder",""));
cubeCards.add(new CardIdentity("Geralf's Messenger",""));
cubeCards.add(new CardIdentity("Hypnotic Specter",""));
cubeCards.add(new CardIdentity("Phyrexian Rager",""));
cubeCards.add(new CardIdentity("Vampire Nighthawk",""));
cubeCards.add(new CardIdentity("Abyssal Persecutor",""));
cubeCards.add(new CardIdentity("Bane of the Living",""));
cubeCards.add(new CardIdentity("Bloodline Keeper",""));
cubeCards.add(new CardIdentity("Braids, Cabal Minion",""));
cubeCards.add(new CardIdentity("Crypt Ghast",""));
cubeCards.add(new CardIdentity("Desecration Demon",""));
cubeCards.add(new CardIdentity("Disciple of Bolas",""));
cubeCards.add(new CardIdentity("Graveborn Muse",""));
cubeCards.add(new CardIdentity("Nekrataal",""));
cubeCards.add(new CardIdentity("Skinrender",""));
cubeCards.add(new CardIdentity("Bloodgift Demon",""));
cubeCards.add(new CardIdentity("Shriekmaw",""));
cubeCards.add(new CardIdentity("Grave Titan",""));
cubeCards.add(new CardIdentity("Ink-Eyes, Servant of Oni",""));
cubeCards.add(new CardIdentity("Kokusho, the Evening Star",""));
cubeCards.add(new CardIdentity("Massacre Wurm",""));
cubeCards.add(new CardIdentity("Sheoldred, Whispering One",""));
cubeCards.add(new CardIdentity("Griselbrand",""));
cubeCards.add(new CardIdentity("Tombstalker",""));
cubeCards.add(new CardIdentity("Liliana of the Veil",""));
cubeCards.add(new CardIdentity("Liliana Vess",""));
cubeCards.add(new CardIdentity("Sorin Markov",""));
cubeCards.add(new CardIdentity("Dark Ritual",""));
cubeCards.add(new CardIdentity("Entomb",""));
cubeCards.add(new CardIdentity("Tragic Slip",""));
cubeCards.add(new CardIdentity("Vampiric Tutor",""));
cubeCards.add(new CardIdentity("Diabolic Edict",""));
cubeCards.add(new CardIdentity("Doom Blade",""));
cubeCards.add(new CardIdentity("Go for the Throat",""));
cubeCards.add(new CardIdentity("Ultimate Price",""));
cubeCards.add(new CardIdentity("Dismember",""));
cubeCards.add(new CardIdentity("Hero's Downfall",""));
cubeCards.add(new CardIdentity("Slaughter Pact",""));
cubeCards.add(new CardIdentity("Makeshift Mannequin",""));
cubeCards.add(new CardIdentity("Snuff Out",""));
cubeCards.add(new CardIdentity("Duress",""));
cubeCards.add(new CardIdentity("Innocent Blood",""));
cubeCards.add(new CardIdentity("Inquisition of Kozilek",""));
cubeCards.add(new CardIdentity("Reanimate",""));
cubeCards.add(new CardIdentity("Thoughtseize",""));
cubeCards.add(new CardIdentity("Chainer's Edict",""));
cubeCards.add(new CardIdentity("Demonic Tutor",""));
cubeCards.add(new CardIdentity("Exhume",""));
cubeCards.add(new CardIdentity("Hymn to Tourach",""));
cubeCards.add(new CardIdentity("Night's Whisper",""));
cubeCards.add(new CardIdentity("Sign in Blood",""));
cubeCards.add(new CardIdentity("Sinkhole",""));
cubeCards.add(new CardIdentity("Smallpox",""));
cubeCards.add(new CardIdentity("Buried Alive",""));
cubeCards.add(new CardIdentity("Yawgmoth's Will",""));
cubeCards.add(new CardIdentity("Barter in Blood",""));
cubeCards.add(new CardIdentity("Consuming Vapors",""));
cubeCards.add(new CardIdentity("Damnation",""));
cubeCards.add(new CardIdentity("Living Death",""));
cubeCards.add(new CardIdentity("Unburial Rites",""));
cubeCards.add(new CardIdentity("Mind Twist",""));
cubeCards.add(new CardIdentity("Black Sun's Zenith",""));
cubeCards.add(new CardIdentity("Profane Command",""));
cubeCards.add(new CardIdentity("Sarcomancy",""));
cubeCards.add(new CardIdentity("Animate Dead",""));
cubeCards.add(new CardIdentity("Bitterblossom",""));
cubeCards.add(new CardIdentity("Necromancy",""));
cubeCards.add(new CardIdentity("Necropotence",""));
cubeCards.add(new CardIdentity("Phyrexian Arena",""));
cubeCards.add(new CardIdentity("Recurring Nightmare",""));
cubeCards.add(new CardIdentity("Diabolic Servitude",""));
cubeCards.add(new CardIdentity("Firedrinker Satyr",""));
cubeCards.add(new CardIdentity("Goblin Guide",""));
cubeCards.add(new CardIdentity("Goblin Welder",""));
cubeCards.add(new CardIdentity("Grim Lavamancer",""));
cubeCards.add(new CardIdentity("Jackal Pup",""));
cubeCards.add(new CardIdentity("Kird Ape",""));
cubeCards.add(new CardIdentity("Legion Loyalist",""));
cubeCards.add(new CardIdentity("Mogg Fanatic",""));
cubeCards.add(new CardIdentity("Reckless Waif",""));
cubeCards.add(new CardIdentity("Spikeshot Elder",""));
cubeCards.add(new CardIdentity("Stromkirk Noble",""));
cubeCards.add(new CardIdentity("Ash Zealot",""));
cubeCards.add(new CardIdentity("Ember Hauler",""));
cubeCards.add(new CardIdentity("Gore-House Chainwalker",""));
cubeCards.add(new CardIdentity("Hellspark Elemental",""));
cubeCards.add(new CardIdentity("Kargan Dragonlord",""));
cubeCards.add(new CardIdentity("Keldon Marauders",""));
cubeCards.add(new CardIdentity("Lightning Mauler",""));
cubeCards.add(new CardIdentity("Mogg War Marshal",""));
cubeCards.add(new CardIdentity("Plated Geopede",""));
cubeCards.add(new CardIdentity("Stormblood Berserker",""));
cubeCards.add(new CardIdentity("Torch Fiend",""));
cubeCards.add(new CardIdentity("Young Pyromancer",""));
cubeCards.add(new CardIdentity("Ball Lightning",""));
cubeCards.add(new CardIdentity("Chandra's Phoenix",""));
cubeCards.add(new CardIdentity("Countryside Crusher",""));
cubeCards.add(new CardIdentity("Goblin Ruinblaster",""));
cubeCards.add(new CardIdentity("Guttersnipe",""));
cubeCards.add(new CardIdentity("Hell's Thunder",""));
cubeCards.add(new CardIdentity("Manic Vandal",""));
cubeCards.add(new CardIdentity("Squee, Goblin Nabob",""));
cubeCards.add(new CardIdentity("Zo-Zu the Punisher",""));
cubeCards.add(new CardIdentity("Avalanche Riders",""));
cubeCards.add(new CardIdentity("Blistering Firecat",""));
cubeCards.add(new CardIdentity("Flametongue Kavu",""));
cubeCards.add(new CardIdentity("Hellrider",""));
cubeCards.add(new CardIdentity("Hero of Oxid Ridge",""));
cubeCards.add(new CardIdentity("Keldon Champion",""));
cubeCards.add(new CardIdentity("Kiki-Jiki, Mirror Breaker",""));
cubeCards.add(new CardIdentity("Siege-Gang Commander",""));
cubeCards.add(new CardIdentity("Thundermaw Hellkite",""));
cubeCards.add(new CardIdentity("Zealous Conscripts",""));
cubeCards.add(new CardIdentity("Inferno Titan",""));
cubeCards.add(new CardIdentity("Bogardan Hellkite",""));
cubeCards.add(new CardIdentity("Greater Gargadon",""));
cubeCards.add(new CardIdentity("Chandra, Pyromaster",""));
cubeCards.add(new CardIdentity("Chandra, the Firebrand",""));
cubeCards.add(new CardIdentity("Koth of the Hammer",""));
cubeCards.add(new CardIdentity("Chandra Nalaar",""));
cubeCards.add(new CardIdentity("Burst Lightning",""));
cubeCards.add(new CardIdentity("Lightning Bolt",""));
cubeCards.add(new CardIdentity("Ancient Grudge",""));
cubeCards.add(new CardIdentity("Incinerate",""));
cubeCards.add(new CardIdentity("Lightning Strike",""));
cubeCards.add(new CardIdentity("Magma Jet",""));
cubeCards.add(new CardIdentity("Searing Blaze",""));
cubeCards.add(new CardIdentity("Searing Spear",""));
cubeCards.add(new CardIdentity("Smash to Smithereens",""));
cubeCards.add(new CardIdentity("Brimstone Volley",""));
cubeCards.add(new CardIdentity("Chaos Warp",""));
cubeCards.add(new CardIdentity("Char",""));
cubeCards.add(new CardIdentity("Flame Javelin",""));
cubeCards.add(new CardIdentity("Staggershock",""));
cubeCards.add(new CardIdentity("Fireblast",""));
cubeCards.add(new CardIdentity("Chain Lightning",""));
cubeCards.add(new CardIdentity("Faithless Looting",""));
cubeCards.add(new CardIdentity("Firebolt",""));
cubeCards.add(new CardIdentity("Reckless Charge",""));
cubeCards.add(new CardIdentity("Arc Trail",""));
cubeCards.add(new CardIdentity("Mizzium Mortars",""));
cubeCards.add(new CardIdentity("Pyroclasm",""));
cubeCards.add(new CardIdentity("Arc Lightning",""));
cubeCards.add(new CardIdentity("Flames of the Firebrand",""));
cubeCards.add(new CardIdentity("Molten Rain",""));
cubeCards.add(new CardIdentity("Pillage",""));
cubeCards.add(new CardIdentity("Rift Bolt",""));
cubeCards.add(new CardIdentity("Slagstorm",""));
cubeCards.add(new CardIdentity("Stone Rain",""));
cubeCards.add(new CardIdentity("Wheel of Fortune",""));
cubeCards.add(new CardIdentity("Banefire",""));
cubeCards.add(new CardIdentity("Devil's Play",""));
cubeCards.add(new CardIdentity("Earthquake",""));
cubeCards.add(new CardIdentity("Fireball",""));
cubeCards.add(new CardIdentity("Wildfire",""));
cubeCards.add(new CardIdentity("Bonfire of the Damned",""));
cubeCards.add(new CardIdentity("Sulfuric Vortex",""));
cubeCards.add(new CardIdentity("Sneak Attack",""));
cubeCards.add(new CardIdentity("Arbor Elf",""));
cubeCards.add(new CardIdentity("Avacyn's Pilgrim",""));
cubeCards.add(new CardIdentity("Birds of Paradise",""));
cubeCards.add(new CardIdentity("Elves of Deep Shadow",""));
cubeCards.add(new CardIdentity("Elvish Mystic",""));
cubeCards.add(new CardIdentity("Experiment One",""));
cubeCards.add(new CardIdentity("Fyndhorn Elves",""));
cubeCards.add(new CardIdentity("Joraga Treespeaker",""));
cubeCards.add(new CardIdentity("Llanowar Elves",""));
cubeCards.add(new CardIdentity("Noble Hierarch",""));
cubeCards.add(new CardIdentity("Ulvenwald Tracker",""));
cubeCards.add(new CardIdentity("Wild Nacatl",""));
cubeCards.add(new CardIdentity("Fauna Shaman",""));
cubeCards.add(new CardIdentity("Lotus Cobra",""));
cubeCards.add(new CardIdentity("Mayor of Avabruck",""));
cubeCards.add(new CardIdentity("River Boa",""));
cubeCards.add(new CardIdentity("Rofellos, Llanowar Emissary",""));
cubeCards.add(new CardIdentity("Sakura-Tribe Elder",""));
cubeCards.add(new CardIdentity("Scavenging Ooze",""));
cubeCards.add(new CardIdentity("Strangleroot Geist",""));
cubeCards.add(new CardIdentity("Sylvan Caryatid",""));
cubeCards.add(new CardIdentity("Tarmogoyf",""));
cubeCards.add(new CardIdentity("Wall of Blossoms",""));
cubeCards.add(new CardIdentity("Wall of Roots",""));
cubeCards.add(new CardIdentity("Wild Mongrel",""));
cubeCards.add(new CardIdentity("Eternal Witness",""));
cubeCards.add(new CardIdentity("Ohran Viper",""));
cubeCards.add(new CardIdentity("Troll Ascetic",""));
cubeCards.add(new CardIdentity("Uktabi Orangutan",""));
cubeCards.add(new CardIdentity("Viridian Shaman",""));
cubeCards.add(new CardIdentity("Wolfir Avenger",""));
cubeCards.add(new CardIdentity("Yavimaya Elder",""));
cubeCards.add(new CardIdentity("Blastoderm",""));
cubeCards.add(new CardIdentity("Chameleon Colossus",""));
cubeCards.add(new CardIdentity("Deadbridge Goliath",""));
cubeCards.add(new CardIdentity("Master of the Wild Hunt",""));
cubeCards.add(new CardIdentity("Obstinate Baloth",""));
cubeCards.add(new CardIdentity("Oracle of Mul Daya",""));
cubeCards.add(new CardIdentity("Polukranos, World Eater",""));
cubeCards.add(new CardIdentity("Thrun, the Last Troll",""));
cubeCards.add(new CardIdentity("Vengevine",""));
cubeCards.add(new CardIdentity("Wickerbough Elder",""));
cubeCards.add(new CardIdentity("Acidic Slime",""));
cubeCards.add(new CardIdentity("Deranged Hermit",""));
cubeCards.add(new CardIdentity("Genesis",""));
cubeCards.add(new CardIdentity("Indrik Stomphowler",""));
cubeCards.add(new CardIdentity("Kalonian Hydra",""));
cubeCards.add(new CardIdentity("Thragtusk",""));
cubeCards.add(new CardIdentity("Vorapede",""));
cubeCards.add(new CardIdentity("Wolfir Silverheart",""));
cubeCards.add(new CardIdentity("Primeval Titan",""));
cubeCards.add(new CardIdentity("Rampaging Baloths",""));
cubeCards.add(new CardIdentity("Avenger of Zendikar",""));
cubeCards.add(new CardIdentity("Hornet Queen",""));
cubeCards.add(new CardIdentity("Krosan Tusker",""));
cubeCards.add(new CardIdentity("Craterhoof Behemoth",""));
cubeCards.add(new CardIdentity("Terastodon",""));
cubeCards.add(new CardIdentity("Woodfall Primus",""));
cubeCards.add(new CardIdentity("Garruk Relentless",""));
cubeCards.add(new CardIdentity("Garruk Wildspeaker",""));
cubeCards.add(new CardIdentity("Garruk, Primal Hunter",""));
cubeCards.add(new CardIdentity("Birthing Pod",""));
cubeCards.add(new CardIdentity("Giant Growth",""));
cubeCards.add(new CardIdentity("Vines of Vastwood",""));
cubeCards.add(new CardIdentity("Worldly Tutor",""));
cubeCards.add(new CardIdentity("Naturalize",""));
cubeCards.add(new CardIdentity("Beast Within",""));
cubeCards.add(new CardIdentity("Harrow",""));
cubeCards.add(new CardIdentity("Krosan Grip",""));
cubeCards.add(new CardIdentity("Channel",""));
cubeCards.add(new CardIdentity("Explore",""));
cubeCards.add(new CardIdentity("Farseek",""));
cubeCards.add(new CardIdentity("Life from the Loam",""));
cubeCards.add(new CardIdentity("Rampant Growth",""));
cubeCards.add(new CardIdentity("Regrowth",""));
cubeCards.add(new CardIdentity("Call of the Herd",""));
cubeCards.add(new CardIdentity("Cultivate",""));
cubeCards.add(new CardIdentity("Kodama's Reach",""));
cubeCards.add(new CardIdentity("Search for Tomorrow",""));
cubeCards.add(new CardIdentity("Harmonize",""));
cubeCards.add(new CardIdentity("Natural Order",""));
cubeCards.add(new CardIdentity("Overrun",""));
cubeCards.add(new CardIdentity("Plow Under",""));
cubeCards.add(new CardIdentity("Primal Command",""));
cubeCards.add(new CardIdentity("Green Sun's Zenith",""));
cubeCards.add(new CardIdentity("Tooth and Nail",""));
cubeCards.add(new CardIdentity("Rancor",""));
cubeCards.add(new CardIdentity("Survival of the Fittest",""));
cubeCards.add(new CardIdentity("Sylvan Library",""));
cubeCards.add(new CardIdentity("Awakening Zone",""));
cubeCards.add(new CardIdentity("Boon Satyr",""));
cubeCards.add(new CardIdentity("Geist of Saint Traft",""));
cubeCards.add(new CardIdentity("Grand Arbiter Augustin IV",""));
cubeCards.add(new CardIdentity("Venser, the Sojourner",""));
cubeCards.add(new CardIdentity("Azorius Charm",""));
cubeCards.add(new CardIdentity("Sphinx's Revelation",""));
cubeCards.add(new CardIdentity("Supreme Verdict",""));
cubeCards.add(new CardIdentity("Detention Sphere",""));
cubeCards.add(new CardIdentity("Psychatog",""));
cubeCards.add(new CardIdentity("Shadowmage Infiltrator",""));
cubeCards.add(new CardIdentity("Duskmantle Seer",""));
cubeCards.add(new CardIdentity("Oona, Queen of the Fae",""));
cubeCards.add(new CardIdentity("Tezzeret, Agent of Bolas",""));
cubeCards.add(new CardIdentity("Baleful Strix",""));
cubeCards.add(new CardIdentity("Far // Away",""));
cubeCards.add(new CardIdentity("Rakdos Cackler",""));
cubeCards.add(new CardIdentity("Spike Jester",""));
cubeCards.add(new CardIdentity("Falkenrath Aristocrat",""));
cubeCards.add(new CardIdentity("Murderous Redcap",""));
cubeCards.add(new CardIdentity("Olivia Voldaren",""));
cubeCards.add(new CardIdentity("Terminate",""));
cubeCards.add(new CardIdentity("Bituminous Blast",""));
cubeCards.add(new CardIdentity("Dreadbore",""));
cubeCards.add(new CardIdentity("Blightning",""));
cubeCards.add(new CardIdentity("Burning-Tree Emissary",""));
cubeCards.add(new CardIdentity("Boggart Ram-Gang",""));
cubeCards.add(new CardIdentity("Bloodbraid Elf",""));
cubeCards.add(new CardIdentity("Ghor-Clan Rampager",""));
cubeCards.add(new CardIdentity("Huntmaster of the Fells",""));
cubeCards.add(new CardIdentity("Domri Rade",""));
cubeCards.add(new CardIdentity("Sarkhan Vol",""));
cubeCards.add(new CardIdentity("Xenagos, the Reveler",""));
cubeCards.add(new CardIdentity("Dryad Militant",""));
cubeCards.add(new CardIdentity("Qasali Pridemage",""));
cubeCards.add(new CardIdentity("Voice of Resurgence",""));
cubeCards.add(new CardIdentity("Kitchen Finks",""));
cubeCards.add(new CardIdentity("Knight of the Reliquary",""));
cubeCards.add(new CardIdentity("Loxodon Smiter",""));
cubeCards.add(new CardIdentity("Armada Wurm",""));
cubeCards.add(new CardIdentity("Selesnya Charm",""));
cubeCards.add(new CardIdentity("Mirari's Wake",""));
cubeCards.add(new CardIdentity("Obzedat, Ghost Council",""));
cubeCards.add(new CardIdentity("Angel of Despair",""));
cubeCards.add(new CardIdentity("Sorin, Lord of Innistrad",""));
cubeCards.add(new CardIdentity("Tidehollow Sculler",""));
cubeCards.add(new CardIdentity("Mortify",""));
cubeCards.add(new CardIdentity("Vindicate",""));
cubeCards.add(new CardIdentity("Deathrite Shaman",""));
cubeCards.add(new CardIdentity("Lotleth Troll",""));
cubeCards.add(new CardIdentity("Putrid Leech",""));
cubeCards.add(new CardIdentity("Dreg Mangler",""));
cubeCards.add(new CardIdentity("Varolz, the Scar-Striped",""));
cubeCards.add(new CardIdentity("Vraska the Unseen",""));
cubeCards.add(new CardIdentity("Abrupt Decay",""));
cubeCards.add(new CardIdentity("Putrefy",""));
cubeCards.add(new CardIdentity("Maelstrom Pulse",""));
cubeCards.add(new CardIdentity("Pernicious Deed",""));
cubeCards.add(new CardIdentity("Coiling Oracle",""));
cubeCards.add(new CardIdentity("Edric, Spymaster of Trest",""));
cubeCards.add(new CardIdentity("Trygon Predator",""));
cubeCards.add(new CardIdentity("Mystic Snake",""));
cubeCards.add(new CardIdentity("Prime Speaker Zegana",""));
cubeCards.add(new CardIdentity("Simic Sky Swallower",""));
cubeCards.add(new CardIdentity("Shardless Agent",""));
cubeCards.add(new CardIdentity("Simic Charm",""));
cubeCards.add(new CardIdentity("Niv-Mizzet, Dracogenius",""));
cubeCards.add(new CardIdentity("Ral Zarek",""));
cubeCards.add(new CardIdentity("Fire // Ice",""));
cubeCards.add(new CardIdentity("Izzet Charm",""));
cubeCards.add(new CardIdentity("Turn // Burn",""));
cubeCards.add(new CardIdentity("Electrolyze",""));
cubeCards.add(new CardIdentity("Steam Augury",""));
cubeCards.add(new CardIdentity("Prophetic Bolt",""));
cubeCards.add(new CardIdentity("Figure of Destiny",""));
cubeCards.add(new CardIdentity("Boros Reckoner",""));
cubeCards.add(new CardIdentity("Ajani Vengeant",""));
cubeCards.add(new CardIdentity("Boros Charm",""));
cubeCards.add(new CardIdentity("Lightning Helix",""));
cubeCards.add(new CardIdentity("Assemble the Legion",""));
cubeCards.add(new CardIdentity("Sphinx of the Steel Wind",""));
cubeCards.add(new CardIdentity("Nicol Bolas, Planeswalker",""));
cubeCards.add(new CardIdentity("Kozilek, Butcher of Truth",""));
cubeCards.add(new CardIdentity("Ulamog, the Infinite Gyre",""));
cubeCards.add(new CardIdentity("Karn Liberated",""));
cubeCards.add(new CardIdentity("Epochrasite",""));
cubeCards.add(new CardIdentity("Perilous Myr",""));
cubeCards.add(new CardIdentity("Phyrexian Revoker",""));
cubeCards.add(new CardIdentity("Spellskite",""));
cubeCards.add(new CardIdentity("Palladium Myr",""));
cubeCards.add(new CardIdentity("Lodestone Golem",""));
cubeCards.add(new CardIdentity("Masticore",""));
cubeCards.add(new CardIdentity("Molten-Tail Masticore",""));
cubeCards.add(new CardIdentity("Solemn Simulacrum",""));
cubeCards.add(new CardIdentity("Precursor Golem",""));
cubeCards.add(new CardIdentity("Razormane Masticore",""));
cubeCards.add(new CardIdentity("Duplicant",""));
cubeCards.add(new CardIdentity("Steel Hellkite",""));
cubeCards.add(new CardIdentity("Triskelion",""));
cubeCards.add(new CardIdentity("Wurmcoil Engine",""));
cubeCards.add(new CardIdentity("Myr Battlesphere",""));
cubeCards.add(new CardIdentity("Sundering Titan",""));
cubeCards.add(new CardIdentity("Black Lotus",""));
cubeCards.add(new CardIdentity("Chrome Mox",""));
cubeCards.add(new CardIdentity("Everflowing Chalice",""));
cubeCards.add(new CardIdentity("Lotus Bloom",""));
cubeCards.add(new CardIdentity("Mana Crypt",""));
cubeCards.add(new CardIdentity("Mox Diamond",""));
cubeCards.add(new CardIdentity("Mox Emerald",""));
cubeCards.add(new CardIdentity("Mox Jet",""));
cubeCards.add(new CardIdentity("Mox Pearl",""));
cubeCards.add(new CardIdentity("Mox Ruby",""));
cubeCards.add(new CardIdentity("Mox Sapphire",""));
cubeCards.add(new CardIdentity("Aether Vial",""));
cubeCards.add(new CardIdentity("Basilisk Collar",""));
cubeCards.add(new CardIdentity("Black Vise",""));
cubeCards.add(new CardIdentity("Bonesplitter",""));
cubeCards.add(new CardIdentity("Cursed Scroll",""));
cubeCards.add(new CardIdentity("Mana Vault",""));
cubeCards.add(new CardIdentity("Pithing Needle",""));
cubeCards.add(new CardIdentity("Relic of Progenitus",""));
cubeCards.add(new CardIdentity("Sensei's Divining Top",""));
cubeCards.add(new CardIdentity("Skullclamp",""));
cubeCards.add(new CardIdentity("Sol Ring",""));
cubeCards.add(new CardIdentity("Ankh of Mishra",""));
cubeCards.add(new CardIdentity("Azorius Signet",""));
cubeCards.add(new CardIdentity("Boros Signet",""));
cubeCards.add(new CardIdentity("Coldsteel Heart",""));
cubeCards.add(new CardIdentity("Dimir Signet",""));
cubeCards.add(new CardIdentity("Golgari Signet",""));
cubeCards.add(new CardIdentity("Grim Monolith",""));
cubeCards.add(new CardIdentity("Gruul Signet",""));
cubeCards.add(new CardIdentity("Isochron Scepter",""));
cubeCards.add(new CardIdentity("Izzet Signet",""));
cubeCards.add(new CardIdentity("Lightning Greaves",""));
cubeCards.add(new CardIdentity("Mind Stone",""));
cubeCards.add(new CardIdentity("Mortarpod",""));
cubeCards.add(new CardIdentity("Orzhov Signet",""));
cubeCards.add(new CardIdentity("Rakdos Signet",""));
cubeCards.add(new CardIdentity("Ratchet Bomb",""));
cubeCards.add(new CardIdentity("Scroll Rack",""));
cubeCards.add(new CardIdentity("Selesnya Signet",""));
cubeCards.add(new CardIdentity("Shrine of Burning Rage",""));
cubeCards.add(new CardIdentity("Simic Signet",""));
cubeCards.add(new CardIdentity("Sphere of the Suns",""));
cubeCards.add(new CardIdentity("Umezawa's Jitte",""));
cubeCards.add(new CardIdentity("Winter Orb",""));
cubeCards.add(new CardIdentity("Basalt Monolith",""));
cubeCards.add(new CardIdentity("Chromatic Lantern",""));
cubeCards.add(new CardIdentity("Coalition Relic",""));
cubeCards.add(new CardIdentity("Crucible of Worlds",""));
cubeCards.add(new CardIdentity("Crystal Shard",""));
cubeCards.add(new CardIdentity("Darksteel Ingot",""));
cubeCards.add(new CardIdentity("Grafted Wargear",""));
cubeCards.add(new CardIdentity("Loxodon Warhammer",""));
cubeCards.add(new CardIdentity("Mimic Vat",""));
cubeCards.add(new CardIdentity("Oblivion Stone",""));
cubeCards.add(new CardIdentity("Sword of Body and Mind",""));
cubeCards.add(new CardIdentity("Sword of Feast and Famine",""));
cubeCards.add(new CardIdentity("Sword of Fire and Ice",""));
cubeCards.add(new CardIdentity("Sword of Light and Shadow",""));
cubeCards.add(new CardIdentity("Sword of War and Peace",""));
cubeCards.add(new CardIdentity("Tangle Wire",""));
cubeCards.add(new CardIdentity("Vedalken Shackles",""));
cubeCards.add(new CardIdentity("Worn Powerstone",""));
cubeCards.add(new CardIdentity("Erratic Portal",""));
cubeCards.add(new CardIdentity("Icy Manipulator",""));
cubeCards.add(new CardIdentity("Nevinyrral's Disk",""));
cubeCards.add(new CardIdentity("Smokestack",""));
cubeCards.add(new CardIdentity("Thran Dynamo",""));
cubeCards.add(new CardIdentity("Batterskull",""));
cubeCards.add(new CardIdentity("Engineered Explosives",""));
cubeCards.add(new CardIdentity("Gilded Lotus",""));
cubeCards.add(new CardIdentity("Memory Jar",""));
cubeCards.add(new CardIdentity("Mindslaver",""));
cubeCards.add(new CardIdentity("All Is Dust",""));
cubeCards.add(new CardIdentity("Academy Ruins",""));
cubeCards.add(new CardIdentity("Ancient Tomb",""));
cubeCards.add(new CardIdentity("Arcane Sanctum",""));
cubeCards.add(new CardIdentity("Arid Mesa",""));
cubeCards.add(new CardIdentity("Azorius Chancery",""));
cubeCards.add(new CardIdentity("Badlands",""));
cubeCards.add(new CardIdentity("Battlefield Forge",""));
cubeCards.add(new CardIdentity("Bayou",""));
cubeCards.add(new CardIdentity("Blood Crypt",""));
cubeCards.add(new CardIdentity("Bloodstained Mire",""));
cubeCards.add(new CardIdentity("Boros Garrison",""));
cubeCards.add(new CardIdentity("Breeding Pool",""));
cubeCards.add(new CardIdentity("Cascade Bluffs",""));
cubeCards.add(new CardIdentity("Caves of Koilos",""));
cubeCards.add(new CardIdentity("Celestial Colonnade",""));
cubeCards.add(new CardIdentity("City of Brass",""));
cubeCards.add(new CardIdentity("Clifftop Retreat",""));
cubeCards.add(new CardIdentity("Creeping Tar Pit",""));
cubeCards.add(new CardIdentity("Crumbling Necropolis",""));
cubeCards.add(new CardIdentity("Dimir Aqueduct",""));
cubeCards.add(new CardIdentity("Dragonskull Summit",""));
cubeCards.add(new CardIdentity("Drowned Catacomb",""));
cubeCards.add(new CardIdentity("Evolving Wilds",""));
cubeCards.add(new CardIdentity("Faerie Conclave",""));
cubeCards.add(new CardIdentity("Fetid Heath",""));
cubeCards.add(new CardIdentity("Flooded Strand",""));
cubeCards.add(new CardIdentity("Gaea's Cradle",""));
cubeCards.add(new CardIdentity("Gavony Township",""));
cubeCards.add(new CardIdentity("Gemstone Mine",""));
cubeCards.add(new CardIdentity("Glacial Fortress",""));
cubeCards.add(new CardIdentity("Godless Shrine",""));
cubeCards.add(new CardIdentity("Golgari Rot Farm",""));
cubeCards.add(new CardIdentity("Grand Coliseum",""));
cubeCards.add(new CardIdentity("Gruul Turf",""));
cubeCards.add(new CardIdentity("Hallowed Fountain",""));
cubeCards.add(new CardIdentity("Hinterland Harbor",""));
cubeCards.add(new CardIdentity("Isolated Chapel",""));
cubeCards.add(new CardIdentity("Izzet Boilerworks",""));
cubeCards.add(new CardIdentity("Jungle Shrine",""));
cubeCards.add(new CardIdentity("Kessig Wolf Run",""));
cubeCards.add(new CardIdentity("Lavaclaw Reaches",""));
cubeCards.add(new CardIdentity("Library of Alexandria",""));
cubeCards.add(new CardIdentity("Llanowar Wastes",""));
cubeCards.add(new CardIdentity("Marsh Flats",""));
cubeCards.add(new CardIdentity("Maze of Ith",""));
cubeCards.add(new CardIdentity("Mishra's Factory",""));
cubeCards.add(new CardIdentity("Misty Rainforest",""));
cubeCards.add(new CardIdentity("Mutavault",""));
cubeCards.add(new CardIdentity("Orzhov Basilica",""));
cubeCards.add(new CardIdentity("Overgrown Tomb",""));
cubeCards.add(new CardIdentity("Plateau",""));
cubeCards.add(new CardIdentity("Polluted Delta",""));
cubeCards.add(new CardIdentity("Raging Ravine",""));
cubeCards.add(new CardIdentity("Rakdos Carnarium",""));
cubeCards.add(new CardIdentity("Reflecting Pool",""));
cubeCards.add(new CardIdentity("Rishadan Port",""));
cubeCards.add(new CardIdentity("Rootbound Crag",""));
cubeCards.add(new CardIdentity("Rugged Prairie",""));
cubeCards.add(new CardIdentity("Sacred Foundry",""));
cubeCards.add(new CardIdentity("Savage Lands",""));
cubeCards.add(new CardIdentity("Savannah",""));
cubeCards.add(new CardIdentity("Scalding Tarn",""));
cubeCards.add(new CardIdentity("Scrubland",""));
cubeCards.add(new CardIdentity("Seaside Citadel",""));
cubeCards.add(new CardIdentity("Selesnya Sanctuary",""));
cubeCards.add(new CardIdentity("Shelldock Isle",""));
cubeCards.add(new CardIdentity("Simic Growth Chamber",""));
cubeCards.add(new CardIdentity("Steam Vents",""));
cubeCards.add(new CardIdentity("Stirring Wildwood",""));
cubeCards.add(new CardIdentity("Stomping Ground",""));
cubeCards.add(new CardIdentity("Strip Mine",""));
cubeCards.add(new CardIdentity("Sulfur Falls",""));
cubeCards.add(new CardIdentity("Sunpetal Grove",""));
cubeCards.add(new CardIdentity("Taiga",""));
cubeCards.add(new CardIdentity("Tectonic Edge",""));
cubeCards.add(new CardIdentity("Temple Garden",""));
cubeCards.add(new CardIdentity("Terramorphic Expanse",""));
cubeCards.add(new CardIdentity("Treetop Village",""));
cubeCards.add(new CardIdentity("Tropical Island",""));
cubeCards.add(new CardIdentity("Tundra",""));
cubeCards.add(new CardIdentity("Twilight Mire",""));
cubeCards.add(new CardIdentity("Underground Sea",""));
cubeCards.add(new CardIdentity("Verdant Catacombs",""));
cubeCards.add(new CardIdentity("Vivid Crag",""));
cubeCards.add(new CardIdentity("Vivid Creek",""));
cubeCards.add(new CardIdentity("Vivid Grove",""));
cubeCards.add(new CardIdentity("Vivid Marsh",""));
cubeCards.add(new CardIdentity("Vivid Meadow",""));
cubeCards.add(new CardIdentity("Volcanic Island",""));
cubeCards.add(new CardIdentity("Volrath's Stronghold",""));
cubeCards.add(new CardIdentity("Wasteland",""));
cubeCards.add(new CardIdentity("Watery Grave",""));
cubeCards.add(new CardIdentity("Windswept Heath",""));
cubeCards.add(new CardIdentity("Wooded Foothills",""));
cubeCards.add(new CardIdentity("Woodland Cemetery",""));
cubeCards.add(new CardIdentity("Yavimaya Coast",""));
}
}

View file

@ -0,0 +1,583 @@
/*
* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are
* permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* The views and conclusions contained in the software and documentation are those of the
* authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com.
*/
package mage.tournament.cubes;
import mage.game.draft.DraftCube;
/**
*
* @author LevelX2
*/
public class HolidayCube2013 extends DraftCube {
public HolidayCube2013() {
super("MTGO Holiday Cube 2013");
cubeCards.add(new CardIdentity("Honor of the Pure",""));
cubeCards.add(new CardIdentity("Path to Exile",""));
cubeCards.add(new CardIdentity("Land Tax",""));
cubeCards.add(new CardIdentity("Exalted Angel",""));
cubeCards.add(new CardIdentity("Mana Tithe",""));
cubeCards.add(new CardIdentity("Spectral Procession",""));
cubeCards.add(new CardIdentity("Wall of Omens",""));
cubeCards.add(new CardIdentity("Sun Titan",""));
cubeCards.add(new CardIdentity("Leonin Relic-Warder",""));
cubeCards.add(new CardIdentity("Elesh Norn, Grand Cenobite",""));
cubeCards.add(new CardIdentity("Lingering Souls",""));
cubeCards.add(new CardIdentity("Terminus",""));
cubeCards.add(new CardIdentity("Disenchant",""));
cubeCards.add(new CardIdentity("Mother of Runes",""));
cubeCards.add(new CardIdentity("Weathered Wayfarer",""));
cubeCards.add(new CardIdentity("Ravages of War",""));
cubeCards.add(new CardIdentity("Student of Warfare",""));
cubeCards.add(new CardIdentity("Swords to Plowshares",""));
cubeCards.add(new CardIdentity("Elspeth Tirel",""));
cubeCards.add(new CardIdentity("Mirran Crusader",""));
cubeCards.add(new CardIdentity("Elite Vanguard",""));
cubeCards.add(new CardIdentity("Day of Judgment",""));
cubeCards.add(new CardIdentity("Nearheath Pilgrim",""));
cubeCards.add(new CardIdentity("Silverblade Paladin",""));
cubeCards.add(new CardIdentity("Soldier of the Pantheon",""));
cubeCards.add(new CardIdentity("Enlightened Tutor",""));
cubeCards.add(new CardIdentity("Soltari Champion",""));
cubeCards.add(new CardIdentity("Catastrophe",""));
cubeCards.add(new CardIdentity("Parallax Wave",""));
cubeCards.add(new CardIdentity("Rout",""));
cubeCards.add(new CardIdentity("Whipcorder",""));
cubeCards.add(new CardIdentity("Kami of Ancient Law",""));
cubeCards.add(new CardIdentity("Isamaru, Hound of Konda",""));
cubeCards.add(new CardIdentity("Savannah Lions",""));
cubeCards.add(new CardIdentity("Paladin en-Vec",""));
cubeCards.add(new CardIdentity("Wrath of God",""));
cubeCards.add(new CardIdentity("Cloudgoat Ranger",""));
cubeCards.add(new CardIdentity("Mirror Entity",""));
cubeCards.add(new CardIdentity("Reveillark",""));
cubeCards.add(new CardIdentity("Flickerwisp",""));
cubeCards.add(new CardIdentity("Ranger of Eos",""));
cubeCards.add(new CardIdentity("Elspeth, Knight-Errant",""));
cubeCards.add(new CardIdentity("Balance",""));
cubeCards.add(new CardIdentity("Steppe Lynx",""));
cubeCards.add(new CardIdentity("Journey to Nowhere",""));
cubeCards.add(new CardIdentity("Emeria Angel",""));
cubeCards.add(new CardIdentity("Ajani Goldmane",""));
cubeCards.add(new CardIdentity("Porcelain Legionnaire",""));
cubeCards.add(new CardIdentity("Blade Splicer",""));
cubeCards.add(new CardIdentity("Thalia, Guardian of Thraben",""));
cubeCards.add(new CardIdentity("Restoration Angel",""));
cubeCards.add(new CardIdentity("Knight of Glory",""));
cubeCards.add(new CardIdentity("Moat",""));
cubeCards.add(new CardIdentity("Elspeth, Sun's Champion",""));
cubeCards.add(new CardIdentity("Spear of Heliod",""));
cubeCards.add(new CardIdentity("Unexpectedly Absent",""));
cubeCards.add(new CardIdentity("Armageddon",""));
cubeCards.add(new CardIdentity("Faith's Fetters",""));
cubeCards.add(new CardIdentity("Stoneforge Mystic",""));
cubeCards.add(new CardIdentity("Linvala, Keeper of Silence",""));
cubeCards.add(new CardIdentity("Baneslayer Angel",""));
cubeCards.add(new CardIdentity("Hero of Bladehold",""));
cubeCards.add(new CardIdentity("Oblivion Ring",""));
cubeCards.add(new CardIdentity("Gideon's Lawkeeper",""));
cubeCards.add(new CardIdentity("Ajani, Caller of the Pride",""));
cubeCards.add(new CardIdentity("Angel of Serenity",""));
cubeCards.add(new CardIdentity("Archangel of Thune",""));
cubeCards.add(new CardIdentity("Loam Lion",""));
cubeCards.add(new CardIdentity("Gideon Jura",""));
cubeCards.add(new CardIdentity("Mana Drain",""));
cubeCards.add(new CardIdentity("Frantic Search",""));
cubeCards.add(new CardIdentity("Treachery",""));
cubeCards.add(new CardIdentity("Brainstorm",""));
cubeCards.add(new CardIdentity("Brain Freeze",""));
cubeCards.add(new CardIdentity("Vesuvan Shapeshifter",""));
cubeCards.add(new CardIdentity("Venser, Shaper Savant",""));
cubeCards.add(new CardIdentity("Sower of Temptation",""));
cubeCards.add(new CardIdentity("Wake Thrasher",""));
cubeCards.add(new CardIdentity("Consecrated Sphinx",""));
cubeCards.add(new CardIdentity("Snapcaster Mage",""));
cubeCards.add(new CardIdentity("True-Name Nemesis",""));
cubeCards.add(new CardIdentity("Intuition",""));
cubeCards.add(new CardIdentity("Forbid",""));
cubeCards.add(new CardIdentity("Force Spike",""));
cubeCards.add(new CardIdentity("Upheaval",""));
cubeCards.add(new CardIdentity("Voidmage Prodigy",""));
cubeCards.add(new CardIdentity("Willbender",""));
cubeCards.add(new CardIdentity("Gifts Ungiven",""));
cubeCards.add(new CardIdentity("Compulsive Research",""));
cubeCards.add(new CardIdentity("Riftwing Cloudskate",""));
cubeCards.add(new CardIdentity("Glen Elendra Archmage",""));
cubeCards.add(new CardIdentity("Inkwell Leviathan",""));
cubeCards.add(new CardIdentity("Tinker",""));
cubeCards.add(new CardIdentity("Jace, the Mind Sculptor",""));
cubeCards.add(new CardIdentity("Old Man of the Sea",""));
cubeCards.add(new CardIdentity("Mystical Tutor",""));
cubeCards.add(new CardIdentity("Impulse",""));
cubeCards.add(new CardIdentity("Turnabout",""));
cubeCards.add(new CardIdentity("Palinchron",""));
cubeCards.add(new CardIdentity("Daze",""));
cubeCards.add(new CardIdentity("Meloku the Clouded Mirror",""));
cubeCards.add(new CardIdentity("Jushi Apprentice",""));
cubeCards.add(new CardIdentity("Remand",""));
cubeCards.add(new CardIdentity("Looter il-Kor",""));
cubeCards.add(new CardIdentity("Aeon Chronicler",""));
cubeCards.add(new CardIdentity("Mulldrifter",""));
cubeCards.add(new CardIdentity("Cryptic Command",""));
cubeCards.add(new CardIdentity("Serendib Efreet",""));
cubeCards.add(new CardIdentity("Into the Roil",""));
cubeCards.add(new CardIdentity("Sphinx of Jwar Isle",""));
cubeCards.add(new CardIdentity("Jace Beleren",""));
cubeCards.add(new CardIdentity("Preordain",""));
cubeCards.add(new CardIdentity("Fact or Fiction",""));
cubeCards.add(new CardIdentity("Mana Leak",""));
cubeCards.add(new CardIdentity("Frost Titan",""));
cubeCards.add(new CardIdentity("Phantasmal Image",""));
cubeCards.add(new CardIdentity("Dungeon Geists",""));
cubeCards.add(new CardIdentity("Tamiyo, the Moon Sage",""));
cubeCards.add(new CardIdentity("Timetwister",""));
cubeCards.add(new CardIdentity("Show and Tell",""));
cubeCards.add(new CardIdentity("Aetherling",""));
cubeCards.add(new CardIdentity("Memory Lapse",""));
cubeCards.add(new CardIdentity("Dream Halls",""));
cubeCards.add(new CardIdentity("Opposition",""));
cubeCards.add(new CardIdentity("Mind's Desire",""));
cubeCards.add(new CardIdentity("Vendilion Clique",""));
cubeCards.add(new CardIdentity("Counterspell",""));
cubeCards.add(new CardIdentity("Force of Will",""));
cubeCards.add(new CardIdentity("Control Magic",""));
cubeCards.add(new CardIdentity("Jace, Architect of Thought",""));
cubeCards.add(new CardIdentity("Time Walk",""));
cubeCards.add(new CardIdentity("Bribery",""));
cubeCards.add(new CardIdentity("Ancestral Recall",""));
cubeCards.add(new CardIdentity("Ancestral Vision",""));
cubeCards.add(new CardIdentity("Phyrexian Metamorph",""));
cubeCards.add(new CardIdentity("Time Spiral",""));
cubeCards.add(new CardIdentity("Miscalculation",""));
cubeCards.add(new CardIdentity("Trinket Mage",""));
cubeCards.add(new CardIdentity("Recurring Nightmare",""));
cubeCards.add(new CardIdentity("Buried Alive",""));
cubeCards.add(new CardIdentity("Tendrils of Agony",""));
cubeCards.add(new CardIdentity("Unburial Rites",""));
cubeCards.add(new CardIdentity("Mesmeric Fiend",""));
cubeCards.add(new CardIdentity("Slaughter Pact",""));
cubeCards.add(new CardIdentity("Gatekeeper of Malakir",""));
cubeCards.add(new CardIdentity("Grave Titan",""));
cubeCards.add(new CardIdentity("Phyrexian Obliterator",""));
cubeCards.add(new CardIdentity("Necromancy",""));
cubeCards.add(new CardIdentity("Corpse Dance",""));
cubeCards.add(new CardIdentity("Yawgmoth's Will",""));
cubeCards.add(new CardIdentity("Nightscape Familiar",""));
cubeCards.add(new CardIdentity("Nezumi Shortfang",""));
cubeCards.add(new CardIdentity("Dark Confidant",""));
cubeCards.add(new CardIdentity("Graveborn Muse",""));
cubeCards.add(new CardIdentity("Liliana Vess",""));
cubeCards.add(new CardIdentity("Black Knight",""));
cubeCards.add(new CardIdentity("Go for the Throat",""));
cubeCards.add(new CardIdentity("Sheoldred, Whispering One",""));
cubeCards.add(new CardIdentity("Bloodline Keeper",""));
cubeCards.add(new CardIdentity("Animate Dead",""));
cubeCards.add(new CardIdentity("Gravecrawler",""));
cubeCards.add(new CardIdentity("Griselbrand",""));
cubeCards.add(new CardIdentity("Erebos, God of the Dead",""));
cubeCards.add(new CardIdentity("Toxic Deluge",""));
cubeCards.add(new CardIdentity("Vampiric Tutor",""));
cubeCards.add(new CardIdentity("Living Death",""));
cubeCards.add(new CardIdentity("Reanimate",""));
cubeCards.add(new CardIdentity("Bone Shredder",""));
cubeCards.add(new CardIdentity("Braids, Cabal Minion",""));
cubeCards.add(new CardIdentity("Entomb",""));
cubeCards.add(new CardIdentity("Putrid Imp",""));
cubeCards.add(new CardIdentity("Nezumi Graverobber",""));
cubeCards.add(new CardIdentity("Ink-Eyes, Servant of Oni",""));
cubeCards.add(new CardIdentity("Phyrexian Arena",""));
cubeCards.add(new CardIdentity("Plague Sliver",""));
cubeCards.add(new CardIdentity("Damnation",""));
cubeCards.add(new CardIdentity("Nekrataal",""));
cubeCards.add(new CardIdentity("Shriekmaw",""));
cubeCards.add(new CardIdentity("Bitterblossom",""));
cubeCards.add(new CardIdentity("Demonic Tutor",""));
cubeCards.add(new CardIdentity("Necropotence",""));
cubeCards.add(new CardIdentity("Disfigure",""));
cubeCards.add(new CardIdentity("Vampire Nighthawk",""));
cubeCards.add(new CardIdentity("Guul Draz Assassin",""));
cubeCards.add(new CardIdentity("Consuming Vapors",""));
cubeCards.add(new CardIdentity("Duress",""));
cubeCards.add(new CardIdentity("Skinrender",""));
cubeCards.add(new CardIdentity("Dismember",""));
cubeCards.add(new CardIdentity("Diregraf Ghoul",""));
cubeCards.add(new CardIdentity("Liliana of the Veil",""));
cubeCards.add(new CardIdentity("Hymn to Tourach",""));
cubeCards.add(new CardIdentity("Ultimate Price",""));
cubeCards.add(new CardIdentity("Nether Void",""));
cubeCards.add(new CardIdentity("The Abyss",""));
cubeCards.add(new CardIdentity("Lifebane Zombie",""));
cubeCards.add(new CardIdentity("Thoughtseize",""));
cubeCards.add(new CardIdentity("Hero's Downfall",""));
cubeCards.add(new CardIdentity("Diabolic Edict",""));
cubeCards.add(new CardIdentity("Sarcomancy",""));
cubeCards.add(new CardIdentity("Oona's Prowler",""));
cubeCards.add(new CardIdentity("Dark Ritual",""));
cubeCards.add(new CardIdentity("Hypnotic Specter",""));
cubeCards.add(new CardIdentity("Bloodghast",""));
cubeCards.add(new CardIdentity("Inquisition of Kozilek",""));
cubeCards.add(new CardIdentity("Phyrexian Rager",""));
cubeCards.add(new CardIdentity("Bloodgift Demon",""));
cubeCards.add(new CardIdentity("Mind Twist",""));
cubeCards.add(new CardIdentity("Frenzied Goblin",""));
cubeCards.add(new CardIdentity("Torch Fiend",""));
cubeCards.add(new CardIdentity("Earthquake",""));
cubeCards.add(new CardIdentity("Goblin Ruinblaster",""));
cubeCards.add(new CardIdentity("Chandra's Phoenix",""));
cubeCards.add(new CardIdentity("Price of Progress",""));
cubeCards.add(new CardIdentity("Avalanche Riders",""));
cubeCards.add(new CardIdentity("Goblin Welder",""));
cubeCards.add(new CardIdentity("Firebolt",""));
cubeCards.add(new CardIdentity("Sulfuric Vortex",""));
cubeCards.add(new CardIdentity("Seething Song",""));
cubeCards.add(new CardIdentity("Rift Bolt",""));
cubeCards.add(new CardIdentity("Mogg War Marshal",""));
cubeCards.add(new CardIdentity("Hellrider",""));
cubeCards.add(new CardIdentity("Taurean Mauler",""));
cubeCards.add(new CardIdentity("Ember Hauler",""));
cubeCards.add(new CardIdentity("Koth of the Hammer",""));
cubeCards.add(new CardIdentity("Jackal Pup",""));
cubeCards.add(new CardIdentity("Incinerate",""));
cubeCards.add(new CardIdentity("Chandra, the Firebrand",""));
cubeCards.add(new CardIdentity("Stormblood Berserker",""));
cubeCards.add(new CardIdentity("Grim Lavamancer",""));
cubeCards.add(new CardIdentity("Bonfire of the Damned",""));
cubeCards.add(new CardIdentity("Thundermaw Hellkite",""));
cubeCards.add(new CardIdentity("Magma Jet",""));
cubeCards.add(new CardIdentity("Firedrinker Satyr",""));
cubeCards.add(new CardIdentity("Firestorm",""));
cubeCards.add(new CardIdentity("Ravenous Baboons",""));
cubeCards.add(new CardIdentity("Wildfire",""));
cubeCards.add(new CardIdentity("Sneak Attack",""));
cubeCards.add(new CardIdentity("Reckless Charge",""));
cubeCards.add(new CardIdentity("Molten Rain",""));
cubeCards.add(new CardIdentity("Char",""));
cubeCards.add(new CardIdentity("Tin Street Hooligan",""));
cubeCards.add(new CardIdentity("Empty the Warrens",""));
cubeCards.add(new CardIdentity("Ancient Grudge",""));
cubeCards.add(new CardIdentity("Greater Gargadon",""));
cubeCards.add(new CardIdentity("Keldon Marauders",""));
cubeCards.add(new CardIdentity("Magus of the Moon",""));
cubeCards.add(new CardIdentity("Smash to Smithereens",""));
cubeCards.add(new CardIdentity("Hellspark Elemental",""));
cubeCards.add(new CardIdentity("Ball Lightning",""));
cubeCards.add(new CardIdentity("Siege-Gang Commander",""));
cubeCards.add(new CardIdentity("Burning of Xinye",""));
cubeCards.add(new CardIdentity("Goblin Guide",""));
cubeCards.add(new CardIdentity("Searing Blaze",""));
cubeCards.add(new CardIdentity("Kargan Dragonlord",""));
cubeCards.add(new CardIdentity("Wheel of Fortune",""));
cubeCards.add(new CardIdentity("Pyroclasm",""));
cubeCards.add(new CardIdentity("Arc Trail",""));
cubeCards.add(new CardIdentity("Spikeshot Elder",""));
cubeCards.add(new CardIdentity("Urabrask the Hidden",""));
cubeCards.add(new CardIdentity("Flametongue Kavu",""));
cubeCards.add(new CardIdentity("Inferno Titan",""));
cubeCards.add(new CardIdentity("Kird Ape",""));
cubeCards.add(new CardIdentity("Brimstone Volley",""));
cubeCards.add(new CardIdentity("Devil's Play",""));
cubeCards.add(new CardIdentity("Faithless Looting",""));
cubeCards.add(new CardIdentity("Orcish Lumberjack",""));
cubeCards.add(new CardIdentity("Zealous Conscripts",""));
cubeCards.add(new CardIdentity("Mizzium Mortars",""));
cubeCards.add(new CardIdentity("Goblin Vandal",""));
cubeCards.add(new CardIdentity("Plated Geopede",""));
cubeCards.add(new CardIdentity("Lightning Bolt",""));
cubeCards.add(new CardIdentity("Chain Lightning",""));
cubeCards.add(new CardIdentity("Chaos Warp",""));
cubeCards.add(new CardIdentity("Fireblast",""));
cubeCards.add(new CardIdentity("Chandra, Pyromaster",""));
cubeCards.add(new CardIdentity("Hero of Oxid Ridge",""));
cubeCards.add(new CardIdentity("Nantuko Vigilante",""));
cubeCards.add(new CardIdentity("Boon Satyr",""));
cubeCards.add(new CardIdentity("Rude Awakening",""));
cubeCards.add(new CardIdentity("Thornscape Battlemage",""));
cubeCards.add(new CardIdentity("Indrik Stomphowler",""));
cubeCards.add(new CardIdentity("Ohran Viper",""));
cubeCards.add(new CardIdentity("Lotus Cobra",""));
cubeCards.add(new CardIdentity("Primeval Titan",""));
cubeCards.add(new CardIdentity("Birds of Paradise",""));
cubeCards.add(new CardIdentity("Wall of Blossoms",""));
cubeCards.add(new CardIdentity("Restock",""));
cubeCards.add(new CardIdentity("Tooth and Nail",""));
cubeCards.add(new CardIdentity("Eternal Witness",""));
cubeCards.add(new CardIdentity("Primal Command",""));
cubeCards.add(new CardIdentity("Stunted Growth",""));
cubeCards.add(new CardIdentity("Wickerbough Elder",""));
cubeCards.add(new CardIdentity("Master of the Wild Hunt",""));
cubeCards.add(new CardIdentity("Harmonize",""));
cubeCards.add(new CardIdentity("Terastodon",""));
cubeCards.add(new CardIdentity("Garruk Wildspeaker",""));
cubeCards.add(new CardIdentity("Birthing Pod",""));
cubeCards.add(new CardIdentity("Scavenging Ooze",""));
cubeCards.add(new CardIdentity("Avacyn's Pilgrim",""));
cubeCards.add(new CardIdentity("Strangleroot Geist",""));
cubeCards.add(new CardIdentity("Wolfir Silverheart",""));
cubeCards.add(new CardIdentity("Eureka",""));
cubeCards.add(new CardIdentity("Garruk, Caller of Beasts",""));
cubeCards.add(new CardIdentity("Natural Order",""));
cubeCards.add(new CardIdentity("Deranged Hermit",""));
cubeCards.add(new CardIdentity("Nostalgic Dreams",""));
cubeCards.add(new CardIdentity("Genesis",""));
cubeCards.add(new CardIdentity("Plow Under",""));
cubeCards.add(new CardIdentity("Heartbeat of Spring",""));
cubeCards.add(new CardIdentity("Woodfall Primus",""));
cubeCards.add(new CardIdentity("Noble Hierarch",""));
cubeCards.add(new CardIdentity("Channel",""));
cubeCards.add(new CardIdentity("Oracle of Mul Daya",""));
cubeCards.add(new CardIdentity("Arbor Elf",""));
cubeCards.add(new CardIdentity("Joraga Treespeaker",""));
cubeCards.add(new CardIdentity("Awakening Zone",""));
cubeCards.add(new CardIdentity("Vengevine",""));
cubeCards.add(new CardIdentity("Fauna Shaman",""));
cubeCards.add(new CardIdentity("Genesis Wave",""));
cubeCards.add(new CardIdentity("Thrun, the Last Troll",""));
cubeCards.add(new CardIdentity("Beast Within",""));
cubeCards.add(new CardIdentity("Naturalize",""));
cubeCards.add(new CardIdentity("Garruk Relentless",""));
cubeCards.add(new CardIdentity("Ulvenwald Tracker",""));
cubeCards.add(new CardIdentity("Polukranos, World Eater",""));
cubeCards.add(new CardIdentity("Rofellos, Llanowar Emissary",""));
cubeCards.add(new CardIdentity("Elves of Deep Shadow",""));
cubeCards.add(new CardIdentity("Thelonite Hermit",""));
cubeCards.add(new CardIdentity("Tarmogoyf",""));
cubeCards.add(new CardIdentity("Wild Nacatl",""));
cubeCards.add(new CardIdentity("Avenger of Zendikar",""));
cubeCards.add(new CardIdentity("Call of the Herd",""));
cubeCards.add(new CardIdentity("Obstinate Baloth",""));
cubeCards.add(new CardIdentity("Green Sun's Zenith",""));
cubeCards.add(new CardIdentity("Acidic Slime",""));
cubeCards.add(new CardIdentity("Garruk, Primal Hunter",""));
cubeCards.add(new CardIdentity("Llanowar Elves",""));
cubeCards.add(new CardIdentity("Regrowth",""));
cubeCards.add(new CardIdentity("Fyndhorn Elves",""));
cubeCards.add(new CardIdentity("Thragtusk",""));
cubeCards.add(new CardIdentity("Elvish Mystic",""));
cubeCards.add(new CardIdentity("Sylvan Caryatid",""));
cubeCards.add(new CardIdentity("Chord of Calling",""));
cubeCards.add(new CardIdentity("Survival of the Fittest",""));
cubeCards.add(new CardIdentity("Sylvan Library",""));
cubeCards.add(new CardIdentity("Savannah",""));
cubeCards.add(new CardIdentity("Bayou",""));
cubeCards.add(new CardIdentity("Scrubland",""));
cubeCards.add(new CardIdentity("Blood Crypt",""));
cubeCards.add(new CardIdentity("Brushland",""));
cubeCards.add(new CardIdentity("Caves of Koilos",""));
cubeCards.add(new CardIdentity("Dust Bowl",""));
cubeCards.add(new CardIdentity("Ghitu Encampment",""));
cubeCards.add(new CardIdentity("Gruul Turf",""));
cubeCards.add(new CardIdentity("Golgari Rot Farm",""));
cubeCards.add(new CardIdentity("Hallowed Fountain",""));
cubeCards.add(new CardIdentity("Library of Alexandria",""));
cubeCards.add(new CardIdentity("Lake of the Dead",""));
cubeCards.add(new CardIdentity("Llanowar Wastes",""));
cubeCards.add(new CardIdentity("Marsh Flats",""));
cubeCards.add(new CardIdentity("Boros Garrison",""));
cubeCards.add(new CardIdentity("Izzet Boilerworks",""));
cubeCards.add(new CardIdentity("Orzhov Basilica",""));
cubeCards.add(new CardIdentity("Mishra's Workshop",""));
cubeCards.add(new CardIdentity("Treetop Village",""));
cubeCards.add(new CardIdentity("Adarkar Wastes",""));
cubeCards.add(new CardIdentity("Plateau",""));
cubeCards.add(new CardIdentity("Rishadan Port",""));
cubeCards.add(new CardIdentity("Scalding Tarn",""));
cubeCards.add(new CardIdentity("Shivan Reef",""));
cubeCards.add(new CardIdentity("Steam Vents",""));
cubeCards.add(new CardIdentity("Strip Mine",""));
cubeCards.add(new CardIdentity("Taiga",""));
cubeCards.add(new CardIdentity("Thawing Glaciers",""));
cubeCards.add(new CardIdentity("Tropical Island",""));
cubeCards.add(new CardIdentity("Tundra",""));
cubeCards.add(new CardIdentity("Underground River",""));
cubeCards.add(new CardIdentity("Volcanic Island",""));
cubeCards.add(new CardIdentity("Windbrisk Heights",""));
cubeCards.add(new CardIdentity("Wooded Foothills",""));
cubeCards.add(new CardIdentity("Ancient Tomb",""));
cubeCards.add(new CardIdentity("Azorius Chancery",""));
cubeCards.add(new CardIdentity("Badlands",""));
cubeCards.add(new CardIdentity("Arid Mesa",""));
cubeCards.add(new CardIdentity("Misty Rainforest",""));
cubeCards.add(new CardIdentity("Maze of Ith",""));
cubeCards.add(new CardIdentity("Dimir Aqueduct",""));
cubeCards.add(new CardIdentity("Teetering Peaks",""));
cubeCards.add(new CardIdentity("Underground Sea",""));
cubeCards.add(new CardIdentity("Bloodstained Mire",""));
cubeCards.add(new CardIdentity("Watery Grave",""));
cubeCards.add(new CardIdentity("Sacred Foundry",""));
cubeCards.add(new CardIdentity("Stomping Ground",""));
cubeCards.add(new CardIdentity("Godless Shrine",""));
cubeCards.add(new CardIdentity("Breeding Pool",""));
cubeCards.add(new CardIdentity("Sulfurous Springs",""));
cubeCards.add(new CardIdentity("Yavimaya Coast",""));
cubeCards.add(new CardIdentity("Karplusan Forest",""));
cubeCards.add(new CardIdentity("Verdant Catacombs",""));
cubeCards.add(new CardIdentity("Wasteland",""));
cubeCards.add(new CardIdentity("Mishra's Factory",""));
cubeCards.add(new CardIdentity("Selesnya Sanctuary",""));
cubeCards.add(new CardIdentity("Rakdos Carnarium",""));
cubeCards.add(new CardIdentity("Simic Growth Chamber",""));
cubeCards.add(new CardIdentity("Karakas",""));
cubeCards.add(new CardIdentity("Temple Garden",""));
cubeCards.add(new CardIdentity("Overgrown Tomb",""));
cubeCards.add(new CardIdentity("Volrath's Stronghold",""));
cubeCards.add(new CardIdentity("Gaea's Cradle",""));
cubeCards.add(new CardIdentity("Tolarian Academy",""));
cubeCards.add(new CardIdentity("Flooded Strand",""));
cubeCards.add(new CardIdentity("Polluted Delta",""));
cubeCards.add(new CardIdentity("Windswept Heath",""));
cubeCards.add(new CardIdentity("Academy Ruins",""));
cubeCards.add(new CardIdentity("Battlefield Forge",""));
cubeCards.add(new CardIdentity("Ral Zarek",""));
cubeCards.add(new CardIdentity("Void",""));
cubeCards.add(new CardIdentity("Pernicious Deed",""));
cubeCards.add(new CardIdentity("Lightning Helix",""));
cubeCards.add(new CardIdentity("Electrolyze",""));
cubeCards.add(new CardIdentity("Grand Arbiter Augustin IV",""));
cubeCards.add(new CardIdentity("Kitchen Finks",""));
cubeCards.add(new CardIdentity("Stillmoon Cavalier",""));
cubeCards.add(new CardIdentity("Tidehollow Sculler",""));
cubeCards.add(new CardIdentity("Nicol Bolas, Planeswalker",""));
cubeCards.add(new CardIdentity("Sphinx of the Steel Wind",""));
cubeCards.add(new CardIdentity("Huntmaster of the Fells",""));
cubeCards.add(new CardIdentity("Mirari's Wake",""));
cubeCards.add(new CardIdentity("Venser, the Sojourner",""));
cubeCards.add(new CardIdentity("Shardless Agent",""));
cubeCards.add(new CardIdentity("Izzet Charm",""));
cubeCards.add(new CardIdentity("Abrupt Decay",""));
cubeCards.add(new CardIdentity("Domri Rade",""));
cubeCards.add(new CardIdentity("Mystic Snake",""));
cubeCards.add(new CardIdentity("Firemane Angel",""));
cubeCards.add(new CardIdentity("Angel of Despair",""));
cubeCards.add(new CardIdentity("Trygon Predator",""));
cubeCards.add(new CardIdentity("Simic Sky Swallower",""));
cubeCards.add(new CardIdentity("Boggart Ram-Gang",""));
cubeCards.add(new CardIdentity("Figure of Destiny",""));
cubeCards.add(new CardIdentity("Agony Warp",""));
cubeCards.add(new CardIdentity("Broodmate Dragon",""));
cubeCards.add(new CardIdentity("Knight of the Reliquary",""));
cubeCards.add(new CardIdentity("Bloodbraid Elf",""));
cubeCards.add(new CardIdentity("Edric, Spymaster of Trest",""));
cubeCards.add(new CardIdentity("Geist of Saint Traft",""));
cubeCards.add(new CardIdentity("Falkenrath Aristocrat",""));
cubeCards.add(new CardIdentity("Rakdos Cackler",""));
cubeCards.add(new CardIdentity("Dreadbore",""));
cubeCards.add(new CardIdentity("Dreg Mangler",""));
cubeCards.add(new CardIdentity("Vraska the Unseen",""));
cubeCards.add(new CardIdentity("Fleecemane Lion",""));
cubeCards.add(new CardIdentity("Daxos of Meletis",""));
cubeCards.add(new CardIdentity("Steam Augury",""));
cubeCards.add(new CardIdentity("Prophetic Bolt",""));
cubeCards.add(new CardIdentity("Shadowmage Infiltrator",""));
cubeCards.add(new CardIdentity("Ajani Vengeant",""));
cubeCards.add(new CardIdentity("Vindicate",""));
cubeCards.add(new CardIdentity("Maelstrom Pulse",""));
cubeCards.add(new CardIdentity("Tezzeret, Agent of Bolas",""));
cubeCards.add(new CardIdentity("Sorin, Lord of Innistrad",""));
cubeCards.add(new CardIdentity("Baleful Strix",""));
cubeCards.add(new CardIdentity("Xenagos, the Reveler",""));
cubeCards.add(new CardIdentity("Sphinx's Revelation",""));
cubeCards.add(new CardIdentity("Voice of Resurgence",""));
cubeCards.add(new CardIdentity("Null Rod",""));
cubeCards.add(new CardIdentity("Cursed Scroll",""));
cubeCards.add(new CardIdentity("All Is Dust",""));
cubeCards.add(new CardIdentity("Emrakul, the Aeons Torn",""));
cubeCards.add(new CardIdentity("Kozilek, Butcher of Truth",""));
cubeCards.add(new CardIdentity("Ulamog, the Infinite Gyre",""));
cubeCards.add(new CardIdentity("Shrine of Burning Rage",""));
cubeCards.add(new CardIdentity("Batterskull",""));
cubeCards.add(new CardIdentity("Lion's Eye Diamond",""));
cubeCards.add(new CardIdentity("Grim Monolith",""));
cubeCards.add(new CardIdentity("Memory Jar",""));
cubeCards.add(new CardIdentity("Mox Diamond",""));
cubeCards.add(new CardIdentity("Nevinyrral's Disk",""));
cubeCards.add(new CardIdentity("Orzhov Signet",""));
cubeCards.add(new CardIdentity("Pristine Talisman",""));
cubeCards.add(new CardIdentity("Rakdos Signet",""));
cubeCards.add(new CardIdentity("Sol Ring",""));
cubeCards.add(new CardIdentity("Tangle Wire",""));
cubeCards.add(new CardIdentity("Thran Dynamo",""));
cubeCards.add(new CardIdentity("Winter Orb",""));
cubeCards.add(new CardIdentity("Masticore",""));
cubeCards.add(new CardIdentity("Myr Battlesphere",""));
cubeCards.add(new CardIdentity("Molten-Tail Masticore",""));
cubeCards.add(new CardIdentity("Phyrexian Revoker",""));
cubeCards.add(new CardIdentity("Solemn Simulacrum",""));
cubeCards.add(new CardIdentity("Bonesplitter",""));
cubeCards.add(new CardIdentity("Sword of Body and Mind",""));
cubeCards.add(new CardIdentity("Sword of Feast and Famine",""));
cubeCards.add(new CardIdentity("Sword of War and Peace",""));
cubeCards.add(new CardIdentity("Chrome Mox",""));
cubeCards.add(new CardIdentity("Gilded Lotus",""));
cubeCards.add(new CardIdentity("Sword of Light and Shadow",""));
cubeCards.add(new CardIdentity("Razormane Masticore",""));
cubeCards.add(new CardIdentity("Pentad Prism",""));
cubeCards.add(new CardIdentity("Coalition Relic",""));
cubeCards.add(new CardIdentity("Mind Stone",""));
cubeCards.add(new CardIdentity("Precursor Golem",""));
cubeCards.add(new CardIdentity("Wurmcoil Engine",""));
cubeCards.add(new CardIdentity("Azorius Signet",""));
cubeCards.add(new CardIdentity("Simic Signet",""));
cubeCards.add(new CardIdentity("Basalt Monolith",""));
cubeCards.add(new CardIdentity("Mox Sapphire",""));
cubeCards.add(new CardIdentity("Mox Pearl",""));
cubeCards.add(new CardIdentity("Mox Ruby",""));
cubeCards.add(new CardIdentity("Mox Emerald",""));
cubeCards.add(new CardIdentity("Mox Jet",""));
cubeCards.add(new CardIdentity("Black Lotus",""));
cubeCards.add(new CardIdentity("Boros Signet",""));
cubeCards.add(new CardIdentity("Blightsteel Colossus",""));
cubeCards.add(new CardIdentity("Dimir Signet",""));
cubeCards.add(new CardIdentity("Epochrasite",""));
cubeCards.add(new CardIdentity("Etched Oracle",""));
cubeCards.add(new CardIdentity("Everflowing Chalice",""));
cubeCards.add(new CardIdentity("Gruul Signet",""));
cubeCards.add(new CardIdentity("Izzet Signet",""));
cubeCards.add(new CardIdentity("Golgari Signet",""));
cubeCards.add(new CardIdentity("Lodestone Golem",""));
cubeCards.add(new CardIdentity("Lotus Bloom",""));
cubeCards.add(new CardIdentity("Mana Crypt",""));
cubeCards.add(new CardIdentity("Mana Vault",""));
cubeCards.add(new CardIdentity("Selesnya Signet",""));
cubeCards.add(new CardIdentity("Metalworker",""));
cubeCards.add(new CardIdentity("Scroll Rack",""));
cubeCards.add(new CardIdentity("Worn Powerstone",""));
cubeCards.add(new CardIdentity("Smokestack",""));
cubeCards.add(new CardIdentity("Lightning Greaves",""));
cubeCards.add(new CardIdentity("Sundering Titan",""));
cubeCards.add(new CardIdentity("Sword of Fire and Ice",""));
cubeCards.add(new CardIdentity("Skullclamp",""));
cubeCards.add(new CardIdentity("Vedalken Shackles",""));
cubeCards.add(new CardIdentity("Crucible of Worlds",""));
cubeCards.add(new CardIdentity("Sensei's Divining Top",""));
cubeCards.add(new CardIdentity("Umezawa's Jitte",""));
cubeCards.add(new CardIdentity("Manriki-Gusari",""));
cubeCards.add(new CardIdentity("Karn Liberated",""));
}
}

View file

@ -0,0 +1,50 @@
/*
* Copyright 2011 BetaSteward_at_googlemail.com. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are
* permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* The views and conclusions contained in the software and documentation are those of the
* authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com.
*/
package mage.tournament;
import mage.game.tournament.TournamentType;
/**
*
* @author LevelX2
*/
public class SealedEliminationCubeTournamentType extends TournamentType<SealedEliminationCubeTournamentType> {
public SealedEliminationCubeTournamentType() {
this.name = "Sealed Elimination (Cube)";
this.maxPlayers = 16;
this.minPlayers = 2;
this.numBoosters = 6;
this.draft = false;
this.limited = true;
this.cubeBooster = true;
this.elimination = true;
}
}

View file

@ -43,6 +43,8 @@ public class SealedEliminationTournamentType extends TournamentType<SealedElimin
this.numBoosters = 6;
this.draft = false;
this.limited = true;
this.cubeBooster = false;
this.elimination = true;
}
}

View file

@ -0,0 +1,50 @@
/*
* Copyright 2011 BetaSteward_at_googlemail.com. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are
* permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* The views and conclusions contained in the software and documentation are those of the
* authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com.
*/
package mage.tournament;
import mage.game.tournament.TournamentType;
/**
*
* @author BetaSteward_at_googlemail.com
*/
public class SealedSwissCubeTournamentType extends TournamentType<SealedSwissCubeTournamentType> {
public SealedSwissCubeTournamentType() {
this.name = "Sealed Swiss (Cube)";
this.maxPlayers = 16;
this.minPlayers = 2;
this.numBoosters = 6;
this.draft = false;
this.limited = true;
this.cubeBooster = true;
this.elimination = false;
}
}

View file

@ -0,0 +1,74 @@
/*
* Copyright 2011 BetaSteward_at_googlemail.com. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are
* permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* The views and conclusions contained in the software and documentation are those of the
* authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com.
*/
package mage.tournament;
import mage.game.tournament.TournamentOptions;
import mage.game.tournament.TournamentSwiss;
/**
*
* @author LevelX2
*/
public class SealedSwissTournament extends TournamentSwiss {
protected enum TournamentStep {
START, OPEN_BOOSTERS, CONSTRUCT, COMPETE, WINNERS
}
protected TournamentStep currentStep;
public SealedSwissTournament(TournamentOptions options) {
super(options);
currentStep = TournamentStep.START;
}
@Override
public void nextStep() {
switch (currentStep) {
case START:
currentStep = TournamentStep.OPEN_BOOSTERS;
openBoosters();
break;
case OPEN_BOOSTERS:
currentStep = TournamentStep.CONSTRUCT;
construct();
break;
case CONSTRUCT:
currentStep = TournamentStep.COMPETE;
runTournament();
break;
case COMPETE:
currentStep = TournamentStep.WINNERS;
winners();
end();
break;
}
}
}

View file

@ -0,0 +1,50 @@
/*
* Copyright 2011 BetaSteward_at_googlemail.com. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are
* permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* The views and conclusions contained in the software and documentation are those of the
* authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com.
*/
package mage.tournament;
import mage.game.tournament.TournamentType;
/**
*
* @author BetaSteward_at_googlemail.com
*/
public class SealedSwissTournamentType extends TournamentType<SealedSwissTournamentType> {
public SealedSwissTournamentType() {
this.name = "Sealed Swiss";
this.maxPlayers = 16;
this.minPlayers = 2;
this.numBoosters = 6;
this.draft = false;
this.limited = true;
this.cubeBooster = false;
this.elimination = false;
}
}

View file

@ -9,7 +9,7 @@
minUserNameLength="3"
maxUserNameLength="14"
userNamePattern="[^a-z0-9_]"
maxAiOpponents="2"
maxAiOpponents="3"
/>
<playerTypes>
<playerType name="Human" jar="mage-player-human.jar" className="mage.player.human.HumanPlayer"/>
@ -25,9 +25,20 @@
<gameType name="Commander Free For All" jar="mage-game-commanderfreeforall.jar" className="mage.game.CommanderFreeForAllMatch" typeName="mage.game.CommanderFreeForAllType"/>
</gameTypes>
<tournamentTypes>
<tournamentType name="Elimination Booster Draft" jar="mage-tournament-booster-draft.jar" className="mage.tournament.BoosterDraftEliminationTournament" typeName="mage.tournament.BoosterDraftEliminationTournamentType"/>
<tournamentType name="Booster Draft Elimination" jar="mage-tournament-booster-draft.jar" className="mage.tournament.BoosterDraftEliminationTournament" typeName="mage.tournament.BoosterDraftEliminationTournamentType"/>
<tournamentType name="Booster Draft Elimination (Cube)" jar="mage-tournament-booster-draft.jar" className="mage.tournament.BoosterDraftEliminationTournament" typeName="mage.tournament.BoosterDraftEliminationCubeTournamentType"/>
<tournamentType name="Booster Draft Swiss" jar="mage-tournament-booster-draft.jar" className="mage.tournament.BoosterDraftSwissTournament" typeName="mage.tournament.BoosterDraftSwissTournamentType"/>
<tournamentType name="Booster Draft Swiss (Cube)" jar="mage-tournament-booster-draft.jar" className="mage.tournament.BoosterDraftSwissTournament" typeName="mage.tournament.BoosterDraftSwissCubeTournamentType"/>
<tournamentType name="Sealed Elimination" jar="mage-tournament-sealed.jar" className="mage.tournament.SealedEliminationTournament" typeName="mage.tournament.SealedEliminationTournamentType"/>
<tournamentType name="Sealed Elimination (Cube)" jar="mage-tournament-sealed.jar" className="mage.tournament.SealedEliminationTournament" typeName="mage.tournament.SealedEliminationCubeTournamentType"/>
<tournamentType name="Sealed Swiss" jar="mage-tournament-sealed.jar" className="mage.tournament.SealedSwissTournament" typeName="mage.tournament.SealedSwissTournamentType"/>
<tournamentType name="Sealed Swiss (Cube)" jar="mage-tournament-sealed.jar" className="mage.tournament.SealedSwissTournament" typeName="mage.tournament.SealedSwissCubeTournamentType"/>
</tournamentTypes>
<draftCubes>
<draftCube name="Cube Tutor 360 Pauper" jar="mage-tournament-booster-draft.jar" className="mage.tournament.cubes.CubeTutor360Pauper"/>
<draftCube name="Cube Tutor 720" jar="mage-tournament-booster-draft.jar" className="mage.tournament.cubes.CubeTutor720"/>
<draftCube name="MTGO Holiday Cube 2013" jar="mage-tournament-booster-draft.jar" className="mage.tournament.cubes.HolidayCube2013"/>
</draftCubes>
<deckTypes>
<deckType name="Constructed - Standard" jar="mage-deck-constructed.jar" className="mage.deck.Standard"/>
<deckType name="Constructed - Extended" jar="mage-deck-constructed.jar" className="mage.deck.Extended"/>

View file

@ -14,9 +14,20 @@
<gameType name="Commander Free For All" jar="mage-game-commanderfreeforall-${project.version}.jar" className="mage.game.CommanderFreeForAllMatch" typeName="mage.game.CommanderFreeForAllType"/>
</gameTypes>
<tournamentTypes>
<tournamentType name="Elimination Booster Draft" jar="mage-tournament-boosterdraft-${project.version}.jar" className="mage.tournament.BoosterDraftEliminationTournament" typeName="mage.tournament.BoosterDraftEliminationTournamentType"/>
<tournamentType name="Booster Draft Elimination" jar="mage-tournament-boosterdraft-${project.version}.jar" className="mage.tournament.BoosterDraftEliminationTournament" typeName="mage.tournament.BoosterDraftEliminationTournamentType"/>
<tournamentType name="Booster Draft Elimination (Cube)" jar="mage-tournament-boosterdraft-${project.version}.jar" className="mage.tournament.BoosterDraftEliminationTournament" typeName="mage.tournament.BoosterDraftEliminationCubeTournamentType"/>
<tournamentType name="Booster Draft Swiss" jar="mage-tournament-boosterdraft-${project.version}.jar" className="mage.tournament.BoosterDraftSwissTournament" typeName="mage.tournament.BoosterDraftSwissTournamentType"/>
<tournamentType name="Booster Draft Swiss (Cube)" jar="mage-tournament-boosterdraft-${project.version}.jar" className="mage.tournament.BoosterDraftSwissTournament" typeName="mage.tournament.BoosterDraftSwissCubeTournamentType"/>
<tournamentType name="Sealed Elimination" jar="mage-tournament-sealed-${project.version}.jar" className="mage.tournament.SealedEliminationTournament" typeName="mage.tournament.SealedEliminationTournamentType"/>
<tournamentType name="Sealed Elimination (Cube)" jar="mage-tournament-sealed-${project.version}.jar" className="mage.tournament.SealedEliminationTournament" typeName="mage.tournament.SealedEliminationCubeTournamentType"/>
<tournamentType name="Sealed Swiss" jar="mage-tournament-sealed-${project.version}.jar" className="mage.tournament.SealedSwissTournament" typeName="mage.tournament.SealedSwissTournamentType"/>
<tournamentType name="Sealed Swiss (Cube)" jar="mage-tournament-sealed-${project.version}.jar" className="mage.tournament.SealedSwissTournament" typeName="mage.tournament.SealedSwissCubeTournamentType"/>
</tournamentTypes>
<draftCubes>
<draftCube name="Cube Tutor 360 Pauper" jar="mage-tournament-booster-draft-${project.version}.jar" className="mage.tournament.cubes.CubeTutor360Pauper"/>
<draftCube name="Cube Tutor 720" jar="mage-tournament-booster-draft-${project.version}.jar" className="mage.tournament.cubes.CubeTutor720"/>
<draftCube name="MTGO Holiday Cube 2013" jar="mage-tournament-booster-draft-${project.version}.jar" className="mage.tournament.cubes.HolydayCube2013"/>
</draftCubes>
<deckTypes>
<deckType name="Constructed - Standard" jar="mage-deck-constructed-${project.version}.jar" className="mage.deck.Standard"/>
<deckType name="Constructed - Extended" jar="mage-deck-constructed-${project.version}.jar" className="mage.deck.Extended"/>

View file

@ -48,6 +48,7 @@ import mage.interfaces.MageServer;
import mage.interfaces.ServerState;
import mage.interfaces.callback.ClientCallback;
import mage.remote.MageVersionException;
import mage.server.draft.CubeFactory;
import mage.server.draft.DraftManager;
import mage.server.game.DeckValidatorFactory;
import mage.server.game.GameFactory;
@ -820,6 +821,7 @@ public class MageServerImpl implements MageServer {
TournamentFactory.getInstance().getTournamentTypes(),
PlayerFactory.getInstance().getPlayerTypes().toArray(new String[PlayerFactory.getInstance().getPlayerTypes().size()]),
DeckValidatorFactory.getInstance().getDeckTypes().toArray(new String[DeckValidatorFactory.getInstance().getDeckTypes().size()]),
CubeFactory.getInstance().getDraftCubes().toArray(new String[CubeFactory.getInstance().getDraftCubes().size()]),
testMode,
Main.getVersion());
}

View file

@ -40,6 +40,7 @@ import mage.game.match.MatchType;
import mage.game.tournament.TournamentType;
import mage.interfaces.MageServer;
import mage.remote.Connection;
import mage.server.draft.CubeFactory;
import mage.server.game.DeckValidatorFactory;
import mage.server.game.GameFactory;
import mage.server.game.PlayerFactory;
@ -104,6 +105,9 @@ public class Main {
for (Plugin plugin: config.getPlayerTypes()) {
PlayerFactory.getInstance().addPlayerType(plugin.getName(), loadPlugin(plugin));
}
for (Plugin plugin: config.getDraftCubes()) {
CubeFactory.getInstance().addDraftCube(plugin.getName(), loadPlugin(plugin));
}
for (Plugin plugin: config.getDeckTypes()) {
DeckValidatorFactory.getInstance().addDeckType(plugin.getName(), loadPlugin(plugin));
}
@ -260,7 +264,7 @@ public class Main {
logger.debug("Loading plugin: " + plugin.getClassName());
return Class.forName(plugin.getClassName(), true, classLoader);
} catch (ClassNotFoundException ex) {
logger.warn("Plugin not Found:" + plugin.getJar() + " - check plugin folder");
logger.warn(new StringBuilder("Plugin not Found: ").append(plugin.getClassName()).append(" - ").append(plugin.getJar()).append(" - check plugin folder"));
} catch (Exception ex) {
logger.fatal("Error loading plugin " + plugin.getJar(), ex);
}
@ -286,7 +290,7 @@ public class Main {
logger.debug("Loading tournament type: " + plugin.getClassName());
return (TournamentType) Class.forName(plugin.getTypeName(), true, classLoader).newInstance();
} catch (ClassNotFoundException ex) {
logger.warn("Tournament type not found:" + plugin.getJar() + " - check plugin folder");
logger.warn("Tournament type not found:" + plugin.getName() + " / "+ plugin.getJar() + " - check plugin folder");
} catch (Exception ex) {
logger.fatal("Error loading game type " + plugin.getJar(), ex);
}

View file

@ -0,0 +1,80 @@
/*
* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are
* permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* The views and conclusions contained in the software and documentation are those of the
* authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com.
*/
package mage.server.draft;
import java.lang.reflect.Constructor;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Set;
import mage.game.draft.DraftCube;
import org.apache.log4j.Logger;
/**
*
* @author LevelX2
*/
public class CubeFactory {
private static final CubeFactory INSTANCE = new CubeFactory();
private static final Logger logger = Logger.getLogger(CubeFactory.class);
private Map<String, Class> draftCubes = new LinkedHashMap<String, Class>();
public static CubeFactory getInstance() {
return INSTANCE;
}
private CubeFactory() {}
public DraftCube createDraftCube(String draftCubeName) {
DraftCube draftCube;
Constructor<?> con;
try {
con = draftCubes.get(draftCubeName).getConstructor(new Class[]{});
draftCube = (DraftCube)con.newInstance(new Object[] {});
} catch (Exception ex) {
logger.fatal("CubeFactory error", ex);
return null;
}
logger.debug("Draft cube created: " + draftCube.getName());
return draftCube;
}
public Set<String> getDraftCubes() {
return draftCubes.keySet();
}
public void addDraftCube(String name, Class draftCube) {
if (draftCube != null) {
this.draftCubes.put(name, draftCube);
}
}
}

View file

@ -73,8 +73,9 @@ public class DeckValidatorFactory {
}
public void addDeckType(String name, Class deckType) {
if (deckType != null)
if (deckType != null) {
this.deckTypes.put(name, deckType);
}
}
}

View file

@ -38,6 +38,7 @@ import mage.cards.Sets;
import mage.game.tournament.Tournament;
import mage.game.tournament.TournamentOptions;
import mage.game.tournament.TournamentType;
import mage.server.draft.CubeFactory;
import mage.view.TournamentTypeView;
import org.apache.log4j.Logger;
@ -74,11 +75,21 @@ public class TournamentFactory {
int count = setInfo.containsKey(setCode) ? setInfo.get(setCode) : 0;
setInfo.put(setCode, count + 1);
}
if (tournament.getTournamentType().isLimited()) {
tournament.getOptions().getLimitedOptions().setNumberBoosters(tournament.getTournamentType().getNumBoosters());
if (tournament.getTournamentType().isCubeBooster()) {
tournament.getOptions().getLimitedOptions().setDraftCube(CubeFactory.getInstance().createDraftCube(tournament.getOptions().getLimitedOptions().getDraftCubeName()));
tournament.setBoosterInfo(tournament.getOptions().getLimitedOptions().getDraftCubeName());
} else {
StringBuilder sb = new StringBuilder();
for (Map.Entry<String,Integer> entry:setInfo.entrySet()) {
sb.append(entry.getValue().toString()).append("x").append(entry.getKey()).append(" ");
}
tournament.setSetsFormatedShort(sb.toString());
tournament.setBoosterInfo(sb.toString());
}
}
} catch (Exception ex) {
logger.fatal("TournamentFactory error ", ex);
return null;

View file

@ -111,6 +111,10 @@ public class ConfigSettings {
return config.getTournamentTypes().getTournamentType();
}
public List<Plugin> getDraftCubes() {
return config.getDraftCubes().getDraftCube();
}
public List<Plugin> getDeckTypes() {
return config.getDeckTypes().getDeckType();
}

View file

@ -9,6 +9,7 @@
<xs:element ref="playerTypes"/>
<xs:element ref="gameTypes"/>
<xs:element ref="tournamentTypes"/>
<xs:element ref="draftCubes"/>
<xs:element ref="deckTypes"/>
</xs:sequence>
</xs:complexType>
@ -66,6 +67,14 @@
</xs:complexType>
</xs:element>
<xs:element name="draftCubes">
<xs:complexType>
<xs:sequence>
<xs:element name="draftCube" type="plugin" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="deckTypes">
<xs:complexType>
<xs:sequence>

View file

@ -43,7 +43,7 @@ public class BoosterDraft extends DraftImpl<BoosterDraft> {
@Override
public void start() {
while (boosterNum < sets.size()) {
while (boosterNum < numberBoosters) {
openBooster();
while (!isAbort() && pickCards()) {
if (boosterNum % 2 == 1) {

View file

@ -49,6 +49,8 @@ public interface Draft extends MageItem, Serializable {
Collection<DraftPlayer> getPlayers();
boolean replacePlayer(Player oldPlayer, Player newPlayer);
DraftPlayer getPlayer(UUID playerId);
int getNumberBoosters();
DraftCube getDraftCube();
List<ExpansionSet> getSets();
int getBoosterNum();
int getCardNum();

View file

@ -0,0 +1,141 @@
/*
* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are
* permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* The views and conclusions contained in the software and documentation are those of the
* authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com.
*/
package mage.game.draft;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import mage.cards.Card;
import mage.cards.repository.CardCriteria;
import mage.cards.repository.CardInfo;
import mage.cards.repository.CardRepository;
import org.apache.log4j.Logger;
/**
*
* @author LevelX2
*/
public abstract class DraftCube {
public class CardIdentity {
private String name;
private String extension;
public CardIdentity(String name, String extension) {
this.name = name;
this.extension = extension;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getExtension() {
return extension;
}
public void setExtension(String extension) {
this.extension = extension;
}
}
private static final Logger logger = Logger.getLogger(DraftCube.class);
private static Random rnd = new Random();
private String name;
private int boosterSize = 15;
protected List<CardIdentity> cubeCards = new ArrayList<CardIdentity>();
protected List<CardIdentity> leftCubeCards = new ArrayList<CardIdentity>();
public DraftCube(String name) {
this.name = name;
}
public String getName() {
return name;
}
public List<CardIdentity> getCubeCards() {
return cubeCards;
}
public List<Card> createBooster() {
List<Card> booster = new ArrayList<Card>();
if (leftCubeCards.isEmpty()) {
leftCubeCards.addAll(cubeCards);
}
for (int i = 0; i < boosterSize; i++) {
boolean done = false;
int notValid = 0;
while (!done) {
int index = rnd.nextInt(leftCubeCards.size());
CardIdentity cardId = leftCubeCards.get(index);
leftCubeCards.remove(index);
if (!cardId.getName().isEmpty()) {
CardInfo cardInfo = null;
if (!cardId.getExtension().isEmpty()) {
CardCriteria criteria = new CardCriteria().name(cardId.getName()).setCodes(cardId.extension);
List<CardInfo> cardList = CardRepository.instance.findCards(criteria);
if (cardList != null && cardList.size() > 0) {
cardInfo = cardList.get(0);
}
} else {
cardInfo = CardRepository.instance.findCard(cardId.getName());
}
if (cardInfo != null) {
booster.add(cardInfo.getCard());
done = true;
} else {
logger.error(new StringBuilder(this.getName()).append(" - Card not found: ").append(cardId.getName()).append(":").append(cardId.extension));
notValid++;
}
} else {
logger.error(new StringBuilder(this.getName()).append(" - Empty card name: ").append(cardId.getName()).append(":").append(cardId.extension));
notValid++;
}
if (leftCubeCards.isEmpty()) {
leftCubeCards.addAll(cubeCards);
}
if (notValid > cubeCards.size()) {
logger.error(new StringBuilder(this.getName()).append(" - Booster could not be created, no valid cards found "));
done = true;
}
}
}
return booster;
}
}

View file

@ -54,6 +54,8 @@ public abstract class DraftImpl<T extends DraftImpl<T>> implements Draft {
protected final UUID id;
protected Map<UUID, DraftPlayer> players = new HashMap<UUID, DraftPlayer>();
protected PlayerList table = new PlayerList();
protected int numberBoosters;
protected DraftCube draftCube;
protected List<ExpansionSet> sets;
protected List<String> setCodes;
protected int boosterNum = 0;
@ -69,8 +71,10 @@ public abstract class DraftImpl<T extends DraftImpl<T>> implements Draft {
public DraftImpl(DraftOptions options, List<ExpansionSet> sets) {
id = UUID.randomUUID();
this.setCodes = options.getSetCodes();
this.draftCube = options.getDraftCube();
this.timing = options.getTiming();
this.sets = sets;
this.numberBoosters = options.getNumberBoosters();
}
@Override
@ -134,6 +138,22 @@ public abstract class DraftImpl<T extends DraftImpl<T>> implements Draft {
return players.get(playerId);
}
@Override
public DraftCube getDraftCube() {
return draftCube;
}
/**
* Number of boosters that each player gets in this draft
*
* @return
*/
@Override
public int getNumberBoosters() {
return numberBoosters;
}
@Override
public List<ExpansionSet> getSets() {
return sets;
@ -207,11 +227,15 @@ public abstract class DraftImpl<T extends DraftImpl<T>> implements Draft {
protected void openBooster() {
if (boosterNum < sets.size()) {
if (boosterNum < numberBoosters) {
for (DraftPlayer player: players.values()) {
if (draftCube != null) {
player.setBooster(draftCube.createBooster());
} else {
player.setBooster(sets.get(boosterNum).createBooster());
}
}
}
boosterNum++;
cardNum = 1;
fireUpdatePlayersEvent();

View file

@ -31,6 +31,7 @@ package mage.game.tournament;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import mage.game.draft.DraftCube;
/**
*
@ -40,6 +41,9 @@ public class LimitedOptions implements Serializable {
protected List<String> sets = new ArrayList<String>();
protected int constructionTime;
protected String draftCubeName;
protected DraftCube draftCube;
protected int numberBoosters;
public List<String> getSetCodes() {
return sets;
@ -53,4 +57,28 @@ public class LimitedOptions implements Serializable {
this.constructionTime = constructionTime;
}
public String getDraftCubeName() {
return draftCubeName;
}
public void setDraftCubeName(String draftCubeName) {
this.draftCubeName = draftCubeName;
}
public DraftCube getDraftCube() {
return draftCube;
}
public void setDraftCube(DraftCube draftCube) {
this.draftCube = draftCube;
}
public int getNumberBoosters() {
return numberBoosters;
}
public void setNumberBoosters(int numberBoosters) {
this.numberBoosters = numberBoosters;
}
}

View file

@ -40,6 +40,7 @@ public class Round {
private int roundNum;
private List<TournamentPairing> pairs = new ArrayList<TournamentPairing>();
private List<TournamentPlayer> playerByes = new ArrayList<TournamentPlayer>();
public Round(int roundNum) {
this.roundNum = roundNum;
@ -74,4 +75,9 @@ public class Round {
}
return true;
}
public List<TournamentPlayer> getPlayerByes() {
return playerByes;
}
}

View file

@ -53,12 +53,12 @@ public interface Tournament {
Collection<Round> getRounds();
List<ExpansionSet> getSets();
void setSetsFormatedShort(String setInfo);
void setBoosterInfo(String setInfo);
/**
* Gives back a String that shows the included sets (e.g. "3xRTR" or "1xDGM 1xGTC 1xRTR")
* Gives back a String that shows the included sets (e.g. "3xRTR" or "1xDGM 1xGTC 1xRTR") or cube name
* @return String
*/
String getSetsFormatedShort();
String getBoosterInfo();
void submitDeck(UUID playerId, Deck deck);
void updateDeck(UUID playerId, Deck deck);
void autoSubmit(UUID playerId, Deck deck);
@ -80,4 +80,6 @@ public interface Tournament {
// tournament type
TournamentType getTournamentType();
void setTournamentType(TournamentType tournamentType);
int getNumberRounds();
}

View file

@ -33,6 +33,8 @@ import java.util.concurrent.CopyOnWriteArrayList;
import mage.cards.Card;
import mage.cards.ExpansionSet;
import mage.cards.decks.Deck;
import mage.constants.TournamentPlayerState;
import mage.game.draft.DraftCube;
import mage.game.events.*;
import mage.game.events.TableEvent.EventType;
import mage.game.match.Match;
@ -104,6 +106,11 @@ public abstract class TournamentImpl implements Tournament {
return players.values();
}
@Override
public int getNumberRounds() {
return options.getNumberRounds();
}
@Override
public Collection<Round> getRounds() {
return rounds;
@ -115,12 +122,12 @@ public abstract class TournamentImpl implements Tournament {
}
@Override
public void setSetsFormatedShort(String setsInfoShort) {
public void setBoosterInfo(String setsInfoShort) {
this.setsInfoShort = setsInfoShort;
}
@Override
public String getSetsFormatedShort() {
public String getBoosterInfo() {
return setsInfoShort;
}
@ -169,6 +176,13 @@ public abstract class TournamentImpl implements Tournament {
roundPlayers.remove(i);
round.addPairing(new TournamentPairing(player1, player2));
}
if (roundPlayers.size() > 0) {
// player free round - add to bye players of this round
TournamentPlayer player1 = roundPlayers.get(0);
round.getPlayerByes().add(player1);
player1.setState(TournamentPlayerState.WAITING);
player1.setStateInfo("Round Bye");
}
return round;
}
@ -203,6 +217,7 @@ public abstract class TournamentImpl implements Tournament {
for (TournamentPlayer player: players.values()) {
player.setResults("");
player.setPoints(0);
player.setStateInfo("");
}
for (Round round: rounds) {
for (TournamentPairing pair: round.getPairs()) {
@ -232,6 +247,14 @@ public abstract class TournamentImpl implements Tournament {
players.get(player2Id).setPoints(points + 1);
}
}
for (TournamentPlayer tournamentPlayer : round.getPlayerByes()) {
UUID player1Id = tournamentPlayer.getPlayer().getId();
StringBuilder sb1 = new StringBuilder(players.get(player1Id).getResults());
sb1.append("(Round Bye) ");
players.get(player1Id).setResults(sb1.toString());
int points = players.get(player1Id).getPoints();
players.get(player1Id).setPoints(points + 3);
}
}
}
@ -296,6 +319,15 @@ public abstract class TournamentImpl implements Tournament {
protected void openBoosters() {
for (TournamentPlayer player: this.players.values()) {
player.setDeck(new Deck());
if (options.getLimitedOptions().getDraftCube() != null) {
DraftCube cube = options.getLimitedOptions().getDraftCube();
for (int i = 0; i < options.getLimitedOptions().getNumberBoosters(); i++) {
List<Card> booster = cube.createBooster();
for (Card card: booster) {
player.getDeck().getSideboard().add(card);
}
}
} else {
for (ExpansionSet set: sets) {
List<Card> booster = set.createBooster();
for (Card card: booster) {
@ -303,6 +335,7 @@ public abstract class TournamentImpl implements Tournament {
}
}
}
}
nextStep();
}
@ -343,4 +376,14 @@ public abstract class TournamentImpl implements Tournament {
this.tournamentType = tournamentType;
}
protected void winners() {
// TODO: Generate StateInfo for Swiss pairing (1st, 2nd, ...)
for(TournamentPlayer winner: this.getActivePlayers()) {
winner.setState(TournamentPlayerState.FINISHED);
if (options.getNumberRounds() == 0) { // if no swiss, last active is the winner
winner.setStateInfo("Winner");
}
}
}
}

View file

@ -45,6 +45,7 @@ public class TournamentOptions implements Serializable {
protected MatchOptions matchOptions = new MatchOptions("", "Two Player Duel");
protected LimitedOptions limitedOptions;
protected boolean watchingAllowed = true;
protected int numberRounds;
public TournamentOptions(String name) {
this.name = name;
@ -86,4 +87,12 @@ public class TournamentOptions implements Serializable {
this.watchingAllowed = watchingAllowed;
}
public int getNumberRounds() {
return numberRounds;
}
public void setNumberRounds(int numberRounds) {
this.numberRounds = numberRounds;
}
}

View file

@ -30,7 +30,6 @@ package mage.game.tournament;
import java.util.Map;
import java.util.UUID;
import mage.constants.TournamentPlayerState;
/**
*
@ -66,11 +65,6 @@ public abstract class TournamentSingleElimination extends TournamentImpl {
}
}
protected void winners() {
for(TournamentPlayer winner: this.getActivePlayers()) {
winner.setState(TournamentPlayerState.FINISHED);
winner.setStateInfo("Winner");
}
}
}

View file

@ -27,6 +27,13 @@
*/
package mage.game.tournament;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import mage.constants.TournamentPlayerState;
/**
*
* @author BetaSteward_at_googlemail.com
@ -39,7 +46,86 @@ public abstract class TournamentSwiss extends TournamentImpl {
@Override
protected void runTournament() {
//TODO: implement this
for (Map.Entry<UUID, TournamentPlayer> entry: players.entrySet()) {
if (entry.getValue().getPlayer().autoLoseGame()) {
entry.getValue().setEliminated();
entry.getValue().setResults("Auto Eliminated");
}
}
while (this.getActivePlayers().size() > 1 && this.getNumberRounds() > this.getRounds().size()) {
// Swiss pairing
Round round = createRoundSwiss();
playRound(round);
}
nextStep();
}
protected Round createRoundSwiss() {
Round round = new Round(rounds.size() + 1);
rounds.add(round);
List<TournamentPlayer> roundPlayers = getActivePlayers();
// sort players by tournament points
Collections.sort(roundPlayers, new Comparator<TournamentPlayer>() {
@Override public int compare(TournamentPlayer p1, TournamentPlayer p2) {
return p2.getPoints() - p1.getPoints();
}
});
// create pairings
while (roundPlayers.size() > 0) {
TournamentPlayer player1 = roundPlayers.get(0);
roundPlayers.remove(0);
TournamentPlayer playerForPossibleSecondPairing = null;
for (TournamentPlayer player2: roundPlayers) {
if (alreadyPaired(player1, player2)) {
// if laready paired but equal ponts -> remember if second pairing is needed
if (playerForPossibleSecondPairing == null) {
playerForPossibleSecondPairing = player2;
}
} else {
if (player2.getPoints() < player1.getPoints() && playerForPossibleSecondPairing != null) {
// pair again with a player
round.addPairing(new TournamentPairing(player1, playerForPossibleSecondPairing));
roundPlayers.remove(playerForPossibleSecondPairing);
player1 = null;
break;
} else {
// pair agains the next not paired before
round.addPairing(new TournamentPairing(player1, player2));
roundPlayers.remove(player2);
player1 = null;
break;
}
}
}
if (player1 != null) {
// no pairing done yet
if (playerForPossibleSecondPairing != null) {
// pair again with a player
round.addPairing(new TournamentPairing(player1, playerForPossibleSecondPairing));
roundPlayers.remove(playerForPossibleSecondPairing);
} else {
// player free round - add to bye players of this round
round.getPlayerByes().add(player1);
player1.setState(TournamentPlayerState.WAITING);
player1.setStateInfo("Round Bye");
}
}
}
return round;
}
protected boolean alreadyPaired(TournamentPlayer player1, TournamentPlayer player2) {
for (Round round : rounds) {
for (TournamentPairing pairing: round.getPairs()) {
if (pairing.getPlayer1().equals(player1) || pairing.getPlayer2().equals(player1)) {
if (pairing.getPlayer1().equals(player2) || pairing.getPlayer2().equals(player2)) {
return true;
}
}
}
}
return false;
}
}

View file

@ -40,8 +40,10 @@ public class TournamentType <T extends TournamentType<T>> implements Serializabl
protected int minPlayers;
protected int maxPlayers;
protected int numBoosters;
protected boolean draft;
protected boolean limited;
protected boolean cubeBooster; // boosters are generated from a defined cube
protected boolean draft; // or sealed
protected boolean limited; // or construced
protected boolean elimination; // or Swiss
protected TournamentType() {}
@ -73,4 +75,13 @@ public class TournamentType <T extends TournamentType<T>> implements Serializabl
public boolean isLimited() {
return limited;
}
public boolean isElimination() {
return elimination;
}
public boolean isCubeBooster() {
return cubeBooster;
}
}