mirror of
https://github.com/correl/mage.git
synced 2025-01-11 19:13:02 +00:00
* Fixed a problem that Emblems created by permanents where its owner left the game caused errors in clients. Some handling cganges of emblems.
This commit is contained in:
parent
81caed134f
commit
8075ea2e50
56 changed files with 894 additions and 850 deletions
|
@ -594,7 +594,7 @@ public class MageFrame extends javax.swing.JFrame implements MageClient {
|
|||
missingCards = CardRepository.instance.findCards(new CardCriteria());
|
||||
LOGGER.info("Card pool load time: " + ((System.currentTimeMillis() - beforeCall) / 1000 + " seconds"));
|
||||
beforeCall = System.currentTimeMillis();
|
||||
if (DownloadPictures.checkForNewCards(missingCards)) {
|
||||
if (DownloadPictures.checkForMissingCardImages(missingCards)) {
|
||||
LOGGER.info("Card images checking time: " + ((System.currentTimeMillis() - beforeCall) / 1000 + " seconds"));
|
||||
UserRequestMessage message = new UserRequestMessage("New images available", "Card images are missing (" + missingCards.size() + "). Do you want to download the images?"
|
||||
+ "<br><br><i>You can deactivate the image download check on application start in the preferences.</i>");
|
||||
|
|
|
@ -43,7 +43,6 @@ import java.awt.event.MouseAdapter;
|
|||
import java.awt.event.MouseEvent;
|
||||
import java.util.*;
|
||||
import javax.swing.DefaultComboBoxModel;
|
||||
import javax.swing.JOptionPane;
|
||||
import javax.swing.JTable;
|
||||
import javax.swing.SwingUtilities;
|
||||
import javax.swing.table.DefaultTableCellRenderer;
|
||||
|
@ -55,6 +54,7 @@ import mage.cards.Sets;
|
|||
import mage.cards.repository.CardCriteria;
|
||||
import mage.cards.repository.CardInfo;
|
||||
import mage.cards.repository.CardRepository;
|
||||
import mage.client.MageFrame;
|
||||
import mage.client.cards.*;
|
||||
import mage.client.constants.Constants.SortBy;
|
||||
import mage.client.deckeditor.table.TableModel;
|
||||
|
@ -960,7 +960,7 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene
|
|||
filterCards();
|
||||
}
|
||||
} else {
|
||||
JOptionPane.showMessageDialog(null, "An expansion set must be selected to be able to generate a booster.");
|
||||
MageFrame.getInstance().showMessage("An expansion set must be selected to be able to generate a booster.");
|
||||
}
|
||||
}//GEN-LAST:event_btnBoosterActionPerformed
|
||||
|
||||
|
@ -993,7 +993,7 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene
|
|||
if (currentView.cardsSize() > CardGrid.MAX_IMAGES) {
|
||||
jToggleCardView.setSelected(false);
|
||||
jToggleListView.setSelected(true);
|
||||
JOptionPane.showMessageDialog(this, new StringBuilder("The card view can't be used for more than ").append(CardGrid.MAX_IMAGES).append(" cards.").toString());
|
||||
MageFrame.getInstance().showMessage("The card view can't be used for more than " + CardGrid.MAX_IMAGES + " cards.");
|
||||
} else {
|
||||
if (!(currentView instanceof CardGrid)) {
|
||||
toggleViewMode();
|
||||
|
|
|
@ -749,9 +749,9 @@ public final class GamePanel extends javax.swing.JPanel {
|
|||
if (change) {
|
||||
handCardsOfOpponentAvailable = !handCardsOfOpponentAvailable;
|
||||
if (handCardsOfOpponentAvailable) {
|
||||
JOptionPane.showMessageDialog(null, "You control other player's turn. \nUse \"Switch Hand\" button to switch between cards in different hands.");
|
||||
MageFrame.getInstance().showMessage("You control other player's turn. \nUse \"Switch Hand\" button to switch between cards in different hands.");
|
||||
} else {
|
||||
JOptionPane.showMessageDialog(null, "You lost control on other player's turn.");
|
||||
MageFrame.getInstance().showMessage("You lost control on other player's turn.");
|
||||
}
|
||||
}
|
||||
} else {
|
||||
|
|
|
@ -49,6 +49,10 @@ public class TokensMtgImageSource implements CardImageSource {
|
|||
|
||||
private static CardImageSource instance = new TokensMtgImageSource();
|
||||
|
||||
private List<TokenData> tokensData;
|
||||
|
||||
private final Object tokensDataSync = new Object();
|
||||
|
||||
public static CardImageSource getInstance() {
|
||||
if (instance == null) {
|
||||
instance = new TokensMtgImageSource();
|
||||
|
@ -82,26 +86,27 @@ public class TokensMtgImageSource implements CardImageSource {
|
|||
}
|
||||
|
||||
private static final String[] EMBLEMS = {
|
||||
"Ajani",
|
||||
"Chandra",
|
||||
"Dack",
|
||||
"Daretti",
|
||||
"Domri",
|
||||
"Elspeth",
|
||||
"Garruk",
|
||||
"Gideon",
|
||||
"Jace",
|
||||
"Kiora",
|
||||
"Koth",
|
||||
"Liliana",
|
||||
"Narset",
|
||||
"Nixilis",
|
||||
"Sarkhan",
|
||||
"Sorin",
|
||||
"Tamiyo",
|
||||
"Teferi",
|
||||
"Venser",
|
||||
};
|
||||
"Ajani",
|
||||
"Arlinn",
|
||||
"Chandra",
|
||||
"Dack",
|
||||
"Daretti",
|
||||
"Dovin",
|
||||
"Domri",
|
||||
"Elspeth",
|
||||
"Garruk",
|
||||
"Gideon",
|
||||
"Jace",
|
||||
"Kiora",
|
||||
"Koth",
|
||||
"Liliana",
|
||||
"Narset",
|
||||
"Nixilis",
|
||||
"Sarkhan",
|
||||
"Sorin",
|
||||
"Tamiyo",
|
||||
"Teferi",
|
||||
"Venser",};
|
||||
|
||||
private static final Map<String, String> SET_NAMES_REPLACEMENT = new HashMap<String, String>() {
|
||||
{
|
||||
|
@ -119,7 +124,7 @@ public class TokensMtgImageSource implements CardImageSource {
|
|||
// handle emblems
|
||||
if (name.toLowerCase().contains("emblem")) {
|
||||
for (String emblem : EMBLEMS) {
|
||||
if (name.toLowerCase().contains(emblem.toLowerCase())){
|
||||
if (name.toLowerCase().contains(emblem.toLowerCase())) {
|
||||
name = emblem + " Emblem";
|
||||
break;
|
||||
}
|
||||
|
@ -135,23 +140,23 @@ public class TokensMtgImageSource implements CardImageSource {
|
|||
// e.g. http://tokens.mtg.onl/tokens/ORI_010-Thopter.jpg -- token number 010
|
||||
// We don't know these numbers, but we can take them from a file
|
||||
// with tokens information that can be downloaded from the site.
|
||||
List<TokenData> tokensData = getTokensData();
|
||||
List<TokenData> newTokensData = getTokensData();
|
||||
|
||||
if (tokensData.isEmpty()) {
|
||||
if (newTokensData.isEmpty()) {
|
||||
return null;
|
||||
}
|
||||
|
||||
List<TokenData> matchedTokens = new ArrayList<TokenData>();
|
||||
for (TokenData token : tokensData) {
|
||||
List<TokenData> matchedTokens = new ArrayList<>();
|
||||
for (TokenData token : newTokensData) {
|
||||
if (name.equalsIgnoreCase(token.getName()) && set.equalsIgnoreCase(token.getExpansionSetCode())) {
|
||||
matchedTokens.add(token);
|
||||
}
|
||||
}
|
||||
|
||||
if (matchedTokens.isEmpty()) {
|
||||
logger.info("Could not find data for token " + name + ", set " + set + ".");
|
||||
return null;
|
||||
}
|
||||
//
|
||||
// if (matchedTokens.isEmpty()) {
|
||||
// logger.info("Could not find data for token " + name + ", set " + set + ".");
|
||||
// return null;
|
||||
// }
|
||||
|
||||
TokenData tokenData;
|
||||
if (type == 0) {
|
||||
|
@ -168,72 +173,66 @@ public class TokensMtgImageSource implements CardImageSource {
|
|||
}
|
||||
|
||||
String url = "http://tokens.mtg.onl/tokens/" + tokenData.getExpansionSetCode().trim() + "_"
|
||||
+ tokenData.getNumber().trim() + "-" + tokenData.getName().trim()+ ".jpg";
|
||||
+ tokenData.getNumber().trim() + "-" + tokenData.getName().trim() + ".jpg";
|
||||
url = url.replace(' ', '-');
|
||||
return url;
|
||||
}
|
||||
|
||||
private List<TokenData> tokensData;
|
||||
|
||||
private final Object tokensDataSync = new Object();
|
||||
|
||||
private List<TokenData> getTokensData() throws IOException {
|
||||
if (tokensData == null) {
|
||||
synchronized (tokensDataSync) {
|
||||
if (tokensData == null) {
|
||||
tokensData = new ArrayList<TokenData>();
|
||||
synchronized (tokensDataSync) {
|
||||
if (tokensData == null) {
|
||||
tokensData = new ArrayList<>();
|
||||
|
||||
// get tokens data from resource file
|
||||
InputStream inputStream = null;
|
||||
try {
|
||||
inputStream = this.getClass().getResourceAsStream("/tokens-mtg-onl-list.csv");
|
||||
List<TokenData> fileTokensData = parseTokensData(inputStream);
|
||||
tokensData.addAll(fileTokensData);
|
||||
} catch (Exception exception) {
|
||||
logger.warn("Failed to get tokens description from resource file tokens-mtg-onl-list.csv", exception);
|
||||
} finally {
|
||||
if (inputStream != null) {
|
||||
try {
|
||||
inputStream.close();
|
||||
} catch (Exception e) {
|
||||
logger.error("Input stream close failed:", e);
|
||||
// get tokens data from resource file
|
||||
InputStream inputStream = null;
|
||||
try {
|
||||
inputStream = this.getClass().getResourceAsStream("/tokens-mtg-onl-list.csv");
|
||||
List<TokenData> fileTokensData = parseTokensData(inputStream);
|
||||
tokensData.addAll(fileTokensData);
|
||||
} catch (Exception exception) {
|
||||
logger.warn("Failed to get tokens description from resource file tokens-mtg-onl-list.csv", exception);
|
||||
} finally {
|
||||
if (inputStream != null) {
|
||||
try {
|
||||
inputStream.close();
|
||||
} catch (Exception e) {
|
||||
logger.error("Input stream close failed:", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// description on site may contain new information
|
||||
// try to add it
|
||||
try {
|
||||
URL url = new URL("http://tokens.mtg.onl/data/SetsWithTokens.csv");
|
||||
inputStream = url.openStream();
|
||||
List<TokenData> siteTokensData = parseTokensData(inputStream);
|
||||
|
||||
List<TokenData> newTokensData = new ArrayList<>();
|
||||
for (TokenData siteData : siteTokensData) {
|
||||
boolean isNew = true;
|
||||
for (TokenData fileData : tokensData) {
|
||||
if (siteData.getName().equalsIgnoreCase(fileData.getName())
|
||||
&& siteData.getNumber().equalsIgnoreCase(fileData.getNumber())
|
||||
&& siteData.getExpansionSetCode().equalsIgnoreCase(fileData.getExpansionSetCode())) {
|
||||
isNew = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (isNew) {
|
||||
newTokensData.add(siteData);
|
||||
}
|
||||
}
|
||||
|
||||
// description on site may contain new information
|
||||
// try to add it
|
||||
try {
|
||||
URL url = new URL("http://tokens.mtg.onl/data/SetsWithTokens.csv");
|
||||
inputStream = url.openStream();
|
||||
List<TokenData> siteTokensData = parseTokensData(inputStream);
|
||||
|
||||
List<TokenData> newTokensData = new ArrayList<TokenData>();
|
||||
for (TokenData siteData : siteTokensData) {
|
||||
boolean isNew = true;
|
||||
for (TokenData fileData : tokensData) {
|
||||
if (siteData.getName().equalsIgnoreCase(fileData.getName())
|
||||
&& siteData.getNumber().equalsIgnoreCase(fileData.getNumber())
|
||||
&& siteData.getExpansionSetCode().equalsIgnoreCase(fileData.getExpansionSetCode())) {
|
||||
isNew = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (isNew) {
|
||||
newTokensData.add(siteData);
|
||||
}
|
||||
}
|
||||
|
||||
tokensData.addAll(newTokensData);
|
||||
} catch (Exception exception) {
|
||||
logger.warn("Failed to get tokens description from tokens.mtg.onl", exception);
|
||||
} finally {
|
||||
if (inputStream != null) {
|
||||
try {
|
||||
inputStream.close();
|
||||
} catch (Exception e) {
|
||||
logger.error("Input stream close failed:", e);
|
||||
}
|
||||
tokensData.addAll(newTokensData);
|
||||
} catch (Exception exception) {
|
||||
logger.warn("Failed to get tokens description from tokens.mtg.onl", exception);
|
||||
} finally {
|
||||
if (inputStream != null) {
|
||||
try {
|
||||
inputStream.close();
|
||||
} catch (Exception e) {
|
||||
logger.error("Input stream close failed:", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -244,7 +243,7 @@ public class TokensMtgImageSource implements CardImageSource {
|
|||
}
|
||||
|
||||
private List<TokenData> parseTokensData(InputStream inputStream) throws IOException {
|
||||
List<TokenData> tokensData = new ArrayList<TokenData>();
|
||||
List<TokenData> newTokensData = new ArrayList<>();
|
||||
|
||||
InputStreamReader inputReader = null;
|
||||
BufferedReader reader = null;
|
||||
|
@ -266,8 +265,7 @@ public class TokensMtgImageSource implements CardImageSource {
|
|||
if (state == 2) {
|
||||
state = 0;
|
||||
}
|
||||
} else {
|
||||
if (state == 0) {
|
||||
} else if (state == 0) {
|
||||
set = line.substring(0, 3);
|
||||
state = 1;
|
||||
} else {
|
||||
|
@ -279,8 +277,7 @@ public class TokensMtgImageSource implements CardImageSource {
|
|||
String name = split[0].replace('‚', ',');
|
||||
String number = split[1];
|
||||
TokenData token = new TokenData(name, number, set);
|
||||
tokensData.add(token);
|
||||
}
|
||||
newTokensData.add(token);
|
||||
}
|
||||
|
||||
line = reader.readLine();
|
||||
|
@ -302,7 +299,7 @@ public class TokensMtgImageSource implements CardImageSource {
|
|||
}
|
||||
}
|
||||
|
||||
return tokensData;
|
||||
return newTokensData;
|
||||
}
|
||||
|
||||
final class TokenData {
|
||||
|
@ -334,12 +331,12 @@ public class TokensMtgImageSource implements CardImageSource {
|
|||
public Integer getTotalImages() {
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public Boolean isTokenSource() {
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void doPause(String httpImageUrl) {
|
||||
}
|
||||
|
|
|
@ -10,6 +10,7 @@ public class CardDownloadData {
|
|||
|
||||
private String name;
|
||||
private String downloadName;
|
||||
private String fileName = "";
|
||||
private String set;
|
||||
private String tokenSetCode;
|
||||
private String tokenDescriptor;
|
||||
|
@ -32,6 +33,11 @@ public class CardDownloadData {
|
|||
this(name, set, collectorId, usesVariousArt, type, tokenSetCode, tokenDescriptor, token, false, false);
|
||||
}
|
||||
|
||||
public CardDownloadData(String name, String set, String collectorId, boolean usesVariousArt, Integer type, String tokenSetCode, String tokenDescriptor, boolean token, String fileName) {
|
||||
this(name, set, collectorId, usesVariousArt, type, tokenSetCode, tokenDescriptor, token, false, false);
|
||||
this.fileName = fileName;
|
||||
}
|
||||
|
||||
public CardDownloadData(String name, String set, String collectorId, boolean usesVariousArt, Integer type, String tokenSetCode, String tokenDescriptor, boolean token, boolean twoFacedCard, boolean secondSide) {
|
||||
this.name = name;
|
||||
this.set = set;
|
||||
|
@ -43,7 +49,7 @@ public class CardDownloadData {
|
|||
this.secondSide = secondSide;
|
||||
this.tokenSetCode = tokenSetCode;
|
||||
this.tokenDescriptor = tokenDescriptor;
|
||||
|
||||
|
||||
if (this.tokenDescriptor == null || this.tokenDescriptor.equalsIgnoreCase("")) {
|
||||
this.tokenDescriptor = lastDitchTokenDescriptor();
|
||||
}
|
||||
|
@ -60,6 +66,7 @@ public class CardDownloadData {
|
|||
this.usesVariousArt = card.usesVariousArt;
|
||||
this.tokenSetCode = card.tokenSetCode;
|
||||
this.tokenDescriptor = card.tokenDescriptor;
|
||||
this.fileName = card.fileName;
|
||||
|
||||
}
|
||||
|
||||
|
@ -118,6 +125,14 @@ public class CardDownloadData {
|
|||
return name;
|
||||
}
|
||||
|
||||
public String getFileName() {
|
||||
return fileName;
|
||||
}
|
||||
|
||||
public void setFileName(String fileName) {
|
||||
this.fileName = fileName;
|
||||
}
|
||||
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
@ -125,7 +140,7 @@ public class CardDownloadData {
|
|||
public String getSet() {
|
||||
return set;
|
||||
}
|
||||
|
||||
|
||||
public void setSet(String set) {
|
||||
this.set = set;
|
||||
}
|
||||
|
@ -144,15 +159,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 + "....";
|
||||
String tmpName = this.name.replaceAll("[^a-zA-Z0-9]", "");
|
||||
String descriptor = tmpName + "....";
|
||||
descriptor = descriptor.toUpperCase();
|
||||
return descriptor;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public boolean isToken() {
|
||||
return token;
|
||||
}
|
||||
|
|
|
@ -57,11 +57,11 @@ import org.mage.plugins.card.dl.sources.AltMtgOnlTokensImageSource;
|
|||
import org.mage.plugins.card.dl.sources.CardImageSource;
|
||||
import org.mage.plugins.card.dl.sources.GrabbagImageSource;
|
||||
import org.mage.plugins.card.dl.sources.MagicCardsImageSource;
|
||||
import org.mage.plugins.card.dl.sources.MagidexImageSource;
|
||||
import org.mage.plugins.card.dl.sources.MtgOnlTokensImageSource;
|
||||
import org.mage.plugins.card.dl.sources.MythicspoilerComSource;
|
||||
import org.mage.plugins.card.dl.sources.TokensMtgImageSource;
|
||||
import org.mage.plugins.card.dl.sources.WizardCardsImageSource;
|
||||
import org.mage.plugins.card.dl.sources.MagidexImageSource;
|
||||
import org.mage.plugins.card.properties.SettingsManager;
|
||||
import org.mage.plugins.card.utils.CardImageUtils;
|
||||
|
||||
|
@ -235,7 +235,7 @@ public class DownloadPictures extends DefaultBoundedRangeModel implements Runnab
|
|||
dlg = new JOptionPane(p0, JOptionPane.PLAIN_MESSAGE, JOptionPane.DEFAULT_OPTION, null, options, options[1]);
|
||||
}
|
||||
|
||||
public static boolean checkForNewCards(List<CardInfo> allCards) {
|
||||
public static boolean checkForMissingCardImages(List<CardInfo> allCards) {
|
||||
AtomicBoolean missedCardTFiles = new AtomicBoolean();
|
||||
allCards.parallelStream().forEach(card -> {
|
||||
if (!missedCardTFiles.get()) {
|
||||
|
@ -279,7 +279,7 @@ public class DownloadPictures extends DefaultBoundedRangeModel implements Runnab
|
|||
private void updateProgressText(int cardCount) {
|
||||
float mb = (cardCount * cardImageSource.getAverageSize()) / 1024;
|
||||
bar.setString(String.format(cardIndex == cardCount ? "%d of %d cards finished! Please close!"
|
||||
: "%d of %d cards finished! Please wait! [%.1f Mb]", 0, cardCount, mb));
|
||||
: "%d of %d cards finished! Please wait! [%.1f Mb]", 0, cardCount, mb));
|
||||
}
|
||||
|
||||
private static String createDownloadName(CardInfo card) {
|
||||
|
@ -309,57 +309,57 @@ public class DownloadPictures extends DefaultBoundedRangeModel implements Runnab
|
|||
}
|
||||
|
||||
int numberCardImages = allCards.size();
|
||||
|
||||
int numberWithoutTokens = 0;
|
||||
try {
|
||||
offlineMode = true;
|
||||
allCards.parallelStream().forEach(card -> {
|
||||
if (!card.getCardNumber().isEmpty() && !"0".equals(card.getCardNumber()) && !card.getSetCode().isEmpty()
|
||||
&& !ignoreUrls.contains(card.getSetCode())) {
|
||||
String cardName = card.getName();
|
||||
boolean isType2 = type2SetsFilter.contains(card.getSetCode());
|
||||
CardDownloadData url = new CardDownloadData(cardName, card.getSetCode(), card.getCardNumber(), card.usesVariousArt(), 0, "", "", false, card.isDoubleFaced(), card.isNightCard());
|
||||
if (url.getUsesVariousArt()) {
|
||||
url.setDownloadName(createDownloadName(card));
|
||||
}
|
||||
allCards.parallelStream().forEach(card -> {
|
||||
if (!card.getCardNumber().isEmpty() && !"0".equals(card.getCardNumber()) && !card.getSetCode().isEmpty()
|
||||
&& !ignoreUrls.contains(card.getSetCode())) {
|
||||
String cardName = card.getName();
|
||||
boolean isType2 = type2SetsFilter.contains(card.getSetCode());
|
||||
CardDownloadData url = new CardDownloadData(cardName, card.getSetCode(), card.getCardNumber(), card.usesVariousArt(), 0, "", "", false, card.isDoubleFaced(), card.isNightCard());
|
||||
if (url.getUsesVariousArt()) {
|
||||
url.setDownloadName(createDownloadName(card));
|
||||
}
|
||||
|
||||
url.setFlipCard(card.isFlipCard());
|
||||
url.setSplitCard(card.isSplitCard());
|
||||
url.setType2(isType2);
|
||||
url.setFlipCard(card.isFlipCard());
|
||||
url.setSplitCard(card.isSplitCard());
|
||||
url.setType2(isType2);
|
||||
|
||||
allCardsUrls.add(url);
|
||||
if (card.isDoubleFaced()) {
|
||||
if (card.getSecondSideName() == null || card.getSecondSideName().trim().isEmpty()) {
|
||||
throw new IllegalStateException("Second side card can't have empty name.");
|
||||
}
|
||||
url = new CardDownloadData(card.getSecondSideName(), card.getSetCode(), card.getCardNumber(), card.usesVariousArt(), 0, "", "", false, card.isDoubleFaced(), true);
|
||||
url.setType2(isType2);
|
||||
allCardsUrls.add(url);
|
||||
}
|
||||
if (card.isFlipCard()) {
|
||||
if (card.getFlipCardName() == null || card.getFlipCardName().trim().isEmpty()) {
|
||||
throw new IllegalStateException("Flipped card can't have empty name.");
|
||||
}
|
||||
url = new CardDownloadData(card.getFlipCardName(), card.getSetCode(), card.getCardNumber(), card.usesVariousArt(), 0, "", "", false, card.isDoubleFaced(), card.isNightCard());
|
||||
url.setFlipCard(true);
|
||||
url.setFlippedSide(true);
|
||||
url.setType2(isType2);
|
||||
allCardsUrls.add(url);
|
||||
}
|
||||
} else if (card.getCardNumber().isEmpty() || "0".equals(card.getCardNumber())) {
|
||||
System.err.println("There was a critical error!");
|
||||
logger.error("Card has no collector ID and won't be sent to client: " + card);
|
||||
} else if (card.getSetCode().isEmpty()) {
|
||||
System.err.println("There was a critical error!");
|
||||
logger.error("Card has no set name and won't be sent to client:" + card);
|
||||
}
|
||||
});
|
||||
allCardsUrls.add(url);
|
||||
if (card.isDoubleFaced()) {
|
||||
if (card.getSecondSideName() == null || card.getSecondSideName().trim().isEmpty()) {
|
||||
throw new IllegalStateException("Second side card can't have empty name.");
|
||||
}
|
||||
url = new CardDownloadData(card.getSecondSideName(), card.getSetCode(), card.getCardNumber(), card.usesVariousArt(), 0, "", "", false, card.isDoubleFaced(), true);
|
||||
url.setType2(isType2);
|
||||
allCardsUrls.add(url);
|
||||
}
|
||||
if (card.isFlipCard()) {
|
||||
if (card.getFlipCardName() == null || card.getFlipCardName().trim().isEmpty()) {
|
||||
throw new IllegalStateException("Flipped card can't have empty name.");
|
||||
}
|
||||
url = new CardDownloadData(card.getFlipCardName(), card.getSetCode(), card.getCardNumber(), card.usesVariousArt(), 0, "", "", false, card.isDoubleFaced(), card.isNightCard());
|
||||
url.setFlipCard(true);
|
||||
url.setFlippedSide(true);
|
||||
url.setType2(isType2);
|
||||
allCardsUrls.add(url);
|
||||
}
|
||||
} else if (card.getCardNumber().isEmpty() || "0".equals(card.getCardNumber())) {
|
||||
System.err.println("There was a critical error!");
|
||||
logger.error("Card has no collector ID and won't be sent to client: " + card);
|
||||
} else if (card.getSetCode().isEmpty()) {
|
||||
System.err.println("There was a critical error!");
|
||||
logger.error("Card has no set name and won't be sent to client:" + card);
|
||||
}
|
||||
});
|
||||
numberWithoutTokens = allCards.size();
|
||||
allCardsUrls.addAll(getTokenCardUrls());
|
||||
} catch (Exception e) {
|
||||
logger.error(e);
|
||||
}
|
||||
|
||||
int numberTokenImages = allCardsUrls.size() - numberCardImages;
|
||||
|
||||
int numberAllTokenImages = allCardsUrls.size() - numberWithoutTokens;
|
||||
|
||||
/**
|
||||
* check to see which cards we already have
|
||||
|
@ -372,21 +372,16 @@ public class DownloadPictures extends DefaultBoundedRangeModel implements Runnab
|
|||
}
|
||||
});
|
||||
|
||||
logger.info("Check download images (total cards: " + numberCardImages + ", total tokens: " + numberTokenImages + ") => Missing images: " + cardsToDownload.size());
|
||||
if (logger.isDebugEnabled()) {
|
||||
for (CardDownloadData card : cardsToDownload) {
|
||||
if (card.isToken()) {
|
||||
logger.debug("Card to download: " + card.getName() + " (Token) ");
|
||||
} else {
|
||||
try {
|
||||
logger.debug("Card to download: " + card.getName() + " (" + card.getSet() + ")");
|
||||
} catch (Exception e) {
|
||||
logger.error(e);
|
||||
}
|
||||
}
|
||||
int tokenImages = 0;
|
||||
for (CardDownloadData card : cardsToDownload) {
|
||||
logger.debug((card.isToken() ? "Token" : "Card") + " image to download: " + card.getName() + " (" + card.getSet() + ")");
|
||||
if (card.isToken()) {
|
||||
tokenImages++;
|
||||
}
|
||||
}
|
||||
|
||||
logger.info("Check download images (total card images: " + numberCardImages + ", total token images: " + numberAllTokenImages + ")");
|
||||
logger.info(" => Missing card images: " + (cardsToDownload.size() - tokenImages));
|
||||
logger.info(" => Missing token images: " + tokenImages);
|
||||
return new ArrayList<>(cardsToDownload);
|
||||
}
|
||||
|
||||
|
@ -413,24 +408,29 @@ public class DownloadPictures extends DefaultBoundedRangeModel implements Runnab
|
|||
String[] params = line.split("\\|", -1);
|
||||
if (params.length >= 5) {
|
||||
int type = 0;
|
||||
String fileName = "";
|
||||
if (params[4] != null && !params[4].isEmpty()) {
|
||||
type = Integer.parseInt(params[4].trim());
|
||||
}
|
||||
if (params.length > 5 && params[5] != null && !params[5].isEmpty()) {
|
||||
fileName = params[5].trim();
|
||||
}
|
||||
|
||||
if (params[1].toLowerCase().equals("generate") && params[2].startsWith("TOK:")) {
|
||||
String set = params[2].substring(4);
|
||||
CardDownloadData card = new CardDownloadData(params[3], set, "0", false, type, "", "", true);
|
||||
list.add(card);
|
||||
} else if (params[1].toLowerCase().equals("generate") && params[2].startsWith("EMBLEM:")) {
|
||||
String set = params[2].substring(7);
|
||||
CardDownloadData card = new CardDownloadData("Emblem " + params[3], set, "0", false, type, "", "", true);
|
||||
CardDownloadData card = new CardDownloadData("Emblem " + params[3], set, "0", false, type, "", "", true, fileName);
|
||||
list.add(card);
|
||||
} else if (params[1].toLowerCase().equals("generate") && params[2].startsWith("EMBLEM-:")) {
|
||||
String set = params[2].substring(8);
|
||||
CardDownloadData card = new CardDownloadData(params[3] + " Emblem", set, "0", false, type, "", "", true);
|
||||
CardDownloadData card = new CardDownloadData(params[3] + " Emblem", set, "0", false, type, "", "", true, fileName);
|
||||
list.add(card);
|
||||
} else if (params[1].toLowerCase().equals("generate") && params[2].startsWith("EMBLEM!:")) {
|
||||
String set = params[2].substring(8);
|
||||
CardDownloadData card = new CardDownloadData(params[3], set, "0", false, type, "", "", true);
|
||||
CardDownloadData card = new CardDownloadData(params[3], set, "0", false, type, "", "", true, fileName);
|
||||
list.add(card);
|
||||
}
|
||||
} else {
|
||||
|
@ -531,20 +531,18 @@ public class DownloadPictures extends DefaultBoundedRangeModel implements Runnab
|
|||
imageRef = cardImageSource.getSourceName() + imageRef;
|
||||
try {
|
||||
URL imageUrl = new URL(imageRef);
|
||||
if (card != null) {
|
||||
card.setToken(cardImageSource.isTokenSource());
|
||||
}
|
||||
card.setToken(cardImageSource.isTokenSource());
|
||||
Runnable task = new DownloadTask(card, imageUrl, fileName, cardImageSource.getTotalImages());
|
||||
executor.execute(task);
|
||||
} catch (Exception ex) {
|
||||
}
|
||||
} else if (card != null && cardImageSource.getTotalImages() == -1) {
|
||||
} else if (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) {
|
||||
} else {
|
||||
Runnable task = new DownloadTask(card, new URL(url), cardsToDownload.size());
|
||||
executor.execute(task);
|
||||
}
|
||||
|
@ -637,7 +635,11 @@ public class DownloadPictures extends DefaultBoundedRangeModel implements Runnab
|
|||
}
|
||||
File existingFile = new File(imagePath.replaceFirst("\\w{3}.zip", ""));
|
||||
if (existingFile.exists()) {
|
||||
new TFile(existingFile).cp_rp(outputFile);
|
||||
try {
|
||||
new TFile(existingFile).cp_rp(outputFile);
|
||||
} catch (IOException e) {
|
||||
logger.error("Error while copying file " + card.getName(), e);
|
||||
}
|
||||
synchronized (sync) {
|
||||
update(cardIndex + 1, count);
|
||||
}
|
||||
|
@ -728,7 +730,7 @@ public class DownloadPictures extends DefaultBoundedRangeModel implements Runnab
|
|||
logger.error(e, e);
|
||||
} finally {
|
||||
if (temporaryFile != null) {
|
||||
//temporaryFile.delete();
|
||||
temporaryFile.delete();
|
||||
}
|
||||
}
|
||||
synchronized (sync) {
|
||||
|
|
|
@ -167,7 +167,7 @@ public class CardImageUtils {
|
|||
String imageName;
|
||||
|
||||
String type = card.getType() != 0 ? " " + Integer.toString(card.getType()) : "";
|
||||
String name = card.getName().replace(":", "").replace("//", "-");
|
||||
String name = card.getFileName().isEmpty() ? card.getName().replace(":", "").replace("//", "-") : card.getFileName();
|
||||
|
||||
if (card.getUsesVariousArt()) {
|
||||
imageName = name + "." + card.getCollectorId() + ".full.jpg";
|
||||
|
|
|
@ -29,9 +29,9 @@
|
|||
|Generate|TOK:KLD|Thopter|1|
|
||||
|Generate|TOK:KLD|Thopter|2|
|
||||
|Generate|TOK:KLD|Thopter|3|
|
||||
|Generate|EMBLEM!:KLD|Emblem Chandra, Torch of Defiance||
|
||||
|Generate|EMBLEM!:KLD|Emblem Nissa, Vital Force||
|
||||
|Generate|EMBLEM!:KLD|Emblem Dovin Baan||
|
||||
|Generate|EMBLEM!:KLD|Emblem Chandra||
|
||||
|Generate|EMBLEM!:KLD|Emblem Nissa||
|
||||
|Generate|EMBLEM!:KLD|Emblem Dovin||
|
||||
|
||||
|Generate|TOK:CN2|Assassin||
|
||||
|Generate|TOK:CN2|Beast||
|
||||
|
@ -60,7 +60,7 @@
|
|||
|Generate|TOK:EMA|Wall||
|
||||
|Generate|TOK:EMA|Wurm||
|
||||
|Generate|TOK:EMA|Zombie||
|
||||
|Generate|EMBLEM!:EMA|Emblem Dack Fayden||
|
||||
|Generate|EMBLEM!:EMA|Emblem Dack||
|
||||
|
||||
|Generate|TOK:EMN|Eldrazi Horror||
|
||||
|Generate|TOK:EMN|Human||
|
||||
|
@ -70,8 +70,8 @@
|
|||
|Generate|TOK:EMN|Zombie|2|
|
||||
|Generate|TOK:EMN|Zombie|3|
|
||||
|Generate|TOK:EMN|Zombie|4|
|
||||
|Generate|EMBLEM!:EMN|Emblem Liliana, the Last Hope||
|
||||
|Generate|EMBLEM!:EMN|Emblem Tamiyo, Field Researcher||
|
||||
|Generate|EMBLEM!:EMN|Emblem Liliana||
|
||||
|Generate|EMBLEM!:EMN|Emblem Tamiyo||
|
||||
|
||||
|Generate|TOK:SOI|Angel||
|
||||
|Generate|TOK:SOI|Clue|1|
|
||||
|
@ -89,8 +89,8 @@
|
|||
|Generate|TOK:SOI|Vampire Knight||
|
||||
|Generate|TOK:SOI|Wolf||
|
||||
|Generate|TOK:SOI|Zombie||
|
||||
|Generate|EMBLEM!:SOI|Emblem Arlinn, Embraced by the Moon||
|
||||
|Generate|EMBLEM!:SOI|Emblem Jace, Unraveler of Secrets||
|
||||
|Generate|EMBLEM!:SOI|Emblem Arlinn||
|
||||
|Generate|EMBLEM!:SOI|Emblem Jace||
|
||||
|
||||
|Generate|TOK:OGW|Angel||
|
||||
|Generate|TOK:OGW|Elemental|1|
|
||||
|
@ -123,7 +123,7 @@
|
|||
|Generate|TOK:C15|Gold||
|
||||
|Generate|TOK:C15|Knight|1|
|
||||
|Generate|TOK:C15|Knight|2|
|
||||
|Generate|TOK:C15|Lightning Rager||
|
||||
|Generate|TOK:C15|Lightning Ranger||
|
||||
|Generate|TOK:C15|Saproling||
|
||||
|Generate|TOK:C15|Shapeshifter||
|
||||
|Generate|TOK:C15|Snake|1|
|
||||
|
@ -145,9 +145,9 @@
|
|||
|Generate|TOK:BFZ|Kor Ally||
|
||||
|Generate|TOK:BFZ|Octopus||
|
||||
|Generate|TOK:BFZ|Plant||
|
||||
|Generate|EMBLEM!:BFZ|Emblem Gideon, Ally of Zendikar||
|
||||
|Generate|EMBLEM!:BFZ|Emblem Kiora, Master of the Depths||
|
||||
|Generate|EMBLEM!:BFZ|Emblem Ob Nixilis Reignited||
|
||||
|Generate|EMBLEM!:BFZ|Emblem Gideon||
|
||||
|Generate|EMBLEM!:BFZ|Emblem Kiora||
|
||||
|Generate|EMBLEM!:BFZ|Emblem Nixilis||
|
||||
|
||||
|Generate|TOK:DDP|Eldrazi Spawn|1|
|
||||
|Generate|TOK:DDP|Eldrazi Spawn|2|
|
||||
|
@ -194,9 +194,9 @@
|
|||
|Generate|TOK:ORI|Thopter|1|
|
||||
|Generate|TOK:ORI|Thopter|2|
|
||||
|Generate|TOK:ORI|Zombie||
|
||||
|Generate|EMBLEM!:ORI|Emblem Chandra, Roaring Flame||
|
||||
|Generate|EMBLEM!:ORI|Emblem Jace, Telepath Unbound||
|
||||
|Generate|EMBLEM!:ORI|Emblem Liliana, Defiant Necromancer||
|
||||
|Generate|EMBLEM!:ORI|Emblem Chandra||
|
||||
|Generate|EMBLEM!:ORI|Emblem Jace||
|
||||
|Generate|EMBLEM!:ORI|Emblem Liliana||
|
||||
|
||||
#|Generate|TOK:PTC|Angel||
|
||||
#|Generate|TOK:PTC|Avatar||
|
||||
|
@ -356,7 +356,7 @@
|
|||
|Generate|TOK:CNS|Squirrel||
|
||||
|Generate|TOK:CNS|Wolf||
|
||||
|Generate|TOK:CNS|Construct||
|
||||
|Generate|EMBLEM!:CNS|Emblem Dack Fayden||
|
||||
|Generate|EMBLEM!:CNS|Emblem Dack Fayden||Emblem Dack|
|
||||
|
||||
|Generate|TOK:JOU|Sphinx||
|
||||
|Generate|TOK:JOU|Zombie||
|
||||
|
@ -379,7 +379,7 @@
|
|||
|Generate|TOK:BNG|Centaur||
|
||||
|Generate|TOK:BNG|Wolf||
|
||||
|Generate|TOK:BNG|Gold||
|
||||
|Generate|EMBLEM:BNG|Kiora, the Crashing Wave||
|
||||
|Generate|EMBLEM:BNG|Kiora, the Crashing Wave||Emblem Kiora|
|
||||
|
||||
|Generate|TOK:THS|Cleric||
|
||||
|Generate|TOK:THS|Soldier|1|
|
||||
|
@ -393,7 +393,7 @@
|
|||
|Generate|TOK:THS|Satyr||
|
||||
|Generate|TOK:THS|Golem|1|
|
||||
|Generate|TOK:THS|Golem|2|
|
||||
|Generate|EMBLEM-:THS|Elspeth, Suns Champion||
|
||||
|Generate|EMBLEM-:THS|Elspeth, Suns Champion||Emblem Elspeth|
|
||||
|
||||
|Generate|TOK:M14|Sliver|1|
|
||||
|Generate|TOK:M14|Sliver|2|
|
||||
|
@ -407,8 +407,8 @@
|
|||
|Generate|TOK:M14|Beast||
|
||||
|Generate|TOK:M14|Saproling||
|
||||
|Generate|TOK:M14|Wolf||
|
||||
|Generate|EMBLEM:M14|Liliana of the Dark Realms||
|
||||
|Generate|EMBLEM:M14|Garruk, Caller of Beasts||
|
||||
|Generate|EMBLEM:M14|Liliana of the Dark Realms||Emblem Liliana|
|
||||
|Generate|EMBLEM:M14|Garruk, Caller of Beasts||Emblem Garruk|
|
||||
|
||||
|Generate|TOK:DDL|Griffin||
|
||||
|Generate|TOK:DDL|Beast||
|
||||
|
@ -428,7 +428,7 @@
|
|||
|Generate|TOK:MMA|Treefolk Shaman||
|
||||
|Generate|TOK:MMA|Faerie Rogue||
|
||||
|Generate|TOK:MMA|Worm||
|
||||
|Generate|EMBLEM:MMA|Elspeth, Knight Errant||
|
||||
|Generate|EMBLEM:MMA|Elspeth, Knight Errant||Emblem Elspeth|
|
||||
|
||||
|Generate|TOK:DGM|Elemental||
|
||||
|Generate|TOK:DGM|Bird||
|
||||
|
@ -443,7 +443,7 @@
|
|||
|Generate|TOK:GTC|Soldier|1|
|
||||
|Generate|TOK:GTC|Soldier|2|
|
||||
|Generate|TOK:GTC|Spirit||
|
||||
|Generate|EMBLEM:GTC|Domri Rade||
|
||||
|Generate|EMBLEM:GTC|Domri Rade||Emblem Domri|
|
||||
|
||||
|Generate|TOK:RTR|Bird||
|
||||
|Generate|TOK:RTR|Knight|1|
|
||||
|
@ -462,7 +462,7 @@
|
|||
|
||||
|Generate|TOK:DDJ|Saproling||
|
||||
|
||||
|Generate|EMBLEM-:M13|Liliana of the Dark Realms||
|
||||
|Generate|EMBLEM-:M13|Liliana of the Dark Realms||Emblem Liliana|
|
||||
|Generate|TOK:M13|Cat||
|
||||
|Generate|TOK:M13|Goat||
|
||||
|Generate|TOK:M13|Soldier||
|
||||
|
@ -475,7 +475,7 @@
|
|||
|Generate|TOK:M13|Saproling||
|
||||
|Generate|TOK:M13|Wurm||
|
||||
|
||||
|Generate|EMBLEM:AVR|Tamiyo, the Moon Sage||
|
||||
|Generate|EMBLEM:AVR|Tamiyo, the Moon Sage||Emblem Tamiyo|
|
||||
|Generate|TOK:AVR|Angel|1|
|
||||
|Generate|TOK:AVR|Angel|2|
|
||||
|Generate|TOK:AVR|Angel|3|
|
||||
|
@ -488,12 +488,12 @@
|
|||
|Generate|TOK:AVR|Demon|3|
|
||||
|Generate|TOK:AVR|Zombie||
|
||||
|
||||
|Generate|EMBLEM:DDI|Venser, the Sojourner||
|
||||
|Generate|EMBLEM:DDI|Koth of the Hammer||
|
||||
|Generate|EMBLEM:DDI|Venser, the Sojourner||Emblem Venser|
|
||||
|Generate|EMBLEM:DDI|Koth of the Hammer||Emblem Koth|
|
||||
|
||||
|Generate|TOK:DKA|Human||
|
||||
|Generate|TOK:DKA|Vampire||
|
||||
|Generate|EMBLEM:DKA|Sorin, Lord of Innistrad|
|
||||
|Generate|EMBLEM:DKA|Sorin, Lord of Innistrad||Emblem Sorin|
|
||||
|
||||
|Generate|TOK:ISD|Angel||
|
||||
|Generate|TOK:ISD|Spirit||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
Token name, Number, Color, P/T, Promo, Type, Artist, Text
|
||||
Token name, Number, Color, P/T, Promo, Type, Artist, Text
|
||||
|
||||
UGL - Unglued (1998-08-11)
|
||||
|
||||
UGL - Unglued (1998-08-11)
|
||||
|
||||
Pegasus, 89, W, 1|1, -, Creature - Pegasus, Mark Zug, Flying
|
||||
Soldier, 90, W, 1|1, -, Creature - Soldier, Daren Bader, -
|
||||
Zombie, 91, B, 2|2, -, Creature - Zombie, Christopher Rush, -
|
||||
|
@ -9,27 +9,27 @@ Goblin, 92, R, 1|1, -, Creature - Goblin, Pete Venters, -
|
|||
Sheep, 93, G, 1|1, -, Creature - Sheep, Kev Walker, -
|
||||
Squirrel, 94, G, 1|1, -, Creature - Squirrel, Ron Spencer, -
|
||||
|
||||
ATH - Anthologies (1998-11-01)
|
||||
|
||||
ATH - Anthologies (1998-11-01)
|
||||
|
||||
Pegasus, 89, W, 1|1, -, Creature - Pegasus, Mark Zug, Flying
|
||||
Goblin, 92, R, 1|1, -, Creature - Goblin, Pete Venters, -
|
||||
|
||||
INV - Invasion (2000-10-02)
|
||||
|
||||
INV - Invasion (2000-10-02)
|
||||
|
||||
Bird, T1, U, 1|1, Player Rewards, Creature - Bird, Michael Sutfin, Flying
|
||||
Elephant, T2, G, 3|3, Player Rewards, Creature - Elephant, Terese Nielsen, -
|
||||
Saproling, T3, G, 1|1, Player Rewards, Creature - Saproling, Jeff Laubenstein, -
|
||||
|
||||
PLS - Planeshift (2001-02-05)
|
||||
|
||||
PLS - Planeshift (2001-02-05)
|
||||
|
||||
Spirit, T1, W, 1|1, Player Rewards, Creature - Spirit, John Matson, Flying
|
||||
|
||||
APC - Apocalypse (2001-06-04)
|
||||
|
||||
APC - Apocalypse (2001-06-04)
|
||||
|
||||
Goblin Soldier, T1, R W, 1|1, Player Rewards, Creature - Goblin Soldier, Ron Spears, -
|
||||
|
||||
ODY - Odyssey (2001-10-01)
|
||||
|
||||
ODY - Odyssey (2001-10-01)
|
||||
|
||||
Bear, T1, G, 2|2, Player Rewards, Creature - Bear, Heather Hudson, -
|
||||
Beast, T2, G, 4|4, Player Rewards, Creature - Beast, Larry Elmore, -
|
||||
Elephant, T3, G, 3|3, Player Rewards, Creature - Elephant, Arnie Swekel, -
|
||||
|
@ -37,46 +37,46 @@ Squirrel, T4, G, 1|1, Player Rewards, Creature - Squirrel, Ron Spencer, -
|
|||
Wurm, T5, G, 6|6, Player Rewards, Creature - Wurm, Alan Pollack, -
|
||||
Zombie, T6, B, 2|2, Player Rewards, Creature - Zombie, Dana Knutson, -
|
||||
|
||||
ONS - Onslaught (2002-10-07)
|
||||
|
||||
ONS - Onslaught (2002-10-07)
|
||||
|
||||
Bear, T1, G, 2|2, Player Rewards, Creature - Bear, Glen Angus, -
|
||||
Dragon, T2, R, 5|5, Player Rewards, Creature - Dragon, Glen Angus, Flying
|
||||
Insect, T3, G, 1|1, Player Rewards, Creature - Insect, Anthony S. Waters, -
|
||||
Soldier, T4, W, 1|1, Player Rewards, Creature - Soldier, Ron Spencer, -
|
||||
|
||||
LGN - Legions (2003-02-03)
|
||||
|
||||
LGN - Legions (2003-02-03)
|
||||
|
||||
Goblin, T1, R, 1|1, Player Rewards, Creature - Goblin, Darrell Riche, -
|
||||
Sliver, T2, -, 1|1, Player Rewards, Creature - Sliver, Tony Szczudlo, -
|
||||
|
||||
SCG - Scourge (2003-05-26)
|
||||
|
||||
SCG - Scourge (2003-05-26)
|
||||
|
||||
Angel, T1, W, 4|4, Player Rewards, Creature - Angel, Scott M. Fischer, Flying
|
||||
|
||||
8ED - Eighth Edition (2003-07-28)
|
||||
|
||||
Rukh, T1, R, 4|4, Player Rewards, Creature - Rukh, Edward P. Beard‚ Jr., Flying
|
||||
8ED - Eighth Edition (2003-07-28)
|
||||
|
||||
Rukh, T1, R, 4|4, Player Rewards, Creature - Rukh, Edward P. Beard<72> Jr., Flying
|
||||
|
||||
MRD - Mirrodin (2003-10-02)
|
||||
|
||||
MRD - Mirrodin (2003-10-02)
|
||||
|
||||
Demon, T1, B, *|*, Player Rewards, Creature - Demon, Pete Venters, -
|
||||
Myr, T2, -, 1|1, Player Rewards, Creature - Myr, Wayne England, -
|
||||
Pentavite, T3, -, 1|1, Player Rewards, Artifact Creature - Pentavite, Greg Staples, -
|
||||
|
||||
DST - Darksteel (2004-02-06)
|
||||
|
||||
Beast, T1, G, 3|3, Player Rewards, Creature - Beast, Edward P. Beard‚ Jr., -
|
||||
DST - Darksteel (2004-02-06)
|
||||
|
||||
Beast, T1, G, 3|3, Player Rewards, Creature - Beast, Edward P. Beard<72> Jr., -
|
||||
|
||||
CHK - Champions of Kamigawa (2004-10-01)
|
||||
|
||||
CHK - Champions of Kamigawa (2004-10-01)
|
||||
|
||||
Spirit, T1, -, 1|1, Player Rewards, Creature - Spirit, Hugh Jamieson, -
|
||||
|
||||
CSP - Coldsnap (2006-07-21)
|
||||
|
||||
Marit Lage, T1, B, 20|20, Pre-Release, Creature - Avatar, Stephan Martiniere, Flying‚ indestructible
|
||||
CSP - Coldsnap (2006-07-21)
|
||||
|
||||
Marit Lage, T1, B, 20|20, Pre-Release, Creature - Avatar, Stephan Martiniere, Flying<6E> indestructible
|
||||
|
||||
10E - Tenth Edition (2007-07-13)
|
||||
|
||||
10E - Tenth Edition (2007-07-13)
|
||||
|
||||
Soldier, 1, W, 1|1, -, Creature - Soldier, Parente, -
|
||||
Zombie, 2, B, 2|2, -, Creature - Zombie, Carl Critchlow, -
|
||||
Dragon, 3, R, 5|5, -, Creature - Dragon, Jim Pavelec, Flying
|
||||
|
@ -84,8 +84,8 @@ Goblin, 4, R, 1|1, -, Creature - Goblin, Dave Kendall, -
|
|||
Saproling, 5, G, 1|1, -, Creature - Saproling, Cyril Van Der Haegen, -
|
||||
Wasp, 6, -, 1|1, -, Artifact Creature - Insect, Ron Spencer, Flying
|
||||
|
||||
LRW - Lorwyn (2007-10-12)
|
||||
|
||||
LRW - Lorwyn (2007-10-12)
|
||||
|
||||
Avatar, 1, W, *|*, -, Creature - Avatar, Vance Kovacs, This creature's power and toughness are each equal to your life total.
|
||||
Elemental, 2, W, 4|4, -, Creature - Elemental, Anthony S. Waters, Flying
|
||||
Kithkin Soldier, 3, W, 1|1, -, Creature - Kithkin Soldier, Greg Hildebrandt, -
|
||||
|
@ -98,20 +98,20 @@ Elf Warrior, 9, G, 1|1, -, Creature - Elf Warrior, Dominick Domingo, -
|
|||
Wolf, 10, G, 2|2, -, Creature - Wolf, Pete Venters, -
|
||||
Shapeshifter, 11, -, 1|1, -, Creature - Shapeshifter, Franz Vohwinkel, Changeling
|
||||
|
||||
EVG - Duel Decks: Elves vs. Goblins (2007-11-16)
|
||||
|
||||
EVG - Duel Decks: Elves vs. Goblins (2007-11-16)
|
||||
|
||||
Elemental, T1, G, 7|7, -, Creature - Elemental, Anthony S. Waters, Trample
|
||||
Elf Warrior, T2, G, 1|1, -, Creature - Elf Warrior, Dominick Domingo, -
|
||||
Goblin, T3, R, 1|1, -, Creature - Goblin, Dave Kendall, -
|
||||
|
||||
MOR - Morningtide (2008-02-01)
|
||||
|
||||
MOR - Morningtide (2008-02-01)
|
||||
|
||||
Giant Warrior, 1, W, 5|5, -, Creature - Giant Warrior, Steve Ellis, -
|
||||
Faerie Rogue, 2, B, 1|1, -, Creature - Faerie Rogue, Jim Nelson, Flying
|
||||
Treefolk Shaman, 3, G, 2|5, -, Creature - Treefolk Shaman, Richard Sardinha, -
|
||||
|
||||
SHM - Shadowmoor (2008-05-02)
|
||||
|
||||
SHM - Shadowmoor (2008-05-02)
|
||||
|
||||
Kithkin Soldier, 1, W, 1|1, -, Creature - Kithkin Soldier, Randy Gallegos, -
|
||||
Spirit, 2, W, 1|1, -, Creature - Spirit, Jeremy Enecio, Flying
|
||||
Rat, 3, B, 1|1, -, Creature - Rat, Carl Critchlow, -
|
||||
|
@ -125,8 +125,8 @@ Giant Warrior, 10, R G, 4|4, -, Creature - Giant Warrior, Trevor Hairsine, Haste
|
|||
Goblin Warrior, 11, R G, 1|1, -, Creature - Goblin Warrior, Dave Allsop, -
|
||||
Elf Warrior, 12, G W, 1|1, -, Creature - Elf Warrior, Carl Frank, -
|
||||
|
||||
EVE - Eventide (2008-07-25)
|
||||
|
||||
EVE - Eventide (2008-07-25)
|
||||
|
||||
Goat, 1, W, -, -, Creature - Goat, Terese Nielsen, -
|
||||
Bird, 2, U, 1|1, -, Creature - Bird, Heather Hudson, Flying
|
||||
Beast, 3, G, 3|3, -, Creature - Beast, William O'Connor, -
|
||||
|
@ -135,8 +135,8 @@ Elemental, 5, U R, 5|5, -, Creature - Elemental, Randy Gallegos, Flying
|
|||
Worm, 6, B G, 1|1, -, Creature - Worm, Chuck Lukacs, -
|
||||
Goblin Soldier, 7, R W, 1|1, -, Creature - Goblin Soldier, Jeff Miracola, -
|
||||
|
||||
ALA - Shards of Alara (2008-10-03)
|
||||
|
||||
ALA - Shards of Alara (2008-10-03)
|
||||
|
||||
Soldier, 1, W, 1|1, -, Creature - Soldier, Alan Pollack, -
|
||||
Homunculus, 2, U, -, -, Artifact Creature - Homunculus, Howard Lyon, -
|
||||
Thopter, 3, U, 1|1, -, Artifact Creature - Thopter, Andrew Murray, Flying
|
||||
|
@ -148,30 +148,30 @@ Ooze, 8, G, *|*, -, Creature - Ooze, Anthony S. Waters, -
|
|||
Saproling, 9, G, 1|1, -, Creature - Saproling, Trevor Claxton, -
|
||||
Beast, 10, R G W, 8|8, -, Creature - Beast, Parente, -
|
||||
|
||||
DD2 - Duel Decks: Jace vs. Chandra (2008-11-07)
|
||||
|
||||
DD2 - Duel Decks: Jace vs. Chandra (2008-11-07)
|
||||
|
||||
Elemental Shaman, T1, R, 3|1, -, Creature - Elemental Shaman, Jim Pavelec, -
|
||||
|
||||
CFX - Conflux (2009-02-06)
|
||||
|
||||
CFX - Conflux (2009-02-06)
|
||||
|
||||
Angel, 1, W, 4|4, -, Creature - Angel, Cyril Van Der Haegen, Flying
|
||||
Elemental, 2, R, 3|1, -, Creature - Elemental, Vance Kovacs, -
|
||||
|
||||
DDC - Duel Decks: Divine vs. Demonic (2009-04-10)
|
||||
|
||||
DDC - Duel Decks: Divine vs. Demonic (2009-04-10)
|
||||
|
||||
Spirit, T1, W, 1|1, -, Creature - Spirit, Luca Zontini, Flying
|
||||
Demon, T2, B, *|*, -, Creature - Demon, Pete Venters, Flying
|
||||
Thrull, T3, B, -, -, Creature - Thrull, Veronique Meignaud, -
|
||||
|
||||
ARB - Alara Reborn (2009-04-30)
|
||||
|
||||
ARB - Alara Reborn (2009-04-30)
|
||||
|
||||
Bird Soldier, 1, W, 1|1, -, Creature - Bird Soldier, Matt Cavotta, Flying
|
||||
Lizard, 2, G, 2|2, -, Creature - Lizard, Anthony S. Waters, -
|
||||
Dragon, 3, R G, 1|1, -, Creature - Dragon, Jaime Jones, Flying‚ devour 2
|
||||
Dragon, 3, R G, 1|1, -, Creature - Dragon, Jaime Jones, Flying<EFBFBD> devour 2
|
||||
Zombie Wizard, 4, U B, 1|1, -, Creature - Zombie Wizard, Dave Allsop, -
|
||||
|
||||
M10 - Magic 2010 (2009-07-17)
|
||||
|
||||
M10 - Magic 2010 (2009-07-17)
|
||||
|
||||
Avatar, 1, W, *|*, -, Creature - Avatar, Vance Kovacs, This creature's power and toughness are each equal to your life total.
|
||||
Soldier, 2, W, 1|1, -, Creature - Soldier, Parente, -
|
||||
Zombie, 3, B, 2|2, -, Creature - Zombie, Bud Cook, -
|
||||
|
@ -181,8 +181,8 @@ Insect, 6, G, 1|1, -, Creature - Insect, Ron Spencer, -
|
|||
Wolf, 7, G, 2|2, -, Creature - Wolf, Lars Grant-West, -
|
||||
Gargoyle, 8, -, 3|4, -, Artifact Creature - Gargoyle, Paul Bonner, Flying
|
||||
|
||||
ZEN - Zendikar (2009-10-02)
|
||||
|
||||
ZEN - Zendikar (2009-10-02)
|
||||
|
||||
Angel, 1, W, 4|4, -, Creature - Angel, Adi Granov, Flying
|
||||
Bird, 2, W, 1|1, -, Creature - Bird, Howard Lyon, Flying
|
||||
Kor Soldier, 3, W, 1|1, -, Creature - Kor Soldier, Daren Bader, -
|
||||
|
@ -190,19 +190,19 @@ Illusion, 4, U, 2|2, -, Creature - Illusion, Cyril Van Der Haegen, -
|
|||
Merfolk, 5, U, 1|1, -, Creature - Merfolk, Warren Mahy, -
|
||||
Vampire, 6, B, *|*, -, Creature - Vampire, Kekai Kotaki, -
|
||||
Zombie Giant, 7, B, 5|5, -, Creature - Zombie Giant, Igor Kieryluk, -
|
||||
Elemental, 8, R, 7|1, -, Creature - Elemental, Anthony Francisco, Trample‚ haste
|
||||
Elemental, 8, R, 7|1, -, Creature - Elemental, Anthony Francisco, Trample<EFBFBD> haste
|
||||
Beast, 9, G, 4|4, -, Creature - Beast, Steve Prescott, -
|
||||
Snake, 10, G, 1|1, -, Creature - Snake, Austin Hsu, -
|
||||
Wolf, 11, G, 2|2, -, Creature - Wolf, Daren Bader, -
|
||||
|
||||
DDD - Duel Decks: Garruk vs. Liliana (2009-10-30)
|
||||
|
||||
DDD - Duel Decks: Garruk vs. Liliana (2009-10-30)
|
||||
|
||||
Beast, T1, G, 3|3, -, Creature - Beast, John Donahue, -
|
||||
Beast, T2, G, 4|4, -, Creature - Beast, Steve Prescott, -
|
||||
Elephant, T3, G, 3|3, -, Creature - Elephant, Arnie Swekel, -
|
||||
|
||||
WWK - Worldwake (2010-02-05)
|
||||
|
||||
WWK - Worldwake (2010-02-05)
|
||||
|
||||
Soldier Ally, 1, W, 1|1, -, Creature - Soldier Ally, Kekai Kotaki, -
|
||||
Dragon, 2, R, 5|5, -, Creature - Dragon, Raymond Swanland, Flying
|
||||
Ogre, 3, R, 3|3, -, Creature - Ogre, Paul Bonner, -
|
||||
|
@ -210,14 +210,14 @@ Elephant, 4, G, 3|3, -, Creature - Elephant, Lars Grant-West, -
|
|||
Plant, 5, G, -, -, Creature - Plant, Daren Bader, -
|
||||
Construct, 6, -, 6|12, -, Artifact Creature - Construct, Jung Park, Trample
|
||||
|
||||
DDE - Duel Decks: Phyrexia vs. the Coalition (2010-03-19)
|
||||
|
||||
Hornet, T1, -, 1|1, -, Artifact Creature - Insect, Ron Spencer, Flying‚ haste
|
||||
DDE - Duel Decks: Phyrexia vs. the Coalition (2010-03-19)
|
||||
|
||||
Hornet, T1, -, 1|1, -, Artifact Creature - Insect, Ron Spencer, Flying<EFBFBD> haste
|
||||
Minion, T2, B, *|*, -, Creature - Minion, Dave Kendall, -
|
||||
Saproling, T3, G, 1|1, -, Creature - Saproling, Warren Mahy, -
|
||||
|
||||
ROE - Rise of the Eldrazi (2010-04-23)
|
||||
|
||||
ROE - Rise of the Eldrazi (2010-04-23)
|
||||
|
||||
Eldrazi Spawn, 1a, -, -, -, Creature - Eldrazi Spawn, Aleksi Briclot, Sacrifice this creature: Add {1} to your mana pool.
|
||||
Eldrazi Spawn, 1b, -, -, -, Creature - Eldrazi Spawn, Mark Tedin, Sacrifice this creature: Add {1} to your mana pool.
|
||||
Eldrazi Spawn, 1c, -, -, -, Creature - Eldrazi Spawn, Veronique Meignaud, Sacrifice this creature: Add {1} to your mana pool.
|
||||
|
@ -226,21 +226,21 @@ Hellion, 3, R, 4|4, -, Creature - Hellion, Anthony Francisco, -
|
|||
Ooze, 4, G, *|*, -, Creature - Ooze, Daniel Ljunggren, -
|
||||
Tuktuk The Returned, 5, -, 5|5, -, Legendary Artifact Creature - Goblin Golem, Franz Vohwinkel, -
|
||||
|
||||
M11 - Magic 2011 (2010-07-16)
|
||||
|
||||
M11 - Magic 2011 (2010-07-16)
|
||||
|
||||
Avatar, 1, W, *|*, -, Creature - Avatar, Vance Kovacs, This creature's power and toughness are each equal to your life total.
|
||||
Bird, 2, W, 3|3, -, Creature - Bird, Paul Bonner, Flying
|
||||
Zombie, 3, B, 2|2, -, Creature - Zombie, Bud Cook, -
|
||||
Beast, 4, G, 3|3, -, Creature - Beast, John Donahue, -
|
||||
Ooze, 5, G, 2|2, -, Creature - Ooze, Raymond Swanland, When this creature dies‚ put two 1/1 green Ooze creature tokens onto the battlefield.
|
||||
Ooze, 5, G, 2|2, -, Creature - Ooze, Raymond Swanland, When this creature dies<EFBFBD> put two 1/1 green Ooze creature tokens onto the battlefield.
|
||||
Ooze, 6, G, 1|1, -, Creature - Ooze, Raymond Swanland, -
|
||||
|
||||
DDF - Duel Decks: Elspeth vs. Tezzeret (2010-09-03)
|
||||
|
||||
DDF - Duel Decks: Elspeth vs. Tezzeret (2010-09-03)
|
||||
|
||||
Soldier, T1, W, 1|1, -, Creature - Soldier, Parente, -
|
||||
|
||||
SOM - Scars of Mirrodin (2010-10-01)
|
||||
|
||||
SOM - Scars of Mirrodin (2010-10-01)
|
||||
|
||||
Cat, 1, W, 2|2, -, Creature - Cat, Scott Chou, -
|
||||
Soldier, 2, W, 1|1, -, Creature - Soldier, Goran Josic, -
|
||||
Goblin, 3, R, 1|1, -, Creature - Goblin, Goran Josic, -
|
||||
|
@ -252,8 +252,8 @@ Wurm, 8, -, 3|3, -, Artifact Creature - Wurm, Raymond Swanland, Deathtouch
|
|||
Wurm, 9, -, 3|3, -, Artifact Creature - Wurm, Raymond Swanland, Lifelink
|
||||
Poison Counter, -, -, -, -, Emblem, -, -
|
||||
|
||||
MBS - Mirrodin Besieged (2011-02-04)
|
||||
|
||||
MBS - Mirrodin Besieged (2011-02-04)
|
||||
|
||||
Germ, 1, B, -, -, Creature - Germ, Igor Kieryluk, -
|
||||
Zombie, 2, B, 2|2, -, Creature - Zombie, Dave Kendall, -
|
||||
Golem, 3, -, 9|9, -, Artifact Creature - Golem, Svetlin Velinov, -
|
||||
|
@ -261,20 +261,20 @@ Horror, 4, -, *|*, -, Artifact Creature - Horror, Scott Chou, -
|
|||
Thopter, 5, -, 1|1, -, Artifact Creature - Thopter, Volkan Baga, Flying
|
||||
Poison Counter, -, -, -, -, Emblem, -, -
|
||||
|
||||
DDG - Duel Decks: Knights vs. Dragons (2011-04-01)
|
||||
|
||||
DDG - Duel Decks: Knights vs. Dragons (2011-04-01)
|
||||
|
||||
Goblin, T1, R, 1|1, -, Creature - Goblin, Brandon Kitkouski, -
|
||||
|
||||
NPH - New Phyrexia (2011-05-13)
|
||||
|
||||
NPH - New Phyrexia (2011-05-13)
|
||||
|
||||
Beast, 1, G, 3|3, -, Creature - Beast, Dave Allsop, -
|
||||
Goblin, 2, R, 1|1, -, Creature - Goblin, Jaime Jones, -
|
||||
Golem, 3, -, 3|3, -, Artifact Creature - Golem, Volkan Baga, -
|
||||
Myr, 4, -, 1|1, -, Artifact Creature - Myr, Matt Stewart, -
|
||||
Poison Counter, -, -, -, -, Emblem, -, -
|
||||
|
||||
M12 - Magic 2012 (2011-07-15)
|
||||
|
||||
M12 - Magic 2012 (2011-07-15)
|
||||
|
||||
Bird, 1, W, 3|3, -, Creature - Bird, Paul Bonner, Flying
|
||||
Soldier, 2, W, 1|1, -, Creature - Soldier, Parente, -
|
||||
Zombie, 3, B, 2|2, -, Creature - Zombie, Carl Critchlow, -
|
||||
|
@ -283,13 +283,13 @@ Saproling, 5, G, 1|1, -, Creature - Saproling, Cyril Van Der Haegen, -
|
|||
Wurm, 6, G, 6|6, -, Creature - Wurm, Anthony Francisco, -
|
||||
Pentavite, 7, -, 1|1, -, Artifact Creature - Pentavite, Greg Staples, Flying
|
||||
|
||||
DDH - Duel Decks: Ajani vs. Nicol Bolas (2011-09-02)
|
||||
|
||||
DDH - Duel Decks: Ajani vs. Nicol Bolas (2011-09-02)
|
||||
|
||||
Griffin, T1, W, 2|2, -, Creature - Griffin, Jim Nelson, Flying
|
||||
Saproling, T2, G, 1|1, -, Creature - Saproling, Cyril Van Der Haegen, -
|
||||
|
||||
ISD - Innistrad (2011-09-30)
|
||||
|
||||
ISD - Innistrad (2011-09-30)
|
||||
|
||||
Angel, 1, W, 4|4, -, Creature - Angel, Winona Nelson, Flying
|
||||
Spirit, 2, W, 1|1, -, Creature - Spirit, Kev Walker, Flying
|
||||
Homunculus, 3, U, 2|2, -, Creature - Homunculus, Johann Bodin, -
|
||||
|
@ -304,24 +304,24 @@ Spider, 11, G, 1|2, -, Creature - Spider, Daniel Ljunggren, Reach
|
|||
Wolf, 12, G, 2|2, -, Creature - Wolf, David Palumbo, -
|
||||
Wolf, T12, G, 2|2, Judge, Creature - Wolf, David Palumbo, -
|
||||
|
||||
DKA - Dark Ascension (2012-02-03)
|
||||
|
||||
DKA - Dark Ascension (2012-02-03)
|
||||
|
||||
Human, 1, W, 1|1, -, Creature - Human, John Stanko, -
|
||||
Vampire, 2, B, 1|1, -, Creature - Vampire, Peter Mohrbacher, Lifelink
|
||||
Sorin Emblem, 3, -, -, -, Emblem - Sorin, Michael Komrack, Creatures you control get +1/+0.
|
||||
|
||||
DDI - Duel Decks: Venser vs. Koth (2012-03-30)
|
||||
|
||||
Koth Emblem, E1, -, -, -, Emblem - Koth, Eric Deschamps, Mountains you control have Tap: This land deals 1 damage to target creature or player.'
|
||||
Venser Emblem, E2, -, -, -, Emblem - Venser, Eric Deschamps, Whenever you cast a spell‚ exile target permanent.
|
||||
DDI - Duel Decks: Venser vs. Koth (2012-03-30)
|
||||
|
||||
Koth Emblem, E1, -, -, -, Emblem - Koth, Eric Deschamps, Mountains you control have Tap: This land deals 1 damage to target creature or player.'
|
||||
Venser Emblem, E2, -, -, -, Emblem - Venser, Eric Deschamps, Whenever you cast a spell<6C> exile target permanent.
|
||||
|
||||
FNM - Friday Night Magic (2012-04-01)
|
||||
|
||||
FNM - Friday Night Magic (2012-04-01)
|
||||
|
||||
Human, T1a, W, 1|1, Full Moon, Creature - Human, Lars Grant-West, -
|
||||
Wolf, T1b, G, 2|2, Full Moon, Creature - Wolf, Lars Grant-West, -
|
||||
|
||||
AVR - Avacyn Restored (2012-05-04)
|
||||
|
||||
AVR - Avacyn Restored (2012-05-04)
|
||||
|
||||
Angel, 1, W, 4|4, -, Creature - Angel, Anthony Palumbo, Flying
|
||||
Human, 2, W, 1|1, -, Creature - Human, Michael C. Hayes, -
|
||||
Spirit, 3, W, 1|1, -, Creature - Spirit, Ryan Yee, Flying
|
||||
|
@ -329,14 +329,14 @@ Spirit, 4, U, 1|1, -, Creature - Spirit, Dan Scott, Flying
|
|||
Demon, 5, B, 5|5, -, Creature - Demon, Kev Walker, Flying
|
||||
Zombie, 6, B, 2|2, -, Creature - Zombie, Lucas Graciano, -
|
||||
Human, 7, R, 1|1, -, Creature - Human, Ryan Pancoast, Haste
|
||||
Tamiyo Emblem, 8, -, -, -, Emblem - Tamiyo, Eric Deschamps, You have no maximum hand size. Whenever a card is put into your graveyard from anywhere‚ you may return it to your hand.
|
||||
Tamiyo Emblem, 8, -, -, -, Emblem - Tamiyo, Eric Deschamps, You have no maximum hand size. Whenever a card is put into your graveyard from anywhere<EFBFBD> you may return it to your hand.
|
||||
Angel, T1, W, 4|4, Pre-Release, Creature - Angel, James Ryman, Flying
|
||||
Angel, T1F, W, 4|4, Pre-Release, Creature - Angel, James Ryman, Flying
|
||||
Demon, T5, B, 5|5, Pre-Release, Creature - Demon, Karl Kopinski, Flying
|
||||
Demon, T5F, B, 5|5, Pre-Release, Creature - Demon, Karl Kopinski, Flying
|
||||
|
||||
M13 - Magic 2013 (2012-07-13)
|
||||
|
||||
M13 - Magic 2013 (2012-07-13)
|
||||
|
||||
Goblin, 1, R, 1|1, League, Creature - Goblin, Jim Nelson, -
|
||||
Cat, 1, W, 2|2, -, Creature - Cat, Jesper Ejsing, -
|
||||
Goat, 2, W, -, -, Creature - Goat, Adam Paquette, -
|
||||
|
@ -350,18 +350,18 @@ Saproling, 9, G, 1|1, -, Creature - Saproling, Brad Rigney, -
|
|||
Wurm, 10, G, 6|6, -, Creature - Wurm, Anthony Francisco, -
|
||||
Liliana Emblem, 11, -, -, -, Emblem - Liliana, D. Alexander Gregory, Swamps you control have Tap: Add {B}{B}{B}{B} to your mana pool.'
|
||||
|
||||
DDJ - Duel Decks: Izzet vs. Golgari (2012-09-07)
|
||||
|
||||
DDJ - Duel Decks: Izzet vs. Golgari (2012-09-07)
|
||||
|
||||
Saproling, T1, G, 1|1, -, Creature - Saproling, Brad Rigney, -
|
||||
|
||||
RTR - Return to Ravnica (2012-10-05)
|
||||
|
||||
RTR - Return to Ravnica (2012-10-05)
|
||||
|
||||
Centaur, 1, G, 3|3, Judge, Creature - Centaur, James Ryman, -
|
||||
Knight, 1, W, 2|2, League, Creature - Knight, Lucas Graciano, Vigilance
|
||||
Bird, 1, W, 1|1, -, Creature - Bird, James Ryman, Flying
|
||||
Knight, 2, W, 2|2, -, Creature - Knight, Matt Stewart, Vigilance
|
||||
Soldier, 3, W, 1|1, -, Creature - Soldier, Steve Prescott, -
|
||||
Assassin, 4, B, 1|1, -, Creature - Assassin, Svetlin Velinov, Whenever this creature deals combat damage to a player‚ that player loses the game.
|
||||
Assassin, 4, B, 1|1, -, Creature - Assassin, Svetlin Velinov, Whenever this creature deals combat damage to a player<EFBFBD> that player loses the game.
|
||||
Dragon, 5, R, 6|6, -, Creature - Dragon, Mark Zug, Flying
|
||||
Goblin, 6, R, 1|1, -, Creature - Goblin, Christopher Moeller, -
|
||||
Centaur, 7, G, 3|3, -, Creature - Centaur, Slawomir Maniak, -
|
||||
|
@ -371,29 +371,29 @@ Saproling, 10, G, 1|1, -, Creature - Saproling, Raoul Vitale, -
|
|||
Wurm, 11, G, 5|5, -, Creature - Wurm, Anthony Palumbo, Trample
|
||||
Elemental, 12, G W, 8|8, -, Creature - Elemental, Yeong-Hao Han, Vigilance
|
||||
|
||||
GTC - Gatecrash (2013-02-01)
|
||||
|
||||
GTC - Gatecrash (2013-02-01)
|
||||
|
||||
Soldier, 1, R W, 1|1, League, Creature - Soldier, Zoltan Boros, Haste
|
||||
Angel, 1, W, 4|4, -, Creature - Angel, Steve Argyle, Flying
|
||||
Rat, 2, B, 1|1, -, Creature - Rat, Nils Hamm, -
|
||||
Frog Lizard, 3, G, 3|3, -, Creature - Frog Lizard, Jack Wang, -
|
||||
Cleric, 4, W B, 1|1, -, Creature - Cleric, Jason Chan, {3}{W}{B}{B}‚ {T}‚ Sacrifice this creature: Return a card named Deathpact Angel from your graveyard to the battlefield.
|
||||
Cleric, 4, W B, 1|1, -, Creature - Cleric, Jason Chan, {3}{W}{B}{B}<EFBFBD> {T}<7D> Sacrifice this creature: Return a card named Deathpact Angel from your graveyard to the battlefield.
|
||||
Horror, 5, U B, 1|1, -, Creature - Horror, Adam Paquette, Flying
|
||||
Soldier, 6, R W, 1|1, -, Creature - Soldier, David Palumbo, Haste
|
||||
Spirit, 7, W B, 1|1, -, Creature - Spirit, Cliff Childs, Flying
|
||||
Domri Emblem, 8, -, -, -, Emblem - Domri, Tyler Jacobson, Creatures you control have double strike‚ trample‚ hexproof‚ and haste.
|
||||
Domri Emblem, 8, -, -, -, Emblem - Domri, Tyler Jacobson, Creatures you control have double strike<6B> trample<6C> hexproof<6F> and haste.
|
||||
|
||||
DDK - Duel Decks: Sorin vs. Tibalt (2013-03-15)
|
||||
|
||||
DDK - Duel Decks: Sorin vs. Tibalt (2013-03-15)
|
||||
|
||||
Spirit, T1, W, 1|1, -, Creature - Spirit, Ryan Yee, Flying
|
||||
|
||||
DGM - Dragon's Maze (2013-05-03)
|
||||
|
||||
DGM - Dragon's Maze (2013-05-03)
|
||||
|
||||
Bird, 1, W, 1|1, League, Creature - Bird, Martina Pilcerova, Flying
|
||||
Elemental, 1, G W, *|*, -, Creature - Elemental, Mark Winters, This creature's power and toughness are each equal to the number of creatures you control.
|
||||
|
||||
MMA - Modern Masters (2013-06-07)
|
||||
|
||||
MMA - Modern Masters (2013-06-07)
|
||||
|
||||
Giant Warrior, 1, W, 5|5, -, Creature - Giant Warrior, Svetlin Velinov, -
|
||||
Kithkin Soldier, 2, W, 1|1, -, Creature - Kithkin Soldier, Randy Gallegos, -
|
||||
Soldier, 3, W, 1|1, -, Creature - Soldier, Goran Josic, -
|
||||
|
@ -409,10 +409,10 @@ Saproling, 12, G, 1|1, -, Creature - Saproling, Warren Mahy, -
|
|||
Treefolk Shaman, 13, G, 2|5, -, Creature - Treefolk Shaman, Zack Stella, -
|
||||
Faerie Rogue, 14, U B, 1|1, -, Creature - Faerie Rogue, E. M. Gist, Flying
|
||||
Worm, 15, B G, 1|1, -, Creature - Worm, Chuck Lukacs, -
|
||||
Elspeth Emblem, 16, -, -, -, Emblem - Elspeth, Volkan Baga, Artifacts‚ creatures‚ enchantments‚ and lands you control have indestructible.
|
||||
Elspeth Emblem, 16, -, -, -, Emblem - Elspeth, Volkan Baga, Artifacts<74> creatures<65> enchantments<74> and lands you control have indestructible.
|
||||
|
||||
M14 - Magic 2014 Core Set (2013-07-19)
|
||||
|
||||
M14 - Magic 2014 Core Set (2013-07-19)
|
||||
|
||||
Sliver, 1, -, 1|1, -, Creature - Sliver, Igor Kieryluk, -
|
||||
Angel, 1, W, 4|4, -, Creature - Angel, James Ryman, Flying
|
||||
Cat, 3, W, 2|2, -, Creature - Cat, Jesper Ejsing, -
|
||||
|
@ -425,16 +425,16 @@ Beast, 9, G, 3|3, -, Creature - Beast, John Donahue, -
|
|||
Saproling, 10, G, 1|1, -, Creature - Saproling, Brad Rigney, -
|
||||
Wolf, 11, G, 2|2, -, Creature - Wolf, Lars Grant-West, -
|
||||
Liliana Emblem, 12, -, -, -, Emblem - Liliana, D. Alexander Gregory, Swamps you control have Tap: Add {B}{B}{B}{B} to your mana pool.'
|
||||
Garruk Emblem, 13, -, -, -, Emblem - Garruk, Karl Kopinski, Whenever you cast a creature spell‚ you may search your library for a creature card‚ put it onto the battlefield‚ then shuffle your library.
|
||||
Garruk Emblem, 13, -, -, -, Emblem - Garruk, Karl Kopinski, Whenever you cast a creature spell<EFBFBD> you may search your library for a creature card<72> put it onto the battlefield<6C> then shuffle your library.
|
||||
Sliver, T1, -, 1|1, League, Creature - Sliver, Vincent Proce, -
|
||||
|
||||
DDL - Duel Decks: Heroes vs. Monsters (2013-09-06)
|
||||
|
||||
DDL - Duel Decks: Heroes vs. Monsters (2013-09-06)
|
||||
|
||||
Griffin, T1, W, 2|2, -, Creature - Griffin, Johann Bodin, Flying
|
||||
Beast, T2, G, 3|3, -, Creature - Beast, Jesper Ejsing, -
|
||||
|
||||
THS - Theros (2013-09-27)
|
||||
|
||||
THS - Theros (2013-09-27)
|
||||
|
||||
Golem, 1, -, 3|3, Judge, Enchantment Artifact Creature - Golem, Yeong-Hao Han, -
|
||||
Soldier, 1, W, 1|1, League, Creature - Soldier, Johann Bodin, -
|
||||
Cleric, 1, W, 2|1, -, Enchantment Creature - Cleric, Johann Bodin, -
|
||||
|
@ -449,8 +449,8 @@ Satyr, 9, R G, 2|2, -, Creature - Satyr, Johann Bodin, -
|
|||
Golem, 10, -, 3|3, -, Enchantment Artifact Creature - Golem, Yeong-Hao Han, -
|
||||
Elspeth Emblem, 11, -, -, -, Emblem - Elspeth, Eric Deschamps, Creatures you control get +2/+2 and have flying.
|
||||
|
||||
BNG - Born of the Gods (2014-02-07)
|
||||
|
||||
BNG - Born of the Gods (2014-02-07)
|
||||
|
||||
Soldier, 1, W, 1|1, League, Enchantment Creature - Soldier, Ryan Barger, -
|
||||
Bird, 1, W, 1|1, -, Creature - Bird, Clint Cearly, Flying
|
||||
Cat Soldier, 2, W, 1|1, -, Creature - Cat Soldier, Scott Chou, Vigilance
|
||||
|
@ -462,14 +462,14 @@ Elemental, 7, R, 3|1, -, Enchantment Creature - Elemental, Greg Staples, -
|
|||
Centaur, 8, G, 3|3, -, Enchantment Creature - Centaur, Ryan Barger, -
|
||||
Wolf, 9, G, 2|2, -, Creature - Wolf, Raoul Vitale, -
|
||||
Gold, 10, -, -, -, Artifact, Richard Wright, Sacrifice this artifact: Add one mana of any color to your mana pool.
|
||||
Kiora Emblem, 11, -, -, -, Emblem - Kiora, Scott M. Fischer, At the beginning of your end step‚ put a 9/9 blue Kraken creature token onto the battlefield.
|
||||
Kiora Emblem, 11, -, -, -, Emblem - Kiora, Scott M. Fischer, At the beginning of your end step<EFBFBD> put a 9/9 blue Kraken creature token onto the battlefield.
|
||||
|
||||
DDM - Duel Decks: Jace vs. Vraska (2014-03-14)
|
||||
|
||||
Assassin, T1, B, 1|1, -, Creature - Assassin, Svetlin Velinov, Whenever this creature deals combat damage to a player‚ that player loses the game.
|
||||
DDM - Duel Decks: Jace vs. Vraska (2014-03-14)
|
||||
|
||||
Assassin, T1, B, 1|1, -, Creature - Assassin, Svetlin Velinov, Whenever this creature deals combat damage to a player<65> that player loses the game.
|
||||
|
||||
JOU - Journey into Nyx (2014-05-02)
|
||||
|
||||
JOU - Journey into Nyx (2014-05-02)
|
||||
|
||||
Minotaur, 1, R, 2|3, League, Creature - Minotaur, Scott Murphy, -
|
||||
Sphinx, 1, U, 4|4, -, Creature - Sphinx, Jesper Ejsing, Flying
|
||||
Zombie, 2, B, *|*, -, Creature - Zombie, Zack Stella, -
|
||||
|
@ -478,15 +478,15 @@ Hydra, 4, G, *|*, -, Creature - Hydra, Steve Prescott, -
|
|||
Spider, 5, G, 1|3, -, Enchantment Creature - Spider, Yohann Schepacz, Reach
|
||||
Snake, 6, G B, 1|1, -, Enchantment Creature - Snake, Greg Staples, Deathtouch
|
||||
|
||||
MD1 - Modern Event Deck 2014 (2014-05-30)
|
||||
|
||||
MD1 - Modern Event Deck 2014 (2014-05-30)
|
||||
|
||||
Soldier, 1, W, 1|1, -, Creature - Soldier, Goran Josic, -
|
||||
Spirit, 2, W, 1|1, -, Creature - Spirit, Kev Walker, Flying
|
||||
Myr, 3, -, 1|1, -, Artifact Creature - Myr, Matt Stewart, -
|
||||
Elspeth Emblem, 4, -, -, -, Emblem - Elspeth, Volkan Baga, Artifacts‚ creatures‚ enchantments‚ and lands you control have indestructible.
|
||||
Elspeth Emblem, 4, -, -, -, Emblem - Elspeth, Volkan Baga, Artifacts<74> creatures<65> enchantments<74> and lands you control have indestructible.
|
||||
|
||||
CNS - Conspiracy (2014-06-06)
|
||||
|
||||
CNS - Conspiracy (2014-06-06)
|
||||
|
||||
Spirit, 1, W, 1|1, -, Creature - Spirit, Jeff Simpson, Flying
|
||||
Demon, 2, B, *|*, -, Creature - Demon, Evan Shipard, Flying
|
||||
Zombie, 3, B, 2|2, -, Creature - Zombie, Lucas Graciano, -
|
||||
|
@ -495,10 +495,10 @@ Elephant, 5, G, 3|3, -, Creature - Elephant, Lars Grant-West, -
|
|||
Squirrel, 6, G, 1|1, -, Creature - Squirrel, Daniel Ljunggren, -
|
||||
Wolf, 7, G, 2|2, -, Creature - Wolf, Raoul Vitale, -
|
||||
Construct, 8, -, 1|1, -, Artifact Creature - Construct, Adam Paquette, Defender
|
||||
Dack Emblem, 9, -, -, -, Emblem - Dack, Eric Deschamps, Whenever you cast a spell that targets one or more permanents‚ gain control of those permanents.
|
||||
Dack Emblem, 9, -, -, -, Emblem - Dack, Eric Deschamps, Whenever you cast a spell that targets one or more permanents<74> gain control of those permanents.
|
||||
|
||||
M15 - Magic 2015 Core Set (2014-07-18)
|
||||
|
||||
M15 - Magic 2015 Core Set (2014-07-18)
|
||||
|
||||
Wolf, 001, G, 1|1, Pre-Release, Creature - Wolf, David Palumbo, -
|
||||
Sliver, 001, -, 1|1, -, Creature - Sliver, Igor Kieryluk, -
|
||||
Squid, 001, U, 1|1, League, Creature - Squid, Richard Wright, Islandwalk
|
||||
|
@ -510,18 +510,18 @@ Zombie, 006, B, 2|2, -, Creature - Zombie, Lucas Graciano, -
|
|||
Dragon, 007, R, 2|2, -, Creature - Dragon, Jack Wang, Flying {R}: This creature gets +1/+0 until end of turn.
|
||||
Goblin, 008, R, 1|1, -, Creature - Goblin, Karl Kopinski, -
|
||||
Beast, 009, G, 3|3, -, Creature - Beast, Dave Kendall, -
|
||||
Insect, 010, G, 1|1, -, Creature - Insect, Martina Pilcerova, Flying‚ deathtouch
|
||||
Insect, 010, G, 1|1, -, Creature - Insect, Martina Pilcerova, Flying<EFBFBD> deathtouch
|
||||
Treefolk Warrior, 011, G, *|*, -, Creature - Treefolk Warrior, Todd Lockwood, This creature's power and toughness are each equal to the number of Forests you control.
|
||||
Land Mine, 012, -, -, -, Artifact, Kev Walker, {R}‚ Sacrifice this artifact: This artifact deals 2 damage to target attacking creature without flying.
|
||||
Ajani Emblem, 013, -, -, -, Emblem - Ajani, Chris Rahn, If a source would deal damage to you or a planeswalker you control‚ prevent all but 1 of that damage.
|
||||
Garruk Emblem, 014, -, -, -, Emblem - Garruk, Tyler Jacobson, Whenever a creature attacks you‚ it gets +5/+5 and gains trample until end of turn.
|
||||
Land Mine, 012, -, -, -, Artifact, Kev Walker, {R}<7D> Sacrifice this artifact: This artifact deals 2 damage to target attacking creature without flying.
|
||||
Ajani Emblem, 013, -, -, -, Emblem - Ajani, Chris Rahn, If a source would deal damage to you or a planeswalker you control<6F> prevent all but 1 of that damage.
|
||||
Garruk Emblem, 014, -, -, -, Emblem - Garruk, Tyler Jacobson, Whenever a creature attacks you<6F> it gets +5/+5 and gains trample until end of turn.
|
||||
|
||||
DDN - Duel Decks: Speed vs. Cunning (2014-09-05)
|
||||
|
||||
DDN - Duel Decks: Speed vs. Cunning (2014-09-05)
|
||||
|
||||
Goblin, 082, R, 1|1, -, Creature - Goblin, Karl Kopinski, -
|
||||
|
||||
KTK - Khans of Tarkir (2014-09-26)
|
||||
|
||||
KTK - Khans of Tarkir (2014-09-26)
|
||||
|
||||
Warrior, 001, W, 1|1, League, Creature - Warrior, Winona Nelson, -
|
||||
Bird, 001, W, 3|4, -, Creature - Bird, Mark Zug, Flying
|
||||
Spirit, 002, W, 1|1, -, Creature - Spirit, Mike Sass, Flying
|
||||
|
@ -534,11 +534,11 @@ Bear, 008, G, 4|4, -, Creature - Bear, Kev Walker, -
|
|||
Snake, 009, G, 1|1, -, Creature - Snake, Lars Grant-West, -
|
||||
Spirit Warrior, 010, B G, *|*, -, Creature - Spirit Warrior, Ryan Alexander Lee, -
|
||||
Morph, 011, -, 2|2, -, Creature, Raymond Swanland, (You can cover a face-down creature with this reminder card. A card with morph can be turned face up any time for its morph cost.)
|
||||
Sarkhan Emblem, 012, -, -, -, Emblem - Sarkhan, Daarken, At the beginning of your draw step‚ draw two additional cards. At the beginning of your end step‚ discard your hand.
|
||||
Sorin Emblem, 013, -, -, -, Emblem - Sorin, Cynthia Sheppard, At the beginning of each opponent's upkeep‚ that player sacrifices a creature.
|
||||
Sarkhan Emblem, 012, -, -, -, Emblem - Sarkhan, Daarken, At the beginning of your draw step<65> draw two additional cards. At the beginning of your end step<65> discard your hand.
|
||||
Sorin Emblem, 013, -, -, -, Emblem - Sorin, Cynthia Sheppard, At the beginning of each opponent's upkeep<65> that player sacrifices a creature.
|
||||
|
||||
C14 - Commander 2014 (2014-11-07)
|
||||
|
||||
C14 - Commander 2014 (2014-11-07)
|
||||
|
||||
Angel, 001, W, 4|4, -, Creature - Angel, Anthony Palumbo, Flying
|
||||
Cat, 002, W, 2|2, -, Creature - Cat, Scott Chou, -
|
||||
Goat, 003, W, -, -, Creature - Goat, Adam Paquette, -
|
||||
|
@ -546,9 +546,9 @@ Kor Soldier, 004, W, 1|1, -, Creature - Kor Soldier, Daren Bader, -
|
|||
Pegasus, 005, W, 1|1, -, Creature - Pegasus, Greg Hildebrandt, Flying
|
||||
Soldier, 006, W, 1|1, -, Creature - Soldier, Goran Josic, -
|
||||
Spirit, 007, W, 1|1, -, Creature - Spirit, Ryan Yee, Flying
|
||||
Fish, 008, U, 3|3, -, Creature - Fish, Dan Scott, When this creature dies‚ put a 6/6 blue Whale creature token onto the battlefield with "When this creature dies‚ put a 9/9 blue Kraken creature token onto the battlefield."
|
||||
Fish, 008, U, 3|3, -, Creature - Fish, Dan Scott, When this creature dies<EFBFBD> put a 6/6 blue Whale creature token onto the battlefield with "When this creature dies<65> put a 9/9 blue Kraken creature token onto the battlefield."
|
||||
Kraken, 009, U, 9|9, -, Creature - Kraken, Dan Scott, -
|
||||
Whale, 010, U, 6|6, -, Creature - Whale, Dan Scott, When this creature dies‚ put a 9/9 blue Kraken creature token onto the battlefield.
|
||||
Whale, 010, U, 6|6, -, Creature - Whale, Dan Scott, When this creature dies<EFBFBD> put a 9/9 blue Kraken creature token onto the battlefield.
|
||||
Zombie, 011, U, *|*, -, Creature - Zombie, Dave Kendall, -
|
||||
Demon, 012, B, *|*, -, Creature - Demon, Pete Venters, Flying
|
||||
Demon, 013, B, 5|5, -, Creature - Demon, Kev Walker, Flying
|
||||
|
@ -573,47 +573,47 @@ Tuktuk The Returned, 031, -, 5|5, -, Legendary Artifact Creature - Goblin Golem,
|
|||
Wurm, 032, -, 3|3, -, Artifact Creature - Wurm, Raymond Swanland, Deathtouch
|
||||
Wurm, 033, -, 3|3, -, Artifact Creature - Wurm, Raymond Swanland, Lifelink
|
||||
Teferi Emblem, 034, -, -, -, Emblem - Teferi, Tyler Jacobson, You may activate loyalty abilities of planeswalkers you control on any player's turn any time you could cast an instant.
|
||||
Nixilis Emblem, 035, -, -, -, Emblem - Nixilis, Daarken, {1}{B}‚ Sacrifice a creature: You gain X life and draw X cards‚ where X is the sacrificed creature's power.
|
||||
Daretti Emblem, 036, -, -, -, Emblem - Daretti, Dan Scott, Whenever an artifact is put into your graveyard from the battlefield‚ return that card to the battlefield at the beginning of the next end step.
|
||||
Nixilis Emblem, 035, -, -, -, Emblem - Nixilis, Daarken, {1}{B}<7D> Sacrifice a creature: You gain X life and draw X cards<64> where X is the sacrificed creature's power.
|
||||
Daretti Emblem, 036, -, -, -, Emblem - Daretti, Dan Scott, Whenever an artifact is put into your graveyard from the battlefield<6C> return that card to the battlefield at the beginning of the next end step.
|
||||
|
||||
DD3_EVG - Duel Decks Anthology<67> Elves vs. Goblins (2014-12-05)
|
||||
|
||||
DD3_EVG - Duel Decks Anthology‚ Elves vs. Goblins (2014-12-05)
|
||||
|
||||
Elemental, 001, G, 7|7, -, Creature - Elemental, Anthony S. Waters, Trample
|
||||
Elf Warrior, 002, G, 1|1, -, Creature - Elf Warrior, Dominick Domingo, -
|
||||
Goblin, 003, R, 1|1, -, Creature - Goblin, Dave Kendall, -
|
||||
|
||||
DD3_JVC - Duel Decks Anthology‚ Jace vs. Chandra (2014-12-05)
|
||||
|
||||
DD3_JVC - Duel Decks Anthology<EFBFBD> Jace vs. Chandra (2014-12-05)
|
||||
|
||||
Elemental Shaman, 004, R, 3|1, -, Creature - Elemental Shaman, Jim Pavelec, -
|
||||
|
||||
DD3_DVD - Duel Decks Anthology‚ Divine vs. Demonic (2014-12-05)
|
||||
|
||||
DD3_DVD - Duel Decks Anthology<EFBFBD> Divine vs. Demonic (2014-12-05)
|
||||
|
||||
Spirit, 005, W, 1|1, -, Creature - Spirit, Luca Zontini, Flying
|
||||
Demon, 006, B, *|*, -, Creature - Demon, Pete Venters, Flying
|
||||
Thrull, 007, B, -, -, Creature - Thrull, Veronique Meignaud, -
|
||||
|
||||
DD3_GVL - Duel Decks Anthology‚ Garruk vs. Liliana (2014-12-05)
|
||||
|
||||
DD3_GVL - Duel Decks Anthology<EFBFBD> Garruk vs. Liliana (2014-12-05)
|
||||
|
||||
Beast, 008, G, 3|3, -, Creature - Beast, John Donahue, -
|
||||
Beast, 009, G, 4|4, -, Creature - Beast, Steve Prescott, -
|
||||
Elephant, 010, G, 3|3, -, Creature - Elephant, Arnie Swekel, -
|
||||
Bat, 011, B, 1|1, -, Creature - Bat, Wayne Reynolds, Flying
|
||||
|
||||
FRF - Fate Reforged (2015-01-23)
|
||||
|
||||
FRF - Fate Reforged (2015-01-23)
|
||||
|
||||
Monk, 001, W, 1|1, -, Creature - Monk, Steven Belledin, Prowess
|
||||
Monk, 001T, W, 1|1, League, Creature - Monk, Magali Villeneuve, Prowess
|
||||
Spirit, 002, W, 1|1, -, Creature - Spirit, Aaron Miller, Flying
|
||||
Warrior, 003, B, 2|1, -, Creature - Warrior, Zoltan Boros, -
|
||||
Manifest, 004, -, 2|2, -, Creature, Raymond Swanland, (You can cover a face-down manifested creature with this reminder card. A manifested creature card can be turned face up any time for its mana cost. A face-down card can also be turned face up for its morph cost.)
|
||||
|
||||
DDO - Duel Decks: Elspeth vs. Kiora (2015-02-27)
|
||||
|
||||
DDO - Duel Decks: Elspeth vs. Kiora (2015-02-27)
|
||||
|
||||
Soldier, 066, W, 1|1, -, Creature - Soldier, Svetlin Velinov, -
|
||||
Kraken, 067, U, 9|9, -, Creature - Kraken, Dan Scott, -
|
||||
|
||||
DTK - Dragons of Tarkir (2015-03-27)
|
||||
|
||||
DTK - Dragons of Tarkir (2015-03-27)
|
||||
|
||||
Warrior, 001, W, 1|1, -, Creature - Warrior, Aaron Miller, -
|
||||
Djinn Monk, 002, U, 2|2, -, Creature - Djinn Monk, Izzy, Flying
|
||||
Zombie, 003, B, 2|2, -, Creature - Zombie, Vincent Proce, -
|
||||
|
@ -623,8 +623,8 @@ Goblin, 006, R, 1|1, -, Creature - Goblin, Mike Bierek, -
|
|||
Morph, 007, -, 2|2, -, Creature, Raymond Swanland, (You can cover a face-down creature with this reminder card. A card with morph can be turned face up any time for its morph cost.)
|
||||
Narset Emblem, 008, -, -, -, Emblem - Narset, Magali Villeneuve, Your opponents can't cast noncreature spells.
|
||||
|
||||
MM2 - Modern Masters 2015 Edition (2015-05-22)
|
||||
|
||||
MM2 - Modern Masters 2015 Edition (2015-05-22)
|
||||
|
||||
Eldrazi Spawn, 001, -, -, -, Creature - Eldrazi Spawn, Aleksi Briclot, Sacrifice this creature: Add {1} to your mana pool.
|
||||
Eldrazi Spawn, 002, -, -, -, Creature - Eldrazi Spawn, Mark Tedin, Sacrifice this creature: Add {1} to your mana pool.
|
||||
Eldrazi Spawn, 003, -, -, -, Creature - Eldrazi Spawn, Veronique Meignaud, Sacrifice this creature: Add {1} to your mana pool.
|
||||
|
@ -642,33 +642,33 @@ Worm, 014, B G, 1|1, -, Creature - Worm, Chuck Lukacs, -
|
|||
Golem, 015, -, 3|3, -, Artifact Creature - Golem, Nic Klein, -
|
||||
Myr, 016, -, 1|1, -, Artifact Creature - Myr, Ryan Pancoast, -
|
||||
|
||||
ORI - Magic Origins (2015-07-17)
|
||||
|
||||
ORI - Magic Origins (2015-07-17)
|
||||
|
||||
Angel, 001, W, 4|4, -, Creature - Angel, Cyril Van Der Haegen, Flying
|
||||
Knight, 002, W, 2|2, -, Creature - Knight, Matt Stewart, Vigilance
|
||||
Soldier, 003, W, 1|1, -, Creature - Soldier, Steve Prescott, -
|
||||
Demon, 004, B, 5|5, -, Creature - Demon, Kev Walker, Flying
|
||||
Zombie, 005, B, 2|2, -, Creature - Zombie, Lucas Graciano, -
|
||||
Goblin, 006, R, 1|1, -, Creature - Goblin, Brandon Kitkouski, -
|
||||
Ashaya‚ the Awoken World, 007, G, 4|4, -, Legendary Creature - Elemental, Raymond Swanland, -
|
||||
Ashaya<EFBFBD> the Awoken World, 007, G, 4|4, -, Legendary Creature - Elemental, Raymond Swanland, -
|
||||
Elemental, 008, G, 2|2, -, Creature - Elemental, Marco Nelor, -
|
||||
Elf Warrior, 009, G, 1|1, -, Creature - Elf Warrior, William O'Connor, -
|
||||
Thopter, 010, -, 1|1, -, Artifact Creature - Thopter, Adam Paquette, Flying
|
||||
Thopter, 011, -, 1|1, -, Artifact Creature - Thopter, Svetlin Velinov, Flying
|
||||
Jace Emblem, 012, -, -, -, Emblem - Jace, Jaime Jones, Whenever you cast a spell‚ target opponent puts the top five cards of his or her library into his or her graveyard.
|
||||
Liliana Emblem, 013, -, -, -, Emblem - Liliana, Karla Ortiz, Whenever a creature dies‚ return it to the battlefield under your control at the beginning of the next end step.
|
||||
Chandra Emblem, 014, -, -, -, Emblem - Chandra, Eric Deschamps, At the beginning of your upkeep‚ this emblem deals 3 damage to you.
|
||||
Jace Emblem, 012, -, -, -, Emblem - Jace, Jaime Jones, Whenever you cast a spell<6C> target opponent puts the top five cards of his or her library into his or her graveyard.
|
||||
Liliana Emblem, 013, -, -, -, Emblem - Liliana, Karla Ortiz, Whenever a creature dies<65> return it to the battlefield under your control at the beginning of the next end step.
|
||||
Chandra Emblem, 014, -, -, -, Emblem - Chandra, Eric Deschamps, At the beginning of your upkeep<65> this emblem deals 3 damage to you.
|
||||
|
||||
DDP - Duel Decks: Zendikar vs. Eldrazi (2015-08-28)
|
||||
|
||||
DDP - Duel Decks: Zendikar vs. Eldrazi (2015-08-28)
|
||||
|
||||
Eldrazi Spawn, 076, -, -, -, Creature - Eldrazi Spawn, Aleksi Briclot, Sacrifice this creature: Add {1} to your mana pool.
|
||||
Eldrazi Spawn, 077, -, -, -, Creature - Eldrazi Spawn, Veronique Meignaud, Sacrifice this creature: Add {1} to your mana pool.
|
||||
Eldrazi Spawn, 078, -, -, -, Creature - Eldrazi Spawn, Mark Tedin, Sacrifice this creature: Add {1} to your mana pool.
|
||||
Hellion, 079, R, 4|4, -, Creature - Hellion, Anthony Francisco, -
|
||||
Plant, 080, G, -, -, Creature - Plant, Daren Bader, -
|
||||
|
||||
BFZ - Battle for Zendikar (2015-10-09)
|
||||
|
||||
BFZ - Battle for Zendikar (2015-10-09)
|
||||
|
||||
Eldrazi, 001, -, 10|10, -, Creature - Eldrazi, Jack Wang, -
|
||||
Eldrazi Scion, 002, -, 1|1, -, Creature - Eldrazi Scion, Izzy, Sacrifice this creature: Add {1} to your mana pool.
|
||||
Eldrazi Scion, 003, -, 1|1, -, Creature - Eldrazi Scion, Winona Nelson, Sacrifice this creature: Add {1} to your mana pool.
|
||||
|
@ -678,14 +678,14 @@ Kor Ally, 006, W, 1|1, -, Creature - Kor Ally, Jeremy Wilson, -
|
|||
Octopus, 007, U, 8|8, -, Creature - Octopus, Craig J Spearing, -
|
||||
Dragon, 008, R, 5|5, -, Creature - Dragon, Raymond Swanland, Flying
|
||||
Plant, 009, G, 1|1, -, Creature - Plant, Sam Burley, -
|
||||
Elemental, 009, R, 3|1, -, Creature - Elemental, Victor Adame Minguez, Trample‚ Haste
|
||||
Elemental, 009, R, 3|1, -, Creature - Elemental, Victor Adame Minguez, Trample<EFBFBD> Haste
|
||||
Elemental, 011, G R, 5|5, -, Creature - Elemental, Brad Rigney, -
|
||||
Gideon Emblem, 012, -, -, -, Emblem - Gideon, Eric Deschamps, -
|
||||
Nixilis Emblem, 013, -, -, -, Emblem - Nixilis, Chris Rahn, -
|
||||
Kiora Emblem, 014, -, -, -, Emblem - Kiora, Jason Chan, -
|
||||
|
||||
C15 - Commander 2015 (2015-11-13)
|
||||
|
||||
C15 - Commander 2015 (2015-11-13)
|
||||
|
||||
Shapeshifter, 001, -, 1|1, -, Creature - Shapeshifter, Franz Vohwinkel, Changeling
|
||||
Angel, 002, W, 4|4, -, Creature - Angel, Cyril Van Der Haegen, Flying
|
||||
Cat, 003, W, 2|2, -, Creature - Cat, Jesper Ejsing, -
|
||||
|
@ -696,7 +696,7 @@ Germ, 007, B, -, -, Creature - Germ, Igor Kieryluk, -
|
|||
Zombie, 008, B, 2|2, -, Creature - Zombie, Lucas Graciano, -
|
||||
Dragon, 009, R, 5|5, -, Creature - Dragon, Jim Pavelec, Flying
|
||||
Elemental Shaman, 010, R, 3|1, -, Creature - Elemental Shaman, Jim Pavelec, -
|
||||
Lightning Rager, 011, R, 5|1, -, Creature - Elemental, Svetlin Velinov, Trample‚ Haste At the beginning of your end step‚ sacrifice this creature.
|
||||
Lightning Ranger, 011, R, 5|1, -, Creature - Elemental, Svetlin Velinov, Trample<EFBFBD> Haste At the beginning of your end step<65> sacrifice this creature.
|
||||
Bear, 012, G, 2|2, -, Creature - Bear, Heather Hudson, -
|
||||
Beast, 013, G, 4|4, -, Creature - Beast, Svetlin Velinov, -
|
||||
Elephant, 014, G, 3|3, -, Creature - Elephant, Lars Grant-West, -
|
||||
|
@ -708,5 +708,40 @@ Wolf, 019, G, 2|2, -, Creature - Wolf, David Palumbo, -
|
|||
Elemental, 020, U R, 5|5, -, Creature - Elemental, Randy Gallegos, Flying
|
||||
Snake, 021, G U, 1|1, -, Creature - Snake, Christopher Moeller, -
|
||||
Spirit, 022, W B, 1|1, -, Creature - Spirit, Cliff Childs, Flying
|
||||
Spirit, 023, -, *|*, -, Enchantment Creature - Spirit, Adam Paquette, This creature's power and toughness are each equal to the number of experience counters you have.
|
||||
Spirit, 023, W B, *|*, -, Enchantment Creature - Spirit, Adam Paquette, This creature's power and toughness are each equal to the number of experience counters you have.
|
||||
Gold, 024, -, -, -, Artifact, Richard Wright, Sacrifice this artifact: Add one mana of any color to your mana pool.
|
||||
|
||||
OGW - Oath of the Gatewatch (2016-01-22)
|
||||
|
||||
Eldrazi Scion, 001, -, 1|1, -, Creature - Eldrazi Scion, Izzy, Sacrifice this creature: Add {1} to your mana pool.
|
||||
Eldrazi Scion, 002, -, 1|1, -, Creature - Eldrazi Scion, Craig J Spearing, Sacrifice this creature: Add {1} to your mana pool.
|
||||
Eldrazi Scion, 003, -, 1|1, -, Creature - Eldrazi Scion, Svetlin Velinov, Sacrifice this creature: Add {1} to your mana pool.
|
||||
Eldrazi Scion, 004, -, 1|1, -, Creature - Eldrazi Scion, Izzy, Sacrifice this creature: Add {1} to your mana pool.
|
||||
Eldrazi Scion, 005, -, 1|1, -, Creature - Eldrazi Scion, Winona Nelson, Sacrifice this creature: Add {1} to your mana pool.
|
||||
Eldrazi Scion, 006, -, 1|1, -, Creature - Eldrazi Scion, Svetlin Velinov, Sacrifice this creature: Add {1} to your mana pool.
|
||||
Angel, 007, W, 3|3, -, Creature - Angel, Anastasia Ovchinnikova, Flying
|
||||
Zombie, 008, B, 2|2, -, Creature - Zombie, Kev Walker, -
|
||||
Elemental, 009, R, 3|1, -, Creature - Elemental, Raymond Swanland, -
|
||||
Elemental, 010, G, *|*, -, Creature - Elemental, Vincent Proce, -
|
||||
Plant, 011, G, -, -, Creature - Plant, Daren Bader, -
|
||||
|
||||
SOI - Shadows over Innistrad (2016-04-08)
|
||||
|
||||
Angel, 001, W, 4|4, -, Creature - Angel, Magali Villeneuve, Flying
|
||||
Human Soldier, 002, W, 1|1, -, Creature - Human Soldier, Deruchenko Alexander, -
|
||||
Spirit, 003, W, 1|1, -, Creature - Spirit, Jason A. Engle, Flying
|
||||
Vampire Knight, 004, B, 1|1, -, Creature - Vampire Knight, Deruchenko Alexander, Lifelink
|
||||
Zombie, 005, B, 2|2, -, Creature - Zombie, Craig J Spearing, -
|
||||
Devil, 006, R, 1|1, -, Creature - Devil, Wayne England, When this creature dies<65> it deals 1 damage to target creature or player.
|
||||
Insect, 007, G, 1|1, -, Creature - Insect, Christopher Moeller, -
|
||||
Ooze, 008, G, 3|3, -, Creature - Ooze, Nils Hamm, -
|
||||
Wolf, 009, G, 2|2, -, Creature - Wolf, Aaron Miller, -
|
||||
Human Cleric, 010, W B, 1|1, -, Creature - Human Cleric, Min Yum, -
|
||||
Clue, 011, -, -, -, Artifact - Clue, John Avon, {2}‚ Sacrifice this Artifact: Draw a card.
|
||||
Clue, 012, -, -, -, Artifact - Clue, Noah Bradley, {2}‚ Sacrifice this Artifact: Draw a card.
|
||||
Clue, 013, -, -, -, Artifact - Clue, Zezhou Chen, {2}‚ Sacrifice this Artifact: Draw a card.
|
||||
Clue, 014, -, -, -, Artifact - Clue, Cliff Childs, {2}‚ Sacrifice this Artifact: Draw a card.
|
||||
Clue, 015, -, -, -, Artifact - Clue, James Paick, {2}‚ Sacrifice this Artifact: Draw a card.
|
||||
Clue, 016, -, -, -, Artifact - Clue, Franz Vohwinkel, {2}‚ Sacrifice this Artifact: Draw a card.
|
||||
Jace Emblem, 017, -, -, -, Emblem - Jace, Tyler Jacobson, Whenever an opponent casts his or her first spell each turn<72> counter that spell.
|
||||
Arlinn Emblem, 018, -, -, -, Emblem - Arlinn, Winona Nelson, Creatures you control have haste and '{T}: This creature deals damage equal to its power to target creature or player.'
|
||||
|
|
Can't render this file because it contains an unexpected character in line 549 and column 140.
|
|
@ -36,7 +36,6 @@ import mage.MageObject;
|
|||
import mage.abilities.Ability;
|
||||
import mage.abilities.effects.Effect;
|
||||
import mage.cards.Card;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Zone;
|
||||
import mage.game.Game;
|
||||
import mage.game.GameState;
|
||||
|
@ -112,19 +111,13 @@ public class CardsView extends LinkedHashMap<UUID, CardView> {
|
|||
case COMMAND:
|
||||
sourceObject = game.getObject(ability.getSourceId());
|
||||
if (sourceObject instanceof Emblem) {
|
||||
Card planeswalkerCard = game.getCard(((Emblem) sourceObject).getSourceId());
|
||||
if (planeswalkerCard != null) {
|
||||
if (!planeswalkerCard.getCardType().contains(CardType.PLANESWALKER)) {
|
||||
if (planeswalkerCard.getSecondCardFace() != null) {
|
||||
planeswalkerCard = planeswalkerCard.getSecondCardFace();
|
||||
}
|
||||
}
|
||||
abilityView = new AbilityView(ability, "Emblem " + planeswalkerCard.getName(), new CardView(new EmblemView((Emblem) sourceObject, planeswalkerCard)));
|
||||
abilityView.setName("Emblem " + planeswalkerCard.getName());
|
||||
abilityView.setExpansionSetCode(planeswalkerCard.getExpansionSetCode());
|
||||
} else {
|
||||
throw new IllegalArgumentException("Source card for emblem not found.");
|
||||
}
|
||||
// Card sourceCard = (Card) ((Emblem) sourceObject).getSourceObject();
|
||||
// if (sourceCard == null) {
|
||||
// throw new IllegalArgumentException("Source card for emblem not found.");
|
||||
// }
|
||||
abilityView = new AbilityView(ability, sourceObject.getName(), new CardView(new EmblemView((Emblem) sourceObject)));
|
||||
abilityView.setName(((Emblem) sourceObject).getName());
|
||||
// abilityView.setExpansionSetCode(sourceCard.getExpansionSetCode());
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -24,7 +24,7 @@ public class EmblemView implements CommandObjectView, Serializable {
|
|||
} else {
|
||||
expansionSetCode = emblem.getExpansionSetCodeForImage();
|
||||
}
|
||||
|
||||
|
||||
rules = emblem.getAbilities().getRules(sourceCard.getName());
|
||||
}
|
||||
|
||||
|
|
|
@ -36,7 +36,6 @@ import java.util.UUID;
|
|||
import mage.MageObject;
|
||||
import mage.abilities.costs.Cost;
|
||||
import mage.cards.Card;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.PhaseStep;
|
||||
import mage.constants.TurnPhase;
|
||||
import mage.constants.Zone;
|
||||
|
@ -127,20 +126,10 @@ public class GameView implements Serializable {
|
|||
stack.put(stackObject.getId(), new StackAbilityView(game, (StackAbility) stackObject, token.getName(), new CardView(token)));
|
||||
checkPaid(stackObject.getId(), (StackAbility) stackObject);
|
||||
} else if (object instanceof Emblem) {
|
||||
Card sourceCard = game.getCard(((Emblem) object).getSourceId());
|
||||
CardView cardView;
|
||||
if (sourceCard != null) {
|
||||
if (!sourceCard.getCardType().contains(CardType.PLANESWALKER)) {
|
||||
if (sourceCard.getSecondCardFace() != null) {
|
||||
sourceCard = sourceCard.getSecondCardFace();
|
||||
}
|
||||
}
|
||||
((StackAbility) stackObject).setName("Emblem " + sourceCard.getName());
|
||||
((StackAbility) stackObject).setExpansionSetCode(sourceCard.getExpansionSetCode());
|
||||
cardView = new CardView(new EmblemView(((Emblem) object), sourceCard));
|
||||
} else {
|
||||
cardView = new CardView(new EmblemView((Emblem) object));
|
||||
}
|
||||
CardView cardView = new CardView(new EmblemView((Emblem) object));
|
||||
// Card sourceCard = (Card) ((Emblem) object).getSourceObject();
|
||||
((StackAbility) stackObject).setName(((Emblem) object).getName());
|
||||
// ((StackAbility) stackObject).setExpansionSetCode(sourceCard.getExpansionSetCode());
|
||||
stack.put(stackObject.getId(),
|
||||
new StackAbilityView(game, (StackAbility) stackObject, object.getName(), cardView));
|
||||
checkPaid(stackObject.getId(), ((StackAbility) stackObject));
|
||||
|
|
|
@ -35,7 +35,6 @@ import java.util.List;
|
|||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
import mage.cards.Card;
|
||||
import mage.constants.CardType;
|
||||
import mage.counters.Counters;
|
||||
import mage.game.ExileZone;
|
||||
import mage.game.Game;
|
||||
|
@ -139,17 +138,7 @@ public class PlayerView implements Serializable {
|
|||
if (commandObject instanceof Emblem) {
|
||||
Emblem emblem = (Emblem) commandObject;
|
||||
if (emblem.getControllerId().equals(this.playerId)) {
|
||||
Card sourceCard = game.getCard(((CommandObject) emblem).getSourceId());
|
||||
if (sourceCard != null) {
|
||||
if (!sourceCard.getCardType().contains(CardType.PLANESWALKER)) {
|
||||
if (sourceCard.getSecondCardFace() != null) {
|
||||
sourceCard = sourceCard.getSecondCardFace();
|
||||
}
|
||||
}
|
||||
commandList.add(new EmblemView(emblem, sourceCard));
|
||||
} else {
|
||||
commandList.add(new EmblemView(emblem));
|
||||
}
|
||||
commandList.add(new EmblemView(emblem));
|
||||
}
|
||||
} else if (commandObject instanceof Commander) {
|
||||
Commander commander = (Commander) commandObject;
|
||||
|
|
|
@ -87,7 +87,8 @@ public class MomirDuel extends GameImpl {
|
|||
for (UUID playerId : state.getPlayerList(startingPlayerId)) {
|
||||
Player player = getPlayer(playerId);
|
||||
if (player != null) {
|
||||
addEmblem(new MomirEmblem(), ability, playerId);
|
||||
CardInfo cardInfo = CardRepository.instance.findCard("Momir Vig, Simic Visionary");
|
||||
addEmblem(new MomirEmblem(), cardInfo.getCard(), playerId);
|
||||
}
|
||||
}
|
||||
getState().addAbility(ability, null);
|
||||
|
@ -122,8 +123,8 @@ public class MomirDuel extends GameImpl {
|
|||
class MomirEmblem extends Emblem {
|
||||
|
||||
public MomirEmblem() {
|
||||
setName("Momir Vig, Simic Visionary");
|
||||
//TODO: setExpansionSetCodeForImage(???);
|
||||
setName("Emblem Momir Vig, Simic Visionary");
|
||||
setExpansionSetCodeForImage("DIS");
|
||||
// {X}, Discard a card: Put a token into play as a copy of a random creature card with converted mana cost X. Play this ability only any time you could play a sorcery and only once each turn.
|
||||
LimitedTimesPerTurnActivatedAbility ability = new LimitedTimesPerTurnActivatedAbility(Zone.COMMAND, new MomirEffect(), new VariableManaCost());
|
||||
ability.addCost(new DiscardCardCost());
|
||||
|
|
|
@ -72,7 +72,7 @@ public class AjaniSteadfast extends CardImpl {
|
|||
}
|
||||
|
||||
public AjaniSteadfast(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.PLANESWALKER},"{3}{W}");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.PLANESWALKER}, "{3}{W}");
|
||||
this.subtype.add("Ajani");
|
||||
|
||||
this.addAbility(new PlanswalkerEntersWithLoyalityCountersAbility(4));
|
||||
|
@ -117,7 +117,7 @@ public class AjaniSteadfast extends CardImpl {
|
|||
class AjaniSteadfastEmblem extends Emblem {
|
||||
|
||||
public AjaniSteadfastEmblem() {
|
||||
setName("EMBLEM: Ajani Steadfast");
|
||||
setName("Emblem Ajani");
|
||||
this.getAbilities().add(new SimpleStaticAbility(Zone.COMMAND, new AjaniSteadfastPreventEffect()));
|
||||
this.setExpansionSetCodeForImage("M15");
|
||||
}
|
||||
|
|
|
@ -63,7 +63,7 @@ public class ArlinnEmbracedByTheMoon extends CardImpl {
|
|||
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Creatures you control");
|
||||
|
||||
public ArlinnEmbracedByTheMoon(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.PLANESWALKER},"");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.PLANESWALKER}, "");
|
||||
this.subtype.add("Arlinn");
|
||||
this.color.setRed(true);
|
||||
this.color.setGreen(true);
|
||||
|
@ -105,7 +105,7 @@ class ArlinnEmbracedByTheMoonEmblem extends Emblem {
|
|||
|
||||
// "Creatures you control have haste and '{T}: This creature deals damage equal to its power to target creature or player.'"
|
||||
public ArlinnEmbracedByTheMoonEmblem() {
|
||||
this.setName("EMBLEM: Arlinn, Embraced by the Moon");
|
||||
this.setName("Emblem Arlinn");
|
||||
FilterPermanent filter = new FilterControlledCreaturePermanent("Creatures");
|
||||
GainAbilityControlledEffect effect = new GainAbilityControlledEffect(HasteAbility.getInstance(), Duration.EndOfGame, filter);
|
||||
effect.setText("Creatures you control have haste");
|
||||
|
|
|
@ -56,7 +56,7 @@ import mage.target.common.TargetCreaturePermanent;
|
|||
public class ChandraRoaringFlame extends CardImpl {
|
||||
|
||||
public ChandraRoaringFlame(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.PLANESWALKER},"");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.PLANESWALKER}, "");
|
||||
this.subtype.add("Chandra");
|
||||
this.color.setRed(true);
|
||||
|
||||
|
@ -120,7 +120,7 @@ class ChandraRoaringFlameEmblemEffect extends OneShotEffect {
|
|||
}
|
||||
}
|
||||
for (Player opponent : opponentsEmblem) {
|
||||
game.addEmblem(new ChandraRoaringFlameEmblem(), source, opponent.getId());
|
||||
game.addEmblem(new ChandraRoaringFlameEmblem(), source.getSourceObject(game), opponent.getId());
|
||||
}
|
||||
}
|
||||
return false;
|
||||
|
@ -134,7 +134,8 @@ class ChandraRoaringFlameEmblemEffect extends OneShotEffect {
|
|||
class ChandraRoaringFlameEmblem extends Emblem {
|
||||
|
||||
public ChandraRoaringFlameEmblem() {
|
||||
setName("EMBLEM: Chandra, Roaring Flame");
|
||||
setName("Emblem Chandra");
|
||||
setExpansionSetCodeForImage("ORI");
|
||||
Effect effect = new DamageTargetEffect(3);
|
||||
effect.setText("this emblem deals 3 damage to you");
|
||||
this.getAbilities().add(new BeginningOfUpkeepTriggeredAbility(Zone.COMMAND, effect, TargetController.YOU, false, true));
|
||||
|
|
|
@ -63,7 +63,7 @@ import mage.target.common.TargetCreaturePermanent;
|
|||
public class ChandraTorchOfDefiance extends CardImpl {
|
||||
|
||||
public ChandraTorchOfDefiance(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.PLANESWALKER},"{2}{R}{R}");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.PLANESWALKER}, "{2}{R}{R}");
|
||||
this.subtype.add("Chandra");
|
||||
|
||||
this.addAbility(new PlanswalkerEntersWithLoyalityCountersAbility(4));
|
||||
|
@ -142,7 +142,7 @@ class ChandraTorchOfDefianceEmblem extends Emblem {
|
|||
|
||||
// You get an emblem with "Whenever you cast a spell, this emblem deals 5 damage to target creature or player."
|
||||
public ChandraTorchOfDefianceEmblem() {
|
||||
this.setName("Emblem - Chandra, Torch of Defiance");
|
||||
this.setName("Emblem Chandra");
|
||||
Effect effect = new DamageTargetEffect(5);
|
||||
effect.setText("this emblem deals 5 damage to target creature or player");
|
||||
Ability ability = new SpellCastControllerTriggeredAbility(Zone.COMMAND, effect, new FilterSpell("a spell"), false, false);
|
||||
|
|
|
@ -67,7 +67,7 @@ import mage.target.common.TargetArtifactPermanent;
|
|||
public class DackFayden extends CardImpl {
|
||||
|
||||
public DackFayden(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.PLANESWALKER},"{1}{U}{R}");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.PLANESWALKER}, "{1}{U}{R}");
|
||||
this.subtype.add("Dack");
|
||||
|
||||
this.addAbility(new PlanswalkerEntersWithLoyalityCountersAbility(3));
|
||||
|
@ -107,7 +107,7 @@ public class DackFayden extends CardImpl {
|
|||
class DackFaydenEmblem extends Emblem {
|
||||
|
||||
DackFaydenEmblem() {
|
||||
this.setName("EMBLEM: Dack Fayden");
|
||||
this.setName("Emblem Dack");
|
||||
this.getAbilities().add(new DackFaydenEmblemTriggeredAbility());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -68,7 +68,7 @@ import mage.target.targetpointer.FixedTarget;
|
|||
public class DarettiScrapSavant extends CardImpl {
|
||||
|
||||
public DarettiScrapSavant(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.PLANESWALKER},"{3}{R}");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.PLANESWALKER}, "{3}{R}");
|
||||
this.subtype.add("Daretti");
|
||||
|
||||
this.addAbility(new PlanswalkerEntersWithLoyalityCountersAbility(3));
|
||||
|
@ -176,7 +176,6 @@ class DarettiScrapSavantEmblem extends Emblem {
|
|||
|
||||
// You get an emblem with "Whenever an artifact is put into your graveyard from the battlefield, return that card to the battlefield at the beginning of the next end step."
|
||||
public DarettiScrapSavantEmblem() {
|
||||
this.setName("Emblem - Daretti");
|
||||
this.getAbilities().add(new DarettiScrapSavantTriggeredAbility());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -66,7 +66,7 @@ import mage.target.common.TargetCreaturePermanent;
|
|||
public class DomriRade extends CardImpl {
|
||||
|
||||
public DomriRade(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.PLANESWALKER},"{1}{R}{G}");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.PLANESWALKER}, "{1}{R}{G}");
|
||||
this.subtype.add("Domri");
|
||||
|
||||
this.addAbility(new PlanswalkerEntersWithLoyalityCountersAbility(3));
|
||||
|
@ -79,7 +79,7 @@ public class DomriRade extends CardImpl {
|
|||
TargetControlledCreaturePermanent target = new TargetControlledCreaturePermanent();
|
||||
target.setTargetTag(1);
|
||||
ability2.addTarget(target);
|
||||
|
||||
|
||||
FilterCreaturePermanent filter = new FilterCreaturePermanent("another creature to fight");
|
||||
filter.add(new AnotherTargetPredicate(2));
|
||||
TargetCreaturePermanent target2 = new TargetCreaturePermanent(filter);
|
||||
|
@ -145,7 +145,7 @@ class DomriRadeEmblem extends Emblem {
|
|||
|
||||
// "Creatures you control have double strike, trample, hexproof and haste."
|
||||
public DomriRadeEmblem() {
|
||||
this.setName("EMBLEM: Domri Rade");
|
||||
this.setName("Emblem Domri");
|
||||
FilterPermanent filter = new FilterControlledCreaturePermanent("Creatures");
|
||||
GainAbilityControlledEffect effect = new GainAbilityControlledEffect(DoubleStrikeAbility.getInstance(), Duration.EndOfGame, filter);
|
||||
Ability ability = new SimpleStaticAbility(Zone.COMMAND, effect);
|
||||
|
|
|
@ -1,158 +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.cards.d;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.LoyaltyAbility;
|
||||
import mage.abilities.common.PlanswalkerEntersWithLoyalityCountersAbility;
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.effects.ContinuousRuleModifyingEffectImpl;
|
||||
import mage.abilities.effects.Effect;
|
||||
import mage.abilities.effects.RestrictionUntapNotMoreThanEffect;
|
||||
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
|
||||
import mage.abilities.effects.common.GainLifeEffect;
|
||||
import mage.abilities.effects.common.GetEmblemEffect;
|
||||
import mage.abilities.effects.common.continuous.BoostTargetEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Duration;
|
||||
import mage.constants.Outcome;
|
||||
import mage.constants.Zone;
|
||||
import mage.filter.common.FilterControlledPermanent;
|
||||
import mage.game.Game;
|
||||
import mage.game.command.Emblem;
|
||||
import mage.game.events.GameEvent;
|
||||
import mage.game.events.GameEvent.EventType;
|
||||
import mage.players.Player;
|
||||
import mage.target.common.TargetCreaturePermanent;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author emerald000
|
||||
*/
|
||||
public class DovinBaan extends CardImpl {
|
||||
|
||||
public DovinBaan(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.PLANESWALKER},"{2}{W}{U}");
|
||||
this.subtype.add("Dovin");
|
||||
|
||||
this.addAbility(new PlanswalkerEntersWithLoyalityCountersAbility(3));
|
||||
|
||||
// +1: Until your next turn, up to one target creature gets -3/-0 and its activated abilities can't be activated.
|
||||
Effect effect = new BoostTargetEffect(-3, 0, Duration.UntilYourNextTurn);
|
||||
effect.setText("Until your next turn, up to one target creature gets -3/-0");
|
||||
Ability ability = new LoyaltyAbility(effect, 1);
|
||||
ability.addTarget(new TargetCreaturePermanent(0, 1));
|
||||
ability.addEffect(new DovinBaanCantActivateAbilitiesEffect());
|
||||
this.addAbility(ability);
|
||||
|
||||
// -1: You gain 2 life and draw a card.
|
||||
ability = new LoyaltyAbility(new GainLifeEffect(2), -1);
|
||||
effect = new DrawCardSourceControllerEffect(1);
|
||||
effect.setText("and draw a card");
|
||||
ability.addEffect(effect);
|
||||
this.addAbility(ability);
|
||||
|
||||
// -7: You get an emblem with "Your opponents can't untap more than two permanents during their untap steps."
|
||||
this.addAbility(new LoyaltyAbility(new GetEmblemEffect(new DovinBaanEmblem()), -7));
|
||||
}
|
||||
|
||||
public DovinBaan(final DovinBaan card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public DovinBaan copy() {
|
||||
return new DovinBaan(this);
|
||||
}
|
||||
}
|
||||
|
||||
class DovinBaanCantActivateAbilitiesEffect extends ContinuousRuleModifyingEffectImpl {
|
||||
|
||||
DovinBaanCantActivateAbilitiesEffect() {
|
||||
super(Duration.UntilYourNextTurn, Outcome.UnboostCreature);
|
||||
staticText = "and its activated abilities can't be activated";
|
||||
}
|
||||
|
||||
DovinBaanCantActivateAbilitiesEffect(final DovinBaanCantActivateAbilitiesEffect effect) {
|
||||
super(effect);
|
||||
}
|
||||
|
||||
@Override
|
||||
public DovinBaanCantActivateAbilitiesEffect copy() {
|
||||
return new DovinBaanCantActivateAbilitiesEffect(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checksEventType(GameEvent event, Game game) {
|
||||
return event.getType() == EventType.ACTIVATE_ABILITY;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean applies(GameEvent event, Ability source, Game game) {
|
||||
return event.getSourceId().equals(this.getTargetPointer().getFirst(game, source));
|
||||
}
|
||||
}
|
||||
|
||||
class DovinBaanEmblem extends Emblem {
|
||||
|
||||
DovinBaanEmblem() {
|
||||
this.setName("EMBLEM: Dovin Baan");
|
||||
Ability ability = new SimpleStaticAbility(Zone.COMMAND, new DovinBaanCantUntapEffect());
|
||||
this.getAbilities().add(ability);
|
||||
}
|
||||
}
|
||||
|
||||
class DovinBaanCantUntapEffect extends RestrictionUntapNotMoreThanEffect {
|
||||
|
||||
DovinBaanCantUntapEffect() {
|
||||
super(Duration.WhileOnBattlefield, 2, new FilterControlledPermanent());
|
||||
staticText = "Your opponents can't untap more than two permanents during their untap steps.";
|
||||
}
|
||||
|
||||
DovinBaanCantUntapEffect(final DovinBaanCantUntapEffect effect) {
|
||||
super(effect);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean applies(Player player, Ability source, Game game) {
|
||||
return game.getOpponents(source.getControllerId()).contains(player.getId());
|
||||
}
|
||||
|
||||
@Override
|
||||
public DovinBaanCantUntapEffect copy() {
|
||||
return new DovinBaanCantUntapEffect(this);
|
||||
}
|
||||
}
|
||||
/*
|
||||
* 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.cards.d;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.LoyaltyAbility;
|
||||
import mage.abilities.common.PlanswalkerEntersWithLoyalityCountersAbility;
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.effects.ContinuousRuleModifyingEffectImpl;
|
||||
import mage.abilities.effects.Effect;
|
||||
import mage.abilities.effects.RestrictionUntapNotMoreThanEffect;
|
||||
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
|
||||
import mage.abilities.effects.common.GainLifeEffect;
|
||||
import mage.abilities.effects.common.GetEmblemEffect;
|
||||
import mage.abilities.effects.common.continuous.BoostTargetEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Duration;
|
||||
import mage.constants.Outcome;
|
||||
import mage.constants.Zone;
|
||||
import mage.filter.common.FilterControlledPermanent;
|
||||
import mage.game.Game;
|
||||
import mage.game.command.Emblem;
|
||||
import mage.game.events.GameEvent;
|
||||
import mage.game.events.GameEvent.EventType;
|
||||
import mage.players.Player;
|
||||
import mage.target.common.TargetCreaturePermanent;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author emerald000
|
||||
*/
|
||||
public class DovinBaan extends CardImpl {
|
||||
|
||||
public DovinBaan(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.PLANESWALKER}, "{2}{W}{U}");
|
||||
this.subtype.add("Dovin");
|
||||
|
||||
this.addAbility(new PlanswalkerEntersWithLoyalityCountersAbility(3));
|
||||
|
||||
// +1: Until your next turn, up to one target creature gets -3/-0 and its activated abilities can't be activated.
|
||||
Effect effect = new BoostTargetEffect(-3, 0, Duration.UntilYourNextTurn);
|
||||
effect.setText("Until your next turn, up to one target creature gets -3/-0");
|
||||
Ability ability = new LoyaltyAbility(effect, 1);
|
||||
ability.addTarget(new TargetCreaturePermanent(0, 1));
|
||||
ability.addEffect(new DovinBaanCantActivateAbilitiesEffect());
|
||||
this.addAbility(ability);
|
||||
|
||||
// -1: You gain 2 life and draw a card.
|
||||
ability = new LoyaltyAbility(new GainLifeEffect(2), -1);
|
||||
effect = new DrawCardSourceControllerEffect(1);
|
||||
effect.setText("and draw a card");
|
||||
ability.addEffect(effect);
|
||||
this.addAbility(ability);
|
||||
|
||||
// -7: You get an emblem with "Your opponents can't untap more than two permanents during their untap steps."
|
||||
this.addAbility(new LoyaltyAbility(new GetEmblemEffect(new DovinBaanEmblem()), -7));
|
||||
}
|
||||
|
||||
public DovinBaan(final DovinBaan card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public DovinBaan copy() {
|
||||
return new DovinBaan(this);
|
||||
}
|
||||
}
|
||||
|
||||
class DovinBaanCantActivateAbilitiesEffect extends ContinuousRuleModifyingEffectImpl {
|
||||
|
||||
DovinBaanCantActivateAbilitiesEffect() {
|
||||
super(Duration.UntilYourNextTurn, Outcome.UnboostCreature);
|
||||
staticText = "and its activated abilities can't be activated";
|
||||
}
|
||||
|
||||
DovinBaanCantActivateAbilitiesEffect(final DovinBaanCantActivateAbilitiesEffect effect) {
|
||||
super(effect);
|
||||
}
|
||||
|
||||
@Override
|
||||
public DovinBaanCantActivateAbilitiesEffect copy() {
|
||||
return new DovinBaanCantActivateAbilitiesEffect(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checksEventType(GameEvent event, Game game) {
|
||||
return event.getType() == EventType.ACTIVATE_ABILITY;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean applies(GameEvent event, Ability source, Game game) {
|
||||
return event.getSourceId().equals(this.getTargetPointer().getFirst(game, source));
|
||||
}
|
||||
}
|
||||
|
||||
class DovinBaanEmblem extends Emblem {
|
||||
|
||||
DovinBaanEmblem() {
|
||||
this.setName("Emblem Dovin");
|
||||
Ability ability = new SimpleStaticAbility(Zone.COMMAND, new DovinBaanCantUntapEffect());
|
||||
this.getAbilities().add(ability);
|
||||
}
|
||||
}
|
||||
|
||||
class DovinBaanCantUntapEffect extends RestrictionUntapNotMoreThanEffect {
|
||||
|
||||
DovinBaanCantUntapEffect() {
|
||||
super(Duration.WhileOnBattlefield, 2, new FilterControlledPermanent());
|
||||
staticText = "Your opponents can't untap more than two permanents during their untap steps.";
|
||||
}
|
||||
|
||||
DovinBaanCantUntapEffect(final DovinBaanCantUntapEffect effect) {
|
||||
super(effect);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean applies(Player player, Ability source, Game game) {
|
||||
return game.getOpponents(source.getControllerId()).contains(player.getId());
|
||||
}
|
||||
|
||||
@Override
|
||||
public DovinBaanCantUntapEffect copy() {
|
||||
return new DovinBaanCantUntapEffect(this);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -60,7 +60,7 @@ import mage.target.common.TargetCreaturePermanent;
|
|||
public class ElspethKnightErrant extends CardImpl {
|
||||
|
||||
public ElspethKnightErrant(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.PLANESWALKER},"{2}{W}{W}");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.PLANESWALKER}, "{2}{W}{W}");
|
||||
this.subtype.add("Elspeth");
|
||||
|
||||
this.addAbility(new PlanswalkerEntersWithLoyalityCountersAbility(4));
|
||||
|
@ -100,7 +100,7 @@ public class ElspethKnightErrant extends CardImpl {
|
|||
class ElspethKnightErrantEmblem extends Emblem {
|
||||
|
||||
public ElspethKnightErrantEmblem() {
|
||||
this.setName("EMBLEM: Elspeth, Knight-Errant");
|
||||
this.setName("Emblem Elspeth");
|
||||
FilterControlledPermanent filter = new FilterControlledPermanent("Artifacts, creatures, enchantments, and lands you control");
|
||||
filter.add(Predicates.or(
|
||||
new CardTypePredicate(CardType.ARTIFACT),
|
||||
|
|
|
@ -62,7 +62,7 @@ public class ElspethSunsChampion extends CardImpl {
|
|||
}
|
||||
|
||||
public ElspethSunsChampion(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.PLANESWALKER},"{4}{W}{W}");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.PLANESWALKER}, "{4}{W}{W}");
|
||||
this.subtype.add("Elspeth");
|
||||
|
||||
this.addAbility(new PlanswalkerEntersWithLoyalityCountersAbility(4));
|
||||
|
@ -91,7 +91,7 @@ class ElspethSunsChampionEmblem extends Emblem {
|
|||
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Creatures");
|
||||
|
||||
public ElspethSunsChampionEmblem() {
|
||||
this.setName("EMBLEM: Elspeth, Sun's Champion");
|
||||
this.setName("Emblem Elspeth");
|
||||
Ability ability = new SimpleStaticAbility(Zone.COMMAND, new BoostControlledEffect(2, 2, Duration.EndOfGame, filter, false));
|
||||
ability.addEffect(new GainAbilityControlledEffect(FlyingAbility.getInstance(), Duration.EndOfGame, filter));
|
||||
this.getAbilities().add(ability);
|
||||
|
|
|
@ -75,7 +75,7 @@ public class GarrukApexPredator extends CardImpl {
|
|||
}
|
||||
|
||||
public GarrukApexPredator(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.PLANESWALKER},"{5}{B}{G}");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.PLANESWALKER}, "{5}{B}{G}");
|
||||
this.subtype.add("Garruk");
|
||||
|
||||
this.addAbility(new PlanswalkerEntersWithLoyalityCountersAbility(5));
|
||||
|
@ -166,7 +166,7 @@ class GarrukApexPredatorBeastToken extends Token {
|
|||
class GarrukApexPredatorEmblem extends Emblem {
|
||||
|
||||
public GarrukApexPredatorEmblem() {
|
||||
setName("EMBLEM: Garruk, Apex Predator");
|
||||
setName("Emblem Garruk");
|
||||
Effect effect = new BoostTargetEffect(5, 5, Duration.EndOfTurn);
|
||||
effect.setText("it gets +5/+5");
|
||||
Ability ability = new AttackedByCreatureTriggeredAbility(Zone.COMMAND, effect, false, SetTargetPointer.PERMANENT);
|
||||
|
|
|
@ -63,7 +63,7 @@ public class GarrukCallerOfBeasts extends CardImpl {
|
|||
}
|
||||
|
||||
public GarrukCallerOfBeasts(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.PLANESWALKER},"{4}{G}{G}");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.PLANESWALKER}, "{4}{G}{G}");
|
||||
this.subtype.add("Garruk");
|
||||
|
||||
this.addAbility(new PlanswalkerEntersWithLoyalityCountersAbility(4));
|
||||
|
@ -102,7 +102,7 @@ class GarrukCallerOfBeastsEmblem extends Emblem {
|
|||
}
|
||||
|
||||
public GarrukCallerOfBeastsEmblem() {
|
||||
this.setName("EMBLEM: Garruk, Caller of Beasts");
|
||||
this.setName("Emblem Garruk");
|
||||
Effect effect = new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(new FilterCreatureCard("creature card")), false, true, Outcome.PutCreatureInPlay);
|
||||
Ability ability = new SpellCastControllerTriggeredAbility(Zone.COMMAND, effect, filter, true, false);
|
||||
this.getAbilities().add(ability);
|
||||
|
|
|
@ -55,7 +55,7 @@ import mage.game.permanent.token.Token;
|
|||
public class GideonAllyOfZendikar extends CardImpl {
|
||||
|
||||
public GideonAllyOfZendikar(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.PLANESWALKER},"{2}{W}{W}");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.PLANESWALKER}, "{2}{W}{W}");
|
||||
this.subtype.add("Gideon");
|
||||
|
||||
this.addAbility(new PlanswalkerEntersWithLoyalityCountersAbility(4));
|
||||
|
@ -87,7 +87,7 @@ public class GideonAllyOfZendikar extends CardImpl {
|
|||
class GideonAllyOfZendikarEmblem extends Emblem {
|
||||
|
||||
public GideonAllyOfZendikarEmblem() {
|
||||
this.setName("EMBLEM: Gideon, Ally of Zendikar");
|
||||
this.setName("Emblem Gideon");
|
||||
BoostControlledEffect effect = new BoostControlledEffect(1, 1, Duration.EndOfGame);
|
||||
Ability ability = new SimpleStaticAbility(Zone.COMMAND, effect);
|
||||
this.getAbilities().add(ability);
|
||||
|
|
|
@ -67,7 +67,7 @@ import mage.target.targetpointer.FixedTarget;
|
|||
public class JaceTelepathUnbound extends CardImpl {
|
||||
|
||||
public JaceTelepathUnbound(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.PLANESWALKER},"");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.PLANESWALKER}, "");
|
||||
this.subtype.add("Jace");
|
||||
|
||||
this.color.setBlue(true);
|
||||
|
@ -207,7 +207,7 @@ class JaceTelepathUnboundEmblem extends Emblem {
|
|||
|
||||
// You get an emblem with "Whenever you cast a spell, target opponent puts the top five cards of his or her library into his or her graveyard".
|
||||
public JaceTelepathUnboundEmblem() {
|
||||
this.setName("Emblem - Jace");
|
||||
this.setName("Emblem Jace");
|
||||
Effect effect = new PutTopCardOfLibraryIntoGraveTargetEffect(5);
|
||||
effect.setText("target opponent puts the top five cards of his or her library into his or her graveyard");
|
||||
Ability ability = new SpellCastControllerTriggeredAbility(Zone.COMMAND, effect, new FilterSpell("a spell"), false, false);
|
||||
|
|
|
@ -59,7 +59,7 @@ import mage.watchers.common.SpellsCastWatcher;
|
|||
public class JaceUnravelerOfSecrets extends CardImpl {
|
||||
|
||||
public JaceUnravelerOfSecrets(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.PLANESWALKER},"{3}{U}{U}");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.PLANESWALKER}, "{3}{U}{U}");
|
||||
this.subtype.add("Jace");
|
||||
|
||||
this.addAbility(new PlanswalkerEntersWithLoyalityCountersAbility(5));
|
||||
|
@ -99,7 +99,8 @@ public class JaceUnravelerOfSecrets extends CardImpl {
|
|||
class JaceUnravelerOfSecretsEmblem extends Emblem {
|
||||
|
||||
public JaceUnravelerOfSecretsEmblem() {
|
||||
this.setName("EMBLEM: Jace, Unraveler of Secrets");
|
||||
this.setName("Emblem Jace");
|
||||
setExpansionSetCodeForImage("SOI");
|
||||
Effect effect = new CounterTargetEffect();
|
||||
effect.setText("counter that spell");
|
||||
this.getAbilities().add(new JaceUnravelerOfSecretsTriggeredAbility(effect, false));
|
||||
|
|
|
@ -67,7 +67,7 @@ import mage.target.common.TargetLandPermanent;
|
|||
public class KioraMasterOfTheDepths extends CardImpl {
|
||||
|
||||
public KioraMasterOfTheDepths(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.PLANESWALKER},"{2}{G}{U}");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.PLANESWALKER}, "{2}{G}{U}");
|
||||
this.subtype.add("Kiora");
|
||||
|
||||
this.addAbility(new PlanswalkerEntersWithLoyalityCountersAbility(4));
|
||||
|
@ -203,7 +203,7 @@ class KioraMasterOfTheDepthsEmblem extends Emblem {
|
|||
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Creatures");
|
||||
|
||||
public KioraMasterOfTheDepthsEmblem() {
|
||||
this.setName("EMBLEM: Kiora, Master of the Depths");
|
||||
this.setName("Emblem Kiora");
|
||||
|
||||
Ability ability = new EntersBattlefieldControlledTriggeredAbility(Zone.COMMAND,
|
||||
new KioraFightEffect(), filter, true, SetTargetPointer.PERMANENT,
|
||||
|
|
|
@ -68,7 +68,7 @@ public class KioraTheCrashingWave extends CardImpl {
|
|||
}
|
||||
|
||||
public KioraTheCrashingWave(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.PLANESWALKER},"{2}{G}{U}");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.PLANESWALKER}, "{2}{G}{U}");
|
||||
this.subtype.add("Kiora");
|
||||
|
||||
this.addAbility(new PlanswalkerEntersWithLoyalityCountersAbility(2));
|
||||
|
@ -164,7 +164,7 @@ class KioraPreventionEffect extends PreventionEffectImpl {
|
|||
class KioraEmblem extends Emblem {
|
||||
|
||||
public KioraEmblem() {
|
||||
this.setName("EMBLEM: Kiora, the Crashing Wave");
|
||||
this.setName("Emblem Kiora");
|
||||
Ability ability = new BeginningOfEndStepTriggeredAbility(Zone.COMMAND, new CreateTokenEffect(new KioraKrakenToken()), TargetController.YOU, null, false);
|
||||
this.getAbilities().add(ability);
|
||||
}
|
||||
|
|
|
@ -77,7 +77,7 @@ public class KothOfTheHammer extends CardImpl {
|
|||
}
|
||||
|
||||
public KothOfTheHammer(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.PLANESWALKER},"{2}{R}{R}");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.PLANESWALKER}, "{2}{R}{R}");
|
||||
this.subtype.add("Koth");
|
||||
|
||||
this.addAbility(new PlanswalkerEntersWithLoyalityCountersAbility(3));
|
||||
|
@ -122,7 +122,7 @@ class KothOfTheHammerEmblem extends Emblem {
|
|||
|
||||
// "Mountains you control have '{T}: This land deals 1 damage to target creature or player.'"
|
||||
public KothOfTheHammerEmblem() {
|
||||
this.setName("EMBLEM: Koth of the Hammer");
|
||||
this.setName("Emblem Koth");
|
||||
this.getAbilities().add(new SimpleStaticAbility(Zone.COMMAND, new KothOfTheHammerThirdEffect()));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -74,7 +74,7 @@ public class LilianaDefiantNecromancer extends CardImpl {
|
|||
UUID ability2Id;
|
||||
|
||||
public LilianaDefiantNecromancer(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.PLANESWALKER},"");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.PLANESWALKER}, "");
|
||||
this.subtype.add("Liliana");
|
||||
this.color.setBlack(true);
|
||||
|
||||
|
@ -128,7 +128,7 @@ class LilianaDefiantNecromancerEmblem extends Emblem {
|
|||
|
||||
// You get an emblem with "Whenever a creature you control dies, return it to the battlefield under your control at the beginning of the next end step."
|
||||
public LilianaDefiantNecromancerEmblem() {
|
||||
this.setName("Emblem - Liliana");
|
||||
this.setName("Emblem Liliana");
|
||||
Ability ability = new DiesCreatureTriggeredAbility(Zone.COMMAND, new LilianaDefiantNecromancerEmblemEffect(), false, filter, true);
|
||||
this.getAbilities().add(ability);
|
||||
}
|
||||
|
|
|
@ -72,7 +72,7 @@ public class LilianaOfTheDarkRealms extends CardImpl {
|
|||
}
|
||||
|
||||
public LilianaOfTheDarkRealms(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.PLANESWALKER},"{2}{B}{B}");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.PLANESWALKER}, "{2}{B}{B}");
|
||||
this.subtype.add("Liliana");
|
||||
|
||||
this.addAbility(new PlanswalkerEntersWithLoyalityCountersAbility(3));
|
||||
|
@ -155,7 +155,7 @@ class LilianaOfTheDarkRealmsEmblem extends Emblem {
|
|||
}
|
||||
|
||||
public LilianaOfTheDarkRealmsEmblem() {
|
||||
this.setName("EMBLEM: Liliana of the Dark Realms");
|
||||
this.setName("Emblem Liliana");
|
||||
SimpleManaAbility manaAbility = new SimpleManaAbility(Zone.BATTLEFIELD, Mana.BlackMana(4), new TapSourceCost());
|
||||
Ability ability = new SimpleStaticAbility(Zone.COMMAND, new GainAbilityControlledEffect(manaAbility, Duration.WhileOnBattlefield, filter));
|
||||
this.getAbilities().add(ability);
|
||||
|
|
|
@ -64,7 +64,7 @@ import mage.target.common.TargetCreaturePermanent;
|
|||
public class LilianaTheLastHope extends CardImpl {
|
||||
|
||||
public LilianaTheLastHope(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.PLANESWALKER},"{1}{B}{B}");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.PLANESWALKER}, "{1}{B}{B}");
|
||||
this.subtype.add("Liliana");
|
||||
|
||||
this.addAbility(new PlanswalkerEntersWithLoyalityCountersAbility(3));
|
||||
|
@ -131,10 +131,11 @@ class LilianaTheLastHopeEffect extends OneShotEffect {
|
|||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
class LilianaTheLastHopeEmblem extends Emblem {
|
||||
|
||||
public LilianaTheLastHopeEmblem() {
|
||||
this.setName("EMBLEM: Liliana, the Last Hope");
|
||||
this.setName("Emblem Liliana");
|
||||
Ability ability = new BeginningOfEndStepTriggeredAbility(Zone.COMMAND, new CreateTokenEffect(new ZombieToken(), new LilianaZombiesCount()),
|
||||
TargetController.YOU, null, false);
|
||||
this.getAbilities().add(ability);
|
||||
|
|
|
@ -65,7 +65,7 @@ import mage.target.targetpointer.FixedTarget;
|
|||
public class NarsetTranscendent extends CardImpl {
|
||||
|
||||
public NarsetTranscendent(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.PLANESWALKER},"{2}{W}{U}");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.PLANESWALKER}, "{2}{W}{U}");
|
||||
this.subtype.add("Narset");
|
||||
|
||||
this.addAbility(new PlanswalkerEntersWithLoyalityCountersAbility(6));
|
||||
|
@ -226,7 +226,7 @@ class NarsetTranscendentEmblem extends Emblem {
|
|||
|
||||
public NarsetTranscendentEmblem() {
|
||||
|
||||
this.setName("EMBLEM: Narset Transcendent");
|
||||
this.setName("Emblem Narset");
|
||||
|
||||
this.getAbilities().add(new SimpleStaticAbility(Zone.COMMAND, new NarsetTranscendentCantCastEffect()));
|
||||
}
|
||||
|
|
|
@ -67,7 +67,7 @@ public class NissaVitalForce extends CardImpl {
|
|||
}
|
||||
|
||||
public NissaVitalForce(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.PLANESWALKER},"{3}{G}{G}");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.PLANESWALKER}, "{3}{G}{G}");
|
||||
this.subtype.add("Nissa");
|
||||
|
||||
this.addAbility(new PlanswalkerEntersWithLoyalityCountersAbility(5));
|
||||
|
@ -114,9 +114,9 @@ class NissaVitalForceEmblem extends Emblem {
|
|||
|
||||
// You get an emblem with "Whenever a land enters the battlefield under your control, you may draw a card."
|
||||
public NissaVitalForceEmblem() {
|
||||
this.setName("Emblem - Nissa, Vital Force");
|
||||
Ability ability = new EntersBattlefieldAllTriggeredAbility(Zone.COMMAND, new DrawCardSourceControllerEffect(1), new FilterControlledLandPermanent("a land"),
|
||||
this.setName("Emblem Nissa");
|
||||
Ability ability = new EntersBattlefieldAllTriggeredAbility(Zone.COMMAND, new DrawCardSourceControllerEffect(1), new FilterControlledLandPermanent("a land"),
|
||||
true, null, true);
|
||||
getAbilities().add(ability);
|
||||
getAbilities().add(ability);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -62,7 +62,7 @@ import mage.target.common.TargetControlledCreaturePermanent;
|
|||
public class ObNixilisOfTheBlackOath extends CardImpl {
|
||||
|
||||
public ObNixilisOfTheBlackOath(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.PLANESWALKER},"{3}{B}{B}");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.PLANESWALKER}, "{3}{B}{B}");
|
||||
this.subtype.add("Nixilis");
|
||||
|
||||
this.addAbility(new PlanswalkerEntersWithLoyalityCountersAbility(3));
|
||||
|
@ -131,9 +131,8 @@ class ObNixilisOfTheBlackOathEffect1 extends OneShotEffect {
|
|||
class ObNixilisOfTheBlackOathEmblem extends Emblem {
|
||||
|
||||
// You get an emblem with "{1}{B}, Sacrifice a creature: You gain X life and draw X cards, where X is the sacrificed creature's power."
|
||||
|
||||
public ObNixilisOfTheBlackOathEmblem() {
|
||||
this.setName("EMBLEM: Ob Nixilis of the Black Oath");
|
||||
this.setName("Emblem Nixilis");
|
||||
DynamicValue xValue = new SacrificeCostCreaturesPower();
|
||||
Effect effect = new GainLifeEffect(xValue);
|
||||
effect.setText("You gain X life");
|
||||
|
|
|
@ -54,7 +54,7 @@ import mage.target.common.TargetOpponent;
|
|||
public class ObNixilisReignited extends CardImpl {
|
||||
|
||||
public ObNixilisReignited(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.PLANESWALKER},"{3}{B}{B}");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.PLANESWALKER}, "{3}{B}{B}");
|
||||
this.subtype.add("Nixilis");
|
||||
|
||||
this.addAbility(new PlanswalkerEntersWithLoyalityCountersAbility(5));
|
||||
|
@ -94,7 +94,7 @@ public class ObNixilisReignited extends CardImpl {
|
|||
class ObNixilisReignitedEmblem extends Emblem {
|
||||
|
||||
public ObNixilisReignitedEmblem() {
|
||||
setName("EMBLEM: Ob Nixilis Reignited");
|
||||
setName("Emblem Nixilis");
|
||||
|
||||
this.getAbilities().add(new ObNixilisEmblemTriggeredAbility(new LoseLifeSourceControllerEffect(2), false));
|
||||
this.setExpansionSetCodeForImage("BFZ");
|
||||
|
|
|
@ -65,7 +65,7 @@ import mage.target.common.TargetCreaturePermanent;
|
|||
public class SarkhanTheDragonspeaker extends CardImpl {
|
||||
|
||||
public SarkhanTheDragonspeaker(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.PLANESWALKER},"{3}{R}{R}");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.PLANESWALKER}, "{3}{R}{R}");
|
||||
this.subtype.add("Sarkhan");
|
||||
|
||||
this.addAbility(new PlanswalkerEntersWithLoyalityCountersAbility(4));
|
||||
|
@ -166,7 +166,7 @@ class SarkhanTheDragonspeakerEffect extends ContinuousEffectImpl {
|
|||
class SarkhanTheDragonspeakerEmblem extends Emblem {
|
||||
|
||||
SarkhanTheDragonspeakerEmblem() {
|
||||
setName("EMBLEM: Sarkhan, the Dragonspeaker");
|
||||
setName("Emblem Sarkhan");
|
||||
this.setExpansionSetCodeForImage("KTK");
|
||||
|
||||
this.getAbilities().add(new BeginningOfDrawTriggeredAbility(Zone.COMMAND, new DrawCardSourceControllerEffect(2), TargetController.YOU, false));
|
||||
|
|
|
@ -98,6 +98,7 @@ public class SorinLordOfInnistrad extends CardImpl {
|
|||
}
|
||||
|
||||
class VampireToken extends Token {
|
||||
|
||||
VampireToken() {
|
||||
super("Vampire", "1/1 black Vampire creature token with lifelink");
|
||||
cardType.add(CardType.CREATURE);
|
||||
|
@ -112,7 +113,7 @@ class VampireToken extends Token {
|
|||
class SorinLordOfInnistradEmblem extends Emblem {
|
||||
|
||||
public SorinLordOfInnistradEmblem() {
|
||||
this.setName("EMBLEM: Sorin, Lord of Innistrad");
|
||||
this.setName("Emblem Sorin");
|
||||
BoostControlledEffect effect = new BoostControlledEffect(1, 0, Duration.EndOfGame);
|
||||
Ability ability = new SimpleStaticAbility(Zone.COMMAND, effect);
|
||||
this.getAbilities().add(ability);
|
||||
|
|
|
@ -58,7 +58,7 @@ import mage.game.permanent.token.Token;
|
|||
public class SorinSolemnVisitor extends CardImpl {
|
||||
|
||||
public SorinSolemnVisitor(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.PLANESWALKER},"{2}{W}{B}");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.PLANESWALKER}, "{2}{W}{B}");
|
||||
this.subtype.add("Sorin");
|
||||
|
||||
this.addAbility(new PlanswalkerEntersWithLoyalityCountersAbility(4));
|
||||
|
@ -97,7 +97,7 @@ public class SorinSolemnVisitor extends CardImpl {
|
|||
class SorinSolemnVisitorEmblem extends Emblem {
|
||||
|
||||
public SorinSolemnVisitorEmblem() {
|
||||
this.setName("EMBLEM: Sorin, Solemn Visitor");
|
||||
this.setName("Emblem Sorin");
|
||||
Ability ability = new BeginningOfUpkeepTriggeredAbility(Zone.COMMAND, new SacrificeEffect(new FilterCreaturePermanent(), 1, "that player"), TargetController.OPPONENT, false, true);
|
||||
this.getAbilities().add(ability);
|
||||
}
|
||||
|
|
|
@ -85,7 +85,7 @@ public class TamiyoFieldResearcher extends CardImpl {
|
|||
}
|
||||
|
||||
public TamiyoFieldResearcher(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.PLANESWALKER},"{1}{G}{W}{U}");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.PLANESWALKER}, "{1}{G}{W}{U}");
|
||||
this.subtype.add("Tamiyo");
|
||||
|
||||
this.addAbility(new PlanswalkerEntersWithLoyalityCountersAbility(4));
|
||||
|
@ -152,7 +152,7 @@ class TamiyoFieldResearcherEffect1 extends OneShotEffect {
|
|||
}
|
||||
|
||||
class TamiyoFieldResearcherDelayedTriggeredAbility extends DelayedTriggeredAbility {
|
||||
|
||||
|
||||
private int startingTurn;
|
||||
private List<MageObjectReference> creatures;
|
||||
|
||||
|
@ -160,7 +160,7 @@ class TamiyoFieldResearcherDelayedTriggeredAbility extends DelayedTriggeredAbili
|
|||
super(new DrawCardSourceControllerEffect(1), Duration.Custom, false);
|
||||
this.creatures = creatures;
|
||||
this.startingTurn = startingTurn;
|
||||
}
|
||||
}
|
||||
|
||||
public TamiyoFieldResearcherDelayedTriggeredAbility(final TamiyoFieldResearcherDelayedTriggeredAbility ability) {
|
||||
super(ability);
|
||||
|
@ -183,7 +183,7 @@ class TamiyoFieldResearcherDelayedTriggeredAbility extends DelayedTriggeredAbili
|
|||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public boolean isInactive(Game game) {
|
||||
return game.getActivePlayerId().equals(getControllerId()) && game.getTurnNum() != startingTurn;
|
||||
|
@ -205,7 +205,7 @@ class TamiyoFieldResearcherEmblem extends Emblem {
|
|||
|
||||
public TamiyoFieldResearcherEmblem() {
|
||||
|
||||
this.setName("EMBLEM: Tamiyo, Field Researcher");
|
||||
this.setName("Emblem Tamiyo");
|
||||
|
||||
this.getAbilities().add(new SimpleStaticAbility(Zone.COMMAND, new TamiyoFieldResearcherCastingEffect()));
|
||||
}
|
||||
|
|
|
@ -65,7 +65,7 @@ import mage.target.TargetPlayer;
|
|||
public class TamiyoTheMoonSage extends CardImpl {
|
||||
|
||||
public TamiyoTheMoonSage(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.PLANESWALKER},"{3}{U}{U}");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.PLANESWALKER}, "{3}{U}{U}");
|
||||
this.subtype.add("Tamiyo");
|
||||
|
||||
this.addAbility(new PlanswalkerEntersWithLoyalityCountersAbility(4));
|
||||
|
@ -132,7 +132,7 @@ class TappedCreaturesControlledByTargetCount implements DynamicValue {
|
|||
class TamiyoTheMoonSageEmblem extends Emblem {
|
||||
|
||||
public TamiyoTheMoonSageEmblem() {
|
||||
this.setName("EMBLEM: Tamiyo, the Moon Sage");
|
||||
this.setName("Emblem Tamiyo");
|
||||
Ability ability = new SimpleStaticAbility(Zone.COMMAND, new MaximumHandSizeControllerEffect(Integer.MAX_VALUE, Duration.EndOfGame, HandSizeModification.SET));
|
||||
this.getAbilities().add(ability);
|
||||
Effect effect = new ReturnToHandTargetEffect();
|
||||
|
|
|
@ -53,7 +53,7 @@ import mage.target.TargetPermanent;
|
|||
public class TeferiTemporalArchmage extends CardImpl {
|
||||
|
||||
public TeferiTemporalArchmage(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.PLANESWALKER},"{4}{U}{U}");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.PLANESWALKER}, "{4}{U}{U}");
|
||||
this.subtype.add("Teferi");
|
||||
|
||||
this.addAbility(new PlanswalkerEntersWithLoyalityCountersAbility(5));
|
||||
|
@ -89,7 +89,7 @@ class TeferiTemporalArchmageEmblem extends Emblem {
|
|||
|
||||
// "You may activate loyalty abilities of planeswalkers you control on any player's turn any time you could cast an instant."
|
||||
public TeferiTemporalArchmageEmblem() {
|
||||
this.setName("EMBLEM: Teferi, Temporal Archmage");
|
||||
this.setName("Emblem Teferi");
|
||||
this.getAbilities().add(new SimpleStaticAbility(Zone.COMMAND, new ActivateAbilitiesAnyTimeYouCouldCastInstantEffect(LoyaltyAbility.class, "loyalty abilities of planeswalkers you control on any player's turn")));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -27,6 +27,7 @@
|
|||
*/
|
||||
package mage.cards.t;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.LoyaltyAbility;
|
||||
import mage.abilities.common.BeginningOfCombatTriggeredAbility;
|
||||
|
@ -58,8 +59,6 @@ import mage.game.permanent.token.Token;
|
|||
import mage.target.common.TargetArtifactPermanent;
|
||||
import mage.target.common.TargetCreaturePermanent;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* @author JRHerlehy
|
||||
*/
|
||||
|
@ -108,7 +107,7 @@ class TezzeretTheSchemerEmblem extends Emblem {
|
|||
}
|
||||
|
||||
public TezzeretTheSchemerEmblem() {
|
||||
this.setName("EMBLEM: Tezzeret The Schemer");
|
||||
this.setName("Emblem Tezzeret");
|
||||
|
||||
Effect effect = new AddCardTypeTargetEffect(CardType.CREATURE, Duration.EndOfGame);
|
||||
effect.setText("target artifact you control becomes an artifact creature");
|
||||
|
|
|
@ -153,7 +153,7 @@ class VenserTheSojournerEffect extends OneShotEffect {
|
|||
class VenserTheSojournerEmblem extends Emblem {
|
||||
|
||||
public VenserTheSojournerEmblem() {
|
||||
this.setName("EMBLEM: Venser, the Sojourner");
|
||||
this.setName("Emblem Venser");
|
||||
Ability ability = new VenserTheSojournerSpellCastTriggeredAbility(new ExileTargetEffect(), false);
|
||||
Target target = new TargetPermanent();
|
||||
ability.addTarget(target);
|
||||
|
|
|
@ -1,115 +1,116 @@
|
|||
/*
|
||||
* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification, are
|
||||
* permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice, this list of
|
||||
* conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
|
||||
* of conditions and the following disclaimer in the documentation and/or other materials
|
||||
* provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* The views and conclusions contained in the software and documentation are those of the
|
||||
* authors and should not be interpreted as representing official policies, either expressed
|
||||
* or implied, of BetaSteward_at_googlemail.com.
|
||||
*/
|
||||
package mage.cards.z;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.effects.common.CastSourceTriggeredAbility;
|
||||
import mage.abilities.effects.common.CopyEffect;
|
||||
import mage.abilities.effects.common.RevealHandTargetEffect;
|
||||
import mage.cards.Card;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Duration;
|
||||
import mage.constants.Outcome;
|
||||
import mage.constants.Zone;
|
||||
import mage.filter.common.FilterCreatureCard;
|
||||
import mage.game.Game;
|
||||
import mage.players.Player;
|
||||
import mage.target.TargetCard;
|
||||
import mage.target.common.TargetOpponent;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Styxo
|
||||
*/
|
||||
public class ZamWesell extends CardImpl {
|
||||
|
||||
public ZamWesell(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{U}{U}");
|
||||
this.supertype.add("Legendary");
|
||||
this.subtype.add("Shapeshifter");
|
||||
this.subtype.add("Hunter");
|
||||
this.power = new MageInt(2);
|
||||
this.toughness = new MageInt(2);
|
||||
|
||||
// When you cast Zam Wessel, target opponent reveals his or her hand. You may choose a creature card from it and have Zam Wessel enter the battlefield as a copy of that creature card.
|
||||
Ability ability = new CastSourceTriggeredAbility(new RevealHandTargetEffect());
|
||||
ability.addTarget(new TargetOpponent());
|
||||
this.addAbility(ability);
|
||||
}
|
||||
|
||||
public ZamWesell(final ZamWesell card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ZamWesell copy() {
|
||||
return new ZamWesell(this);
|
||||
}
|
||||
}
|
||||
|
||||
class ZamWesselEffect extends OneShotEffect {
|
||||
|
||||
public ZamWesselEffect() {
|
||||
super(Outcome.Benefit);
|
||||
this.staticText = "You may choose a creature card from it and have {this} enter the battlefield as a copy of that creature card";
|
||||
}
|
||||
|
||||
public ZamWesselEffect(final ZamWesselEffect effect) {
|
||||
super(effect);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ZamWesselEffect copy() {
|
||||
return new ZamWesselEffect(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
Player controller = game.getPlayer(source.getControllerId());
|
||||
if (controller != null) {
|
||||
Player targetPlayer = game.getPlayer(getTargetPointer().getFirst(game, source));
|
||||
if (targetPlayer != null) {
|
||||
TargetCard targetCard = new TargetCard(0, 1, Zone.HAND, new FilterCreatureCard());
|
||||
controller.choose(outcome, targetPlayer.getHand(), targetCard, game);
|
||||
Card copyFromCard = game.getCard(targetCard.getFirstTarget());
|
||||
if (copyFromCard != null) {
|
||||
game.informPlayers(controller.getLogName() + " chooses to copy " + copyFromCard.getName());
|
||||
CopyEffect copyEffect = new CopyEffect(Duration.Custom, copyFromCard, source.getSourceId());
|
||||
game.addEffect(copyEffect, source);
|
||||
}
|
||||
}
|
||||
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.cards.z;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.effects.common.CastSourceTriggeredAbility;
|
||||
import mage.abilities.effects.common.CopyEffect;
|
||||
import mage.abilities.effects.common.RevealHandTargetEffect;
|
||||
import mage.cards.Card;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Duration;
|
||||
import mage.constants.Outcome;
|
||||
import mage.constants.Zone;
|
||||
import mage.filter.common.FilterCreatureCard;
|
||||
import mage.game.Game;
|
||||
import mage.players.Player;
|
||||
import mage.target.TargetCard;
|
||||
import mage.target.common.TargetOpponent;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Styxo
|
||||
*/
|
||||
public class ZamWesell extends CardImpl {
|
||||
|
||||
public ZamWesell(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{U}{U}");
|
||||
this.supertype.add("Legendary");
|
||||
this.subtype.add("Shapeshifter");
|
||||
this.subtype.add("Hunter");
|
||||
this.power = new MageInt(2);
|
||||
this.toughness = new MageInt(2);
|
||||
|
||||
// When you cast Zam Wessel, target opponent reveals his or her hand. You may choose a creature card from it and have Zam Wessel enter the battlefield as a copy of that creature card.
|
||||
Ability ability = new CastSourceTriggeredAbility(new RevealHandTargetEffect());
|
||||
ability.addEffect(new ZamWesselEffect());
|
||||
ability.addTarget(new TargetOpponent());
|
||||
this.addAbility(ability);
|
||||
}
|
||||
|
||||
public ZamWesell(final ZamWesell card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ZamWesell copy() {
|
||||
return new ZamWesell(this);
|
||||
}
|
||||
}
|
||||
|
||||
class ZamWesselEffect extends OneShotEffect {
|
||||
|
||||
public ZamWesselEffect() {
|
||||
super(Outcome.Benefit);
|
||||
this.staticText = "You may choose a creature card from it and have {this} enter the battlefield as a copy of that creature card";
|
||||
}
|
||||
|
||||
public ZamWesselEffect(final ZamWesselEffect effect) {
|
||||
super(effect);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ZamWesselEffect copy() {
|
||||
return new ZamWesselEffect(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
Player controller = game.getPlayer(source.getControllerId());
|
||||
if (controller != null) {
|
||||
Player targetPlayer = game.getPlayer(getTargetPointer().getFirst(game, source));
|
||||
if (targetPlayer != null) {
|
||||
TargetCard targetCard = new TargetCard(0, 1, Zone.HAND, new FilterCreatureCard());
|
||||
controller.choose(outcome, targetPlayer.getHand(), targetCard, game);
|
||||
Card copyFromCard = game.getCard(targetCard.getFirstTarget());
|
||||
if (copyFromCard != null) {
|
||||
game.informPlayers(controller.getLogName() + " chooses to copy " + copyFromCard.getName());
|
||||
CopyEffect copyEffect = new CopyEffect(Duration.Custom, copyFromCard, source.getSourceId());
|
||||
game.addEffect(copyEffect, source);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -24,8 +24,7 @@
|
|||
* 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.abilities.effects.common;
|
||||
|
||||
import mage.MageObject;
|
||||
|
@ -37,7 +36,7 @@ import mage.game.command.Emblem;
|
|||
|
||||
/**
|
||||
*
|
||||
* @author nantuko
|
||||
* @author nantuko
|
||||
*/
|
||||
public class GetEmblemEffect extends OneShotEffect {
|
||||
|
||||
|
@ -65,7 +64,7 @@ public class GetEmblemEffect extends OneShotEffect {
|
|||
if (sourceObject == null) {
|
||||
return false;
|
||||
}
|
||||
game.addEmblem(emblem, source);
|
||||
game.addEmblem(emblem, sourceObject, source);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
@ -24,8 +24,7 @@
|
|||
* 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.abilities.effects.common;
|
||||
|
||||
import mage.MageObject;
|
||||
|
@ -71,7 +70,7 @@ public class GetEmblemTargetPlayerEffect extends OneShotEffect {
|
|||
if (toPlayer == null) {
|
||||
return false;
|
||||
}
|
||||
game.addEmblem(emblem, source, toPlayer.getId());
|
||||
game.addEmblem(emblem, sourceObject, toPlayer.getId());
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
@ -25,7 +25,6 @@
|
|||
* authors and should not be interpreted as representing official policies, either expressed
|
||||
* or implied, of BetaSteward_at_googlemail.com.
|
||||
*/
|
||||
|
||||
package mage.abilities.effects.common;
|
||||
|
||||
import mage.MageObject;
|
||||
|
@ -43,11 +42,11 @@ import mage.players.Player;
|
|||
public class RevealHandTargetEffect extends OneShotEffect {
|
||||
|
||||
private final TargetController targetController;
|
||||
|
||||
|
||||
public RevealHandTargetEffect() {
|
||||
this(TargetController.OPPONENT);
|
||||
}
|
||||
|
||||
|
||||
public RevealHandTargetEffect(TargetController targetController) {
|
||||
super(Outcome.Discard);
|
||||
this.targetController = targetController;
|
||||
|
@ -64,7 +63,7 @@ public class RevealHandTargetEffect extends OneShotEffect {
|
|||
Player player = game.getPlayer(source.getFirstTarget());
|
||||
MageObject sourceObject = game.getObject(source.getSourceId());
|
||||
if (player != null && sourceObject != null) {
|
||||
player.revealCards(sourceObject.getName(), player.getHand(), game);
|
||||
player.revealCards(sourceObject.getIdName(), player.getHand(), game);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
|
@ -74,7 +73,7 @@ public class RevealHandTargetEffect extends OneShotEffect {
|
|||
public RevealHandTargetEffect copy() {
|
||||
return new RevealHandTargetEffect(this);
|
||||
}
|
||||
|
||||
|
||||
private String getText() {
|
||||
StringBuilder sb = new StringBuilder("Target ");
|
||||
switch (targetController) {
|
||||
|
|
|
@ -364,9 +364,9 @@ public interface Game extends MageItem, Serializable {
|
|||
|
||||
void addEffect(ContinuousEffect continuousEffect, Ability source);
|
||||
|
||||
void addEmblem(Emblem emblem, Ability source);
|
||||
void addEmblem(Emblem emblem, MageObject sourceObject, Ability source);
|
||||
|
||||
void addEmblem(Emblem emblem, Ability source, UUID toPlayerId);
|
||||
void addEmblem(Emblem emblem, MageObject sourceObject, UUID toPlayerId);
|
||||
|
||||
void addCommander(Commander commander);
|
||||
|
||||
|
|
|
@ -1426,19 +1426,21 @@ public abstract class GameImpl implements Game, Serializable {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void addEmblem(Emblem emblem, Ability source) {
|
||||
addEmblem(emblem, source, null);
|
||||
public void addEmblem(Emblem emblem, MageObject sourceObject, Ability source) {
|
||||
addEmblem(emblem, sourceObject, source.getControllerId());
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param emblem
|
||||
* @param sourceObject
|
||||
* @param toPlayerId controller and owner of the emblem
|
||||
*/
|
||||
@Override
|
||||
public void addEmblem(Emblem emblem, Ability source, UUID toPlayerId) {
|
||||
public void addEmblem(Emblem emblem, MageObject sourceObject, UUID toPlayerId) {
|
||||
Emblem newEmblem = emblem.copy();
|
||||
newEmblem.setSourceId(source.getSourceId());
|
||||
if (toPlayerId == null) {
|
||||
newEmblem.setControllerId(source.getControllerId());
|
||||
} else {
|
||||
newEmblem.setControllerId(toPlayerId);
|
||||
}
|
||||
newEmblem.setSourceObject(sourceObject);
|
||||
newEmblem.setControllerId(toPlayerId);
|
||||
newEmblem.assignNewId();
|
||||
newEmblem.getAbilities().newId();
|
||||
for (Ability ability : newEmblem.getAbilities()) {
|
||||
|
|
|
@ -24,24 +24,26 @@
|
|||
* The views and conclusions contained in the software and documentation are those of the
|
||||
* authors and should not be interpreted as representing official policies, either expressed
|
||||
* or implied, of BetaSteward_at_googlemail.com.
|
||||
*/
|
||||
|
||||
*/
|
||||
package mage.game.command;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageObject;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Viserion, nantuko
|
||||
*/
|
||||
*
|
||||
* @author Viserion, nantuko
|
||||
*/
|
||||
public interface CommandObject extends MageObject {
|
||||
|
||||
UUID getSourceId();
|
||||
|
||||
UUID getControllerId();
|
||||
|
||||
void assignNewId();
|
||||
|
||||
MageObject getSourceObject();
|
||||
|
||||
@Override
|
||||
CommandObject copy();
|
||||
}
|
||||
|
|
|
@ -47,11 +47,11 @@ import mage.util.GameLog;
|
|||
|
||||
public class Commander implements CommandObject {
|
||||
|
||||
private final Card card;
|
||||
private final Card sourceObject;
|
||||
private final Abilities<Ability> abilites = new AbilitiesImpl<>();
|
||||
|
||||
public Commander(Card card) {
|
||||
this.card = card;
|
||||
this.sourceObject = card;
|
||||
abilites.add(new CastCommanderAbility(card));
|
||||
for (Ability ability : card.getAbilities()) {
|
||||
if (!(ability instanceof SpellAbility)) {
|
||||
|
@ -62,21 +62,22 @@ public class Commander implements CommandObject {
|
|||
}
|
||||
|
||||
private Commander(Commander copy) {
|
||||
this.card = copy.card;
|
||||
this.sourceObject = copy.sourceObject;
|
||||
}
|
||||
|
||||
public Card getCard() {
|
||||
return card;
|
||||
@Override
|
||||
public Card getSourceObject() {
|
||||
return sourceObject;
|
||||
}
|
||||
|
||||
@Override
|
||||
public UUID getSourceId() {
|
||||
return card.getId();
|
||||
return sourceObject.getId();
|
||||
}
|
||||
|
||||
@Override
|
||||
public UUID getControllerId() {
|
||||
return card.getOwnerId();
|
||||
return sourceObject.getOwnerId();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -90,12 +91,12 @@ public class Commander implements CommandObject {
|
|||
|
||||
@Override
|
||||
public String getName() {
|
||||
return card.getName();
|
||||
return sourceObject.getName();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getIdName() {
|
||||
return card.getName() + " [" + card.getId().toString().substring(0, 3) + "]";
|
||||
return sourceObject.getName() + " [" + sourceObject.getId().toString().substring(0, 3) + "]";
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -110,22 +111,22 @@ public class Commander implements CommandObject {
|
|||
|
||||
@Override
|
||||
public List<CardType> getCardType() {
|
||||
return card.getCardType();
|
||||
return sourceObject.getCardType();
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> getSubtype(Game game) {
|
||||
return card.getSubtype(game);
|
||||
return sourceObject.getSubtype(game);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasSubtype(String subtype, Game game) {
|
||||
return card.hasSubtype(subtype, game);
|
||||
return sourceObject.hasSubtype(subtype, game);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> getSupertype() {
|
||||
return card.getSupertype();
|
||||
return sourceObject.getSupertype();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -144,42 +145,42 @@ public class Commander implements CommandObject {
|
|||
|
||||
@Override
|
||||
public ObjectColor getColor(Game game) {
|
||||
return card.getColor(game);
|
||||
return sourceObject.getColor(game);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public ObjectColor getFrameColor(Game game) {
|
||||
return card.getFrameColor(game);
|
||||
return sourceObject.getFrameColor(game);
|
||||
}
|
||||
|
||||
@Override
|
||||
public FrameStyle getFrameStyle() {
|
||||
return card.getFrameStyle();
|
||||
return sourceObject.getFrameStyle();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ManaCosts<ManaCost> getManaCost() {
|
||||
return card.getManaCost();
|
||||
return sourceObject.getManaCost();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getConvertedManaCost() {
|
||||
return card.getConvertedManaCost();
|
||||
return sourceObject.getConvertedManaCost();
|
||||
}
|
||||
|
||||
@Override
|
||||
public MageInt getPower() {
|
||||
return card.getPower();
|
||||
return sourceObject.getPower();
|
||||
}
|
||||
|
||||
@Override
|
||||
public MageInt getToughness() {
|
||||
return card.getToughness();
|
||||
return sourceObject.getToughness();
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public int getStartingLoyalty() {
|
||||
return card.getStartingLoyalty();
|
||||
return sourceObject.getStartingLoyalty();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -201,27 +202,27 @@ public class Commander implements CommandObject {
|
|||
|
||||
@Override
|
||||
public UUID getId() {
|
||||
return card.getId();
|
||||
return sourceObject.getId();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getImageName() {
|
||||
return card.getImageName();
|
||||
return sourceObject.getImageName();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getZoneChangeCounter(Game game) {
|
||||
return card.getZoneChangeCounter(game);
|
||||
return sourceObject.getZoneChangeCounter(game);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateZoneChangeCounter(Game game, ZoneChangeEvent event) {
|
||||
card.updateZoneChangeCounter(game, event);
|
||||
sourceObject.updateZoneChangeCounter(game, event);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setZoneChangeCounter(int value, Game game) {
|
||||
card.setZoneChangeCounter(value, game);
|
||||
sourceObject.setZoneChangeCounter(value, game);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -31,6 +31,7 @@ import java.util.ArrayList;
|
|||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.MageObject;
|
||||
import mage.ObjectColor;
|
||||
import mage.abilities.Abilities;
|
||||
import mage.abilities.AbilitiesImpl;
|
||||
|
@ -38,6 +39,7 @@ import mage.abilities.Ability;
|
|||
import mage.abilities.costs.mana.ManaCost;
|
||||
import mage.abilities.costs.mana.ManaCosts;
|
||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||
import mage.cards.Card;
|
||||
import mage.cards.FrameStyle;
|
||||
import mage.constants.CardType;
|
||||
import mage.game.Game;
|
||||
|
@ -53,13 +55,13 @@ public class Emblem implements CommandObject {
|
|||
private static ObjectColor emptyColor = new ObjectColor();
|
||||
private static ManaCosts emptyCost = new ManaCostsImpl();
|
||||
|
||||
private String name;
|
||||
private String name = "";
|
||||
private UUID id;
|
||||
private UUID controllerId;
|
||||
private UUID sourceId;
|
||||
private MageObject sourceObject;
|
||||
private FrameStyle frameStyle;
|
||||
private Abilities<Ability> abilites = new AbilitiesImpl<>();
|
||||
private String expansionSetCodeForImage = null;
|
||||
private String expansionSetCodeForImage = "";
|
||||
|
||||
public Emblem() {
|
||||
this.id = UUID.randomUUID();
|
||||
|
@ -70,8 +72,9 @@ public class Emblem implements CommandObject {
|
|||
this.name = emblem.name;
|
||||
this.frameStyle = emblem.frameStyle;
|
||||
this.controllerId = emblem.controllerId;
|
||||
this.sourceId = emblem.sourceId;
|
||||
this.sourceObject = emblem.sourceObject;
|
||||
this.abilites = emblem.abilites.copy();
|
||||
this.expansionSetCodeForImage = emblem.expansionSetCodeForImage;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -84,9 +87,29 @@ public class Emblem implements CommandObject {
|
|||
this.id = UUID.randomUUID();
|
||||
}
|
||||
|
||||
public void setSourceObject(MageObject sourceObject) {
|
||||
this.sourceObject = sourceObject;
|
||||
if (sourceObject instanceof Card) {
|
||||
if (name.isEmpty()) {
|
||||
name = ((Card) sourceObject).getSubtype(null).toString();
|
||||
}
|
||||
if (expansionSetCodeForImage.isEmpty()) {
|
||||
expansionSetCodeForImage = ((Card) sourceObject).getExpansionSetCode();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public MageObject getSourceObject() {
|
||||
return sourceObject;
|
||||
}
|
||||
|
||||
@Override
|
||||
public UUID getSourceId() {
|
||||
return this.sourceId;
|
||||
if (sourceObject != null) {
|
||||
return sourceObject.getId();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -99,10 +122,6 @@ public class Emblem implements CommandObject {
|
|||
this.abilites.setControllerId(controllerId);
|
||||
}
|
||||
|
||||
public void setSourceId(UUID sourceId) {
|
||||
this.sourceId = sourceId;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return name;
|
||||
|
@ -162,8 +181,8 @@ public class Emblem implements CommandObject {
|
|||
public ObjectColor getColor(Game game) {
|
||||
return emptyColor;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@Override
|
||||
public ObjectColor getFrameColor(Game game) {
|
||||
return emptyColor;
|
||||
}
|
||||
|
@ -187,7 +206,7 @@ public class Emblem implements CommandObject {
|
|||
public MageInt getToughness() {
|
||||
return MageInt.EmptyMageInt;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public int getStartingLoyalty() {
|
||||
return 0;
|
||||
|
|
Loading…
Reference in a new issue