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
192
.gitignore
vendored
|
|
@ -1,95 +1,97 @@
|
|||
syntax: glob
|
||||
Mage.Client/*.dck
|
||||
Mage.Client/db
|
||||
Mage.Client/gamelogs
|
||||
Mage.Client/mageclient.log
|
||||
Mage.Client/plugins/images
|
||||
Mage.Client/plugins/plugin.data
|
||||
Mage.Client/target
|
||||
Mage.Common/target
|
||||
Mage.Plugins/Mage.Card.Plugin/target
|
||||
Mage.Plugins/Mage.Counter.Plugin/target
|
||||
Mage.Plugins/Mage.Theme.Plugin/target
|
||||
Mage.Plugins/Mage.Rating.Plugin/target
|
||||
Mage.Server.Console/target/
|
||||
Mage.Server.Console/mageadmin.log
|
||||
Mage.Server.Plugins/Mage.Deck.Constructed/target
|
||||
Mage.Server.Plugins/Mage.Deck.Limited/target
|
||||
Mage.Server.Plugins/Mage.Game.CommanderDuel/target
|
||||
Mage.Server.Plugins/Mage.Game.CommanderFreeForAll/target/
|
||||
Mage.Server.Plugins/Mage.Game.FreeForAll/target
|
||||
Mage.Server.Plugins/Mage.Game.TinyLeadersDuel/target
|
||||
Mage.Server.Plugins/Mage.Game.TwoPlayerDuel/target
|
||||
Mage.Server.Plugins/Mage.Player.AI.DraftBot/target
|
||||
Mage.Server.Plugins/Mage.Player.AI.MA/target
|
||||
Mage.Server.Plugins/Mage.Player.AI/target
|
||||
Mage.Server.Plugins/Mage.Player.AIMCTS/target
|
||||
Mage.Server.Plugins/Mage.Player.AIMinimax/target
|
||||
Mage.Server.Plugins/Mage.Player.Human/target
|
||||
Mage.Server.Plugins/Mage.Tournament.BoosterDraft/target
|
||||
Mage.Server.Plugins/Mage.Tournament.Constructed/target
|
||||
Mage.Server.Plugins/Mage.Tournament.Sealed/target
|
||||
Mage.Server/config/init.txt
|
||||
Mage.Server/saved
|
||||
Mage.Server/target
|
||||
Mage.Server/db
|
||||
Mage.Server/cache
|
||||
Mage.Server/mageserver.log
|
||||
Mage.Server/magediag.log
|
||||
Mage.Sets/target
|
||||
Mage.Stats/server.log
|
||||
Mage.Stats/mageserver.log
|
||||
Mage.Stats/magediag.log
|
||||
Mage.Tests/target
|
||||
Mage.Tests/cache
|
||||
Mage.Tests/db
|
||||
Mage.Tests/Mage.log
|
||||
Mage.Tests/watchdog.log
|
||||
Mage/target
|
||||
Mage.Updater/target
|
||||
mage.updater.client/target
|
||||
|
||||
releases
|
||||
Utils/author.txt
|
||||
.DS_Store
|
||||
.metadata
|
||||
.project
|
||||
.settings
|
||||
.idea
|
||||
syntax: regexp
|
||||
\.class
|
||||
\.jar
|
||||
\.iml
|
||||
\.ipr
|
||||
\.iws
|
||||
\.log
|
||||
nbactions.xml
|
||||
nbactions-*.xml
|
||||
nb-configuration.xml
|
||||
glob:Mage.Client/cheat.dck
|
||||
glob:Mage.Client/test.dck
|
||||
mage-bundle.zip
|
||||
mage-stats-ws.war
|
||||
|
||||
Mage.Server.Plugins/Mage.Draft.8PlayerBooster/target
|
||||
\.orig\..*$
|
||||
\.orig$
|
||||
\.chg\..*$
|
||||
\.rej$
|
||||
\.conflict\~$
|
||||
/Mage.Server.Plugins/Mage.Player.AIMCTS/target/
|
||||
|
||||
*.classpath
|
||||
*.iml
|
||||
/submitted
|
||||
|
||||
/Mage.Server/config/ai.please.cast.this.txt
|
||||
/Mage.Stats/target/
|
||||
/Utils/*_unimplemented.txt
|
||||
*.netbeans_automatic_build
|
||||
*.txt
|
||||
Mage.Client/serverlist.txt
|
||||
/Mage.Network/target/
|
||||
/Mage.Server.Tests/target/
|
||||
/Mage.Server.Tests/db
|
||||
/Mage.Server.Tests/*.log
|
||||
syntax: glob
|
||||
Mage.Client/*.dck
|
||||
Mage.Client/db
|
||||
Mage.Client/gamelogs
|
||||
Mage.Client/mageclient.log
|
||||
Mage.Client/plugins/images
|
||||
Mage.Client/plugins/plugin.data
|
||||
Mage.Client/target
|
||||
Mage.Common/target
|
||||
Mage.Plugins/Mage.Card.Plugin/target
|
||||
Mage.Plugins/Mage.Counter.Plugin/target
|
||||
Mage.Plugins/Mage.Theme.Plugin/target
|
||||
Mage.Plugins/Mage.Rating.Plugin/target
|
||||
Mage.Server.Console/target/
|
||||
Mage.Server.Console/mageadmin.log
|
||||
Mage.Server.Plugins/Mage.Deck.Constructed/target
|
||||
Mage.Server.Plugins/Mage.Deck.Limited/target
|
||||
Mage.Server.Plugins/Mage.Game.CommanderDuel/target
|
||||
Mage.Server.Plugins/Mage.Game.CommanderFreeForAll/target/
|
||||
Mage.Server.Plugins/Mage.Game.FreeForAll/target
|
||||
Mage.Server.Plugins/Mage.Game.TinyLeadersDuel/target
|
||||
Mage.Server.Plugins/Mage.Game.TwoPlayerDuel/target
|
||||
Mage.Server.Plugins/Mage.Player.AI.DraftBot/target
|
||||
Mage.Server.Plugins/Mage.Player.AI.MA/target
|
||||
Mage.Server.Plugins/Mage.Player.AI/target
|
||||
Mage.Server.Plugins/Mage.Player.AIMCTS/target
|
||||
Mage.Server.Plugins/Mage.Player.AIMinimax/target
|
||||
Mage.Server.Plugins/Mage.Player.Human/target
|
||||
Mage.Server.Plugins/Mage.Tournament.BoosterDraft/target
|
||||
Mage.Server.Plugins/Mage.Tournament.Constructed/target
|
||||
Mage.Server.Plugins/Mage.Tournament.Sealed/target
|
||||
Mage.Server/config/init.txt
|
||||
Mage.Server/saved
|
||||
Mage.Server/target
|
||||
Mage.Server/db
|
||||
Mage.Server/cache
|
||||
Mage.Server/mageserver.log
|
||||
Mage.Server/magediag.log
|
||||
Mage.Sets/target
|
||||
Mage.Stats/server.log
|
||||
Mage.Stats/mageserver.log
|
||||
Mage.Stats/magediag.log
|
||||
Mage.Tests/target
|
||||
Mage.Tests/cache
|
||||
Mage.Tests/db
|
||||
Mage.Tests/Mage.log
|
||||
Mage.Tests/watchdog.log
|
||||
Mage/target
|
||||
Mage.Updater/target
|
||||
mage.updater.client/target
|
||||
|
||||
releases
|
||||
Utils/author.txt
|
||||
.DS_Store
|
||||
.metadata
|
||||
.project
|
||||
.settings
|
||||
.idea
|
||||
syntax: regexp
|
||||
\.class
|
||||
\.jar
|
||||
\.iml
|
||||
\.ipr
|
||||
\.iws
|
||||
\.log
|
||||
nbactions.xml
|
||||
nbactions-*.xml
|
||||
nb-configuration.xml
|
||||
glob:Mage.Client/cheat.dck
|
||||
glob:Mage.Client/test.dck
|
||||
mage-bundle.zip
|
||||
mage-stats-ws.war
|
||||
|
||||
Mage.Server.Plugins/Mage.Draft.8PlayerBooster/target
|
||||
\.orig\..*$
|
||||
\.orig$
|
||||
\.chg\..*$
|
||||
\.rej$
|
||||
\.conflict\~$
|
||||
/Mage.Server.Plugins/Mage.Player.AIMCTS/target/
|
||||
|
||||
*.classpath
|
||||
*.iml
|
||||
/submitted
|
||||
|
||||
/Mage.Server/config/ai.please.cast.this.txt
|
||||
/Mage.Stats/target/
|
||||
/Utils/*_unimplemented.txt
|
||||
*.netbeans_automatic_build
|
||||
*.txt
|
||||
Mage.Client/serverlist.txt
|
||||
/Mage.Network/target/
|
||||
/Mage.Server.Tests/target/
|
||||
/Mage.Server.Tests/db
|
||||
/Mage.Server.Tests/*.log
|
||||
Mage.Client/serverlist.txt
|
||||
/bin/
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
XMage.de 1 (Europe/Germany) fast :xmage.de:17171
|
||||
woogerworks (North America/USA) :xmage.woogerworks.info: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
|
||||
localhost -> connect to your local server (must be started):localhost:17171
|
||||
|
|
|
|||
|
|
@ -1,16 +1,16 @@
|
|||
/*
|
||||
* 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
|
||||
|
|
@ -20,7 +20,7 @@
|
|||
* 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.
|
||||
|
|
@ -31,7 +31,6 @@
|
|||
*
|
||||
* Created on 30-Mar-2010, 9:25:40 PM
|
||||
*/
|
||||
|
||||
package mage.client.cards;
|
||||
|
||||
import java.awt.Component;
|
||||
|
|
@ -54,6 +53,7 @@ import mage.client.plugins.impl.Plugins;
|
|||
import mage.client.util.Config;
|
||||
import mage.client.util.Event;
|
||||
import mage.client.util.Listener;
|
||||
import mage.utils.CardUtil;
|
||||
import mage.view.CardView;
|
||||
import mage.view.CardsView;
|
||||
import org.mage.card.arcane.CardPanel;
|
||||
|
|
@ -82,7 +82,7 @@ public class CardGrid extends javax.swing.JLayeredPane implements MouseListener,
|
|||
}
|
||||
|
||||
public void clear() {
|
||||
for(MouseListener ml: this.getMouseListeners()) {
|
||||
for (MouseListener ml : this.getMouseListeners()) {
|
||||
this.removeMouseListener(ml);
|
||||
}
|
||||
this.clearCardEventListeners();
|
||||
|
|
@ -101,7 +101,7 @@ public class CardGrid extends javax.swing.JLayeredPane implements MouseListener,
|
|||
this.bigCard = bigCard;
|
||||
this.gameId = gameId;
|
||||
if (merge) {
|
||||
for (CardView card: showCards.values()) {
|
||||
for (CardView card : showCards.values()) {
|
||||
if (!cards.containsKey(card.getId())) {
|
||||
addCard(card, bigCard, gameId, drawImage);
|
||||
}
|
||||
|
|
@ -115,7 +115,7 @@ public class CardGrid extends javax.swing.JLayeredPane implements MouseListener,
|
|||
}
|
||||
} else {
|
||||
this.clearCards();
|
||||
for (CardView card: showCards.values()) {
|
||||
for (CardView card : showCards.values()) {
|
||||
addCard(card, bigCard, gameId, drawImage);
|
||||
}
|
||||
}
|
||||
|
|
@ -144,7 +144,7 @@ public class CardGrid extends javax.swing.JLayeredPane implements MouseListener,
|
|||
int curRow = 0;
|
||||
if (cards.size() > 0) {
|
||||
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()) {
|
||||
case NAME:
|
||||
Collections.sort(sortedCards, new CardNameComparator());
|
||||
|
|
@ -155,15 +155,16 @@ public class CardGrid extends javax.swing.JLayeredPane implements MouseListener,
|
|||
case COLOR:
|
||||
Collections.sort(sortedCards, new CardColorComparator());
|
||||
break;
|
||||
case COLOR_DETAILED:
|
||||
Collections.sort(sortedCards, new CardColorDetailedComparator());
|
||||
case COLOR_IDENTITY:
|
||||
Collections.sort(sortedCards, new CardColorDetailedIdentity());
|
||||
break;
|
||||
case CASTING_COST:
|
||||
Collections.sort(sortedCards, new CardCostComparator());
|
||||
break;
|
||||
|
||||
}
|
||||
MageCard lastCard = null;
|
||||
for (MageCard cardImg: sortedCards) {
|
||||
for (MageCard cardImg : sortedCards) {
|
||||
if (sortSetting.isPilesToggle()) {
|
||||
if (lastCard == null) {
|
||||
lastCard = cardImg;
|
||||
|
|
@ -187,8 +188,9 @@ public class CardGrid extends javax.swing.JLayeredPane implements MouseListener,
|
|||
curRow = 0;
|
||||
}
|
||||
break;
|
||||
case COLOR_DETAILED:
|
||||
if (cardImg.getOriginal().getColor().hashCode() != lastCard.getOriginal().getColor().hashCode()) {
|
||||
case COLOR_IDENTITY:
|
||||
if (CardUtil.getColorIdentitySortValue(cardImg.getOriginal().getManaCost(), cardImg.getOriginal().getColor(), cardImg.getOriginal().getRules())
|
||||
!= CardUtil.getColorIdentitySortValue(lastCard.getOriginal().getManaCost(), lastCard.getOriginal().getColor(), lastCard.getOriginal().getRules())) {
|
||||
curColumn++;
|
||||
curRow = 0;
|
||||
}
|
||||
|
|
@ -206,8 +208,7 @@ public class CardGrid extends javax.swing.JLayeredPane implements MouseListener,
|
|||
moveToFront(cardImg);
|
||||
curRow++;
|
||||
lastCard = cardImg;
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
rectangle.setLocation(curColumn * Config.dimensions.frameWidth, curRow * 20);
|
||||
cardImg.setBounds(rectangle);
|
||||
cardImg.setCardBounds(rectangle.x, rectangle.y, Config.dimensions.frameWidth, Config.dimensions.frameHeight);
|
||||
|
|
@ -221,15 +222,15 @@ public class CardGrid extends javax.swing.JLayeredPane implements MouseListener,
|
|||
}
|
||||
}
|
||||
resizeArea();
|
||||
revalidate();
|
||||
repaint();
|
||||
revalidate();
|
||||
repaint();
|
||||
}
|
||||
|
||||
private void clearCards() {
|
||||
// remove possible mouse listeners, preventing gc
|
||||
for (MageCard mageCard: cards.values()) {
|
||||
for (MageCard mageCard : cards.values()) {
|
||||
if (mageCard instanceof CardPanel) {
|
||||
((CardPanel)mageCard).cleanUp();
|
||||
((CardPanel) mageCard).cleanUp();
|
||||
}
|
||||
}
|
||||
this.cards.clear();
|
||||
|
|
@ -237,7 +238,7 @@ public class CardGrid extends javax.swing.JLayeredPane implements MouseListener,
|
|||
}
|
||||
|
||||
private void removeAllCardImg() {
|
||||
for (Component comp: getComponents()) {
|
||||
for (Component comp : getComponents()) {
|
||||
if (comp instanceof Card || comp instanceof MageCard) {
|
||||
remove(comp);
|
||||
}
|
||||
|
|
@ -245,14 +246,14 @@ public class CardGrid extends javax.swing.JLayeredPane implements MouseListener,
|
|||
}
|
||||
|
||||
private void removeCardImg(UUID cardId) {
|
||||
for (Component comp: getComponents()) {
|
||||
for (Component comp : getComponents()) {
|
||||
if (comp instanceof Card) {
|
||||
if (((Card)comp).getCardId().equals(cardId)) {
|
||||
if (((Card) comp).getCardId().equals(cardId)) {
|
||||
remove(comp);
|
||||
comp = null;
|
||||
}
|
||||
} else if (comp instanceof MageCard) {
|
||||
if (((MageCard)comp).getOriginal().getId().equals(cardId)) {
|
||||
if (((MageCard) comp).getOriginal().getId().equals(cardId)) {
|
||||
remove(comp);
|
||||
comp = null;
|
||||
}
|
||||
|
|
@ -275,10 +276,10 @@ public class CardGrid extends javax.swing.JLayeredPane implements MouseListener,
|
|||
cardEventSource.clearListeners();
|
||||
}
|
||||
|
||||
/** This method is called from within the constructor to
|
||||
* initialize the form.
|
||||
* WARNING: Do NOT modify this code. The content of this method is
|
||||
* always regenerated by the Form Editor.
|
||||
/**
|
||||
* This method is called from within the constructor to initialize the form.
|
||||
* WARNING: Do NOT modify this code. The content of this method is always
|
||||
* regenerated by the Form Editor.
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
// <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
|
||||
|
||||
|
||||
// Variables declaration - do not modify//GEN-BEGIN:variables
|
||||
// End of variables declaration//GEN-END:variables
|
||||
|
||||
@Override
|
||||
public void mouseClicked(MouseEvent e) {
|
||||
if (e.getClickCount() == 2 && !e.isConsumed()) {
|
||||
|
|
@ -322,22 +321,26 @@ public class CardGrid extends javax.swing.JLayeredPane implements MouseListener,
|
|||
}
|
||||
|
||||
@Override
|
||||
public void mousePressed(MouseEvent e) {}
|
||||
public void mousePressed(MouseEvent e) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mouseReleased(MouseEvent e) {}
|
||||
public void mouseReleased(MouseEvent e) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mouseEntered(MouseEvent e) {}
|
||||
public void mouseEntered(MouseEvent e) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mouseExited(MouseEvent e) {}
|
||||
public void mouseExited(MouseEvent e) {
|
||||
}
|
||||
|
||||
private void resizeArea() {
|
||||
Dimension area = new Dimension(0, 0);
|
||||
Dimension size = getPreferredSize();
|
||||
|
||||
for (Component comp: getComponents()) {
|
||||
for (Component comp : getComponents()) {
|
||||
Rectangle r = comp.getBounds();
|
||||
if (r.x + r.width > area.width) {
|
||||
area.width = r.x + r.width;
|
||||
|
|
@ -348,13 +351,13 @@ public class CardGrid extends javax.swing.JLayeredPane implements MouseListener,
|
|||
}
|
||||
if (size.height != area.height || size.width != area.width) {
|
||||
setPreferredSize(area);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void refresh() {
|
||||
revalidate();
|
||||
repaint();
|
||||
repaint();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -379,8 +382,7 @@ class CardRarityComparator implements Comparator<MageCard> {
|
|||
int val = o1.getOriginal().getRarity().compareTo(o2.getOriginal().getRarity());
|
||||
if (val == 0) {
|
||||
return o1.getOriginal().getName().compareTo(o2.getOriginal().getName());
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
return val;
|
||||
}
|
||||
}
|
||||
|
|
@ -394,8 +396,7 @@ class CardCostComparator implements Comparator<MageCard> {
|
|||
int val = Integer.valueOf(o1.getOriginal().getConvertedManaCost()).compareTo(Integer.valueOf(o2.getOriginal().getConvertedManaCost()));
|
||||
if (val == 0) {
|
||||
return o1.getOriginal().getName().compareTo(o2.getOriginal().getName());
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
return val;
|
||||
}
|
||||
}
|
||||
|
|
@ -409,23 +410,22 @@ class CardColorComparator implements Comparator<MageCard> {
|
|||
int val = o1.getOriginal().getColor().compareTo(o2.getOriginal().getColor());
|
||||
if (val == 0) {
|
||||
return o1.getOriginal().getName().compareTo(o2.getOriginal().getName());
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
return val;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
class CardColorDetailedComparator implements Comparator<MageCard> {
|
||||
class CardColorDetailedIdentity implements Comparator<MageCard> {
|
||||
|
||||
@Override
|
||||
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) {
|
||||
return o1.getOriginal().getName().compareTo(o2.getOriginal().getName());
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
return val;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,37 +1,36 @@
|
|||
/*
|
||||
* 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.
|
||||
*/
|
||||
* 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.
|
||||
*/
|
||||
|
||||
/*
|
||||
* CardsList.java
|
||||
*
|
||||
* Created on Dec 18, 2009, 10:40:12 AM
|
||||
*/
|
||||
|
||||
package mage.client.cards;
|
||||
|
||||
import java.awt.Color;
|
||||
|
|
@ -59,7 +58,7 @@ import mage.client.constants.Constants.DeckEditorMode;
|
|||
import mage.client.constants.Constants.SortBy;
|
||||
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_DETAILED;
|
||||
import static mage.client.constants.Constants.SortBy.COLOR_IDENTITY;
|
||||
import static mage.client.constants.Constants.SortBy.RARITY;
|
||||
import mage.client.deckeditor.SortSetting;
|
||||
import mage.client.deckeditor.table.TableModel;
|
||||
|
|
@ -67,7 +66,7 @@ import mage.client.deckeditor.table.UpdateCountsCallback;
|
|||
import mage.client.dialog.PreferencesDialog;
|
||||
import mage.client.plugins.impl.Plugins;
|
||||
import mage.client.util.CardViewColorComparator;
|
||||
import mage.client.util.CardViewColorDetailedComparator;
|
||||
import mage.client.util.CardViewColorIdentityComparator;
|
||||
import mage.client.util.CardViewCostComparator;
|
||||
import mage.client.util.CardViewNameComparator;
|
||||
import mage.client.util.CardViewRarityComparator;
|
||||
|
|
@ -86,7 +85,7 @@ import org.mage.card.arcane.CardPanel;
|
|||
* @author BetaSteward_at_googlemail.com
|
||||
*/
|
||||
public class CardsList extends javax.swing.JPanel implements MouseListener, ICardGrid {
|
||||
|
||||
|
||||
protected CardEventSource cardEventSource = new CardEventSource();
|
||||
private Dimension cardDimension;
|
||||
private CardsView cards;
|
||||
|
|
@ -98,8 +97,10 @@ public class CardsList extends javax.swing.JPanel implements MouseListener, ICar
|
|||
private TableModel mainModel;
|
||||
private JTable mainTable;
|
||||
private ICardGrid currentView;
|
||||
|
||||
/** Creates new form Cards */
|
||||
|
||||
/**
|
||||
* Creates new form Cards
|
||||
*/
|
||||
public CardsList() {
|
||||
initComponents();
|
||||
makeTransparent();
|
||||
|
|
@ -115,22 +116,22 @@ public class CardsList extends javax.swing.JPanel implements MouseListener, ICar
|
|||
mainModel.removeTableModelListener(mainTable);
|
||||
mainModel.clear();
|
||||
}
|
||||
if(cardArea != null) {
|
||||
for(MouseListener ml: cardArea.getMouseListeners()) {
|
||||
if (cardArea != null) {
|
||||
for (MouseListener ml : cardArea.getMouseListeners()) {
|
||||
cardArea.removeMouseListener(ml);
|
||||
}
|
||||
}
|
||||
if(mainTable != null) {
|
||||
for(MouseListener ml: mainTable.getMouseListeners()) {
|
||||
if (mainTable != null) {
|
||||
for (MouseListener ml : mainTable.getMouseListeners()) {
|
||||
mainTable.removeMouseListener(ml);
|
||||
}
|
||||
}
|
||||
if (currentView != null) {
|
||||
currentView.clearCardEventListeners();
|
||||
}
|
||||
for (Component comp :cardArea.getComponents()) {
|
||||
if (comp instanceof CardPanel) {
|
||||
((CardPanel)comp).cleanUp();
|
||||
for (Component comp : cardArea.getComponents()) {
|
||||
if (comp instanceof CardPanel) {
|
||||
((CardPanel) comp).cleanUp();
|
||||
}
|
||||
}
|
||||
mageCards.clear();
|
||||
|
|
@ -208,20 +209,20 @@ public class CardsList extends javax.swing.JPanel implements MouseListener, ICar
|
|||
// activate spinner for card number change
|
||||
mainModel.setNumberEditable(true);
|
||||
TableColumnModel tcm = mainTable.getColumnModel();
|
||||
TableColumn tc = tcm.getColumn(0);
|
||||
TableColumn tc = tcm.getColumn(0);
|
||||
tc.setMaxWidth(55);
|
||||
tc.setMinWidth(55);
|
||||
tc.setPreferredWidth(55);
|
||||
tc.setCellEditor(new TableSpinnerEditor(this));
|
||||
tc.setCellEditor(new TableSpinnerEditor(this));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public void handleSetNumber(int number) {
|
||||
if (mainTable.getSelectedRowCount() == 1) {
|
||||
mainModel.setNumber(mainTable.getSelectedRow(), number);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public void handleDoubleClick() {
|
||||
if (mainTable.getSelectedRowCount() > 0) {
|
||||
int[] n = mainTable.getSelectedRows();
|
||||
|
|
@ -232,7 +233,7 @@ public class CardsList extends javax.swing.JPanel implements MouseListener, ICar
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public void handleAltDoubleClick() {
|
||||
if (mainTable.getSelectedRowCount() > 0) {
|
||||
int[] n = mainTable.getSelectedRows();
|
||||
|
|
@ -243,7 +244,7 @@ public class CardsList extends javax.swing.JPanel implements MouseListener, ICar
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public ICardGrid getMainModel() {
|
||||
return mainModel;
|
||||
}
|
||||
|
|
@ -256,7 +257,6 @@ public class CardsList extends javax.swing.JPanel implements MouseListener, ICar
|
|||
return list;
|
||||
}
|
||||
|
||||
|
||||
public void loadCards(CardsView showCards, BigCard bigCard, UUID gameId) {
|
||||
int selectedRow = -1;
|
||||
if (currentView.equals(mainModel)) {
|
||||
|
|
@ -270,7 +270,7 @@ public class CardsList extends javax.swing.JPanel implements MouseListener, ICar
|
|||
chkPiles.setSelected(sortSetting.isPilesToggle());
|
||||
currentView.loadCards(showCards, sortSetting, bigCard, gameId);
|
||||
if (selectedRow >= 0) {
|
||||
selectedRow = Math.min(selectedRow, mainTable.getRowCount()-1);
|
||||
selectedRow = Math.min(selectedRow, mainTable.getRowCount() - 1);
|
||||
if (selectedRow >= 0) {
|
||||
mainTable.setRowSelectionInterval(selectedRow, selectedRow);
|
||||
}
|
||||
|
|
@ -281,7 +281,7 @@ public class CardsList extends javax.swing.JPanel implements MouseListener, ICar
|
|||
if (cards == null) {
|
||||
cards = new CardsView();
|
||||
}
|
||||
currentView.loadCards(cards, sortSetting, bigCard, gameId);
|
||||
currentView.loadCards(cards, sortSetting, bigCard, gameId);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -295,22 +295,21 @@ public class CardsList extends javax.swing.JPanel implements MouseListener, ICar
|
|||
Comparator<CardView> comparator = null;
|
||||
Map<UUID, MageCard> oldMageCards = mageCards;
|
||||
mageCards = new LinkedHashMap<>();
|
||||
|
||||
|
||||
//Find card view
|
||||
for(UUID uuid : cards.keySet()){
|
||||
if(oldMageCards.containsKey(uuid)){
|
||||
for (UUID uuid : cards.keySet()) {
|
||||
if (oldMageCards.containsKey(uuid)) {
|
||||
mageCards.put(uuid, oldMageCards.get(uuid));
|
||||
oldMageCards.remove(uuid);
|
||||
}
|
||||
else{
|
||||
} else {
|
||||
mageCards.put(uuid, addCard(cards.get(uuid), bigCard, gameId));
|
||||
}
|
||||
}
|
||||
//Remove unused cards
|
||||
for(MageCard card : oldMageCards.values()){
|
||||
for (MageCard card : oldMageCards.values()) {
|
||||
cardArea.remove(card);
|
||||
}
|
||||
|
||||
|
||||
if (cards != null && cards.size() > 0) {
|
||||
Rectangle rectangle = new Rectangle(Config.dimensions.frameWidth, Config.dimensions.frameHeight);
|
||||
List<CardView> sortedCards = new ArrayList<>(cards.values());
|
||||
|
|
@ -324,25 +323,25 @@ public class CardsList extends javax.swing.JPanel implements MouseListener, ICar
|
|||
case COLOR:
|
||||
comparator = new CardViewColorComparator();
|
||||
break;
|
||||
case COLOR_DETAILED:
|
||||
comparator = new CardViewColorDetailedComparator();
|
||||
case COLOR_IDENTITY:
|
||||
comparator = new CardViewColorIdentityComparator();
|
||||
break;
|
||||
case CASTING_COST:
|
||||
comparator = new CardViewCostComparator();
|
||||
break;
|
||||
}
|
||||
if(comparator != null){
|
||||
if (comparator != null) {
|
||||
Collections.sort(sortedCards, new CardViewNameComparator());
|
||||
Collections.sort(sortedCards, comparator);
|
||||
}
|
||||
CardView lastCard = null;
|
||||
for (CardView card: sortedCards) {
|
||||
for (CardView card : sortedCards) {
|
||||
if (sortSetting.isPilesToggle()) {
|
||||
if (lastCard == null) {
|
||||
lastCard = card;
|
||||
}
|
||||
if(comparator != null){
|
||||
if(comparator.compare(card, lastCard) > 0){
|
||||
if (comparator != null) {
|
||||
if (comparator.compare(card, lastCard) > 0) {
|
||||
curColumn++;
|
||||
maxRow = Math.max(maxRow, curRow);
|
||||
curRow = 0;
|
||||
|
|
@ -350,7 +349,7 @@ public class CardsList extends javax.swing.JPanel implements MouseListener, ICar
|
|||
}
|
||||
rectangle.setLocation(curColumn * Config.dimensions.frameWidth, curRow * 20);
|
||||
setCardBounds(mageCards.get(card.getId()), rectangle);
|
||||
|
||||
|
||||
curRow++;
|
||||
lastCard = card;
|
||||
} else {
|
||||
|
|
@ -368,21 +367,21 @@ public class CardsList extends javax.swing.JPanel implements MouseListener, ICar
|
|||
maxRow = Math.max(maxRow, curRow);
|
||||
maxColumn = Math.max(maxColumn, curColumn);
|
||||
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();
|
||||
this.revalidate();
|
||||
this.repaint();
|
||||
this.setVisible(true);
|
||||
}
|
||||
|
||||
private void updateCounts(){
|
||||
|
||||
private void updateCounts() {
|
||||
int landCount = 0;
|
||||
int creatureCount = 0;
|
||||
int sorceryCount = 0;
|
||||
int instantCount = 0;
|
||||
int enchantmentCount = 0;
|
||||
for (CardView card: cards.values()) {
|
||||
if (card.getCardTypes().contains(CardType.LAND)) {
|
||||
for (CardView card : cards.values()) {
|
||||
if (card.getCardTypes().contains(CardType.LAND)) {
|
||||
landCount++;
|
||||
}
|
||||
if (card.getCardTypes().contains(CardType.CREATURE)) {
|
||||
|
|
@ -398,7 +397,7 @@ public class CardsList extends javax.swing.JPanel implements MouseListener, ICar
|
|||
enchantmentCount++;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
int count = cards != null ? cards.size() : 0;
|
||||
this.lblCount.setText(Integer.toString(count));
|
||||
this.lblCreatureCount.setText(Integer.toString(creatureCount));
|
||||
|
|
@ -418,7 +417,6 @@ public class CardsList extends javax.swing.JPanel implements MouseListener, ICar
|
|||
cardImg.addMouseListener(this);
|
||||
return cardImg;
|
||||
}
|
||||
|
||||
|
||||
private void setCardBounds(MageCard card, Rectangle rectangle) {
|
||||
card.setBounds(rectangle);
|
||||
|
|
@ -456,10 +454,10 @@ public class CardsList extends javax.swing.JPanel implements MouseListener, ICar
|
|||
mainModel.clearCardEventListeners();
|
||||
}
|
||||
|
||||
/** This method is called from within the constructor to
|
||||
* initialize the form.
|
||||
* WARNING: Do NOT modify this code. The content of this method is
|
||||
* always regenerated by the Form Editor.
|
||||
/**
|
||||
* This method is called from within the constructor to initialize the form.
|
||||
* WARNING: Do NOT modify this code. The content of this method is always
|
||||
* regenerated by the Form Editor.
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
|
||||
|
|
@ -678,9 +676,9 @@ public class CardsList extends javax.swing.JPanel implements MouseListener, ICar
|
|||
currentView = mainModel;
|
||||
panelCardArea.setViewportView(mainTable);
|
||||
cbSortBy.setEnabled(false);
|
||||
chkPiles.setEnabled(false);
|
||||
chkPiles.setEnabled(false);
|
||||
PreferencesDialog.saveValue(PreferencesDialog.KEY_DRAFT_VIEW, "listView");
|
||||
redrawCards();
|
||||
redrawCards();
|
||||
}//GEN-LAST:event_jToggleListViewActionPerformed
|
||||
|
||||
private void cbSortByActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cbSortByActionPerformed
|
||||
|
|
@ -698,8 +696,8 @@ public class CardsList extends javax.swing.JPanel implements MouseListener, ICar
|
|||
panelCardArea.setViewportView(cardArea);
|
||||
cbSortBy.setEnabled(true);
|
||||
chkPiles.setEnabled(true);
|
||||
PreferencesDialog.saveValue(PreferencesDialog.KEY_DRAFT_VIEW, "cardView");
|
||||
redrawCards();
|
||||
PreferencesDialog.saveValue(PreferencesDialog.KEY_DRAFT_VIEW, "cardView");
|
||||
redrawCards();
|
||||
}//GEN-LAST:event_jToggleCardViewActionPerformed
|
||||
|
||||
// Variables declaration - do not modify//GEN-BEGIN:variables
|
||||
|
|
@ -725,28 +723,26 @@ public class CardsList extends javax.swing.JPanel implements MouseListener, ICar
|
|||
|
||||
@Override
|
||||
public void mousePressed(MouseEvent e) {
|
||||
if (e.getClickCount() >= 1 && !e.isConsumed()) {
|
||||
if (e.getClickCount() >= 1 && !e.isConsumed()) {
|
||||
Object obj = e.getSource();
|
||||
if (e.getClickCount() == 2) {
|
||||
e.consume();
|
||||
if (obj instanceof Card) {
|
||||
if (e.isAltDown()) {
|
||||
cardEventSource.altDoubleClick(((Card)obj).getOriginal(), "alt-double-click");
|
||||
}
|
||||
else {
|
||||
cardEventSource.doubleClick(((Card)obj).getOriginal(), "double-click");
|
||||
cardEventSource.altDoubleClick(((Card) obj).getOriginal(), "alt-double-click");
|
||||
} else {
|
||||
cardEventSource.doubleClick(((Card) obj).getOriginal(), "double-click");
|
||||
}
|
||||
} else if (obj instanceof MageCard) {
|
||||
if (e.isAltDown()) {
|
||||
cardEventSource.altDoubleClick(((MageCard)obj).getOriginal(), "alt-double-click");
|
||||
}
|
||||
else {
|
||||
cardEventSource.doubleClick(((MageCard)obj).getOriginal(), "double-click");
|
||||
cardEventSource.altDoubleClick(((MageCard) obj).getOriginal(), "alt-double-click");
|
||||
} else {
|
||||
cardEventSource.doubleClick(((MageCard) obj).getOriginal(), "double-click");
|
||||
}
|
||||
}
|
||||
}
|
||||
if (obj instanceof MageCard) {
|
||||
checkMenu(e, ((MageCard)obj).getOriginal());
|
||||
checkMenu(e, ((MageCard) obj).getOriginal());
|
||||
} else {
|
||||
checkMenu(e, null);
|
||||
}
|
||||
|
|
@ -758,14 +754,14 @@ public class CardsList extends javax.swing.JPanel implements MouseListener, ICar
|
|||
if (!e.isConsumed()) {
|
||||
Object obj = e.getSource();
|
||||
if (obj instanceof MageCard) {
|
||||
checkMenu(e, ((MageCard)obj).getOriginal());
|
||||
checkMenu(e, ((MageCard) obj).getOriginal());
|
||||
} else {
|
||||
checkMenu(e, null);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void checkMenu(MouseEvent Me, SimpleCardView card){
|
||||
private void checkMenu(MouseEvent Me, SimpleCardView card) {
|
||||
if (Me.isPopupTrigger()) {
|
||||
Me.consume();
|
||||
cardEventSource.showPopupMenuEvent(card, Me.getComponent(), Me.getX(), Me.getY(), "show-popup-menu");
|
||||
|
|
|
|||
|
|
@ -1,31 +1,30 @@
|
|||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
* 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.client.constants;
|
||||
|
||||
import java.io.File;
|
||||
|
|
@ -37,6 +36,7 @@ import javax.swing.border.Border;
|
|||
* @author BetaSteward_at_googlemail.com
|
||||
*/
|
||||
public final class Constants {
|
||||
|
||||
private Constants() {
|
||||
throw new AssertionError();
|
||||
}
|
||||
|
|
@ -69,7 +69,7 @@ public final class Constants {
|
|||
public static final int POWBOX_TEXT_MAX_LEFT = 212;
|
||||
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;
|
||||
|
||||
|
|
@ -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_SMALL = RESOURCE_PATH_SET + File.separator + "small" + 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 {
|
||||
|
||||
String imageBaseDir = "plugins" + File.separator + "images" + File.separator;
|
||||
String IMAGE_PROPERTIES_FILE = "image.url.properties";
|
||||
}
|
||||
|
||||
public enum DeckEditorMode {
|
||||
|
||||
FREE_BUILDING,
|
||||
LIMITED_BUILDING,
|
||||
SIDEBOARDING
|
||||
}
|
||||
|
||||
public enum SortBy {
|
||||
CASTING_COST ("Casting Cost"),
|
||||
RARITY ("Rarity"),
|
||||
COLOR ("Color"),
|
||||
COLOR_DETAILED ("Color Detailed"),
|
||||
NAME ("Name"),
|
||||
UNSORTED ("Unsorted");
|
||||
|
||||
CASTING_COST("Casting Cost"),
|
||||
RARITY("Rarity"),
|
||||
COLOR("Color"),
|
||||
COLOR_IDENTITY("Color Identity"),
|
||||
NAME("Name"),
|
||||
UNSORTED("Unsorted");
|
||||
|
||||
private final String text;
|
||||
|
||||
|
|
@ -120,8 +123,8 @@ public final class Constants {
|
|||
return RARITY;
|
||||
case "Color":
|
||||
return COLOR;
|
||||
case "Color Detailed":
|
||||
return COLOR_DETAILED;
|
||||
case "Color Identity":
|
||||
return COLOR_IDENTITY;
|
||||
case "Name":
|
||||
return NAME;
|
||||
default:
|
||||
|
|
|
|||
|
|
@ -42,9 +42,7 @@ import java.awt.event.MouseEvent;
|
|||
import java.awt.image.BufferedImage;
|
||||
import java.io.File;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.prefs.BackingStoreException;
|
||||
import java.util.prefs.Preferences;
|
||||
import javax.swing.BorderFactory;
|
||||
|
|
@ -63,6 +61,10 @@ import mage.client.MageFrame;
|
|||
import mage.client.util.Config;
|
||||
import mage.client.util.ImageHelper;
|
||||
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.UserSkipPrioritySteps;
|
||||
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_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 Border GREEN_BORDER = BorderFactory.createLineBorder(Color.GREEN, 3);
|
||||
private static final Border BLACK_BORDER = BorderFactory.createLineBorder(Color.BLACK, 3);
|
||||
|
||||
static {
|
||||
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 static int selectedAvatarId = DEFAULT_AVATAR_ID;
|
||||
|
||||
private final JFileChooser fc = new JFileChooser();
|
||||
|
||||
|
|
@ -433,20 +418,30 @@ public class PreferencesDialog extends javax.swing.JDialog {
|
|||
tabAvatars = new javax.swing.JPanel();
|
||||
avatarPane = new javax.swing.JScrollPane();
|
||||
avatarPanel = new javax.swing.JPanel();
|
||||
jLabel12 = new javax.swing.JLabel();
|
||||
jPanel10 = new javax.swing.JPanel();
|
||||
jPanel13 = new javax.swing.JPanel();
|
||||
jPanel11 = new javax.swing.JPanel();
|
||||
jPanel12 = new javax.swing.JPanel();
|
||||
jPanel13 = new javax.swing.JPanel();
|
||||
jPanel14 = new javax.swing.JPanel();
|
||||
jPanel15 = new javax.swing.JPanel();
|
||||
jLabel13 = new javax.swing.JLabel();
|
||||
jPanel16 = new javax.swing.JPanel();
|
||||
jPanel17 = new javax.swing.JPanel();
|
||||
jPanel18 = new javax.swing.JPanel();
|
||||
jPanel19 = new javax.swing.JPanel();
|
||||
jPanel20 = 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();
|
||||
lblProxyType = new javax.swing.JLabel();
|
||||
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)
|
||||
.addGroup(main_gameLayout.createSequentialGroup()
|
||||
.addContainerGap()
|
||||
.addGroup(main_gameLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
.addComponent(cbAllowRequestToShowHandCards, javax.swing.GroupLayout.PREFERRED_SIZE, 546, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||
.addGroup(main_gameLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, 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(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(cbShowStormCounter, javax.swing.GroupLayout.PREFERRED_SIZE, 546, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||
.addComponent(cbConfirmEmptyManaPool, javax.swing.GroupLayout.PREFERRED_SIZE, 546, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||
.addComponent(cbAskMoveToGraveOrder, javax.swing.GroupLayout.PREFERRED_SIZE, 546, javax.swing.GroupLayout.PREFERRED_SIZE))
|
||||
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
|
||||
.addComponent(cbConfirmEmptyManaPool, javax.swing.GroupLayout.DEFAULT_SIZE, 485, Short.MAX_VALUE)
|
||||
.addComponent(cbAllowRequestToShowHandCards, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
|
||||
.addComponent(cbShowStormCounter, javax.swing.GroupLayout.DEFAULT_SIZE, 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.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)
|
||||
.addGroup(main_gamelogLayout.createSequentialGroup()
|
||||
.addContainerGap()
|
||||
.addGroup(main_gamelogLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
.addComponent(cbGameLogAutoSave, javax.swing.GroupLayout.PREFERRED_SIZE, 528, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||
.addComponent(cbDraftLogAutoSave, javax.swing.GroupLayout.PREFERRED_SIZE, 528, javax.swing.GroupLayout.PREFERRED_SIZE))
|
||||
.addGroup(main_gamelogLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
|
||||
.addComponent(cbDraftLogAutoSave, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
|
||||
.addComponent(cbGameLogAutoSave, javax.swing.GroupLayout.DEFAULT_SIZE, 473, Short.MAX_VALUE))
|
||||
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
|
||||
);
|
||||
main_gamelogLayout.setVerticalGroup(
|
||||
|
|
@ -687,8 +682,10 @@ public class PreferencesDialog extends javax.swing.JDialog {
|
|||
.addContainerGap()
|
||||
.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_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())
|
||||
);
|
||||
tabMainLayout.setVerticalGroup(
|
||||
|
|
@ -915,7 +912,7 @@ public class PreferencesDialog extends javax.swing.JDialog {
|
|||
.addComponent(jLabelEndOfTurn)
|
||||
.addComponent(checkBoxEndTurnOthers))
|
||||
.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())
|
||||
);
|
||||
|
||||
|
|
@ -962,24 +959,27 @@ public class PreferencesDialog extends javax.swing.JDialog {
|
|||
panelCardImages.setLayout(panelCardImagesLayout);
|
||||
panelCardImagesLayout.setHorizontalGroup(
|
||||
panelCardImagesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
.addGroup(panelCardImagesLayout.createSequentialGroup()
|
||||
.addGap(24, 24, 24)
|
||||
.addComponent(txtImageFolderPath)
|
||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||
.addComponent(btnBrowseImageLocation))
|
||||
.addGroup(panelCardImagesLayout.createSequentialGroup()
|
||||
.addGroup(panelCardImagesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
.addComponent(cbUseDefaultImageFolder)
|
||||
.addComponent(cbCheckForNewImages)
|
||||
.addGroup(panelCardImagesLayout.createSequentialGroup()
|
||||
.addGroup(panelCardImagesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
|
||||
.addGroup(javax.swing.GroupLayout.Alignment.LEADING, panelCardImagesLayout.createSequentialGroup()
|
||||
.addContainerGap()
|
||||
.addComponent(labelPreferedImageLanguage))
|
||||
.addComponent(cbSaveToZipFiles, javax.swing.GroupLayout.Alignment.LEADING))
|
||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
|
||||
.addComponent(cbPreferedImageLanguage, javax.swing.GroupLayout.PREFERRED_SIZE, 153, javax.swing.GroupLayout.PREFERRED_SIZE)))
|
||||
.addGap(0, 0, Short.MAX_VALUE))
|
||||
.addGroup(panelCardImagesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
.addComponent(cbUseDefaultImageFolder)
|
||||
.addComponent(cbCheckForNewImages)
|
||||
.addGroup(panelCardImagesLayout.createSequentialGroup()
|
||||
.addGroup(panelCardImagesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
|
||||
.addGroup(javax.swing.GroupLayout.Alignment.LEADING, panelCardImagesLayout.createSequentialGroup()
|
||||
.addContainerGap()
|
||||
.addComponent(labelPreferedImageLanguage))
|
||||
.addComponent(cbSaveToZipFiles, javax.swing.GroupLayout.Alignment.LEADING))
|
||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
|
||||
.addComponent(cbPreferedImageLanguage, javax.swing.GroupLayout.PREFERRED_SIZE, 153, javax.swing.GroupLayout.PREFERRED_SIZE)))
|
||||
.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.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
|
|
@ -1061,32 +1061,29 @@ public class PreferencesDialog extends javax.swing.JDialog {
|
|||
.addGroup(panelBackgroundImagesLayout.createSequentialGroup()
|
||||
.addGroup(panelBackgroundImagesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
.addGroup(panelBackgroundImagesLayout.createSequentialGroup()
|
||||
.addGap(19, 19, 19)
|
||||
.addComponent(jLabel14))
|
||||
.addGroup(panelBackgroundImagesLayout.createSequentialGroup()
|
||||
.addGap(25, 25, 25)
|
||||
.addComponent(jLabel15)))
|
||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||
.addGroup(panelBackgroundImagesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
.addGroup(panelBackgroundImagesLayout.createSequentialGroup()
|
||||
.addComponent(txtBattlefieldImagePath, javax.swing.GroupLayout.PREFERRED_SIZE, 336, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||
.addGroup(panelBackgroundImagesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
.addGroup(panelBackgroundImagesLayout.createSequentialGroup()
|
||||
.addGap(19, 19, 19)
|
||||
.addComponent(jLabel14))
|
||||
.addGroup(panelBackgroundImagesLayout.createSequentialGroup()
|
||||
.addGap(25, 25, 25)
|
||||
.addComponent(jLabel15)))
|
||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||
.addComponent(btnBrowseBattlefieldImage))
|
||||
.addGroup(panelBackgroundImagesLayout.createSequentialGroup()
|
||||
.addComponent(txtBackgroundImagePath, javax.swing.GroupLayout.PREFERRED_SIZE, 332, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||
.addGroup(panelBackgroundImagesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
.addComponent(txtBackgroundImagePath)
|
||||
.addComponent(txtBattlefieldImagePath))
|
||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||
.addComponent(btnBrowseBackgroundImage)))
|
||||
.addGap(0, 0, Short.MAX_VALUE))
|
||||
.addGroup(panelBackgroundImagesLayout.createSequentialGroup()
|
||||
.addGroup(panelBackgroundImagesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
.addComponent(cbUseRandomBattleImage)
|
||||
.addComponent(cbUseDefaultBattleImage)
|
||||
.addComponent(cbUseDefaultBackground))
|
||||
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
|
||||
.addGroup(panelBackgroundImagesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
.addComponent(btnBrowseBackgroundImage, javax.swing.GroupLayout.Alignment.TRAILING)
|
||||
.addComponent(btnBrowseBattlefieldImage, javax.swing.GroupLayout.Alignment.TRAILING)))
|
||||
.addGroup(panelBackgroundImagesLayout.createSequentialGroup()
|
||||
.addGroup(panelBackgroundImagesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
.addComponent(cbUseRandomBattleImage)
|
||||
.addComponent(cbUseDefaultBattleImage)
|
||||
.addComponent(cbUseDefaultBackground))
|
||||
.addGap(0, 0, Short.MAX_VALUE)))
|
||||
.addContainerGap())
|
||||
);
|
||||
|
||||
panelBackgroundImagesLayout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {txtBackgroundImagePath, txtBattlefieldImagePath});
|
||||
|
||||
panelBackgroundImagesLayout.setVerticalGroup(
|
||||
panelBackgroundImagesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
.addGroup(panelBackgroundImagesLayout.createSequentialGroup()
|
||||
|
|
@ -1115,8 +1112,8 @@ public class PreferencesDialog extends javax.swing.JDialog {
|
|||
.addGroup(tabImagesLayout.createSequentialGroup()
|
||||
.addContainerGap()
|
||||
.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(panelBackgroundImages, 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.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
|
||||
.addContainerGap())
|
||||
);
|
||||
tabImagesLayout.setVerticalGroup(
|
||||
|
|
@ -1248,249 +1245,459 @@ public class PreferencesDialog extends javax.swing.JDialog {
|
|||
|
||||
tabsPanel.addTab("Sounds", tabSounds);
|
||||
|
||||
jLabel12.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N
|
||||
jLabel12.setText("Choose your avatar:");
|
||||
avatarPane.setMaximumSize(new java.awt.Dimension(508, 772));
|
||||
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.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);
|
||||
jPanel10.setLayout(jPanel10Layout);
|
||||
jPanel10Layout.setHorizontalGroup(
|
||||
jPanel10Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
.addGap(0, 100, Short.MAX_VALUE)
|
||||
.addGap(0, 110, Short.MAX_VALUE)
|
||||
);
|
||||
jPanel10Layout.setVerticalGroup(
|
||||
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));
|
||||
|
||||
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)
|
||||
);
|
||||
avatarPanel.add(jPanel10);
|
||||
|
||||
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);
|
||||
jPanel11.setLayout(jPanel11Layout);
|
||||
jPanel11Layout.setHorizontalGroup(
|
||||
jPanel11Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
.addGap(0, 100, Short.MAX_VALUE)
|
||||
.addGap(0, 110, Short.MAX_VALUE)
|
||||
);
|
||||
jPanel11Layout.setVerticalGroup(
|
||||
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.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);
|
||||
jPanel12.setLayout(jPanel12Layout);
|
||||
jPanel12Layout.setHorizontalGroup(
|
||||
jPanel12Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
.addGap(0, 100, Short.MAX_VALUE)
|
||||
.addGap(0, 110, Short.MAX_VALUE)
|
||||
);
|
||||
jPanel12Layout.setVerticalGroup(
|
||||
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.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);
|
||||
jPanel14.setLayout(jPanel14Layout);
|
||||
jPanel14Layout.setHorizontalGroup(
|
||||
jPanel14Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
.addGap(0, 100, Short.MAX_VALUE)
|
||||
.addGap(0, 110, Short.MAX_VALUE)
|
||||
);
|
||||
jPanel14Layout.setVerticalGroup(
|
||||
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.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);
|
||||
jPanel15.setLayout(jPanel15Layout);
|
||||
jPanel15Layout.setHorizontalGroup(
|
||||
jPanel15Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
.addGap(0, 100, Short.MAX_VALUE)
|
||||
.addGap(0, 110, Short.MAX_VALUE)
|
||||
);
|
||||
jPanel15Layout.setVerticalGroup(
|
||||
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
|
||||
jLabel13.setText("New avatars:");
|
||||
avatarPanel.add(jPanel15);
|
||||
|
||||
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);
|
||||
jPanel16.setLayout(jPanel16Layout);
|
||||
jPanel16Layout.setHorizontalGroup(
|
||||
jPanel16Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
.addGap(0, 100, Short.MAX_VALUE)
|
||||
.addGap(0, 110, Short.MAX_VALUE)
|
||||
);
|
||||
jPanel16Layout.setVerticalGroup(
|
||||
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.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);
|
||||
jPanel17.setLayout(jPanel17Layout);
|
||||
jPanel17Layout.setHorizontalGroup(
|
||||
jPanel17Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
.addGap(0, 100, Short.MAX_VALUE)
|
||||
.addGap(0, 110, Short.MAX_VALUE)
|
||||
);
|
||||
jPanel17Layout.setVerticalGroup(
|
||||
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.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);
|
||||
jPanel18.setLayout(jPanel18Layout);
|
||||
jPanel18Layout.setHorizontalGroup(
|
||||
jPanel18Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
.addGap(0, 100, Short.MAX_VALUE)
|
||||
.addGap(0, 110, Short.MAX_VALUE)
|
||||
);
|
||||
jPanel18Layout.setVerticalGroup(
|
||||
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.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);
|
||||
jPanel19.setLayout(jPanel19Layout);
|
||||
jPanel19Layout.setHorizontalGroup(
|
||||
jPanel19Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
.addGap(0, 100, Short.MAX_VALUE)
|
||||
.addGap(0, 110, Short.MAX_VALUE)
|
||||
);
|
||||
jPanel19Layout.setVerticalGroup(
|
||||
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.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);
|
||||
jPanel20.setLayout(jPanel20Layout);
|
||||
jPanel20Layout.setHorizontalGroup(
|
||||
jPanel20Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
.addGap(0, 100, Short.MAX_VALUE)
|
||||
.addGap(0, 110, Short.MAX_VALUE)
|
||||
);
|
||||
jPanel20Layout.setVerticalGroup(
|
||||
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.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);
|
||||
jPanel21.setLayout(jPanel21Layout);
|
||||
jPanel21Layout.setHorizontalGroup(
|
||||
jPanel21Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
.addGap(0, 100, Short.MAX_VALUE)
|
||||
.addGap(0, 110, Short.MAX_VALUE)
|
||||
);
|
||||
jPanel21Layout.setVerticalGroup(
|
||||
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.setLayout(avatarPanelLayout);
|
||||
avatarPanelLayout.setHorizontalGroup(
|
||||
avatarPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
.addGroup(avatarPanelLayout.createSequentialGroup()
|
||||
.addGroup(avatarPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
.addGroup(avatarPanelLayout.createSequentialGroup()
|
||||
.addContainerGap()
|
||||
.addComponent(jLabel12))
|
||||
.addGroup(avatarPanelLayout.createSequentialGroup()
|
||||
.addGroup(avatarPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
.addGroup(avatarPanelLayout.createSequentialGroup()
|
||||
.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))
|
||||
avatarPanel.add(jPanel21);
|
||||
|
||||
jPanel22.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(204, 204, 204), 1, true));
|
||||
jPanel22.setMaximumSize(new java.awt.Dimension(102, 102));
|
||||
jPanel22.setMinimumSize(new java.awt.Dimension(102, 102));
|
||||
jPanel22.setPreferredSize(new java.awt.Dimension(102, 102));
|
||||
|
||||
javax.swing.GroupLayout jPanel22Layout = new javax.swing.GroupLayout(jPanel22);
|
||||
jPanel22.setLayout(jPanel22Layout);
|
||||
jPanel22Layout.setHorizontalGroup(
|
||||
jPanel22Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
.addGap(0, 110, Short.MAX_VALUE)
|
||||
);
|
||||
avatarPanelLayout.setVerticalGroup(
|
||||
avatarPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
.addGroup(avatarPanelLayout.createSequentialGroup()
|
||||
.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))
|
||||
jPanel22Layout.setVerticalGroup(
|
||||
jPanel22Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
.addGap(0, 110, Short.MAX_VALUE)
|
||||
);
|
||||
|
||||
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);
|
||||
|
||||
javax.swing.GroupLayout tabAvatarsLayout = new javax.swing.GroupLayout(tabAvatars);
|
||||
tabAvatars.setLayout(tabAvatarsLayout);
|
||||
tabAvatarsLayout.setHorizontalGroup(
|
||||
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.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);
|
||||
|
|
@ -1629,7 +1836,7 @@ public class PreferencesDialog extends javax.swing.JDialog {
|
|||
.addContainerGap()
|
||||
.addComponent(lblURLServerList, javax.swing.GroupLayout.PREFERRED_SIZE, 96, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||
.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()
|
||||
.addGap(141, 141, 141)
|
||||
.addComponent(jLabel17)))
|
||||
|
|
@ -1651,15 +1858,14 @@ public class PreferencesDialog extends javax.swing.JDialog {
|
|||
tabConnectionLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
.addGroup(tabConnectionLayout.createSequentialGroup()
|
||||
.addContainerGap()
|
||||
.addGroup(tabConnectionLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
.addGroup(tabConnectionLayout.createSequentialGroup()
|
||||
.addGroup(tabConnectionLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
|
||||
.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)
|
||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
|
||||
.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(cbProxyType, javax.swing.GroupLayout.PREFERRED_SIZE, 126, javax.swing.GroupLayout.PREFERRED_SIZE))
|
||||
.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.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))
|
||||
.addGap(18, 18, 18)
|
||||
.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("");
|
||||
|
|
@ -1700,12 +1906,12 @@ public class PreferencesDialog extends javax.swing.JDialog {
|
|||
layout.setHorizontalGroup(
|
||||
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
|
||||
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
|
||||
.addContainerGap(405, Short.MAX_VALUE)
|
||||
.addComponent(saveButton)
|
||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||
.addComponent(exitButton, javax.swing.GroupLayout.PREFERRED_SIZE, 55, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||
.addContainerGap())
|
||||
.addComponent(tabsPanel)
|
||||
.addComponent(tabsPanel, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE)
|
||||
);
|
||||
layout.setVerticalGroup(
|
||||
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);
|
||||
|
||||
// Avatar
|
||||
if (available_avatars.contains(selectedAvatarId)) {
|
||||
prefs.put(KEY_AVATAR, String.valueOf(selectedAvatarId));
|
||||
updateCache(KEY_AVATAR, String.valueOf(selectedAvatarId));
|
||||
if (selectedAvatarId < MIN_AVATAR_ID || selectedAvatarId > MAX_AVATAR_ID) {
|
||||
selectedAvatarId = DEFAULT_AVATAR_ID;
|
||||
}
|
||||
prefs.put(KEY_AVATAR, String.valueOf(selectedAvatarId));
|
||||
updateCache(KEY_AVATAR, String.valueOf(selectedAvatarId));
|
||||
|
||||
try {
|
||||
MageFrame.getClient().setPreferences(getUserData());
|
||||
|
|
@ -2275,7 +2482,7 @@ public class PreferencesDialog extends javax.swing.JDialog {
|
|||
} catch (NumberFormatException n) {
|
||||
selectedAvatarId = DEFAULT_AVATAR_ID;
|
||||
} finally {
|
||||
if (!available_avatars.contains(selectedAvatarId)) {
|
||||
if (selectedAvatarId < MIN_AVATAR_ID || selectedAvatarId > MAX_AVATAR_ID) {
|
||||
selectedAvatarId = DEFAULT_AVATAR_ID;
|
||||
}
|
||||
}
|
||||
|
|
@ -2441,26 +2648,37 @@ public class PreferencesDialog extends javax.swing.JDialog {
|
|||
|
||||
private void addAvatars() {
|
||||
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(jPanel11, 9, false, false);
|
||||
addAvatar(jPanel12, 53, false, false);
|
||||
addAvatar(jPanel14, 10, false, false);
|
||||
addAvatar(jPanel15, 39, false, false);
|
||||
addAvatar(jPanel14, 14, false, false);
|
||||
addAvatar(jPanel15, 15, false, false);
|
||||
addAvatar(jPanel16, 16, false, false);
|
||||
addAvatar(jPanel17, 17, false, false);
|
||||
addAvatar(jPanel18, 18, false, false);
|
||||
addAvatar(jPanel19, 19, false, false);
|
||||
addAvatar(jPanel20, 30, false, false);
|
||||
addAvatar(jPanel21, 25, false, false);
|
||||
addAvatar(jPanel20, 20, 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) {
|
||||
log.error(e, e);
|
||||
}
|
||||
}
|
||||
|
||||
public void setSelectedId(int id) {
|
||||
if (available_avatars.contains(id)) {
|
||||
if (id >= MIN_AVATAR_ID && id <= MAX_AVATAR_ID) {
|
||||
for (JPanel panel : panels.values()) {
|
||||
panel.setBorder(BLACK_BORDER);
|
||||
}
|
||||
|
|
@ -2473,7 +2691,8 @@ public class PreferencesDialog extends javax.swing.JDialog {
|
|||
String path = "/avatars/" + String.valueOf(id) + ".jpg";
|
||||
panels.put(id, jPanel);
|
||||
Image image = ImageHelper.getImageFromResources(path);
|
||||
Rectangle r = new Rectangle(90, 90);
|
||||
|
||||
Rectangle r = new Rectangle(jPanel.getWidth() - 5, jPanel.getHeight() - 5);
|
||||
BufferedImage bufferedImage;
|
||||
if (!locked) {
|
||||
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.JButton exitButton;
|
||||
private javax.swing.JLabel jLabel11;
|
||||
private javax.swing.JLabel jLabel12;
|
||||
private javax.swing.JLabel jLabel13;
|
||||
private javax.swing.JLabel jLabel14;
|
||||
private javax.swing.JLabel jLabel15;
|
||||
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 jPanel20;
|
||||
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 lblProxyPassword;
|
||||
private javax.swing.JLabel lblProxyPort;
|
||||
|
|
|
|||
|
|
@ -59,6 +59,9 @@ import mage.client.util.ImageHelper;
|
|||
import mage.client.util.gui.BufferedImageBuilder;
|
||||
import mage.client.util.gui.countryBox.CountryUtil;
|
||||
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.utils.timer.PriorityTimer;
|
||||
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 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_HEIGHT = 242;
|
||||
|
|
@ -236,8 +239,8 @@ public class PlayerPanelExt extends javax.swing.JPanel {
|
|||
|
||||
if (!MageFrame.isLite()) {
|
||||
int id = player.getUserData().getAvatarId();
|
||||
if (id <= 0) {
|
||||
id = PreferencesDialog.DEFAULT_AVATAR_ID;
|
||||
if (!(id >= 1000) && (id <= 0 || (id <= MIN_AVATAR_ID && id > MAX_AVATAR_ID))) {
|
||||
id = DEFAULT_AVATAR_ID;
|
||||
}
|
||||
if (id != avatarId) {
|
||||
avatarId = id;
|
||||
|
|
|
|||
|
|
@ -25,21 +25,21 @@
|
|||
* authors and should not be interpreted as representing official policies, either expressed
|
||||
* or implied, of BetaSteward_at_googlemail.com.
|
||||
*/
|
||||
|
||||
package mage.client.util;
|
||||
|
||||
import java.util.Comparator;
|
||||
import mage.utils.CardUtil;
|
||||
import mage.view.CardView;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author BetaSteward_at_googlemail.com
|
||||
*/
|
||||
public class CardViewColorDetailedComparator implements Comparator<CardView> {
|
||||
public class CardViewColorIdentityComparator implements Comparator<CardView> {
|
||||
|
||||
@Override
|
||||
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());
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -1,16 +1,16 @@
|
|||
/*
|
||||
* Copyright 2011 BetaSteward_at_googlemail.com. All rights reserved.
|
||||
*
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification, are
|
||||
* permitted provided that the following conditions are met:
|
||||
*
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice, this list of
|
||||
* conditions and the following disclaimer.
|
||||
*
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
|
||||
* of conditions and the following disclaimer in the documentation and/or other materials
|
||||
* provided with the distribution.
|
||||
*
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
|
||||
|
|
@ -20,12 +20,11 @@
|
|||
* 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.client.util;
|
||||
|
||||
import java.util.Comparator;
|
||||
|
|
@ -39,7 +38,7 @@ public class CardViewCostComparator implements Comparator<CardView> {
|
|||
|
||||
@Override
|
||||
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());
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -49,7 +49,7 @@ public class GathererSets implements Iterable<DownloadJob> {
|
|||
"THS", "BNG", "JOU",
|
||||
"CNS", "VMA", "TPR",
|
||||
"KTK", "FRF", "DTK",
|
||||
"BFZ"};
|
||||
"BFZ", "EXP", "OGW"};
|
||||
private static final HashMap<String, String> symbolsReplacements = new HashMap<>();
|
||||
|
||||
static {
|
||||
|
|
|
|||
|
|
@ -16,6 +16,8 @@ public class MagicCardsImageSource implements CardImageSource {
|
|||
|
||||
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("FVL", "from-the-vault-legends");
|
||||
put("FVD", "from-the-vault-dragons");
|
||||
|
|
|
|||
|
|
@ -36,7 +36,10 @@ import java.net.Proxy;
|
|||
import java.net.URL;
|
||||
import java.net.URLEncoder;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.prefs.Preferences;
|
||||
import mage.client.MageFrame;
|
||||
import mage.remote.Connection;
|
||||
|
|
@ -56,6 +59,7 @@ public class MythicspoilerComSource implements CardImageSource {
|
|||
private static CardImageSource instance;
|
||||
private static Map<String, String> setsAliases;
|
||||
private static Map<String, String> cardNameAliases;
|
||||
private static Map<String, Set<String>> cardNameAliasesStart;
|
||||
private final Map<String, Map<String, String>> sets;
|
||||
|
||||
public static CardImageSource getInstance() {
|
||||
|
|
@ -71,8 +75,9 @@ public class MythicspoilerComSource implements CardImageSource {
|
|||
}
|
||||
|
||||
public MythicspoilerComSource() {
|
||||
sets = new HashMap<>();
|
||||
sets = new LinkedHashMap<>();
|
||||
setsAliases = new HashMap<>();
|
||||
setsAliases.put("exp", "bfz");
|
||||
cardNameAliases = new HashMap<>();
|
||||
// set+wrong name from web side => correct card name
|
||||
cardNameAliases.put("MM2-otherwordlyjourney", "otherworldlyjourney");
|
||||
|
|
@ -81,12 +86,21 @@ public class MythicspoilerComSource implements CardImageSource {
|
|||
cardNameAliases.put("THS-soldierofpantheon", "soldierofthepantheon");
|
||||
cardNameAliases.put("THS-vulpinegolaith", "vulpinegoliath");
|
||||
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) {
|
||||
Map<String, String> setLinks = new HashMap<>();
|
||||
try {
|
||||
String setNames = setsAliases.get(cardSet.toLowerCase());
|
||||
Set<String> aliasesStart = cardNameAliasesStart.get(cardSet);
|
||||
if (setNames == null) {
|
||||
setNames = cardSet.toLowerCase();
|
||||
}
|
||||
|
|
@ -119,33 +133,42 @@ public class MythicspoilerComSource implements CardImageSource {
|
|||
}
|
||||
|
||||
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()) {
|
||||
break;
|
||||
}
|
||||
|
||||
for (Element cardsImage : cardsImages) {
|
||||
String cardLink = cardsImage.attr("src");
|
||||
String cardName = null;
|
||||
if (cardLink.startsWith("cards/") && cardLink.endsWith(".jpg")) {
|
||||
String cardName = cardLink.substring(6, cardLink.length() - 4);
|
||||
if (cardName != null && !cardName.isEmpty()) {
|
||||
if (cardNameAliases.containsKey(cardSet + "-" + cardName)) {
|
||||
cardName = cardNameAliases.get(cardSet + "-" + cardName);
|
||||
}
|
||||
if (cardName.endsWith("1") || cardName.endsWith("2") || cardName.endsWith("3") || cardName.endsWith("4") || cardName.endsWith("5")) {
|
||||
if (!cardName.startsWith("forest")
|
||||
&& !cardName.startsWith("swamp")
|
||||
&& !cardName.startsWith("mountain")
|
||||
&& !cardName.startsWith("island")
|
||||
&& !cardName.startsWith("plains")) {
|
||||
cardName = cardName.substring(0, cardName.length() - 1);
|
||||
}
|
||||
}
|
||||
setLinks.put(cardName, baseUrl + cardLink);
|
||||
}
|
||||
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 (cardNameAliases.containsKey(cardSet + "-" + cardName)) {
|
||||
cardName = cardNameAliases.get(cardSet + "-" + cardName);
|
||||
}
|
||||
if (cardName.endsWith("1") || cardName.endsWith("2") || cardName.endsWith("3") || cardName.endsWith("4") || cardName.endsWith("5")) {
|
||||
if (!cardName.startsWith("forest")
|
||||
&& !cardName.startsWith("swamp")
|
||||
&& !cardName.startsWith("mountain")
|
||||
&& !cardName.startsWith("island")
|
||||
&& !cardName.startsWith("plains")) {
|
||||
cardName = cardName.substring(0, cardName.length() - 1);
|
||||
}
|
||||
}
|
||||
setLinks.put(cardName, baseUrl + cardLink);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
} catch (IOException ex) {
|
||||
System.out.println("Exception when parsing the mythicspoiler page: " + ex.getMessage());
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
* that the images may be garbage collected when they are not needed any more, but will
|
||||
* be kept as long as possible.
|
||||
* that the images may be garbage collected when they are not needed any more,
|
||||
* but will be kept as long as possible.
|
||||
*
|
||||
* Key format: "<cardname>#<setname>#<type>#<collectorID>#<param>"
|
||||
*
|
||||
|
|
@ -46,8 +46,7 @@ public class ImageCache {
|
|||
private static final Map<String, BufferedImage> imageCache;
|
||||
|
||||
/**
|
||||
* Common pattern for keys.
|
||||
* Format: "<cardname>#<setname>#<collectorID>"
|
||||
* Common pattern for keys. Format: "<cardname>#<setname>#<collectorID>"
|
||||
*/
|
||||
private static final Pattern KEY_PATTERN = Pattern.compile("(.*)#(.*)#(.*)#(.*)#(.*)");
|
||||
|
||||
|
|
@ -104,16 +103,16 @@ public class ImageCache {
|
|||
thumbnailFile = new TFile(thumbnailPath);
|
||||
} catch (Exception ex) {
|
||||
}
|
||||
boolean exists =false;
|
||||
boolean exists = false;
|
||||
if (thumbnailFile != null) {
|
||||
try {
|
||||
exists = thumbnailFile.exists();
|
||||
} catch(Exception ex) {
|
||||
} catch (Exception ex) {
|
||||
exists = false;
|
||||
}
|
||||
}
|
||||
if (exists) {
|
||||
log.debug("loading thumbnail for " + key + ", path="+thumbnailPath);
|
||||
log.debug("loading thumbnail for " + key + ", path=" + thumbnailPath);
|
||||
return loadImage(thumbnailFile);
|
||||
} else {
|
||||
BufferedImage image = loadImage(file);
|
||||
|
|
@ -187,30 +186,15 @@ public class ImageCache {
|
|||
}
|
||||
|
||||
public static BufferedImage getThumbnail(CardView card) {
|
||||
String key = getKey(card) + "#thumb";
|
||||
if (card.getUsesVariousArt()) {
|
||||
key += "#usesVariousArt";
|
||||
}
|
||||
// log.debug("#key: " + key);
|
||||
return getImage(key);
|
||||
return getImage(getKey(card, card.getName(), "#thumb"));
|
||||
}
|
||||
|
||||
public static BufferedImage getImageOriginal(CardView card) {
|
||||
String key = getKey(card);
|
||||
if (card.getUsesVariousArt()) {
|
||||
key += "#usesVariousArt";
|
||||
}
|
||||
// log.warn("#key: " + key);
|
||||
return getImage(key);
|
||||
return getImage(getKey(card, card.getName(), ""));
|
||||
}
|
||||
|
||||
public static BufferedImage getImageOriginalAlternateName(CardView card) {
|
||||
String key = getKeyAlternateName(card, card.getAlternateName());
|
||||
if (card.getUsesVariousArt()) {
|
||||
key += "#usesVariousArt";
|
||||
}
|
||||
// log.warn("#key: " + key);
|
||||
return getImage(key);
|
||||
return getImage(getKey(card, card.getAlternateName(), ""));
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -230,7 +214,7 @@ public class ImageCache {
|
|||
if (ex.getCause() instanceof NullPointerException) {
|
||||
return null;
|
||||
}
|
||||
log.error(ex,ex);
|
||||
log.error(ex, ex);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
|
@ -238,32 +222,25 @@ public class ImageCache {
|
|||
/**
|
||||
* Returns the map key for a card, without any suffixes for the image size.
|
||||
*/
|
||||
private static String getKey(CardView card) {
|
||||
StringBuilder sb = new StringBuilder(card.getName()).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) {
|
||||
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();
|
||||
private static String getKey(CardView card, String name, String suffix) {
|
||||
return name + "#" + card.getExpansionSetCode() + "#" + card.getType() + "#" + card.getCardNumber() + "#"
|
||||
+ (card.getTokenSetCode() == null ? "" : card.getTokenSetCode())
|
||||
+ suffix
|
||||
+ (card.getUsesVariousArt() ? "#usesVariousArt" : "");
|
||||
|
||||
}
|
||||
|
||||
// /**
|
||||
// * 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
|
||||
*
|
||||
* @param file
|
||||
* file to load image from
|
||||
* @param file file to load image from
|
||||
* @return {@link BufferedImage}
|
||||
*/
|
||||
public static BufferedImage loadImage(TFile file) {
|
||||
|
|
@ -297,7 +274,7 @@ public class ImageCache {
|
|||
ImageIO.write(image, "jpg", outputStream);
|
||||
}
|
||||
} catch (IOException e) {
|
||||
log.error(e,e);
|
||||
log.error(e, e);
|
||||
imageFile.delete();
|
||||
}
|
||||
return image;
|
||||
|
|
@ -305,6 +282,7 @@ public class ImageCache {
|
|||
|
||||
/**
|
||||
* Returns an image scaled to the size given
|
||||
*
|
||||
* @param original
|
||||
* @return
|
||||
*/
|
||||
|
|
@ -344,6 +322,7 @@ public class ImageCache {
|
|||
/**
|
||||
* Returns an image scaled to the size appropriate for the card picture
|
||||
* panel
|
||||
*
|
||||
* @param original
|
||||
* @param sizeNeed
|
||||
* @return
|
||||
|
|
@ -356,6 +335,7 @@ public class ImageCache {
|
|||
|
||||
/**
|
||||
* Returns the image appropriate to display the card in the picture panel
|
||||
*
|
||||
* @param card
|
||||
* @param width
|
||||
* @param height
|
||||
|
|
@ -365,11 +345,7 @@ public class ImageCache {
|
|||
if (Constants.THUMBNAIL_SIZE_FULL.width + 10 > width) {
|
||||
return getThumbnail(card);
|
||||
}
|
||||
String key = getKey(card);
|
||||
if (card.getUsesVariousArt()) {
|
||||
key += "#usesVariousArt";
|
||||
}
|
||||
// log.warn("getImage: " + key);
|
||||
String key = getKey(card, card.getName(), "");
|
||||
BufferedImage original = getImage(key);
|
||||
if (original == null) {
|
||||
log.debug(key + " not found");
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 7.7 KiB After Width: | Height: | Size: 6.3 KiB |
BIN
Mage.Client/src/main/resources/avatars/11.jpg
Normal file
|
After Width: | Height: | Size: 7.4 KiB |
BIN
Mage.Client/src/main/resources/avatars/12.jpg
Normal file
|
After Width: | Height: | Size: 7.3 KiB |
|
Before Width: | Height: | Size: 7.4 KiB After Width: | Height: | Size: 7.4 KiB |
|
Before Width: | Height: | Size: 7.3 KiB After Width: | Height: | Size: 7.4 KiB |
BIN
Mage.Client/src/main/resources/avatars/15.jpg
Normal file
|
After Width: | Height: | Size: 7.6 KiB |
BIN
Mage.Client/src/main/resources/avatars/16.jpg
Normal file
|
After Width: | Height: | Size: 6.9 KiB |
BIN
Mage.Client/src/main/resources/avatars/17.jpg
Normal file
|
After Width: | Height: | Size: 7 KiB |
BIN
Mage.Client/src/main/resources/avatars/18.jpg
Normal file
|
After Width: | Height: | Size: 9 KiB |
|
Before Width: | Height: | Size: 7.4 KiB After Width: | Height: | Size: 7 KiB |
|
Before Width: | Height: | Size: 5.9 KiB After Width: | Height: | Size: 5.9 KiB |
BIN
Mage.Client/src/main/resources/avatars/21.jpg
Normal file
|
After Width: | Height: | Size: 7.7 KiB |
|
Before Width: | Height: | Size: 7.4 KiB After Width: | Height: | Size: 8.8 KiB |
|
Before Width: | Height: | Size: 7.6 KiB After Width: | Height: | Size: 7.5 KiB |
|
Before Width: | Height: | Size: 6 KiB After Width: | Height: | Size: 6 KiB |
|
Before Width: | Height: | Size: 6.9 KiB After Width: | Height: | Size: 7.4 KiB |
|
Before Width: | Height: | Size: 9.5 KiB After Width: | Height: | Size: 9.5 KiB |
|
Before Width: | Height: | Size: 8.5 KiB After Width: | Height: | Size: 8.5 KiB |
|
Before Width: | Height: | Size: 9.2 KiB After Width: | Height: | Size: 9.2 KiB |
|
Before Width: | Height: | Size: 7 KiB After Width: | Height: | Size: 9.3 KiB |
|
Before Width: | Height: | Size: 9 KiB After Width: | Height: | Size: 10 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 5.6 KiB After Width: | Height: | Size: 5.6 KiB |
|
Before Width: | Height: | Size: 7 KiB |
|
Before Width: | Height: | Size: 6.3 KiB |
|
Before Width: | Height: | Size: 8.8 KiB |
|
Before Width: | Height: | Size: 7.5 KiB |
|
Before Width: | Height: | Size: 7.4 KiB |
|
Before Width: | Height: | Size: 9.3 KiB |
|
Before Width: | Height: | Size: 10 KiB |
BIN
Mage.Client/src/main/resources/avatars/special/21.gif
Normal file
|
After Width: | Height: | Size: 23 KiB |
|
|
@ -1,5 +1,17 @@
|
|||
#Generate|TOK:BFZ|Eldrazi Scion|
|
||||
#Generate|TOK:BFZ|Elemental|
|
||||
#Generate|TOK:BFZ|Dragon|
|
||||
#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 2|
|
||||
|
|
|
|||
|
|
@ -64,6 +64,6 @@ ddd=gvl
|
|||
unh=uh
|
||||
dde=pvc
|
||||
# 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)
|
||||
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
|
||||
|
|
@ -67,6 +67,10 @@ public final class Constants {
|
|||
|
||||
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.
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -1,5 +1,7 @@
|
|||
package mage.utils;
|
||||
|
||||
import java.util.List;
|
||||
import mage.ObjectColor;
|
||||
import mage.cards.Card;
|
||||
import mage.cards.MagePermanent;
|
||||
import mage.constants.CardType;
|
||||
|
|
@ -13,6 +15,12 @@ import mage.view.CardView;
|
|||
*/
|
||||
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) {
|
||||
return is(card, CardType.CREATURE);
|
||||
}
|
||||
|
|
@ -48,4 +56,34 @@ public class CardUtil {
|
|||
public static boolean isLand(Card card) {
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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_MINOR = 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 = "";
|
||||
|
||||
private final int major;
|
||||
|
|
|
|||
|
|
@ -485,7 +485,12 @@ public class HumanPlayer extends PlayerImpl {
|
|||
public boolean chooseTarget(Outcome outcome, Cards cards, TargetCard target, Ability source, Game game) {
|
||||
updateGameStatePriority("chooseTarget(5)", game);
|
||||
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 (cards == null) {
|
||||
required = false;
|
||||
|
|
|
|||
|
|
@ -34,10 +34,10 @@ import mage.game.draft.DraftCube;
|
|||
* @author fireshoes
|
||||
*/
|
||||
|
||||
public class MTGOLegacyCube2015 extends DraftCube {
|
||||
public class MTGOLegacyCubeMarch2015 extends DraftCube {
|
||||
|
||||
public MTGOLegacyCube2015() {
|
||||
super("MTGO Legacy Cube 2015 (600 cards)");
|
||||
public MTGOLegacyCubeMarch2015() {
|
||||
super("MTGO Legacy Cube March 2015 (600 cards)");
|
||||
cubeCards.add(new DraftCube.CardIdentity("Accorder Paladin",""));
|
||||
cubeCards.add(new DraftCube.CardIdentity("Abrupt Decay",""));
|
||||
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("Blade of the Bloodchief",""));
|
||||
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("Bloodbraid Elf",""));
|
||||
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("Bloodlord of Vaasgoth",""));
|
||||
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("Bone Shredder",""));
|
||||
cubeCards.add(new DraftCube.CardIdentity("Bonesplitter",""));
|
||||
cubeCards.add(new DraftCube.CardIdentity("Bonfire of the Damned",""));
|
||||
cubeCards.add(new DraftCube.CardIdentity("Boon Satyr",""));
|
||||
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("Brago, King Eternal",""));
|
||||
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("Call of the Herd",""));
|
||||
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("Chain Lightning",""));
|
||||
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("Glen Elendra Archmage",""));
|
||||
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("Goblin Bombardment",""));
|
||||
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("Hammer of Purphoros",""));
|
||||
cubeCards.add(new DraftCube.CardIdentity("Harmonize",""));
|
||||
cubeCards.add(new DraftCube.CardIdentity("Harrow",""));
|
||||
cubeCards.add(new DraftCube.CardIdentity("Hellrider",""));
|
||||
cubeCards.add(new DraftCube.CardIdentity("Herald of Torment",""));
|
||||
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 Tithe",""));
|
||||
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("Martial Coup",""));
|
||||
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("Mother of Runes",""));
|
||||
cubeCards.add(new DraftCube.CardIdentity("Mox Diamond",""));
|
||||
cubeCards.add(new DraftCube.CardIdentity("Mulch",""));
|
||||
cubeCards.add(new DraftCube.CardIdentity("Mulldrifter",""));
|
||||
cubeCards.add(new DraftCube.CardIdentity("Murderous Cut",""));
|
||||
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("Young Pyromancer",""));
|
||||
cubeCards.add(new DraftCube.CardIdentity("Zealous Conscripts",""));
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -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",""));
|
||||
}
|
||||
}
|
||||
|
|
@ -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 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 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="www.MTGCube.com (502 cards)" jar="mage-tournament-booster-draft.jar" className="mage.tournament.cubes.MTGCube"/>
|
||||
</draftCubes>
|
||||
|
|
|
|||
|
|
@ -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 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 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="www.MTGCube.com (502 cards)" jar="mage-tournament-booster-draft-${project.version}.jar" className="mage.tournament.cubes.MTGCube"/>
|
||||
</draftCubes>
|
||||
|
|
|
|||
|
|
@ -36,6 +36,9 @@ import java.util.concurrent.TimeUnit;
|
|||
import java.util.concurrent.locks.ReentrantLock;
|
||||
import java.util.regex.Matcher;
|
||||
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.UserGroup;
|
||||
import mage.remote.Connection;
|
||||
|
|
@ -168,15 +171,14 @@ public class Session {
|
|||
userDataView.isAutoOrderTrigger());
|
||||
user.setUserData(userData);
|
||||
} else {
|
||||
if (userData.getAvatarId() == 51) { // Update special avatar if first avatar is selected
|
||||
updateAvatar(user.getName(), userData);
|
||||
}
|
||||
userData.setAvatarId(userDataView.getAvatarId());
|
||||
userData.setShowAbilityPickerForced(userDataView.isShowAbilityPickerForced());
|
||||
userData.setAllowRequestShowHandCards(userDataView.isAllowRequestShowHandCards());
|
||||
userData.setUserSkipPrioritySteps(userDataView.getUserSkipPrioritySteps());
|
||||
userData.setConfirmEmptyManaPool(userDataView.confirmEmptyManaPool());
|
||||
userData.setAskMoveToGraveOrder(userDataView.askMoveToGraveOrder());
|
||||
user.getUserData().update(userData);
|
||||
}
|
||||
if (user.getUserData().getAvatarId() < Constants.MIN_AVATAR_ID
|
||||
|| user.getUserData().getAvatarId() > Constants.MAX_AVATAR_ID) {
|
||||
user.getUserData().setAvatarId(Constants.DEFAULT_AVATAR_ID);
|
||||
}
|
||||
if (user.getUserData().getAvatarId() == 11) {
|
||||
user.getUserData().setAvatarId(updateAvatar(user.getName()));
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
|
@ -187,31 +189,17 @@ public class Session {
|
|||
//TODO: move to separate class
|
||||
//TODO: add for checking for private key
|
||||
switch (userName) {
|
||||
case "nantuko":
|
||||
userData.setAvatarId(1000);
|
||||
break;
|
||||
case "North":
|
||||
userData.setAvatarId(1006);
|
||||
break;
|
||||
case "BetaSteward":
|
||||
userData.setAvatarId(1008);
|
||||
break;
|
||||
case "loki":
|
||||
userData.setAvatarId(1012);
|
||||
break;
|
||||
case "Ayrat":
|
||||
userData.setAvatarId(1018);
|
||||
break;
|
||||
return 1008;
|
||||
case "Bandit":
|
||||
userData.setAvatarId(1020);
|
||||
break;
|
||||
default:
|
||||
userData.setAvatarId(51);
|
||||
break;
|
||||
case "Wehk":
|
||||
userData.setAvatarId(66);
|
||||
break;
|
||||
return 1020;
|
||||
case "fireshoes":
|
||||
return 1021;
|
||||
}
|
||||
return 11;
|
||||
}
|
||||
|
||||
public String getId() {
|
||||
|
|
|
|||
|
|
@ -25,18 +25,21 @@
|
|||
* 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.ArrayList;
|
||||
import java.util.GregorianCalendar;
|
||||
import java.util.List;
|
||||
import mage.cards.ExpansionSet;
|
||||
import mage.cards.repository.CardCriteria;
|
||||
import mage.cards.repository.CardInfo;
|
||||
import mage.cards.repository.CardRepository;
|
||||
import mage.constants.SetType;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author fireshoes
|
||||
*/
|
||||
|
||||
public class BattleForZendikar extends ExpansionSet {
|
||||
|
||||
private static final BattleForZendikar fINSTANCE = new BattleForZendikar();
|
||||
|
|
@ -45,16 +48,33 @@ public class BattleForZendikar extends ExpansionSet {
|
|||
return fINSTANCE;
|
||||
}
|
||||
|
||||
List<CardInfo> savedSpecialLand = new ArrayList<>();
|
||||
|
||||
private BattleForZendikar() {
|
||||
super("Battle for Zendikar", "BFZ", "mage.sets.battleforzendikar", new GregorianCalendar(2015, 10, 2).getTime(), SetType.EXPANSION);
|
||||
this.blockName = "Battle for Zendikar";
|
||||
this.hasBoosters = true;
|
||||
this.hasBasicLands = true;
|
||||
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.numBoosterUncommon = 3;
|
||||
this.numBoosterRare = 1;
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
35
Mage.Sets/src/mage/sets/OathOfTheGatewatch.java
Normal 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;
|
||||
}
|
||||
}
|
||||
51
Mage.Sets/src/mage/sets/ZendikarExpeditions.java
Normal 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;
|
||||
}
|
||||
}
|
||||
|
|
@ -34,7 +34,7 @@ import mage.constants.CardType;
|
|||
import mage.constants.Rarity;
|
||||
import mage.abilities.common.EntersBattlefieldTappedAbility;
|
||||
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.mana.BlueManaAbility;
|
||||
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.
|
||||
Ability ability = new AlternativeCostSourceAbility(new GenericManaCost(1));
|
||||
ability.addCost(new ReturnToHandTargetPermanentCost(new TargetControlledPermanent(filter)));
|
||||
ability.addCost(new ReturnToHandChosenControlledPermanentCost(new TargetControlledPermanent(filter)));
|
||||
this.addAbility(ability);
|
||||
|
||||
// Fieldmist Borderpost enters the battlefield tapped.
|
||||
|
|
|
|||
|
|
@ -32,7 +32,7 @@ import java.util.UUID;
|
|||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.EntersBattlefieldTappedAbility;
|
||||
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.mana.GreenManaAbility;
|
||||
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.
|
||||
Ability ability = new AlternativeCostSourceAbility(new GenericManaCost(1));
|
||||
ability.addCost(new ReturnToHandTargetPermanentCost(new TargetControlledPermanent(filter)));
|
||||
ability.addCost(new ReturnToHandChosenControlledPermanentCost(new TargetControlledPermanent(filter)));
|
||||
this.addAbility(ability);
|
||||
|
||||
// Veinfire Firewild enters the battlefield tapped.
|
||||
|
|
|
|||
|
|
@ -34,7 +34,7 @@ import mage.constants.CardType;
|
|||
import mage.constants.Rarity;
|
||||
import mage.abilities.common.EntersBattlefieldTappedAbility;
|
||||
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.mana.BlackManaAbility;
|
||||
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.
|
||||
Ability ability = new AlternativeCostSourceAbility(new GenericManaCost(1));
|
||||
ability.addCost(new ReturnToHandTargetPermanentCost(new TargetControlledPermanent(filter)));
|
||||
ability.addCost(new ReturnToHandChosenControlledPermanentCost(new TargetControlledPermanent(filter)));
|
||||
this.addAbility(ability);
|
||||
|
||||
// Mistvein Borderpost enters the battlefield tapped.
|
||||
|
|
|
|||
|
|
@ -1,38 +1,37 @@
|
|||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
* 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.alarareborn;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Rarity;
|
||||
import mage.abilities.effects.common.DestroyTargetEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Rarity;
|
||||
import mage.target.common.TargetCreaturePermanent;
|
||||
|
||||
/**
|
||||
|
|
@ -44,8 +43,6 @@ public class Terminate extends CardImpl {
|
|||
public Terminate(UUID ownerId) {
|
||||
super(ownerId, 46, "Terminate", Rarity.COMMON, new CardType[]{CardType.INSTANT}, "{B}{R}");
|
||||
this.expansionSetCode = "ARB";
|
||||
|
||||
|
||||
|
||||
// Destroy target creature. It can't be regenerated.
|
||||
this.getSpellAbility().addTarget(new TargetCreaturePermanent());
|
||||
|
|
|
|||
|
|
@ -34,7 +34,7 @@ import mage.constants.CardType;
|
|||
import mage.constants.Rarity;
|
||||
import mage.abilities.common.EntersBattlefieldTappedAbility;
|
||||
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.mana.BlackManaAbility;
|
||||
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.
|
||||
Ability ability = new AlternativeCostSourceAbility(new GenericManaCost(1));
|
||||
ability.addCost(new ReturnToHandTargetPermanentCost(new TargetControlledPermanent(filter)));
|
||||
ability.addCost(new ReturnToHandChosenControlledPermanentCost(new TargetControlledPermanent(filter)));
|
||||
this.addAbility(ability);
|
||||
|
||||
// Veinfire Borderpost enters the battlefield tapped.
|
||||
|
|
|
|||
|
|
@ -34,7 +34,7 @@ import mage.constants.CardType;
|
|||
import mage.constants.Rarity;
|
||||
import mage.abilities.common.EntersBattlefieldTappedAbility;
|
||||
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.mana.GreenManaAbility;
|
||||
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.
|
||||
Ability ability = new AlternativeCostSourceAbility(new GenericManaCost(1));
|
||||
ability.addCost(new ReturnToHandTargetPermanentCost(new TargetControlledPermanent(filter)));
|
||||
ability.addCost(new ReturnToHandChosenControlledPermanentCost(new TargetControlledPermanent(filter)));
|
||||
this.addAbility(ability);
|
||||
|
||||
// Wildfield Borderpost enters the battlefield tapped.
|
||||
|
|
|
|||
|
|
@ -27,22 +27,26 @@
|
|||
*/
|
||||
package mage.sets.avacynrestored;
|
||||
|
||||
import mage.constants.*;
|
||||
import java.util.UUID;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.costs.common.TapSourceCost;
|
||||
import mage.abilities.effects.Effect;
|
||||
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.mana.AnyColorManaAbility;
|
||||
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.TargetLandPermanent;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* @author noxx
|
||||
*/
|
||||
|
|
@ -53,7 +57,6 @@ public class AbundantGrowth extends CardImpl {
|
|||
this.expansionSetCode = "AVR";
|
||||
this.subtype.add("Aura");
|
||||
|
||||
|
||||
// Enchant land
|
||||
TargetPermanent auraTarget = new TargetLandPermanent();
|
||||
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."
|
||||
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) {
|
||||
|
|
|
|||
|
|
@ -28,8 +28,6 @@
|
|||
package mage.sets.avacynrestored;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
import mage.constants.*;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.BeginningOfUpkeepTriggeredAbility;
|
||||
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.keyword.EnchantAbility;
|
||||
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.common.TargetCreaturePermanent;
|
||||
|
||||
|
|
|
|||
|
|
@ -29,7 +29,6 @@ package mage.sets.avacynrestored;
|
|||
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Rarity;
|
||||
import mage.MageInt;
|
||||
import mage.ObjectColor;
|
||||
import mage.abilities.TriggeredAbility;
|
||||
import mage.abilities.common.BeginningOfYourEndStepTriggeredAbility;
|
||||
|
|
@ -38,7 +37,7 @@ import mage.abilities.decorator.ConditionalTriggeredAbility;
|
|||
import mage.abilities.effects.common.CreateTokenEffect;
|
||||
import mage.abilities.keyword.FlyingAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.game.permanent.token.Token;
|
||||
import mage.game.permanent.token.DemonToken;
|
||||
|
||||
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}");
|
||||
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.
|
||||
TriggeredAbility ability = new BeginningOfYourEndStepTriggeredAbility(new CreateTokenEffect(new DemonToken()), false);
|
||||
this.addAbility(new ConditionalTriggeredAbility(ability, OneControlledCreatureCondition.getInstance(), ruleText));
|
||||
|
|
@ -68,15 +66,3 @@ public class DemonicRising extends CardImpl {
|
|||
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());
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@ import mage.abilities.keyword.FlyingAbility;
|
|||
import mage.cards.CardImpl;
|
||||
import mage.constants.CardType;
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
@ -78,6 +78,7 @@ public class AkoumHellkite extends CardImpl {
|
|||
return new AkoumHellkite(this);
|
||||
}
|
||||
}
|
||||
|
||||
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. "
|
||||
|
|
|
|||
126
Mage.Sets/src/mage/sets/battleforzendikar/AkoumStonewaker.java
Normal 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");
|
||||
}
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
52
Mage.Sets/src/mage/sets/battleforzendikar/AltarsReap.java
Normal 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);
|
||||
}
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
81
Mage.Sets/src/mage/sets/battleforzendikar/AngelicGift.java
Normal 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);
|
||||
}
|
||||
}
|
||||
52
Mage.Sets/src/mage/sets/battleforzendikar/Anticipate.java
Normal 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);
|
||||
}
|
||||
}
|
||||
101
Mage.Sets/src/mage/sets/battleforzendikar/BaneOfBalaGed.java
Normal 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;
|
||||
}
|
||||
}
|
||||
107
Mage.Sets/src/mage/sets/battleforzendikar/BeastcallerSavant.java
Normal 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);
|
||||
}
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
76
Mage.Sets/src/mage/sets/battleforzendikar/BlightedFen.java
Normal 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);
|
||||
}
|
||||
}
|
||||
75
Mage.Sets/src/mage/sets/battleforzendikar/BlightedGorge.java
Normal 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);
|
||||
}
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
71
Mage.Sets/src/mage/sets/battleforzendikar/Blisterpod.java
Normal 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);
|
||||
}
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
71
Mage.Sets/src/mage/sets/battleforzendikar/BoilingEarth.java
Normal 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);
|
||||
}
|
||||
}
|
||||
52
Mage.Sets/src/mage/sets/battleforzendikar/BoneSplinters.java
Normal 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);
|
||||
}
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
117
Mage.Sets/src/mage/sets/battleforzendikar/BringToLight.java
Normal 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> — 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;
|
||||
}
|
||||
}
|
||||
72
Mage.Sets/src/mage/sets/battleforzendikar/BroodMonitor.java
Normal 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);
|
||||
}
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
69
Mage.Sets/src/mage/sets/battleforzendikar/CallTheScions.java
Normal 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);
|
||||
}
|
||||
}
|
||||
68
Mage.Sets/src/mage/sets/battleforzendikar/CarrierThrall.java
Normal 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);
|
||||
}
|
||||
}
|
||||