Merge branch 'magefree/master'

This commit is contained in:
Samuel Sandeen 2016-09-13 20:51:35 -04:00
commit 9f111984da
101 changed files with 5755 additions and 234 deletions

View file

@ -925,7 +925,7 @@ class ImportFilter extends FileFilter {
ext = s.substring(i + 1).toLowerCase();
}
if (ext != null) {
if (ext.toLowerCase().equals("dec") || ext.toLowerCase().equals("mwdeck") || ext.toLowerCase().equals("txt")) {
if (ext.toLowerCase().equals("dec") || ext.toLowerCase().equals("mwdeck") || ext.toLowerCase().equals("txt") || ext.toLowerCase().equals("dek")) {
return true;
}
}
@ -934,7 +934,7 @@ class ImportFilter extends FileFilter {
@Override
public String getDescription() {
return "*.dec | *.mwDeck | *.txt";
return "*.dec | *.mwDeck | *.txt | *.dek";
}
}

View file

@ -63,7 +63,19 @@ public class CardPanelRenderImpl extends CardPanel {
if (!a.getRules().equals(b.getRules())) {
return false;
}
if (!a.getExpansionSetCode().equals(b.getExpansionSetCode())) {
// Expansion set code, with null checking:
// TODO: The null checks should not be necessary, but thanks to Issue #2260
// some tokens / commandobjects will be missing expansion set codes.
String expA = a.getExpansionSetCode();
if (expA == null) {
expA = "";
}
String expB = b.getExpansionSetCode();
if (expB == null) {
expB = "";
}
if (!expA.equals(expB)) {
return false;
}
if (a.getFrameStyle() != b.getFrameStyle()) {

View file

@ -0,0 +1,176 @@
/*
* 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 org.mage.plugins.card.dl.sources;
import java.io.IOException;
import java.net.URL;
import java.util.HashMap;
import org.apache.log4j.Logger;
import org.mage.plugins.card.images.CardDownloadData;
import org.mage.plugins.card.images.DownloadPictures;
/**
*
* @author spjspj
*/
public class AltMtgOnlTokensImageSource implements CardImageSource {
private static final Logger logger = Logger.getLogger(AltMtgOnlTokensImageSource.class);
private static CardImageSource instance = new AltMtgOnlTokensImageSource();
private static int maxTimes = 0;
public static CardImageSource getInstance() {
if (instance == null) {
instance = new AltMtgOnlTokensImageSource();
}
return instance;
}
@Override
public String getSourceName() {
return "http://alternative.mtg.onl/tokens/";
}
@Override
public Float getAverageSize() {
return 26.7f;
}
@Override
public String getNextHttpImageUrl() {
if (copyUrlToImage == null) {
setupLinks();
}
for (String key : copyUrlToImageDone.keySet()) {
if (copyUrlToImageDone.get(key) < maxTimes) {
copyUrlToImageDone.put(key, maxTimes);
return key;
}
}
if (maxTimes < 2) {
maxTimes++;
}
for (String key : copyUrlToImageDone.keySet()) {
if (copyUrlToImageDone.get(key) < maxTimes) {
copyUrlToImageDone.put(key, maxTimes);
return key;
}
}
return null;
}
@Override
public String getFileForHttpImage(String httpImageUrl) {
if (httpImageUrl != null) {
return copyUrlToImage.get(httpImageUrl);
}
return null;
}
@Override
public String generateURL(CardDownloadData card) throws Exception {
return null;
}
HashMap<String, String> copyUrlToImage = null;
HashMap<String, String> copyImageToUrl = null;
HashMap<String, Integer> copyUrlToImageDone = null;
private void setupLinks() {
if (copyUrlToImage != null) {
return;
}
copyUrlToImage = new HashMap<String, String>();
copyImageToUrl = new HashMap<String, String>();
copyUrlToImageDone = new HashMap<String, Integer>();
copyUrlToImage.put("SCG_CC_002-Penguin.jpg", "BIRD.WU.BIRD.CREATURE.1.1.full.jpg");
copyUrlToImage.put("SCG_CC_005-Vampire.jpg", "VAMPIRE.B.VAMPIRE.CREATURE.1.1.full.jpg");
copyUrlToImage.put("SCG_CC_006-Panda.jpg", "BEAR.G.BEAR.CREATURE.2.2.full.jpg");
copyUrlToImage.put("SCG_CC_008-Force-of-Squirrel.jpg", "SQUIRREL.G.SQUIRREL.CREATURE.1.1.full.jpg");
copyUrlToImage.put("SCG_CC_013-Zombie.jpg", "ZOMBIE.B.ZOMBIE.CREATURE.2.2.full.jpg");
copyUrlToImage.put("SCG_GN_003-Ooze.jpg", "OOZE.G.OOZE.CREATURE.1.1.full.jpg");
copyUrlToImage.put("SCG_GN_005-Mammoth.jpg", "ELEPHANT.G.ELEPHANT.CREATURE.3.3.full.jpg");
copyUrlToImage.put("SCG_GN_006-Wurm.jpg", "WURM.G.WURM.CREATURE.5.5.full.jpg");
copyUrlToImage.put("SCG_GN_007-Rat.jpg", "RAT.B.RAT.CREATURE.1.1.full.jpg");
copyUrlToImage.put("SCG_GN_010-Wolf.jpg", "WOLF.G.WOLF.CREATURE.2.2.full.jpg");
copyUrlToImage.put("SCG_GN_011-Bee.jpg", "INSECT.G.INSECT.CREATURE.1.1.full.jpg");
copyUrlToImage.put("SCG_GN_012-Bunny.jpg", "RABBIT.G.RABBIT.CREATURE.1.1.full.jpg");
copyUrlToImage.put("SCG_GN_013-Piglet.jpg", "BOAR.G.BOAR.CREATURE.2.2.full.jpg");
copyUrlToImage.put("SCG_GN_014-Monkey.jpg", "APE.G.APE.CREATURE.3.3.full.jpg");
copyUrlToImage.put("SCG_GN_015-Kraken.jpg", "KRAKEN.U.KRAKEN.CREATURE.9.9.full.jpg");
copyUrlToImage.put("SCG_GN_016-Hippo.jpg", "HIPPO.G.HIPPO.CREATURE.1.1.full.jpg");
copyUrlToImage.put("SCG_GN_019-Reindeer.jpg", "CARIBOU.W.CARIBOU.CREATURE.0.1.full.jpg");
copyUrlToImage.put("SCG_GN_020-Grizzlybrand.jpg", "DEMON.B.DEMON.CREATURE.5.5.full.jpg");
copyUrlToImage.put("SCG_IP_002-Elemental.jpg", "ELEMENTAL.BR.ELEMENTAL.CREATURE.1.1.full.jpg");
copyUrlToImage.put("SCG_IP_003-Soldier.jpg", "SOLDIER.W.SOLDIER.CREATURE.1.1.full.jpg");
copyUrlToImage.put("SCG_IP_005-Spirit.jpg ", "SPIRIT.W.SPIRIT.CREATURE.1.1.full.jpg");
copyUrlToImage.put("SCG_IP_010-Golem.jpg", "GOLEM..GOLEM.ARTIFACTCREATURE.3.3.full.jpg");
copyUrlToImage.put("SCG_IP_011-Pegasus.jpg", "PEGASUS.W.PEGASUS.CREATURE.1.1.full.jpg");
copyUrlToImage.put("SCG_IP_012-Soldier.jpg", "SOLDIER.WR.SOLDIER.CREATURE.1.1.full.jpg");
copyUrlToImage.put("SCG_IP_016-Rhino.jpg", "RHINO.G.RHINO.CREATURE.4.4.full.jpg");
copyUrlToImage.put("SCG_IP_017-Spider.jpg", "SPIDER.B.SPIDER.CREATURE.1.2.full.jpg");
copyUrlToImage.put("SCG_PO_003-Spirit.jpg", "SPIRIT..SPIRIT.CREATURE.1.1.full.jpg");
copyUrlToImage.put("SCG_PO_007-Dragon.jpg", "DRAGON.R.DRAGON.CREATURE.2.2.full.jpg");
copyUrlToImage.put("SCG_PO_009-Faerie.jpg", "FAERIE.U.FAERIE.CREATURE.1.1.full.jpg");
copyUrlToImage.put("SCG_PO_010-Goblin.jpg", "GOBLIN.R.GOBLIN.CREATURE.1.1.full.jpg");
copyUrlToImage.put("SCG_P_001-Angel.jpg", "ANGEL.W.ANGEL.CREATURE.4.4.full.jpg");
copyUrlToImage.put("SCG_P_002-Penguin.jpg", "BIRD.W.BIRD.CREATURE.3.4.full.jpg");
copyUrlToImage.put("SCG_RC_001-Kitten.jpg", "CAT.B.CAT.CREATURE.2.1.full.jpg");
copyUrlToImage.put("SCG_RC_002-Penguin.jpg", "BIRD.U.BIRD.CREATURE.2.2.full.jpg");
copyUrlToImage.put("SCG_RC_009-Aia,-Ascended.jpg", "AVATAR.W.AVATAR.CREATURE.S.S.full.jpg");
copyUrlToImage.put("SCG_SC_001-Cyclops.jpg", "BEAST.G.BEAST.CREATURE.3.3.full.jpg");
copyUrlToImage.put("SCG_SC_002-Soldier.jpg", "SOLDIER.R.SOLDIER.CREATURE.1.1.full.jpg");
for (String key : copyUrlToImage.keySet()) {
copyUrlToImageDone.put(key, maxTimes);
copyImageToUrl.put(copyUrlToImage.get(key), key);
}
}
@Override
public String generateTokenUrl(CardDownloadData card) throws IOException {
if (copyUrlToImage == null) {
setupLinks();
}
return null;
}
@Override
public Integer getTotalImages() {
if (copyUrlToImage == null) {
setupLinks();
}
if (copyUrlToImage != null) {
return copyImageToUrl.size();
}
return -1;
}
}

View file

@ -14,4 +14,5 @@ public interface CardImageSource {
String getFileForHttpImage(String httpImageUrl);
String getSourceName();
Float getAverageSize();
Integer getTotalImages();
}

View file

@ -56,7 +56,7 @@ public class GathererSets implements Iterable<DownloadJob> {
"KTK", "FRF", "DTK",
"BFZ", "EXP", "OGW",
"SOI", "EMN",
"KLD", "AER",
"KLD", "MPS", "AER",
"AKH", "HOU"
};
private static final HashMap<String, String> symbolsReplacements = new HashMap<>();

View file

@ -103,6 +103,7 @@ public class MagicCardsImageSource implements CardImageSource {
put("MMA", "modern-masters");
put("MOR", "morningtide");
put("MPRP", "magic-player-rewards");
put("MPS", "masterpiece-series");
put("NPH", "new-phyrexia");
put("ODY", "player-rewards-2002");
put("OGW", "oath-of-the-gatewatch");
@ -215,4 +216,9 @@ public class MagicCardsImageSource implements CardImageSource {
public Float getAverageSize() {
return 70.0f;
}
@Override
public Integer getTotalImages() {
return -1;
}
}

View file

@ -105,4 +105,9 @@ public class MtgImageSource implements CardImageSource {
public Float getAverageSize() {
return 70.0f;
}
@Override
public Integer getTotalImages() {
return -1;
}
}

View file

@ -41,8 +41,8 @@ import org.mage.plugins.card.images.DownloadPictures;
public class MtgOnlTokensImageSource implements CardImageSource {
private static final Logger logger = Logger.getLogger(MtgOnlTokensImageSource.class);
private static CardImageSource instance = new MtgOnlTokensImageSource();
private static int maxTimes = 0;
public static CardImageSource getInstance() {
if (instance == null) {
@ -66,10 +66,19 @@ public class MtgOnlTokensImageSource implements CardImageSource {
if (copyUrlToImage == null) {
setupLinks();
}
for (String key : copyUrlToImageDone.keySet()) {
if (copyUrlToImageDone.get(key) == false) {
copyUrlToImageDone.put(key, true);
if (copyUrlToImageDone.get(key) < maxTimes) {
copyUrlToImageDone.put(key, maxTimes);
return key;
}
}
if (maxTimes < 2) {
maxTimes++;
}
for (String key : copyUrlToImageDone.keySet()) {
if (copyUrlToImageDone.get(key) < maxTimes) {
copyUrlToImageDone.put(key, maxTimes);
return key;
}
}
@ -91,7 +100,7 @@ public class MtgOnlTokensImageSource implements CardImageSource {
HashMap<String, String> copyUrlToImage = null;
HashMap<String, String> copyImageToUrl = null;
HashMap<String, Boolean> copyUrlToImageDone = null;
HashMap<String, Integer> copyUrlToImageDone = null;
private void setupLinks() {
if (copyUrlToImage != null) {
@ -99,7 +108,7 @@ public class MtgOnlTokensImageSource implements CardImageSource {
}
copyUrlToImage = new HashMap<String, String>();
copyImageToUrl = new HashMap<String, String>();
copyUrlToImageDone = new HashMap<String, Boolean>();
copyUrlToImageDone = new HashMap<String, Integer>();
copyUrlToImage.put("Angel_B_3_3.jpg", "ANGEL.B.ANGEL.CREATURE.3.3.full.jpg");
copyUrlToImage.put("Angel_W_3_3.jpg", "ANGEL.W.ANGEL.CREATURE.3.3.full.jpg");
copyUrlToImage.put("Angel_W_4_4.jpg", "ANGEL.W.ANGEL.CREATURE.4.4.full.jpg");
@ -338,21 +347,30 @@ public class MtgOnlTokensImageSource implements CardImageSource {
copyUrlToImage.put("Zombie_B_X_X.jpg", "ZOMBIE.B.ZOMBIE.CREATURE.X.X.full.jpg");
copyUrlToImage.put("Zombie_Horror_B_X_X.jpg", "ZOMBIEHORROR.B.ZOMBIEHORROR.CREATURE.X.X.full.jpg");
copyUrlToImage.put("Zombie_U_X_X.jpg", "ZOMBIE.U.ZOMBIE.CREATURE.X.X.full.jpg");
copyUrlToImage.put("Zombie_Wizard_UB_1_1.jpg", "ZOMBIEWIZARD.BG.ZOMBIEWIZARD.CREATURE.1.1.full.jpg");
copyUrlToImage.put("Zombie_Wizard_UB_1_1.jpg", "ZOMBIEWIZARD.UB.ZOMBIEWIZARD.CREATURE.1.1.full.jpg");
for (String key : copyUrlToImage.keySet()) {
copyUrlToImageDone.put(key, false);
copyUrlToImageDone.put(key, maxTimes);
copyImageToUrl.put(copyUrlToImage.get(key), key);
}
}
@Override
public String generateTokenUrl(CardDownloadData card) throws IOException {
if (copyUrlToImage == null) {
setupLinks();
}
return null;
}
@Override
public Integer getTotalImages() {
if (copyUrlToImage == null) {
setupLinks();
}
if (copyUrlToImage != null) {
return copyImageToUrl.size();
}
return -1;
}
}

View file

@ -244,4 +244,9 @@ public class MythicspoilerComSource implements CardImageSource {
public String getFileForHttpImage(String httpImageUrl) {
return null;
}
@Override
public Integer getTotalImages() {
return -1;
}
}

View file

@ -25,7 +25,6 @@
* authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com.
*/
package org.mage.plugins.card.dl.sources;
import java.io.BufferedReader;
@ -66,12 +65,12 @@ public class TokensMtgImageSource implements CardImageSource {
public Float getAverageSize() {
return 26.7f;
}
@Override
public String getNextHttpImageUrl() {
return null;
}
@Override
public String getFileForHttpImage(String httpImageUrl) {
return null;
@ -168,7 +167,7 @@ public class TokensMtgImageSource implements CardImageSource {
tokenData = matchedTokens.get(card.getType() - 1);
}
String url = "http://tokens.mtg.onl/tokens/" + tokenData.getExpansionSetCode().trim() + "_"
String url = "http://tokens.mtg.onl/tokens/" + tokenData.getExpansionSetCode().trim() + "_"
+ tokenData.getNumber().trim() + "-" + tokenData.getName().trim()+ ".jpg";
url = url.replace(' ', '-');
return url;
@ -269,19 +268,19 @@ public class TokensMtgImageSource implements CardImageSource {
}
} else {
if (state == 0) {
set = line.substring(0, 3);
state = 1;
} else {
if (state == 1) {
state = 2;
}
String[] split = line.split(",");
// replace special comma for cards like 'Ashaya the Awoken World'
String name = split[0].replace('', ',');
String number = split[1];
TokenData token = new TokenData(name, number, set);
tokensData.add(token);
set = line.substring(0, 3);
state = 1;
} else {
if (state == 1) {
state = 2;
}
String[] split = line.split(",");
// replace special comma for cards like 'Ashaya the Awoken World'
String name = split[0].replace('', ',');
String number = split[1];
TokenData token = new TokenData(name, number, set);
tokensData.add(token);
}
}
line = reader.readLine();
@ -307,6 +306,7 @@ public class TokensMtgImageSource implements CardImageSource {
}
final class TokenData {
final private String name;
final private String number;
final private String expansionSetCode;
@ -330,4 +330,8 @@ public class TokensMtgImageSource implements CardImageSource {
}
}
@Override
public Integer getTotalImages() {
return -1;
}
}

View file

@ -198,6 +198,7 @@ public class WizardCardsImageSource implements CardImageSource {
setsAliases.put("MMQ", "Mercadian Masques");
setsAliases.put("MOR", "Morningtide");
setsAliases.put("MPRP", "Magic Player Rewards");
setsAliases.put("MPS", "Masterpiece Series");
setsAliases.put("MRD", "Mirrodin");
setsAliases.put("NEM", "Nemesis");
setsAliases.put("NPH", "New Phyrexia");
@ -510,5 +511,9 @@ public class WizardCardsImageSource implements CardImageSource {
}
}
@Override
public Integer getTotalImages() {
return -1;
}
}

View file

@ -43,6 +43,10 @@ public class CardDownloadData {
this.secondSide = secondSide;
this.tokenSetCode = tokenSetCode;
this.tokenDescriptor = tokenDescriptor;
if (this.tokenDescriptor == null || this.tokenDescriptor.equalsIgnoreCase("")) {
this.tokenDescriptor = lastDitchTokenDescriptor();
}
}
public CardDownloadData(final CardDownloadData card) {
@ -55,6 +59,8 @@ public class CardDownloadData {
this.type = card.type;
this.usesVariousArt = card.usesVariousArt;
this.tokenSetCode = card.tokenSetCode;
this.tokenDescriptor = card.tokenDescriptor;
}
@Override
@ -138,7 +144,15 @@ public class CardDownloadData {
public void setTokenDescriptor(String tokenDescriptor) {
this.tokenDescriptor = tokenDescriptor;
}
}
private String lastDitchTokenDescriptor() {
String name = this.name.replaceAll("[^a-zA-Z0-9]", "");
String descriptor = name + "....";
descriptor = descriptor.toUpperCase();
return descriptor;
}
public boolean isToken() {
return token;
}

View file

@ -60,6 +60,7 @@ import org.apache.log4j.Logger;
import org.mage.plugins.card.dl.sources.CardImageSource;
import org.mage.plugins.card.dl.sources.MagicCardsImageSource;
import org.mage.plugins.card.dl.sources.MtgOnlTokensImageSource;
import org.mage.plugins.card.dl.sources.AltMtgOnlTokensImageSource;
import org.mage.plugins.card.dl.sources.MythicspoilerComSource;
import org.mage.plugins.card.dl.sources.TokensMtgImageSource;
import org.mage.plugins.card.dl.sources.WizardCardsImageSource;
@ -146,7 +147,8 @@ public class DownloadPictures extends DefaultBoundedRangeModel implements Runnab
"wizards.com",
"mythicspoiler.com",
"tokens.mtg.onl", //"mtgimage.com (HQ)",
"mtg.onl"
"mtg.onl",
"alternative.mtg.onl"
//"mtgathering.ru HQ",
//"mtgathering.ru MQ",
//"mtgathering.ru LQ",
@ -177,6 +179,9 @@ public class DownloadPictures extends DefaultBoundedRangeModel implements Runnab
case 4:
cardImageSource = MtgOnlTokensImageSource.getInstance();
break;
case 5:
cardImageSource = AltMtgOnlTokensImageSource.getInstance();
break;
}
int count = DownloadPictures.this.cards.size();
float mb = (count * cardImageSource.getAverageSize()) / 1024;
@ -285,7 +290,6 @@ public class DownloadPictures extends DefaultBoundedRangeModel implements Runnab
try {
offlineMode = true;
for (CardInfo card : allCards) {
if (!card.getCardNumber().isEmpty() && !"0".equals(card.getCardNumber()) && !card.getSetCode().isEmpty()
&& !ignoreUrls.contains(card.getSetCode())) {
@ -328,10 +332,10 @@ public class DownloadPictures extends DefaultBoundedRangeModel implements Runnab
}
}
allCardsUrls.addAll(getTokenCardUrls());
} catch (Exception e) {
logger.error(e);
}
int numberTokenImages = allCardsUrls.size() - numberCardImages;
TFile file;
@ -504,17 +508,14 @@ public class DownloadPictures extends DefaultBoundedRangeModel implements Runnab
imageRef = cardImageSource.getSourceName() + imageRef;
try {
URL imageUrl = new URL(imageRef);
Runnable task = new DownloadTask(imageUrl, fileName, 1);
Runnable task = new DownloadTask(imageUrl, fileName, cardImageSource.getTotalImages());
executor.execute(task);
} catch (Exception ex) {
}
} else {
if (card != null) {
logger.info("Card not available on " + cardImageSource.getSourceName() + ": " + card.getName() + " (" + card.getSet() + ")");
synchronized (sync) {
update(cardIndex + 1, cardsToDownload.size());
}
} else if (card != null && cardImageSource.getTotalImages() == -1) {
logger.info("Card not available on " + cardImageSource.getSourceName() + ": " + card.getName() + " (" + card.getSet() + ")");
synchronized (sync) {
update(cardIndex + 1, cardsToDownload.size());
}
}
} else if (url != null) {
@ -587,9 +588,9 @@ public class DownloadPictures extends DefaultBoundedRangeModel implements Runnab
}
String imagePath;
if (useSpecifiedPaths) {
imagePath = CardImageUtils.getTokenBasePath(); // temporaryFile = plugins/images\NUM.jace, telepath unbound.jpg
imagePath += actualFilename; // imagePath = d:\xmage_images\ORI.zip\ORI\Jace,telepathunbound.jpg
String tmpFile = filePath + actualFilename + ".2";
imagePath = CardImageUtils.getTokenBasePath();
imagePath += actualFilename;
String tmpFile = filePath + "ADDTOTOK" + actualFilename;
temporaryFile = new File(tmpFile.toString());
} else {
imagePath = CardImageUtils.generateImagePath(card);
@ -663,7 +664,7 @@ public class DownloadPictures extends DefaultBoundedRangeModel implements Runnab
new TFile(temporaryFile).cp_rp(outputFile);
}
} else {
if (card != null) {
if (card != null && !useSpecifiedPaths) {
logger.warn("Image download for " + card.getName()
+ (!card.getDownloadName().equals(card.getName()) ? " downloadname: " + card.getDownloadName() : "")
+ "(" + card.getSet() + ") failed - responseCode: " + responseCode + " url: " + url.toString());

View file

@ -120,24 +120,22 @@ public class CardImageUtils {
public static String getTokenBasePath() {
String useDefault = PreferencesDialog.getCachedValue(PreferencesDialog.KEY_CARD_IMAGES_USE_DEFAULT, "true");
String imagesPath = useDefault.equals("true") ? null : PreferencesDialog.getCachedValue(PreferencesDialog.KEY_CARD_IMAGES_PATH, null);
if (PreferencesDialog.isSaveImagesToZip()) {
return imagesPath + TFile.separator + "TOK" + ".zip" + TFile.separator;
} else {
return imagesPath + TFile.separator + "TOK" + TFile.separator;
String imagesPath = useDefault.equals("true") ? Constants.IO.imageBaseDir : PreferencesDialog.getCachedValue(PreferencesDialog.KEY_CARD_IMAGES_PATH, null);
if (!imagesPath.endsWith(TFile.separator)) {
imagesPath += TFile.separator;
}
String finalPath = "";
if (PreferencesDialog.isSaveImagesToZip()) {
finalPath = imagesPath + "TOK" + ".zip" + TFile.separator;
} else {
finalPath = imagesPath + "TOK" + TFile.separator;
}
return finalPath;
}
private static String getTokenDescriptorImagePath(CardDownloadData card) {
String useDefault = PreferencesDialog.getCachedValue(PreferencesDialog.KEY_CARD_IMAGES_USE_DEFAULT, "true");
String imagesPath = useDefault.equals("true") ? null : PreferencesDialog.getCachedValue(PreferencesDialog.KEY_CARD_IMAGES_PATH, null);
if (PreferencesDialog.isSaveImagesToZip()) {
return imagesPath + TFile.separator + "TOK" + ".zip" + TFile.separator + card.getTokenDescriptor() + ".full.jpg";
} else {
return imagesPath + TFile.separator + "TOK" + TFile.separator + card.getTokenDescriptor() + ".full.jpg";
}
return getTokenBasePath() + card.getTokenDescriptor() + ".full.jpg";
}
private static String buildTokenPath(String imagesDir, String set) {

View file

@ -1,3 +1,8 @@
|Generate|TOK:KLD|Beast||
|Generate|TOK:KLD|Construct||
|Generate|TOK:KLD|Servo||
|Generate|TOK:KLD|Thopter||
|Generate|TOK:CN2|Assassin||
|Generate|TOK:CN2|Beast||
|Generate|TOK:CN2|Construct||

View file

@ -76,4 +76,4 @@ dd3jvc=ddajvc
# Remove setname as soon as the images can be downloaded
ignore.urls=TOK,AER,PCA,C16,DDS,ANB,AKH,HOU,MM3
# sets ordered by release time (newest goes first)
token.lookup.order=ANB,HOU,MM3,DDS,AKH,DD3DVD,DD3EVG,DD3GVL,DD3JVC,H09,AER,PCA,C16,V16,KLD,DDR,CN2,EMN,EMA,SOI,DDQ,CP,CMA,ARENA,SUS,APAC,EURO,UGIN,C15,OGW,EXP,DDP,BFZ,DRB,V09,V10,V11,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=ANB,HOU,MM3,DDS,AKH,DD3DVD,DD3EVG,DD3GVL,DD3JVC,H09,AER,PCA,C16,V16,MPS,KLD,DDR,CN2,EMN,EMA,SOI,DDQ,CP,CMA,ARENA,SUS,APAC,EURO,UGIN,C15,OGW,EXP,DDP,BFZ,DRB,V09,V10,V11,V12,V13,V14,V15,TPR,MPRP,DD3,DDO,ORI,MM2,PTC,DTK,FRF,KTK,M15,VMA,CNS,JOU,BNG,THS,DDL,M14,MMA,DGM,GTC,RTR,M13,AVR,DDI,DKA,ISD,M12,NPH,MBS,SOM,M11,ROE,DDE,WWK,ZEN,M10,GVL,ARB,DVD,CFX,JVC,ALA,EVE,SHM,EVG,MOR,LRW,10E,CLS,CHK,GRC

View file

@ -462,7 +462,7 @@ public class LegacyCubeJanuary2016 extends DraftCube {
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("Relic of Progenitus",""));
cubeCards.add(new DraftCube.CardIdentity("Relic of Progenitus",""));
cubeCards.add(new DraftCube.CardIdentity("Remand",""));
cubeCards.add(new DraftCube.CardIdentity("Remove Soul",""));
cubeCards.add(new DraftCube.CardIdentity("Repeal",""));

View file

@ -0,0 +1,642 @@
/*
* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are
* permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* The views and conclusions contained in the software and documentation are those of the
* authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com.
*/
package mage.tournament.cubes;
import mage.game.draft.DraftCube;
/**
*
* @author fireshoes
*/
public class LegacyCubeSeptember2016 extends DraftCube {
public LegacyCubeSeptember2016() {
super("MTGO Legacy Cube September 2016 (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("Ajani Goldmane",""));
cubeCards.add(new DraftCube.CardIdentity("Ajani Vengeant",""));
cubeCards.add(new DraftCube.CardIdentity("Ajani, Caller of the Pride",""));
cubeCards.add(new DraftCube.CardIdentity("Anafenza, Kin-Tree Spirit",""));
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("Anger of the Gods",""));
cubeCards.add(new DraftCube.CardIdentity("Anguished Unmaking",""));
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 Avacyn",""));
cubeCards.add(new DraftCube.CardIdentity("Arid Mesa",""));
cubeCards.add(new DraftCube.CardIdentity("Armageddon",""));
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("Asylum Visitor",""));
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("Batterskull",""));
cubeCards.add(new DraftCube.CardIdentity("Bayou",""));
cubeCards.add(new DraftCube.CardIdentity("Beast Within",""));
cubeCards.add(new DraftCube.CardIdentity("Bedlam Reveler",""));
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 Artist",""));
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("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("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("Bruna, the Fading Light",""));
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("Catacomb Sifter",""));
cubeCards.add(new DraftCube.CardIdentity("Celestial Colonnade",""));
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, Fire of Kaladesh",""));
cubeCards.add(new DraftCube.CardIdentity("Chandra, Flamecaller",""));
cubeCards.add(new DraftCube.CardIdentity("Chandra, Pyromaster",""));
cubeCards.add(new DraftCube.CardIdentity("Chandra's Phoenix",""));
cubeCards.add(new DraftCube.CardIdentity("Chaos Warp",""));
cubeCards.add(new DraftCube.CardIdentity("Char",""));
cubeCards.add(new DraftCube.CardIdentity("Chord of Calling",""));
cubeCards.add(new DraftCube.CardIdentity("Chromatic Lantern",""));
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("Collective Brutality",""));
cubeCards.add(new DraftCube.CardIdentity("Collective Defiance",""));
cubeCards.add(new DraftCube.CardIdentity("Collective Effort",""));
cubeCards.add(new DraftCube.CardIdentity("Compulsive Research",""));
cubeCards.add(new DraftCube.CardIdentity("Condemn",""));
cubeCards.add(new DraftCube.CardIdentity("Consecrated Sphinx",""));
cubeCards.add(new DraftCube.CardIdentity("Control Magic",""));
cubeCards.add(new DraftCube.CardIdentity("Coralhelm Commander",""));
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("Creeping Tar Pit",""));
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 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("Declaration in Stone",""));
cubeCards.add(new DraftCube.CardIdentity("Deep Analysis",""));
cubeCards.add(new DraftCube.CardIdentity("Delver of Secrets",""));
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("Devoted Druid",""));
cubeCards.add(new DraftCube.CardIdentity("Diabolic Servitude",""));
cubeCards.add(new DraftCube.CardIdentity("Dictate of Heliod",""));
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("Distended Mindbender",""));
cubeCards.add(new DraftCube.CardIdentity("Domri Rade",""));
cubeCards.add(new DraftCube.CardIdentity("Doom Blade",""));
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("Drana, Liberator of Malakir",""));
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("Duskwatch Recruiter",""));
cubeCards.add(new DraftCube.CardIdentity("Elder Deep-Fiend",""));
cubeCards.add(new DraftCube.CardIdentity("Eldrazi Monument",""));
cubeCards.add(new DraftCube.CardIdentity("Edric, Spymaster of Trest",""));
cubeCards.add(new DraftCube.CardIdentity("Eldritch Evolution",""));
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 Promised End",""));
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("Eternal Witness",""));
cubeCards.add(new DraftCube.CardIdentity("Ever After",""));
cubeCards.add(new DraftCube.CardIdentity("Evolutionary Leap",""));
cubeCards.add(new DraftCube.CardIdentity("Exclude",""));
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("Falkenrath Gorger",""));
cubeCards.add(new DraftCube.CardIdentity("Far // Away",""));
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("Fiery Confluence",""));
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("Flickerwisp",""));
cubeCards.add(new DraftCube.CardIdentity("Flooded Strand",""));
cubeCards.add(new DraftCube.CardIdentity("Forbid",""));
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("Frost Titan",""));
cubeCards.add(new DraftCube.CardIdentity("Future Sight",""));
cubeCards.add(new DraftCube.CardIdentity("Fyndhorn Elves",""));
cubeCards.add(new DraftCube.CardIdentity("Gaddock Teeg",""));
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 Hydra",""));
cubeCards.add(new DraftCube.CardIdentity("Genesis Wave",""));
cubeCards.add(new DraftCube.CardIdentity("Geralf's Messenger",""));
cubeCards.add(new DraftCube.CardIdentity("Gideon, Ally of Zendikar",""));
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("Gisela, the Broken Blade",""));
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 Bombardment",""));
cubeCards.add(new DraftCube.CardIdentity("Goblin Bushwhacker",""));
cubeCards.add(new DraftCube.CardIdentity("Goblin Dark-Dwellers",""));
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("Greenwarden of Murasa",""));
cubeCards.add(new DraftCube.CardIdentity("Grim Lavamancer",""));
cubeCards.add(new DraftCube.CardIdentity("Griselbrand",""));
cubeCards.add(new DraftCube.CardIdentity("Hallowed Fountain",""));
cubeCards.add(new DraftCube.CardIdentity("Hallowed Spiritkeeper",""));
cubeCards.add(new DraftCube.CardIdentity("Hangarback Walker",""));
cubeCards.add(new DraftCube.CardIdentity("Hanweir Battlements",""));
cubeCards.add(new DraftCube.CardIdentity("Hanweir Garrison",""));
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("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("Hissing Quagmire",""));
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("Incendiary Flow",""));
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("Kalitas, Traitor of Ghet",""));
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("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("Krenko's Command",""));
cubeCards.add(new DraftCube.CardIdentity("Kytheon, Hero of Akros",""));
cubeCards.add(new DraftCube.CardIdentity("Land Tax",""));
cubeCards.add(new DraftCube.CardIdentity("Lavaclaw Reaches",""));
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("Liliana, the Last Hope",""));
cubeCards.add(new DraftCube.CardIdentity("Lingering Souls",""));
cubeCards.add(new DraftCube.CardIdentity("Linvala, Keeper of Silence",""));
cubeCards.add(new DraftCube.CardIdentity("Linvala, the Preserver",""));
cubeCards.add(new DraftCube.CardIdentity("Living Death",""));
cubeCards.add(new DraftCube.CardIdentity("Llanowar Elves",""));
cubeCards.add(new DraftCube.CardIdentity("Looter il-Kor",""));
cubeCards.add(new DraftCube.CardIdentity("Lotus Cobra",""));
cubeCards.add(new DraftCube.CardIdentity("Loxodon Warhammer",""));
cubeCards.add(new DraftCube.CardIdentity("Lumbering Falls",""));
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 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("Mimic Vat",""));
cubeCards.add(new DraftCube.CardIdentity("Mindslaver",""));
cubeCards.add(new DraftCube.CardIdentity("Mirari's Wake",""));
cubeCards.add(new DraftCube.CardIdentity("Mirran Crusader",""));
cubeCards.add(new DraftCube.CardIdentity("Mirror Entity",""));
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 War Marshal",""));
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("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 Confluence",""));
cubeCards.add(new DraftCube.CardIdentity("Mystic Snake",""));
cubeCards.add(new DraftCube.CardIdentity("Nahiri, the Harbinger",""));
cubeCards.add(new DraftCube.CardIdentity("Nature's Lore",""));
cubeCards.add(new DraftCube.CardIdentity("Necromancy",""));
cubeCards.add(new DraftCube.CardIdentity("Needle Spires",""));
cubeCards.add(new DraftCube.CardIdentity("Negate",""));
cubeCards.add(new DraftCube.CardIdentity("Nekrataal",""));
cubeCards.add(new DraftCube.CardIdentity("Nevinyrral's Disk",""));
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, Voice of Zendikar",""));
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("Oath of Nissa",""));
cubeCards.add(new DraftCube.CardIdentity("Ob Nixilis Reignited",""));
cubeCards.add(new DraftCube.CardIdentity("Oblivion Ring",""));
cubeCards.add(new DraftCube.CardIdentity("Oblivion Stone",""));
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("Omnath, Locus of Rage",""));
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("Pack Rat",""));
cubeCards.add(new DraftCube.CardIdentity("Pact of Negation",""));
cubeCards.add(new DraftCube.CardIdentity("Parallax Wave",""));
cubeCards.add(new DraftCube.CardIdentity("Part the Waterveil",""));
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 Rager",""));
cubeCards.add(new DraftCube.CardIdentity("Phyrexian Revoker",""));
cubeCards.add(new DraftCube.CardIdentity("Pia and Kiran Nalaar",""));
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("Puppeteer Clique",""));
cubeCards.add(new DraftCube.CardIdentity("Purphoros, God of the Forge",""));
cubeCards.add(new DraftCube.CardIdentity("Pyroclasm",""));
cubeCards.add(new DraftCube.CardIdentity("Qasali Pridemage",""));
cubeCards.add(new DraftCube.CardIdentity("Quarantine Field",""));
cubeCards.add(new DraftCube.CardIdentity("Raging Ravine",""));
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("Reckless Bushwhacker",""));
cubeCards.add(new DraftCube.CardIdentity("Recurring Nightmare",""));
cubeCards.add(new DraftCube.CardIdentity("Reflecting Pool",""));
cubeCards.add(new DraftCube.CardIdentity("Reflector Mage",""));
cubeCards.add(new DraftCube.CardIdentity("Regrowth",""));
cubeCards.add(new DraftCube.CardIdentity("Relentless Dead",""));
cubeCards.add(new DraftCube.CardIdentity("Relic of Progenitus",""));
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("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("Scroll Rack",""));
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("See the Unwritten",""));
cubeCards.add(new DraftCube.CardIdentity("Seeker of the Way",""));
cubeCards.add(new DraftCube.CardIdentity("Selfless Spirit",""));
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("Shaman of Forgotten Ways",""));
cubeCards.add(new DraftCube.CardIdentity("Shambling Vent",""));
cubeCards.add(new DraftCube.CardIdentity("Shardless Agent",""));
cubeCards.add(new DraftCube.CardIdentity("Shelldock Isle",""));
cubeCards.add(new DraftCube.CardIdentity("Sheoldred, Whispering One",""));
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("Skinrender",""));
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("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("Spell Queller",""));
cubeCards.add(new DraftCube.CardIdentity("Sphinx's Revelation",""));
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("Stirring Wildwood",""));
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("Stormchaser Mage",""));
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("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 Advocate",""));
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("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("Thalia, Heretic Cathar",""));
cubeCards.add(new DraftCube.CardIdentity("Thassa, God of the Sea",""));
cubeCards.add(new DraftCube.CardIdentity("Thing in the Ice",""));
cubeCards.add(new DraftCube.CardIdentity("Thoughtseize",""));
cubeCards.add(new DraftCube.CardIdentity("Thragtusk",""));
cubeCards.add(new DraftCube.CardIdentity("Threads of Disloyalty",""));
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("Tireless Tracker",""));
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 Ceaseless Hunger",""));
cubeCards.add(new DraftCube.CardIdentity("Ultimate Price",""));
cubeCards.add(new DraftCube.CardIdentity("Unburial Rites",""));
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("Vendilion Clique",""));
cubeCards.add(new DraftCube.CardIdentity("Venser, Shaper Savant",""));
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("Vorinclex, Voice of Hunger",""));
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("Wandering Fumarole",""));
cubeCards.add(new DraftCube.CardIdentity("Wasteland",""));
cubeCards.add(new DraftCube.CardIdentity("Watery Grave",""));
cubeCards.add(new DraftCube.CardIdentity("Westvale Abbey",""));
cubeCards.add(new DraftCube.CardIdentity("Wharf Infiltrator",""));
cubeCards.add(new DraftCube.CardIdentity("Whip of Erebos",""));
cubeCards.add(new DraftCube.CardIdentity("Whirler Rogue",""));
cubeCards.add(new DraftCube.CardIdentity("Whisperwood Elemental",""));
cubeCards.add(new DraftCube.CardIdentity("Windbrisk Heights",""));
cubeCards.add(new DraftCube.CardIdentity("Windswept Heath",""));
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 Cemetery",""));
cubeCards.add(new DraftCube.CardIdentity("Wrath of God",""));
cubeCards.add(new DraftCube.CardIdentity("Wretched Confluence",""));
cubeCards.add(new DraftCube.CardIdentity("Wurmcoil Engine",""));
cubeCards.add(new DraftCube.CardIdentity("Xenagos, the Reveler",""));
cubeCards.add(new DraftCube.CardIdentity("Yavimaya Elder",""));
cubeCards.add(new DraftCube.CardIdentity("Yosei, the Morning Star",""));
cubeCards.add(new DraftCube.CardIdentity("Young Pyromancer",""));
cubeCards.add(new DraftCube.CardIdentity("Zealous Conscripts",""));
}
}

View file

@ -31,7 +31,9 @@ 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;
/**
@ -58,6 +60,23 @@ public class AetherRevolt extends ExpansionSet {
this.numBoosterUncommon = 3;
this.numBoosterRare = 1;
this.ratioBoosterMythic = 8;
/* The Masterpiece Series will exist at a rarity higher than mythic rare. For example, in Kaladesh, you will open a Kaladesh Inventions card roughly
1 out of every 144 boosters. (Technically, the Kaladesh booster pack says the ratio is 1:2,160 cards.) This is slightly more often than opening a
premium mythic rare. These ratios may change for future sets. */
this.ratioBoosterSpecialLand = 144;
this.parentSet = Kaladesh.getInstance();
}
@Override
public List<CardInfo> getSpecialLand() {
if (savedSpecialLand.isEmpty()) {
CardCriteria criteria = new CardCriteria();
criteria.setCodes("MPS");
criteria.minCardNumber(31);
criteria.maxCardNumber(54);
savedSpecialLand.addAll(CardRepository.instance.findCards(criteria));
}
return new ArrayList<>(savedSpecialLand);
}
}

View file

@ -62,10 +62,9 @@ public class BattleForZendikar extends ExpansionSet {
this.ratioBoosterMythic = 8;
this.numBoosterSpecial = 0;
// Zendikar Expeditions 1-25
// 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.ratioBoosterSpecialLand = 48;
// Masterpiece Series 1-30
// Approximately as rare as opening a foil mythic = 144 packs
this.ratioBoosterSpecialLand = 144;
}
@Override

View file

@ -59,7 +59,7 @@ public class FateReforged extends ExpansionSet {
this.parentSet = KhansOfTarkir.getInstance();
this.hasBasicLands = false;
this.hasBoosters = true;
this.numBoosterSpecial = 1; // a speical land slot that can contain basic lands (language dependent) the common lands or the rare fetch lands from KTK
this.numBoosterSpecial = 1; // a special land slot that can contain basic lands (language dependent) the common lands or the rare fetch lands from KTK
this.numBoosterLands = 0;
this.numBoosterCommon = 10;
this.numBoosterUncommon = 3;
@ -75,6 +75,7 @@ public class FateReforged extends ExpansionSet {
List<CardInfo> savedCardsInfos = savedCards.get(rarity);
if (savedCardsInfos == null) {
CardCriteria criteria = new CardCriteria();
criteria.rarities(Rarity.COMMON);
criteria.setCodes(this.code).notTypes(CardType.LAND);
if (maxCardNumberInBooster != Integer.MAX_VALUE) {
criteria.maxCardNumber(maxCardNumberInBooster);

View file

@ -31,7 +31,9 @@ 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;
/**
@ -58,11 +60,29 @@ public class Kaladesh extends ExpansionSet {
this.numBoosterUncommon = 3;
this.numBoosterRare = 1;
this.ratioBoosterMythic = 8;
this.numBoosterSpecial = 0;
/* There are additional cards, numbered 265270, that don't appear in Kaladesh
booster packs. These are new cards that are exclusive in the Planeswalker
Decks supplemental product, which are replacing Intro Packs.
These additional cards have a Kaladesh expansion symbol and are legal in all
formats in which Kaladesh is legal. */
this.maxCardNumberInBooster = 264;
/* The Masterpiece Series will exist at a rarity higher than mythic rare. For example, in Kaladesh, you will open a Kaladesh Inventions card roughly
1 out of every 144 boosters. (Technically, the Kaladesh booster pack says the ratio is 1:2,160 cards.) This is slightly more often than opening a
premium mythic rare. These ratios may change for future sets. */
this.ratioBoosterSpecialLand = 144;
}
@Override
public List<CardInfo> getSpecialLand() {
if (savedSpecialLand.isEmpty()) {
CardCriteria criteria = new CardCriteria();
criteria.setCodes("MPS");
criteria.minCardNumber(1);
criteria.maxCardNumber(30);
savedSpecialLand.addAll(CardRepository.instance.findCards(criteria));
}
return new ArrayList<>(savedSpecialLand);
}
}

View file

@ -0,0 +1,51 @@
/*
* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are
* permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* The views and conclusions contained in the software and documentation are those of the
* authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com.
*/
package mage.sets;
import java.util.GregorianCalendar;
import mage.cards.ExpansionSet;
import mage.constants.SetType;
/**
*
* @author fireshoes
*/
public class MasterpieceSeries extends ExpansionSet {
private static final MasterpieceSeries fINSTANCE = new MasterpieceSeries();
public static MasterpieceSeries getInstance() {
return fINSTANCE;
}
private MasterpieceSeries() {
super("Masterpiece Series", "MPS", "mage.sets.masterpieceseries", new GregorianCalendar(2016, 9, 30).getTime(), SetType.PROMOTIONAL);
this.hasBoosters = false;
this.hasBasicLands = false;
}
}

View file

@ -0,0 +1,78 @@
/*
* 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.conspiracytakethecrown;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.condition.common.MonstrousCondition;
import mage.abilities.decorator.ConditionalContinuousEffect;
import mage.abilities.effects.common.continuous.GainAbilitySourceEffect;
import mage.abilities.keyword.MonstrosityAbility;
import mage.abilities.keyword.TrampleAbility;
import mage.cards.CardImpl;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.Rarity;
import mage.constants.Zone;
/**
*
* @author LevelX2
*/
public class DomesticatedHydra extends CardImpl {
public DomesticatedHydra(UUID ownerId) {
super(ownerId, 63, "Domesticated Hydra", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{2}{G}{G}");
this.expansionSetCode = "CN2";
this.subtype.add("Hydra");
this.power = new MageInt(3);
this.toughness = new MageInt(3);
// {X}{G}{G}{G}: Monstrosity X.
this.addAbility(new MonstrosityAbility("{X}{G}{G}{G}", Integer.MAX_VALUE));
// As long as Domesticated Hydra is monstrous, it has trample.
Ability ability = new SimpleStaticAbility(
Zone.BATTLEFIELD,
new ConditionalContinuousEffect(new GainAbilitySourceEffect(TrampleAbility.getInstance(), Duration.WhileOnBattlefield),
MonstrousCondition.getInstance(),
"As long as {this} is monstrous, it has trample"));
this.addAbility(ability);
}
public DomesticatedHydra(final DomesticatedHydra card) {
super(card);
}
@Override
public DomesticatedHydra copy() {
return new DomesticatedHydra(this);
}
}

View file

@ -0,0 +1,158 @@
/*
* 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.conspiracytakethecrown;
import java.util.HashSet;
import java.util.UUID;
import mage.MageInt;
import mage.MageObject;
import mage.abilities.Ability;
import mage.abilities.common.AsEntersBattlefieldAbility;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.ContinuousRuleModifyingEffectImpl;
import mage.abilities.effects.OneShotEffect;
import mage.cards.Card;
import mage.cards.CardImpl;
import mage.choices.Choice;
import mage.choices.ChoiceImpl;
import mage.constants.*;
import mage.game.Game;
import mage.game.events.GameEvent;
import mage.game.stack.Spell;
import mage.players.Player;
import org.apache.log4j.Logger;
/**
*
* @author maxlebedev
*/
public class SanctumPrelate extends CardImpl {
public SanctumPrelate(UUID ownerId) {
super(ownerId, 23, "Sanctum Prelate", Rarity.MYTHIC, new CardType[]{CardType.CREATURE}, "{1}{W}{W}");
this.expansionSetCode = "CN2";
this.subtype.add("Human");
this.subtype.add("Cleric");
this.power = new MageInt(2);
this.toughness = new MageInt(2);
// As Sanctum Prelate enters the battlefield, choose a number.
this.addAbility(new AsEntersBattlefieldAbility(new ChooseNumberEffect()));
// Noncreature spells with converted mana cost equal to the chosen number can't be cast.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SanctumPrelateReplacementEffect()));
}
public SanctumPrelate(final SanctumPrelate card) {
super(card);
}
@Override
public SanctumPrelate copy() {
return new SanctumPrelate(this);
}
}
class ChooseNumberEffect extends OneShotEffect {
public ChooseNumberEffect() {
super(Outcome.Detriment);
staticText = setText();
}
public ChooseNumberEffect(final ChooseNumberEffect effect) {
super(effect);
}
@Override
public boolean apply(Game game, Ability source) {
Player controller = game.getPlayer(source.getControllerId());
int numberChoice = controller.announceXMana(0, Integer.MAX_VALUE, "Choose a number. Noncreature spells with the chosen converted mana cost can't be cast", game, source);
game.getState().setValue(source.getSourceId().toString(), numberChoice);
return true;
}
@Override
public ChooseNumberEffect copy() {
return new ChooseNumberEffect(this);
}
private String setText() {
return "Choose a number. Noncreature spells with the chosen converted mana cost can't be cast";
}
}
class SanctumPrelateReplacementEffect extends ContinuousRuleModifyingEffectImpl {
Integer choiceValue;
public SanctumPrelateReplacementEffect() {
super(Duration.WhileOnBattlefield, Outcome.Detriment);
staticText = "Noncreature spells with the chosen converted mana cost can't be cast";
}
public SanctumPrelateReplacementEffect(final SanctumPrelateReplacementEffect effect) {
super(effect);
}
@Override
public boolean apply(Game game, Ability source) {
return true;
}
@Override
public SanctumPrelateReplacementEffect copy() {
return new SanctumPrelateReplacementEffect(this);
}
@Override
public String getInfoMessage(Ability source, GameEvent event, Game game) {
MageObject mageObject = game.getObject(source.getSourceId());
if (mageObject != null) {
return "You can't cast a noncreature card with that converted mana cost (" + mageObject.getIdName() + " in play).";
}
return null;
}
@Override
public boolean checksEventType(GameEvent event, Game game) {
return event.getType() == GameEvent.EventType.CAST_SPELL_LATE;
}
@Override
public boolean applies(GameEvent event, Ability source, Game game) {
choiceValue = (Integer) game.getState().getValue(source.getSourceId().toString());
Spell spell = game.getStack().getSpell(event.getTargetId());
if (spell != null && !spell.getCardType().contains(CardType.CREATURE)){
return spell.getConvertedManaCost() == choiceValue;
}
return false;
}
}

View file

@ -0,0 +1,79 @@
/*
* 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.conspiracytakethecrown;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.condition.common.MonstrousCondition;
import mage.abilities.decorator.ConditionalContinuousEffect;
import mage.abilities.effects.common.continuous.GainAbilitySourceEffect;
import mage.abilities.keyword.MenaceAbility;
import mage.abilities.keyword.MonstrosityAbility;
import mage.cards.CardImpl;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.Rarity;
import mage.constants.Zone;
/**
*
* @author LevelX2
*/
public class SinuousVermin extends CardImpl {
public SinuousVermin(UUID ownerId) {
super(ownerId, 46, "Sinuous Vermin", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{1}{B}");
this.expansionSetCode = "CN2";
this.subtype.add("Rat");
this.subtype.add("Horror");
this.power = new MageInt(2);
this.toughness = new MageInt(2);
// {3}{B}{B}: Monstrosity 3.
this.addAbility(new MonstrosityAbility("{3}{B}{B}", 3));
// As long as Sinuous Vermin is monstrous, it has menace.
Ability ability = new SimpleStaticAbility(
Zone.BATTLEFIELD,
new ConditionalContinuousEffect(new GainAbilitySourceEffect(new MenaceAbility(), Duration.WhileOnBattlefield),
MonstrousCondition.getInstance(),
"As long as {this} is monstrous, it has menace"));
this.addAbility(ability);
}
public SinuousVermin(final SinuousVermin card) {
super(card);
}
@Override
public SinuousVermin copy() {
return new SinuousVermin(this);
}
}

View file

@ -0,0 +1,78 @@
/*
* 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.conspiracytakethecrown;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.condition.common.MonstrousCondition;
import mage.abilities.decorator.ConditionalContinuousEffect;
import mage.abilities.effects.common.continuous.GainAbilitySourceEffect;
import mage.abilities.keyword.HexproofAbility;
import mage.abilities.keyword.MonstrosityAbility;
import mage.cards.CardImpl;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.Rarity;
import mage.constants.Zone;
/**
*
* @author LevelX2
*/
public class SkitteringCrustacean extends CardImpl {
public SkitteringCrustacean(UUID ownerId) {
super(ownerId, 36, "Skittering Crustacean", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{2}{U}");
this.expansionSetCode = "CN2";
this.subtype.add("Crab");
this.power = new MageInt(2);
this.toughness = new MageInt(3);
// {6}{U}: Monstrosity 4.
this.addAbility(new MonstrosityAbility("{6}{U}", 4));
// As long as Skittering Crustacean is monstrous, it has hexproof.
Ability ability = new SimpleStaticAbility(
Zone.BATTLEFIELD,
new ConditionalContinuousEffect(new GainAbilitySourceEffect(HexproofAbility.getInstance(), Duration.WhileOnBattlefield),
MonstrousCondition.getInstance(),
"As long as {this} is monstrous, it has hexproof"));
this.addAbility(ability);
}
public SkitteringCrustacean(final SkitteringCrustacean card) {
super(card);
}
@Override
public SkitteringCrustacean copy() {
return new SkitteringCrustacean(this);
}
}

View file

@ -0,0 +1,68 @@
/*
* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are
* permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* The views and conclusions contained in the software and documentation are those of the
* authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com.
*/
package mage.sets.conspiracytakethecrown;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.common.BecomesMonstrousSourceTriggeredAbility;
import mage.abilities.effects.PutTokenOntoBattlefieldCopySourceEffect;
import mage.abilities.keyword.MonstrosityAbility;
import mage.cards.CardImpl;
import mage.constants.CardType;
import mage.constants.Rarity;
/**
*
* @author LevelX2
*/
public class SplittingSlime extends CardImpl {
public SplittingSlime(UUID ownerId) {
super(ownerId, 72, "Splitting Slime", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{3}{G}{G}");
this.expansionSetCode = "CN2";
this.subtype.add("Ooze");
this.power = new MageInt(3);
this.toughness = new MageInt(3);
// {4}{G}{G}: Monstrosity 3.
this.addAbility(new MonstrosityAbility("{4}{G}{G}", 3));
// When Splitting Slime becomes monstrous, put a token onto the battlefield that's a copy of Splitting Slime.
this.addAbility(new BecomesMonstrousSourceTriggeredAbility(new PutTokenOntoBattlefieldCopySourceEffect()));
}
public SplittingSlime(final SplittingSlime card) {
super(card);
}
@Override
public SplittingSlime copy() {
return new SplittingSlime(this);
}
}

View file

@ -0,0 +1,71 @@
/*
* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are
* permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* The views and conclusions contained in the software and documentation are those of the
* authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com.
*/
package mage.sets.kaladesh;
import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
import mage.abilities.costs.common.PayEnergyCost;
import mage.abilities.effects.common.counter.GetEnergyCountersControllerEffect;
import mage.abilities.mana.AnyColorManaAbility;
import mage.abilities.mana.ColorlessManaAbility;
import mage.cards.CardImpl;
import mage.constants.CardType;
import mage.constants.Rarity;
/**
*
* @author emerald000
*/
public class AetherHub extends CardImpl {
public AetherHub(UUID ownerId) {
super(ownerId, 242, "Aether Hub", Rarity.UNCOMMON, new CardType[]{CardType.LAND}, "");
this.expansionSetCode = "KLD";
// When Aether Hub enters the battlefield, you get {E}.
this.addAbility(new EntersBattlefieldTriggeredAbility(new GetEnergyCountersControllerEffect(1)));
// {T}: Add {C} to your mana pool.
this.addAbility(new ColorlessManaAbility());
// {T}, Pay {E}: Add one mana of any color to your mana pool.
Ability ability = new AnyColorManaAbility();
ability.addCost(new PayEnergyCost(1));
this.addAbility(ability);
}
public AetherHub(final AetherHub card) {
super(card);
}
@Override
public AetherHub copy() {
return new AetherHub(this);
}
}

View file

@ -1,121 +1,121 @@
/*
* 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.kaladesh;
import java.util.Set;
import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.common.PutIntoGraveFromBattlefieldAllTriggeredAbility;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.common.PayEnergyCost;
import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.counter.GetEnergyCountersControllerEffect;
import mage.cards.Card;
import mage.cards.CardImpl;
import mage.cards.Cards;
import mage.cards.CardsImpl;
import mage.constants.CardType;
import mage.constants.Outcome;
import mage.constants.Rarity;
import mage.constants.Zone;
import mage.filter.FilterPermanent;
import mage.filter.common.FilterNonlandCard;
import mage.game.Game;
import mage.players.Player;
import mage.target.TargetCard;
import mage.target.common.TargetCardInLibrary;
/**
*
* @author emerald000
*/
public class AetherworksMarvel extends CardImpl {
public AetherworksMarvel(UUID ownerId) {
super(ownerId, 193, "Aetherworks Marvel", Rarity.MYTHIC, new CardType[]{CardType.ARTIFACT}, "{4}");
this.expansionSetCode = "KLD";
this.supertype.add("Legendary");
// Whenever a permanent you control is put into a graveyard, you get {E}.
this.addAbility(new PutIntoGraveFromBattlefieldAllTriggeredAbility(new GetEnergyCountersControllerEffect(1), false, new FilterPermanent("a permanent"), false));
// {T}, Pay {E}{E}{E}{E}{E}{E}: Look at the top six cards of your library. You may cast a card from among them without paying its mana cost. Put the rest on the bottom of your library in a random order.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new AetherworksMarvelEffect(), new TapSourceCost());
ability.addCost(new PayEnergyCost(6));
this.addAbility(ability);
}
public AetherworksMarvel(final AetherworksMarvel card) {
super(card);
}
@Override
public AetherworksMarvel copy() {
return new AetherworksMarvel(this);
}
}
class AetherworksMarvelEffect extends OneShotEffect {
AetherworksMarvelEffect() {
super(Outcome.PlayForFree);
this.staticText = "Look at the top six cards of your library. You may cast a card from among them without paying its mana cost. Put the rest on the bottom of your library in a random order";
}
AetherworksMarvelEffect(final AetherworksMarvelEffect effect) {
super(effect);
}
@Override
public AetherworksMarvelEffect copy() {
return new AetherworksMarvelEffect(this);
}
@Override
public boolean apply(Game game, Ability source) {
Player controller = game.getPlayer(source.getControllerId());
if (controller != null) {
Set<Card> cardsSet = controller.getLibrary().getTopCards(game, 6);
Cards cards = new CardsImpl();
for (Card card : cardsSet) {
cards.add(card);
}
TargetCard target = new TargetCardInLibrary(0, 1, new FilterNonlandCard("card to cast without paying its mana cost"));
if (controller.choose(Outcome.PlayForFree, cards, target, game)) {
Card card = controller.getLibrary().getCard(target.getFirstTarget(), game);
if (card != null && controller.cast(card.getSpellAbility(), game, true)) {
cards.remove(card);
}
}
controller.putCardsOnBottomOfLibrary(cards, game, source, false);
return true;
}
return false;
}
}
/*
* 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.kaladesh;
import java.util.Set;
import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.common.PutIntoGraveFromBattlefieldAllTriggeredAbility;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.common.PayEnergyCost;
import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.counter.GetEnergyCountersControllerEffect;
import mage.cards.Card;
import mage.cards.CardImpl;
import mage.cards.Cards;
import mage.cards.CardsImpl;
import mage.constants.CardType;
import mage.constants.Outcome;
import mage.constants.Rarity;
import mage.constants.Zone;
import mage.filter.common.FilterControlledPermanent;
import mage.filter.common.FilterNonlandCard;
import mage.game.Game;
import mage.players.Player;
import mage.target.TargetCard;
import mage.target.common.TargetCardInLibrary;
/**
*
* @author emerald000
*/
public class AetherworksMarvel extends CardImpl {
public AetherworksMarvel(UUID ownerId) {
super(ownerId, 193, "Aetherworks Marvel", Rarity.MYTHIC, new CardType[]{CardType.ARTIFACT}, "{4}");
this.expansionSetCode = "KLD";
this.supertype.add("Legendary");
// Whenever a permanent you control is put into a graveyard, you get {E}.
this.addAbility(new PutIntoGraveFromBattlefieldAllTriggeredAbility(new GetEnergyCountersControllerEffect(1), false, new FilterControlledPermanent("a permanent you control"), false));
// {T}, Pay {E}{E}{E}{E}{E}{E}: Look at the top six cards of your library. You may cast a card from among them without paying its mana cost. Put the rest on the bottom of your library in a random order.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new AetherworksMarvelEffect(), new TapSourceCost());
ability.addCost(new PayEnergyCost(6));
this.addAbility(ability);
}
public AetherworksMarvel(final AetherworksMarvel card) {
super(card);
}
@Override
public AetherworksMarvel copy() {
return new AetherworksMarvel(this);
}
}
class AetherworksMarvelEffect extends OneShotEffect {
AetherworksMarvelEffect() {
super(Outcome.PlayForFree);
this.staticText = "Look at the top six cards of your library. You may cast a card from among them without paying its mana cost. Put the rest on the bottom of your library in a random order";
}
AetherworksMarvelEffect(final AetherworksMarvelEffect effect) {
super(effect);
}
@Override
public AetherworksMarvelEffect copy() {
return new AetherworksMarvelEffect(this);
}
@Override
public boolean apply(Game game, Ability source) {
Player controller = game.getPlayer(source.getControllerId());
if (controller != null) {
Set<Card> cardsSet = controller.getLibrary().getTopCards(game, 6);
Cards cards = new CardsImpl();
for (Card card : cardsSet) {
cards.add(card);
}
TargetCard target = new TargetCardInLibrary(0, 1, new FilterNonlandCard("card to cast without paying its mana cost"));
if (controller.choose(Outcome.PlayForFree, cards, target, game)) {
Card card = controller.getLibrary().getCard(target.getFirstTarget(), game);
if (card != null && controller.cast(card.getSpellAbility(), game, true)) {
cards.remove(card);
}
}
controller.putCardsOnBottomOfLibrary(cards, game, source, false);
return true;
}
return false;
}
}

View file

@ -0,0 +1,69 @@
/*
* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are
* permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* The views and conclusions contained in the software and documentation are those of the
* authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com.
*/
package mage.sets.kaladesh;
import java.util.UUID;
import mage.abilities.effects.Effect;
import mage.abilities.effects.common.continuous.BoostTargetEffect;
import mage.abilities.effects.common.continuous.GainAbilityTargetEffect;
import mage.abilities.keyword.HexproofAbility;
import mage.cards.CardImpl;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.Rarity;
import mage.target.common.TargetControlledCreaturePermanent;
/**
*
* @author fireshoes
*/
public class BlossomingDefense extends CardImpl {
public BlossomingDefense(UUID ownerId) {
super(ownerId, 146, "Blossoming Defense", Rarity.UNCOMMON, new CardType[]{CardType.INSTANT}, "{G}");
this.expansionSetCode = "KLD";
// Target creature you control gets +2/+2 and gains hexproof until end of turn.
Effect effect = new BoostTargetEffect(2, 2, Duration.EndOfTurn);
effect.setText("Target creature you control gets +2/+2");
getSpellAbility().addEffect(effect);
effect = new GainAbilityTargetEffect(HexproofAbility.getInstance(), Duration.EndOfTurn);
effect.setText("and gains hexproof until end of turn");
getSpellAbility().addEffect(effect);
getSpellAbility().addTarget(new TargetControlledCreaturePermanent());
}
public BlossomingDefense(final BlossomingDefense card) {
super(card);
}
@Override
public BlossomingDefense copy() {
return new BlossomingDefense(this);
}
}

View file

@ -82,7 +82,7 @@ public class ChandraTorchOfDefiance extends CardImpl {
this.addAbility(ability);
// -7: You get an emblem with "Whenever you cast a spell, this emblem deals 5 damage to target creature or player."
this.addAbility(new LoyaltyAbility(new GetEmblemEffect(new ChandraTorchOfDefianceEmblem()), -6));
this.addAbility(new LoyaltyAbility(new GetEmblemEffect(new ChandraTorchOfDefianceEmblem()), -7));
}
public ChandraTorchOfDefiance(final ChandraTorchOfDefiance card) {
@ -121,10 +121,10 @@ class ChandraTorchOfDefianceEffect extends OneShotEffect {
if (card != null) {
controller.moveCardToExileWithInfo(card, source.getSourceId(), sourceObject.getIdName(), source.getSourceId(), game, Zone.LIBRARY, true);
if (controller.chooseUse(Outcome.Benefit, "Cast the card? (You still pay the costs)", source, game) && !card.getCardType().contains(CardType.LAND)) {
controller.cast(card.getSpellAbility(), game, false);
} else {
new DamagePlayersEffect(Outcome.Damage, new StaticValue(2), TargetController.OPPONENT).apply(game, source);
}
controller.cast(card.getSpellAbility(), game, false);
} else {
new DamagePlayersEffect(Outcome.Damage, new StaticValue(2), TargetController.OPPONENT).apply(game, source);
}
}
return true;
}

View file

@ -0,0 +1,75 @@
/*
* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are
* permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* The views and conclusions contained in the software and documentation are those of the
* authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com.
*/
package mage.sets.kaladesh;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
import mage.abilities.effects.Effect;
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
import mage.abilities.effects.common.GainLifeEffect;
import mage.abilities.keyword.FlyingAbility;
import mage.cards.CardImpl;
import mage.constants.CardType;
import mage.constants.Rarity;
/**
*
* @author emerald000
*/
public class Cloudblazer extends CardImpl {
public Cloudblazer(UUID ownerId) {
super(ownerId, 176, "Cloudblazer", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{3}{W}{U}");
this.expansionSetCode = "KLD";
this.subtype.add("Human");
this.subtype.add("Scout");
this.power = new MageInt(2);
this.toughness = new MageInt(2);
// Flying
this.addAbility(FlyingAbility.getInstance());
// When Cloudblazer enters the battlefield, you gain 2 life and draw two cards.
Ability ability = new EntersBattlefieldTriggeredAbility(new GainLifeEffect(2));
Effect effect = new DrawCardSourceControllerEffect(2);
effect.setText("and draw two cards");
ability.addEffect(effect);
this.addAbility(ability);
}
public Cloudblazer(final Cloudblazer card) {
super(card);
}
@Override
public Cloudblazer copy() {
return new Cloudblazer(this);
}
}

View file

@ -0,0 +1,70 @@
/*
* 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.kaladesh;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.common.EntersBattlefieldAllTriggeredAbility;
import mage.abilities.effects.keyword.ScryEffect;
import mage.abilities.keyword.LifelinkAbility;
import mage.cards.CardImpl;
import mage.constants.CardType;
import mage.constants.Rarity;
import mage.constants.Zone;
import mage.filter.common.FilterControlledArtifactPermanent;
/**
*
* @author fireshoes
*/
public class ContrabandKingpin extends CardImpl {
public ContrabandKingpin(UUID ownerId) {
super(ownerId, 177, "Contraband Kingpin", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{U}{B}");
this.expansionSetCode = "KLD";
this.subtype.add("Aetherborn");
this.subtype.add("Rogue");
this.power = new MageInt(1);
this.toughness = new MageInt(4);
// Lifelink
this.addAbility(LifelinkAbility.getInstance());
// Whenever an artifact enters the battlefield under your control, scry 1.
this.addAbility(new EntersBattlefieldAllTriggeredAbility(Zone.BATTLEFIELD, new ScryEffect(1), new FilterControlledArtifactPermanent(), false, null, true));
}
public ContrabandKingpin(final ContrabandKingpin card) {
super(card);
}
@Override
public ContrabandKingpin copy() {
return new ContrabandKingpin(this);
}
}

View file

@ -0,0 +1,66 @@
/*
* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are
* permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* The views and conclusions contained in the software and documentation are those of the
* authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com.
*/
package mage.sets.kaladesh;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.keyword.CrewAbility;
import mage.abilities.mana.AnyColorManaAbility;
import mage.cards.CardImpl;
import mage.constants.CardType;
import mage.constants.Rarity;
/**
*
* @author emerald000
*/
public class CultivatorsCaravan extends CardImpl {
public CultivatorsCaravan(UUID ownerId) {
super(ownerId, 203, "Cultivator's Caravan", Rarity.RARE, new CardType[]{CardType.ARTIFACT}, "{3}");
this.expansionSetCode = "KLD";
this.subtype.add("Vehicle");
this.power = new MageInt(5);
this.toughness = new MageInt(5);
// {T}: Add one mana of any color to your mana pool.
this.addAbility(new AnyColorManaAbility());
// Crew 3
this.addAbility(new CrewAbility(3));
}
public CultivatorsCaravan(final CultivatorsCaravan card) {
super(card);
}
@Override
public CultivatorsCaravan copy() {
return new CultivatorsCaravan(this);
}
}

View file

@ -0,0 +1,128 @@
/*
* 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.kaladesh;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.BecomesTappedSourceTriggeredAbility;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.costs.mana.GenericManaCost;
import mage.abilities.costs.mana.ManaCost;
import mage.abilities.costs.mana.ManaCosts;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.Effect;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.RevealLibraryPutIntoHandEffect;
import mage.abilities.effects.common.continuous.BoostControlledEffect;
import mage.cards.CardImpl;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.Outcome;
import mage.constants.Rarity;
import mage.constants.Zone;
import mage.filter.FilterCard;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.Predicates;
import mage.filter.predicate.mageobject.SubtypePredicate;
import mage.game.Game;
import mage.players.Player;
/**
*
* @author emerald000
*/
public class DepalaPilotExemplar extends CardImpl {
public DepalaPilotExemplar(UUID ownerId) {
super(ownerId, 178, "Depala, Pilot Exemplar", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{1}{R}{W}");
this.expansionSetCode = "KLD";
this.supertype.add("Legendary");
this.subtype.add("Dwarf");
this.subtype.add("Pilot");
this.power = new MageInt(3);
this.toughness = new MageInt(3);
// Other Dwarves you control get +1/+1.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostControlledEffect(1, 1, Duration.WhileOnBattlefield, new FilterCreaturePermanent("Dwarf", "Dwarves"), true)));
// Each Vehicle you control gets +1/+1 as long as it's a creature.
Effect effect = new BoostControlledEffect(1, 1, Duration.WhileOnBattlefield, new FilterCreaturePermanent("Vehicle", "Vehicle"));
effect.setText("Each Vehicle you control gets +1/+1 as long as it's a creature");
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, effect));
// Whenever Depala, Pilot Exemplar becomes tapped, you may pay {X}. If you do, reveal the top X cards of your library, put all Dwarf and Vehicle cards from among them into your hand, then put the rest on the bottom of your library in a random order.
this.addAbility(new BecomesTappedSourceTriggeredAbility(new DepalaPilotExemplarEffect(), true));
}
public DepalaPilotExemplar(final DepalaPilotExemplar card) {
super(card);
}
@Override
public DepalaPilotExemplar copy() {
return new DepalaPilotExemplar(this);
}
}
class DepalaPilotExemplarEffect extends OneShotEffect {
private static final FilterCard filter = new FilterCard("Dwarf and Vehicle cards");
static {
filter.add(Predicates.or(new SubtypePredicate("Dwarf"), new SubtypePredicate("Vehicle")));
}
DepalaPilotExemplarEffect() {
super(Outcome.DrawCard);
this.staticText = "pay {X}. If you do, reveal the top X cards of your library, put all Dwarf and Vehicle cards from among them into your hand, then put the rest on the bottom of your library in a random order";
}
DepalaPilotExemplarEffect(final DepalaPilotExemplarEffect effect) {
super(effect);
}
@Override
public DepalaPilotExemplarEffect copy() {
return new DepalaPilotExemplarEffect(this);
}
@Override
public boolean apply(Game game, Ability source) {
Player controller = game.getPlayer(source.getControllerId());
if (controller != null) {
ManaCosts<ManaCost> cost = new ManaCostsImpl<>("{X}");
int xValue = controller.announceXMana(0, Integer.MAX_VALUE, "Choose the amount of mana to pay", game, source);
cost.add(new GenericManaCost(xValue));
if (cost.pay(source, game, source.getSourceId(), source.getControllerId(), false) && xValue > 0) {
new RevealLibraryPutIntoHandEffect(xValue, filter, false).apply(game, source);
}
return true;
}
return false;
}
}

View file

@ -0,0 +1,73 @@
/*
* 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.kaladesh;
import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.common.SpellCastControllerTriggeredAbility;
import mage.abilities.costs.common.PayEnergyCost;
import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.effects.common.DamageTargetEffect;
import mage.abilities.effects.common.counter.GetEnergyCountersControllerEffect;
import mage.cards.CardImpl;
import mage.constants.CardType;
import mage.constants.Rarity;
import mage.constants.Zone;
import mage.filter.common.FilterInstantOrSorcerySpell;
import mage.target.common.TargetCreatureOrPlayer;
/**
*
* @author emerald000
*/
public class DynavoltTower extends CardImpl {
public DynavoltTower(UUID ownerId) {
super(ownerId, 208, "Dynavolt Tower", Rarity.RARE, new CardType[]{CardType.ARTIFACT}, "{3}");
this.expansionSetCode = "KLD";
// Whenever you cast an instant or sorcery spell, you get {E}{E}.
this.addAbility(new SpellCastControllerTriggeredAbility(new GetEnergyCountersControllerEffect(2), new FilterInstantOrSorcerySpell(), false));
// {T}, Pay {E}{E}{E}{E}{E}: Dynavolt Tower deals 3 damage to target creature or player.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(3), new TapSourceCost());
ability.addCost(new PayEnergyCost(5));
ability.addTarget(new TargetCreatureOrPlayer());
this.addAbility(ability);
}
public DynavoltTower(final DynavoltTower card) {
super(card);
}
@Override
public DynavoltTower copy() {
return new DynavoltTower(this);
}
}

View file

@ -0,0 +1,51 @@
/*
* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are
* permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* The views and conclusions contained in the software and documentation are those of the
* authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com.
*/
package mage.sets.kaladesh;
import java.util.UUID;
/**
*
* @author fireshoes
*/
public class Forest1 extends mage.cards.basiclands.Forest {
public Forest1(UUID ownerId) {
super(ownerId, 261);
this.expansionSetCode = "KLD";
}
public Forest1(final Forest1 card) {
super(card);
}
@Override
public Forest1 copy() {
return new Forest1(this);
}
}

View file

@ -0,0 +1,51 @@
/*
* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are
* permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* The views and conclusions contained in the software and documentation are those of the
* authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com.
*/
package mage.sets.kaladesh;
import java.util.UUID;
/**
*
* @author fireshoes
*/
public class Forest2 extends mage.cards.basiclands.Forest {
public Forest2(UUID ownerId) {
super(ownerId, 262);
this.expansionSetCode = "KLD";
}
public Forest2(final Forest2 card) {
super(card);
}
@Override
public Forest2 copy() {
return new Forest2(this);
}
}

View file

@ -0,0 +1,51 @@
/*
* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are
* permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* The views and conclusions contained in the software and documentation are those of the
* authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com.
*/
package mage.sets.kaladesh;
import java.util.UUID;
/**
*
* @author fireshoes
*/
public class Forest3 extends mage.cards.basiclands.Forest {
public Forest3(UUID ownerId) {
super(ownerId, 263);
this.expansionSetCode = "KLD";
}
public Forest3(final Forest3 card) {
super(card);
}
@Override
public Forest3 copy() {
return new Forest3(this);
}
}

View file

@ -0,0 +1,69 @@
/*
* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are
* permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* The views and conclusions contained in the software and documentation are those of the
* authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com.
*/
package mage.sets.kaladesh;
import java.util.UUID;
import mage.abilities.effects.common.DestroyTargetEffect;
import mage.cards.CardImpl;
import mage.constants.CardType;
import mage.constants.Rarity;
import mage.filter.Filter;
import mage.filter.common.FilterArtifactOrEnchantmentPermanent;
import mage.filter.predicate.mageobject.ConvertedManaCostPredicate;
import mage.target.TargetPermanent;
/**
*
* @author fireshoes
*/
public class Fragmentize extends CardImpl {
private static final FilterArtifactOrEnchantmentPermanent filter = new FilterArtifactOrEnchantmentPermanent("artifact or enchantment with converted mana cost 4 or less");
static {
filter.add(new ConvertedManaCostPredicate(Filter.ComparisonType.LessThan, 5));
}
public Fragmentize(UUID ownerId) {
super(ownerId, 14, "Fragmentize", Rarity.COMMON, new CardType[]{CardType.SORCERY}, "{W}");
this.expansionSetCode = "KLD";
// Destroy target artifact or enchantment with converted mana cost 4 or less.
this.getSpellAbility().addEffect(new DestroyTargetEffect());
this.getSpellAbility().addTarget(new TargetPermanent(filter));
}
public Fragmentize(final Fragmentize card) {
super(card);
}
@Override
public Fragmentize copy() {
return new Fragmentize(this);
}
}

View file

@ -0,0 +1,77 @@
/*
* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are
* permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* The views and conclusions contained in the software and documentation are those of the
* authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com.
*/
package mage.sets.kaladesh;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
import mage.abilities.dynamicvalue.common.StaticValue;
import mage.abilities.effects.common.LookLibraryAndPickControllerEffect;
import mage.abilities.keyword.FlyingAbility;
import mage.cards.CardImpl;
import mage.constants.CardType;
import mage.constants.Rarity;
import mage.filter.FilterCard;
import mage.filter.predicate.mageobject.CardTypePredicate;
/**
*
* @author fireshoes
*/
public class GlintNestCrane extends CardImpl {
private static final FilterCard filter = new FilterCard("an artifact card");
static {
filter.add(new CardTypePredicate(CardType.ARTIFACT));
}
public GlintNestCrane(UUID ownerId) {
super(ownerId, 50, "Glint-Nest Crane", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{1}{U}");
this.expansionSetCode = "KLD";
this.subtype.add("Bird");
this.power = new MageInt(1);
this.toughness = new MageInt(3);
// Flying
this.addAbility(FlyingAbility.getInstance());
// When Glint-Nest Crane enters the battlefield, look at the top four cards of your library. You may reveal an artifact card from among them and
// put it into your hand. Put the rest on the bottom of your library in any order.
this.addAbility(new EntersBattlefieldTriggeredAbility(new LookLibraryAndPickControllerEffect(new StaticValue(4), false, new StaticValue(1), filter, false)));
}
public GlintNestCrane(final GlintNestCrane card) {
super(card);
}
@Override
public GlintNestCrane copy() {
return new GlintNestCrane(this);
}
}

View file

@ -0,0 +1,51 @@
/*
* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are
* permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* The views and conclusions contained in the software and documentation are those of the
* authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com.
*/
package mage.sets.kaladesh;
import java.util.UUID;
/**
*
* @author fireshoes
*/
public class Island1 extends mage.cards.basiclands.Island {
public Island1(UUID ownerId) {
super(ownerId, 253);
this.expansionSetCode = "KLD";
}
public Island1(final Island1 card) {
super(card);
}
@Override
public Island1 copy() {
return new Island1(this);
}
}

View file

@ -0,0 +1,51 @@
/*
* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are
* permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* The views and conclusions contained in the software and documentation are those of the
* authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com.
*/
package mage.sets.kaladesh;
import java.util.UUID;
/**
*
* @author fireshoes
*/
public class Island2 extends mage.cards.basiclands.Island {
public Island2(UUID ownerId) {
super(ownerId, 254);
this.expansionSetCode = "KLD";
}
public Island2(final Island2 card) {
super(card);
}
@Override
public Island2 copy() {
return new Island2(this);
}
}

View file

@ -0,0 +1,51 @@
/*
* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are
* permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* The views and conclusions contained in the software and documentation are those of the
* authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com.
*/
package mage.sets.kaladesh;
import java.util.UUID;
/**
*
* @author fireshoes
*/
public class Island3 extends mage.cards.basiclands.Island {
public Island3(UUID ownerId) {
super(ownerId, 255);
this.expansionSetCode = "KLD";
}
public Island3(final Island3 card) {
super(card);
}
@Override
public Island3 copy() {
return new Island3(this);
}
}

View file

@ -0,0 +1,82 @@
/*
* 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.kaladesh;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.SpellCastOpponentTriggeredAbility;
import mage.abilities.effects.Effect;
import mage.abilities.effects.common.GainLifeEffect;
import mage.abilities.effects.common.LoseLifeTargetEffect;
import mage.cards.CardImpl;
import mage.constants.CardType;
import mage.constants.Rarity;
import mage.constants.SetTargetPointer;
import mage.constants.Zone;
import mage.filter.FilterSpell;
import mage.filter.predicate.Predicates;
import mage.filter.predicate.mageobject.CardTypePredicate;
/**
*
* @author emerald000
*/
public class KambalConsulOfAllocation extends CardImpl {
private static final FilterSpell filter = new FilterSpell("a noncreature spell");
static {
filter.add(Predicates.not(new CardTypePredicate(CardType.CREATURE)));
}
public KambalConsulOfAllocation(UUID ownerId) {
super(ownerId, 183, "Kambal, Consul of Allocation", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{1}{W}{B}");
this.expansionSetCode = "KLD";
this.supertype.add("Legendary");
this.subtype.add("Human");
this.subtype.add("Advisor");
this.power = new MageInt(2);
this.toughness = new MageInt(3);
// Whenever an opponent casts a noncreature spell, that player loses 2 life and you gain 2 life.
Ability ability = new SpellCastOpponentTriggeredAbility(Zone.BATTLEFIELD, new LoseLifeTargetEffect(2), filter, false, SetTargetPointer.PLAYER);
Effect effect = new GainLifeEffect(2);
effect.setText("and you gain 2 life");
ability.addEffect(effect);
this.addAbility(ability);
}
public KambalConsulOfAllocation(final KambalConsulOfAllocation card) {
super(card);
}
@Override
public KambalConsulOfAllocation copy() {
return new KambalConsulOfAllocation(this);
}
}

View file

@ -0,0 +1,109 @@
/*
* 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.kaladesh;
import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.TriggeredAbilityImpl;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.common.DiscardCardCost;
import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.costs.mana.GenericManaCost;
import mage.abilities.effects.common.DoIfCostPaid;
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
import mage.abilities.effects.common.combat.CantBeBlockedTargetEffect;
import mage.cards.CardImpl;
import mage.constants.CardType;
import mage.constants.Rarity;
import mage.constants.Zone;
import mage.game.Game;
import mage.game.events.GameEvent;
import mage.game.events.GameEvent.EventType;
import mage.target.common.TargetCreaturePermanent;
/**
*
* @author emerald000
*/
public class KeyToTheCity extends CardImpl {
public KeyToTheCity(UUID ownerId) {
super(ownerId, 220, "Key to the City", Rarity.RARE, new CardType[]{CardType.ARTIFACT}, "{2}");
this.expansionSetCode = "KLD";
// {T}, Discard a card: Up to one target creature can't be blocked this turn.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new CantBeBlockedTargetEffect(), new TapSourceCost());
ability.addCost(new DiscardCardCost());
ability.addTarget(new TargetCreaturePermanent(0, 1));
this.addAbility(ability);
// Whenever Key to the City becomes untapped, you may pay {2}. If you do, draw a card.
this.addAbility(new KeyToTheCityTriggeredAbility());
}
public KeyToTheCity(final KeyToTheCity card) {
super(card);
}
@Override
public KeyToTheCity copy() {
return new KeyToTheCity(this);
}
}
class KeyToTheCityTriggeredAbility extends TriggeredAbilityImpl{
KeyToTheCityTriggeredAbility() {
super(Zone.BATTLEFIELD, new DoIfCostPaid(new DrawCardSourceControllerEffect(1), new GenericManaCost(2)));
}
KeyToTheCityTriggeredAbility(final KeyToTheCityTriggeredAbility ability) {
super(ability);
}
@Override
public KeyToTheCityTriggeredAbility copy() {
return new KeyToTheCityTriggeredAbility(this);
}
@Override
public boolean checkEventType(GameEvent event, Game game) {
return event.getType() == EventType.UNTAPPED;
}
@Override
public boolean checkTrigger(GameEvent event, Game game) {
return event.getTargetId().equals(this.getSourceId());
}
@Override
public String getRule() {
return "Whenever Key to the City becomes untapped, you may pay {2}. If you do, draw a card.";
}
}

View file

@ -0,0 +1,69 @@
/*
* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are
* permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* The views and conclusions contained in the software and documentation are those of the
* authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com.
*/
package mage.sets.kaladesh;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.DiesTriggeredAbility;
import mage.abilities.effects.common.counter.AddCountersTargetEffect;
import mage.cards.CardImpl;
import mage.constants.CardType;
import mage.constants.Rarity;
import mage.counters.CounterType;
import mage.target.common.TargetControlledCreaturePermanent;
/**
*
* @author fireshoes
*/
public class LawlessBroker extends CardImpl {
public LawlessBroker(UUID ownerId) {
super(ownerId, 86, "Lawless Broker", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{2}{B}");
this.expansionSetCode = "KLD";
this.subtype.add("Aetherborn");
this.subtype.add("Rogue");
this.power = new MageInt(3);
this.toughness = new MageInt(2);
// When Lawless Broker dies, put a +1/+1 counter on target creature you control.
Ability ability = new DiesTriggeredAbility(new AddCountersTargetEffect(CounterType.P1P1.createInstance()), false);
ability.addTarget(new TargetControlledCreaturePermanent());
this.addAbility(ability);
}
public LawlessBroker(final LawlessBroker card) {
super(card);
}
@Override
public LawlessBroker copy() {
return new LawlessBroker(this);
}
}

View file

@ -0,0 +1,51 @@
/*
* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are
* permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* The views and conclusions contained in the software and documentation are those of the
* authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com.
*/
package mage.sets.kaladesh;
import java.util.UUID;
/**
*
* @author fireshoes
*/
public class Mountain1 extends mage.cards.basiclands.Mountain {
public Mountain1(UUID ownerId) {
super(ownerId, 259);
this.expansionSetCode = "KLD";
}
public Mountain1(final Mountain1 card) {
super(card);
}
@Override
public Mountain1 copy() {
return new Mountain1(this);
}
}

View file

@ -0,0 +1,51 @@
/*
* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are
* permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* The views and conclusions contained in the software and documentation are those of the
* authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com.
*/
package mage.sets.kaladesh;
import java.util.UUID;
/**
*
* @author fireshoes
*/
public class Mountain2 extends mage.cards.basiclands.Mountain {
public Mountain2(UUID ownerId) {
super(ownerId, 260);
this.expansionSetCode = "KLD";
}
public Mountain2(final Mountain2 card) {
super(card);
}
@Override
public Mountain2 copy() {
return new Mountain2(this);
}
}

View file

@ -0,0 +1,51 @@
/*
* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are
* permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* The views and conclusions contained in the software and documentation are those of the
* authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com.
*/
package mage.sets.kaladesh;
import java.util.UUID;
/**
*
* @author fireshoes
*/
public class Mountain3 extends mage.cards.basiclands.Mountain {
public Mountain3(UUID ownerId) {
super(ownerId, 261);
this.expansionSetCode = "KLD";
}
public Mountain3(final Mountain3 card) {
super(card);
}
@Override
public Mountain3 copy() {
return new Mountain3(this);
}
}

View file

@ -0,0 +1,107 @@
/*
* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are
* permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* The views and conclusions contained in the software and documentation are those of the
* authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com.
*/
package mage.sets.kaladesh;
import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.ReplacementEffectImpl;
import mage.cards.CardImpl;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.Outcome;
import mage.constants.Rarity;
import mage.constants.Zone;
import mage.game.Game;
import mage.game.events.EntersTheBattlefieldEvent;
import mage.game.events.GameEvent;
import mage.game.events.GameEvent.EventType;
import mage.game.permanent.Permanent;
/**
*
* @author emerald000
*/
public class Panharmonicon extends CardImpl {
public Panharmonicon(UUID ownerId) {
super(ownerId, 226, "Panharmonicon", Rarity.RARE, new CardType[]{CardType.ARTIFACT}, "{4}");
this.expansionSetCode = "KLD";
// If an artifact or creature entering the battlefield causes a triggered ability of a permanent you control to trigger, that ability triggers an additional time.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new PanharmoniconEffect()));
}
public Panharmonicon(final Panharmonicon card) {
super(card);
}
@Override
public Panharmonicon copy() {
return new Panharmonicon(this);
}
}
class PanharmoniconEffect extends ReplacementEffectImpl {
PanharmoniconEffect() {
super(Duration.WhileOnBattlefield, Outcome.Benefit);
staticText = "If an artifact or creature entering the battlefield causes a triggered ability of a permanent you control to trigger, that ability triggers an additional time";
}
PanharmoniconEffect(final PanharmoniconEffect effect) {
super(effect);
}
@Override
public PanharmoniconEffect copy() {
return new PanharmoniconEffect(this);
}
@Override
public boolean checksEventType(GameEvent event, Game game) {
return event.getType() == EventType.ENTERS_THE_BATTLEFIELD;
}
@Override
public boolean applies(GameEvent event, Ability source, Game game) {
if (event instanceof EntersTheBattlefieldEvent) {
Permanent permanent = ((EntersTheBattlefieldEvent) event).getTarget();
if (permanent != null) {
return permanent.getCardType().contains(CardType.ARTIFACT) || permanent.getCardType().contains(CardType.CREATURE);
}
}
return false;
}
@Override
public boolean replaceEvent(GameEvent event, Ability source, Game game) {
event.setAmount(event.getAmount() + 1);
return false;
}
}

View file

@ -28,18 +28,27 @@
package mage.sets.kaladesh;
import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.dynamicvalue.DynamicValue;
import mage.abilities.dynamicvalue.common.SweepNumber;
import mage.abilities.effects.Effect;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
import mage.abilities.effects.keyword.SweepEffect;
import mage.cards.Card;
import mage.cards.CardImpl;
import mage.cards.Cards;
import mage.cards.CardsImpl;
import mage.constants.CardType;
import mage.constants.Outcome;
import mage.constants.Rarity;
import mage.filter.FilterPermanent;
import mage.constants.Zone;
import mage.filter.common.FilterControlledPermanent;
import mage.filter.predicate.Predicates;
import mage.filter.predicate.mageobject.CardTypePredicate;
import mage.filter.predicate.permanent.TokenPredicate;
import mage.game.Game;
import mage.players.Player;
import mage.target.common.TargetControlledPermanent;
import mage.util.CardUtil;
/**
*
@ -47,17 +56,21 @@ import mage.filter.predicate.permanent.TokenPredicate;
*/
public class ParadoxicalOutcome extends CardImpl {
private static FilterControlledPermanent filter = new FilterControlledPermanent(new StringBuilder("any number of of target nonland, nontoken permanents you control").toString());
static {
filter.add(Predicates.not(new CardTypePredicate(CardType.LAND)));
filter.add(Predicates.not(new TokenPredicate()));
}
public ParadoxicalOutcome(UUID ownerId) {
super(ownerId, 60, "Paradoxical Outcome", Rarity.RARE, new CardType[]{CardType.INSTANT}, "{3}{U}");
this.expansionSetCode = "KLD";
// Return any number of target nonland, nontoken permanents you control to their owners' hands. Draw a card for each card returned to your hand this way.
FilterPermanent filter = new FilterControlledPermanent(new StringBuilder("any number of of target nonland, nontoken permanents you control").toString());
filter.add(Predicates.not(new CardTypePredicate(CardType.LAND)));
filter.add(Predicates.not(new TokenPredicate()));
this.getSpellAbility().addEffect(new SweepEffect(filter, "nonland, nontoken permanents ", false));
DynamicValue paradoxicalOutcomeValue = new SweepNumber("nonland, nontoken permanents ", false);
this.getSpellAbility().addEffect(new ParadoxicalOutcomeEffect());
this.getSpellAbility().addTarget(new TargetControlledPermanent(0, Integer.MAX_VALUE, filter, false));
DynamicValue paradoxicalOutcomeValue = new ParadoxicalOutcomeNumber(false);
this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(paradoxicalOutcomeValue));
}
@ -70,3 +83,76 @@ public class ParadoxicalOutcome extends CardImpl {
return new ParadoxicalOutcome(this);
}
}
class ParadoxicalOutcomeEffect extends OneShotEffect {
ParadoxicalOutcomeEffect() {
super(Outcome.Benefit);
this.staticText = "Return any number of target artifact cards from target player's graveyard to the top of his or her library in any order";
}
ParadoxicalOutcomeEffect(final ParadoxicalOutcomeEffect effect) {
super(effect);
}
@Override
public ParadoxicalOutcomeEffect copy() {
return new ParadoxicalOutcomeEffect(this);
}
@Override
public boolean apply(Game game, Ability source) {
Player controller = game.getPlayer(source.getControllerId());
if (controller != null) {
Cards cards = new CardsImpl(source.getTargets().get(0).getTargets());
game.getState().setValue(CardUtil.getCardZoneString("ParadoxicalOutcomeEffect", source.getSourceId(), game), cards.size());
controller.moveCards(new CardsImpl(source.getTargets().get(0).getTargets()), Zone.HAND, source, game);
return true;
}
return false;
}
}
class ParadoxicalOutcomeNumber implements DynamicValue {
private int zoneChangeCounter = 0;
private final boolean previousZone;
public ParadoxicalOutcomeNumber(boolean previousZone) {
this.previousZone = previousZone;
}
@Override
public int calculate(Game game, Ability source, Effect effect) {
if (zoneChangeCounter == 0) {
Card card = game.getCard(source.getSourceId());
if (card != null) {
zoneChangeCounter = card.getZoneChangeCounter(game);
if (previousZone) {
zoneChangeCounter--;
}
}
}
int number = 0;
Integer sweepNumber = (Integer) game.getState().getValue(new StringBuilder("ParadoxicalOutcomeEffect").append(source.getSourceId()).append(zoneChangeCounter).toString());
if (sweepNumber != null) {
number = sweepNumber;
}
return number;
}
@Override
public ParadoxicalOutcomeNumber copy() {
return new ParadoxicalOutcomeNumber(previousZone);
}
@Override
public String toString() {
return "X";
}
@Override
public String getMessage() {
return "the number of permanents returned this way";
}
}

View file

@ -0,0 +1,51 @@
/*
* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are
* permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* The views and conclusions contained in the software and documentation are those of the
* authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com.
*/
package mage.sets.kaladesh;
import java.util.UUID;
/**
*
* @author fireshoes
*/
public class Plains1 extends mage.cards.basiclands.Plains {
public Plains1(UUID ownerId) {
super(ownerId, 250);
this.expansionSetCode = "KLD";
}
public Plains1(final Plains1 card) {
super(card);
}
@Override
public Plains1 copy() {
return new Plains1(this);
}
}

View file

@ -0,0 +1,51 @@
/*
* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are
* permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* The views and conclusions contained in the software and documentation are those of the
* authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com.
*/
package mage.sets.kaladesh;
import java.util.UUID;
/**
*
* @author fireshoes
*/
public class Plains2 extends mage.cards.basiclands.Plains {
public Plains2(UUID ownerId) {
super(ownerId, 251);
this.expansionSetCode = "KLD";
}
public Plains2(final Plains2 card) {
super(card);
}
@Override
public Plains2 copy() {
return new Plains2(this);
}
}

View file

@ -0,0 +1,51 @@
/*
* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are
* permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* The views and conclusions contained in the software and documentation are those of the
* authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com.
*/
package mage.sets.kaladesh;
import java.util.UUID;
/**
*
* @author fireshoes
*/
public class Plains3 extends mage.cards.basiclands.Plains {
public Plains3(UUID ownerId) {
super(ownerId, 252);
this.expansionSetCode = "KLD";
}
public Plains3(final Plains3 card) {
super(card);
}
@Override
public Plains3 copy() {
return new Plains3(this);
}
}

View file

@ -0,0 +1,59 @@
/*
* 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.kaladesh;
import java.util.UUID;
import mage.MageInt;
import mage.cards.CardImpl;
import mage.constants.CardType;
import mage.constants.Rarity;
/**
*
* @author fireshoes
*/
public class PrakhataClubSecurity extends CardImpl {
public PrakhataClubSecurity(UUID ownerId) {
super(ownerId, 98, "Prakhata Club Security", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{3}{B}");
this.expansionSetCode = "KLD";
this.subtype.add("Aetherborn");
this.subtype.add("Warrior");
this.power = new MageInt(3);
this.toughness = new MageInt(4);
}
public PrakhataClubSecurity(final PrakhataClubSecurity card) {
super(card);
}
@Override
public PrakhataClubSecurity copy() {
return new PrakhataClubSecurity(this);
}
}

View file

@ -0,0 +1,156 @@
/*
* 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.kaladesh;
import java.util.List;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.SpellCastControllerTriggeredAbility;
import mage.abilities.effects.Effect;
import mage.abilities.effects.OneShotEffect;
import mage.cards.Card;
import mage.cards.CardImpl;
import mage.cards.CardsImpl;
import mage.constants.CardType;
import mage.constants.Outcome;
import mage.constants.Rarity;
import mage.constants.Zone;
import mage.game.Game;
import mage.game.events.GameEvent;
import mage.game.stack.Spell;
import mage.players.Player;
import mage.watchers.common.SpellsCastWatcher;
/**
*
* @author emerald000
*/
public class RashmiEternitiesCrafter extends CardImpl {
public RashmiEternitiesCrafter(UUID ownerId) {
super(ownerId, 184, "Rashmi, Eternities Crafter", Rarity.MYTHIC, new CardType[]{CardType.CREATURE}, "{2}{G}{U}");
this.expansionSetCode = "KLD";
this.supertype.add("Legendary");
this.subtype.add("Elf");
this.subtype.add("Druid");
this.power = new MageInt(2);
this.toughness = new MageInt(3);
// Whenever you cast your first spell each turn, reveal the top card of your library. If it's a nonland card with converted mana cost less than that spell's, you may cast it without paying its mana cost. If you don't cast the revealed card, put it into your hand.
this.addAbility(new RashmiEternitiesCrafterTriggeredAbility(), new SpellsCastWatcher());
}
public RashmiEternitiesCrafter(final RashmiEternitiesCrafter card) {
super(card);
}
@Override
public RashmiEternitiesCrafter copy() {
return new RashmiEternitiesCrafter(this);
}
}
class RashmiEternitiesCrafterTriggeredAbility extends SpellCastControllerTriggeredAbility {
RashmiEternitiesCrafterTriggeredAbility() {
super(new RashmiEternitiesCrafterEffect(), false);
}
RashmiEternitiesCrafterTriggeredAbility(RashmiEternitiesCrafterTriggeredAbility ability) {
super(ability);
}
@Override
public RashmiEternitiesCrafterTriggeredAbility copy() {
return new RashmiEternitiesCrafterTriggeredAbility(this);
}
@Override
public boolean checkTrigger(GameEvent event, Game game) {
if (super.checkTrigger(event, game)) {
SpellsCastWatcher watcher = (SpellsCastWatcher) game.getState().getWatchers().get(SpellsCastWatcher.class.getName());
if (watcher != null) {
List<Spell> spells = watcher.getSpellsCastThisTurn(event.getPlayerId());
if (spells != null && spells.size() == 1) {
Spell spell = game.getStack().getSpell(event.getTargetId());
if (spell != null) {
for (Effect effect : getEffects()) {
effect.setValue("RashmiEternitiesCrafterCMC", spell.getConvertedManaCost());
}
return true;
}
}
}
}
return false;
}
@Override
public String getRule() {
return "Whenever you cast your first spell each turn, reveal the top card of your library. If it's a nonland card with converted mana cost less than that spell's, you may cast it without paying its mana cost. If you don't cast the revealed card, put it into your hand.";
}
}
class RashmiEternitiesCrafterEffect extends OneShotEffect {
RashmiEternitiesCrafterEffect() {
super(Outcome.PlayForFree);
this.staticText = "reveal the top card of your library. If it's a nonland card with converted mana cost less than that spell's, you may cast it without paying its mana cost. If you don't cast the revealed card, put it into your hand";
}
RashmiEternitiesCrafterEffect(final RashmiEternitiesCrafterEffect effect) {
super(effect);
}
@Override
public RashmiEternitiesCrafterEffect copy() {
return new RashmiEternitiesCrafterEffect(this);
}
@Override
public boolean apply(Game game, Ability source) {
Player controller = game.getPlayer(source.getControllerId());
if (controller != null) {
Card card = controller.getLibrary().getFromTop(game);
if (card != null) {
controller.revealCards("Rashmi, Eternities Crafter", new CardsImpl(card), game);
Object cmcObject = this.getValue("RashmiEternitiesCrafterCMC");
if (cmcObject == null
|| card.getCardType().contains(CardType.LAND)
|| card.getConvertedManaCost() >= (int) cmcObject
|| !controller.chooseUse(Outcome.PlayForFree, "Cast " + card.getName() + " without paying its mana cost?", source, game)
|| !controller.cast(card.getSpellAbility(), game, true)) {
controller.moveCards(card, Zone.HAND, source, game);
}
}
return true;
}
return false;
}
}

View file

@ -0,0 +1,168 @@
/*
* 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.kaladesh;
import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.DelayedTriggeredAbility;
import mage.abilities.LoyaltyAbility;
import mage.abilities.common.PlanswalkerEntersWithLoyalityCountersAbility;
import mage.abilities.common.delayed.AtTheBeginOfNextEndStepDelayedTriggeredAbility;
import mage.abilities.effects.Effect;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.DamagePlayersEffect;
import mage.abilities.effects.common.ExileTargetEffect;
import mage.abilities.effects.common.PutTokenOntoBattlefieldCopyTargetEffect;
import mage.abilities.effects.common.search.SearchLibraryPutInPlayEffect;
import mage.abilities.effects.keyword.ScryEffect;
import mage.cards.Card;
import mage.cards.CardImpl;
import mage.cards.Cards;
import mage.constants.CardType;
import mage.constants.Outcome;
import mage.constants.Rarity;
import mage.constants.TargetController;
import mage.filter.common.FilterArtifactCard;
import mage.filter.common.FilterControlledPermanent;
import mage.filter.predicate.Predicates;
import mage.filter.predicate.mageobject.CardTypePredicate;
import mage.game.Game;
import mage.game.permanent.Permanent;
import mage.target.common.TargetCardInLibrary;
import mage.target.common.TargetControlledPermanent;
import mage.target.targetpointer.FixedTarget;
/**
*
* @author emerald000
*/
public class SaheeliRai extends CardImpl {
private static final FilterControlledPermanent filter = new FilterControlledPermanent("artifact or creature you control");
static {
filter.add(Predicates.or(new CardTypePredicate(CardType.ARTIFACT), new CardTypePredicate(CardType.CREATURE)));
}
public SaheeliRai(UUID ownerId) {
super(ownerId, 186, "Saheeli Rai", Rarity.MYTHIC, new CardType[]{CardType.PLANESWALKER}, "{1}{U}{R}");
this.expansionSetCode = "KLD";
this.subtype.add("Saheeli");
this.addAbility(new PlanswalkerEntersWithLoyalityCountersAbility(3));
// +1: Scry 1. Saheeli Rai deals 1 damage to each opponent.
Effect effect = new ScryEffect(1);
effect.setText("Scry 1");
Ability ability = new LoyaltyAbility(effect, 1);
ability.addEffect(new DamagePlayersEffect(1, TargetController.OPPONENT));
this.addAbility(ability);
// -2: Create a token that's a copy of target artifact or creature you control, except it's an artifact in addition to its other types. That token gains haste. Exile it at the beginning of the next end step.
ability = new LoyaltyAbility(new SaheeliRaiCreateTokenEffect(), -2);
ability.addTarget(new TargetControlledPermanent(filter));
this.addAbility(ability);
// -7: Search your library for up to three artifact cards with different names, put them onto the battlefield, then shuffle your library.
this.addAbility(new LoyaltyAbility(new SearchLibraryPutInPlayEffect(new SaheeliRaiTarget()) , -7));
}
public SaheeliRai(final SaheeliRai card) {
super(card);
}
@Override
public SaheeliRai copy() {
return new SaheeliRai(this);
}
}
class SaheeliRaiCreateTokenEffect extends OneShotEffect {
SaheeliRaiCreateTokenEffect() {
super(Outcome.Copy);
this.staticText = "Create a token that's a copy of target artifact or creature you control, except it's an artifact in addition to its other types. That token gains haste. Exile it at the beginning of the next end step";
}
SaheeliRaiCreateTokenEffect(final SaheeliRaiCreateTokenEffect effect) {
super(effect);
}
@Override
public SaheeliRaiCreateTokenEffect copy() {
return new SaheeliRaiCreateTokenEffect(this);
}
@Override
public boolean apply(Game game, Ability source) {
Permanent copiedPermanent = game.getPermanent(this.getTargetPointer().getFirst(game, source));
if (copiedPermanent != null) {
PutTokenOntoBattlefieldCopyTargetEffect effect = new PutTokenOntoBattlefieldCopyTargetEffect(null, CardType.ARTIFACT, true);
if (effect.apply(game, source)) {
for (Permanent copyPermanent : effect.getAddedPermanent()) {
ExileTargetEffect exileEffect = new ExileTargetEffect();
exileEffect.setTargetPointer(new FixedTarget(copyPermanent, game));
DelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(exileEffect);
game.addDelayedTriggeredAbility(delayedAbility, source);
}
return true;
}
}
return false;
}
}
class SaheeliRaiTarget extends TargetCardInLibrary {
SaheeliRaiTarget() {
super(0, 3, new FilterArtifactCard("artifact cards with different names"));
}
SaheeliRaiTarget(final SaheeliRaiTarget target) {
super(target);
}
@Override
public SaheeliRaiTarget copy() {
return new SaheeliRaiTarget(this);
}
@Override
public boolean canTarget(UUID id, Cards cards, Game game) {
Card card = cards.get(id, game);
if (card != null) {
for (UUID targetId : this.getTargets()) {
Card iCard = game.getCard(targetId);
if (iCard != null && iCard.getName().equals(card.getName())) {
return false;
}
}
return filter.match(card, game);
}
return false;
}
}

View file

@ -0,0 +1,74 @@
/*
* 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.kaladesh;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.common.AttacksOrBlocksTriggeredAbility;
import mage.abilities.effects.Effect;
import mage.abilities.effects.common.DrawDiscardControllerEffect;
import mage.abilities.keyword.CrewAbility;
import mage.abilities.keyword.FlyingAbility;
import mage.cards.CardImpl;
import mage.constants.CardType;
import mage.constants.Rarity;
/**
*
* @author emerald000
*/
public class SmugglersCopter extends CardImpl {
public SmugglersCopter(UUID ownerId) {
super(ownerId, 235, "Smuggler's Copter", Rarity.RARE, new CardType[]{CardType.ARTIFACT}, "{2}");
this.expansionSetCode = "KLD";
this.subtype.add("Vehicle");
this.power = new MageInt(3);
this.toughness = new MageInt(3);
// Flying
this.addAbility(FlyingAbility.getInstance());
// Whenever Smuggler's Copter attacks or blocks, you may draw a card. If you do, discard a card.
Effect effect = new DrawDiscardControllerEffect();
effect.setText("you may draw a card. If you do, discard a card");
this.addAbility(new AttacksOrBlocksTriggeredAbility(effect, true));
// Crew 1
this.addAbility(new CrewAbility(1));
}
public SmugglersCopter(final SmugglersCopter card) {
super(card);
}
@Override
public SmugglersCopter copy() {
return new SmugglersCopter(this);
}
}

View file

@ -0,0 +1,51 @@
/*
* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are
* permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* The views and conclusions contained in the software and documentation are those of the
* authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com.
*/
package mage.sets.kaladesh;
import java.util.UUID;
/**
*
* @author fireshoes
*/
public class Swamp1 extends mage.cards.basiclands.Swamp {
public Swamp1(UUID ownerId) {
super(ownerId, 256);
this.expansionSetCode = "KLD";
}
public Swamp1(final Swamp1 card) {
super(card);
}
@Override
public Swamp1 copy() {
return new Swamp1(this);
}
}

View file

@ -0,0 +1,51 @@
/*
* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are
* permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* The views and conclusions contained in the software and documentation are those of the
* authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com.
*/
package mage.sets.kaladesh;
import java.util.UUID;
/**
*
* @author fireshoes
*/
public class Swamp2 extends mage.cards.basiclands.Swamp {
public Swamp2(UUID ownerId) {
super(ownerId, 257);
this.expansionSetCode = "KLD";
}
public Swamp2(final Swamp2 card) {
super(card);
}
@Override
public Swamp2 copy() {
return new Swamp2(this);
}
}

View file

@ -0,0 +1,51 @@
/*
* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are
* permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* The views and conclusions contained in the software and documentation are those of the
* authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com.
*/
package mage.sets.kaladesh;
import java.util.UUID;
/**
*
* @author fireshoes
*/
public class Swamp3 extends mage.cards.basiclands.Swamp {
public Swamp3(UUID ownerId) {
super(ownerId, 258);
this.expansionSetCode = "KLD";
}
public Swamp3(final Swamp3 card) {
super(card);
}
@Override
public Swamp3 copy() {
return new Swamp3(this);
}
}

View file

@ -0,0 +1,69 @@
/*
* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are
* permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* The views and conclusions contained in the software and documentation are those of the
* authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com.
*/
package mage.sets.kaladesh;
import java.util.UUID;
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
import mage.abilities.decorator.ConditionalOneShotEffect;
import mage.abilities.effects.common.DamageTargetControllerEffect;
import mage.abilities.effects.common.DestroyTargetEffect;
import mage.cards.CardImpl;
import mage.constants.CardType;
import mage.constants.Rarity;
import mage.filter.common.FilterControlledArtifactPermanent;
import mage.target.common.TargetCreaturePermanent;
/**
*
* @author emerald000
*/
public class UnlicensedDisintegration extends CardImpl {
public UnlicensedDisintegration(UUID ownerId) {
super(ownerId, 187, "Unlicensed Disintegration", Rarity.UNCOMMON, new CardType[]{CardType.INSTANT}, "{1}{B}{R}");
this.expansionSetCode = "KLD";
// Destroy target creature. If you control an artifact, Unlicensed Disintegration deals 3 damage to that creature's controller.
this.getSpellAbility().addTarget(new TargetCreaturePermanent());
this.getSpellAbility().addEffect(new DestroyTargetEffect());
this.getSpellAbility().addEffect(new ConditionalOneShotEffect(
new DamageTargetControllerEffect(3),
new PermanentsOnTheBattlefieldCondition(new FilterControlledArtifactPermanent()),
"If you control an artifact, Unlicensed Disintegration deals 3 damage to that creature's controller"));
}
public UnlicensedDisintegration(final UnlicensedDisintegration card) {
super(card);
}
@Override
public UnlicensedDisintegration copy() {
return new UnlicensedDisintegration(this);
}
}

View file

@ -0,0 +1,81 @@
/*
* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are
* permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* The views and conclusions contained in the software and documentation are those of the
* authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com.
*/
package mage.sets.kaladesh;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.common.AttacksTriggeredAbility;
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
import mage.abilities.costs.common.PayEnergyCost;
import mage.abilities.effects.Effect;
import mage.abilities.effects.common.DoIfCostPaid;
import mage.abilities.effects.common.continuous.BoostSourceEffect;
import mage.abilities.effects.common.continuous.GainAbilitySourceEffect;
import mage.abilities.effects.common.counter.GetEnergyCountersControllerEffect;
import mage.abilities.keyword.TrampleAbility;
import mage.cards.CardImpl;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.Rarity;
/**
*
* @author emerald000
*/
public class VoltaicBrawler extends CardImpl {
public VoltaicBrawler(UUID ownerId) {
super(ownerId, 189, "Voltaic Brawler", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{R}{G}");
this.expansionSetCode = "KLD";
this.subtype.add("Human");
this.subtype.add("Warrior");
this.power = new MageInt(3);
this.toughness = new MageInt(2);
// When Voltaic Brawler enters the battlefield, you get {E}{E}.
this.addAbility(new EntersBattlefieldTriggeredAbility(new GetEnergyCountersControllerEffect(2)));
// Whenever Voltaic Brawler attacks, you may pay {E}. If you do, it gets +1/+1 and gains trample until end of turn.
Effect effect = new BoostSourceEffect(1, 1, Duration.EndOfTurn);
effect.setText("it gets +1/+1");
DoIfCostPaid doIfCostPaid = new DoIfCostPaid(effect, new PayEnergyCost(1));
effect = new GainAbilitySourceEffect(TrampleAbility.getInstance(), Duration.EndOfTurn);
effect.setText("and gains trample until end of turn");
doIfCostPaid.addEffect(effect);
this.addAbility(new AttacksTriggeredAbility(doIfCostPaid, false));
}
public VoltaicBrawler(final VoltaicBrawler card) {
super(card);
}
@Override
public VoltaicBrawler copy() {
return new VoltaicBrawler(this);
}
}

View file

@ -0,0 +1,54 @@
/*
* 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.masterpieceseries;
import java.util.UUID;
import mage.constants.Rarity;
/**
*
* @author fireshoes
*/
public class AEtherVial extends mage.sets.darksteel.AEtherVial {
public AEtherVial(UUID ownerId) {
super(ownerId);
this.cardNumber = "6";
this.expansionSetCode = "MPS";
this.rarity = Rarity.MYTHIC;
}
public AEtherVial(final AEtherVial card) {
super(card);
}
@Override
public AEtherVial copy() {
return new AEtherVial(this);
}
}

View file

@ -0,0 +1,52 @@
/*
* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are
* permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* The views and conclusions contained in the software and documentation are those of the
* authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com.
*/
package mage.sets.masterpieceseries;
import java.util.UUID;
/**
*
* @author fireshoes
*/
public class CataclysmicGearhulk extends mage.sets.kaladesh.CataclysmicGearhulk {
public CataclysmicGearhulk(UUID ownerId) {
super(ownerId);
this.cardNumber = "1";
this.expansionSetCode = "MPS";
}
public CataclysmicGearhulk(final CataclysmicGearhulk card) {
super(card);
}
@Override
public CataclysmicGearhulk copy() {
return new CataclysmicGearhulk(this);
}
}

View file

@ -0,0 +1,54 @@
/*
* 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.masterpieceseries;
import java.util.UUID;
import mage.constants.Rarity;
/**
*
* @author fireshoes
*/
public class ChampionsHelm extends mage.sets.commander.ChampionsHelm {
public ChampionsHelm(UUID ownerId) {
super(ownerId);
this.cardNumber = "7";
this.expansionSetCode = "MPS";
this.rarity = Rarity.MYTHIC;
}
public ChampionsHelm(final ChampionsHelm card) {
super(card);
}
@Override
public ChampionsHelm copy() {
return new ChampionsHelm(this);
}
}

View file

@ -0,0 +1,54 @@
/*
* 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.masterpieceseries;
import java.util.UUID;
import mage.constants.Rarity;
/**
*
* @author fireshoes
*/
public class ChromaticLantern extends mage.sets.returntoravnica.ChromaticLantern {
public ChromaticLantern(UUID ownerId) {
super(ownerId);
this.cardNumber = "8";
this.expansionSetCode = "MPS";
this.rarity = Rarity.MYTHIC;
}
public ChromaticLantern(final ChromaticLantern card) {
super(card);
}
@Override
public ChromaticLantern copy() {
return new ChromaticLantern(this);
}
}

View file

@ -0,0 +1,54 @@
/*
* 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.masterpieceseries;
import java.util.UUID;
import mage.constants.Rarity;
/**
*
* @author fireshoes
*/
public class ChromeMox extends mage.sets.mirrodin.ChromeMox {
public ChromeMox(UUID ownerId) {
super(ownerId);
this.cardNumber = "9";
this.expansionSetCode = "MPS";
this.rarity = Rarity.MYTHIC;
}
public ChromeMox(final ChromeMox card) {
super(card);
}
@Override
public ChromeMox copy() {
return new ChromeMox(this);
}
}

View file

@ -0,0 +1,54 @@
/*
* 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.masterpieceseries;
import java.util.UUID;
import mage.constants.Rarity;
/**
*
* @author fireshoes
*/
public class CloudstoneCurio extends mage.sets.ravnica.CloudstoneCurio {
public CloudstoneCurio(UUID ownerId) {
super(ownerId);
this.cardNumber = "10";
this.expansionSetCode = "MPS";
this.rarity = Rarity.MYTHIC;
}
public CloudstoneCurio(final CloudstoneCurio card) {
super(card);
}
@Override
public CloudstoneCurio copy() {
return new CloudstoneCurio(this);
}
}

View file

@ -0,0 +1,54 @@
/*
* 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.masterpieceseries;
import java.util.UUID;
import mage.constants.Rarity;
/**
*
* @author fireshoes
*/
public class CrucibleOfWorlds extends mage.sets.tenthedition.CrucibleOfWorlds {
public CrucibleOfWorlds(UUID ownerId) {
super(ownerId);
this.cardNumber = "11";
this.expansionSetCode = "MPS";
this.rarity = Rarity.MYTHIC;
}
public CrucibleOfWorlds(final CrucibleOfWorlds card) {
super(card);
}
@Override
public CrucibleOfWorlds copy() {
return new CrucibleOfWorlds(this);
}
}

View file

@ -0,0 +1,54 @@
/*
* 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.masterpieceseries;
import java.util.UUID;
import mage.constants.Rarity;
/**
*
* @author fireshoes
*/
public class GauntletOfPower extends mage.sets.timespiral.GauntletOfPower {
public GauntletOfPower(UUID ownerId) {
super(ownerId);
this.cardNumber = "12";
this.expansionSetCode = "MPS";
this.rarity = Rarity.MYTHIC;
}
public GauntletOfPower(final GauntletOfPower card) {
super(card);
}
@Override
public GauntletOfPower copy() {
return new GauntletOfPower(this);
}
}

View file

@ -0,0 +1,54 @@
/*
* 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.masterpieceseries;
import java.util.UUID;
import mage.constants.Rarity;
/**
*
* @author fireshoes
*/
public class HangarbackWalker extends mage.sets.magicorigins.HangarbackWalker {
public HangarbackWalker(UUID ownerId) {
super(ownerId);
this.cardNumber = "13";
this.expansionSetCode = "MPS";
this.rarity = Rarity.MYTHIC;
}
public HangarbackWalker(final HangarbackWalker card) {
super(card);
}
@Override
public HangarbackWalker copy() {
return new HangarbackWalker(this);
}
}

View file

@ -0,0 +1,54 @@
/*
* 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.masterpieceseries;
import java.util.UUID;
import mage.constants.Rarity;
/**
*
* @author fireshoes
*/
public class LightningGreaves extends mage.sets.mirrodin.LightningGreaves {
public LightningGreaves(UUID ownerId) {
super(ownerId);
this.cardNumber = "14";
this.expansionSetCode = "MPS";
this.rarity = Rarity.MYTHIC;
}
public LightningGreaves(final LightningGreaves card) {
super(card);
}
@Override
public LightningGreaves copy() {
return new LightningGreaves(this);
}
}

View file

@ -0,0 +1,54 @@
/*
* 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.masterpieceseries;
import java.util.UUID;
import mage.constants.Rarity;
/**
*
* @author fireshoes
*/
public class LotusPetal extends mage.sets.tempest.LotusPetal {
public LotusPetal(UUID ownerId) {
super(ownerId);
this.cardNumber = "15";
this.expansionSetCode = "MPS";
this.rarity = Rarity.MYTHIC;
}
public LotusPetal(final LotusPetal card) {
super(card);
}
@Override
public LotusPetal copy() {
return new LotusPetal(this);
}
}

View file

@ -0,0 +1,52 @@
/*
* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are
* permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* The views and conclusions contained in the software and documentation are those of the
* authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com.
*/
package mage.sets.masterpieceseries;
import java.util.UUID;
/**
*
* @author fireshoes
*/
public class ManaCrypt extends mage.sets.vintagemasters.ManaCrypt {
public ManaCrypt(UUID ownerId) {
super(ownerId);
this.cardNumber = "16";
this.expansionSetCode = "MPS";
}
public ManaCrypt(final ManaCrypt card) {
super(card);
}
@Override
public ManaCrypt copy() {
return new ManaCrypt(this);
}
}

View file

@ -0,0 +1,54 @@
/*
* 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.masterpieceseries;
import java.util.UUID;
import mage.constants.Rarity;
/**
*
* @author fireshoes
*/
public class ManaVault extends mage.sets.limitedalpha.ManaVault {
public ManaVault(UUID ownerId) {
super(ownerId);
this.cardNumber = "17";
this.expansionSetCode = "MPS";
this.rarity = Rarity.MYTHIC;
}
public ManaVault(final ManaVault card) {
super(card);
}
@Override
public ManaVault copy() {
return new ManaVault(this);
}
}

View file

@ -0,0 +1,54 @@
/*
* 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.masterpieceseries;
import java.util.UUID;
import mage.constants.Rarity;
/**
*
* @author fireshoes
*/
public class MindsEye extends mage.sets.mirrodin.MindsEye {
public MindsEye(UUID ownerId) {
super(ownerId);
this.cardNumber = "18";
this.expansionSetCode = "MPS";
this.rarity = Rarity.MYTHIC;
}
public MindsEye(final MindsEye card) {
super(card);
}
@Override
public MindsEye copy() {
return new MindsEye(this);
}
}

View file

@ -0,0 +1,52 @@
/*
* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are
* permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* The views and conclusions contained in the software and documentation are those of the
* authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com.
*/
package mage.sets.masterpieceseries;
import java.util.UUID;
/**
*
* @author fireshoes
*/
public class MoxOpal extends mage.sets.scarsofmirrodin.MoxOpal {
public MoxOpal(UUID ownerId) {
super(ownerId);
this.cardNumber = "19";
this.expansionSetCode = "MPS";
}
public MoxOpal(final MoxOpal card) {
super(card);
}
@Override
public MoxOpal copy() {
return new MoxOpal(this);
}
}

View file

@ -0,0 +1,54 @@
/*
* 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.masterpieceseries;
import java.util.UUID;
import mage.constants.Rarity;
/**
*
* @author fireshoes
*/
public class PaintersServant extends mage.sets.shadowmoor.PaintersServant {
public PaintersServant(UUID ownerId) {
super(ownerId);
this.cardNumber = "20";
this.expansionSetCode = "MPS";
this.rarity = Rarity.MYTHIC;
}
public PaintersServant(final PaintersServant card) {
super(card);
}
@Override
public PaintersServant copy() {
return new PaintersServant(this);
}
}

View file

@ -0,0 +1,54 @@
/*
* 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.masterpieceseries;
import java.util.UUID;
import mage.constants.Rarity;
/**
*
* @author fireshoes
*/
public class RingsOfBrighthearth extends mage.sets.lorwyn.RingsOfBrighthearth {
public RingsOfBrighthearth(UUID ownerId) {
super(ownerId);
this.cardNumber = "21";
this.expansionSetCode = "MPS";
this.rarity = Rarity.MYTHIC;
}
public RingsOfBrighthearth(final RingsOfBrighthearth card) {
super(card);
}
@Override
public RingsOfBrighthearth copy() {
return new RingsOfBrighthearth(this);
}
}

View file

@ -0,0 +1,54 @@
/*
* 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.masterpieceseries;
import java.util.UUID;
import mage.constants.Rarity;
/**
*
* @author fireshoes
*/
public class ScrollRack extends mage.sets.tempest.ScrollRack {
public ScrollRack(UUID ownerId) {
super(ownerId);
this.cardNumber = "22";
this.expansionSetCode = "MPS";
this.rarity = Rarity.MYTHIC;
}
public ScrollRack(final ScrollRack card) {
super(card);
}
@Override
public ScrollRack copy() {
return new ScrollRack(this);
}
}

View file

@ -0,0 +1,54 @@
/*
* 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.masterpieceseries;
import java.util.UUID;
import mage.constants.Rarity;
/**
*
* @author fireshoes
*/
public class SculptingSteel extends mage.sets.tenthedition.SculptingSteel {
public SculptingSteel(UUID ownerId) {
super(ownerId);
this.cardNumber = "23";
this.expansionSetCode = "MPS";
this.rarity = Rarity.MYTHIC;
}
public SculptingSteel(final SculptingSteel card) {
super(card);
}
@Override
public SculptingSteel copy() {
return new SculptingSteel(this);
}
}

View file

@ -0,0 +1,54 @@
/*
* 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.masterpieceseries;
import java.util.UUID;
import mage.constants.Rarity;
/**
*
* @author fireshoes
*/
public class SolRing extends mage.sets.revisededition.SolRing {
public SolRing(UUID ownerId) {
super(ownerId);
this.cardNumber = "24";
this.expansionSetCode = "MPS";
this.rarity = Rarity.MYTHIC;
}
public SolRing(final SolRing card) {
super(card);
}
@Override
public SolRing copy() {
return new SolRing(this);
}
}

View file

@ -0,0 +1,54 @@
/*
* 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.masterpieceseries;
import java.util.UUID;
import mage.constants.Rarity;
/**
*
* @author fireshoes
*/
public class SolemnSimulacrum extends mage.sets.magic2012.SolemnSimulacrum {
public SolemnSimulacrum(UUID ownerId) {
super(ownerId);
this.cardNumber = "25";
this.expansionSetCode = "MPS";
this.rarity = Rarity.MYTHIC;
}
public SolemnSimulacrum(final SolemnSimulacrum card) {
super(card);
}
@Override
public SolemnSimulacrum copy() {
return new SolemnSimulacrum(this);
}
}

View file

@ -0,0 +1,54 @@
/*
* 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.masterpieceseries;
import java.util.UUID;
import mage.constants.Rarity;
/**
*
* @author fireshoes
*/
public class StaticOrb extends mage.sets.tempest.StaticOrb {
public StaticOrb(UUID ownerId) {
super(ownerId);
this.cardNumber = "26";
this.expansionSetCode = "MPS";
this.rarity = Rarity.MYTHIC;
}
public StaticOrb(final StaticOrb card) {
super(card);
}
@Override
public StaticOrb copy() {
return new StaticOrb(this);
}
}

View file

@ -0,0 +1,54 @@
/*
* 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.masterpieceseries;
import java.util.UUID;
import mage.constants.Rarity;
/**
*
* @author fireshoes
*/
public class SteelOverseer extends mage.sets.magic2011.SteelOverseer {
public SteelOverseer(UUID ownerId) {
super(ownerId);
this.cardNumber = "27";
this.expansionSetCode = "MPS";
this.rarity = Rarity.MYTHIC;
}
public SteelOverseer(final SteelOverseer card) {
super(card);
}
@Override
public SteelOverseer copy() {
return new SteelOverseer(this);
}
}

View file

@ -0,0 +1,52 @@
/*
* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are
* permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* The views and conclusions contained in the software and documentation are those of the
* authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com.
*/
package mage.sets.masterpieceseries;
import java.util.UUID;
/**
*
* @author fireshoes
*/
public class SwordOfFeastAndFamine extends mage.sets.mirrodinbesieged.SwordOfFeastAndFamine {
public SwordOfFeastAndFamine(UUID ownerId) {
super(ownerId);
this.cardNumber = "28";
this.expansionSetCode = "MPS";
}
public SwordOfFeastAndFamine(final SwordOfFeastAndFamine card) {
super(card);
}
@Override
public SwordOfFeastAndFamine copy() {
return new SwordOfFeastAndFamine(this);
}
}

View file

@ -0,0 +1,54 @@
/*
* 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.masterpieceseries;
import java.util.UUID;
import mage.constants.Rarity;
/**
*
* @author fireshoes
*/
public class SwordOfFireAndIce extends mage.sets.darksteel.SwordOfFireAndIce {
public SwordOfFireAndIce(UUID ownerId) {
super(ownerId);
this.cardNumber = "29";
this.expansionSetCode = "MPS";
this.rarity = Rarity.MYTHIC;
}
public SwordOfFireAndIce(final SwordOfFireAndIce card) {
super(card);
}
@Override
public SwordOfFireAndIce copy() {
return new SwordOfFireAndIce(this);
}
}

View file

@ -0,0 +1,54 @@
/*
* 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.masterpieceseries;
import java.util.UUID;
import mage.constants.Rarity;
/**
*
* @author fireshoes
*/
public class SwordOfLightAndShadow extends mage.sets.darksteel.SwordOfLightAndShadow {
public SwordOfLightAndShadow(UUID ownerId) {
super(ownerId);
this.cardNumber = "30";
this.expansionSetCode = "MPS";
this.rarity = Rarity.MYTHIC;
}
public SwordOfLightAndShadow(final SwordOfLightAndShadow card) {
super(card);
}
@Override
public SwordOfLightAndShadow copy() {
return new SwordOfLightAndShadow(this);
}
}

View file

@ -0,0 +1,52 @@
/*
* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are
* permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* The views and conclusions contained in the software and documentation are those of the
* authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com.
*/
package mage.sets.masterpieceseries;
import java.util.UUID;
/**
*
* @author fireshoes
*/
public class VerdurousGearhulk extends mage.sets.kaladesh.VerdurousGearhulk {
public VerdurousGearhulk(UUID ownerId) {
super(ownerId);
this.cardNumber = "5";
this.expansionSetCode = "MPS";
}
public VerdurousGearhulk(final VerdurousGearhulk card) {
super(card);
}
@Override
public VerdurousGearhulk copy() {
return new VerdurousGearhulk(this);
}
}

View file

@ -81,10 +81,13 @@ public class CantBeBlockedTargetEffect extends RestrictionEffect {
StringBuilder sb = new StringBuilder();
Target target = mode.getTargets().get(0);
if (target.getMaxNumberOfTargets() > 1) {
if (target.getMaxNumberOfTargets() != target.getNumberOfTargets()) {
sb.append("up to ");
if (target.getMaxNumberOfTargets() != target.getNumberOfTargets()) {
sb.append("up to ");
if (target.getMaxNumberOfTargets() == 1) {
sb.append("one ");
}
}
if (target.getMaxNumberOfTargets() > 1) {
sb.append(CardUtil.numberToText(target.getMaxNumberOfTargets())).append(" ");
}
sb.append("target ").append(mode.getTargets().get(0).getTargetName());

View file

@ -32,7 +32,6 @@ import mage.abilities.effects.OneShotEffect;
import mage.cards.CardsImpl;
import mage.constants.Outcome;
import mage.constants.Zone;
import mage.filter.Filter;
import mage.filter.FilterPermanent;
import mage.filter.common.FilterControlledLandPermanent;
import mage.filter.predicate.mageobject.SubtypePredicate;
@ -49,30 +48,16 @@ import mage.util.CardUtil;
public class SweepEffect extends OneShotEffect {
private final String sweepSubtype;
private FilterPermanent setFilter = null;
private boolean notTarget = true;
public SweepEffect(String sweepSubtype) {
super(Outcome.Benefit);
this.sweepSubtype = sweepSubtype;
this.staticText = "<i>Sweep</i> - Return any number of " + sweepSubtype + (sweepSubtype.endsWith("s") ? "" : "s") + " you control to their owner's hand";
}
public SweepEffect(FilterPermanent filter, String text, boolean notTarget) {
super(Outcome.Benefit);
this.sweepSubtype = text;
this.staticText = "Return any number of " + text + " you control to their owner's hand";
this.setFilter = filter;
this.notTarget = notTarget;
}
public SweepEffect(final SweepEffect effect) {
super(effect);
this.sweepSubtype = effect.sweepSubtype;
this.setFilter = effect.setFilter;
this.notTarget = effect.notTarget;
}
@Override
@ -84,15 +69,9 @@ public class SweepEffect extends OneShotEffect {
public boolean apply(Game game, Ability source) {
Player controller = game.getPlayer(source.getControllerId());
if (controller != null) {
FilterPermanent filter;
if (setFilter == null) {
filter = new FilterControlledLandPermanent(new StringBuilder("any number of ").append(sweepSubtype).append("s you control").toString());
filter.add(new SubtypePredicate(sweepSubtype));
} else {
filter = setFilter;
}
Target target = new TargetPermanent(0, Integer.MAX_VALUE, filter, notTarget);
FilterPermanent filter = new FilterControlledLandPermanent(new StringBuilder("any number of ").append(sweepSubtype).append("s you control").toString());
filter.add(new SubtypePredicate(sweepSubtype));
Target target = new TargetPermanent(0, Integer.MAX_VALUE, filter, true);
if (controller.chooseTarget(outcome, target, source, game)) {
game.getState().setValue(CardUtil.getCardZoneString("sweep", source.getSourceId(), game), target.getTargets().size());
controller.moveCards(new CardsImpl(target.getTargets()), Zone.HAND, source, game);

View file

@ -44,6 +44,8 @@ public class DeckImporterUtil {
return new TxtDeckImporter();
} else if (file.toLowerCase().endsWith("dck")) {
return new DckDeckImporter();
} else if (file.toLowerCase().endsWith("dek")) {
return new DekDeckImporter();
} else {
return null;
}

View file

@ -0,0 +1,50 @@
package mage.cards.decks.importer;
import mage.cards.decks.DeckCardInfo;
import mage.cards.decks.DeckCardLists;
import mage.cards.repository.CardInfo;
import mage.cards.repository.CardRepository;
/**
* Created by royk on 11-Sep-16.
*/
public class DekDeckImporter extends DeckImporter {
@Override
protected void readLine(String line, DeckCardLists deckList) {
if (line.length() == 0 || line.startsWith("#") || !line.contains("<Cards CatID")) {
return;
}
try {
// e.g. <Cards CatID="61202" Quantity="1" Sideboard="false" Name="Vildin-Pack Outcast" />
Integer cardCount = Integer.parseInt(extractAttribute(line, "Quantity"));
String cardName = extractAttribute(line, "Name");
Boolean isSideboard = "true".equals(extractAttribute(line, "Sideboard"));
CardInfo cardInfo = CardRepository.instance.findPreferedCoreExpansionCard(cardName, true);
if (cardInfo == null) {
sbMessage.append("Could not find card: '").append(cardName).append("' at line ").append(lineCount).append("\n");
} else {
for (int i = 0; i < cardCount; i++) {
DeckCardInfo deckCardInfo = new DeckCardInfo(cardInfo.getName(), cardInfo.getCardNumber(), cardInfo.getSetCode());
if(isSideboard) {
deckList.getSideboard().add(deckCardInfo);
} else {
deckList.getCards().add(deckCardInfo);
}
}
}
}catch (NumberFormatException nfe) {
sbMessage.append("Invalid number: ").append(extractAttribute(line, "Quantity")).append(" at line ").append(lineCount).append("\n");
}
}
private String extractAttribute(String line, String name) {
String searchString = name+"=\"";
int startDelim = line.indexOf(searchString)+searchString.length();
int endDelim = line.substring(startDelim).indexOf("\"");
return line.substring(startDelim, startDelim+endDelim);
}
}

View file

@ -43,17 +43,17 @@ public class EntersTheBattlefieldEvent extends GameEvent {
private Permanent target;
public EntersTheBattlefieldEvent(Permanent target, UUID sourceId, UUID playerId, Zone fromZone) {
super(EventType.ENTERS_THE_BATTLEFIELD, target.getId(), sourceId, playerId);
this.fromZone = fromZone;
this.target = target;
this(target, sourceId, playerId, fromZone, null);
}
public EntersTheBattlefieldEvent(Permanent target, UUID sourceId, UUID playerId, Zone fromZone, ArrayList<UUID> appliedEffects) {
super(EventType.ENTERS_THE_BATTLEFIELD, target.getId(), sourceId, playerId);
this.fromZone = fromZone;
this.target = target;
if (appliedEffects != null) {
this.appliedEffects = appliedEffects;
}
this.amount = 1; // Number of times to trigger (Panharmonicon can change that value)
}
public Zone getFromZone() {

View file

@ -884,7 +884,10 @@ public abstract class PermanentImpl extends CardImpl implements Permanent {
EntersTheBattlefieldEvent event = new EntersTheBattlefieldEvent(this, sourceId, getControllerId(), fromZone);
if (!game.replaceEvent(event)) {
if (fireEvent) {
game.addSimultaneousEvent(event);
// Trigger multiple times with Panharmonicon.
for (int i = 0; i < event.getAmount(); i++) {
game.addSimultaneousEvent(event);
}
}
return true;
}

View file

@ -109,6 +109,7 @@ Magic Player Rewards|magicplayerrewards|
Magic: The Gathering-Commander|commander|
Media Inserts|mediainserts|
Magic: The Gathering-Conspiracy|conspiracy|
Masterpiece Series|masterpieceseries|
Masters Edition|mastersedition|
Masters Edition II|masterseditionii|
Masters Edition III|masterseditioniii|

View file

@ -29659,42 +29659,58 @@ Acrobatic Maneuver|Kaladesh|1|C|{2}{W}|Instant|||Exile target creature you contr
Aerial Responder|Kaladesh|2|U|{1}{W}{W}|Creature - Dwarf Soldier|2|3|Flying, vigilance, lifelink|
Aetherstorm Roc|Kaladesh|3|R|{2}{W}{W}|Creature - Bird|3|3|Flying$Whenever Aetherstorm Roc or another creature enters the battlefield under your control, you get {E} <i>(an energy counter)</i>.$Whenever Aetherstorm Roc attacks, you may pay {E}{E}. If you do, put a +1/+1 creature on it and tap up to one target creature defending player controls.|
Angel of Invention|Kaladesh|4|M|{3}{W}{W}|Creature - Angel|2|1|Flying, vigilance, lifelink$Fabricate 2 <i>(When this creature enters the battlefield, put two +1/+1 counters on it or create two 1/1 colorless Servo artifact creature tokens.)</i>$Other creatures you control get +1/+1.|
Authority of the Consulate|Kaladesh|5|{W}|Enchantment|||Creatures your opponents control enter the battlefield tapped.$Whenever a creature enters the battlefield under an opponent's control, you gain 1 life.|
Cataclysmic Gearhulk|Kaladesh|9|M|{3}{W}{W}|Artifact Creature - Construct|4|5|Vigilance$When Cataclysmic Gearhulk enters the battlefield, each player chooses from among the non-land permanents he or she controls an artifact, a creature, an enchantment, and a planeswalker, then sacrifices the rest.|
Consulate Surveillance|Kaladesh|10|U|{3}{W}|Enchantment|||When Consulate Surveillance enters the battlefield, you get {E}{E}{E}{E} <i>(four energy counters)</i>.$Pay {E}{E}: Prevent all damage that would be dealt to you this turn by a source of your choice.|
Fragmentize|Kaladesh|14|C|{W}|Sorcery|||Destroy target artifact or enchantment with converted mana cost 4 or less.|
Glint-Sleeve Artisan|Kaladesh|17|C|{2}{W}|Creature - Dwarf Artificer|2|2|Fabricate 1 <i>(When this creature enters the battlefield, put a +1/+1 counter on it or create a 1/1 colorless Servo artifact creature token.)</i>|
Inspired Charge|Kaladesh|20|C|{2}{W}{W}|Instant|||Creatures you control get +2/+1 until end of turn.|
Master Trinketcrafter|Kaladesh|21|R|{2}{W}|Creature - Dwarf Artificer|3|2|Servo and Thopter creatures you control get +1/+1.${3}{W}: Create a 1/1 colorless Servo artifact creature token.|
Propeller Pioneer|Kaladesh|24|C|{3}{W}|Creature - Human Artificer|2|1|Flying$Fabricate 1 <i>(When this creature enters the battlefield, put a +1/+1 counter on it or create a 1/1 colorless Servo artifact creature token.)</i>|
Tasseled Dromedary|Kaladesh|30|C|{W}|Creature - Camel|0|4||
Thriving Ibex|Kaladesh|31|C|{3}{W}|Creature - Goat|2|4|When Thriving Ibex enters the battlefield, you get {E}{E} <i>(two energy counters)</i>.$Whenever Thriving Ibex attacks, you may pay {E}{E}. If you do, put a +1/+1 counter on it.|
Toolcraft Exemplar|Kaladesh|32|R|{W}|Creature - Dwarf Artificer|1|1|At the beginning of your combat step, if you control an artifact, Toolcraft Exemplar gets +2/+1 until end of turn. If you control at least 3 artifacts, it also gains first strike until end of turn.|
Wispweaver Angel|Kaladesh|35|U|{4}{W}{W}|Creature - Angel|4|4|Flying$When Wispweaver Angel enters the battlefield, you may exile another target creature you control, then return that card to the battlefield under its owner's control.|
Aether Tradewinds|Kaladesh|38|C|{2}{U}|Instant|||Return target permanent you control and target permanent you don't control to their owners' hands.|
Ceremonious Rejection|Kaladesh|40|U|{U}|Instant|||Counter target colorless spell.|
Curio Vendor|Kaladesh|42|C|{1}{U}|Creature - Vedalken|2|1||
Glint-Nest Crane|Kaladesh|50|U|{1}{U}|Creature - Bird|1|3|Flying$When Glint-Nest Crane enters the battlefield, look at the top four cards of your library. You may reveal an artifact card from among them and put it into your hand. Put the rest on the bottom of your library in any order.|
Metallurgic Summonings|Kaladesh|56|M|{3}{U}{U}|Enchantment|||Whenever you cast an instant or sorcery spell, create an X/X colorless Construct artifact creature token, where X is that spell's converted mana cost.${3}{U}{U}, Exile Metallurgic Summons: Return all instant and sorcery cards from your graveyard to your hand. Activate this ability only if you control six or more artifacts.|
Padeem, Consul of Innovation|Kaladesh|R|{3}{U}|Legendary Creature - Vedalken Artificer|1|4|Artifacts you control have hexproof.$At the beginning of your upkeep, if you control the artifact with the highest converted mana cost or tied for the highest converted mana cost, draw a card.|
Paradoxical Outcome|Kaladesh|60|R|{3}{U}|Instant|||Return any number of target nonland, nontoken permanents you control to their owners' hands. Draw a card for each card return to your hand this way.|
Saheeli's Artistry|Kaladesh|62|R|{4}{U}{U}|Sorcery|||Choose one or both —$• Create a token that's a copy of target artifact.$• Create a token that's a copy of target creature, except that it's an artifact in addition to its other types.|
Shrewd Negotiation|Kaladesh|64|U|{4}{U}|Sorcery|||Exchange control of target artifact you control and target artifact or creature you don't control.|
Thriving Turtle|Kaladesh|66|C|{U}|Creature - Turtle|0|3|When Thriving Turtle enters the battlefield, you get {E}{E} <i>(two energy counters)</i>.$Whenever Thriving Turtle attacks, you may pay {E}{E}. If you do, put a +1/+1 counter on it.|
Torrential Gearhulk|Kaladesh|67|M|{4}{U}{U}|Artifact Creature - Construct|5|6|Flash$When Torrential Gearhulk enters the battlefield, you may cast target instant card from your graveyard without paying its mana cost. If that card would be put into your graveyard this turn, exile it instead.|
Aetherborn Marauder|Kaladesh|71|U|{3}{B}|Creature - Aetherborn Rogue|2|2|Flying, lifelink$When Aetherborn Marauder enters the battlefield, move any number of +1/+1 counters from other permanents you control onto Aetherborn Marauder.|
Demon of Dark Schemes|Kaladesh|73|M|{3}{B}{B}{B}|Creature - Demon|5|5|Flying$When Demon of Dark Schemes enters the battlefield, all other creatures get -2/-2 until end of turn.$Whenever another creature dies, you get {E} <i>(an energy counter)</i>.${2}{B}, Pay {E}{E}{E}{E}: Put target creature card from a graveyard onto the battlefiend tapped under your control.|
Die Young|Kaladesh|76|C|{1}{B}|Sorcery|||Choose target creature. You get {E}{E} <i>(two energy counters)</i>, then you may pay any amount of {E}. The creature gets -1/-1 until end of turn for each {E} paid this way.|
Eliminate the Competition|Kaladesh|78|R|{4}{B}|Sorcery|||As an additional cost to cast Eliminate the Competition, sacrifice X creatures.$Destroy X target creatures.|
Essence Extraction|Kaladesh|80|U|{1}{B}{B}|Instant|||Essence Extraction deals 3 damage to target creature and you gain 3 life.|
Fortuitous Find|Kaladesh|81|C|{2}{B}|Sorcery|||Choose one or both &mdash; Return target artifact card from your graveyard to your hand.; or Return target creature card from your graveyard to your hand.|
Gonti, Lord of Luxury|Kaladesh|84|R|{2}{B}{B}|Legendary Creature - Aetherborn Rogue|2|3|Deathtouch$When Gonti, Lord of Luxury enters the battlefield, look at the top four cards of target opponent's library, exile one of them face down, then put the rest on the bottom of that library in a random order. For as long as that card remains exiled, you may look at it, you may cast it, and you may spend mana as though it were mana of any type to cast it.|
Lawless Broker|Kaladesh|86|C|{2}{B}|Creature - Aetherborn Rogue|3|2|When Lawless Broker dies, put a +1/+1 counter on target creature you control.|
Live Fast|Kaladesh|87|C|{2}{B}|Sorcery|||You draw two cards, lose 2 life, and gain {E}{E} <i>(two energy counters)</i>.|
Lost Legacy|Kaladesh|88|R|{1}{B}{B}|Sorcery|||Name a nonartifact, nonland card. Search target player's graveyard, hand, and library for any number of cards with that name and exile them. That player shuffles his or her library, then draws a card for each card exiled from hand this way.|
Maulfist Squad|Kaladesh|91|C|{3}{B}|Creature - Human Artificer|3|1|Menace$Fabricate 1 <i>(When this creature enters the battlefield, put a +1/+1 counter on it or create a 1/1 colorless Servo artifact creature token.)</i>|
Midnight Oil|Kaladesh|92|{R}|{2}{B}{B}|Enchantment|||Midnight Oil enters the battlefield with seven time counters on it.$At the beginning of your draw step, draw an additional card, then remove two time counters from Midnight Oil.$Your maximum hand size is equal to the number of time counters on Midnight Oil.$Whenever you discard a card, you lose 1 life.|
Morbid Curiosity|Kaladesh|94|U|{1}{B}{B}|Sorcery|||As an additional cost to cast Morbid Curiosity, sacrifice an artifact or creature.$Draw cards equal to the converted mana cost of the sacrificed permanent.|
Noxious Gearhulk|Kaladesh|96|M|{4}{B}{B}|Artifact Creature - Construct|5|4|Menace$When Noxious Gearhulk enters the battlefield, you may destroy another target creature. If a creature is destroyed this way, you gain life equal to its toughness.|
Ovalchase Daredevil|Kaladesh|97|U|{3}{B}|Creature - Human Pilot|4|2|Whenever an artifact enters the battlefield under your control, you may return Ovalchase Daredevil from your graveyard to your hand.|
Prakhata Club Security|Kaladesh|98|C|{3}{B}|Creature - Aetherborn Warrior|3|4||
Thriving Rats|Kaladesh|102|C|{1}{B}|Creature - Rat|1|2|When Thriving Rats enters the battlefield, you get {E}{E} <i>(two energy counters(</i>.$Whenever Thriving Rats attacks, you may pay {E}{E}. If you do, put a +1/+1 counter on it.|
Underhanded Designs|Kaladesh|104|U|{1}{B}|Enchantment|||Whenever an artifact enters the battlefield under your control, you may pay {1}. If you do, each opponent loses 1 life and you gain 1 life.${1}{B}, Sacrifice Underhanded Designs: Destroy target creature. Activate this ability only if you control two or more artifacts.|
Chandra, Torch of Defiance|Kaladesh|110|M|{2}{R}{R}|Planeswalker - Chandra|||+1: Exile the top card of your library. You may cast that card. If you don't, Chandra, Torch of Defiance deals 2 damage to each opponent.$+1: Add {R}{R} to your mana pool.$-3: Chandra, Torch of Defiance deals 4 damage to target creature.$-7: You get an emblem with "Whenever you cast a spell, this emblem deals 5 damage to target creature or player."|
Combustible Gearhulk|Kaladesh|112|M|{4}{R}{R}|Artifact Creature - Construct|6|6|First strike$When Combustible Gearhulk enters the battlefield, target opponent may have you draw three cards. If the player doesn't, put the top three cards of your library into your graveyard, then Combustible Gearhulk deals damage to that player equal to the total converted mana cost of those cards.|
Furious Reprisal|Kaladesh|115|U|{3}{R}|Sorcery|||Furious Reprisal deals 2 damage to each of two target creatures and/or players.|
Harnessed Lightning|Kaladesh|117|U|{1}{R}|Instant|||Choose target creature. You get {E}{E}{E} <i>(three energy counters)</i>, then you may pay any amount of {E}. Harnessed Lightning deals that much damage to that creature.|
Incendiary Sabotage|Kaladesh|119|U|{2}{R}{R}|Instant|||As an additional cost to cast Incendiary Sabotage, sacrifice an artifact.$Incendiary Sabotage deals 3 damage to each creature.|
Inventor's Apprentice|Kaladesh|120|U|{R}|Creature - Human Artificer|1|2|Inventor's Apprentice gets +1/+1 as long as you control an artifact.|
Lathnu Hellion|Kaladesh|121|R|{2}{R}|Creature - Hellion|4|4|Haste$When Lathnu Hellion enters the battlefield, you get {E}{E} <i>(two energy counters)</i>.$At the beginning of your end step, sacrifice Lathnu Hellion unless you pay {E}{E}.|
Madcap Experiment|Kaladesh|122|R|{3}{R}|Sorcery|||Reveal cards from the top of your library until you reveal an artifact card. Put that card onto the battlefield and the rest on the bottom of your library in a random order. Madcap Experiment deals damage to you equal to the number of cards revealed this way.|
Pia Nalaar|Kaladesh|124|R|{2}{R}|Legendary Creature - Human Artificer|2|2|When Pia Nalaar enters the battlefield, create a 1/1 colorless Thopter artifact creature token with flying.${1}{R}: Target artifact creature gets +1/+0 until end of turn.${1}, Sacrifice an artifact: Target creature can't block this turn.|
Ruinous Gremlin|Kaladesh|128|C|{R}|Creature - Gremlin|1|1|{2}{R}, Sacrifice Ruinous Gremlin: Destroy target artifact.|
Salivating Gremlins|Kaladesh|129|C|{2}{R}|Creature - Gremlin|2|3|Whenever an artifact enters the battlefield under your control, Salivating Gremlins gets +2/+0 and gains trample until end of turn.|
Skyship Stalker|Kaladesh|130|R|{2}{R}{R}|Creature - Dragon|3|3|Flying${R}: Skyship Stalker gains +1/+0 until end of turn.${R}: Skyship Stalker gains first strike until end of turn.${R}: Skyship Stalker gains haste until end of turn.|
Speedway Fanatic|Kaladesh|132|U|{1}{R}|Creature - Human Pilot|2|1|Haste$Whenever Speedway Fanatic crews a Vehicle, that Vehicle gains haste until end of turn.|
Start Your Engines|Kaladesh|135|U|{3}{R}|Sorcery|||Vehicles you control becomes artifact creatures until end of turn. Creatures you control get +2/+0 until end of turn.|
@ -29705,6 +29721,7 @@ Welding Sparks|Kaladesh|140|C|{2}{R}|Instant|||Welding Sparks deals X damage to
Arborback Stomper|Kaladesh|142|U|{3}{G}{G}|Creature - Beast|5|4|Trample$When Arborback Stomper enters the battlefield, you gain 5 life.|
Architect of the Untamed|Kaladesh|143|R|{2}{G}|Creature - Elf Artificer Druid|2|3|Whenever a land enters the battlefiend under your control, you get {E} <i>(an energy counter)</i>.$Pay {E}{E}{E}{E}{E}{E}{E}{E}: Create a 6/6 colorless Beast artifact creature token.|
Armorcraft Judge|Kaladesh|144|U|{3}{G}|Creature - Elf Artificer|3|3|When Armorcraft Judge enters the battlefield, draw a card for each creature you control with a +1/+1 counter on it.|
Blossoming Defense|Kaladesh|146|U|{G}|Instant|||Target creature you control gets +2/+2 and gains hexproof until end of turn.|
Bristling Hydra|Kaladesh|147|R|{2}{G}{G}|Creature - Hydra|4|3|When Bristling Hydra enters the battlefield, you get {E}{E}{E} <i>(three energy counters)</i>.$Pay {E}{E}{E}: Put a +1/+1 count on Bristling Hydra. It gains hexproof until end of turn.|
Cultivator of Blades|Kaladesh|151|R|{3}{G}{G}|Creature - Elf Artificer|1|1|Fabricate 2$Whenever Cultivator of Blades attacks, you may have other attacking creatures get +X/+X until end of turn, where X is Cultivator of Blades's power.|
Dubious Challenge|Kaladesh|152|R|{3}{G}|Sorcery|||Look at the top ten cards of your library, exile up to two creature cards from among them, then shuffle your library. Target opponent may choose one of the exiled cards and put it onto the battlefield under his or her control. Put the rest onto the battlefield under your control.|
@ -29716,21 +29733,26 @@ Thriving Rhino|Kaladesh|171|C|{2}{G}|Creature - Rhino|2|3|When Thriving Rhino en
Verdurous Gearhulk|Kaladesh|172|M|{3}{G}{G}|Artifact Creature - Construct|4|4|Trample$When Verdurous Gearhulk enters the battlefield, distribute four +1/+1 counters among any number of target creatures you control.|
Wildest Dreams|Kaladesh|174|R|{X}{X}{G}|Sorcery|||Return X target cards from your graveyard to your hand.$Exile Wildest Dreams.|
Cloudblazer|Kaladesh|176|U|{3}{W}{U}|Creature - Human Scout|2|2|Flying$When Cloudblazer enters the battlefield, you gain 2 life and draw two cards.|
Contraband Kingpin|Kaladesh|177|U|{U}{B}|Creature - Aetherborn Rogue|1|4|Lifelink$Whenever an artifact enters the battlefield under your control, scry 1.|
Depala, Pilot Exemplar|Kaladesh|178|R|{1}{R}{W}|Legendary Creature - Dwarf Pilot|3|3|Other Dwarves you control get +1/+1.$Each Vehicle you control gets +1/+1 as long as it's a creature.$Whenever Depala, Pilot Exemplar becomes tapped, you may pay {X}. If you do, reveal the top X cards of your library, put all Dwarf and Vehicle cards from among them into your hand, then put the rest on the bottom of your library in a random order.|
Dovin Baan|Kaladesh|179|M|{2}{W}{U}|Planeswalker - Dovin|||+1: Until your next turn, up to one target creature gets -3/-0 and its activated abilities can't be activated.$-1: You gain 2 life and draw a card.$-7: You get an emblem with "Your opponents can't untap more than two permanents during their untap steps."|
Kambal, Consul of Allocation|Kaladesh|183|R|{1}{W}{B}|Legendary Creature - Human Advisor|2|3|Whenever an opponent casts a noncreature spell, that player loses 2 life and you gain 2 life.|
Rashmi, Eternities Crafter|Kaladesh|184|M|{2}{G}{U}|Legendary Creature - Elf Druid|2|3|Whenever you cast your first spell each turn, reveal the top card of your library. If it's a nonland card with converted mana cost less than that spell's, you may cast it without paying its mana cost. If you don't cast the revealed card, put it into your hand. |
Saheeli Rai|Kaladesh|186|M|{1}{U}{R}|Planeswalker - Saheeli|3|+1: Scry 1. Saheeli Rai deals 1 damage to each opponent.$-2: Create a token that's a copy of target artifact or creature you control, except it's an artifact in addition to its other types. That token gains haste. Exile it at the beginning of the next end step.$-7: Search your library for up to three artifact cards with different names, put them onto the battlefield, then shuffle your library.|
Unlicensed Disintegration|Kaladesh|187|U|{1}{B}{R}|Instant|||Destroy target creature. If you control an artifact, Unlicensed Disintegration deals 3 damage to that creature's controller.|
Voltaic Brawler|Kaladesh|189|U|{R}{G}|Creature - Human Warrior|3|2|When Voltaic Brawler enters the battlefield, you get {E}{E} <i>(two energy counters)</i>.$Whenever Voltaic Brawler attacks, you may pay {E}. If you do, it gets +1/+1 and gains trample until end of turn.|
Whirler Virtuoso|Kaladesh|190|U|{1}{U}{R}|Creature - Vedalken Artificer|2|3|When Whirler Virtuoso enters the battlefield, you get {E}{E}{E} <i>(three energy counters)</i>.$Pay {E}{E}{E}: Create a 1/1 colorless Thopter artifact creature token with flying.|
Aetherflux Reservoir|Kaladesh|192|R|{4}|Artifact|||Whenever you cast a spell, you gain 1 life for each spell you've cast this turn.$Pay 50 life: Aetherflux Reservoir deals 50 damage to target creature or player.|
Aetherworks Marvel|Kaladesh|193|M|{4}|Legendary Artifact|||Whenever a permanent you control is put into a graveyard, you get {E} <i>(an energy counter)</i>.${T}, Pay {E}{E}{E}{E}{E}{E}: Look at the top six cards of your library. You may cast a card from among them without paying its mana cost. Put the rest on the bottom of your library in a random order.|
Animation Module|Kaladesh|194|R|{1}|Artifact|||Whenever one or more +1/+1 counters are placed on a permanent you control, you may pay {1}. If you do, create a 1/1 colorless Servo artifact creature token.${3}, {T}: Choose a counter on target permanent or player. Give that permanent or player another counter of that kind.|
Bomat Bazaar Barge|Kaladesh|198|U|{4}|Artifact - Vehicle|5|5|When Bomat Bazaar Barge enters the battlefield, draw a card.$Crew 3 <i>(Tap any number of creatures you control with total power 3 or more: This Vehicle becomes an artifact creature until end of turn.)</i>|
Bomat Courier|Kaladesh|199|R|{1}|Artifact Creature - Construct|1|1|Haste$Whenever Bomat Courier attacks, exile the top card of your library face down. <i>(You can't look at it.)</i>${R}, Discard your hand, Sacrifice Bomat Courier: Put all cards exiled with Bomat Courier into their owners' hands.|
Cogworker's Puzzleknot|Kaladesh|201|C|{2}|Artifact|||When Cogworker's Puzzleknot enters the battlefield, create a 1/1 colorless Servo artifact creature token.${1}{W}, Sacrifice Cogworker's Puzzleknot: Create a 1/1 colorless Servo artifact creature token.|
Cultivator's Caravan|Kaladesh|203|R|{3}|Artifact - Vehicle|5|5|{T}: Add one mana of any color to your mana pool.$Crew 3 <i>(Tap any number of creatures you control with total power 3 or more: This Vehicle becomes an artifact creature until end of turn.)</i>|
Decoction Module|Kaladesh|205|U|{2}|Artifact|||Whenever a creature enters the battlefield under your control, you get {E} <i>(an energy counter)</i>.${4}, {T}: Return target creature you control to its owner's hand.|
Demolition Stomper|Kaladesh|206|U|{6}|Artifact - Vehicle|10|7|Demolition Stomper can't be blocked by creature with power 2 or less.$Crew 5 <i>(Tap any number of creatures you control with total power 5 or more: This Vehicle becomes an artifact creature until end of turn.)</i>|
Dynavolt Tower|Kaladesh|208|R|{3}|Artifact|||Whenever you cast an instant or sorcery spell, you get {E}{E} <i>(two energy counters)</i>.${T}, Pay {E}{E}{E}{E}{E}: Dynavolt Tower deals 3 damage to target creature or player.|
Electrostatic Pummeler|Kaladesh|210|R|{3}|Artifact Creature - Construct|1|1|When Electrostatic Pummeler enters the battlefield, you get {E}{E}{E} <i>(three energy counters)</i>.$Pay {E}{E}{E}: Electrostatic Pummeler gets +X/+X until end of turn, where X is its power.|
Fabrication Module|Kaladesh|211|U|{3}|Artifact|||Whenever you get one or more {E} <i>(energy counters)</i>, put a +1/+1 counter on target creature you control.${4}, {T}: You get {E}.|
Filigree Familiar|Kaladesh|212|U|{3}|Artifact Creature - Fox|2|2|When Filigree Familiar enters the battlefield, you gain 2 life.$When Filigree Familiar dies, draw a card.|
Fireforger's Puzzleknot|Kaladesh|213|C|{2}|Artifact|||When Fireforger's Puzzleknot enters the battlefield, it deals 1 damage to target creature or player.${2}{R}, Sacrifice Fireforger's Puzzleknot: It deals 1 damage to target creature or player.|
@ -29742,6 +29764,7 @@ Key to the City|Kaladesh|220|R|{2}|Artifact|||{T}, Discard a card: Up to one tar
Metalspinner's Puzzleknot|Kaladesh|221|C|{2}|Artifact|||When Metalspinner's Puzzleknot enters the battlefield, you draw a card and you lose 1 life.${2}{B}, Sacrifice Metalspinner's Puzzleknot: You draw a card and you lose 1 life.|
Ovalchase Dragster|Kaladesh|225|U|{4}|Artifact - Vehicle|6|1|Trample, haste$Crew 1 <i>(Tap any number of creatures you control with total power 1 or more: This Vehicle becomes an artifact creature until end of turn.)</i>|
Panharmonicon|Kaladesh|226|R|{4}|Artifact|||If an artifact or creature entering the battlefield causes a triggered ability of a permanent you control to trigger, that ability triggers an additional time.|
Scrapheap Scrounger|Kaladesh|231|R|{2}|Artifact Creature - Construct|3|2|Scrapheap Scrounger can't block.${1}{B}, Exile another creature card from your graveyard: Return Scrapheap Scrounger from your graveyard to the battlefield.|
Sky Skiff|Kaladesh|233|C|{2}|Artifact - Vehicle|2|3|Flying$Crew 1 <i>(Tap any number of creatures you control with total power 1 or more: This Vehicle becomes an artifact creature until end of turn.)</i>|
Skysovereign, Consul Flagship|Kaladesh|234|M|{5}|Legendary Artifact - Vehicle|6|5|Flying$Whenever Skysovereign, Consul Flagship enters the battlefield or attacks, it deals 3 damage to target creature or planeswalker an opponent controls.$Crew 3 <i>(Tap any number of creatures you control with total power 3 or more: This Vehicle becomes an artifact creature until end of turn.)</i>|
Smuggler's Copter|Kaladesh|235|R|{2}|Artifact - Vehicle|3|3|Flying$Whenever Smuggler's Copter attacks or blocks, you may draw a card. If you do, discard a card.$Crew 1 <i>(Tap any number of creatures you control with total power 1 or more: This Vehicle becomes an artifact creature until end of turn.)</i>|
@ -29754,5 +29777,50 @@ Concealed Courtyard|Kaladesh|245|R||Land|||Concealed Courtyard enters the battle
Inspiring Vantage|Kaladesh|246|R||Land|||Inspiring Vantage enters the battlefield tapped unless you control two or fewer other lands.${T}: Add {R} or {W} to your mana pool.|
Inventors' Fair|Kaladesh|247|R||Legendary Land|||At the beginning of your upkeep, if you control three or more artifacts, you gain 1 life.${t}: Add {C} to your mana pool.${4}, {T}, Sacrifice Inventors' Fair: Search your library for an artifact card, reveal it, put it into your hand, then shuffle your library. Activate this ability only if you control threeor more artifacts.|
Spirebluff Canal|Kaladesh|249|R||Land|||Spirebluff Canal enters the battlefield tapped unless you control two or fewer other lands.${T}: Add {U} or {R} to your mana pool.|
Plains|Kaladesh|250|L||Basic Land - Plains|||W|
Plains|Kaladesh|251|L||Basic Land - Plains|||W|
Plains|Kaladesh|252|L||Basic Land - Plains|||W|
Island|Kaladesh|253|L||Basic Land - Island|||U|
Island|Kaladesh|254|L||Basic Land - Island|||U|
Island|Kaladesh|255|L||Basic Land - Island|||U|
Swamp|Kaladesh|256|L||Basic Land - Swamp|||B|
Swamp|Kaladesh|257|L||Basic Land - Swamp|||B|
Swamp|Kaladesh|258|L||Basic Land - Swamp|||B|
Mountain|Kaladesh|259|L||Basic Land - Mountain|||R|
Mountain|Kaladesh|260|L||Basic Land - Mountain|||R|
Mountain|Kaladesh|261|L||Basic Land - Mountain|||R|
Forest|Kaladesh|261|L||Basic Land - Forest|||G|
Forest|Kaladesh|262|L||Basic Land - Forest|||G|
Forest|Kaladesh|263|L||Basic Land - Forest|||G|
Chandra, Pyrogenius|Kaladesh|265|M|{4}{R}{R}|Planeswalker - Chandra|||+2: Chandra, Pyrogenius deals 2 damage to each opponent.$-3: Chandra, Pyrogenius deals 4 damage to target creature.$-10: Chandra, Pyrogenius deals 6 damage to target player and each creature he or she controls.|
Nissa, Nature's Artisan|Kaladesh|270|M|{4}{G}{G}|Planeswalker - Nissa|||+3: You gain 3 life.$-4: Reveal the top two cards of your library. Put all land cards from among them onto the battlefield and the rest into your hand.$-12: Creatures you control get +5/+5 and gain trample until end of turn.|
Nissa, Nature's Artisan|Kaladesh|270|M|{4}{G}{G}|Planeswalker - Nissa|||+3: You gain 3 life.$-4: Reveal the top two cards of your library. Put all land cards from among them onto the battlefield and the rest into your hand.$-12: Creatures you control get +5/+5 and gain trample until end of turn.|
Cataclysmic Gearhulk|Masterpiece Series|1|M|{3}{W}{W}|Artifact Creature - Construct|4|5|Vigilance$When Cataclysmic Gearhulk enters the battlefield, each player chooses an artifact, a creature, an enchantment, and a planeswalker from among the nonland permanents he or she controls, the sacrifices the rest.|
Combustible Gearhulk|Masterpiece Series|2|M|{4}{R}{R}|Artifact Creature - Construct|6|6|First strike$When Combustible Gearhulk enters the battlefield, target opponent may have you draw three cards. If the player doesn't, put the top three cards of your library into your graveyard, then Combustible Gearhulk deals damage to that player equal to the total converted mana cost of those cards.|
Noxious Gearhulk|Masterpiece Series|3|M|{4}{B}{B}|Artifact Creature - Construct|5|4|Menace$When Noxious Gearhulk enters the battlefield, you may destroy another target creature. If a creature is destroyed this way, you gain life equal to its toughness.|
Torrential Gearhulk|Masterpiece Series|4|M|{4}{U}{U}|Artifact Creature - Construct|5|6|Flash$When Torrential Gearhulk enters the battlefield, you may cast target instant card from your graveyard without paying its mana cost. If that card would be put into your graveyard this turn, exile it instead.|
Verdurous Gearhulk|Masterpiece Series|5|M|{3}{G}{G}|Artifact Creature - Construct|4|4|Trample$When Verdurous Gearhulk enters the battlefield, distribute four +1/+1 counters among any number of target creatures you control.|
AEther Vial|Masterpiece Series|6|M|{1}|Artifact|||At the beginning of your upkeep, you may put a charge counter on &AElig;ther Vial.${tap}: You may put a creature card with converted mana cost equal to the number of charge counters on &AElig;ther Vial from your hand onto the battlefield.|
Champion's Helm|Masterpiece Series|7|M|{3}|Artifact - Equipment|||Equipped creature gets +2/+2.$As long as equipped creature is legendary, it has hexproof. <i>(It can't be the target of spells or abilities your opponents control.)</i>$Equip {1}|
Chromatic Lantern|Masterpiece Series|8|M|{3}|Artifact|||Lands you control have "{tap}: Add one mana of any color to your mana pool."${tap}: Add one mana of any color to your mana pool.|
Chrome Mox|Masterpiece Series|9|M|{0}|Artifact|||Imprint - When Chrome Mox enters the battlefield, you may exile a nonartifact, nonland card from your hand.${tap}: Add one mana of any of the exiled card's colors to your mana pool.|
Cloudstone Curio|Masterpiece Series|10|M|{3}|Artifact|||Whenever a nonartifact permanent enters the battlefield under your control, you may return another permanent you control that shares a card type with it to its owner's hand.|
Crucible of Worlds|Masterpiece Series|11|M|{3}|Artifact|||You may play land cards from your graveyard.|
Gauntlet of Power|Masterpiece Series|12|M|{5}|Artifact|||As Gauntlet of Power enters the battlefield, choose a color.$Creatures of the chosen color get +1/+1.$Whenever a basic land is tapped for mana of the chosen color, its controller adds one mana of that color to his or her mana pool.|
Hangarback Walker|Masterpiece Series|13|M|{X}{X}|Artifact Creature - Construct|0|0|Hangarback Walker enters the battlefield with X +1/+1 counters on it.$When Hangarback Walker dies, create a 1/1 colorless Thopter artifact creature token for each +1/+1 counter on Hangarback Walker.${1}, {T}: Put a +1/+1 counter on Hangarback Walker.|
Lightning Greaves|Masterpiece Series|14|M|{2}|Artifact - Equipment|||Equipped creature has haste and shroud. <i>(It can't be the target of spells or abilities.)</i>$Equip {0}|
Lotus Petal|Masterpiece Series|15|M|{0}|Artifact|||{tap}, Sacrifice Lotus Petal: Add one mana of any color to your mana pool.|
Mana Crypt|Masterpiece Series|16|M|{0}|Artifact|||At the beginning of your upkeep, flip a coin. If you lose the flip, Mana Crypt deals 3 damage to you.${T}: Add {C}{C} to your mana pool.|
Mana Vault|Masterpiece Series|17|M|{1}|Artifact|||Mana Vault doesn't untap during your untap step.$At the beginning of your upkeep, you may pay {4}. If you do, untap Mana Vault.$At the beginning of your draw step, if Mana Vault is tapped, it deals 1 damage to you.${tap}: Add {C}{C}{C} to your mana pool.|
Mind's Eye|Masterpiece Series|18|M|{5}|Artifact|||Whenever an opponent draws a card, you may pay {1}. If you do, draw a card.|
Mox Opal|Masterpiece Series|19|M|{0}|Legendary Artifact|||Metalcraft - {tap}: Add one mana of any color to your mana pool. Activate this ability only if you control three or more artifacts.|
Painter's Servant|Masterpiece Series|20|M|{2}|Artifact Creature - Scarecrow|1|3|As Painter's Servant enters the battlefield, choose a color.$All cards that aren't on the battlefield, spells, and permanents are the chosen color in addition to their other colors.|
Rings of Brighthearth|Masterpiece Series|21|M|{3}|Artifact|||Whenever you activate an ability, if it isn't a mana ability, you may pay {2}. If you do, copy that ability. You may choose new targets for the copy.|
Scroll Rack|Masterpiece Series|22|M|{2}|Artifact|||{1}, {tap}: Exile any number of cards from your hand face down. Put that many cards from the top of your library into your hand. Then look at the exiled cards and put them on top of your library in any order.|
Sculpting Steel|Masterpiece Series|23|M|{3}|Artifact|||You may have Sculpting Steel enter the battlefield as a copy of any artifact on the battlefield.|
Sol Ring|Masterpiece Series|24|M|{1}|Artifact|||{tap}: Add {C}{C} to your mana pool.|
Solemn Simulacrum|Masterpiece Series|25|M|{4}|Artifact Creature - Golem|2|2|When Solemn Simulacrum enters the battlefield, you may search your library for a basic land card, put that card onto the battlefield tapped, then shuffle your library.$When Solemn Simulacrum dies, you may draw a card.|
Static Orb|Masterpiece Series|26|M|{3}|Artifact|||As long as Static Orb is untapped, players can't untap more than two permanents during their untap steps.|
Steel Overseer|Masterpiece Series|27|M|{2}|Artifact Creature - Construct|1|1|{tap}: Put a +1/+1 counter on each artifact creature you control.|
Sword of Feast and Famine|Masterpiece Series|28|M|{3}|Artifact - Equipment|||Equipped creature gets +2/+2 and has protection from black and from green.$Whenever equipped creature deals combat damage to a player, that player discards a card and you untap all lands you control.$Equip {2}|
Sword of Fire and Ice|Masterpiece Series|29|M|{3}|Artifact - Equipment|||Equipped creature gets +2/+2 and has protection from red and from blue.$Whenever equipped creature deals combat damage to a player, Sword of Fire and Ice deals 2 damage to target creature or player and you draw a card.$Equip {2}|
Sword of Light and Shadow|Masterpiece Series|30|M|{3}|Artifact - Equipment|||Equipped creature gets +2/+2 and has protection from white and from black.$Whenever equipped creature deals combat damage to a player, you gain 3 life and you may return up to one target creature card from your graveyard to your hand.$Equip {2}|

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