Merge commit 'b95d7ca705' into Network_Upgrade

Conflicts:
	.gitignore
	Mage.Client/src/main/java/mage/client/dialog/PreferencesDialog.java
	Mage.Server/src/main/java/mage/server/Session.java
This commit is contained in:
LevelX2 2015-09-27 15:06:14 +02:00
commit 36a48780e4
672 changed files with 29942 additions and 5627 deletions

2
.gitignore vendored
View file

@ -93,3 +93,5 @@ Mage.Client/serverlist.txt
/Mage.Server.Tests/target/ /Mage.Server.Tests/target/
/Mage.Server.Tests/db /Mage.Server.Tests/db
/Mage.Server.Tests/*.log /Mage.Server.Tests/*.log
Mage.Client/serverlist.txt
/bin/

View file

@ -1,6 +1,6 @@
XMage.de 1 (Europe/Germany) fast :xmage.de:17171 XMage.de 1 (Europe/Germany) fast :xmage.de:17171
woogerworks (North America/USA) :xmage.woogerworks.info:17171 woogerworks (North America/USA) :xmage.woogerworks.info:17171
XMage.info 1 (Europe/France) new network code -> see forum :176.31.186.181:17171 XMage.info 1 (Europe/France) new network code -> see forum :176.31.186.181:17171
IceMage (Europe/Netherlands) :ring0.cc:17171 XMage BR (South America/Brazil) :ec2-54-233-67-0.sa-east-1.compute.amazonaws.com:17171
Seedds Server (Asia) :115.29.203.80:17171 Seedds Server (Asia) :115.29.203.80:17171
localhost -> connect to your local server (must be started):localhost:17171 localhost -> connect to your local server (must be started):localhost:17171

View file

@ -31,7 +31,6 @@
* *
* Created on 30-Mar-2010, 9:25:40 PM * Created on 30-Mar-2010, 9:25:40 PM
*/ */
package mage.client.cards; package mage.client.cards;
import java.awt.Component; import java.awt.Component;
@ -54,6 +53,7 @@ import mage.client.plugins.impl.Plugins;
import mage.client.util.Config; import mage.client.util.Config;
import mage.client.util.Event; import mage.client.util.Event;
import mage.client.util.Listener; import mage.client.util.Listener;
import mage.utils.CardUtil;
import mage.view.CardView; import mage.view.CardView;
import mage.view.CardsView; import mage.view.CardsView;
import org.mage.card.arcane.CardPanel; import org.mage.card.arcane.CardPanel;
@ -82,7 +82,7 @@ public class CardGrid extends javax.swing.JLayeredPane implements MouseListener,
} }
public void clear() { public void clear() {
for(MouseListener ml: this.getMouseListeners()) { for (MouseListener ml : this.getMouseListeners()) {
this.removeMouseListener(ml); this.removeMouseListener(ml);
} }
this.clearCardEventListeners(); this.clearCardEventListeners();
@ -101,7 +101,7 @@ public class CardGrid extends javax.swing.JLayeredPane implements MouseListener,
this.bigCard = bigCard; this.bigCard = bigCard;
this.gameId = gameId; this.gameId = gameId;
if (merge) { if (merge) {
for (CardView card: showCards.values()) { for (CardView card : showCards.values()) {
if (!cards.containsKey(card.getId())) { if (!cards.containsKey(card.getId())) {
addCard(card, bigCard, gameId, drawImage); addCard(card, bigCard, gameId, drawImage);
} }
@ -115,7 +115,7 @@ public class CardGrid extends javax.swing.JLayeredPane implements MouseListener,
} }
} else { } else {
this.clearCards(); this.clearCards();
for (CardView card: showCards.values()) { for (CardView card : showCards.values()) {
addCard(card, bigCard, gameId, drawImage); addCard(card, bigCard, gameId, drawImage);
} }
} }
@ -144,7 +144,7 @@ public class CardGrid extends javax.swing.JLayeredPane implements MouseListener,
int curRow = 0; int curRow = 0;
if (cards.size() > 0) { if (cards.size() > 0) {
Rectangle rectangle = new Rectangle(Config.dimensions.frameWidth, Config.dimensions.frameHeight); Rectangle rectangle = new Rectangle(Config.dimensions.frameWidth, Config.dimensions.frameHeight);
List<MageCard> sortedCards = new ArrayList<MageCard>(cards.values()); List<MageCard> sortedCards = new ArrayList<>(cards.values());
switch (sortSetting.getSortBy()) { switch (sortSetting.getSortBy()) {
case NAME: case NAME:
Collections.sort(sortedCards, new CardNameComparator()); Collections.sort(sortedCards, new CardNameComparator());
@ -155,15 +155,16 @@ public class CardGrid extends javax.swing.JLayeredPane implements MouseListener,
case COLOR: case COLOR:
Collections.sort(sortedCards, new CardColorComparator()); Collections.sort(sortedCards, new CardColorComparator());
break; break;
case COLOR_DETAILED: case COLOR_IDENTITY:
Collections.sort(sortedCards, new CardColorDetailedComparator()); Collections.sort(sortedCards, new CardColorDetailedIdentity());
break; break;
case CASTING_COST: case CASTING_COST:
Collections.sort(sortedCards, new CardCostComparator()); Collections.sort(sortedCards, new CardCostComparator());
break; break;
} }
MageCard lastCard = null; MageCard lastCard = null;
for (MageCard cardImg: sortedCards) { for (MageCard cardImg : sortedCards) {
if (sortSetting.isPilesToggle()) { if (sortSetting.isPilesToggle()) {
if (lastCard == null) { if (lastCard == null) {
lastCard = cardImg; lastCard = cardImg;
@ -187,8 +188,9 @@ public class CardGrid extends javax.swing.JLayeredPane implements MouseListener,
curRow = 0; curRow = 0;
} }
break; break;
case COLOR_DETAILED: case COLOR_IDENTITY:
if (cardImg.getOriginal().getColor().hashCode() != lastCard.getOriginal().getColor().hashCode()) { if (CardUtil.getColorIdentitySortValue(cardImg.getOriginal().getManaCost(), cardImg.getOriginal().getColor(), cardImg.getOriginal().getRules())
!= CardUtil.getColorIdentitySortValue(lastCard.getOriginal().getManaCost(), lastCard.getOriginal().getColor(), lastCard.getOriginal().getRules())) {
curColumn++; curColumn++;
curRow = 0; curRow = 0;
} }
@ -206,8 +208,7 @@ public class CardGrid extends javax.swing.JLayeredPane implements MouseListener,
moveToFront(cardImg); moveToFront(cardImg);
curRow++; curRow++;
lastCard = cardImg; lastCard = cardImg;
} } else {
else {
rectangle.setLocation(curColumn * Config.dimensions.frameWidth, curRow * 20); rectangle.setLocation(curColumn * Config.dimensions.frameWidth, curRow * 20);
cardImg.setBounds(rectangle); cardImg.setBounds(rectangle);
cardImg.setCardBounds(rectangle.x, rectangle.y, Config.dimensions.frameWidth, Config.dimensions.frameHeight); cardImg.setCardBounds(rectangle.x, rectangle.y, Config.dimensions.frameWidth, Config.dimensions.frameHeight);
@ -227,9 +228,9 @@ public class CardGrid extends javax.swing.JLayeredPane implements MouseListener,
private void clearCards() { private void clearCards() {
// remove possible mouse listeners, preventing gc // remove possible mouse listeners, preventing gc
for (MageCard mageCard: cards.values()) { for (MageCard mageCard : cards.values()) {
if (mageCard instanceof CardPanel) { if (mageCard instanceof CardPanel) {
((CardPanel)mageCard).cleanUp(); ((CardPanel) mageCard).cleanUp();
} }
} }
this.cards.clear(); this.cards.clear();
@ -237,7 +238,7 @@ public class CardGrid extends javax.swing.JLayeredPane implements MouseListener,
} }
private void removeAllCardImg() { private void removeAllCardImg() {
for (Component comp: getComponents()) { for (Component comp : getComponents()) {
if (comp instanceof Card || comp instanceof MageCard) { if (comp instanceof Card || comp instanceof MageCard) {
remove(comp); remove(comp);
} }
@ -245,14 +246,14 @@ public class CardGrid extends javax.swing.JLayeredPane implements MouseListener,
} }
private void removeCardImg(UUID cardId) { private void removeCardImg(UUID cardId) {
for (Component comp: getComponents()) { for (Component comp : getComponents()) {
if (comp instanceof Card) { if (comp instanceof Card) {
if (((Card)comp).getCardId().equals(cardId)) { if (((Card) comp).getCardId().equals(cardId)) {
remove(comp); remove(comp);
comp = null; comp = null;
} }
} else if (comp instanceof MageCard) { } else if (comp instanceof MageCard) {
if (((MageCard)comp).getOriginal().getId().equals(cardId)) { if (((MageCard) comp).getOriginal().getId().equals(cardId)) {
remove(comp); remove(comp);
comp = null; comp = null;
} }
@ -275,10 +276,10 @@ public class CardGrid extends javax.swing.JLayeredPane implements MouseListener,
cardEventSource.clearListeners(); cardEventSource.clearListeners();
} }
/** This method is called from within the constructor to /**
* initialize the form. * This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is * WARNING: Do NOT modify this code. The content of this method is always
* always regenerated by the Form Editor. * regenerated by the Form Editor.
*/ */
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
@ -296,10 +297,8 @@ public class CardGrid extends javax.swing.JLayeredPane implements MouseListener,
); );
}// </editor-fold>//GEN-END:initComponents }// </editor-fold>//GEN-END:initComponents
// Variables declaration - do not modify//GEN-BEGIN:variables // Variables declaration - do not modify//GEN-BEGIN:variables
// End of variables declaration//GEN-END:variables // End of variables declaration//GEN-END:variables
@Override @Override
public void mouseClicked(MouseEvent e) { public void mouseClicked(MouseEvent e) {
if (e.getClickCount() == 2 && !e.isConsumed()) { if (e.getClickCount() == 2 && !e.isConsumed()) {
@ -322,22 +321,26 @@ public class CardGrid extends javax.swing.JLayeredPane implements MouseListener,
} }
@Override @Override
public void mousePressed(MouseEvent e) {} public void mousePressed(MouseEvent e) {
}
@Override @Override
public void mouseReleased(MouseEvent e) {} public void mouseReleased(MouseEvent e) {
}
@Override @Override
public void mouseEntered(MouseEvent e) {} public void mouseEntered(MouseEvent e) {
}
@Override @Override
public void mouseExited(MouseEvent e) {} public void mouseExited(MouseEvent e) {
}
private void resizeArea() { private void resizeArea() {
Dimension area = new Dimension(0, 0); Dimension area = new Dimension(0, 0);
Dimension size = getPreferredSize(); Dimension size = getPreferredSize();
for (Component comp: getComponents()) { for (Component comp : getComponents()) {
Rectangle r = comp.getBounds(); Rectangle r = comp.getBounds();
if (r.x + r.width > area.width) { if (r.x + r.width > area.width) {
area.width = r.x + r.width; area.width = r.x + r.width;
@ -379,8 +382,7 @@ class CardRarityComparator implements Comparator<MageCard> {
int val = o1.getOriginal().getRarity().compareTo(o2.getOriginal().getRarity()); int val = o1.getOriginal().getRarity().compareTo(o2.getOriginal().getRarity());
if (val == 0) { if (val == 0) {
return o1.getOriginal().getName().compareTo(o2.getOriginal().getName()); return o1.getOriginal().getName().compareTo(o2.getOriginal().getName());
} } else {
else {
return val; return val;
} }
} }
@ -394,8 +396,7 @@ class CardCostComparator implements Comparator<MageCard> {
int val = Integer.valueOf(o1.getOriginal().getConvertedManaCost()).compareTo(Integer.valueOf(o2.getOriginal().getConvertedManaCost())); int val = Integer.valueOf(o1.getOriginal().getConvertedManaCost()).compareTo(Integer.valueOf(o2.getOriginal().getConvertedManaCost()));
if (val == 0) { if (val == 0) {
return o1.getOriginal().getName().compareTo(o2.getOriginal().getName()); return o1.getOriginal().getName().compareTo(o2.getOriginal().getName());
} } else {
else {
return val; return val;
} }
} }
@ -409,23 +410,22 @@ class CardColorComparator implements Comparator<MageCard> {
int val = o1.getOriginal().getColor().compareTo(o2.getOriginal().getColor()); int val = o1.getOriginal().getColor().compareTo(o2.getOriginal().getColor());
if (val == 0) { if (val == 0) {
return o1.getOriginal().getName().compareTo(o2.getOriginal().getName()); return o1.getOriginal().getName().compareTo(o2.getOriginal().getName());
} } else {
else {
return val; return val;
} }
} }
} }
class CardColorDetailedComparator implements Comparator<MageCard> { class CardColorDetailedIdentity implements Comparator<MageCard> {
@Override @Override
public int compare(MageCard o1, MageCard o2) { public int compare(MageCard o1, MageCard o2) {
int val = o1.getOriginal().getColor().hashCode() - o2.getOriginal().getColor().hashCode(); int val = CardUtil.getColorIdentitySortValue(o1.getOriginal().getManaCost(), o1.getOriginal().getColor(), o1.getOriginal().getRules())
- CardUtil.getColorIdentitySortValue(o2.getOriginal().getManaCost(), o2.getOriginal().getColor(), o2.getOriginal().getRules());
if (val == 0) { if (val == 0) {
return o1.getOriginal().getName().compareTo(o2.getOriginal().getName()); return o1.getOriginal().getName().compareTo(o2.getOriginal().getName());
} } else {
else {
return val; return val;
} }
} }

View file

@ -1,37 +1,36 @@
/* /*
* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
* *
* Redistribution and use in source and binary forms, with or without modification, are * Redistribution and use in source and binary forms, with or without modification, are
* permitted provided that the following conditions are met: * permitted provided that the following conditions are met:
* *
* 1. Redistributions of source code must retain the above copyright notice, this list of * 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer. * conditions and the following disclaimer.
* *
* 2. Redistributions in binary form must reproduce the above copyright notice, this list * 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 * of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution. * provided with the distribution.
* *
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED * 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 * 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 * 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 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 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 * 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 * 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 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* *
* The views and conclusions contained in the software and documentation are those of the * 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 * authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com. * or implied, of BetaSteward_at_googlemail.com.
*/ */
/* /*
* CardsList.java * CardsList.java
* *
* Created on Dec 18, 2009, 10:40:12 AM * Created on Dec 18, 2009, 10:40:12 AM
*/ */
package mage.client.cards; package mage.client.cards;
import java.awt.Color; import java.awt.Color;
@ -59,7 +58,7 @@ import mage.client.constants.Constants.DeckEditorMode;
import mage.client.constants.Constants.SortBy; import mage.client.constants.Constants.SortBy;
import static mage.client.constants.Constants.SortBy.CASTING_COST; import static mage.client.constants.Constants.SortBy.CASTING_COST;
import static mage.client.constants.Constants.SortBy.COLOR; import static mage.client.constants.Constants.SortBy.COLOR;
import static mage.client.constants.Constants.SortBy.COLOR_DETAILED; import static mage.client.constants.Constants.SortBy.COLOR_IDENTITY;
import static mage.client.constants.Constants.SortBy.RARITY; import static mage.client.constants.Constants.SortBy.RARITY;
import mage.client.deckeditor.SortSetting; import mage.client.deckeditor.SortSetting;
import mage.client.deckeditor.table.TableModel; import mage.client.deckeditor.table.TableModel;
@ -67,7 +66,7 @@ import mage.client.deckeditor.table.UpdateCountsCallback;
import mage.client.dialog.PreferencesDialog; import mage.client.dialog.PreferencesDialog;
import mage.client.plugins.impl.Plugins; import mage.client.plugins.impl.Plugins;
import mage.client.util.CardViewColorComparator; import mage.client.util.CardViewColorComparator;
import mage.client.util.CardViewColorDetailedComparator; import mage.client.util.CardViewColorIdentityComparator;
import mage.client.util.CardViewCostComparator; import mage.client.util.CardViewCostComparator;
import mage.client.util.CardViewNameComparator; import mage.client.util.CardViewNameComparator;
import mage.client.util.CardViewRarityComparator; import mage.client.util.CardViewRarityComparator;
@ -99,7 +98,9 @@ public class CardsList extends javax.swing.JPanel implements MouseListener, ICar
private JTable mainTable; private JTable mainTable;
private ICardGrid currentView; private ICardGrid currentView;
/** Creates new form Cards */ /**
* Creates new form Cards
*/
public CardsList() { public CardsList() {
initComponents(); initComponents();
makeTransparent(); makeTransparent();
@ -115,22 +116,22 @@ public class CardsList extends javax.swing.JPanel implements MouseListener, ICar
mainModel.removeTableModelListener(mainTable); mainModel.removeTableModelListener(mainTable);
mainModel.clear(); mainModel.clear();
} }
if(cardArea != null) { if (cardArea != null) {
for(MouseListener ml: cardArea.getMouseListeners()) { for (MouseListener ml : cardArea.getMouseListeners()) {
cardArea.removeMouseListener(ml); cardArea.removeMouseListener(ml);
} }
} }
if(mainTable != null) { if (mainTable != null) {
for(MouseListener ml: mainTable.getMouseListeners()) { for (MouseListener ml : mainTable.getMouseListeners()) {
mainTable.removeMouseListener(ml); mainTable.removeMouseListener(ml);
} }
} }
if (currentView != null) { if (currentView != null) {
currentView.clearCardEventListeners(); currentView.clearCardEventListeners();
} }
for (Component comp :cardArea.getComponents()) { for (Component comp : cardArea.getComponents()) {
if (comp instanceof CardPanel) { if (comp instanceof CardPanel) {
((CardPanel)comp).cleanUp(); ((CardPanel) comp).cleanUp();
} }
} }
mageCards.clear(); mageCards.clear();
@ -256,7 +257,6 @@ public class CardsList extends javax.swing.JPanel implements MouseListener, ICar
return list; return list;
} }
public void loadCards(CardsView showCards, BigCard bigCard, UUID gameId) { public void loadCards(CardsView showCards, BigCard bigCard, UUID gameId) {
int selectedRow = -1; int selectedRow = -1;
if (currentView.equals(mainModel)) { if (currentView.equals(mainModel)) {
@ -270,7 +270,7 @@ public class CardsList extends javax.swing.JPanel implements MouseListener, ICar
chkPiles.setSelected(sortSetting.isPilesToggle()); chkPiles.setSelected(sortSetting.isPilesToggle());
currentView.loadCards(showCards, sortSetting, bigCard, gameId); currentView.loadCards(showCards, sortSetting, bigCard, gameId);
if (selectedRow >= 0) { if (selectedRow >= 0) {
selectedRow = Math.min(selectedRow, mainTable.getRowCount()-1); selectedRow = Math.min(selectedRow, mainTable.getRowCount() - 1);
if (selectedRow >= 0) { if (selectedRow >= 0) {
mainTable.setRowSelectionInterval(selectedRow, selectedRow); mainTable.setRowSelectionInterval(selectedRow, selectedRow);
} }
@ -297,17 +297,16 @@ public class CardsList extends javax.swing.JPanel implements MouseListener, ICar
mageCards = new LinkedHashMap<>(); mageCards = new LinkedHashMap<>();
//Find card view //Find card view
for(UUID uuid : cards.keySet()){ for (UUID uuid : cards.keySet()) {
if(oldMageCards.containsKey(uuid)){ if (oldMageCards.containsKey(uuid)) {
mageCards.put(uuid, oldMageCards.get(uuid)); mageCards.put(uuid, oldMageCards.get(uuid));
oldMageCards.remove(uuid); oldMageCards.remove(uuid);
} } else {
else{
mageCards.put(uuid, addCard(cards.get(uuid), bigCard, gameId)); mageCards.put(uuid, addCard(cards.get(uuid), bigCard, gameId));
} }
} }
//Remove unused cards //Remove unused cards
for(MageCard card : oldMageCards.values()){ for (MageCard card : oldMageCards.values()) {
cardArea.remove(card); cardArea.remove(card);
} }
@ -324,25 +323,25 @@ public class CardsList extends javax.swing.JPanel implements MouseListener, ICar
case COLOR: case COLOR:
comparator = new CardViewColorComparator(); comparator = new CardViewColorComparator();
break; break;
case COLOR_DETAILED: case COLOR_IDENTITY:
comparator = new CardViewColorDetailedComparator(); comparator = new CardViewColorIdentityComparator();
break; break;
case CASTING_COST: case CASTING_COST:
comparator = new CardViewCostComparator(); comparator = new CardViewCostComparator();
break; break;
} }
if(comparator != null){ if (comparator != null) {
Collections.sort(sortedCards, new CardViewNameComparator()); Collections.sort(sortedCards, new CardViewNameComparator());
Collections.sort(sortedCards, comparator); Collections.sort(sortedCards, comparator);
} }
CardView lastCard = null; CardView lastCard = null;
for (CardView card: sortedCards) { for (CardView card : sortedCards) {
if (sortSetting.isPilesToggle()) { if (sortSetting.isPilesToggle()) {
if (lastCard == null) { if (lastCard == null) {
lastCard = card; lastCard = card;
} }
if(comparator != null){ if (comparator != null) {
if(comparator.compare(card, lastCard) > 0){ if (comparator.compare(card, lastCard) > 0) {
curColumn++; curColumn++;
maxRow = Math.max(maxRow, curRow); maxRow = Math.max(maxRow, curRow);
curRow = 0; curRow = 0;
@ -368,20 +367,20 @@ public class CardsList extends javax.swing.JPanel implements MouseListener, ICar
maxRow = Math.max(maxRow, curRow); maxRow = Math.max(maxRow, curRow);
maxColumn = Math.max(maxColumn, curColumn); maxColumn = Math.max(maxColumn, curColumn);
updateCounts(); updateCounts();
cardArea.setPreferredSize(new Dimension((maxColumn+1) * Config.dimensions.frameWidth, Config.dimensions.frameHeight + maxRow*20)); cardArea.setPreferredSize(new Dimension((maxColumn + 1) * Config.dimensions.frameWidth, Config.dimensions.frameHeight + maxRow * 20));
cardArea.revalidate(); cardArea.revalidate();
this.revalidate(); this.revalidate();
this.repaint(); this.repaint();
this.setVisible(true); this.setVisible(true);
} }
private void updateCounts(){ private void updateCounts() {
int landCount = 0; int landCount = 0;
int creatureCount = 0; int creatureCount = 0;
int sorceryCount = 0; int sorceryCount = 0;
int instantCount = 0; int instantCount = 0;
int enchantmentCount = 0; int enchantmentCount = 0;
for (CardView card: cards.values()) { for (CardView card : cards.values()) {
if (card.getCardTypes().contains(CardType.LAND)) { if (card.getCardTypes().contains(CardType.LAND)) {
landCount++; landCount++;
} }
@ -419,7 +418,6 @@ public class CardsList extends javax.swing.JPanel implements MouseListener, ICar
return cardImg; return cardImg;
} }
private void setCardBounds(MageCard card, Rectangle rectangle) { private void setCardBounds(MageCard card, Rectangle rectangle) {
card.setBounds(rectangle); card.setBounds(rectangle);
card.setCardBounds(rectangle.x, rectangle.y, Config.dimensions.frameWidth, Config.dimensions.frameHeight); card.setCardBounds(rectangle.x, rectangle.y, Config.dimensions.frameWidth, Config.dimensions.frameHeight);
@ -456,10 +454,10 @@ public class CardsList extends javax.swing.JPanel implements MouseListener, ICar
mainModel.clearCardEventListeners(); mainModel.clearCardEventListeners();
} }
/** This method is called from within the constructor to /**
* initialize the form. * This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is * WARNING: Do NOT modify this code. The content of this method is always
* always regenerated by the Form Editor. * regenerated by the Form Editor.
*/ */
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
@ -731,22 +729,20 @@ public class CardsList extends javax.swing.JPanel implements MouseListener, ICar
e.consume(); e.consume();
if (obj instanceof Card) { if (obj instanceof Card) {
if (e.isAltDown()) { if (e.isAltDown()) {
cardEventSource.altDoubleClick(((Card)obj).getOriginal(), "alt-double-click"); cardEventSource.altDoubleClick(((Card) obj).getOriginal(), "alt-double-click");
} } else {
else { cardEventSource.doubleClick(((Card) obj).getOriginal(), "double-click");
cardEventSource.doubleClick(((Card)obj).getOriginal(), "double-click");
} }
} else if (obj instanceof MageCard) { } else if (obj instanceof MageCard) {
if (e.isAltDown()) { if (e.isAltDown()) {
cardEventSource.altDoubleClick(((MageCard)obj).getOriginal(), "alt-double-click"); cardEventSource.altDoubleClick(((MageCard) obj).getOriginal(), "alt-double-click");
} } else {
else { cardEventSource.doubleClick(((MageCard) obj).getOriginal(), "double-click");
cardEventSource.doubleClick(((MageCard)obj).getOriginal(), "double-click");
} }
} }
} }
if (obj instanceof MageCard) { if (obj instanceof MageCard) {
checkMenu(e, ((MageCard)obj).getOriginal()); checkMenu(e, ((MageCard) obj).getOriginal());
} else { } else {
checkMenu(e, null); checkMenu(e, null);
} }
@ -758,14 +754,14 @@ public class CardsList extends javax.swing.JPanel implements MouseListener, ICar
if (!e.isConsumed()) { if (!e.isConsumed()) {
Object obj = e.getSource(); Object obj = e.getSource();
if (obj instanceof MageCard) { if (obj instanceof MageCard) {
checkMenu(e, ((MageCard)obj).getOriginal()); checkMenu(e, ((MageCard) obj).getOriginal());
} else { } else {
checkMenu(e, null); checkMenu(e, null);
} }
} }
} }
private void checkMenu(MouseEvent Me, SimpleCardView card){ private void checkMenu(MouseEvent Me, SimpleCardView card) {
if (Me.isPopupTrigger()) { if (Me.isPopupTrigger()) {
Me.consume(); Me.consume();
cardEventSource.showPopupMenuEvent(card, Me.getComponent(), Me.getX(), Me.getY(), "show-popup-menu"); cardEventSource.showPopupMenuEvent(card, Me.getComponent(), Me.getX(), Me.getY(), "show-popup-menu");

View file

@ -1,31 +1,30 @@
/* /*
* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
* *
* Redistribution and use in source and binary forms, with or without modification, are * Redistribution and use in source and binary forms, with or without modification, are
* permitted provided that the following conditions are met: * permitted provided that the following conditions are met:
* *
* 1. Redistributions of source code must retain the above copyright notice, this list of * 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer. * conditions and the following disclaimer.
* *
* 2. Redistributions in binary form must reproduce the above copyright notice, this list * 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 * of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution. * provided with the distribution.
* *
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED * 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 * 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 * 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 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 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 * 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 * 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 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* *
* The views and conclusions contained in the software and documentation are those of the * 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 * authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com. * or implied, of BetaSteward_at_googlemail.com.
*/ */
package mage.client.constants; package mage.client.constants;
import java.io.File; import java.io.File;
@ -37,6 +36,7 @@ import javax.swing.border.Border;
* @author BetaSteward_at_googlemail.com * @author BetaSteward_at_googlemail.com
*/ */
public final class Constants { public final class Constants {
private Constants() { private Constants() {
throw new AssertionError(); throw new AssertionError();
} }
@ -69,7 +69,7 @@ public final class Constants {
public static final int POWBOX_TEXT_MAX_LEFT = 212; public static final int POWBOX_TEXT_MAX_LEFT = 212;
public static final int DAMAGE_MAX_LEFT = 180; public static final int DAMAGE_MAX_LEFT = 180;
public static final Border EMPTY_BORDER = BorderFactory.createEmptyBorder(2,2,2,2); public static final Border EMPTY_BORDER = BorderFactory.createEmptyBorder(2, 2, 2, 2);
public static final double SCALE_FACTOR = 0.5; public static final double SCALE_FACTOR = 0.5;
@ -80,26 +80,29 @@ public final class Constants {
public static final String RESOURCE_PATH_SET = IO.imageBaseDir + "sets" + File.separator; public static final String RESOURCE_PATH_SET = IO.imageBaseDir + "sets" + File.separator;
public static final String RESOURCE_PATH_SET_SMALL = RESOURCE_PATH_SET + File.separator + "small" + File.separator; public static final String RESOURCE_PATH_SET_SMALL = RESOURCE_PATH_SET + File.separator + "small" + File.separator;
public static final String BASE_SOUND_PATH = "sounds" + File.separator; public static final String BASE_SOUND_PATH = "sounds" + File.separator;
public static final String BASE_MUSICS_PATH = "music" + File.separator ; public static final String BASE_MUSICS_PATH = "music" + File.separator;
public interface IO { public interface IO {
String imageBaseDir = "plugins" + File.separator + "images" + File.separator; String imageBaseDir = "plugins" + File.separator + "images" + File.separator;
String IMAGE_PROPERTIES_FILE = "image.url.properties"; String IMAGE_PROPERTIES_FILE = "image.url.properties";
} }
public enum DeckEditorMode { public enum DeckEditorMode {
FREE_BUILDING, FREE_BUILDING,
LIMITED_BUILDING, LIMITED_BUILDING,
SIDEBOARDING SIDEBOARDING
} }
public enum SortBy { public enum SortBy {
CASTING_COST ("Casting Cost"),
RARITY ("Rarity"), CASTING_COST("Casting Cost"),
COLOR ("Color"), RARITY("Rarity"),
COLOR_DETAILED ("Color Detailed"), COLOR("Color"),
NAME ("Name"), COLOR_IDENTITY("Color Identity"),
UNSORTED ("Unsorted"); NAME("Name"),
UNSORTED("Unsorted");
private final String text; private final String text;
@ -120,8 +123,8 @@ public final class Constants {
return RARITY; return RARITY;
case "Color": case "Color":
return COLOR; return COLOR;
case "Color Detailed": case "Color Identity":
return COLOR_DETAILED; return COLOR_IDENTITY;
case "Name": case "Name":
return NAME; return NAME;
default: default:

View file

@ -42,9 +42,7 @@ import java.awt.event.MouseEvent;
import java.awt.image.BufferedImage; import java.awt.image.BufferedImage;
import java.io.File; import java.io.File;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet;
import java.util.Map; import java.util.Map;
import java.util.Set;
import java.util.prefs.BackingStoreException; import java.util.prefs.BackingStoreException;
import java.util.prefs.Preferences; import java.util.prefs.Preferences;
import javax.swing.BorderFactory; import javax.swing.BorderFactory;
@ -63,6 +61,10 @@ import mage.client.MageFrame;
import mage.client.util.Config; import mage.client.util.Config;
import mage.client.util.ImageHelper; import mage.client.util.ImageHelper;
import mage.client.util.gui.BufferedImageBuilder; import mage.client.util.gui.BufferedImageBuilder;
import static mage.constants.Constants.DEFAULT_AVATAR_ID;
import static mage.constants.Constants.MAX_AVATAR_ID;
import static mage.constants.Constants.MIN_AVATAR_ID;
import mage.players.net.UserData;
import mage.players.net.UserGroup; import mage.players.net.UserGroup;
import mage.players.net.UserSkipPrioritySteps; import mage.players.net.UserSkipPrioritySteps;
import mage.remote.Connection; import mage.remote.Connection;
@ -264,29 +266,12 @@ public class PreferencesDialog extends javax.swing.JDialog {
public static String PHASE_ON = "on"; public static String PHASE_ON = "on";
public static String PHASE_OFF = "off"; public static String PHASE_OFF = "off";
public static final int DEFAULT_AVATAR_ID = 51;
private static int selectedAvatarId = DEFAULT_AVATAR_ID;
private static final Set<Integer> available_avatars = new HashSet<>();
private static final Map<Integer, JPanel> panels = new HashMap<>(); private static final Map<Integer, JPanel> panels = new HashMap<>();
private static final Border GREEN_BORDER = BorderFactory.createLineBorder(Color.GREEN, 3); private static final Border GREEN_BORDER = BorderFactory.createLineBorder(Color.GREEN, 3);
private static final Border BLACK_BORDER = BorderFactory.createLineBorder(Color.BLACK, 3); private static final Border BLACK_BORDER = BorderFactory.createLineBorder(Color.BLACK, 3);
static { private static int selectedAvatarId = DEFAULT_AVATAR_ID;
available_avatars.add(51);
available_avatars.add(13);
available_avatars.add(9);
available_avatars.add(53);
available_avatars.add(10);
available_avatars.add(39);
available_avatars.add(19);
available_avatars.add(30);
available_avatars.add(25);
available_avatars.add(22);
available_avatars.add(77);
available_avatars.add(62);
}
private final JFileChooser fc = new JFileChooser(); private final JFileChooser fc = new JFileChooser();
@ -433,20 +418,30 @@ public class PreferencesDialog extends javax.swing.JDialog {
tabAvatars = new javax.swing.JPanel(); tabAvatars = new javax.swing.JPanel();
avatarPane = new javax.swing.JScrollPane(); avatarPane = new javax.swing.JScrollPane();
avatarPanel = new javax.swing.JPanel(); avatarPanel = new javax.swing.JPanel();
jLabel12 = new javax.swing.JLabel();
jPanel10 = new javax.swing.JPanel(); jPanel10 = new javax.swing.JPanel();
jPanel13 = new javax.swing.JPanel();
jPanel11 = new javax.swing.JPanel(); jPanel11 = new javax.swing.JPanel();
jPanel12 = new javax.swing.JPanel(); jPanel12 = new javax.swing.JPanel();
jPanel13 = new javax.swing.JPanel();
jPanel14 = new javax.swing.JPanel(); jPanel14 = new javax.swing.JPanel();
jPanel15 = new javax.swing.JPanel(); jPanel15 = new javax.swing.JPanel();
jLabel13 = new javax.swing.JLabel();
jPanel16 = new javax.swing.JPanel(); jPanel16 = new javax.swing.JPanel();
jPanel17 = new javax.swing.JPanel(); jPanel17 = new javax.swing.JPanel();
jPanel18 = new javax.swing.JPanel(); jPanel18 = new javax.swing.JPanel();
jPanel19 = new javax.swing.JPanel(); jPanel19 = new javax.swing.JPanel();
jPanel20 = new javax.swing.JPanel(); jPanel20 = new javax.swing.JPanel();
jPanel21 = new javax.swing.JPanel(); jPanel21 = new javax.swing.JPanel();
jPanel22 = new javax.swing.JPanel();
jPanel23 = new javax.swing.JPanel();
jPanel24 = new javax.swing.JPanel();
jPanel25 = new javax.swing.JPanel();
jPanel26 = new javax.swing.JPanel();
jPanel27 = new javax.swing.JPanel();
jPanel28 = new javax.swing.JPanel();
jPanel29 = new javax.swing.JPanel();
jPanel30 = new javax.swing.JPanel();
jPanel31 = new javax.swing.JPanel();
jPanel32 = new javax.swing.JPanel();
jPanel33 = new javax.swing.JPanel();
tabConnection = new javax.swing.JPanel(); tabConnection = new javax.swing.JPanel();
lblProxyType = new javax.swing.JLabel(); lblProxyType = new javax.swing.JLabel();
cbProxyType = new javax.swing.JComboBox<ProxyType>(); cbProxyType = new javax.swing.JComboBox<ProxyType>();
@ -608,16 +603,16 @@ public class PreferencesDialog extends javax.swing.JDialog {
main_gameLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) main_gameLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(main_gameLayout.createSequentialGroup() .addGroup(main_gameLayout.createSequentialGroup()
.addContainerGap() .addContainerGap()
.addGroup(main_gameLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(main_gameLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
.addComponent(cbAllowRequestToShowHandCards, javax.swing.GroupLayout.PREFERRED_SIZE, 546, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGroup(main_gameLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false) .addGroup(main_gameLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
.addComponent(showPlayerNamesPermanently, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(showPlayerNamesPermanently, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(nonLandPermanentsInOnePile, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(nonLandPermanentsInOnePile, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(showAbilityPickerForced, javax.swing.GroupLayout.Alignment.LEADING)) .addComponent(showAbilityPickerForced, javax.swing.GroupLayout.Alignment.LEADING))
.addComponent(cbShowStormCounter, javax.swing.GroupLayout.PREFERRED_SIZE, 546, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(cbConfirmEmptyManaPool, javax.swing.GroupLayout.DEFAULT_SIZE, 485, Short.MAX_VALUE)
.addComponent(cbConfirmEmptyManaPool, javax.swing.GroupLayout.PREFERRED_SIZE, 546, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(cbAllowRequestToShowHandCards, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(cbAskMoveToGraveOrder, javax.swing.GroupLayout.PREFERRED_SIZE, 546, javax.swing.GroupLayout.PREFERRED_SIZE)) .addComponent(cbShowStormCounter, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .addComponent(cbAskMoveToGraveOrder, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addContainerGap(7, Short.MAX_VALUE))
); );
main_gameLayout.setVerticalGroup( main_gameLayout.setVerticalGroup(
main_gameLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) main_gameLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
@ -666,9 +661,9 @@ public class PreferencesDialog extends javax.swing.JDialog {
main_gamelogLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) main_gamelogLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(main_gamelogLayout.createSequentialGroup() .addGroup(main_gamelogLayout.createSequentialGroup()
.addContainerGap() .addContainerGap()
.addGroup(main_gamelogLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(main_gamelogLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
.addComponent(cbGameLogAutoSave, javax.swing.GroupLayout.PREFERRED_SIZE, 528, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(cbDraftLogAutoSave, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(cbDraftLogAutoSave, javax.swing.GroupLayout.PREFERRED_SIZE, 528, javax.swing.GroupLayout.PREFERRED_SIZE)) .addComponent(cbGameLogAutoSave, javax.swing.GroupLayout.DEFAULT_SIZE, 473, Short.MAX_VALUE))
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
); );
main_gamelogLayout.setVerticalGroup( main_gamelogLayout.setVerticalGroup(
@ -687,8 +682,10 @@ public class PreferencesDialog extends javax.swing.JDialog {
.addContainerGap() .addContainerGap()
.addGroup(tabMainLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(tabMainLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(main_card, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(main_card, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(main_game, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(main_gamelog, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(main_gamelog, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .addGroup(tabMainLayout.createSequentialGroup()
.addComponent(main_game, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(0, 0, Short.MAX_VALUE)))
.addContainerGap()) .addContainerGap())
); );
tabMainLayout.setVerticalGroup( tabMainLayout.setVerticalGroup(
@ -915,7 +912,7 @@ public class PreferencesDialog extends javax.swing.JDialog {
.addComponent(jLabelEndOfTurn) .addComponent(jLabelEndOfTurn)
.addComponent(checkBoxEndTurnOthers)) .addComponent(checkBoxEndTurnOthers))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(phases_stopSettings, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(phases_stopSettings, javax.swing.GroupLayout.DEFAULT_SIZE, 183, Short.MAX_VALUE)
.addContainerGap()) .addContainerGap())
); );
@ -963,10 +960,7 @@ public class PreferencesDialog extends javax.swing.JDialog {
panelCardImagesLayout.setHorizontalGroup( panelCardImagesLayout.setHorizontalGroup(
panelCardImagesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) panelCardImagesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(panelCardImagesLayout.createSequentialGroup() .addGroup(panelCardImagesLayout.createSequentialGroup()
.addGap(24, 24, 24) .addGroup(panelCardImagesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(txtImageFolderPath)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(btnBrowseImageLocation))
.addGroup(panelCardImagesLayout.createSequentialGroup() .addGroup(panelCardImagesLayout.createSequentialGroup()
.addGroup(panelCardImagesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(panelCardImagesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(cbUseDefaultImageFolder) .addComponent(cbUseDefaultImageFolder)
@ -979,7 +973,13 @@ public class PreferencesDialog extends javax.swing.JDialog {
.addComponent(cbSaveToZipFiles, javax.swing.GroupLayout.Alignment.LEADING)) .addComponent(cbSaveToZipFiles, javax.swing.GroupLayout.Alignment.LEADING))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(cbPreferedImageLanguage, javax.swing.GroupLayout.PREFERRED_SIZE, 153, javax.swing.GroupLayout.PREFERRED_SIZE))) .addComponent(cbPreferedImageLanguage, javax.swing.GroupLayout.PREFERRED_SIZE, 153, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addGap(0, 0, Short.MAX_VALUE)) .addGap(0, 190, Short.MAX_VALUE))
.addGroup(panelCardImagesLayout.createSequentialGroup()
.addGap(24, 24, 24)
.addComponent(txtImageFolderPath)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(btnBrowseImageLocation)))
.addContainerGap())
); );
panelCardImagesLayout.setVerticalGroup( panelCardImagesLayout.setVerticalGroup(
panelCardImagesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) panelCardImagesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
@ -1058,6 +1058,8 @@ public class PreferencesDialog extends javax.swing.JDialog {
panelBackgroundImages.setLayout(panelBackgroundImagesLayout); panelBackgroundImages.setLayout(panelBackgroundImagesLayout);
panelBackgroundImagesLayout.setHorizontalGroup( panelBackgroundImagesLayout.setHorizontalGroup(
panelBackgroundImagesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) panelBackgroundImagesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(panelBackgroundImagesLayout.createSequentialGroup()
.addGroup(panelBackgroundImagesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(panelBackgroundImagesLayout.createSequentialGroup() .addGroup(panelBackgroundImagesLayout.createSequentialGroup()
.addGroup(panelBackgroundImagesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(panelBackgroundImagesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(panelBackgroundImagesLayout.createSequentialGroup() .addGroup(panelBackgroundImagesLayout.createSequentialGroup()
@ -1068,25 +1070,20 @@ public class PreferencesDialog extends javax.swing.JDialog {
.addComponent(jLabel15))) .addComponent(jLabel15)))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(panelBackgroundImagesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(panelBackgroundImagesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(panelBackgroundImagesLayout.createSequentialGroup() .addComponent(txtBackgroundImagePath)
.addComponent(txtBattlefieldImagePath, javax.swing.GroupLayout.PREFERRED_SIZE, 336, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(txtBattlefieldImagePath))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(btnBrowseBattlefieldImage)) .addGroup(panelBackgroundImagesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(panelBackgroundImagesLayout.createSequentialGroup() .addComponent(btnBrowseBackgroundImage, javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(txtBackgroundImagePath, javax.swing.GroupLayout.PREFERRED_SIZE, 332, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(btnBrowseBattlefieldImage, javax.swing.GroupLayout.Alignment.TRAILING)))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(btnBrowseBackgroundImage)))
.addGap(0, 0, Short.MAX_VALUE))
.addGroup(panelBackgroundImagesLayout.createSequentialGroup() .addGroup(panelBackgroundImagesLayout.createSequentialGroup()
.addGroup(panelBackgroundImagesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(panelBackgroundImagesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(cbUseRandomBattleImage) .addComponent(cbUseRandomBattleImage)
.addComponent(cbUseDefaultBattleImage) .addComponent(cbUseDefaultBattleImage)
.addComponent(cbUseDefaultBackground)) .addComponent(cbUseDefaultBackground))
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .addGap(0, 0, Short.MAX_VALUE)))
.addContainerGap())
); );
panelBackgroundImagesLayout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {txtBackgroundImagePath, txtBattlefieldImagePath});
panelBackgroundImagesLayout.setVerticalGroup( panelBackgroundImagesLayout.setVerticalGroup(
panelBackgroundImagesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) panelBackgroundImagesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(panelBackgroundImagesLayout.createSequentialGroup() .addGroup(panelBackgroundImagesLayout.createSequentialGroup()
@ -1115,8 +1112,8 @@ public class PreferencesDialog extends javax.swing.JDialog {
.addGroup(tabImagesLayout.createSequentialGroup() .addGroup(tabImagesLayout.createSequentialGroup()
.addContainerGap() .addContainerGap()
.addGroup(tabImagesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(tabImagesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(panelCardImages, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(panelCardImages, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(panelBackgroundImages, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .addComponent(panelBackgroundImages, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addContainerGap()) .addContainerGap())
); );
tabImagesLayout.setVerticalGroup( tabImagesLayout.setVerticalGroup(
@ -1248,249 +1245,459 @@ public class PreferencesDialog extends javax.swing.JDialog {
tabsPanel.addTab("Sounds", tabSounds); tabsPanel.addTab("Sounds", tabSounds);
jLabel12.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N avatarPane.setMaximumSize(new java.awt.Dimension(508, 772));
jLabel12.setText("Choose your avatar:"); avatarPane.setMinimumSize(new java.awt.Dimension(508, 772));
avatarPane.setPreferredSize(new java.awt.Dimension(508, 772));
avatarPanel.setMaximumSize(new java.awt.Dimension(508, 772));
avatarPanel.setMinimumSize(new java.awt.Dimension(508, 772));
avatarPanel.setPreferredSize(new java.awt.Dimension(508, 772));
avatarPanel.setLayout(new java.awt.GridLayout(6, 4, 20, 20));
jPanel10.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(204, 204, 204), 1, true)); jPanel10.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(204, 204, 204), 1, true));
jPanel10.setMaximumSize(new java.awt.Dimension(102, 102));
jPanel10.setMinimumSize(new java.awt.Dimension(102, 102));
jPanel10.setPreferredSize(new java.awt.Dimension(102, 102));
javax.swing.GroupLayout jPanel10Layout = new javax.swing.GroupLayout(jPanel10); javax.swing.GroupLayout jPanel10Layout = new javax.swing.GroupLayout(jPanel10);
jPanel10.setLayout(jPanel10Layout); jPanel10.setLayout(jPanel10Layout);
jPanel10Layout.setHorizontalGroup( jPanel10Layout.setHorizontalGroup(
jPanel10Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) jPanel10Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 100, Short.MAX_VALUE) .addGap(0, 110, Short.MAX_VALUE)
); );
jPanel10Layout.setVerticalGroup( jPanel10Layout.setVerticalGroup(
jPanel10Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) jPanel10Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 100, Short.MAX_VALUE) .addGap(0, 110, Short.MAX_VALUE)
); );
jPanel13.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(204, 204, 204), 1, true)); avatarPanel.add(jPanel10);
javax.swing.GroupLayout jPanel13Layout = new javax.swing.GroupLayout(jPanel13);
jPanel13.setLayout(jPanel13Layout);
jPanel13Layout.setHorizontalGroup(
jPanel13Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 100, Short.MAX_VALUE)
);
jPanel13Layout.setVerticalGroup(
jPanel13Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 100, Short.MAX_VALUE)
);
jPanel11.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(204, 204, 204), 1, true)); jPanel11.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(204, 204, 204), 1, true));
jPanel11.setMaximumSize(new java.awt.Dimension(102, 102));
jPanel11.setMinimumSize(new java.awt.Dimension(102, 102));
jPanel11.setPreferredSize(new java.awt.Dimension(102, 102));
javax.swing.GroupLayout jPanel11Layout = new javax.swing.GroupLayout(jPanel11); javax.swing.GroupLayout jPanel11Layout = new javax.swing.GroupLayout(jPanel11);
jPanel11.setLayout(jPanel11Layout); jPanel11.setLayout(jPanel11Layout);
jPanel11Layout.setHorizontalGroup( jPanel11Layout.setHorizontalGroup(
jPanel11Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) jPanel11Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 100, Short.MAX_VALUE) .addGap(0, 110, Short.MAX_VALUE)
); );
jPanel11Layout.setVerticalGroup( jPanel11Layout.setVerticalGroup(
jPanel11Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) jPanel11Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 100, Short.MAX_VALUE) .addGap(0, 110, Short.MAX_VALUE)
); );
avatarPanel.add(jPanel11);
jPanel12.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(204, 204, 204), 1, true)); jPanel12.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(204, 204, 204), 1, true));
jPanel12.setMaximumSize(new java.awt.Dimension(102, 102));
jPanel12.setMinimumSize(new java.awt.Dimension(102, 102));
jPanel12.setPreferredSize(new java.awt.Dimension(102, 102));
javax.swing.GroupLayout jPanel12Layout = new javax.swing.GroupLayout(jPanel12); javax.swing.GroupLayout jPanel12Layout = new javax.swing.GroupLayout(jPanel12);
jPanel12.setLayout(jPanel12Layout); jPanel12.setLayout(jPanel12Layout);
jPanel12Layout.setHorizontalGroup( jPanel12Layout.setHorizontalGroup(
jPanel12Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) jPanel12Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 100, Short.MAX_VALUE) .addGap(0, 110, Short.MAX_VALUE)
); );
jPanel12Layout.setVerticalGroup( jPanel12Layout.setVerticalGroup(
jPanel12Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) jPanel12Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 100, Short.MAX_VALUE) .addGap(0, 110, Short.MAX_VALUE)
); );
avatarPanel.add(jPanel12);
jPanel13.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(204, 204, 204), 1, true));
jPanel13.setMaximumSize(new java.awt.Dimension(102, 102));
jPanel13.setMinimumSize(new java.awt.Dimension(102, 102));
jPanel13.setPreferredSize(new java.awt.Dimension(102, 102));
javax.swing.GroupLayout jPanel13Layout = new javax.swing.GroupLayout(jPanel13);
jPanel13.setLayout(jPanel13Layout);
jPanel13Layout.setHorizontalGroup(
jPanel13Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 110, Short.MAX_VALUE)
);
jPanel13Layout.setVerticalGroup(
jPanel13Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 0, Short.MAX_VALUE)
);
avatarPanel.add(jPanel13);
jPanel14.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(204, 204, 204), 1, true)); jPanel14.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(204, 204, 204), 1, true));
jPanel14.setMaximumSize(new java.awt.Dimension(102, 102));
jPanel14.setMinimumSize(new java.awt.Dimension(102, 102));
jPanel14.setPreferredSize(new java.awt.Dimension(102, 102));
javax.swing.GroupLayout jPanel14Layout = new javax.swing.GroupLayout(jPanel14); javax.swing.GroupLayout jPanel14Layout = new javax.swing.GroupLayout(jPanel14);
jPanel14.setLayout(jPanel14Layout); jPanel14.setLayout(jPanel14Layout);
jPanel14Layout.setHorizontalGroup( jPanel14Layout.setHorizontalGroup(
jPanel14Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) jPanel14Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 100, Short.MAX_VALUE) .addGap(0, 110, Short.MAX_VALUE)
); );
jPanel14Layout.setVerticalGroup( jPanel14Layout.setVerticalGroup(
jPanel14Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) jPanel14Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 100, Short.MAX_VALUE) .addGap(0, 110, Short.MAX_VALUE)
); );
avatarPanel.add(jPanel14);
jPanel15.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(204, 204, 204), 1, true)); jPanel15.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(204, 204, 204), 1, true));
jPanel15.setMaximumSize(new java.awt.Dimension(102, 102));
jPanel15.setMinimumSize(new java.awt.Dimension(102, 102));
jPanel15.setPreferredSize(new java.awt.Dimension(102, 102));
javax.swing.GroupLayout jPanel15Layout = new javax.swing.GroupLayout(jPanel15); javax.swing.GroupLayout jPanel15Layout = new javax.swing.GroupLayout(jPanel15);
jPanel15.setLayout(jPanel15Layout); jPanel15.setLayout(jPanel15Layout);
jPanel15Layout.setHorizontalGroup( jPanel15Layout.setHorizontalGroup(
jPanel15Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) jPanel15Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 100, Short.MAX_VALUE) .addGap(0, 110, Short.MAX_VALUE)
); );
jPanel15Layout.setVerticalGroup( jPanel15Layout.setVerticalGroup(
jPanel15Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) jPanel15Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 100, Short.MAX_VALUE) .addGap(0, 110, Short.MAX_VALUE)
); );
jLabel13.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N avatarPanel.add(jPanel15);
jLabel13.setText("New avatars:");
jPanel16.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(204, 204, 204), 1, true)); jPanel16.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(204, 204, 204), 1, true));
jPanel16.setMaximumSize(new java.awt.Dimension(102, 102));
jPanel16.setMinimumSize(new java.awt.Dimension(102, 102));
jPanel16.setPreferredSize(new java.awt.Dimension(102, 102));
javax.swing.GroupLayout jPanel16Layout = new javax.swing.GroupLayout(jPanel16); javax.swing.GroupLayout jPanel16Layout = new javax.swing.GroupLayout(jPanel16);
jPanel16.setLayout(jPanel16Layout); jPanel16.setLayout(jPanel16Layout);
jPanel16Layout.setHorizontalGroup( jPanel16Layout.setHorizontalGroup(
jPanel16Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) jPanel16Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 100, Short.MAX_VALUE) .addGap(0, 110, Short.MAX_VALUE)
); );
jPanel16Layout.setVerticalGroup( jPanel16Layout.setVerticalGroup(
jPanel16Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) jPanel16Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 100, Short.MAX_VALUE) .addGap(0, 110, Short.MAX_VALUE)
); );
avatarPanel.add(jPanel16);
jPanel17.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(204, 204, 204), 1, true)); jPanel17.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(204, 204, 204), 1, true));
jPanel17.setMaximumSize(new java.awt.Dimension(102, 102));
jPanel17.setMinimumSize(new java.awt.Dimension(102, 102));
jPanel17.setPreferredSize(new java.awt.Dimension(102, 102));
javax.swing.GroupLayout jPanel17Layout = new javax.swing.GroupLayout(jPanel17); javax.swing.GroupLayout jPanel17Layout = new javax.swing.GroupLayout(jPanel17);
jPanel17.setLayout(jPanel17Layout); jPanel17.setLayout(jPanel17Layout);
jPanel17Layout.setHorizontalGroup( jPanel17Layout.setHorizontalGroup(
jPanel17Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) jPanel17Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 100, Short.MAX_VALUE) .addGap(0, 110, Short.MAX_VALUE)
); );
jPanel17Layout.setVerticalGroup( jPanel17Layout.setVerticalGroup(
jPanel17Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) jPanel17Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 100, Short.MAX_VALUE) .addGap(0, 110, Short.MAX_VALUE)
); );
avatarPanel.add(jPanel17);
jPanel18.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(204, 204, 204), 1, true)); jPanel18.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(204, 204, 204), 1, true));
jPanel18.setMaximumSize(new java.awt.Dimension(102, 102));
jPanel18.setMinimumSize(new java.awt.Dimension(102, 102));
jPanel18.setPreferredSize(new java.awt.Dimension(102, 102));
javax.swing.GroupLayout jPanel18Layout = new javax.swing.GroupLayout(jPanel18); javax.swing.GroupLayout jPanel18Layout = new javax.swing.GroupLayout(jPanel18);
jPanel18.setLayout(jPanel18Layout); jPanel18.setLayout(jPanel18Layout);
jPanel18Layout.setHorizontalGroup( jPanel18Layout.setHorizontalGroup(
jPanel18Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) jPanel18Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 100, Short.MAX_VALUE) .addGap(0, 110, Short.MAX_VALUE)
); );
jPanel18Layout.setVerticalGroup( jPanel18Layout.setVerticalGroup(
jPanel18Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) jPanel18Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 100, Short.MAX_VALUE) .addGap(0, 110, Short.MAX_VALUE)
); );
avatarPanel.add(jPanel18);
jPanel19.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(204, 204, 204), 1, true)); jPanel19.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(204, 204, 204), 1, true));
jPanel19.setMaximumSize(new java.awt.Dimension(102, 102));
jPanel19.setMinimumSize(new java.awt.Dimension(102, 102));
jPanel19.setPreferredSize(new java.awt.Dimension(102, 102));
javax.swing.GroupLayout jPanel19Layout = new javax.swing.GroupLayout(jPanel19); javax.swing.GroupLayout jPanel19Layout = new javax.swing.GroupLayout(jPanel19);
jPanel19.setLayout(jPanel19Layout); jPanel19.setLayout(jPanel19Layout);
jPanel19Layout.setHorizontalGroup( jPanel19Layout.setHorizontalGroup(
jPanel19Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) jPanel19Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 100, Short.MAX_VALUE) .addGap(0, 110, Short.MAX_VALUE)
); );
jPanel19Layout.setVerticalGroup( jPanel19Layout.setVerticalGroup(
jPanel19Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) jPanel19Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 100, Short.MAX_VALUE) .addGap(0, 110, Short.MAX_VALUE)
); );
avatarPanel.add(jPanel19);
jPanel20.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(204, 204, 204), 1, true)); jPanel20.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(204, 204, 204), 1, true));
jPanel20.setMaximumSize(new java.awt.Dimension(102, 102));
jPanel20.setMinimumSize(new java.awt.Dimension(102, 102));
jPanel20.setPreferredSize(new java.awt.Dimension(102, 102));
javax.swing.GroupLayout jPanel20Layout = new javax.swing.GroupLayout(jPanel20); javax.swing.GroupLayout jPanel20Layout = new javax.swing.GroupLayout(jPanel20);
jPanel20.setLayout(jPanel20Layout); jPanel20.setLayout(jPanel20Layout);
jPanel20Layout.setHorizontalGroup( jPanel20Layout.setHorizontalGroup(
jPanel20Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) jPanel20Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 100, Short.MAX_VALUE) .addGap(0, 110, Short.MAX_VALUE)
); );
jPanel20Layout.setVerticalGroup( jPanel20Layout.setVerticalGroup(
jPanel20Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) jPanel20Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 100, Short.MAX_VALUE) .addGap(0, 110, Short.MAX_VALUE)
); );
avatarPanel.add(jPanel20);
jPanel21.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(204, 204, 204), 1, true)); jPanel21.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(204, 204, 204), 1, true));
jPanel21.setMaximumSize(new java.awt.Dimension(102, 102));
jPanel21.setMinimumSize(new java.awt.Dimension(102, 102));
jPanel21.setPreferredSize(new java.awt.Dimension(102, 102));
javax.swing.GroupLayout jPanel21Layout = new javax.swing.GroupLayout(jPanel21); javax.swing.GroupLayout jPanel21Layout = new javax.swing.GroupLayout(jPanel21);
jPanel21.setLayout(jPanel21Layout); jPanel21.setLayout(jPanel21Layout);
jPanel21Layout.setHorizontalGroup( jPanel21Layout.setHorizontalGroup(
jPanel21Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) jPanel21Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 100, Short.MAX_VALUE) .addGap(0, 110, Short.MAX_VALUE)
); );
jPanel21Layout.setVerticalGroup( jPanel21Layout.setVerticalGroup(
jPanel21Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) jPanel21Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 100, Short.MAX_VALUE) .addGap(0, 110, Short.MAX_VALUE)
); );
javax.swing.GroupLayout avatarPanelLayout = new javax.swing.GroupLayout(avatarPanel); avatarPanel.add(jPanel21);
avatarPanel.setLayout(avatarPanelLayout);
avatarPanelLayout.setHorizontalGroup( jPanel22.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(204, 204, 204), 1, true));
avatarPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) jPanel22.setMaximumSize(new java.awt.Dimension(102, 102));
.addGroup(avatarPanelLayout.createSequentialGroup() jPanel22.setMinimumSize(new java.awt.Dimension(102, 102));
.addGroup(avatarPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) jPanel22.setPreferredSize(new java.awt.Dimension(102, 102));
.addGroup(avatarPanelLayout.createSequentialGroup()
.addContainerGap() javax.swing.GroupLayout jPanel22Layout = new javax.swing.GroupLayout(jPanel22);
.addComponent(jLabel12)) jPanel22.setLayout(jPanel22Layout);
.addGroup(avatarPanelLayout.createSequentialGroup() jPanel22Layout.setHorizontalGroup(
.addGroup(avatarPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) jPanel22Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(avatarPanelLayout.createSequentialGroup() .addGap(0, 110, Short.MAX_VALUE)
.addGap(30, 30, 30)
.addGroup(avatarPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(jPanel12, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jPanel10, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jPanel19, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(33, 33, 33)
.addGroup(avatarPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jPanel13, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jPanel14, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jPanel20, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addGroup(avatarPanelLayout.createSequentialGroup()
.addContainerGap()
.addGroup(avatarPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(avatarPanelLayout.createSequentialGroup()
.addGap(20, 20, 20)
.addComponent(jPanel16, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(33, 33, 33)
.addComponent(jPanel17, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addComponent(jLabel13))))
.addGap(32, 32, 32)
.addGroup(avatarPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jPanel18, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jPanel21, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jPanel15, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jPanel11, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))))
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
); );
avatarPanelLayout.setVerticalGroup( jPanel22Layout.setVerticalGroup(
avatarPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) jPanel22Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(avatarPanelLayout.createSequentialGroup() .addGap(0, 110, Short.MAX_VALUE)
.addContainerGap()
.addComponent(jLabel12)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(avatarPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jPanel11, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jPanel13, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jPanel10, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(26, 26, 26)
.addGroup(avatarPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jPanel15, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jPanel12, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jPanel14, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(23, 23, 23)
.addGroup(avatarPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(jPanel19, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jPanel20, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jPanel21, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(18, 18, 18)
.addGroup(avatarPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addGroup(avatarPanelLayout.createSequentialGroup()
.addComponent(jLabel13)
.addGap(18, 18, 18)
.addComponent(jPanel16, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addComponent(jPanel17, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jPanel18, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(25, 25, 25))
); );
avatarPanel.add(jPanel22);
jPanel23.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(204, 204, 204), 1, true));
jPanel23.setMaximumSize(new java.awt.Dimension(102, 102));
jPanel23.setMinimumSize(new java.awt.Dimension(102, 102));
jPanel23.setPreferredSize(new java.awt.Dimension(102, 102));
javax.swing.GroupLayout jPanel23Layout = new javax.swing.GroupLayout(jPanel23);
jPanel23.setLayout(jPanel23Layout);
jPanel23Layout.setHorizontalGroup(
jPanel23Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 110, Short.MAX_VALUE)
);
jPanel23Layout.setVerticalGroup(
jPanel23Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 110, Short.MAX_VALUE)
);
avatarPanel.add(jPanel23);
jPanel24.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(204, 204, 204), 1, true));
jPanel24.setMaximumSize(new java.awt.Dimension(102, 102));
jPanel24.setMinimumSize(new java.awt.Dimension(102, 102));
jPanel24.setPreferredSize(new java.awt.Dimension(102, 102));
javax.swing.GroupLayout jPanel24Layout = new javax.swing.GroupLayout(jPanel24);
jPanel24.setLayout(jPanel24Layout);
jPanel24Layout.setHorizontalGroup(
jPanel24Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 110, Short.MAX_VALUE)
);
jPanel24Layout.setVerticalGroup(
jPanel24Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 110, Short.MAX_VALUE)
);
avatarPanel.add(jPanel24);
jPanel25.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(204, 204, 204), 1, true));
jPanel25.setMaximumSize(new java.awt.Dimension(102, 102));
jPanel25.setMinimumSize(new java.awt.Dimension(102, 102));
jPanel25.setPreferredSize(new java.awt.Dimension(102, 102));
javax.swing.GroupLayout jPanel25Layout = new javax.swing.GroupLayout(jPanel25);
jPanel25.setLayout(jPanel25Layout);
jPanel25Layout.setHorizontalGroup(
jPanel25Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 110, Short.MAX_VALUE)
);
jPanel25Layout.setVerticalGroup(
jPanel25Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 110, Short.MAX_VALUE)
);
avatarPanel.add(jPanel25);
jPanel26.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(204, 204, 204), 1, true));
jPanel26.setMaximumSize(new java.awt.Dimension(102, 102));
jPanel26.setMinimumSize(new java.awt.Dimension(102, 102));
jPanel26.setPreferredSize(new java.awt.Dimension(102, 102));
javax.swing.GroupLayout jPanel26Layout = new javax.swing.GroupLayout(jPanel26);
jPanel26.setLayout(jPanel26Layout);
jPanel26Layout.setHorizontalGroup(
jPanel26Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 110, Short.MAX_VALUE)
);
jPanel26Layout.setVerticalGroup(
jPanel26Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 110, Short.MAX_VALUE)
);
avatarPanel.add(jPanel26);
jPanel27.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(204, 204, 204), 1, true));
jPanel27.setMaximumSize(new java.awt.Dimension(102, 102));
jPanel27.setMinimumSize(new java.awt.Dimension(102, 102));
jPanel27.setPreferredSize(new java.awt.Dimension(102, 102));
javax.swing.GroupLayout jPanel27Layout = new javax.swing.GroupLayout(jPanel27);
jPanel27.setLayout(jPanel27Layout);
jPanel27Layout.setHorizontalGroup(
jPanel27Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 110, Short.MAX_VALUE)
);
jPanel27Layout.setVerticalGroup(
jPanel27Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 110, Short.MAX_VALUE)
);
avatarPanel.add(jPanel27);
jPanel28.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(204, 204, 204), 1, true));
jPanel28.setMaximumSize(new java.awt.Dimension(102, 102));
jPanel28.setMinimumSize(new java.awt.Dimension(102, 102));
jPanel28.setPreferredSize(new java.awt.Dimension(102, 102));
javax.swing.GroupLayout jPanel28Layout = new javax.swing.GroupLayout(jPanel28);
jPanel28.setLayout(jPanel28Layout);
jPanel28Layout.setHorizontalGroup(
jPanel28Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 110, Short.MAX_VALUE)
);
jPanel28Layout.setVerticalGroup(
jPanel28Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 110, Short.MAX_VALUE)
);
avatarPanel.add(jPanel28);
jPanel29.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(204, 204, 204), 1, true));
jPanel29.setMaximumSize(new java.awt.Dimension(102, 102));
jPanel29.setMinimumSize(new java.awt.Dimension(102, 102));
jPanel29.setPreferredSize(new java.awt.Dimension(102, 102));
javax.swing.GroupLayout jPanel29Layout = new javax.swing.GroupLayout(jPanel29);
jPanel29.setLayout(jPanel29Layout);
jPanel29Layout.setHorizontalGroup(
jPanel29Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 110, Short.MAX_VALUE)
);
jPanel29Layout.setVerticalGroup(
jPanel29Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 110, Short.MAX_VALUE)
);
avatarPanel.add(jPanel29);
jPanel30.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(204, 204, 204), 1, true));
jPanel30.setMaximumSize(new java.awt.Dimension(102, 102));
jPanel30.setMinimumSize(new java.awt.Dimension(102, 102));
jPanel30.setPreferredSize(new java.awt.Dimension(102, 102));
javax.swing.GroupLayout jPanel30Layout = new javax.swing.GroupLayout(jPanel30);
jPanel30.setLayout(jPanel30Layout);
jPanel30Layout.setHorizontalGroup(
jPanel30Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 110, Short.MAX_VALUE)
);
jPanel30Layout.setVerticalGroup(
jPanel30Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 110, Short.MAX_VALUE)
);
avatarPanel.add(jPanel30);
jPanel31.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(204, 204, 204), 1, true));
jPanel31.setMaximumSize(new java.awt.Dimension(102, 102));
jPanel31.setMinimumSize(new java.awt.Dimension(102, 102));
jPanel31.setPreferredSize(new java.awt.Dimension(102, 102));
javax.swing.GroupLayout jPanel31Layout = new javax.swing.GroupLayout(jPanel31);
jPanel31.setLayout(jPanel31Layout);
jPanel31Layout.setHorizontalGroup(
jPanel31Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 110, Short.MAX_VALUE)
);
jPanel31Layout.setVerticalGroup(
jPanel31Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 110, Short.MAX_VALUE)
);
avatarPanel.add(jPanel31);
jPanel32.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(204, 204, 204), 1, true));
jPanel32.setMaximumSize(new java.awt.Dimension(102, 102));
jPanel32.setMinimumSize(new java.awt.Dimension(102, 102));
jPanel32.setPreferredSize(new java.awt.Dimension(102, 102));
javax.swing.GroupLayout jPanel32Layout = new javax.swing.GroupLayout(jPanel32);
jPanel32.setLayout(jPanel32Layout);
jPanel32Layout.setHorizontalGroup(
jPanel32Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 110, Short.MAX_VALUE)
);
jPanel32Layout.setVerticalGroup(
jPanel32Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 110, Short.MAX_VALUE)
);
avatarPanel.add(jPanel32);
jPanel33.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(204, 204, 204), 1, true));
jPanel33.setMaximumSize(new java.awt.Dimension(102, 102));
jPanel33.setMinimumSize(new java.awt.Dimension(102, 102));
javax.swing.GroupLayout jPanel33Layout = new javax.swing.GroupLayout(jPanel33);
jPanel33.setLayout(jPanel33Layout);
jPanel33Layout.setHorizontalGroup(
jPanel33Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 110, Short.MAX_VALUE)
);
jPanel33Layout.setVerticalGroup(
jPanel33Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 110, Short.MAX_VALUE)
);
avatarPanel.add(jPanel33);
avatarPane.setViewportView(avatarPanel); avatarPane.setViewportView(avatarPanel);
javax.swing.GroupLayout tabAvatarsLayout = new javax.swing.GroupLayout(tabAvatars); javax.swing.GroupLayout tabAvatarsLayout = new javax.swing.GroupLayout(tabAvatars);
tabAvatars.setLayout(tabAvatarsLayout); tabAvatars.setLayout(tabAvatarsLayout);
tabAvatarsLayout.setHorizontalGroup( tabAvatarsLayout.setHorizontalGroup(
tabAvatarsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) tabAvatarsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(avatarPane, javax.swing.GroupLayout.DEFAULT_SIZE, 590, Short.MAX_VALUE) .addGroup(tabAvatarsLayout.createSequentialGroup()
.addComponent(avatarPane, javax.swing.GroupLayout.PREFERRED_SIZE, 527, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(0, 0, Short.MAX_VALUE))
); );
tabAvatarsLayout.setVerticalGroup( tabAvatarsLayout.setVerticalGroup(
tabAvatarsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) tabAvatarsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(avatarPane, javax.swing.GroupLayout.DEFAULT_SIZE, 432, Short.MAX_VALUE) .addComponent(avatarPane, javax.swing.GroupLayout.PREFERRED_SIZE, 418, Short.MAX_VALUE)
); );
tabsPanel.addTab("Avatars", tabAvatars); tabsPanel.addTab("Avatars", tabAvatars);
@ -1629,7 +1836,7 @@ public class PreferencesDialog extends javax.swing.JDialog {
.addContainerGap() .addContainerGap()
.addComponent(lblURLServerList, javax.swing.GroupLayout.PREFERRED_SIZE, 96, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(lblURLServerList, javax.swing.GroupLayout.PREFERRED_SIZE, 96, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(txtURLServerList, javax.swing.GroupLayout.PREFERRED_SIZE, 421, javax.swing.GroupLayout.PREFERRED_SIZE)) .addComponent(txtURLServerList, javax.swing.GroupLayout.PREFERRED_SIZE, 370, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(connection_serversLayout.createSequentialGroup() .addGroup(connection_serversLayout.createSequentialGroup()
.addGap(141, 141, 141) .addGap(141, 141, 141)
.addComponent(jLabel17))) .addComponent(jLabel17)))
@ -1651,15 +1858,14 @@ public class PreferencesDialog extends javax.swing.JDialog {
tabConnectionLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) tabConnectionLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(tabConnectionLayout.createSequentialGroup() .addGroup(tabConnectionLayout.createSequentialGroup()
.addContainerGap() .addContainerGap()
.addGroup(tabConnectionLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(tabConnectionLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
.addGroup(tabConnectionLayout.createSequentialGroup() .addComponent(pnlProxySettings, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addGroup(javax.swing.GroupLayout.Alignment.LEADING, tabConnectionLayout.createSequentialGroup()
.addComponent(lblProxyType) .addComponent(lblProxyType)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(cbProxyType, javax.swing.GroupLayout.PREFERRED_SIZE, 126, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(cbProxyType, javax.swing.GroupLayout.PREFERRED_SIZE, 126, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(0, 0, Short.MAX_VALUE))
.addComponent(pnlProxySettings, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(connection_servers, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .addComponent(connection_servers, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addContainerGap()) .addContainerGap(16, Short.MAX_VALUE))
); );
tabConnectionLayout.setVerticalGroup( tabConnectionLayout.setVerticalGroup(
tabConnectionLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) tabConnectionLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
@ -1672,7 +1878,7 @@ public class PreferencesDialog extends javax.swing.JDialog {
.addComponent(cbProxyType, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addComponent(cbProxyType, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(18, 18, 18) .addGap(18, 18, 18)
.addComponent(pnlProxySettings, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(pnlProxySettings, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(90, Short.MAX_VALUE)) .addContainerGap(107, Short.MAX_VALUE))
); );
pnlProxySettings.getAccessibleContext().setAccessibleDescription(""); pnlProxySettings.getAccessibleContext().setAccessibleDescription("");
@ -1700,12 +1906,12 @@ public class PreferencesDialog extends javax.swing.JDialog {
layout.setHorizontalGroup( layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addContainerGap(405, Short.MAX_VALUE)
.addComponent(saveButton) .addComponent(saveButton)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(exitButton, javax.swing.GroupLayout.PREFERRED_SIZE, 55, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(exitButton, javax.swing.GroupLayout.PREFERRED_SIZE, 55, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap()) .addContainerGap())
.addComponent(tabsPanel) .addComponent(tabsPanel, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE)
); );
layout.setVerticalGroup( layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
@ -1795,10 +2001,11 @@ public class PreferencesDialog extends javax.swing.JDialog {
save(prefs, dialog.txtURLServerList, KEY_CONNECTION_URL_SERVER_LIST); save(prefs, dialog.txtURLServerList, KEY_CONNECTION_URL_SERVER_LIST);
// Avatar // Avatar
if (available_avatars.contains(selectedAvatarId)) { if (selectedAvatarId < MIN_AVATAR_ID || selectedAvatarId > MAX_AVATAR_ID) {
selectedAvatarId = DEFAULT_AVATAR_ID;
}
prefs.put(KEY_AVATAR, String.valueOf(selectedAvatarId)); prefs.put(KEY_AVATAR, String.valueOf(selectedAvatarId));
updateCache(KEY_AVATAR, String.valueOf(selectedAvatarId)); updateCache(KEY_AVATAR, String.valueOf(selectedAvatarId));
}
try { try {
MageFrame.getClient().setPreferences(getUserData()); MageFrame.getClient().setPreferences(getUserData());
@ -2275,7 +2482,7 @@ public class PreferencesDialog extends javax.swing.JDialog {
} catch (NumberFormatException n) { } catch (NumberFormatException n) {
selectedAvatarId = DEFAULT_AVATAR_ID; selectedAvatarId = DEFAULT_AVATAR_ID;
} finally { } finally {
if (!available_avatars.contains(selectedAvatarId)) { if (selectedAvatarId < MIN_AVATAR_ID || selectedAvatarId > MAX_AVATAR_ID) {
selectedAvatarId = DEFAULT_AVATAR_ID; selectedAvatarId = DEFAULT_AVATAR_ID;
} }
} }
@ -2441,26 +2648,37 @@ public class PreferencesDialog extends javax.swing.JDialog {
private void addAvatars() { private void addAvatars() {
try { try {
addAvatar(jPanel10, 51, true, false); addAvatar(jPanel10, 10, true, false);
addAvatar(jPanel11, 11, false, false);
addAvatar(jPanel12, 12, false, false);
addAvatar(jPanel13, 13, false, false); addAvatar(jPanel13, 13, false, false);
addAvatar(jPanel11, 9, false, false); addAvatar(jPanel14, 14, false, false);
addAvatar(jPanel12, 53, false, false); addAvatar(jPanel15, 15, false, false);
addAvatar(jPanel14, 10, false, false); addAvatar(jPanel16, 16, false, false);
addAvatar(jPanel15, 39, false, false); addAvatar(jPanel17, 17, false, false);
addAvatar(jPanel18, 18, false, false);
addAvatar(jPanel19, 19, false, false); addAvatar(jPanel19, 19, false, false);
addAvatar(jPanel20, 30, false, false); addAvatar(jPanel20, 20, false, false);
addAvatar(jPanel21, 25, false, false); addAvatar(jPanel21, 21, false, false);
addAvatar(jPanel22, 22, false, false);
addAvatar(jPanel23, 23, false, false);
addAvatar(jPanel24, 24, false, false);
addAvatar(jPanel25, 25, false, false);
addAvatar(jPanel26, 26, false, false);
addAvatar(jPanel27, 27, false, false);
addAvatar(jPanel28, 28, false, false);
addAvatar(jPanel29, 29, false, false);
addAvatar(jPanel30, 30, false, false);
addAvatar(jPanel31, 31, false, false);
addAvatar(jPanel32, 32, false, false);
addAvatar(jPanel16, 22, false, false);
addAvatar(jPanel17, 77, false, false);
addAvatar(jPanel18, 62, false, false);
} catch (Exception e) { } catch (Exception e) {
log.error(e, e); log.error(e, e);
} }
} }
public void setSelectedId(int id) { public void setSelectedId(int id) {
if (available_avatars.contains(id)) { if (id >= MIN_AVATAR_ID && id <= MAX_AVATAR_ID) {
for (JPanel panel : panels.values()) { for (JPanel panel : panels.values()) {
panel.setBorder(BLACK_BORDER); panel.setBorder(BLACK_BORDER);
} }
@ -2473,7 +2691,8 @@ public class PreferencesDialog extends javax.swing.JDialog {
String path = "/avatars/" + String.valueOf(id) + ".jpg"; String path = "/avatars/" + String.valueOf(id) + ".jpg";
panels.put(id, jPanel); panels.put(id, jPanel);
Image image = ImageHelper.getImageFromResources(path); Image image = ImageHelper.getImageFromResources(path);
Rectangle r = new Rectangle(90, 90);
Rectangle r = new Rectangle(jPanel.getWidth() - 5, jPanel.getHeight() - 5);
BufferedImage bufferedImage; BufferedImage bufferedImage;
if (!locked) { if (!locked) {
bufferedImage = BufferedImageBuilder.bufferImage(image, BufferedImage.TYPE_INT_ARGB); bufferedImage = BufferedImageBuilder.bufferImage(image, BufferedImage.TYPE_INT_ARGB);
@ -2571,8 +2790,6 @@ public class PreferencesDialog extends javax.swing.JDialog {
private javax.swing.JCheckBox displayBigCardsInHand; private javax.swing.JCheckBox displayBigCardsInHand;
private javax.swing.JButton exitButton; private javax.swing.JButton exitButton;
private javax.swing.JLabel jLabel11; private javax.swing.JLabel jLabel11;
private javax.swing.JLabel jLabel12;
private javax.swing.JLabel jLabel13;
private javax.swing.JLabel jLabel14; private javax.swing.JLabel jLabel14;
private javax.swing.JLabel jLabel15; private javax.swing.JLabel jLabel15;
private javax.swing.JLabel jLabel16; private javax.swing.JLabel jLabel16;
@ -2599,6 +2816,18 @@ public class PreferencesDialog extends javax.swing.JDialog {
private javax.swing.JPanel jPanel19; private javax.swing.JPanel jPanel19;
private javax.swing.JPanel jPanel20; private javax.swing.JPanel jPanel20;
private javax.swing.JPanel jPanel21; private javax.swing.JPanel jPanel21;
private javax.swing.JPanel jPanel22;
private javax.swing.JPanel jPanel23;
private javax.swing.JPanel jPanel24;
private javax.swing.JPanel jPanel25;
private javax.swing.JPanel jPanel26;
private javax.swing.JPanel jPanel27;
private javax.swing.JPanel jPanel28;
private javax.swing.JPanel jPanel29;
private javax.swing.JPanel jPanel30;
private javax.swing.JPanel jPanel31;
private javax.swing.JPanel jPanel32;
private javax.swing.JPanel jPanel33;
private javax.swing.JLabel labelPreferedImageLanguage; private javax.swing.JLabel labelPreferedImageLanguage;
private javax.swing.JLabel lblProxyPassword; private javax.swing.JLabel lblProxyPassword;
private javax.swing.JLabel lblProxyPort; private javax.swing.JLabel lblProxyPort;

View file

@ -59,6 +59,9 @@ import mage.client.util.ImageHelper;
import mage.client.util.gui.BufferedImageBuilder; import mage.client.util.gui.BufferedImageBuilder;
import mage.client.util.gui.countryBox.CountryUtil; import mage.client.util.gui.countryBox.CountryUtil;
import mage.components.ImagePanel; import mage.components.ImagePanel;
import static mage.constants.Constants.DEFAULT_AVATAR_ID;
import static mage.constants.Constants.MAX_AVATAR_ID;
import static mage.constants.Constants.MIN_AVATAR_ID;
import mage.constants.ManaType; import mage.constants.ManaType;
import mage.utils.timer.PriorityTimer; import mage.utils.timer.PriorityTimer;
import mage.view.ManaPoolView; import mage.view.ManaPoolView;
@ -91,7 +94,7 @@ public class PlayerPanelExt extends javax.swing.JPanel {
private static final int AVATAR_COUNT = 77; private static final int AVATAR_COUNT = 77;
private static final String DEFAULT_AVATAR_PATH = "/avatars/51.jpg"; private static final String DEFAULT_AVATAR_PATH = "/avatars/" + DEFAULT_AVATAR_ID + ".jpg";
private static final int PANEL_WIDTH = 94; private static final int PANEL_WIDTH = 94;
private static final int PANEL_HEIGHT = 242; private static final int PANEL_HEIGHT = 242;
@ -236,8 +239,8 @@ public class PlayerPanelExt extends javax.swing.JPanel {
if (!MageFrame.isLite()) { if (!MageFrame.isLite()) {
int id = player.getUserData().getAvatarId(); int id = player.getUserData().getAvatarId();
if (id <= 0) { if (!(id >= 1000) && (id <= 0 || (id <= MIN_AVATAR_ID && id > MAX_AVATAR_ID))) {
id = PreferencesDialog.DEFAULT_AVATAR_ID; id = DEFAULT_AVATAR_ID;
} }
if (id != avatarId) { if (id != avatarId) {
avatarId = id; avatarId = id;

View file

@ -25,21 +25,21 @@
* authors and should not be interpreted as representing official policies, either expressed * authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com. * or implied, of BetaSteward_at_googlemail.com.
*/ */
package mage.client.util; package mage.client.util;
import java.util.Comparator; import java.util.Comparator;
import mage.utils.CardUtil;
import mage.view.CardView; import mage.view.CardView;
/** /**
* *
* @author BetaSteward_at_googlemail.com * @author BetaSteward_at_googlemail.com
*/ */
public class CardViewColorDetailedComparator implements Comparator<CardView> { public class CardViewColorIdentityComparator implements Comparator<CardView> {
@Override @Override
public int compare(CardView o1, CardView o2) { public int compare(CardView o1, CardView o2) {
return o1.getColor().hashCode() - o2.getColor().hashCode(); return CardUtil.getColorIdentitySortValue(o1.getManaCost(), o1.getColor(), o1.getRules())
- CardUtil.getColorIdentitySortValue(o2.getManaCost(), o2.getColor(), o2.getRules());
} }
} }

View file

@ -25,7 +25,6 @@
* authors and should not be interpreted as representing official policies, either expressed * authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com. * or implied, of BetaSteward_at_googlemail.com.
*/ */
package mage.client.util; package mage.client.util;
import java.util.Comparator; import java.util.Comparator;
@ -39,7 +38,7 @@ public class CardViewCostComparator implements Comparator<CardView> {
@Override @Override
public int compare(CardView o1, CardView o2) { public int compare(CardView o1, CardView o2) {
return Integer.valueOf(o1.getConvertedManaCost()).compareTo(Integer.valueOf(o2.getConvertedManaCost())); return Integer.valueOf(o1.getConvertedManaCost()).compareTo(o2.getConvertedManaCost());
} }
} }

View file

@ -49,7 +49,7 @@ public class GathererSets implements Iterable<DownloadJob> {
"THS", "BNG", "JOU", "THS", "BNG", "JOU",
"CNS", "VMA", "TPR", "CNS", "VMA", "TPR",
"KTK", "FRF", "DTK", "KTK", "FRF", "DTK",
"BFZ"}; "BFZ", "EXP", "OGW"};
private static final HashMap<String, String> symbolsReplacements = new HashMap<>(); private static final HashMap<String, String> symbolsReplacements = new HashMap<>();
static { static {

View file

@ -16,6 +16,8 @@ public class MagicCardsImageSource implements CardImageSource {
private static final Map<String, String> setNameTokenReplacement = new HashMap<String, String>() { private static final Map<String, String> setNameTokenReplacement = new HashMap<String, String>() {
{ {
put("ORG", "oath-of-the-gatewatch");
put("EXP", "zendikar-expeditions");
put("BFZ", "battle-for-zendikar"); put("BFZ", "battle-for-zendikar");
put("FVL", "from-the-vault-legends"); put("FVL", "from-the-vault-legends");
put("FVD", "from-the-vault-dragons"); put("FVD", "from-the-vault-dragons");

View file

@ -36,7 +36,10 @@ import java.net.Proxy;
import java.net.URL; import java.net.URL;
import java.net.URLEncoder; import java.net.URLEncoder;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.Map; import java.util.Map;
import java.util.Set;
import java.util.prefs.Preferences; import java.util.prefs.Preferences;
import mage.client.MageFrame; import mage.client.MageFrame;
import mage.remote.Connection; import mage.remote.Connection;
@ -56,6 +59,7 @@ public class MythicspoilerComSource implements CardImageSource {
private static CardImageSource instance; private static CardImageSource instance;
private static Map<String, String> setsAliases; private static Map<String, String> setsAliases;
private static Map<String, String> cardNameAliases; private static Map<String, String> cardNameAliases;
private static Map<String, Set<String>> cardNameAliasesStart;
private final Map<String, Map<String, String>> sets; private final Map<String, Map<String, String>> sets;
public static CardImageSource getInstance() { public static CardImageSource getInstance() {
@ -71,8 +75,9 @@ public class MythicspoilerComSource implements CardImageSource {
} }
public MythicspoilerComSource() { public MythicspoilerComSource() {
sets = new HashMap<>(); sets = new LinkedHashMap<>();
setsAliases = new HashMap<>(); setsAliases = new HashMap<>();
setsAliases.put("exp", "bfz");
cardNameAliases = new HashMap<>(); cardNameAliases = new HashMap<>();
// set+wrong name from web side => correct card name // set+wrong name from web side => correct card name
cardNameAliases.put("MM2-otherwordlyjourney", "otherworldlyjourney"); cardNameAliases.put("MM2-otherwordlyjourney", "otherworldlyjourney");
@ -81,12 +86,21 @@ public class MythicspoilerComSource implements CardImageSource {
cardNameAliases.put("THS-soldierofpantheon", "soldierofthepantheon"); cardNameAliases.put("THS-soldierofpantheon", "soldierofthepantheon");
cardNameAliases.put("THS-vulpinegolaith", "vulpinegoliath"); cardNameAliases.put("THS-vulpinegolaith", "vulpinegoliath");
cardNameAliases.put("ORI-kothopedhoarderofsouls", "kothophedsoulhoarder"); cardNameAliases.put("ORI-kothopedhoarderofsouls", "kothophedsoulhoarder");
cardNameAliases.put("BFZ-unisonstrike", "tandemtactics");
cardNameAliases.put("BFZ-eldrazidevastator", "eldrazidevastator");
cardNameAliases.put("BFZ-kozliekschanneler", "kozilekschanneler");
cardNameAliasesStart = new HashMap<>();
HashSet<String> names = new HashSet<>();
names.add("eldrazidevastator.jpg");
cardNameAliasesStart.put("BFZ", names);
} }
private Map<String, String> getSetLinks(String cardSet) { private Map<String, String> getSetLinks(String cardSet) {
Map<String, String> setLinks = new HashMap<>(); Map<String, String> setLinks = new HashMap<>();
try { try {
String setNames = setsAliases.get(cardSet.toLowerCase()); String setNames = setsAliases.get(cardSet.toLowerCase());
Set<String> aliasesStart = cardNameAliasesStart.get(cardSet);
if (setNames == null) { if (setNames == null) {
setNames = cardSet.toLowerCase(); setNames = cardSet.toLowerCase();
} }
@ -119,14 +133,23 @@ public class MythicspoilerComSource implements CardImageSource {
} }
Elements cardsImages = doc.select("img[src^=cards/]"); // starts with cards/ Elements cardsImages = doc.select("img[src^=cards/]"); // starts with cards/
if (!aliasesStart.isEmpty()) {
for (String text : aliasesStart) {
cardsImages.addAll(doc.select("img[src^=" + text + "]"));
}
}
if (cardsImages.isEmpty()) { if (cardsImages.isEmpty()) {
break; break;
} }
for (Element cardsImage : cardsImages) { for (Element cardsImage : cardsImages) {
String cardLink = cardsImage.attr("src"); String cardLink = cardsImage.attr("src");
String cardName = null;
if (cardLink.startsWith("cards/") && cardLink.endsWith(".jpg")) { if (cardLink.startsWith("cards/") && cardLink.endsWith(".jpg")) {
String cardName = cardLink.substring(6, cardLink.length() - 4); cardName = cardLink.substring(6, cardLink.length() - 4);
} else if (aliasesStart.contains(cardLink)) {
cardName = cardLink.substring(0, cardLink.length() - 4);;
}
if (cardName != null && !cardName.isEmpty()) { if (cardName != null && !cardName.isEmpty()) {
if (cardNameAliases.containsKey(cardSet + "-" + cardName)) { if (cardNameAliases.containsKey(cardSet + "-" + cardName)) {
cardName = cardNameAliases.get(cardSet + "-" + cardName); cardName = cardNameAliases.get(cardSet + "-" + cardName);
@ -145,7 +168,7 @@ public class MythicspoilerComSource implements CardImageSource {
} }
} }
}
} catch (IOException ex) { } catch (IOException ex) {
System.out.println("Exception when parsing the mythicspoiler page: " + ex.getMessage()); System.out.println("Exception when parsing the mythicspoiler page: " + ex.getMessage());
} }

View file

@ -25,8 +25,8 @@ import org.mage.plugins.card.utils.CardImageUtils;
/** /**
* This class stores ALL card images in a cache with soft values. this means * This class stores ALL card images in a cache with soft values. this means
* that the images may be garbage collected when they are not needed any more, but will * that the images may be garbage collected when they are not needed any more,
* be kept as long as possible. * but will be kept as long as possible.
* *
* Key format: "<cardname>#<setname>#<type>#<collectorID>#<param>" * Key format: "<cardname>#<setname>#<type>#<collectorID>#<param>"
* *
@ -46,8 +46,7 @@ public class ImageCache {
private static final Map<String, BufferedImage> imageCache; private static final Map<String, BufferedImage> imageCache;
/** /**
* Common pattern for keys. * Common pattern for keys. Format: "<cardname>#<setname>#<collectorID>"
* Format: "<cardname>#<setname>#<collectorID>"
*/ */
private static final Pattern KEY_PATTERN = Pattern.compile("(.*)#(.*)#(.*)#(.*)#(.*)"); private static final Pattern KEY_PATTERN = Pattern.compile("(.*)#(.*)#(.*)#(.*)#(.*)");
@ -104,16 +103,16 @@ public class ImageCache {
thumbnailFile = new TFile(thumbnailPath); thumbnailFile = new TFile(thumbnailPath);
} catch (Exception ex) { } catch (Exception ex) {
} }
boolean exists =false; boolean exists = false;
if (thumbnailFile != null) { if (thumbnailFile != null) {
try { try {
exists = thumbnailFile.exists(); exists = thumbnailFile.exists();
} catch(Exception ex) { } catch (Exception ex) {
exists = false; exists = false;
} }
} }
if (exists) { if (exists) {
log.debug("loading thumbnail for " + key + ", path="+thumbnailPath); log.debug("loading thumbnail for " + key + ", path=" + thumbnailPath);
return loadImage(thumbnailFile); return loadImage(thumbnailFile);
} else { } else {
BufferedImage image = loadImage(file); BufferedImage image = loadImage(file);
@ -187,30 +186,15 @@ public class ImageCache {
} }
public static BufferedImage getThumbnail(CardView card) { public static BufferedImage getThumbnail(CardView card) {
String key = getKey(card) + "#thumb"; return getImage(getKey(card, card.getName(), "#thumb"));
if (card.getUsesVariousArt()) {
key += "#usesVariousArt";
}
// log.debug("#key: " + key);
return getImage(key);
} }
public static BufferedImage getImageOriginal(CardView card) { public static BufferedImage getImageOriginal(CardView card) {
String key = getKey(card); return getImage(getKey(card, card.getName(), ""));
if (card.getUsesVariousArt()) {
key += "#usesVariousArt";
}
// log.warn("#key: " + key);
return getImage(key);
} }
public static BufferedImage getImageOriginalAlternateName(CardView card) { public static BufferedImage getImageOriginalAlternateName(CardView card) {
String key = getKeyAlternateName(card, card.getAlternateName()); return getImage(getKey(card, card.getAlternateName(), ""));
if (card.getUsesVariousArt()) {
key += "#usesVariousArt";
}
// log.warn("#key: " + key);
return getImage(key);
} }
/** /**
@ -230,7 +214,7 @@ public class ImageCache {
if (ex.getCause() instanceof NullPointerException) { if (ex.getCause() instanceof NullPointerException) {
return null; return null;
} }
log.error(ex,ex); log.error(ex, ex);
return null; return null;
} }
} }
@ -238,32 +222,25 @@ public class ImageCache {
/** /**
* Returns the map key for a card, without any suffixes for the image size. * Returns the map key for a card, without any suffixes for the image size.
*/ */
private static String getKey(CardView card) { private static String getKey(CardView card, String name, String suffix) {
StringBuilder sb = new StringBuilder(card.getName()).append("#"); return name + "#" + card.getExpansionSetCode() + "#" + card.getType() + "#" + card.getCardNumber() + "#"
sb.append(card.getExpansionSetCode()).append("#"); + (card.getTokenSetCode() == null ? "" : card.getTokenSetCode())
sb.append(card.getType()).append("#"); + suffix
sb.append(card.getCardNumber()).append("#"); + (card.getUsesVariousArt() ? "#usesVariousArt" : "");
sb.append(card.getTokenSetCode() == null ? "":card.getTokenSetCode());
return sb.toString();
}
/**
* Returns the map key for the flip image of a card, without any suffixes for the image size.
*/
private static String getKeyAlternateName(CardView card, String alternateName) {
StringBuilder sb = new StringBuilder(alternateName).append("#");
sb.append(card.getExpansionSetCode()).append("#");
sb.append(card.getType()).append("#");
sb.append(card.getCardNumber()).append("#");
sb.append(card.getTokenSetCode() == null ? "":card.getTokenSetCode());
return sb.toString();
} }
// /**
// * Returns the map key for the flip image of a card, without any suffixes for the image size.
// */
// private static String getKeyAlternateName(CardView card, String alternateName) {
// return alternateName + "#" + card.getExpansionSetCode() + "#" +card.getType()+ "#" + card.getCardNumber() + "#"
// + (card.getTokenSetCode() == null ? "":card.getTokenSetCode());
// }
/** /**
* Load image from file * Load image from file
* *
* @param file * @param file file to load image from
* file to load image from
* @return {@link BufferedImage} * @return {@link BufferedImage}
*/ */
public static BufferedImage loadImage(TFile file) { public static BufferedImage loadImage(TFile file) {
@ -297,7 +274,7 @@ public class ImageCache {
ImageIO.write(image, "jpg", outputStream); ImageIO.write(image, "jpg", outputStream);
} }
} catch (IOException e) { } catch (IOException e) {
log.error(e,e); log.error(e, e);
imageFile.delete(); imageFile.delete();
} }
return image; return image;
@ -305,6 +282,7 @@ public class ImageCache {
/** /**
* Returns an image scaled to the size given * Returns an image scaled to the size given
*
* @param original * @param original
* @return * @return
*/ */
@ -344,6 +322,7 @@ public class ImageCache {
/** /**
* Returns an image scaled to the size appropriate for the card picture * Returns an image scaled to the size appropriate for the card picture
* panel * panel
*
* @param original * @param original
* @param sizeNeed * @param sizeNeed
* @return * @return
@ -356,6 +335,7 @@ public class ImageCache {
/** /**
* Returns the image appropriate to display the card in the picture panel * Returns the image appropriate to display the card in the picture panel
*
* @param card * @param card
* @param width * @param width
* @param height * @param height
@ -365,11 +345,7 @@ public class ImageCache {
if (Constants.THUMBNAIL_SIZE_FULL.width + 10 > width) { if (Constants.THUMBNAIL_SIZE_FULL.width + 10 > width) {
return getThumbnail(card); return getThumbnail(card);
} }
String key = getKey(card); String key = getKey(card, card.getName(), "");
if (card.getUsesVariousArt()) {
key += "#usesVariousArt";
}
// log.warn("getImage: " + key);
BufferedImage original = getImage(key); BufferedImage original = getImage(key);
if (original == null) { if (original == null) {
log.debug(key + " not found"); log.debug(key + " not found");

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.7 KiB

After

Width:  |  Height:  |  Size: 6.3 KiB

Before After
Before After

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.4 KiB

After

Width:  |  Height:  |  Size: 7.4 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.3 KiB

After

Width:  |  Height:  |  Size: 7.4 KiB

Before After
Before After

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.4 KiB

After

Width:  |  Height:  |  Size: 7 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 5.9 KiB

After

Width:  |  Height:  |  Size: 5.9 KiB

Before After
Before After

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.4 KiB

After

Width:  |  Height:  |  Size: 8.8 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.6 KiB

After

Width:  |  Height:  |  Size: 7.5 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 6 KiB

After

Width:  |  Height:  |  Size: 6 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.9 KiB

After

Width:  |  Height:  |  Size: 7.4 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 9.5 KiB

After

Width:  |  Height:  |  Size: 9.5 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 8.5 KiB

After

Width:  |  Height:  |  Size: 8.5 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 9.2 KiB

After

Width:  |  Height:  |  Size: 9.2 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7 KiB

After

Width:  |  Height:  |  Size: 9.3 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9 KiB

After

Width:  |  Height:  |  Size: 10 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 11 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 5.6 KiB

After

Width:  |  Height:  |  Size: 5.6 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

View file

@ -1,5 +1,17 @@
#Generate|TOK:BFZ|Eldrazi Scion| #Generate|TOK:BFZ|Dragon|
#Generate|TOK:BFZ|Elemental| #Generate|TOK:BFZ|Eldrazi|
#Generate|TOK:BFZ|Eldrazi Scion 1|
#Generate|TOK:BFZ|Eldrazi Scion 2|
#Generate|TOK:BFZ|Eldrazi Scion 3|
#Generate|TOK:BFZ|Elemental 1|
#Generate|TOK:BFZ|Elemental 2|
#Generate|TOK:BFZ|Knight Ally|
#Generate|TOK:BFZ|Kor Ally|
#Generate|TOK:BFZ|Octopus|
#Generate|TOK:BFZ|Plant|
#|Generate|EMBLEM!:BFZ|Emblem Gideon, Ally of Zendikar|
#|Generate|EMBLEM!:BFZ|Emblem Kiora, Master of the Depths|
#|Generate|EMBLEM!:BFZ|Emblem Ob Nixilis Reignited|
#Generate|TOK:DDP|Eldrazi Spawn 1| #Generate|TOK:DDP|Eldrazi Spawn 1|
#Generate|TOK:DDP|Eldrazi Spawn 2| #Generate|TOK:DDP|Eldrazi Spawn 2|

View file

@ -64,6 +64,6 @@ ddd=gvl
unh=uh unh=uh
dde=pvc dde=pvc
# Remove setname as soon as the images can be downloaded # Remove setname as soon as the images can be downloaded
ignore.urls=TOK,V15,DDP ignore.urls=TOK, OGW
# sets ordered by release time (newest goes first) # sets ordered by release time (newest goes first)
token.lookup.order=DDP,BFZ,FVD,FVE,FVL,FVR,V12,V13,V14,V15,TPR,MPRP,DD3,DDO,ORI,MM2,PTC,DTK,FRF,KTK,M15,VMA,CNS,JOU,BNG,THS,DDL,M14,MMA,DGM,GTC,RTR,M13,AVR,DDI,DKA,ISD,M12,NPH,MBS,SOM,M11,ROE,DDE,WWK,ZEN,M10,GVL,ARB,DVD,CFX,JVC,ALA,EVE,SHM,EVG,MOR,LRW,10E,CLS,CHK,GRC token.lookup.order=OGW,EXP,DDP,BFZ,FVD,FVE,FVL,FVR,V12,V13,V14,V15,TPR,MPRP,DD3,DDO,ORI,MM2,PTC,DTK,FRF,KTK,M15,VMA,CNS,JOU,BNG,THS,DDL,M14,MMA,DGM,GTC,RTR,M13,AVR,DDI,DKA,ISD,M12,NPH,MBS,SOM,M11,ROE,DDE,WWK,ZEN,M10,GVL,ARB,DVD,CFX,JVC,ALA,EVE,SHM,EVG,MOR,LRW,10E,CLS,CHK,GRC

View file

@ -67,6 +67,10 @@ public final class Constants {
public static final double SCALE_FACTOR = 0.5; public static final double SCALE_FACTOR = 0.5;
public static final int MIN_AVATAR_ID = 10;
public static final int MAX_AVATAR_ID = 32;
public static final int DEFAULT_AVATAR_ID = 10;
/** /**
* Time each player has during the game to play using his\her priority. * Time each player has during the game to play using his\her priority.
*/ */

View file

@ -1,5 +1,7 @@
package mage.utils; package mage.utils;
import java.util.List;
import mage.ObjectColor;
import mage.cards.Card; import mage.cards.Card;
import mage.cards.MagePermanent; import mage.cards.MagePermanent;
import mage.constants.CardType; import mage.constants.CardType;
@ -13,6 +15,12 @@ import mage.view.CardView;
*/ */
public class CardUtil { public class CardUtil {
private static final String regexBlack = ".*\\x7b.{0,2}B.{0,2}\\x7d.*";
private static final String regexBlue = ".*\\x7b.{0,2}U.{0,2}\\x7d.*";
private static final String regexRed = ".*\\x7b.{0,2}R.{0,2}\\x7d.*";
private static final String regexGreen = ".*\\x7b.{0,2}G.{0,2}\\x7d.*";
private static final String regexWhite = ".*\\x7b.{0,2}W.{0,2}\\x7d.*";
public static boolean isCreature(CardView card) { public static boolean isCreature(CardView card) {
return is(card, CardType.CREATURE); return is(card, CardType.CREATURE);
} }
@ -48,4 +56,34 @@ public class CardUtil {
public static boolean isLand(Card card) { public static boolean isLand(Card card) {
return card.getCardType().contains(CardType.LAND); return card.getCardType().contains(CardType.LAND);
} }
public static int getColorIdentitySortValue(List<String> manaCost, ObjectColor originalColor, List<String> rules) {
ObjectColor color = new ObjectColor(originalColor);
for (String rule : rules) {
rule = rule.replaceAll("(?i)<i.*?</i>", ""); // Ignoring reminder text in italic
if (rule.matches(regexBlack)) {
color.setBlack(true);
}
if (rule.matches(regexBlue)) {
color.setBlue(true);
}
if (rule.matches(regexGreen)) {
color.setGreen(true);
}
if (rule.matches(regexRed)) {
color.setRed(true);
}
if (rule.matches(regexWhite)) {
color.setWhite(true);
}
}
int hash = 3;
hash = 23 * hash + (color.isWhite() || manaCost.contains("{W}") ? 1 : 0);
hash = 23 * hash + (color.isBlue() || manaCost.contains("{U}") ? 1 : 0);
hash = 23 * hash + (color.isBlack() || manaCost.contains("{B}") ? 1 : 0);
hash = 23 * hash + (color.isRed() || manaCost.contains("{R}") ? 1 : 0);
hash = 23 * hash + (color.isGreen() || manaCost.contains("{G}") ? 1 : 0);
return hash;
}
} }

View file

@ -41,7 +41,7 @@ public class MageVersion implements Serializable, Comparable<MageVersion> {
public final static int MAGE_VERSION_MAJOR = 1; public final static int MAGE_VERSION_MAJOR = 1;
public final static int MAGE_VERSION_MINOR = 4; public final static int MAGE_VERSION_MINOR = 4;
public final static int MAGE_VERSION_PATCH = 4; public final static int MAGE_VERSION_PATCH = 4;
public final static String MAGE_VERSION_MINOR_PATCH = "v3"; public final static String MAGE_VERSION_MINOR_PATCH = "v7";
public final static String MAGE_VERSION_INFO = ""; public final static String MAGE_VERSION_INFO = "";
private final int major; private final int major;

View file

@ -485,7 +485,12 @@ public class HumanPlayer extends PlayerImpl {
public boolean chooseTarget(Outcome outcome, Cards cards, TargetCard target, Ability source, Game game) { public boolean chooseTarget(Outcome outcome, Cards cards, TargetCard target, Ability source, Game game) {
updateGameStatePriority("chooseTarget(5)", game); updateGameStatePriority("chooseTarget(5)", game);
while (!abort) { while (!abort) {
boolean required = target.isRequired(source); boolean required;
if (target.isRequiredExplicitlySet()) {
required = target.isRequired();
} else {
required = target.isRequired(source);
}
// if there is no cards to select from, then add possibility to cancel choosing action // if there is no cards to select from, then add possibility to cancel choosing action
if (cards == null) { if (cards == null) {
required = false; required = false;

View file

@ -638,6 +638,5 @@ public class MTGOLegacyCube extends DraftCube {
cubeCards.add(new CardIdentity("Yosei, the Morning Star","")); cubeCards.add(new CardIdentity("Yosei, the Morning Star",""));
cubeCards.add(new CardIdentity("Young Pyromancer","")); cubeCards.add(new CardIdentity("Young Pyromancer",""));
cubeCards.add(new CardIdentity("Zealous Conscripts","")); cubeCards.add(new CardIdentity("Zealous Conscripts",""));
} }
} }

View file

@ -34,10 +34,10 @@ import mage.game.draft.DraftCube;
* @author fireshoes * @author fireshoes
*/ */
public class MTGOLegacyCube2015 extends DraftCube { public class MTGOLegacyCubeMarch2015 extends DraftCube {
public MTGOLegacyCube2015() { public MTGOLegacyCubeMarch2015() {
super("MTGO Legacy Cube 2015 (600 cards)"); super("MTGO Legacy Cube March 2015 (600 cards)");
cubeCards.add(new DraftCube.CardIdentity("Accorder Paladin","")); cubeCards.add(new DraftCube.CardIdentity("Accorder Paladin",""));
cubeCards.add(new DraftCube.CardIdentity("Abrupt Decay","")); cubeCards.add(new DraftCube.CardIdentity("Abrupt Decay",""));
cubeCards.add(new DraftCube.CardIdentity("Acidic Slime","")); cubeCards.add(new DraftCube.CardIdentity("Acidic Slime",""));
@ -88,6 +88,7 @@ public class MTGOLegacyCube2015 extends DraftCube {
cubeCards.add(new DraftCube.CardIdentity("Bitterblossom","")); cubeCards.add(new DraftCube.CardIdentity("Bitterblossom",""));
cubeCards.add(new DraftCube.CardIdentity("Blade of the Bloodchief","")); cubeCards.add(new DraftCube.CardIdentity("Blade of the Bloodchief",""));
cubeCards.add(new DraftCube.CardIdentity("Blade Splicer","")); cubeCards.add(new DraftCube.CardIdentity("Blade Splicer",""));
cubeCards.add(new DraftCube.CardIdentity("Blood Artist",""));
cubeCards.add(new DraftCube.CardIdentity("Blood Crypt","")); cubeCards.add(new DraftCube.CardIdentity("Blood Crypt",""));
cubeCards.add(new DraftCube.CardIdentity("Bloodbraid Elf","")); cubeCards.add(new DraftCube.CardIdentity("Bloodbraid Elf",""));
cubeCards.add(new DraftCube.CardIdentity("Bloodcrazed Neonate","")); cubeCards.add(new DraftCube.CardIdentity("Bloodcrazed Neonate",""));
@ -95,13 +96,13 @@ public class MTGOLegacyCube2015 extends DraftCube {
cubeCards.add(new DraftCube.CardIdentity("Bloodline Keeper","")); cubeCards.add(new DraftCube.CardIdentity("Bloodline Keeper",""));
cubeCards.add(new DraftCube.CardIdentity("Bloodlord of Vaasgoth","")); cubeCards.add(new DraftCube.CardIdentity("Bloodlord of Vaasgoth",""));
cubeCards.add(new DraftCube.CardIdentity("Bloodstained Mire","")); cubeCards.add(new DraftCube.CardIdentity("Bloodstained Mire",""));
cubeCards.add(new DraftCube.CardIdentity("Bloodthrone Vampire",""));
cubeCards.add(new DraftCube.CardIdentity("Bogardan Hellkite","")); cubeCards.add(new DraftCube.CardIdentity("Bogardan Hellkite",""));
cubeCards.add(new DraftCube.CardIdentity("Bone Shredder","")); cubeCards.add(new DraftCube.CardIdentity("Bone Shredder",""));
cubeCards.add(new DraftCube.CardIdentity("Bonesplitter","")); cubeCards.add(new DraftCube.CardIdentity("Bonesplitter",""));
cubeCards.add(new DraftCube.CardIdentity("Bonfire of the Damned","")); cubeCards.add(new DraftCube.CardIdentity("Bonfire of the Damned",""));
cubeCards.add(new DraftCube.CardIdentity("Boon Satyr","")); cubeCards.add(new DraftCube.CardIdentity("Boon Satyr",""));
cubeCards.add(new DraftCube.CardIdentity("Boros Charm","")); cubeCards.add(new DraftCube.CardIdentity("Boros Charm",""));
cubeCards.add(new DraftCube.CardIdentity("Boros Elite",""));
cubeCards.add(new DraftCube.CardIdentity("Boros Reckoner","")); cubeCards.add(new DraftCube.CardIdentity("Boros Reckoner",""));
cubeCards.add(new DraftCube.CardIdentity("Brago, King Eternal","")); cubeCards.add(new DraftCube.CardIdentity("Brago, King Eternal",""));
cubeCards.add(new DraftCube.CardIdentity("Brainstorm","")); cubeCards.add(new DraftCube.CardIdentity("Brainstorm",""));
@ -113,7 +114,6 @@ public class MTGOLegacyCube2015 extends DraftCube {
cubeCards.add(new DraftCube.CardIdentity("Burst Lightning","")); cubeCards.add(new DraftCube.CardIdentity("Burst Lightning",""));
cubeCards.add(new DraftCube.CardIdentity("Call of the Herd","")); cubeCards.add(new DraftCube.CardIdentity("Call of the Herd",""));
cubeCards.add(new DraftCube.CardIdentity("Captivating Vampire","")); cubeCards.add(new DraftCube.CardIdentity("Captivating Vampire",""));
cubeCards.add(new DraftCube.CardIdentity("Carnophage",""));
cubeCards.add(new DraftCube.CardIdentity("Caves of Koilos","")); cubeCards.add(new DraftCube.CardIdentity("Caves of Koilos",""));
cubeCards.add(new DraftCube.CardIdentity("Chain Lightning","")); cubeCards.add(new DraftCube.CardIdentity("Chain Lightning",""));
cubeCards.add(new DraftCube.CardIdentity("Chainer's Edict","")); cubeCards.add(new DraftCube.CardIdentity("Chainer's Edict",""));
@ -257,7 +257,6 @@ public class MTGOLegacyCube2015 extends DraftCube {
cubeCards.add(new DraftCube.CardIdentity("Glacial Fortress","")); cubeCards.add(new DraftCube.CardIdentity("Glacial Fortress",""));
cubeCards.add(new DraftCube.CardIdentity("Glen Elendra Archmage","")); cubeCards.add(new DraftCube.CardIdentity("Glen Elendra Archmage",""));
cubeCards.add(new DraftCube.CardIdentity("Glorious Anthem","")); cubeCards.add(new DraftCube.CardIdentity("Glorious Anthem",""));
cubeCards.add(new DraftCube.CardIdentity("Gnarled Scarhide",""));
cubeCards.add(new DraftCube.CardIdentity("Go for the Throat","")); cubeCards.add(new DraftCube.CardIdentity("Go for the Throat",""));
cubeCards.add(new DraftCube.CardIdentity("Goblin Bombardment","")); cubeCards.add(new DraftCube.CardIdentity("Goblin Bombardment",""));
cubeCards.add(new DraftCube.CardIdentity("Goblin Bushwhacker","")); cubeCards.add(new DraftCube.CardIdentity("Goblin Bushwhacker",""));
@ -281,6 +280,7 @@ public class MTGOLegacyCube2015 extends DraftCube {
cubeCards.add(new DraftCube.CardIdentity("Hallowed Spiritkeeper","")); cubeCards.add(new DraftCube.CardIdentity("Hallowed Spiritkeeper",""));
cubeCards.add(new DraftCube.CardIdentity("Hammer of Purphoros","")); cubeCards.add(new DraftCube.CardIdentity("Hammer of Purphoros",""));
cubeCards.add(new DraftCube.CardIdentity("Harmonize","")); cubeCards.add(new DraftCube.CardIdentity("Harmonize",""));
cubeCards.add(new DraftCube.CardIdentity("Harrow",""));
cubeCards.add(new DraftCube.CardIdentity("Hellrider","")); cubeCards.add(new DraftCube.CardIdentity("Hellrider",""));
cubeCards.add(new DraftCube.CardIdentity("Herald of Torment","")); cubeCards.add(new DraftCube.CardIdentity("Herald of Torment",""));
cubeCards.add(new DraftCube.CardIdentity("Hero of Bladehold","")); cubeCards.add(new DraftCube.CardIdentity("Hero of Bladehold",""));
@ -359,6 +359,7 @@ public class MTGOLegacyCube2015 extends DraftCube {
cubeCards.add(new DraftCube.CardIdentity("Mana Leak","")); cubeCards.add(new DraftCube.CardIdentity("Mana Leak",""));
cubeCards.add(new DraftCube.CardIdentity("Mana Tithe","")); cubeCards.add(new DraftCube.CardIdentity("Mana Tithe",""));
cubeCards.add(new DraftCube.CardIdentity("Manic Vandal","")); cubeCards.add(new DraftCube.CardIdentity("Manic Vandal",""));
cubeCards.add(new DraftCube.CardIdentity("Mardu Woe Reaper",""));
cubeCards.add(new DraftCube.CardIdentity("Marsh Flats","")); cubeCards.add(new DraftCube.CardIdentity("Marsh Flats",""));
cubeCards.add(new DraftCube.CardIdentity("Martial Coup","")); cubeCards.add(new DraftCube.CardIdentity("Martial Coup",""));
cubeCards.add(new DraftCube.CardIdentity("Massacre Wurm","")); cubeCards.add(new DraftCube.CardIdentity("Massacre Wurm",""));
@ -382,7 +383,6 @@ public class MTGOLegacyCube2015 extends DraftCube {
cubeCards.add(new DraftCube.CardIdentity("Monastery Swiftspear","")); cubeCards.add(new DraftCube.CardIdentity("Monastery Swiftspear",""));
cubeCards.add(new DraftCube.CardIdentity("Mother of Runes","")); cubeCards.add(new DraftCube.CardIdentity("Mother of Runes",""));
cubeCards.add(new DraftCube.CardIdentity("Mox Diamond","")); cubeCards.add(new DraftCube.CardIdentity("Mox Diamond",""));
cubeCards.add(new DraftCube.CardIdentity("Mulch",""));
cubeCards.add(new DraftCube.CardIdentity("Mulldrifter","")); cubeCards.add(new DraftCube.CardIdentity("Mulldrifter",""));
cubeCards.add(new DraftCube.CardIdentity("Murderous Cut","")); cubeCards.add(new DraftCube.CardIdentity("Murderous Cut",""));
cubeCards.add(new DraftCube.CardIdentity("Mutavault","")); cubeCards.add(new DraftCube.CardIdentity("Mutavault",""));
@ -638,6 +638,5 @@ public class MTGOLegacyCube2015 extends DraftCube {
cubeCards.add(new DraftCube.CardIdentity("Yosei, the Morning Star","")); cubeCards.add(new DraftCube.CardIdentity("Yosei, the Morning Star",""));
cubeCards.add(new DraftCube.CardIdentity("Young Pyromancer","")); cubeCards.add(new DraftCube.CardIdentity("Young Pyromancer",""));
cubeCards.add(new DraftCube.CardIdentity("Zealous Conscripts","")); cubeCards.add(new DraftCube.CardIdentity("Zealous Conscripts",""));
} }
} }

View file

@ -0,0 +1,642 @@
/*
* 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 fireshoes
*/
public class MTGOLegacyCubeSeptember2015 extends DraftCube {
public MTGOLegacyCubeSeptember2015() {
super("MTGO Legacy Cube September 2015 (600 cards)");
cubeCards.add(new DraftCube.CardIdentity("Abbot of Keral Keep",""));
cubeCards.add(new DraftCube.CardIdentity("Abhorrent Overlord",""));
cubeCards.add(new DraftCube.CardIdentity("Abrupt Decay",""));
cubeCards.add(new DraftCube.CardIdentity("Abyssal Persecutor",""));
cubeCards.add(new DraftCube.CardIdentity("Accorder Paladin",""));
cubeCards.add(new DraftCube.CardIdentity("Acidic Slime",""));
cubeCards.add(new DraftCube.CardIdentity("Act of Aggression",""));
cubeCards.add(new DraftCube.CardIdentity("Adarkar Wastes",""));
cubeCards.add(new DraftCube.CardIdentity("AEther Vial",""));
cubeCards.add(new DraftCube.CardIdentity("Ainok Survivalist",""));
cubeCards.add(new DraftCube.CardIdentity("Ajani Goldmane",""));
cubeCards.add(new DraftCube.CardIdentity("Ajani Vengeant",""));
cubeCards.add(new DraftCube.CardIdentity("Ajani, Caller of the Pride",""));
cubeCards.add(new DraftCube.CardIdentity("Akroma's Vengeance",""));
cubeCards.add(new DraftCube.CardIdentity("Ancestral Vision",""));
cubeCards.add(new DraftCube.CardIdentity("Ancient Tomb",""));
cubeCards.add(new DraftCube.CardIdentity("Angel of Serenity",""));
cubeCards.add(new DraftCube.CardIdentity("Angelic Destiny",""));
cubeCards.add(new DraftCube.CardIdentity("Anger of the Gods",""));
cubeCards.add(new DraftCube.CardIdentity("Animate Dead",""));
cubeCards.add(new DraftCube.CardIdentity("Arbor Elf",""));
cubeCards.add(new DraftCube.CardIdentity("Arc Trail",""));
cubeCards.add(new DraftCube.CardIdentity("Archangel of Thune",""));
cubeCards.add(new DraftCube.CardIdentity("Arid Mesa",""));
cubeCards.add(new DraftCube.CardIdentity("Armageddon",""));
cubeCards.add(new DraftCube.CardIdentity("Ashcloud Phoenix",""));
cubeCards.add(new DraftCube.CardIdentity("Ashen Rider",""));
cubeCards.add(new DraftCube.CardIdentity("Ashenmoor Gouger",""));
cubeCards.add(new DraftCube.CardIdentity("Ashiok, Nightmare Weaver",""));
cubeCards.add(new DraftCube.CardIdentity("Assemble the Legion",""));
cubeCards.add(new DraftCube.CardIdentity("Attrition",""));
cubeCards.add(new DraftCube.CardIdentity("Augur of Bolas",""));
cubeCards.add(new DraftCube.CardIdentity("Avacyn's Pilgrim",""));
cubeCards.add(new DraftCube.CardIdentity("Avalanche Riders",""));
cubeCards.add(new DraftCube.CardIdentity("Avenger of Zendikar",""));
cubeCards.add(new DraftCube.CardIdentity("Badlands",""));
cubeCards.add(new DraftCube.CardIdentity("Baleful Strix",""));
cubeCards.add(new DraftCube.CardIdentity("Banefire",""));
cubeCards.add(new DraftCube.CardIdentity("Baneslayer Angel",""));
cubeCards.add(new DraftCube.CardIdentity("Banisher Priest",""));
cubeCards.add(new DraftCube.CardIdentity("Banishing Light",""));
cubeCards.add(new DraftCube.CardIdentity("Basalt Monolith",""));
cubeCards.add(new DraftCube.CardIdentity("Basilisk Collar",""));
cubeCards.add(new DraftCube.CardIdentity("Batterskull",""));
cubeCards.add(new DraftCube.CardIdentity("Battlefield Forge",""));
cubeCards.add(new DraftCube.CardIdentity("Bayou",""));
cubeCards.add(new DraftCube.CardIdentity("Beast Within",""));
cubeCards.add(new DraftCube.CardIdentity("Beetleback Chief",""));
cubeCards.add(new DraftCube.CardIdentity("Birds of Paradise",""));
cubeCards.add(new DraftCube.CardIdentity("Birthing Pod",""));
cubeCards.add(new DraftCube.CardIdentity("Bitterblossom",""));
cubeCards.add(new DraftCube.CardIdentity("Blade Splicer",""));
cubeCards.add(new DraftCube.CardIdentity("Blood Crypt",""));
cubeCards.add(new DraftCube.CardIdentity("Bloodbraid Elf",""));
cubeCards.add(new DraftCube.CardIdentity("Bloodghast",""));
cubeCards.add(new DraftCube.CardIdentity("Bloodsoaked Champion",""));
cubeCards.add(new DraftCube.CardIdentity("Bloodstained Mire",""));
cubeCards.add(new DraftCube.CardIdentity("Bogardan Hellkite",""));
cubeCards.add(new DraftCube.CardIdentity("Bone Shredder",""));
cubeCards.add(new DraftCube.CardIdentity("Bonesplitter",""));
cubeCards.add(new DraftCube.CardIdentity("Bonfire of the Damned",""));
cubeCards.add(new DraftCube.CardIdentity("Boros Charm",""));
cubeCards.add(new DraftCube.CardIdentity("Boros Reckoner",""));
cubeCards.add(new DraftCube.CardIdentity("Brago, King Eternal",""));
cubeCards.add(new DraftCube.CardIdentity("Brainstorm",""));
cubeCards.add(new DraftCube.CardIdentity("Breeding Pool",""));
cubeCards.add(new DraftCube.CardIdentity("Brimaz, King of Oreskos",""));
cubeCards.add(new DraftCube.CardIdentity("Brimstone Volley",""));
cubeCards.add(new DraftCube.CardIdentity("Brushland",""));
cubeCards.add(new DraftCube.CardIdentity("Buried Alive",""));
cubeCards.add(new DraftCube.CardIdentity("Burst Lightning",""));
cubeCards.add(new DraftCube.CardIdentity("Careful Study",""));
cubeCards.add(new DraftCube.CardIdentity("Carrion Feeder",""));
cubeCards.add(new DraftCube.CardIdentity("Caves of Koilos",""));
cubeCards.add(new DraftCube.CardIdentity("Chain Lightning",""));
cubeCards.add(new DraftCube.CardIdentity("Chainer's Edict",""));
cubeCards.add(new DraftCube.CardIdentity("Chameleon Colossus",""));
cubeCards.add(new DraftCube.CardIdentity("Champion of the Parish",""));
cubeCards.add(new DraftCube.CardIdentity("Chandra Nalaar",""));
cubeCards.add(new DraftCube.CardIdentity("Chandra, Fire of Kaladesh",""));
cubeCards.add(new DraftCube.CardIdentity("Chandra, Pyromaster",""));
cubeCards.add(new DraftCube.CardIdentity("Chandra's Phoenix",""));
cubeCards.add(new DraftCube.CardIdentity("Char",""));
cubeCards.add(new DraftCube.CardIdentity("Chasm Skulker",""));
cubeCards.add(new DraftCube.CardIdentity("Chord of Calling",""));
cubeCards.add(new DraftCube.CardIdentity("Chromatic Lantern",""));
cubeCards.add(new DraftCube.CardIdentity("Chrome Mox",""));
cubeCards.add(new DraftCube.CardIdentity("City of Brass",""));
cubeCards.add(new DraftCube.CardIdentity("Clifftop Retreat",""));
cubeCards.add(new DraftCube.CardIdentity("Cloudgoat Ranger",""));
cubeCards.add(new DraftCube.CardIdentity("Coalition Relic",""));
cubeCards.add(new DraftCube.CardIdentity("Collected Company",""));
cubeCards.add(new DraftCube.CardIdentity("Compulsive Research",""));
cubeCards.add(new DraftCube.CardIdentity("Condemn",""));
cubeCards.add(new DraftCube.CardIdentity("Condescend",""));
cubeCards.add(new DraftCube.CardIdentity("Consecrated Sphinx",""));
cubeCards.add(new DraftCube.CardIdentity("Control Magic",""));
cubeCards.add(new DraftCube.CardIdentity("Corpse Dance",""));
cubeCards.add(new DraftCube.CardIdentity("Council's Judgment",""));
cubeCards.add(new DraftCube.CardIdentity("Counterspell",""));
cubeCards.add(new DraftCube.CardIdentity("Courser of Kruphix",""));
cubeCards.add(new DraftCube.CardIdentity("Crater's Claws",""));
cubeCards.add(new DraftCube.CardIdentity("Craterhoof Behemoth",""));
cubeCards.add(new DraftCube.CardIdentity("Crusade",""));
cubeCards.add(new DraftCube.CardIdentity("Crux of Fate",""));
cubeCards.add(new DraftCube.CardIdentity("Cryptic Command",""));
cubeCards.add(new DraftCube.CardIdentity("Cultivate",""));
cubeCards.add(new DraftCube.CardIdentity("Cunning Sparkmage",""));
cubeCards.add(new DraftCube.CardIdentity("Cursed Scroll",""));
cubeCards.add(new DraftCube.CardIdentity("Cyclonic Rift",""));
cubeCards.add(new DraftCube.CardIdentity("Damnation",""));
cubeCards.add(new DraftCube.CardIdentity("Dance of the Dead",""));
cubeCards.add(new DraftCube.CardIdentity("Dark Confidant",""));
cubeCards.add(new DraftCube.CardIdentity("Dark Depths",""));
cubeCards.add(new DraftCube.CardIdentity("Dark Petition",""));
cubeCards.add(new DraftCube.CardIdentity("Dark Ritual",""));
cubeCards.add(new DraftCube.CardIdentity("Day of Judgment",""));
cubeCards.add(new DraftCube.CardIdentity("Daze",""));
cubeCards.add(new DraftCube.CardIdentity("Deathrite Shaman",""));
cubeCards.add(new DraftCube.CardIdentity("Deceiver Exarch",""));
cubeCards.add(new DraftCube.CardIdentity("Deep Analysis",""));
cubeCards.add(new DraftCube.CardIdentity("Delver of Secrets",""));
cubeCards.add(new DraftCube.CardIdentity("Demonic Pact",""));
cubeCards.add(new DraftCube.CardIdentity("Den Protector",""));
cubeCards.add(new DraftCube.CardIdentity("Deranged Hermit",""));
cubeCards.add(new DraftCube.CardIdentity("Desecration Demon",""));
cubeCards.add(new DraftCube.CardIdentity("Devil's Play",""));
cubeCards.add(new DraftCube.CardIdentity("Diabolic Servitude",""));
cubeCards.add(new DraftCube.CardIdentity("Dictate of Heliod",""));
cubeCards.add(new DraftCube.CardIdentity("Dig Through Time",""));
cubeCards.add(new DraftCube.CardIdentity("Disciple of Bolas",""));
cubeCards.add(new DraftCube.CardIdentity("Disfigure",""));
cubeCards.add(new DraftCube.CardIdentity("Dismember",""));
cubeCards.add(new DraftCube.CardIdentity("Dismiss",""));
cubeCards.add(new DraftCube.CardIdentity("Dissipate",""));
cubeCards.add(new DraftCube.CardIdentity("Dissolve",""));
cubeCards.add(new DraftCube.CardIdentity("Divinity of Pride",""));
cubeCards.add(new DraftCube.CardIdentity("Domri Rade",""));
cubeCards.add(new DraftCube.CardIdentity("Doom Blade",""));
cubeCards.add(new DraftCube.CardIdentity("Doomed Necromancer",""));
cubeCards.add(new DraftCube.CardIdentity("Dragon Fodder",""));
cubeCards.add(new DraftCube.CardIdentity("Dragonlord Atarka",""));
cubeCards.add(new DraftCube.CardIdentity("Dragonlord Dromoka",""));
cubeCards.add(new DraftCube.CardIdentity("Dragonlord Ojutai",""));
cubeCards.add(new DraftCube.CardIdentity("Dragonlord Silumgar",""));
cubeCards.add(new DraftCube.CardIdentity("Dragonskull Summit",""));
cubeCards.add(new DraftCube.CardIdentity("Dread Return",""));
cubeCards.add(new DraftCube.CardIdentity("Dreadbore",""));
cubeCards.add(new DraftCube.CardIdentity("Dromoka's Command",""));
cubeCards.add(new DraftCube.CardIdentity("Drowned Catacomb",""));
cubeCards.add(new DraftCube.CardIdentity("Dualcaster Mage",""));
cubeCards.add(new DraftCube.CardIdentity("Dungeon Geists",""));
cubeCards.add(new DraftCube.CardIdentity("Duplicant",""));
cubeCards.add(new DraftCube.CardIdentity("Duress",""));
cubeCards.add(new DraftCube.CardIdentity("Edric, Spymaster of Trest",""));
cubeCards.add(new DraftCube.CardIdentity("Eight-and-a-Half-Tails",""));
cubeCards.add(new DraftCube.CardIdentity("Electrolyze",""));
cubeCards.add(new DraftCube.CardIdentity("Elesh Norn, Grand Cenobite",""));
cubeCards.add(new DraftCube.CardIdentity("Elite Vanguard",""));
cubeCards.add(new DraftCube.CardIdentity("Elixir of Immortality",""));
cubeCards.add(new DraftCube.CardIdentity("Elspeth Tirel",""));
cubeCards.add(new DraftCube.CardIdentity("Elspeth, Knight-Errant",""));
cubeCards.add(new DraftCube.CardIdentity("Elspeth, Sun's Champion",""));
cubeCards.add(new DraftCube.CardIdentity("Elves of Deep Shadow",""));
cubeCards.add(new DraftCube.CardIdentity("Elvish Mystic",""));
cubeCards.add(new DraftCube.CardIdentity("Emeria Angel",""));
cubeCards.add(new DraftCube.CardIdentity("Emrakul, the Aeons Torn",""));
cubeCards.add(new DraftCube.CardIdentity("Entomb",""));
cubeCards.add(new DraftCube.CardIdentity("Entreat the Angels",""));
cubeCards.add(new DraftCube.CardIdentity("Erebos, God of the Dead",""));
cubeCards.add(new DraftCube.CardIdentity("Erebos's Titan",""));
cubeCards.add(new DraftCube.CardIdentity("Essence Scatter",""));
cubeCards.add(new DraftCube.CardIdentity("Eternal Dragon",""));
cubeCards.add(new DraftCube.CardIdentity("Eternal Witness",""));
cubeCards.add(new DraftCube.CardIdentity("Eureka",""));
cubeCards.add(new DraftCube.CardIdentity("Everflowing Chalice",""));
cubeCards.add(new DraftCube.CardIdentity("Exalted Angel",""));
cubeCards.add(new DraftCube.CardIdentity("Exhume",""));
cubeCards.add(new DraftCube.CardIdentity("Explore",""));
cubeCards.add(new DraftCube.CardIdentity("Exquisite Firecraft",""));
cubeCards.add(new DraftCube.CardIdentity("Fact or Fiction",""));
cubeCards.add(new DraftCube.CardIdentity("Faith's Fetters",""));
cubeCards.add(new DraftCube.CardIdentity("Falkenrath Aristocrat",""));
cubeCards.add(new DraftCube.CardIdentity("Farseek",""));
cubeCards.add(new DraftCube.CardIdentity("Fauna Shaman",""));
cubeCards.add(new DraftCube.CardIdentity("Fertile Ground",""));
cubeCards.add(new DraftCube.CardIdentity("Fiend Hunter",""));
cubeCards.add(new DraftCube.CardIdentity("Fire // Ice",""));
cubeCards.add(new DraftCube.CardIdentity("Firebolt",""));
cubeCards.add(new DraftCube.CardIdentity("Firefist Striker",""));
cubeCards.add(new DraftCube.CardIdentity("Flame Slash",""));
cubeCards.add(new DraftCube.CardIdentity("Flametongue Kavu",""));
cubeCards.add(new DraftCube.CardIdentity("Flamewake Phoenix",""));
cubeCards.add(new DraftCube.CardIdentity("Fleecemane Lion",""));
cubeCards.add(new DraftCube.CardIdentity("Flickerwisp",""));
cubeCards.add(new DraftCube.CardIdentity("Flooded Strand",""));
cubeCards.add(new DraftCube.CardIdentity("Forbid",""));
cubeCards.add(new DraftCube.CardIdentity("Forbidden Alchemy",""));
cubeCards.add(new DraftCube.CardIdentity("Force of Will",""));
cubeCards.add(new DraftCube.CardIdentity("Force Spike",""));
cubeCards.add(new DraftCube.CardIdentity("Forked Bolt",""));
cubeCards.add(new DraftCube.CardIdentity("Frenzied Goblin",""));
cubeCards.add(new DraftCube.CardIdentity("Freyalise, Llanowar's Fury",""));
cubeCards.add(new DraftCube.CardIdentity("Frontline Medic",""));
cubeCards.add(new DraftCube.CardIdentity("Frost Titan",""));
cubeCards.add(new DraftCube.CardIdentity("Future Sight",""));
cubeCards.add(new DraftCube.CardIdentity("Fyndhorn Elves",""));
cubeCards.add(new DraftCube.CardIdentity("Gaea's Cradle",""));
cubeCards.add(new DraftCube.CardIdentity("Garruk Relentless",""));
cubeCards.add(new DraftCube.CardIdentity("Garruk Wildspeaker",""));
cubeCards.add(new DraftCube.CardIdentity("Garruk, Apex Predator",""));
cubeCards.add(new DraftCube.CardIdentity("Garruk, Caller of Beasts",""));
cubeCards.add(new DraftCube.CardIdentity("Garruk, Primal Hunter",""));
cubeCards.add(new DraftCube.CardIdentity("Gatekeeper of Malakir",""));
cubeCards.add(new DraftCube.CardIdentity("Gather the Townsfolk",""));
cubeCards.add(new DraftCube.CardIdentity("Geist of Saint Traft",""));
cubeCards.add(new DraftCube.CardIdentity("Genesis Wave",""));
cubeCards.add(new DraftCube.CardIdentity("Geralf's Messenger",""));
cubeCards.add(new DraftCube.CardIdentity("Ghor-Clan Rampager",""));
cubeCards.add(new DraftCube.CardIdentity("Gideon Jura",""));
cubeCards.add(new DraftCube.CardIdentity("Gifts Ungiven",""));
cubeCards.add(new DraftCube.CardIdentity("Gilded Lotus",""));
cubeCards.add(new DraftCube.CardIdentity("Gilt-Leaf Winnower",""));
cubeCards.add(new DraftCube.CardIdentity("Gitaxian Probe",""));
cubeCards.add(new DraftCube.CardIdentity("Glacial Fortress",""));
cubeCards.add(new DraftCube.CardIdentity("Glen Elendra Archmage",""));
cubeCards.add(new DraftCube.CardIdentity("Glorious Anthem",""));
cubeCards.add(new DraftCube.CardIdentity("Go for the Throat",""));
cubeCards.add(new DraftCube.CardIdentity("Goblin Bushwhacker",""));
cubeCards.add(new DraftCube.CardIdentity("Goblin Glory Chaser",""));
cubeCards.add(new DraftCube.CardIdentity("Goblin Guide",""));
cubeCards.add(new DraftCube.CardIdentity("Goblin Rabblemaster",""));
cubeCards.add(new DraftCube.CardIdentity("Godless Shrine",""));
cubeCards.add(new DraftCube.CardIdentity("Gore-House Chainwalker",""));
cubeCards.add(new DraftCube.CardIdentity("Grafted Wargear",""));
cubeCards.add(new DraftCube.CardIdentity("Grave Titan",""));
cubeCards.add(new DraftCube.CardIdentity("Gravecrawler",""));
cubeCards.add(new DraftCube.CardIdentity("Gray Merchant of Asphodel",""));
cubeCards.add(new DraftCube.CardIdentity("Greater Gargadon",""));
cubeCards.add(new DraftCube.CardIdentity("Green Sun's Zenith",""));
cubeCards.add(new DraftCube.CardIdentity("Grim Lavamancer",""));
cubeCards.add(new DraftCube.CardIdentity("Griselbrand",""));
cubeCards.add(new DraftCube.CardIdentity("Hall of Triumph",""));
cubeCards.add(new DraftCube.CardIdentity("Hallowed Fountain",""));
cubeCards.add(new DraftCube.CardIdentity("Hallowed Spiritkeeper",""));
cubeCards.add(new DraftCube.CardIdentity("Hammer of Purphoros",""));
cubeCards.add(new DraftCube.CardIdentity("Hangarback Walker",""));
cubeCards.add(new DraftCube.CardIdentity("Harbinger of the Tides",""));
cubeCards.add(new DraftCube.CardIdentity("Harmonize",""));
cubeCards.add(new DraftCube.CardIdentity("Hellrider",""));
cubeCards.add(new DraftCube.CardIdentity("Herald of Torment",""));
cubeCards.add(new DraftCube.CardIdentity("Hero of Bladehold",""));
cubeCards.add(new DraftCube.CardIdentity("Hero's Downfall",""));
cubeCards.add(new DraftCube.CardIdentity("Hidden Dragonslayer",""));
cubeCards.add(new DraftCube.CardIdentity("Hinterland Harbor",""));
cubeCards.add(new DraftCube.CardIdentity("Honor of the Pure",""));
cubeCards.add(new DraftCube.CardIdentity("Hordeling Outburst",""));
cubeCards.add(new DraftCube.CardIdentity("Hornet Queen",""));
cubeCards.add(new DraftCube.CardIdentity("Huntmaster of the Fells",""));
cubeCards.add(new DraftCube.CardIdentity("Hymn to Tourach",""));
cubeCards.add(new DraftCube.CardIdentity("Hypnotic Specter",""));
cubeCards.add(new DraftCube.CardIdentity("Imperial Recruiter",""));
cubeCards.add(new DraftCube.CardIdentity("Impulse",""));
cubeCards.add(new DraftCube.CardIdentity("Incinerate",""));
cubeCards.add(new DraftCube.CardIdentity("Indrik Stomphowler",""));
cubeCards.add(new DraftCube.CardIdentity("Inferno Titan",""));
cubeCards.add(new DraftCube.CardIdentity("Inquisition of Kozilek",""));
cubeCards.add(new DraftCube.CardIdentity("Into the Roil",""));
cubeCards.add(new DraftCube.CardIdentity("Ire Shaman",""));
cubeCards.add(new DraftCube.CardIdentity("Isamaru, Hound of Konda",""));
cubeCards.add(new DraftCube.CardIdentity("Isochron Scepter",""));
cubeCards.add(new DraftCube.CardIdentity("Isolated Chapel",""));
cubeCards.add(new DraftCube.CardIdentity("Izzet Charm",""));
cubeCards.add(new DraftCube.CardIdentity("Jace Beleren",""));
cubeCards.add(new DraftCube.CardIdentity("Jace, Architect of Thought",""));
cubeCards.add(new DraftCube.CardIdentity("Jace, the Mind Sculptor",""));
cubeCards.add(new DraftCube.CardIdentity("Jace, Vryn's Prodigy",""));
cubeCards.add(new DraftCube.CardIdentity("Jackal Pup",""));
cubeCards.add(new DraftCube.CardIdentity("Joraga Treespeaker",""));
cubeCards.add(new DraftCube.CardIdentity("Journey to Nowhere",""));
cubeCards.add(new DraftCube.CardIdentity("Kami of Ancient Law",""));
cubeCards.add(new DraftCube.CardIdentity("Karmic Guide",""));
cubeCards.add(new DraftCube.CardIdentity("Karn Liberated",""));
cubeCards.add(new DraftCube.CardIdentity("Karplusan Forest",""));
cubeCards.add(new DraftCube.CardIdentity("Keiga, the Tide Star",""));
cubeCards.add(new DraftCube.CardIdentity("Keranos, God of Storms",""));
cubeCards.add(new DraftCube.CardIdentity("Kiki-Jiki, Mirror Breaker",""));
cubeCards.add(new DraftCube.CardIdentity("Kiln Fiend",""));
cubeCards.add(new DraftCube.CardIdentity("Kiora, the Crashing Wave",""));
cubeCards.add(new DraftCube.CardIdentity("Kiora's Follower",""));
cubeCards.add(new DraftCube.CardIdentity("Kira, Great Glass-Spinner",""));
cubeCards.add(new DraftCube.CardIdentity("Kitchen Finks",""));
cubeCards.add(new DraftCube.CardIdentity("Kodama's Reach",""));
cubeCards.add(new DraftCube.CardIdentity("Kokusho, the Evening Star",""));
cubeCards.add(new DraftCube.CardIdentity("Kor Skyfisher",""));
cubeCards.add(new DraftCube.CardIdentity("Koth of the Hammer",""));
cubeCards.add(new DraftCube.CardIdentity("Kozilek, Butcher of Truth",""));
cubeCards.add(new DraftCube.CardIdentity("Krenko's Command",""));
cubeCards.add(new DraftCube.CardIdentity("Kytheon, Hero of Akros",""));
cubeCards.add(new DraftCube.CardIdentity("Land Tax",""));
cubeCards.add(new DraftCube.CardIdentity("Legacy's Allure",""));
cubeCards.add(new DraftCube.CardIdentity("Leonin Relic-Warder",""));
cubeCards.add(new DraftCube.CardIdentity("Lightning Bolt",""));
cubeCards.add(new DraftCube.CardIdentity("Lightning Greaves",""));
cubeCards.add(new DraftCube.CardIdentity("Lightning Helix",""));
cubeCards.add(new DraftCube.CardIdentity("Lightning Mauler",""));
cubeCards.add(new DraftCube.CardIdentity("Lightning Strike",""));
cubeCards.add(new DraftCube.CardIdentity("Liliana of the Veil",""));
cubeCards.add(new DraftCube.CardIdentity("Liliana Vess",""));
cubeCards.add(new DraftCube.CardIdentity("Liliana, Heretical Healer",""));
cubeCards.add(new DraftCube.CardIdentity("Lingering Souls",""));
cubeCards.add(new DraftCube.CardIdentity("Linvala, Keeper of Silence",""));
cubeCards.add(new DraftCube.CardIdentity("Living Death",""));
cubeCards.add(new DraftCube.CardIdentity("Llanowar Elves",""));
cubeCards.add(new DraftCube.CardIdentity("Llanowar Mentor",""));
cubeCards.add(new DraftCube.CardIdentity("Llanowar Wastes",""));
cubeCards.add(new DraftCube.CardIdentity("Looter il-Kor",""));
cubeCards.add(new DraftCube.CardIdentity("Lotleth Troll",""));
cubeCards.add(new DraftCube.CardIdentity("Lotus Cobra",""));
cubeCards.add(new DraftCube.CardIdentity("Loxodon Warhammer",""));
cubeCards.add(new DraftCube.CardIdentity("Maelstrom Pulse",""));
cubeCards.add(new DraftCube.CardIdentity("Magma Jet",""));
cubeCards.add(new DraftCube.CardIdentity("Makeshift Mannequin",""));
cubeCards.add(new DraftCube.CardIdentity("Malicious Affliction",""));
cubeCards.add(new DraftCube.CardIdentity("Man-o'-War",""));
cubeCards.add(new DraftCube.CardIdentity("Mana Confluence",""));
cubeCards.add(new DraftCube.CardIdentity("Mana Leak",""));
cubeCards.add(new DraftCube.CardIdentity("Mana Tithe",""));
cubeCards.add(new DraftCube.CardIdentity("Managorger Hydra",""));
cubeCards.add(new DraftCube.CardIdentity("Manic Vandal",""));
cubeCards.add(new DraftCube.CardIdentity("Marsh Flats",""));
cubeCards.add(new DraftCube.CardIdentity("Martial Coup",""));
cubeCards.add(new DraftCube.CardIdentity("Massacre Wurm",""));
cubeCards.add(new DraftCube.CardIdentity("Master of the Wild Hunt",""));
cubeCards.add(new DraftCube.CardIdentity("Master of Waves",""));
cubeCards.add(new DraftCube.CardIdentity("Meloku the Clouded Mirror",""));
cubeCards.add(new DraftCube.CardIdentity("Mentor of the Meek",""));
cubeCards.add(new DraftCube.CardIdentity("Merfolk Looter",""));
cubeCards.add(new DraftCube.CardIdentity("Midnight Banshee",""));
cubeCards.add(new DraftCube.CardIdentity("Mind Stone",""));
cubeCards.add(new DraftCube.CardIdentity("Mirari's Wake",""));
cubeCards.add(new DraftCube.CardIdentity("Mirran Crusader",""));
cubeCards.add(new DraftCube.CardIdentity("Miscalculation",""));
cubeCards.add(new DraftCube.CardIdentity("Mishra's Factory",""));
cubeCards.add(new DraftCube.CardIdentity("Misty Rainforest",""));
cubeCards.add(new DraftCube.CardIdentity("Mizzium Mortars",""));
cubeCards.add(new DraftCube.CardIdentity("Mogg Fanatic",""));
cubeCards.add(new DraftCube.CardIdentity("Mogg War Marshal",""));
cubeCards.add(new DraftCube.CardIdentity("Mogis's Marauder",""));
cubeCards.add(new DraftCube.CardIdentity("Monastery Mentor",""));
cubeCards.add(new DraftCube.CardIdentity("Monastery Swiftspear",""));
cubeCards.add(new DraftCube.CardIdentity("Mother of Runes",""));
cubeCards.add(new DraftCube.CardIdentity("Mox Diamond",""));
cubeCards.add(new DraftCube.CardIdentity("Mulldrifter",""));
cubeCards.add(new DraftCube.CardIdentity("Murderous Cut",""));
cubeCards.add(new DraftCube.CardIdentity("Mutavault",""));
cubeCards.add(new DraftCube.CardIdentity("Myr Battlesphere",""));
cubeCards.add(new DraftCube.CardIdentity("Mystic Snake",""));
cubeCards.add(new DraftCube.CardIdentity("Natural Order",""));
cubeCards.add(new DraftCube.CardIdentity("Nature's Lore",""));
cubeCards.add(new DraftCube.CardIdentity("Necromancy",""));
cubeCards.add(new DraftCube.CardIdentity("Negate",""));
cubeCards.add(new DraftCube.CardIdentity("Nekrataal",""));
cubeCards.add(new DraftCube.CardIdentity("Nicol Bolas, Planeswalker",""));
cubeCards.add(new DraftCube.CardIdentity("Nightveil Specter",""));
cubeCards.add(new DraftCube.CardIdentity("Nissa, Vastwood Seer",""));
cubeCards.add(new DraftCube.CardIdentity("Nissa, Worldwaker",""));
cubeCards.add(new DraftCube.CardIdentity("Noble Hierarch",""));
cubeCards.add(new DraftCube.CardIdentity("Nykthos, Shrine to Nyx",""));
cubeCards.add(new DraftCube.CardIdentity("Oblivion Ring",""));
cubeCards.add(new DraftCube.CardIdentity("Obstinate Baloth",""));
cubeCards.add(new DraftCube.CardIdentity("Ohran Viper",""));
cubeCards.add(new DraftCube.CardIdentity("Old Man of the Sea",""));
cubeCards.add(new DraftCube.CardIdentity("Olivia Voldaren",""));
cubeCards.add(new DraftCube.CardIdentity("Oona's Prowler",""));
cubeCards.add(new DraftCube.CardIdentity("Ophiomancer",""));
cubeCards.add(new DraftCube.CardIdentity("Opposition",""));
cubeCards.add(new DraftCube.CardIdentity("Oracle of Mul Daya",""));
cubeCards.add(new DraftCube.CardIdentity("Oust",""));
cubeCards.add(new DraftCube.CardIdentity("Outpost Siege",""));
cubeCards.add(new DraftCube.CardIdentity("Overgrown Battlement",""));
cubeCards.add(new DraftCube.CardIdentity("Overgrown Tomb",""));
cubeCards.add(new DraftCube.CardIdentity("Overrun",""));
cubeCards.add(new DraftCube.CardIdentity("Pack Rat",""));
cubeCards.add(new DraftCube.CardIdentity("Pact of Negation",""));
cubeCards.add(new DraftCube.CardIdentity("Parallax Wave",""));
cubeCards.add(new DraftCube.CardIdentity("Path to Exile",""));
cubeCards.add(new DraftCube.CardIdentity("Pestermite",""));
cubeCards.add(new DraftCube.CardIdentity("Phantasmal Image",""));
cubeCards.add(new DraftCube.CardIdentity("Phyrexian Arena",""));
cubeCards.add(new DraftCube.CardIdentity("Phyrexian Metamorph",""));
cubeCards.add(new DraftCube.CardIdentity("Phyrexian Obliterator",""));
cubeCards.add(new DraftCube.CardIdentity("Phyrexian Revoker",""));
cubeCards.add(new DraftCube.CardIdentity("Pillar of Flame",""));
cubeCards.add(new DraftCube.CardIdentity("Plateau",""));
cubeCards.add(new DraftCube.CardIdentity("Polluted Delta",""));
cubeCards.add(new DraftCube.CardIdentity("Polukranos, World Eater",""));
cubeCards.add(new DraftCube.CardIdentity("Ponder",""));
cubeCards.add(new DraftCube.CardIdentity("Porcelain Legionnaire",""));
cubeCards.add(new DraftCube.CardIdentity("Precinct Captain",""));
cubeCards.add(new DraftCube.CardIdentity("Precursor Golem",""));
cubeCards.add(new DraftCube.CardIdentity("Preordain",""));
cubeCards.add(new DraftCube.CardIdentity("Primal Command",""));
cubeCards.add(new DraftCube.CardIdentity("Primeval Titan",""));
cubeCards.add(new DraftCube.CardIdentity("Profane Command",""));
cubeCards.add(new DraftCube.CardIdentity("Progenitus",""));
cubeCards.add(new DraftCube.CardIdentity("Prophetic Bolt",""));
cubeCards.add(new DraftCube.CardIdentity("Prophetic Flamespeaker",""));
cubeCards.add(new DraftCube.CardIdentity("Psychatog",""));
cubeCards.add(new DraftCube.CardIdentity("Purphoros, God of the Forge",""));
cubeCards.add(new DraftCube.CardIdentity("Qasali Pridemage",""));
cubeCards.add(new DraftCube.CardIdentity("Raise the Alarm",""));
cubeCards.add(new DraftCube.CardIdentity("Rakdos's Return",""));
cubeCards.add(new DraftCube.CardIdentity("Ral Zarek",""));
cubeCards.add(new DraftCube.CardIdentity("Rampaging Baloths",""));
cubeCards.add(new DraftCube.CardIdentity("Rampant Growth",""));
cubeCards.add(new DraftCube.CardIdentity("Ranger of Eos",""));
cubeCards.add(new DraftCube.CardIdentity("Ratchet Bomb",""));
cubeCards.add(new DraftCube.CardIdentity("Ravages of War",""));
cubeCards.add(new DraftCube.CardIdentity("Read the Bones",""));
cubeCards.add(new DraftCube.CardIdentity("Reanimate",""));
cubeCards.add(new DraftCube.CardIdentity("Reclamation Sage",""));
cubeCards.add(new DraftCube.CardIdentity("Recurring Nightmare",""));
cubeCards.add(new DraftCube.CardIdentity("Reflecting Pool",""));
cubeCards.add(new DraftCube.CardIdentity("Regrowth",""));
cubeCards.add(new DraftCube.CardIdentity("Remand",""));
cubeCards.add(new DraftCube.CardIdentity("Remove Soul",""));
cubeCards.add(new DraftCube.CardIdentity("Repeal",""));
cubeCards.add(new DraftCube.CardIdentity("Restoration Angel",""));
cubeCards.add(new DraftCube.CardIdentity("Reveillark",""));
cubeCards.add(new DraftCube.CardIdentity("Rift Bolt",""));
cubeCards.add(new DraftCube.CardIdentity("Riftwing Cloudskate",""));
cubeCards.add(new DraftCube.CardIdentity("Rishadan Port",""));
cubeCards.add(new DraftCube.CardIdentity("Roast",""));
cubeCards.add(new DraftCube.CardIdentity("Rofellos, Llanowar Emissary",""));
cubeCards.add(new DraftCube.CardIdentity("Rootbound Crag",""));
cubeCards.add(new DraftCube.CardIdentity("Rotting Rats",""));
cubeCards.add(new DraftCube.CardIdentity("Rune-Scarred Demon",""));
cubeCards.add(new DraftCube.CardIdentity("Sacred Foundry",""));
cubeCards.add(new DraftCube.CardIdentity("Sakura-Tribe Elder",""));
cubeCards.add(new DraftCube.CardIdentity("Sarkhan, the Dragonspeaker",""));
cubeCards.add(new DraftCube.CardIdentity("Savannah",""));
cubeCards.add(new DraftCube.CardIdentity("Scalding Tarn",""));
cubeCards.add(new DraftCube.CardIdentity("Scavenging Ooze",""));
cubeCards.add(new DraftCube.CardIdentity("Scrubland",""));
cubeCards.add(new DraftCube.CardIdentity("Sea Gate Oracle",""));
cubeCards.add(new DraftCube.CardIdentity("Seal of Fire",""));
cubeCards.add(new DraftCube.CardIdentity("Search for Tomorrow",""));
cubeCards.add(new DraftCube.CardIdentity("Searing Spear",""));
cubeCards.add(new DraftCube.CardIdentity("Secure the Wastes",""));
cubeCards.add(new DraftCube.CardIdentity("Seeker of the Way",""));
cubeCards.add(new DraftCube.CardIdentity("Sensei's Divining Top",""));
cubeCards.add(new DraftCube.CardIdentity("Serendib Efreet",""));
cubeCards.add(new DraftCube.CardIdentity("Serum Visions",""));
cubeCards.add(new DraftCube.CardIdentity("Shadowmage Infiltrator",""));
cubeCards.add(new DraftCube.CardIdentity("Shallow Grave",""));
cubeCards.add(new DraftCube.CardIdentity("Shardless Agent",""));
cubeCards.add(new DraftCube.CardIdentity("Sheoldred, Whispering One",""));
cubeCards.add(new DraftCube.CardIdentity("Shivan Reef",""));
cubeCards.add(new DraftCube.CardIdentity("Show and Tell",""));
cubeCards.add(new DraftCube.CardIdentity("Shriekmaw",""));
cubeCards.add(new DraftCube.CardIdentity("Sidisi, Undead Vizier",""));
cubeCards.add(new DraftCube.CardIdentity("Siege-Gang Commander",""));
cubeCards.add(new DraftCube.CardIdentity("Silverblade Paladin",""));
cubeCards.add(new DraftCube.CardIdentity("Sin Collector",""));
cubeCards.add(new DraftCube.CardIdentity("Skinrender",""));
cubeCards.add(new DraftCube.CardIdentity("Skullcrack",""));
cubeCards.add(new DraftCube.CardIdentity("Slagstorm",""));
cubeCards.add(new DraftCube.CardIdentity("Slaughter Pact",""));
cubeCards.add(new DraftCube.CardIdentity("Snapcaster Mage",""));
cubeCards.add(new DraftCube.CardIdentity("Sneak Attack",""));
cubeCards.add(new DraftCube.CardIdentity("Soldier of the Pantheon",""));
cubeCards.add(new DraftCube.CardIdentity("Solemn Simulacrum",""));
cubeCards.add(new DraftCube.CardIdentity("Song of the Dryads",""));
cubeCards.add(new DraftCube.CardIdentity("Sorin Markov",""));
cubeCards.add(new DraftCube.CardIdentity("Sorin, Solemn Visitor",""));
cubeCards.add(new DraftCube.CardIdentity("Soulfire Grand Master",""));
cubeCards.add(new DraftCube.CardIdentity("Sower of Temptation",""));
cubeCards.add(new DraftCube.CardIdentity("Spear of Heliod",""));
cubeCards.add(new DraftCube.CardIdentity("Spectral Procession",""));
cubeCards.add(new DraftCube.CardIdentity("Spellskite",""));
cubeCards.add(new DraftCube.CardIdentity("Spell Pierce",""));
cubeCards.add(new DraftCube.CardIdentity("Sphere of the Suns",""));
cubeCards.add(new DraftCube.CardIdentity("Sphinx's Revelation",""));
cubeCards.add(new DraftCube.CardIdentity("Spikeshot Elder",""));
cubeCards.add(new DraftCube.CardIdentity("Splinter Twin",""));
cubeCards.add(new DraftCube.CardIdentity("Staggershock",""));
cubeCards.add(new DraftCube.CardIdentity("Steam Vents",""));
cubeCards.add(new DraftCube.CardIdentity("Stoke the Flames",""));
cubeCards.add(new DraftCube.CardIdentity("Stomping Ground",""));
cubeCards.add(new DraftCube.CardIdentity("Stormbreath Dragon",""));
cubeCards.add(new DraftCube.CardIdentity("Stormtide Leviathan",""));
cubeCards.add(new DraftCube.CardIdentity("Stratus Dancer",""));
cubeCards.add(new DraftCube.CardIdentity("Stroke of Genius",""));
cubeCards.add(new DraftCube.CardIdentity("Stromkirk Noble",""));
cubeCards.add(new DraftCube.CardIdentity("Student of Warfare",""));
cubeCards.add(new DraftCube.CardIdentity("Sublime Archangel",""));
cubeCards.add(new DraftCube.CardIdentity("Sulfur Falls",""));
cubeCards.add(new DraftCube.CardIdentity("Sulfurous Springs",""));
cubeCards.add(new DraftCube.CardIdentity("Summoning Trap",""));
cubeCards.add(new DraftCube.CardIdentity("Sun Titan",""));
cubeCards.add(new DraftCube.CardIdentity("Sundering Titan",""));
cubeCards.add(new DraftCube.CardIdentity("Sunpetal Grove",""));
cubeCards.add(new DraftCube.CardIdentity("Supreme Verdict",""));
cubeCards.add(new DraftCube.CardIdentity("Surrak, the Hunt Caller",""));
cubeCards.add(new DraftCube.CardIdentity("Swords to Plowshares",""));
cubeCards.add(new DraftCube.CardIdentity("Sylvan Caryatid",""));
cubeCards.add(new DraftCube.CardIdentity("Sylvan Library",""));
cubeCards.add(new DraftCube.CardIdentity("Taiga",""));
cubeCards.add(new DraftCube.CardIdentity("Talrand, Sky Summoner",""));
cubeCards.add(new DraftCube.CardIdentity("Tamiyo, the Moon Sage",""));
cubeCards.add(new DraftCube.CardIdentity("Tangle Wire",""));
cubeCards.add(new DraftCube.CardIdentity("Tarmogoyf",""));
cubeCards.add(new DraftCube.CardIdentity("Tasigur, the Golden Fang",""));
cubeCards.add(new DraftCube.CardIdentity("Tectonic Edge",""));
cubeCards.add(new DraftCube.CardIdentity("Teferi, Mage of Zhalfir",""));
cubeCards.add(new DraftCube.CardIdentity("Temple Garden",""));
cubeCards.add(new DraftCube.CardIdentity("Temple of Abandon",""));
cubeCards.add(new DraftCube.CardIdentity("Temple of Deceit",""));
cubeCards.add(new DraftCube.CardIdentity("Temple of Enlightenment",""));
cubeCards.add(new DraftCube.CardIdentity("Temple of Epiphany",""));
cubeCards.add(new DraftCube.CardIdentity("Temple of Malady",""));
cubeCards.add(new DraftCube.CardIdentity("Temple of Malice",""));
cubeCards.add(new DraftCube.CardIdentity("Temple of Mystery",""));
cubeCards.add(new DraftCube.CardIdentity("Temple of Plenty",""));
cubeCards.add(new DraftCube.CardIdentity("Temple of Silence",""));
cubeCards.add(new DraftCube.CardIdentity("Temple of Triumph",""));
cubeCards.add(new DraftCube.CardIdentity("Tempt with Vengeance",""));
cubeCards.add(new DraftCube.CardIdentity("Terastodon",""));
cubeCards.add(new DraftCube.CardIdentity("Terminate",""));
cubeCards.add(new DraftCube.CardIdentity("Terminus",""));
cubeCards.add(new DraftCube.CardIdentity("Thalia, Guardian of Thraben",""));
cubeCards.add(new DraftCube.CardIdentity("Thassa, God of the Sea",""));
cubeCards.add(new DraftCube.CardIdentity("Thespian's Stage",""));
cubeCards.add(new DraftCube.CardIdentity("Thoughtseize",""));
cubeCards.add(new DraftCube.CardIdentity("Thragtusk",""));
cubeCards.add(new DraftCube.CardIdentity("Thran Dynamo",""));
cubeCards.add(new DraftCube.CardIdentity("Through the Breach",""));
cubeCards.add(new DraftCube.CardIdentity("Thrun, the Last Troll",""));
cubeCards.add(new DraftCube.CardIdentity("Thunderbreak Regent",""));
cubeCards.add(new DraftCube.CardIdentity("Thundermaw Hellkite",""));
cubeCards.add(new DraftCube.CardIdentity("Tidehollow Sculler",""));
cubeCards.add(new DraftCube.CardIdentity("Time Warp",""));
cubeCards.add(new DraftCube.CardIdentity("Tooth and Nail",""));
cubeCards.add(new DraftCube.CardIdentity("Toxic Deluge",""));
cubeCards.add(new DraftCube.CardIdentity("Treachery",""));
cubeCards.add(new DraftCube.CardIdentity("Tropical Island",""));
cubeCards.add(new DraftCube.CardIdentity("Trygon Predator",""));
cubeCards.add(new DraftCube.CardIdentity("Tundra",""));
cubeCards.add(new DraftCube.CardIdentity("Ugin, the Spirit Dragon",""));
cubeCards.add(new DraftCube.CardIdentity("Ulamog, the Infinite Gyre",""));
cubeCards.add(new DraftCube.CardIdentity("Ultimate Price",""));
cubeCards.add(new DraftCube.CardIdentity("Unburial Rites",""));
cubeCards.add(new DraftCube.CardIdentity("Underground River",""));
cubeCards.add(new DraftCube.CardIdentity("Underground Sea",""));
cubeCards.add(new DraftCube.CardIdentity("Underworld Connections",""));
cubeCards.add(new DraftCube.CardIdentity("Unexpectedly Absent",""));
cubeCards.add(new DraftCube.CardIdentity("Upheaval",""));
cubeCards.add(new DraftCube.CardIdentity("Utopia Sprawl",""));
cubeCards.add(new DraftCube.CardIdentity("Vampire Hexmage",""));
cubeCards.add(new DraftCube.CardIdentity("Vampire Nighthawk",""));
cubeCards.add(new DraftCube.CardIdentity("Vedalken Shackles",""));
cubeCards.add(new DraftCube.CardIdentity("Vendilion Clique",""));
cubeCards.add(new DraftCube.CardIdentity("Vengevine",""));
cubeCards.add(new DraftCube.CardIdentity("Venser, Shaper Savant",""));
cubeCards.add(new DraftCube.CardIdentity("Venser, the Sojourner",""));
cubeCards.add(new DraftCube.CardIdentity("Verdant Catacombs",""));
cubeCards.add(new DraftCube.CardIdentity("Vindicate",""));
cubeCards.add(new DraftCube.CardIdentity("Volcanic Island",""));
cubeCards.add(new DraftCube.CardIdentity("Volrath's Stronghold",""));
cubeCards.add(new DraftCube.CardIdentity("Voyaging Satyr",""));
cubeCards.add(new DraftCube.CardIdentity("Vraska the Unseen",""));
cubeCards.add(new DraftCube.CardIdentity("Wake Thrasher",""));
cubeCards.add(new DraftCube.CardIdentity("Wall of Blossoms",""));
cubeCards.add(new DraftCube.CardIdentity("Wall of Omens",""));
cubeCards.add(new DraftCube.CardIdentity("Wall of Roots",""));
cubeCards.add(new DraftCube.CardIdentity("Warleader's Helix",""));
cubeCards.add(new DraftCube.CardIdentity("Waterfront Bouncer",""));
cubeCards.add(new DraftCube.CardIdentity("Watery Grave",""));
cubeCards.add(new DraftCube.CardIdentity("Whip of Erebos",""));
cubeCards.add(new DraftCube.CardIdentity("Whisperwood Elemental",""));
cubeCards.add(new DraftCube.CardIdentity("Wild Mongrel",""));
cubeCards.add(new DraftCube.CardIdentity("Windbrisk Heights",""));
cubeCards.add(new DraftCube.CardIdentity("Windswept Heath",""));
cubeCards.add(new DraftCube.CardIdentity("Winter Orb",""));
cubeCards.add(new DraftCube.CardIdentity("Wolfir Silverheart",""));
cubeCards.add(new DraftCube.CardIdentity("Wood Elves",""));
cubeCards.add(new DraftCube.CardIdentity("Wooded Foothills",""));
cubeCards.add(new DraftCube.CardIdentity("Woodfall Primus",""));
cubeCards.add(new DraftCube.CardIdentity("Woodland Bellower",""));
cubeCards.add(new DraftCube.CardIdentity("Woodland Cemetery",""));
cubeCards.add(new DraftCube.CardIdentity("Worn Powerstone",""));
cubeCards.add(new DraftCube.CardIdentity("Wrath of God",""));
cubeCards.add(new DraftCube.CardIdentity("Wurmcoil Engine",""));
cubeCards.add(new DraftCube.CardIdentity("Xenagos, the Reveler",""));
cubeCards.add(new DraftCube.CardIdentity("Yavimaya Coast",""));
cubeCards.add(new DraftCube.CardIdentity("Yavimaya Elder",""));
cubeCards.add(new DraftCube.CardIdentity("Yosei, the Morning Star",""));
cubeCards.add(new DraftCube.CardIdentity("Young Pyromancer",""));
cubeCards.add(new DraftCube.CardIdentity("Zealous Conscripts",""));
}
}

View file

@ -63,7 +63,8 @@
<draftCube name="MTGO Holiday Cube 2014" jar="mage-tournament-booster-draft.jar" className="mage.tournament.cubes.HolidayCube2014"/> <draftCube name="MTGO Holiday Cube 2014" jar="mage-tournament-booster-draft.jar" className="mage.tournament.cubes.HolidayCube2014"/>
<draftCube name="MTGO Holiday Cube 2015" jar="mage-tournament-booster-draft.jar" className="mage.tournament.cubes.HolidayCube2015"/> <draftCube name="MTGO Holiday Cube 2015" jar="mage-tournament-booster-draft.jar" className="mage.tournament.cubes.HolidayCube2015"/>
<draftCube name="MTGO Legacy Cube (600 cards)" jar="mage-tournament-booster-draft.jar" className="mage.tournament.cubes.MTGOLegacyCube"/> <draftCube name="MTGO Legacy Cube (600 cards)" jar="mage-tournament-booster-draft.jar" className="mage.tournament.cubes.MTGOLegacyCube"/>
<draftCube name="MTGO Legacy Cube 2015 (600 cards)" jar="mage-tournament-booster-draft.jar" className="mage.tournament.cubes.MTGOLegacyCube2015"/> <draftCube name="MTGO Legacy Cube March 2015 (600 cards)" jar="mage-tournament-booster-draft.jar" className="mage.tournament.cubes.MTGOLegacyCubeMarch2015"/>
<draftCube name="MTGO Legacy Cube September 2015 (600 cards)" jar="mage-tournament-booster-draft.jar" className="mage.tournament.cubes.MTGOLegacyCubeSeptember2015"/>
<draftCube name="The Peasant's Toolbox (800 cards)" jar="mage-tournament-booster-draft.jar" className="mage.tournament.cubes.PeasantsToolboxCube"/> <draftCube name="The Peasant's Toolbox (800 cards)" jar="mage-tournament-booster-draft.jar" className="mage.tournament.cubes.PeasantsToolboxCube"/>
<draftCube name="www.MTGCube.com (502 cards)" jar="mage-tournament-booster-draft.jar" className="mage.tournament.cubes.MTGCube"/> <draftCube name="www.MTGCube.com (502 cards)" jar="mage-tournament-booster-draft.jar" className="mage.tournament.cubes.MTGCube"/>
</draftCubes> </draftCubes>

View file

@ -49,7 +49,8 @@
<draftCube name="MTGO Holiday Cube 2015" jar="mage-tournament-booster-draft-${project.version}.jar" className="mage.tournament.cubes.HolidayCube2015"/> <draftCube name="MTGO Holiday Cube 2015" jar="mage-tournament-booster-draft-${project.version}.jar" className="mage.tournament.cubes.HolidayCube2015"/>
<draftCube name="MTGO Cube March 2014" jar="mage-tournament-booster-draft-${project.version}.jar" className="mage.tournament.cubes.MTGOMarchCube2014"/> <draftCube name="MTGO Cube March 2014" jar="mage-tournament-booster-draft-${project.version}.jar" className="mage.tournament.cubes.MTGOMarchCube2014"/>
<draftCube name="MTGO Legacy Cube (600 cards)" jar="mage-tournament-booster-draft-${project.version}.jar" className="mage.tournament.cubes.MTGOLegacyCube"/> <draftCube name="MTGO Legacy Cube (600 cards)" jar="mage-tournament-booster-draft-${project.version}.jar" className="mage.tournament.cubes.MTGOLegacyCube"/>
<draftCube name="MTGO Legacy Cube 2015 (600 cards)" jar="mage-tournament-booster-draft-${project.version}.jar" className="mage.tournament.cubes.MTGOLegacyCube2015"/> <draftCube name="MTGO Legacy Cube March 2015 (600 cards)" jar="mage-tournament-booster-draft-${project.version}.jar" className="mage.tournament.cubes.MTGOLegacyCubeMarch2015"/>
<draftCube name="MTGO Legacy Cube September 2015 (600 cards)" jar="mage-tournament-booster-draft-${project.version}.jar" className="mage.tournament.cubes.MTGOLegacyCubeSeptember2015"/>
<draftCube name="The Peasant's Toolbox (800 cards)" jar="mage-tournament-booster-draft-${project.version}.jar" className="mage.tournament.cubes.PeasantsToolboxCube"/> <draftCube name="The Peasant's Toolbox (800 cards)" jar="mage-tournament-booster-draft-${project.version}.jar" className="mage.tournament.cubes.PeasantsToolboxCube"/>
<draftCube name="www.MTGCube.com (502 cards)" jar="mage-tournament-booster-draft-${project.version}.jar" className="mage.tournament.cubes.MTGCube"/> <draftCube name="www.MTGCube.com (502 cards)" jar="mage-tournament-booster-draft-${project.version}.jar" className="mage.tournament.cubes.MTGCube"/>
</draftCubes> </draftCubes>

View file

@ -36,6 +36,9 @@ import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.ReentrantLock; import java.util.concurrent.locks.ReentrantLock;
import java.util.regex.Matcher; import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import mage.MageException;
import mage.constants.Constants;
import mage.interfaces.callback.ClientCallback;
import mage.players.net.UserData; import mage.players.net.UserData;
import mage.players.net.UserGroup; import mage.players.net.UserGroup;
import mage.remote.Connection; import mage.remote.Connection;
@ -168,15 +171,14 @@ public class Session {
userDataView.isAutoOrderTrigger()); userDataView.isAutoOrderTrigger());
user.setUserData(userData); user.setUserData(userData);
} else { } else {
if (userData.getAvatarId() == 51) { // Update special avatar if first avatar is selected user.getUserData().update(userData);
updateAvatar(user.getName(), userData);
} }
userData.setAvatarId(userDataView.getAvatarId()); if (user.getUserData().getAvatarId() < Constants.MIN_AVATAR_ID
userData.setShowAbilityPickerForced(userDataView.isShowAbilityPickerForced()); || user.getUserData().getAvatarId() > Constants.MAX_AVATAR_ID) {
userData.setAllowRequestShowHandCards(userDataView.isAllowRequestShowHandCards()); user.getUserData().setAvatarId(Constants.DEFAULT_AVATAR_ID);
userData.setUserSkipPrioritySteps(userDataView.getUserSkipPrioritySteps()); }
userData.setConfirmEmptyManaPool(userDataView.confirmEmptyManaPool()); if (user.getUserData().getAvatarId() == 11) {
userData.setAskMoveToGraveOrder(userDataView.askMoveToGraveOrder()); user.getUserData().setAvatarId(updateAvatar(user.getName()));
} }
return true; return true;
} }
@ -187,31 +189,17 @@ public class Session {
//TODO: move to separate class //TODO: move to separate class
//TODO: add for checking for private key //TODO: add for checking for private key
switch (userName) { switch (userName) {
case "nantuko":
userData.setAvatarId(1000);
break;
case "North": case "North":
userData.setAvatarId(1006); userData.setAvatarId(1006);
break; break;
case "BetaSteward": case "BetaSteward":
userData.setAvatarId(1008); return 1008;
break;
case "loki":
userData.setAvatarId(1012);
break;
case "Ayrat":
userData.setAvatarId(1018);
break;
case "Bandit": case "Bandit":
userData.setAvatarId(1020); return 1020;
break; case "fireshoes":
default: return 1021;
userData.setAvatarId(51);
break;
case "Wehk":
userData.setAvatarId(66);
break;
} }
return 11;
} }
public String getId() { public String getId() {

View file

@ -25,18 +25,21 @@
* authors and should not be interpreted as representing official policies, either expressed * authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com. * or implied, of BetaSteward_at_googlemail.com.
*/ */
package mage.sets; package mage.sets;
import java.util.ArrayList;
import java.util.GregorianCalendar; import java.util.GregorianCalendar;
import java.util.List;
import mage.cards.ExpansionSet; import mage.cards.ExpansionSet;
import mage.cards.repository.CardCriteria;
import mage.cards.repository.CardInfo;
import mage.cards.repository.CardRepository;
import mage.constants.SetType; import mage.constants.SetType;
/** /**
* *
* @author fireshoes * @author fireshoes
*/ */
public class BattleForZendikar extends ExpansionSet { public class BattleForZendikar extends ExpansionSet {
private static final BattleForZendikar fINSTANCE = new BattleForZendikar(); private static final BattleForZendikar fINSTANCE = new BattleForZendikar();
@ -45,16 +48,33 @@ public class BattleForZendikar extends ExpansionSet {
return fINSTANCE; return fINSTANCE;
} }
List<CardInfo> savedSpecialLand = new ArrayList<>();
private BattleForZendikar() { private BattleForZendikar() {
super("Battle for Zendikar", "BFZ", "mage.sets.battleforzendikar", new GregorianCalendar(2015, 10, 2).getTime(), SetType.EXPANSION); super("Battle for Zendikar", "BFZ", "mage.sets.battleforzendikar", new GregorianCalendar(2015, 10, 2).getTime(), SetType.EXPANSION);
this.blockName = "Battle for Zendikar"; this.blockName = "Battle for Zendikar";
this.hasBoosters = true; this.hasBoosters = true;
this.hasBasicLands = true; this.hasBasicLands = true;
this.numBoosterLands = 1; this.numBoosterLands = 1;
this.ratioBoosterSpecialLand = 20; // Approximately as rare as opening a foil mythic = 8 * 6 = ~every 48th booster includes one
// I set it to 20 to get it more often
this.numBoosterCommon = 10; this.numBoosterCommon = 10;
this.numBoosterUncommon = 3; this.numBoosterUncommon = 3;
this.numBoosterRare = 1; this.numBoosterRare = 1;
this.ratioBoosterMythic = 8; this.ratioBoosterMythic = 8;
this.numBoosterSpecial = 0;
} }
@Override
public List<CardInfo> getSpecialLand() {
List<CardInfo> specialLand = new ArrayList<>();
if (savedSpecialLand.isEmpty()) {
CardCriteria criteria = new CardCriteria();
criteria.setCodes("EXP");
specialLand.addAll(CardRepository.instance.findCards(criteria));
}
specialLand.addAll(savedSpecialLand);
return specialLand;
}
} }

View file

@ -0,0 +1,35 @@
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package mage.sets;
import java.util.GregorianCalendar;
import mage.cards.ExpansionSet;
import mage.constants.SetType;
/**
*
* @author fireshoes
*/
public class OathOfTheGatewatch extends ExpansionSet {
private static final OathOfTheGatewatch fINSTANCE = new OathOfTheGatewatch();
public static OathOfTheGatewatch getInstance() {
return fINSTANCE;
}
private OathOfTheGatewatch() {
super("Oath of the Gatewatch", "OGW", "mage.sets.oathofthegatewatch", new GregorianCalendar(2016, 1, 22).getTime(), SetType.EXPANSION);
this.blockName = "Battle for Zendikar";
this.hasBoosters = true;
this.hasBasicLands = false;
this.numBoosterLands = 1;
this.numBoosterCommon = 10;
this.numBoosterUncommon = 3;
this.numBoosterRare = 1;
this.ratioBoosterMythic = 8;
}
}

View file

@ -0,0 +1,51 @@
/*
* 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.sets;
import java.util.GregorianCalendar;
import mage.cards.ExpansionSet;
import mage.constants.SetType;
/**
*
* @author fireshoes
*/
public class ZendikarExpeditions extends ExpansionSet {
private static final ZendikarExpeditions fINSTANCE = new ZendikarExpeditions();
public static ZendikarExpeditions getInstance() {
return fINSTANCE;
}
private ZendikarExpeditions() {
super("Zendikar Expeditions", "EXP", "mage.sets.zendikarexpeditions", new GregorianCalendar(2015, 10, 2).getTime(), SetType.PROMOTIONAL);
this.hasBoosters = false;
this.hasBasicLands = false;
}
}

View file

@ -34,7 +34,7 @@ import mage.constants.CardType;
import mage.constants.Rarity; import mage.constants.Rarity;
import mage.abilities.common.EntersBattlefieldTappedAbility; import mage.abilities.common.EntersBattlefieldTappedAbility;
import mage.abilities.costs.AlternativeCostSourceAbility; import mage.abilities.costs.AlternativeCostSourceAbility;
import mage.abilities.costs.common.ReturnToHandTargetPermanentCost; import mage.abilities.costs.common.ReturnToHandChosenControlledPermanentCost;
import mage.abilities.costs.mana.GenericManaCost; import mage.abilities.costs.mana.GenericManaCost;
import mage.abilities.mana.BlueManaAbility; import mage.abilities.mana.BlueManaAbility;
import mage.abilities.mana.WhiteManaAbility; import mage.abilities.mana.WhiteManaAbility;
@ -64,7 +64,7 @@ public class FieldmistBorderpost extends CardImpl {
// You may pay {1} and return a basic land you control to its owner's hand rather than pay Fieldmist Borderpost's mana cost. // You may pay {1} and return a basic land you control to its owner's hand rather than pay Fieldmist Borderpost's mana cost.
Ability ability = new AlternativeCostSourceAbility(new GenericManaCost(1)); Ability ability = new AlternativeCostSourceAbility(new GenericManaCost(1));
ability.addCost(new ReturnToHandTargetPermanentCost(new TargetControlledPermanent(filter))); ability.addCost(new ReturnToHandChosenControlledPermanentCost(new TargetControlledPermanent(filter)));
this.addAbility(ability); this.addAbility(ability);
// Fieldmist Borderpost enters the battlefield tapped. // Fieldmist Borderpost enters the battlefield tapped.

View file

@ -32,7 +32,7 @@ import java.util.UUID;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldTappedAbility; import mage.abilities.common.EntersBattlefieldTappedAbility;
import mage.abilities.costs.AlternativeCostSourceAbility; import mage.abilities.costs.AlternativeCostSourceAbility;
import mage.abilities.costs.common.ReturnToHandTargetPermanentCost; import mage.abilities.costs.common.ReturnToHandChosenControlledPermanentCost;
import mage.abilities.costs.mana.GenericManaCost; import mage.abilities.costs.mana.GenericManaCost;
import mage.abilities.mana.GreenManaAbility; import mage.abilities.mana.GreenManaAbility;
import mage.abilities.mana.RedManaAbility; import mage.abilities.mana.RedManaAbility;
@ -64,7 +64,7 @@ public class FirewildBorderpost extends CardImpl {
// You may pay {1} and return a basic land you control to its owner's hand rather than pay Firewild Borderpost's mana cost. // You may pay {1} and return a basic land you control to its owner's hand rather than pay Firewild Borderpost's mana cost.
Ability ability = new AlternativeCostSourceAbility(new GenericManaCost(1)); Ability ability = new AlternativeCostSourceAbility(new GenericManaCost(1));
ability.addCost(new ReturnToHandTargetPermanentCost(new TargetControlledPermanent(filter))); ability.addCost(new ReturnToHandChosenControlledPermanentCost(new TargetControlledPermanent(filter)));
this.addAbility(ability); this.addAbility(ability);
// Veinfire Firewild enters the battlefield tapped. // Veinfire Firewild enters the battlefield tapped.

View file

@ -34,7 +34,7 @@ import mage.constants.CardType;
import mage.constants.Rarity; import mage.constants.Rarity;
import mage.abilities.common.EntersBattlefieldTappedAbility; import mage.abilities.common.EntersBattlefieldTappedAbility;
import mage.abilities.costs.AlternativeCostSourceAbility; import mage.abilities.costs.AlternativeCostSourceAbility;
import mage.abilities.costs.common.ReturnToHandTargetPermanentCost; import mage.abilities.costs.common.ReturnToHandChosenControlledPermanentCost;
import mage.abilities.costs.mana.GenericManaCost; import mage.abilities.costs.mana.GenericManaCost;
import mage.abilities.mana.BlackManaAbility; import mage.abilities.mana.BlackManaAbility;
import mage.abilities.mana.BlueManaAbility; import mage.abilities.mana.BlueManaAbility;
@ -64,7 +64,7 @@ public class MistveinBorderpost extends CardImpl {
// You may pay {1} and return a basic land you control to its owner's hand rather than pay Mistvein Borderpost's mana cost. // You may pay {1} and return a basic land you control to its owner's hand rather than pay Mistvein Borderpost's mana cost.
Ability ability = new AlternativeCostSourceAbility(new GenericManaCost(1)); Ability ability = new AlternativeCostSourceAbility(new GenericManaCost(1));
ability.addCost(new ReturnToHandTargetPermanentCost(new TargetControlledPermanent(filter))); ability.addCost(new ReturnToHandChosenControlledPermanentCost(new TargetControlledPermanent(filter)));
this.addAbility(ability); this.addAbility(ability);
// Mistvein Borderpost enters the battlefield tapped. // Mistvein Borderpost enters the battlefield tapped.

View file

@ -1,38 +1,37 @@
/* /*
* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
* *
* Redistribution and use in source and binary forms, with or without modification, are * Redistribution and use in source and binary forms, with or without modification, are
* permitted provided that the following conditions are met: * permitted provided that the following conditions are met:
* *
* 1. Redistributions of source code must retain the above copyright notice, this list of * 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer. * conditions and the following disclaimer.
* *
* 2. Redistributions in binary form must reproduce the above copyright notice, this list * 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 * of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution. * provided with the distribution.
* *
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED * 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 * 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 * 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 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 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 * 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 * 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 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* *
* The views and conclusions contained in the software and documentation are those of the * 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 * authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com. * or implied, of BetaSteward_at_googlemail.com.
*/ */
package mage.sets.alarareborn; package mage.sets.alarareborn;
import java.util.UUID; import java.util.UUID;
import mage.constants.CardType;
import mage.constants.Rarity;
import mage.abilities.effects.common.DestroyTargetEffect; import mage.abilities.effects.common.DestroyTargetEffect;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.constants.CardType;
import mage.constants.Rarity;
import mage.target.common.TargetCreaturePermanent; import mage.target.common.TargetCreaturePermanent;
/** /**
@ -45,8 +44,6 @@ public class Terminate extends CardImpl {
super(ownerId, 46, "Terminate", Rarity.COMMON, new CardType[]{CardType.INSTANT}, "{B}{R}"); super(ownerId, 46, "Terminate", Rarity.COMMON, new CardType[]{CardType.INSTANT}, "{B}{R}");
this.expansionSetCode = "ARB"; this.expansionSetCode = "ARB";
// Destroy target creature. It can't be regenerated. // Destroy target creature. It can't be regenerated.
this.getSpellAbility().addTarget(new TargetCreaturePermanent()); this.getSpellAbility().addTarget(new TargetCreaturePermanent());
this.getSpellAbility().addEffect(new DestroyTargetEffect(true)); this.getSpellAbility().addEffect(new DestroyTargetEffect(true));

View file

@ -34,7 +34,7 @@ import mage.constants.CardType;
import mage.constants.Rarity; import mage.constants.Rarity;
import mage.abilities.common.EntersBattlefieldTappedAbility; import mage.abilities.common.EntersBattlefieldTappedAbility;
import mage.abilities.costs.AlternativeCostSourceAbility; import mage.abilities.costs.AlternativeCostSourceAbility;
import mage.abilities.costs.common.ReturnToHandTargetPermanentCost; import mage.abilities.costs.common.ReturnToHandChosenControlledPermanentCost;
import mage.abilities.costs.mana.GenericManaCost; import mage.abilities.costs.mana.GenericManaCost;
import mage.abilities.mana.BlackManaAbility; import mage.abilities.mana.BlackManaAbility;
import mage.abilities.mana.RedManaAbility; import mage.abilities.mana.RedManaAbility;
@ -64,7 +64,7 @@ public class VeinfireBorderpost extends CardImpl {
// You may pay {1} and return a basic land you control to its owner's hand rather than pay Veinfire Borderpost's mana cost. // You may pay {1} and return a basic land you control to its owner's hand rather than pay Veinfire Borderpost's mana cost.
Ability ability = new AlternativeCostSourceAbility(new GenericManaCost(1)); Ability ability = new AlternativeCostSourceAbility(new GenericManaCost(1));
ability.addCost(new ReturnToHandTargetPermanentCost(new TargetControlledPermanent(filter))); ability.addCost(new ReturnToHandChosenControlledPermanentCost(new TargetControlledPermanent(filter)));
this.addAbility(ability); this.addAbility(ability);
// Veinfire Borderpost enters the battlefield tapped. // Veinfire Borderpost enters the battlefield tapped.

View file

@ -34,7 +34,7 @@ import mage.constants.CardType;
import mage.constants.Rarity; import mage.constants.Rarity;
import mage.abilities.common.EntersBattlefieldTappedAbility; import mage.abilities.common.EntersBattlefieldTappedAbility;
import mage.abilities.costs.AlternativeCostSourceAbility; import mage.abilities.costs.AlternativeCostSourceAbility;
import mage.abilities.costs.common.ReturnToHandTargetPermanentCost; import mage.abilities.costs.common.ReturnToHandChosenControlledPermanentCost;
import mage.abilities.costs.mana.GenericManaCost; import mage.abilities.costs.mana.GenericManaCost;
import mage.abilities.mana.GreenManaAbility; import mage.abilities.mana.GreenManaAbility;
import mage.abilities.mana.WhiteManaAbility; import mage.abilities.mana.WhiteManaAbility;
@ -64,7 +64,7 @@ public class WildfieldBorderpost extends CardImpl {
// You may pay {1} and return a basic land you control to its owner's hand rather than pay Wildfield Borderpost's mana cost. // You may pay {1} and return a basic land you control to its owner's hand rather than pay Wildfield Borderpost's mana cost.
Ability ability = new AlternativeCostSourceAbility(new GenericManaCost(1)); Ability ability = new AlternativeCostSourceAbility(new GenericManaCost(1));
ability.addCost(new ReturnToHandTargetPermanentCost(new TargetControlledPermanent(filter))); ability.addCost(new ReturnToHandChosenControlledPermanentCost(new TargetControlledPermanent(filter)));
this.addAbility(ability); this.addAbility(ability);
// Wildfield Borderpost enters the battlefield tapped. // Wildfield Borderpost enters the battlefield tapped.

View file

@ -27,22 +27,26 @@
*/ */
package mage.sets.avacynrestored; package mage.sets.avacynrestored;
import mage.constants.*; import java.util.UUID;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.common.EntersBattlefieldTriggeredAbility;
import mage.abilities.common.SimpleStaticAbility; import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.effects.Effect;
import mage.abilities.effects.common.AttachEffect; import mage.abilities.effects.common.AttachEffect;
import mage.abilities.effects.common.DrawCardSourceControllerEffect; import mage.abilities.effects.common.DrawCardSourceControllerEffect;
import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect; import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect;
import mage.abilities.keyword.EnchantAbility; import mage.abilities.keyword.EnchantAbility;
import mage.abilities.mana.AnyColorManaAbility; import mage.abilities.mana.AnyColorManaAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.constants.AttachmentType;
import mage.constants.CardType;
import mage.constants.Outcome;
import mage.constants.Rarity;
import mage.constants.Zone;
import mage.target.TargetPermanent; import mage.target.TargetPermanent;
import mage.target.common.TargetLandPermanent; import mage.target.common.TargetLandPermanent;
import java.util.UUID;
/** /**
* @author noxx * @author noxx
*/ */
@ -53,7 +57,6 @@ public class AbundantGrowth extends CardImpl {
this.expansionSetCode = "AVR"; this.expansionSetCode = "AVR";
this.subtype.add("Aura"); this.subtype.add("Aura");
// Enchant land // Enchant land
TargetPermanent auraTarget = new TargetLandPermanent(); TargetPermanent auraTarget = new TargetLandPermanent();
this.getSpellAbility().addTarget(auraTarget); this.getSpellAbility().addTarget(auraTarget);
@ -66,7 +69,9 @@ public class AbundantGrowth extends CardImpl {
// Enchanted land has "{tap}: Add one mana of any color to your mana pool." // Enchanted land has "{tap}: Add one mana of any color to your mana pool."
Ability gainedAbility = new AnyColorManaAbility(new TapSourceCost()); Ability gainedAbility = new AnyColorManaAbility(new TapSourceCost());
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAttachedEffect(gainedAbility, AttachmentType.AURA))); Effect effect = new GainAbilityAttachedEffect(gainedAbility, AttachmentType.AURA);
effect.setText("Enchanted land has \"{tap}: Add one mana of any color to your mana pool.\"");
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, effect));
} }
public AbundantGrowth(final AbundantGrowth card) { public AbundantGrowth(final AbundantGrowth card) {

View file

@ -28,8 +28,6 @@
package mage.sets.avacynrestored; package mage.sets.avacynrestored;
import java.util.UUID; import java.util.UUID;
import mage.constants.*;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; import mage.abilities.common.BeginningOfUpkeepTriggeredAbility;
import mage.abilities.common.SimpleStaticAbility; import mage.abilities.common.SimpleStaticAbility;
@ -38,6 +36,13 @@ import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect; import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect;
import mage.abilities.keyword.EnchantAbility; import mage.abilities.keyword.EnchantAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.constants.AttachmentType;
import mage.constants.CardType;
import mage.constants.Outcome;
import mage.constants.Rarity;
import mage.constants.TargetController;
import mage.constants.Zone;
import mage.game.permanent.token.HumanToken;
import mage.target.TargetPermanent; import mage.target.TargetPermanent;
import mage.target.common.TargetCreaturePermanent; import mage.target.common.TargetCreaturePermanent;

View file

@ -29,7 +29,6 @@ package mage.sets.avacynrestored;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.Rarity; import mage.constants.Rarity;
import mage.MageInt;
import mage.ObjectColor; import mage.ObjectColor;
import mage.abilities.TriggeredAbility; import mage.abilities.TriggeredAbility;
import mage.abilities.common.BeginningOfYourEndStepTriggeredAbility; import mage.abilities.common.BeginningOfYourEndStepTriggeredAbility;
@ -38,7 +37,7 @@ import mage.abilities.decorator.ConditionalTriggeredAbility;
import mage.abilities.effects.common.CreateTokenEffect; import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.keyword.FlyingAbility; import mage.abilities.keyword.FlyingAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.game.permanent.token.Token; import mage.game.permanent.token.DemonToken;
import java.util.UUID; import java.util.UUID;
@ -53,7 +52,6 @@ public class DemonicRising extends CardImpl {
super(ownerId, 94, "Demonic Rising", Rarity.RARE, new CardType[]{CardType.ENCHANTMENT}, "{3}{B}{B}"); super(ownerId, 94, "Demonic Rising", Rarity.RARE, new CardType[]{CardType.ENCHANTMENT}, "{3}{B}{B}");
this.expansionSetCode = "AVR"; this.expansionSetCode = "AVR";
// At the beginning of your end step, if you control exactly one creature, put a 5/5 black Demon creature token with flying onto the battlefield. // At the beginning of your end step, if you control exactly one creature, put a 5/5 black Demon creature token with flying onto the battlefield.
TriggeredAbility ability = new BeginningOfYourEndStepTriggeredAbility(new CreateTokenEffect(new DemonToken()), false); TriggeredAbility ability = new BeginningOfYourEndStepTriggeredAbility(new CreateTokenEffect(new DemonToken()), false);
this.addAbility(new ConditionalTriggeredAbility(ability, OneControlledCreatureCondition.getInstance(), ruleText)); this.addAbility(new ConditionalTriggeredAbility(ability, OneControlledCreatureCondition.getInstance(), ruleText));
@ -68,15 +66,3 @@ public class DemonicRising extends CardImpl {
return new DemonicRising(this); return new DemonicRising(this);
} }
} }
class DemonToken extends Token {
public DemonToken() {
super("Demon", "a 5/5 black Demon creature token with flying");
cardType.add(CardType.CREATURE);
color.setBlack(true);
subtype.add("Demon");
power = new MageInt(5);
toughness = new MageInt(5);
addAbility(FlyingAbility.getInstance());
}
}

View file

@ -36,7 +36,7 @@ import mage.abilities.keyword.FlyingAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.Rarity; import mage.constants.Rarity;
import mage.game.permanent.token.Token; import mage.game.permanent.token.HumanToken;
/** /**
* *
@ -66,15 +66,3 @@ public class VoiceOfTheProvinces extends CardImpl {
return new VoiceOfTheProvinces(this); return new VoiceOfTheProvinces(this);
} }
} }
class HumanToken extends Token {
public HumanToken() {
super("Human", "1/1 white Human creature token");
cardType.add(CardType.CREATURE);
color.setWhite(true);
subtype.add("Human");
power = new MageInt(1);
toughness = new MageInt(1);
}
}

View file

@ -0,0 +1,77 @@
/*
* 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.sets.battleforzendikar;
import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.effects.Effect;
import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.effects.common.DontUntapInControllersNextUntapStepTargetEffect;
import mage.abilities.effects.common.TapTargetEffect;
import mage.abilities.keyword.DevoidAbility;
import mage.cards.CardImpl;
import mage.constants.CardType;
import mage.constants.Rarity;
import mage.game.permanent.token.EldraziScionToken;
import mage.target.common.TargetCreaturePermanent;
/**
*
* @author LevelX2
*/
public class AdverseConditions extends CardImpl {
public AdverseConditions(UUID ownerId) {
super(ownerId, 54, "Adverse Conditions", Rarity.UNCOMMON, new CardType[]{CardType.INSTANT}, "{3}{U}");
this.expansionSetCode = "BFZ";
// Devoid
Ability ability = new DevoidAbility(this.color);
ability.setRuleAtTheTop(true);
this.addAbility(ability);
// Tap up to two target creatures. Those creatures don't untap during their controller's next untap step.
this.getSpellAbility().addEffect(new TapTargetEffect());
this.getSpellAbility().addTarget(new TargetCreaturePermanent(0, 2));
this.getSpellAbility().addEffect(new DontUntapInControllersNextUntapStepTargetEffect());
// Put a 1/1 colorless Eldrazi Scion creature token onto the battlefield. It has "Sacrifice this creature: Add {1} to your mana pool."
Effect effect = new CreateTokenEffect(new EldraziScionToken());
effect.setText("put a 1/1 colorless Eldrazi Scion creature token onto the battlefield. It has \"Sacrifice this creature: Add {1} to your mana pool.\"");
this.getSpellAbility().addEffect(effect);
}
public AdverseConditions(final AdverseConditions card) {
super(card);
}
@Override
public AdverseConditions copy() {
return new AdverseConditions(this);
}
}

View file

@ -78,6 +78,7 @@ public class AkoumHellkite extends CardImpl {
return new AkoumHellkite(this); return new AkoumHellkite(this);
} }
} }
class AkoumHellkiteTriggeredAbility extends TriggeredAbilityImpl { class AkoumHellkiteTriggeredAbility extends TriggeredAbilityImpl {
private static final String text = "<i>Landfall</i> - Whenever a land enters the battlefield under your control, {this} deals 1 damage to target creature or player. " private static final String text = "<i>Landfall</i> - Whenever a land enters the battlefield under your control, {this} deals 1 damage to target creature or player. "

View file

@ -0,0 +1,126 @@
/*
* 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.sets.battleforzendikar;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.DelayedTriggeredAbility;
import mage.abilities.common.LandfallAbility;
import mage.abilities.common.delayed.AtTheBeginOfNextEndStepDelayedTriggeredAbility;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.DoIfCostPaid;
import mage.abilities.effects.common.ExileTargetEffect;
import mage.abilities.keyword.HasteAbility;
import mage.abilities.keyword.TrampleAbility;
import mage.cards.CardImpl;
import mage.constants.CardType;
import mage.constants.Outcome;
import mage.constants.Rarity;
import mage.game.Game;
import mage.game.permanent.token.Token;
import mage.target.targetpointer.FixedTarget;
/**
*
* @author LevelX2
*/
public class AkoumStonewaker extends CardImpl {
public AkoumStonewaker(UUID ownerId) {
super(ownerId, 140, "Akoum Stonewaker", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{1}{R}");
this.expansionSetCode = "BFZ";
this.subtype.add("Human");
this.subtype.add("Shaman");
this.power = new MageInt(2);
this.toughness = new MageInt(1);
// <i>Landfall</i> Whenever a land enters the battlefield under your control, you may pay {2}{R}. If you do, put a 3/1 red Elemental creature token with trample and haste onto the battlefield.
// Exile that token at the beginning of the next end step.
this.addAbility(new LandfallAbility(new DoIfCostPaid(new AkoumStonewakerEffect(), new ManaCostsImpl("{2}{R}")), false));
}
public AkoumStonewaker(final AkoumStonewaker card) {
super(card);
}
@Override
public AkoumStonewaker copy() {
return new AkoumStonewaker(this);
}
}
class AkoumStonewakerEffect extends OneShotEffect {
public AkoumStonewakerEffect() {
super(Outcome.PutCreatureInPlay);
this.staticText = "put a 3/1 red Elemental creature token with trample and haste onto the battlefield. Exile that token at the beginning of the next end step";
}
public AkoumStonewakerEffect(final AkoumStonewakerEffect effect) {
super(effect);
}
@Override
public AkoumStonewakerEffect copy() {
return new AkoumStonewakerEffect(this);
}
@Override
public boolean apply(Game game, Ability source) {
Token token = new AkoumStonewakerElementalToken();
if (token.putOntoBattlefield(1, game, source.getSourceId(), source.getControllerId())) {
ExileTargetEffect exileEffect = new ExileTargetEffect();
exileEffect.setTargetPointer(new FixedTarget(token.getLastAddedToken()));
DelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(exileEffect);
delayedAbility.setSourceId(source.getSourceId());
delayedAbility.setControllerId(source.getControllerId());
delayedAbility.setSourceObject(source.getSourceObject(game), game);
game.addDelayedTriggeredAbility(delayedAbility);
return true;
}
return false;
}
}
class AkoumStonewakerElementalToken extends Token {
public AkoumStonewakerElementalToken() {
super("Elemental", "3/1 red Elemental creature token with trample and haste");
cardType.add(CardType.CREATURE);
color.setRed(true);
subtype.add("Elemental");
power = new MageInt(3);
toughness = new MageInt(1);
this.addAbility(TrampleAbility.getInstance());
this.addAbility(HasteAbility.getInstance());
this.setOriginalExpansionSetCode("BFZ");
}
}

View file

@ -0,0 +1,116 @@
/*
* 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.sets.battleforzendikar;
import java.util.LinkedHashSet;
import java.util.Set;
import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
import mage.abilities.common.delayed.OnLeaveReturnExiledToBattlefieldAbility;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.CreateDelayedTriggeredAbilityEffect;
import mage.cards.Card;
import mage.cards.CardImpl;
import mage.constants.CardType;
import mage.constants.Outcome;
import mage.constants.Rarity;
import mage.filter.Filter;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.mageobject.PowerPredicate;
import mage.game.Game;
import mage.game.permanent.Permanent;
import mage.players.Player;
import mage.util.CardUtil;
/**
*
* @author LevelX2
*/
public class AlignedHedronNetwork extends CardImpl {
public AlignedHedronNetwork(UUID ownerId) {
super(ownerId, 222, "Aligned Hedron Network", Rarity.RARE, new CardType[]{CardType.ARTIFACT}, "{4}");
this.expansionSetCode = "BFZ";
// When Aligned Hedron Network enters the battlefield, exile all creatures with power 5 or greater until Aligned Hedron Network leaves the battlefield.
this.addAbility(new EntersBattlefieldTriggeredAbility(new AlignedHedronNetworkExileEffect(), false));
}
public AlignedHedronNetwork(final AlignedHedronNetwork card) {
super(card);
}
@Override
public AlignedHedronNetwork copy() {
return new AlignedHedronNetwork(this);
}
}
class AlignedHedronNetworkExileEffect extends OneShotEffect {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creatures with power 5 or greater");
static {
filter.add(new PowerPredicate(Filter.ComparisonType.GreaterThan, 4));
}
public AlignedHedronNetworkExileEffect() {
super(Outcome.Benefit);
this.staticText = "exile all creatures with power 5 or greater until {this} leaves the battlefield";
}
public AlignedHedronNetworkExileEffect(final AlignedHedronNetworkExileEffect effect) {
super(effect);
}
@Override
public AlignedHedronNetworkExileEffect copy() {
return new AlignedHedronNetworkExileEffect(this);
}
@Override
public boolean apply(Game game, Ability source) {
Player controller = game.getPlayer(source.getControllerId());
Permanent permanent = game.getPermanent(source.getSourceId());
// If Whale leaves the battlefield before its triggered ability resolves,
// the target creature won't be exiled.
if (controller != null && permanent != null) {
Set<Card> toExile = new LinkedHashSet<>();
for (Permanent creature : game.getBattlefield().getActivePermanents(filter, controller.getId(), source.getSourceId(), game)) {
toExile.add(creature);
}
if (!toExile.isEmpty()) {
controller.moveCardsToExile(toExile, source, game, true, CardUtil.getCardExileZoneId(game, source), permanent.getIdName());
new CreateDelayedTriggeredAbilityEffect(new OnLeaveReturnExiledToBattlefieldAbility()).apply(game, source);
}
return true;
}
return false;
}
}

View file

@ -0,0 +1,87 @@
/*
* 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.sets.battleforzendikar;
import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.common.SacrificeSourceCost;
import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.costs.mana.GenericManaCost;
import mage.abilities.effects.common.ReturnToHandTargetEffect;
import mage.abilities.mana.ColorlessManaAbility;
import mage.abilities.mana.ConditionalAnyColorManaAbility;
import mage.abilities.mana.conditional.ConditionalSpellManaBuilder;
import mage.cards.CardImpl;
import mage.constants.CardType;
import mage.constants.Rarity;
import mage.constants.Zone;
import mage.filter.FilterSpell;
import mage.filter.common.FilterControlledCreaturePermanent;
import mage.filter.predicate.mageobject.SubtypePredicate;
import mage.target.common.TargetControlledCreaturePermanent;
/**
*
* @author LevelX2
*/
public class AllyEncampment extends CardImpl {
private static final FilterSpell filter = new FilterSpell("an Ally spell");
static {
filter.add(new SubtypePredicate("Ally"));
}
public AllyEncampment(UUID ownerId) {
super(ownerId, 228, "Ally Encampment", Rarity.RARE, new CardType[]{CardType.LAND}, "");
this.expansionSetCode = "BFZ";
// {T}: Add {1} to your mana pool.
this.addAbility(new ColorlessManaAbility());
// {T} Add one mana of any color to your mana pool. Spend this mana only to cast an Ally spell.
this.addAbility(new ConditionalAnyColorManaAbility(new TapSourceCost(), 1, new ConditionalSpellManaBuilder(filter), true));
// {1}, {T}, Sacrifice Ally Encampment: Return target Ally you control to its owner's hand.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new ReturnToHandTargetEffect(), new GenericManaCost(1));
ability.addCost(new TapSourceCost());
ability.addCost(new SacrificeSourceCost());
ability.addTarget(new TargetControlledCreaturePermanent(new FilterControlledCreaturePermanent("Ally", "Ally you control")));
this.addAbility(ability);
}
public AllyEncampment(final AllyEncampment card) {
super(card);
}
@Override
public AllyEncampment copy() {
return new AllyEncampment(this);
}
}

View file

@ -0,0 +1,52 @@
/*
* 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.sets.battleforzendikar;
import java.util.UUID;
/**
*
* @author LevelX2
*/
public class AltarsReap extends mage.sets.innistrad.AltarsReap {
public AltarsReap(UUID ownerId) {
super(ownerId);
this.cardNumber = 103;
this.expansionSetCode = "BFZ";
}
public AltarsReap(final AltarsReap card) {
super(card);
}
@Override
public AltarsReap copy() {
return new AltarsReap(this);
}
}

View file

@ -0,0 +1,71 @@
/*
* 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.sets.battleforzendikar;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount;
import mage.abilities.effects.common.GainLifeEffect;
import mage.abilities.keyword.FlyingAbility;
import mage.cards.CardImpl;
import mage.constants.CardType;
import mage.constants.Rarity;
import mage.filter.common.FilterControlledCreaturePermanent;
/**
*
* @author LevelX2
*/
public class AngelOfRenewal extends CardImpl {
public AngelOfRenewal(UUID ownerId) {
super(ownerId, 18, "Angel of Renewal", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{5}{W}");
this.expansionSetCode = "BFZ";
this.subtype.add("Angel");
this.subtype.add("Ally");
this.power = new MageInt(4);
this.toughness = new MageInt(4);
// Flying
this.addAbility(FlyingAbility.getInstance());
// When Angel of Renewal enters the battlefield, you gain 1 life for each creature you control.
this.addAbility(new EntersBattlefieldTriggeredAbility(new GainLifeEffect(
new PermanentsOnBattlefieldCount(new FilterControlledCreaturePermanent()))));
}
public AngelOfRenewal(final AngelOfRenewal card) {
super(card);
}
@Override
public AngelOfRenewal copy() {
return new AngelOfRenewal(this);
}
}

View file

@ -0,0 +1,81 @@
/*
* 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.sets.battleforzendikar;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.common.AttacksTriggeredAbility;
import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount;
import mage.abilities.effects.common.continuous.BoostSourceEffect;
import mage.abilities.keyword.FlyingAbility;
import mage.cards.CardImpl;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.Rarity;
import mage.filter.common.FilterAttackingCreature;
import mage.filter.predicate.mageobject.SubtypePredicate;
import mage.filter.predicate.permanent.AnotherPredicate;
/**
*
* @author fireshoes
*/
public class AngelicCaptain extends CardImpl {
private static final FilterAttackingCreature filter = new FilterAttackingCreature("other attacking Ally");
static {
filter.add(new SubtypePredicate("Ally"));
filter.add(new AnotherPredicate());
}
public AngelicCaptain(UUID ownerId) {
super(ownerId, 208, "Angelic Captain", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{3}{R}{W}");
this.expansionSetCode = "BFZ";
this.subtype.add("Angel");
this.subtype.add("Ally");
this.power = new MageInt(4);
this.toughness = new MageInt(3);
// Flying
this.addAbility(FlyingAbility.getInstance());
// Whenever Angelic Captain attacks, it gets +1/+1 until end of turn for each other attacking Ally.
PermanentsOnBattlefieldCount value = new PermanentsOnBattlefieldCount(filter);
this.addAbility(new AttacksTriggeredAbility(new BoostSourceEffect(value, value, Duration.EndOfTurn, true), false));
}
public AngelicCaptain(final AngelicCaptain card) {
super(card);
}
@Override
public AngelicCaptain copy() {
return new AngelicCaptain(this);
}
}

View file

@ -0,0 +1,81 @@
/*
* 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.sets.battleforzendikar;
import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.common.AttachEffect;
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect;
import mage.abilities.keyword.EnchantAbility;
import mage.abilities.keyword.FlyingAbility;
import mage.cards.CardImpl;
import mage.constants.AttachmentType;
import mage.constants.CardType;
import mage.constants.Outcome;
import mage.constants.Rarity;
import mage.constants.Zone;
import mage.target.TargetPermanent;
import mage.target.common.TargetCreaturePermanent;
/**
*
* @author LevelX2
*/
public class AngelicGift extends CardImpl {
public AngelicGift(UUID ownerId) {
super(ownerId, 19, "Angelic Gift", Rarity.COMMON, new CardType[]{CardType.ENCHANTMENT}, "{1}{W}");
this.expansionSetCode = "BFZ";
this.subtype.add("Aura");
// Enchant creature
TargetPermanent auraTarget = new TargetCreaturePermanent();
this.getSpellAbility().addTarget(auraTarget);
this.getSpellAbility().addEffect(new AttachEffect(Outcome.AddAbility));
Ability ability = new EnchantAbility(auraTarget.getTargetName());
this.addAbility(ability);
// When Angelic Gift enters the battlefield, draw a card.
this.addAbility(new EntersBattlefieldTriggeredAbility(new DrawCardSourceControllerEffect(1), false));
// Enchanted creature has flying.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAttachedEffect(FlyingAbility.getInstance(), AttachmentType.AURA)));
}
public AngelicGift(final AngelicGift card) {
super(card);
}
@Override
public AngelicGift copy() {
return new AngelicGift(this);
}
}

View file

@ -0,0 +1,52 @@
/*
* 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.sets.battleforzendikar;
import java.util.UUID;
/**
*
* @author LevelX2
*/
public class Anticipate extends mage.sets.dragonsoftarkir.Anticipate {
public Anticipate(UUID ownerId) {
super(ownerId);
this.cardNumber = 69;
this.expansionSetCode = "BFZ";
}
public Anticipate(final Anticipate card) {
super(card);
}
@Override
public Anticipate copy() {
return new Anticipate(this);
}
}

View file

@ -0,0 +1,101 @@
/*
* 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.sets.battleforzendikar;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.AttacksTriggeredAbility;
import mage.abilities.effects.OneShotEffect;
import mage.cards.CardImpl;
import mage.cards.CardsImpl;
import mage.constants.CardType;
import mage.constants.Outcome;
import mage.constants.Rarity;
import mage.constants.SetTargetPointer;
import mage.constants.Zone;
import mage.game.Game;
import mage.players.Player;
import mage.target.Target;
import mage.target.common.TargetControlledPermanent;
/**
*
* @author LevelX2
*/
public class BaneOfBalaGed extends CardImpl {
public BaneOfBalaGed(UUID ownerId) {
super(ownerId, 1, "Bane of Bala Ged", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{7}");
this.expansionSetCode = "BFZ";
this.subtype.add("Eldrazi");
this.power = new MageInt(7);
this.toughness = new MageInt(5);
// Whenever Bane of Bala Ged attacks, defending player exiles two permanents he or she controls.
this.addAbility(new AttacksTriggeredAbility(new BaneOfBalaGedEffect(), false, "", SetTargetPointer.PLAYER));
}
public BaneOfBalaGed(final BaneOfBalaGed card) {
super(card);
}
@Override
public BaneOfBalaGed copy() {
return new BaneOfBalaGed(this);
}
}
class BaneOfBalaGedEffect extends OneShotEffect {
public BaneOfBalaGedEffect() {
super(Outcome.Benefit);
this.staticText = "defending player exiles two permanents he or she controls";
}
public BaneOfBalaGedEffect(final BaneOfBalaGedEffect effect) {
super(effect);
}
@Override
public BaneOfBalaGedEffect copy() {
return new BaneOfBalaGedEffect(this);
}
@Override
public boolean apply(Game game, Ability source) {
Player defendingPlayer = game.getPlayer(getTargetPointer().getFirst(game, source));
if (defendingPlayer != null) {
Target target = new TargetControlledPermanent(2);
defendingPlayer.chooseTarget(outcome, target, source, game);
defendingPlayer.moveCards(new CardsImpl(target.getTargets()), null, Zone.EXILED, source, game);
return true;
}
return false;
}
}

View file

@ -0,0 +1,107 @@
/*
* 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.sets.battleforzendikar;
import java.util.UUID;
import mage.ConditionalMana;
import mage.MageInt;
import mage.MageObject;
import mage.Mana;
import mage.abilities.Ability;
import mage.abilities.condition.Condition;
import mage.abilities.keyword.HasteAbility;
import mage.abilities.mana.ConditionalAnyColorManaAbility;
import mage.abilities.mana.builder.ConditionalManaBuilder;
import mage.cards.CardImpl;
import mage.constants.CardType;
import mage.constants.Rarity;
import mage.game.Game;
import mage.game.stack.Spell;
/**
*
* @author fireshoes
*/
public class BeastcallerSavant extends CardImpl {
public BeastcallerSavant(UUID ownerId) {
super(ownerId, 170, "Beastcaller Savant", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{1}{G}");
this.expansionSetCode = "BFZ";
this.subtype.add("Elf");
this.subtype.add("Shaman");
this.subtype.add("Ally");
this.power = new MageInt(1);
this.toughness = new MageInt(1);
// Haste
this.addAbility(HasteAbility.getInstance());
// {T}: Add one mana of any color to your mana pool. Spend this mana only to cast creature spells.
this.addAbility(new ConditionalAnyColorManaAbility(1, new BeastcallerSavantManaBuilder()));
}
public BeastcallerSavant(final BeastcallerSavant card) {
super(card);
}
@Override
public BeastcallerSavant copy() {
return new BeastcallerSavant(this);
}
}
class BeastcallerSavantManaBuilder extends ConditionalManaBuilder {
@Override
public ConditionalMana build(Object... options) {
return new BeastcallerSavantConditionalMana(this.mana);
}
@Override
public String getRule() {
return "Spend this mana only to cast creature spells";
}
}
class BeastcallerSavantConditionalMana extends ConditionalMana {
public BeastcallerSavantConditionalMana(Mana mana) {
super(mana);
this.staticText = "Spend this mana only to cast creature spells";
addCondition(new BeastcallerSavantManaCondition());
}
}
class BeastcallerSavantManaCondition implements Condition {
@Override
public boolean apply(Game game, Ability source) {
MageObject object = source.getSourceObject(game);
return object != null && (object instanceof Spell) && object.getCardType().contains(CardType.CREATURE);
}
}

View file

@ -0,0 +1,66 @@
/*
* 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.sets.battleforzendikar;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.common.LandfallAbility;
import mage.abilities.effects.common.continuous.GainAbilitySourceEffect;
import mage.abilities.keyword.FirstStrikeAbility;
import mage.cards.CardImpl;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.Rarity;
/**
*
* @author LevelX2
*/
public class BelligerentWhiptail extends CardImpl {
public BelligerentWhiptail(UUID ownerId) {
super(ownerId, 141, "Belligerent Whiptail", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{3}{R}");
this.expansionSetCode = "BFZ";
this.subtype.add("Wurm");
this.power = new MageInt(4);
this.toughness = new MageInt(2);
// <i>Landfall</i> Whenever a land enters the battlefield under your control, Belligerent Whiptail gains first strike until end of turn.
this.addAbility(new LandfallAbility(new GainAbilitySourceEffect(FirstStrikeAbility.getInstance(), Duration.EndOfTurn), false));
}
public BelligerentWhiptail(final BelligerentWhiptail card) {
super(card);
}
@Override
public BelligerentWhiptail copy() {
return new BelligerentWhiptail(this);
}
}

View file

@ -0,0 +1,71 @@
/*
* 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.sets.battleforzendikar;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.keyword.CantBeBlockedSourceAbility;
import mage.abilities.keyword.DevoidAbility;
import mage.abilities.keyword.IngestAbility;
import mage.cards.CardImpl;
import mage.constants.CardType;
import mage.constants.Rarity;
/**
*
* @author fireshoes
*/
public class BenthicInfiltrator extends CardImpl {
public BenthicInfiltrator(UUID ownerId) {
super(ownerId, 55, "Benthic Infiltrator", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{2}{U}");
this.expansionSetCode = "BFZ";
this.subtype.add("Eldrazi");
this.subtype.add("Drone");
this.power = new MageInt(1);
this.toughness = new MageInt(4);
// Devoid
this.addAbility(new DevoidAbility(this.color));
// Ingest
this.addAbility(new IngestAbility());
// Benthic Infiltrator can't be blocked.
this.addAbility(new CantBeBlockedSourceAbility());
}
public BenthicInfiltrator(final BenthicInfiltrator card) {
super(card);
}
@Override
public BenthicInfiltrator copy() {
return new BenthicInfiltrator(this);
}
}

View file

@ -0,0 +1,71 @@
/*
* 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.sets.battleforzendikar;
import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.common.SacrificeSourceCost;
import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
import mage.abilities.mana.ColorlessManaAbility;
import mage.cards.CardImpl;
import mage.constants.CardType;
import mage.constants.Rarity;
import mage.constants.Zone;
/**
*
* @author fireshoes
*/
public class BlightedCataract extends CardImpl {
public BlightedCataract(UUID ownerId) {
super(ownerId, 229, "Blighted Cataract", Rarity.UNCOMMON, new CardType[]{CardType.LAND}, "");
this.expansionSetCode = "BFZ";
// {T}: Add {1} to your mana pool.
this.addAbility(new ColorlessManaAbility());
// {5}{U}, {T}, Sacrifice Blighted Cataract: Draw two cards.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DrawCardSourceControllerEffect(2), new ManaCostsImpl("{5}{U}"));
ability.addCost(new TapSourceCost());
ability.addCost(new SacrificeSourceCost());
this.addAbility(ability);
}
public BlightedCataract(final BlightedCataract card) {
super(card);
}
@Override
public BlightedCataract copy() {
return new BlightedCataract(this);
}
}

View file

@ -0,0 +1,76 @@
/*
* 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.sets.battleforzendikar;
import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.common.SacrificeSourceCost;
import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.common.SacrificeEffect;
import mage.abilities.mana.ColorlessManaAbility;
import mage.cards.CardImpl;
import mage.constants.CardType;
import mage.constants.Rarity;
import mage.constants.Zone;
import mage.filter.common.FilterCreaturePermanent;
import mage.target.common.TargetOpponent;
/**
*
* @author LevelX2
*/
public class BlightedFen extends CardImpl {
public BlightedFen(UUID ownerId) {
super(ownerId, 230, "Blighted Fen", Rarity.UNCOMMON, new CardType[]{CardType.LAND}, "");
this.expansionSetCode = "BFZ";
// {T}: Add {1} to your mana pool.
this.addAbility(new ColorlessManaAbility());
// {4}{B}, {T}, Sacrifice Blighted Fen: Target opponent sacrifices a creature.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD,
new SacrificeEffect(new FilterCreaturePermanent(), 1, "Target opponent"),
new ManaCostsImpl<>("{4}{B}"));
ability.addCost(new TapSourceCost());
ability.addCost(new SacrificeSourceCost());
ability.addTarget(new TargetOpponent());
this.addAbility(ability);
}
public BlightedFen(final BlightedFen card) {
super(card);
}
@Override
public BlightedFen copy() {
return new BlightedFen(this);
}
}

View file

@ -0,0 +1,75 @@
/*
* 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.sets.battleforzendikar;
import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.common.SacrificeSourceCost;
import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.common.DamageTargetEffect;
import mage.abilities.mana.ColorlessManaAbility;
import mage.cards.CardImpl;
import mage.constants.CardType;
import mage.constants.Rarity;
import mage.constants.Zone;
import mage.target.common.TargetCreatureOrPlayer;
/**
*
* @author LevelX2
*/
public class BlightedGorge extends CardImpl {
public BlightedGorge(UUID ownerId) {
super(ownerId, 231, "Blighted Gorge", Rarity.UNCOMMON, new CardType[]{CardType.LAND}, "");
this.expansionSetCode = "BFZ";
// {T}: Add {1} to your mana pool.
this.addAbility(new ColorlessManaAbility());
// {4}{R}, {T}, Sacrifice Blighted Gorge: Blighted Gorge deals 2 damage to target creature or player.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD,
new DamageTargetEffect(2),
new ManaCostsImpl<>("{4}{R}"));
ability.addCost(new TapSourceCost());
ability.addCost(new SacrificeSourceCost());
ability.addTarget(new TargetCreatureOrPlayer());
this.addAbility(ability);
}
public BlightedGorge(final BlightedGorge card) {
super(card);
}
@Override
public BlightedGorge copy() {
return new BlightedGorge(this);
}
}

View file

@ -0,0 +1,75 @@
/*
* 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.sets.battleforzendikar;
import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.common.SacrificeSourceCost;
import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount;
import mage.abilities.effects.common.GainLifeEffect;
import mage.abilities.mana.ColorlessManaAbility;
import mage.cards.CardImpl;
import mage.constants.CardType;
import mage.constants.Rarity;
import mage.constants.Zone;
import mage.filter.common.FilterControlledCreaturePermanent;
/**
*
* @author LevelX2
*/
public class BlightedSteppe extends CardImpl {
public BlightedSteppe(UUID ownerId) {
super(ownerId, 232, "Blighted Steppe", Rarity.UNCOMMON, new CardType[]{CardType.LAND}, "");
this.expansionSetCode = "BFZ";
// {T}: Add {1} to your mana pool.
this.addAbility(new ColorlessManaAbility());
// {3}{W}, {T}, Sacrifice Blighted Steppe: You gain 2 life for each creature you control.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD,
new GainLifeEffect(new PermanentsOnBattlefieldCount(new FilterControlledCreaturePermanent("creature you control"), 2)),
new ManaCostsImpl<>("{3}{W}"));
ability.addCost(new TapSourceCost());
ability.addCost(new SacrificeSourceCost());
this.addAbility(ability);
}
public BlightedSteppe(final BlightedSteppe card) {
super(card);
}
@Override
public BlightedSteppe copy() {
return new BlightedSteppe(this);
}
}

View file

@ -0,0 +1,75 @@
/*
* 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.sets.battleforzendikar;
import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.common.SacrificeSourceCost;
import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.common.search.SearchLibraryPutInPlayEffect;
import mage.abilities.mana.ColorlessManaAbility;
import mage.cards.CardImpl;
import mage.constants.CardType;
import mage.constants.Rarity;
import mage.constants.Zone;
import mage.filter.common.FilterBasicLandCard;
import mage.target.common.TargetCardInLibrary;
/**
*
* @author LevelX2
*/
public class BlightedWoodland extends CardImpl {
public BlightedWoodland(UUID ownerId) {
super(ownerId, 233, "Blighted Woodland", Rarity.UNCOMMON, new CardType[]{CardType.LAND}, "");
this.expansionSetCode = "BFZ";
// {T}: Add {1} to your mana pool.
this.addAbility(new ColorlessManaAbility());
// {3}{G}, {T}, Sacrifice Blighted Woodland: Search your library for up to two basic land cards and put them onto the battlefield tapped. Then shuffle your library.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD,
new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(0, 2, new FilterBasicLandCard()), true, true),
new ManaCostsImpl<>("{3}{G}"));
ability.addCost(new TapSourceCost());
ability.addCost(new SacrificeSourceCost());
this.addAbility(ability);
}
public BlightedWoodland(final BlightedWoodland card) {
super(card);
}
@Override
public BlightedWoodland copy() {
return new BlightedWoodland(this);
}
}

View file

@ -0,0 +1,71 @@
/*
* 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.sets.battleforzendikar;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.common.DiesTriggeredAbility;
import mage.abilities.effects.Effect;
import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.keyword.DevoidAbility;
import mage.cards.CardImpl;
import mage.constants.CardType;
import mage.constants.Rarity;
import mage.game.permanent.token.EldraziScionToken;
/**
*
* @author LevelX2
*/
public class Blisterpod extends CardImpl {
public Blisterpod(UUID ownerId) {
super(ownerId, 163, "Blisterpod", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{G}");
this.expansionSetCode = "BFZ";
this.subtype.add("Eldrazi");
this.subtype.add("Drone");
this.power = new MageInt(1);
this.toughness = new MageInt(1);
// Devoid
this.addAbility(new DevoidAbility(this.color));
// When Blisterpod dies, put a 1/1 colorless Eldrazi Scion creature token onto the battlefield. It has "Sacrifice this creature: Add {1} to your mana pool."
Effect effect = new CreateTokenEffect(new EldraziScionToken());
effect.setText("put a 1/1 colorless Eldrazi Scion creature token onto the battlefield. It has \"Sacrifice this creature: Add {1} to your mana pool.\"");
this.addAbility(new DiesTriggeredAbility(effect, false));
}
public Blisterpod(final Blisterpod card) {
super(card);
}
@Override
public Blisterpod copy() {
return new Blisterpod(this);
}
}

View file

@ -0,0 +1,66 @@
/*
* 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.sets.battleforzendikar;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.common.GainLifeControllerTriggeredAbility;
import mage.abilities.effects.common.counter.AddCountersSourceEffect;
import mage.cards.CardImpl;
import mage.constants.CardType;
import mage.constants.Rarity;
import mage.counters.CounterType;
/**
*
* @author LevelX2
*/
public class BloodbondVampire extends CardImpl {
public BloodbondVampire(UUID ownerId) {
super(ownerId, 104, "Bloodbond Vampire", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{2}{B}{B}");
this.expansionSetCode = "BFZ";
this.subtype.add("Vampire");
this.subtype.add("Shaman");
this.subtype.add("Ally");
this.power = new MageInt(3);
this.toughness = new MageInt(3);
// Whenever you gain life, put a +1/+1 counter on Bloodbond Vampire.
this.addAbility(new GainLifeControllerTriggeredAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance()), false));
}
public BloodbondVampire(final BloodbondVampire card) {
super(card);
}
@Override
public BloodbondVampire copy() {
return new BloodbondVampire(this);
}
}

View file

@ -0,0 +1,71 @@
/*
* 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.sets.battleforzendikar;
import java.util.UUID;
import mage.abilities.effects.common.DamageAllEffect;
import mage.abilities.keyword.AwakenAbility;
import mage.cards.CardImpl;
import mage.constants.CardType;
import mage.constants.Rarity;
import mage.constants.TargetController;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.permanent.ControllerPredicate;
/**
*
* @author LevelX2
*/
public class BoilingEarth extends CardImpl {
private final static FilterCreaturePermanent filter = new FilterCreaturePermanent("creature your opponents control");
static {
filter.add(new ControllerPredicate(TargetController.OPPONENT));
}
public BoilingEarth(UUID ownerId) {
super(ownerId, 142, "Boiling Earth", Rarity.COMMON, new CardType[]{CardType.SORCERY}, "{1}{R}");
this.expansionSetCode = "BFZ";
// Boiling Earth deals 1 damage to each creature your opponents control.
this.getSpellAbility().addEffect(new DamageAllEffect(1, filter));
// Awaken 4{6}{R}
this.addAbility(new AwakenAbility(this, 4, "{6}{R}"));
}
public BoilingEarth(final BoilingEarth card) {
super(card);
}
@Override
public BoilingEarth copy() {
return new BoilingEarth(this);
}
}

View file

@ -0,0 +1,52 @@
/*
* 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.sets.battleforzendikar;
import java.util.UUID;
/**
*
* @author LevelX2
*/
public class BoneSplinters extends mage.sets.shardsofalara.BoneSplinters {
public BoneSplinters(UUID ownerId) {
super(ownerId);
this.cardNumber = 105;
this.expansionSetCode = "BFZ";
}
public BoneSplinters(final BoneSplinters card) {
super(card);
}
@Override
public BoneSplinters copy() {
return new BoneSplinters(this);
}
}

View file

@ -0,0 +1,66 @@
/*
* 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.sets.battleforzendikar;
import java.util.UUID;
import mage.abilities.dynamicvalue.common.ColorsOfManaSpentToCastCount;
import mage.abilities.effects.Effect;
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
import mage.abilities.effects.common.discard.DiscardControllerEffect;
import mage.cards.CardImpl;
import mage.constants.AbilityWord;
import mage.constants.CardType;
import mage.constants.Rarity;
/**
*
* @author LevelX2
*/
public class BrilliantSpectrum extends CardImpl {
public BrilliantSpectrum(UUID ownerId) {
super(ownerId, 70, "Brilliant Spectrum", Rarity.COMMON, new CardType[]{CardType.SORCERY}, "{3}{U}");
this.expansionSetCode = "BFZ";
// <i>Converge</i> Draw X cards, where X is the number of colors of mana spent to cast Brilliant Spectrum. Then discard two cards.
this.getSpellAbility().setAbilityWord(AbilityWord.CONVERGE);
Effect effect = new DrawCardSourceControllerEffect(ColorsOfManaSpentToCastCount.getInstance());
effect.setText("Draw X cards, where X is the number of colors of mana spent to cast {this}");
this.getSpellAbility().addEffect(effect);
this.getSpellAbility().addEffect(new DiscardControllerEffect(2));
}
public BrilliantSpectrum(final BrilliantSpectrum card) {
super(card);
}
@Override
public BrilliantSpectrum copy() {
return new BrilliantSpectrum(this);
}
}

View file

@ -0,0 +1,117 @@
/*
* 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.sets.battleforzendikar;
import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.dynamicvalue.common.ColorsOfManaSpentToCastCount;
import mage.abilities.effects.OneShotEffect;
import mage.cards.Card;
import mage.cards.CardImpl;
import mage.constants.CardType;
import mage.constants.Outcome;
import mage.constants.Rarity;
import mage.constants.Zone;
import mage.filter.Filter;
import mage.filter.FilterCard;
import mage.filter.predicate.Predicates;
import mage.filter.predicate.mageobject.CardTypePredicate;
import mage.filter.predicate.mageobject.ConvertedManaCostPredicate;
import mage.game.Game;
import mage.players.Player;
import mage.target.common.TargetCardInLibrary;
/**
*
* @author LevelX2
*/
public class BringToLight extends CardImpl {
public BringToLight(UUID ownerId) {
super(ownerId, 209, "Bring to Light", Rarity.RARE, new CardType[]{CardType.SORCERY}, "{3}{G}{U}");
this.expansionSetCode = "BFZ";
// <i>Converge</i>-Search your library for a creature, instant, or sorcery card with converted mana
// cost less than or equal to the number of colors of mana spent to cast Bring to Light, exile that card,
// then shuffle your library. You may cast that card without paying its mana cost.
this.getSpellAbility().addEffect(new BringToLightEffect());
}
public BringToLight(final BringToLight card) {
super(card);
}
@Override
public BringToLight copy() {
return new BringToLight(this);
}
}
class BringToLightEffect extends OneShotEffect {
public BringToLightEffect() {
super(Outcome.PlayForFree);
this.staticText = "<i>Converge</i> &mdash; Search your library for a creature, instant, or sorcery card with converted mana "
+ "cost less than or equal to the number of colors of mana spent to cast Bring to Light, exile that card, "
+ "then shuffle your library. You may cast that card without paying its mana cost";
}
public BringToLightEffect(final BringToLightEffect effect) {
super(effect);
}
@Override
public BringToLightEffect copy() {
return new BringToLightEffect(this);
}
@Override
public boolean apply(Game game, Ability source) {
Player controller = game.getPlayer(source.getControllerId());
if (controller != null) {
int numberColors = ColorsOfManaSpentToCastCount.getInstance().calculate(game, source, this);
FilterCard filter = new FilterCard();
filter.add(Predicates.or(new CardTypePredicate(CardType.CREATURE), new CardTypePredicate(CardType.INSTANT), new CardTypePredicate(CardType.SORCERY)));
filter.add(new ConvertedManaCostPredicate(Filter.ComparisonType.LessThan, numberColors + 1));
TargetCardInLibrary target = new TargetCardInLibrary(filter);
controller.searchLibrary(target, game);
Card card = controller.getLibrary().getCard(target.getFirstTarget(), game);
if (card != null) {
controller.moveCards(card, null, Zone.EXILED, source, game);
}
controller.shuffleLibrary(game);
if (card != null) {
if (controller.chooseUse(outcome, "Cast " + card.getName() + " without paying its mana cost?", source, game)) {
controller.cast(card.getSpellAbility(), game, true);
}
}
return true;
}
return false;
}
}

View file

@ -0,0 +1,72 @@
/*
* 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.sets.battleforzendikar;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
import mage.abilities.effects.Effect;
import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.keyword.DevoidAbility;
import mage.cards.CardImpl;
import mage.constants.CardType;
import mage.constants.Rarity;
import mage.game.permanent.token.EldraziScionToken;
/**
*
* @author LevelX2
*/
public class BroodMonitor extends CardImpl {
public BroodMonitor(UUID ownerId) {
super(ownerId, 164, "Brood Monitor", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{4}{G}{G}");
this.expansionSetCode = "BFZ";
this.subtype.add("Eldrazi");
this.subtype.add("Drone");
this.power = new MageInt(3);
this.toughness = new MageInt(3);
// Devoid
this.addAbility(new DevoidAbility(this.color));
// When Brood Monitor enters the battlefield, put three 1/1 colorless Eldrazi Scion creature tokens onto the battlefield. They have "Sacrifice this creature: Add {1} to your mana pool."
Effect effect = new CreateTokenEffect(new EldraziScionToken(), 3);
effect.setText("put three 1/1 colorless Eldrazi Scion creature tokens onto the battlefield. They have \"Sacrifice this creature: Add {1} to your mana pool.\"");
this.addAbility(new EntersBattlefieldTriggeredAbility(effect, false));
}
public BroodMonitor(final BroodMonitor card) {
super(card);
}
@Override
public BroodMonitor copy() {
return new BroodMonitor(this);
}
}

View file

@ -0,0 +1,58 @@
/*
* 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.sets.battleforzendikar;
import java.util.UUID;
import mage.MageInt;
import mage.cards.CardImpl;
import mage.constants.CardType;
import mage.constants.Rarity;
/**
*
* @author LevelX2
*/
public class BroodhunterWurm extends CardImpl {
public BroodhunterWurm(UUID ownerId) {
super(ownerId, 171, "Broodhunter Wurm", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{3}{G}");
this.expansionSetCode = "BFZ";
this.subtype.add("Wurm");
this.power = new MageInt(4);
this.toughness = new MageInt(3);
}
public BroodhunterWurm(final BroodhunterWurm card) {
super(card);
}
@Override
public BroodhunterWurm copy() {
return new BroodhunterWurm(this);
}
}

View file

@ -0,0 +1,93 @@
/*
* 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.sets.battleforzendikar;
import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.Mode;
import mage.abilities.effects.Effect;
import mage.abilities.effects.common.DamageTargetEffect;
import mage.abilities.effects.common.ReturnToHandTargetEffect;
import mage.abilities.effects.common.replacement.DealtDamageToCreatureBySourceDies;
import mage.abilities.keyword.DevoidAbility;
import mage.cards.CardImpl;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.Rarity;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.common.FilterSpellOrPermanent;
import mage.target.common.TargetCreatureOrPlaneswalker;
import mage.target.common.TargetSpellOrPermanent;
import mage.watchers.common.DamagedByWatcher;
/**
*
* @author LevelX2
*/
public class BrutalExpulsion extends CardImpl {
private static final FilterSpellOrPermanent filter = new FilterSpellOrPermanent("spell or creature");
static {
filter.setPermanentFilter(new FilterCreaturePermanent());
}
public BrutalExpulsion(UUID ownerId) {
super(ownerId, 200, "Brutal Expulsion", Rarity.RARE, new CardType[]{CardType.INSTANT}, "{2}{U}{R}");
this.expansionSetCode = "BFZ";
// Devoid
Ability ability = new DevoidAbility(this.color);
ability.setRuleAtTheTop(true);
this.addAbility(ability);
// Choose one or both
this.getSpellAbility().getModes().setMinModes(1);
this.getSpellAbility().getModes().setMaxModes(2);
// - Return target spell or creature to its owner's hand;
this.getSpellAbility().addTarget(new TargetSpellOrPermanent(1, 1, filter, false));
this.getSpellAbility().addEffect(new ReturnToHandTargetEffect());
// or Brutal Expulsion deals 2 damage to target creature or planeswalker. If that permanent would be put into a graveyard this turn, exile it instead.
Mode mode = new Mode();
mode.getEffects().add(new DamageTargetEffect(2));
mode.getTargets().add(new TargetCreatureOrPlaneswalker());
Effect effect = new DealtDamageToCreatureBySourceDies(this, Duration.EndOfTurn);
effect.setText("If that permanent would be put into a graveyard this turn, exile it instead");
mode.getEffects().add(effect);
this.getSpellAbility().addMode(mode);
this.getSpellAbility().addWatcher(new DamagedByWatcher());
}
public BrutalExpulsion(final BrutalExpulsion card) {
super(card);
}
@Override
public BrutalExpulsion copy() {
return new BrutalExpulsion(this);
}
}

View file

@ -0,0 +1,69 @@
/*
* 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.sets.battleforzendikar;
import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.effects.Effect;
import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.keyword.DevoidAbility;
import mage.cards.CardImpl;
import mage.constants.CardType;
import mage.constants.Rarity;
import mage.game.permanent.token.EldraziScionToken;
/**
*
* @author LevelX2
*/
public class CallTheScions extends CardImpl {
public CallTheScions(UUID ownerId) {
super(ownerId, 165, "Call the Scions", Rarity.COMMON, new CardType[]{CardType.SORCERY}, "{2}{G}");
this.expansionSetCode = "BFZ";
// Devoid
Ability ability = new DevoidAbility(this.color);
ability.setRuleAtTheTop(true);
this.addAbility(ability);
// Put two 1/1 colorless Eldrazi Scion creature tokens onto the battlefield. They have "Sacrifice this creature: add {1} to your mana pool."
Effect effect = new CreateTokenEffect(new EldraziScionToken(), 2);
effect.setText("put two 1/1 colorless Eldrazi Scion creature tokens onto the battlefield. They have \"Sacrifice this creature: Add {1} to your mana pool.\"");
this.getSpellAbility().addEffect(effect);
}
public CallTheScions(final CallTheScions card) {
super(card);
}
@Override
public CallTheScions copy() {
return new CallTheScions(this);
}
}

View file

@ -0,0 +1,68 @@
/*
* 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.sets.battleforzendikar;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.common.DiesTriggeredAbility;
import mage.abilities.effects.Effect;
import mage.abilities.effects.common.CreateTokenEffect;
import mage.cards.CardImpl;
import mage.constants.CardType;
import mage.constants.Rarity;
import mage.game.permanent.token.EldraziScionToken;
/**
*
* @author LevelX2
*/
public class CarrierThrall extends CardImpl {
public CarrierThrall(UUID ownerId) {
super(ownerId, 106, "Carrier Thrall", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{1}{B}");
this.expansionSetCode = "BFZ";
this.subtype.add("Vampire");
this.power = new MageInt(2);
this.toughness = new MageInt(1);
// When Carrier Thrall dies, put a 1/1 colorless Eldrazi Scion creature token onto the battlefield. It has "Sacrifice this creature. Add {1} to your mana pool."
Effect effect = new CreateTokenEffect(new EldraziScionToken());
effect.setText("put a 1/1 colorless Eldrazi Scion creature token onto the battlefield. It has \"Sacrifice this creature: Add {1} to your mana pool.\"");
this.addAbility(new DiesTriggeredAbility(effect, false));
}
public CarrierThrall(final CarrierThrall card) {
super(card);
}
@Override
public CarrierThrall copy() {
return new CarrierThrall(this);
}
}

Some files were not shown because too many files have changed in this diff Show more